10
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 =""