10 REM > Monitor
   20 ONERRORREPORT:PRINTERL:PROCend:END
   30 os%=FNfx(0,1):MODEFNmode:DIM ctrl%31,data%15,zp%3:X%=ctrl%:Y%=X%DIV256
   40 blen%=HIMEM-LOMEM-&480+&C00*(PAGE>&8000):buf%=HIMEM-blen%:HIMEM=buf%
   50 hex%=TRUE:dmp%=0:ny%=0:dd$="isassembl":io%=FNfx(130,0)=&FFFF
   60 E%=E%AND3:Z%=Z%AND3:D%=1+((D%-1)AND7):ONERRORIFFNerr:PROCend:END
   70 PROCSetScr:REPEATX%=ctrl%:Y%=X%DIV256:PROCaddr:UNTILFNmenu:PROCend:END
   80 DEFFNline(addr%):PRINTFNho(addr%-O%,D%);" ";:!data%=!addr%:data%!4=addr%!4
   90 IFio%:IFaddr%<0:FORB%=0TO7:data%?B%=FNrm(addr%+B%):NEXT
  100 IFdmp%:FORB%=0TO7:PRINTFNho(data%?B%,2)" ";:NEXT:FORB%=0TO7:PRINTFNc(data%?B%);:NEXT:PRINT:=addr%+8
  110 N%=FNDis_Code(M%,addr%-O%,data%)
  120 IFZ%=0:FORB%=0TON%-1:PRINTFNho(data%?B%,2);" ";:NEXT
  130 IFZ%=1:FORB%=0TON%-1STEP2:PRINTFNho(data%!B%,4);" ";:NEXT
  140 IFZ%=3:FORB%=0TON%-1STEP4:PRINTFNho(data%!B%,N%*2);" ";:NEXT
  150 PRINTTAB(13+D%);:FORB%=0TON%-1:PRINTFNc(data%?B%);:NEXT
  160 PRINTSPC(18+D%-POS);FNaddr($(X%+4)):IF(X%?2AND64):PRINT
  170 =addr%+N%
  180 DEFFNmenu:CLS:IFFNDis_Name(M%)="":M%=FNcpu:PROCSetScr
  190 PROCtop:addr%=FNline(P%):num%=addr%-P%
  200 REPEATaddr%=FNline(addr%):UNTILVPOS>hgh%-1+8*(wid%<40)
  210 REPEATQ$=GET$:V%=VPOS:IFQ$>"`" AND Q$<"{":Q$=CHR$(ASCQ$-32)
  220   IFQ$=" ":addr%=FNline(addr%):PRINTTAB(0,2 AND (hgh%>19));:P%=P%+num%:num%=FNline(P%)-P%
  230 UNTILINSTR(CHR$13+CHR$9+CHR$127+"+;-=GPQWSMHJOLTYZNR*0123456789ABCDEFX",Q$)
  240 IFQ$=CHR$13:P%=P%+1:=0
  250 IFQ$=CHR$127:P%=P%-1:=0
  260 IFQ$="+"ORQ$=";":P%=P%+8:=0
  270 IFQ$="-"ORQ$="=":P%=P%-8:=0
  280 IFQ$="Q":dmp%=dmp%EOR2:=0
  290 IFQ$="W":D%=4+((D%-3)MOD5):=0
  300 IFQ$="H":hex%=NOThex%:=0
  310 IFQ$="J":Z%=(Z%+1)AND3:=0
  320 IFQ$="M":INPUT"Address: &"A$:IFA$="":P%=buf%:O%=P%:=0 ELSEIFQ$="M":P%=EVAL("&"+A$)+O%:=0
  330 IFQ$="O":PROCo:PROCtop:=0
  340 IFQ$="L":PROClist(FALSE):=0
  350 IFQ$="S" ANDos%:PROCmode:=0
  360 IFQ$="T":PRINTB$;:INPUT"Text: "Q$:A%=?(P%+LENQ$):$(P%)=Q$:?(P%+LENQ$)=A%:P%=P%+LENQ$:=0
  370 IFQ$="Y":PRINTB$;:INPUT"Message: "Q$:A%=?(P%+LENQ$):$P%=Q$:?(P%+LENQ$)=A%:?(P%-1+LENQ$)=&80 OR ?(P%-1+LENQ$):?(P%+LENQ$)=A%:P%=P%+LENQ$:=0
  380 IFQ$="Z":M%=FNcpu:PROCSetScr:=0
  390 IFQ$="N":E%=(E%+1)AND3:=0
  400 IFQ$="R" ANDos%:PROCrom:=0
  410 IFQ$="*":PROCosc:CLS:PROCSetScr:=0
  420 IFQ$="G":INPUT"Get file: "A$:IFA$<>"":OSCLI"LOAD "+A$+" "+STR$~buf%+LEFT$("+"+STR$~blen%,os%=32):=0
  430 IFQ$="P":INPUT"Put file: "A$:IFA$<>"":INPUT"Length: &"Q$:OSCLI"SAVE "+A$+" "+STR$~buf%+"+"+Q$:=0
  440 IF(Q$>"/" AND Q$<":")OR(Q$>"@" AND Q$<"G"):PROCbyte(Q$):=0
  450 =Q$="X"
  460 DEFPROCo:INPUT"Address for code address 0000: &"A$:IFA$="":A$=STR$~buf%
  470 IFLEFT$(A$,1)="=":O%=P%-EVAL("&"+MID$(A$,2)):ENDPROC
  480 A%=P%-O%:O%=EVAL("&"+A$):P%=O%+A%:ENDPROC
  490 DEFPROClist(T%)
  500 INPUT"Start address: &"A$:IFA$="":addr%=P% ELSE addr%=EVAL("&"+A$)+O%
  510 INPUT"End address: &"A$:IFA$="":end%=addr%+&8000 ELSE end%=EVAL("&"+A$)+O%
  520 INPUT"Address for code address 0000: &"A$:IFA$<>"":O%=EVAL("&"+A$)
  530 OSCLI"FX3":REPEATaddr%=FNline(addr%):UNTILaddr%>end%:OSCLI"FX3,16":ENDPROC
  540 DEFPROCbyte(Q$):PRINT"Bytes: &";Q$;
  550 REPEAT:A%=GET:IFA%>96:A%=A%AND&DF
  560   IFA%=95 AND Q$<>"":VDU127:Q$=LEFT$(Q$,LEN Q$-1)
  570   IF((A%>47 AND A%<58) OR (A%>64 AND A%<71)) AND LEN Q$<30:VDUA%:Q$=Q$+CHR$A%
  580 UNTILA%=13:IFQ$<>"":REPEAT:?P%=EVAL("&"+LEFT$(Q$,2)):P%=P%+1:Q$=MID$(Q$,3):UNTILLENQ$<2
  590 ENDPROC
  600 DEFPROCrom:INPUT"ROM: &"A$:IFA$="":P%=P%AND&FFFFFF:ENDPROC
  610 P%=(P%AND&FFFF)OR&FF000000 OR 65536*EVAL("&F"+A$):ENDPROC
  620 DEFPROCmode:INPUT"Mode: "A$:IFA$="":ENDPROC
  630 Q%=EVAL(A$)OR&80:IFos%<6:IFFNfx(130,0)=&FFFF:IFFNfx(133,Q%)<HIMEM:ENDPROC
  640 VDU22,Q%:PROCSetScr:IFwid%<39:VDU22,&87:PROCSetScr
  650 ENDPROC
  660 DEFPROCosc:IFwid%>40:VDU26,31,0,hgh%
  670 REPEAT:INPUTLINE"*"A$:OSCLI A$:UNTIL A$="":IFhgh%<20:CLS:PROCSetScr
  680 ENDPROC
  690 DEFFNaddr(A$):PROCname:IFhex%:=A$
  700 A%=INSTR(A$,"&"):IFA%=0:=A$
  710 L%=A%:REPEATL%=L%+1:UNTILINSTR("0123456789ABCDEF",MID$(A$,L%,1))=0 OR L%>LENA$
  720 =LEFT$(A$,A%)+"o"+FNo0(EVAL(MID$(A$,A%,L%-A%+1)),(L%-A%-1)*3/2)+MID$(A$,L%)
  730 DEFPROCname:IFE%=0:ENDPROC ELSE A%=INSTR(A$,"&FF"):IFA%=0:ENDPROC
  740 L%=EVAL(MID$(A$,A%,5))-&FFCE:IFL%<0 OR L%>43:ENDPROC
  750 IF((L%MOD3-(L%>27))MOD3-3*(L%=24)+(L%>24 AND L%<28)-3*(L%=27)-(L%=28)):ENDPROC
  760 IF(E%AND2):A$=A$+" :\ ":IF(E%AND1):A%=LENA$+1
  770 A$=LEFT$(A$,A%-1)+"OS"+MID$("FINDGBPBBPUTBGETARGSFILERDCHASCINEWLWRCRWRCHWORDBYTE_CLI",(L%DIV3)*4+1,4)+MID$(A$,A%+5):IFE%=2:A$=A$+"&"+STR$~(L%+&FFCE)
  780 ENDPROC
  790 DEFPROCtop:IFhgh%>20:VDU30:PRINT"Memory: &";FNh0(P%-O%,D%)SPC(19-POS);"Origin: &";FNh0(O%,D%+1);SPC(39-POS)'"Buffer: &"~buf%;SPC(19-POS)"Buffer size: &"~blen%'SPC(39):ENDPROC
  800 VDU28,47,hgh%,wid%,0:PRINTTAB(9,2);FNh0(P%-O%,D%+1);TAB(9,3);FNh0(O%,D%+1):VDU28,0,hgh%,45,0:ENDPROC
  810 DEFPROCSetScr:OSCLI"FX3,16":VDU3,26:C$=CHR$132:B$=CHR$135:wid%=79:hgh%=31:!X%=0:A$=FNDis_Name(M%):A%=X%?3:D%=(A%AND3)*2+4:Z%=(A%AND12)DIV4:hex%=(A%AND16)=0
  820 IFos%<32:wid%=FNbyte(160,10,0)-FNbyte(160,8,0)AND&FF:hgh%=FNbyte(160,9,0)-FNbyte(160,11,0)AND&FF
  830 IFhgh%<20 OR wid%>40:VDU28,47,hgh%,wid%,0:IFhgh%<20:PRINT"** "A$" D"dd$"er **"''"Memory: &";FNh0(P%-O%,D%+1)'"Origin: &";FNh0(O%,D%+1)'"Buffer addr: &";~buf%'"Buffer size: &";~blen%:VDU28,0,hgh%,45,0:ENDPROC
  840 W%=wid%+46*(wid%>40):PRINTSTRING$(W%/4-LENA$/2+(ny%>9)-(W%<40),"*");" ";A$;" D"dd$"er ";ny%;" ";STRING$(W%-POS,"*"):IFwid%<40:PRINTTAB(0,hgh%-6);
  850 IFwid%<40:PRINTC$"RETURN"B$"forward 1"SPC4;C$"+"B$"forward 8"SPC7;C$"DELETE"B$"back 1"SPC7;C$"-"B$"back 8"'C$"L"B$"List d"dd$"y  "C$"Q"B$"DUMP/LIST"SPC7;
  860 IFwid%<40:PRINTC$"M"B$"Set Memory address"C$"O"B$"Set code origin"'C$"T"B$"Enter text"SPC8;C$"Y"B$"Enter message   ";C$"Z"B$"Set machine"SPC4;C$"SPACE"B$"Move past code";:VDU28,0,hgh%-7,wid%,1:ENDPROC
  870 PRINT"RETURN forward 1    + forward 8"'"DELETE backward 1   - backward 8"'"SPACE  move past code"''"M: Set memory address"'"O: Set code origin"'"N: Display named labels"'"W: Address width"'"Q: Dump/List"'
  880 PRINT"0-9, A-F: Enter bytes"'"T: Enter text"'"Y: Enter message"'"L: List d"dd$"y"'"G: Get to buffer"'"P: Put from buffer":IFos%:PRINT"Z: Set machine"
  890 PRINT"S: Screen mode"'"R: Rom number"'"X: Exit";
  900 VDU28,0,hgh%,45,0
  910 ENDPROC
  920 DEFFNcpu:IFFNDis_Name(0)<>"":=M%
  930 CLS:PRINTSPC(7)"Microprocessor Menu"'
  940 RESTORE:READ A%,A$:REPEAT
  950   PRINT;A%;":";TAB(4+(POS DIV20)*20);A$;TAB(20 AND(POS<20));
  960   READ A%,A$:UNTILA%=0:REPEATREPEAT:INPUT'"Enter CPU number: "cpu%:UNTILcpu%
  970   A%=FNDis_Name(cpu%)="":IFA%:PRINT"No d"dd$"y routine for this CPU"
  980 UNTILNOTA%:CLS:=cpu%
  990 DATA 2,6502,8,8008,9,6809,11,PDP11,12,6512,18,80186,28,80286,30,OGGIN
 1000 DATA 32,32016,38,80386,44,ARM,48,80486,58,80586,65,6502/6512
 1010 DATA 68,68x00 Series,80,Z80,85,8080/8085,86,80x86 Series
 1020 DATA 89,INS8900,94,9440 series,99,9900,0,*
 1030 DEFFNerr:IFERR<0:P%=P%DIV2:O%=O%DIV2:=INKEY(os%>0)
 1040 REPORT:IFERR<>17:IFGET
 1050 IFINKEY(os%>0):PRINT" at line ";ERL ELSE CLS
 1060 =INKEY(os%>0)
 1070 DEFPROCend:OSCLI"FX3":ON ERROR END
 1080 VDU26:PRINTTAB(0,hgh%);:*QUIT
 1090 ENDPROC
 1100 DEFPROCaddr:IFos%=32:IFP%<PAGE OR P%>HIMEM+blen%:P%=buf%
 1110 ENDPROC
 1120 DEFFNmode:IFos%=6:IFPAGE>&7FFF:=MODE ELSE =(FNbyte(135,0,0)DIV256)OR&80
 1130 DEFFNho(A%,N%):IFhex%:=FNh0(A%,N%) ELSE =FNo0(A%,N%*1.5)
 1140 DEFFNc(A%):A%=A%AND127:IFA%=127 OR A%<32:="." ELSE =CHR$A%
 1150 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
 1160 DEFFNo0(A%,N%):A%=A%AND&FFFF:=RIGHT$("00000"+CHR$(48+((A%DIV32768)AND7))+CHR$(48+((A%DIV4096)AND7))+CHR$(48+((A%DIV512)AND7))+CHR$(48+((A%DIV64)AND7))+CHR$(48+((A%DIV8)AND7))+CHR$(48+(A%AND7)),N%)
 1170 DEFFNbyte(A%,X%,Y%)=((USR&FFF4)AND&FF00)DIV256
 1180 DEFFNfx(A%,X%):LOCAL Y%:Y%=X%DIV256:=((USR&FFF4)AND&FFFF00)DIV256
 1190 DEFFNrm(!&F6):LOCAL Y%:Y%=?&F8 EOR &F0:IF?&F8<&80:IF?&F7>&BF:?&F9=0
 1200 IF!&F6<0:IF?&F7>&7F OR Y%=&E:=(USR&FFB9)AND&FF ELSE =?!&F6
 1210 DEFFNDis_Code(c%,a%,d%):!X%=&200C:X%?2=c%:X%!4=a%:X%!8=!d%:X%!12=d%!4
 1220 A%=190:CALL&FFF1:IFX%?3=0:$(X%+4)="EQUB &"+FNh0(X%?8,2):X%?3=1
 1230 =X%?3
 1240 DEFFNDis_Name(c%):!X%=&2008:X%?2=c%:X%!4=0:A%=190:CALL&FFF1
 1250 IFX%!4:=$(X%+4) ELSE =""