so i found this BASIC Disassembler:
viewtopic.php?t=9995
and made it hopefullu a 128k BASIC version.
i HOPE its all still functional, 99% sure
if you want to test it and give some comments
I included a line that saves a file to RAMdrive so you can check that in BANK=1.
and i set an #sr for the PRINT , to send it to a printer, but you have to set that manualy at line 13
the more its expended the less ram stay free, although its still 1k shorter then the original...
VAL"" is slow !!
Code: Select all
3 DEF FN a(a)=PEEK a+256*PEEK (a+1)
5 DEF FN a$(d)=CHR$ ((48+d AND d<10)+(55+d AND d>9))
7 DEF FN b(b$)=(CODE b$-48 AND CODE b$<64)+(CODE b$-55 AND CODE b$>64)
9 GO TO VAL "5000"
12 DATA "B","C","D","E","H","L","(HL)","A"
13 LET st=VAL "50": LET e=NOT PI: LET g=NOT e: LET SR=VAL "2"
15 DIM d$(VAL "8",VAL "4"): POKE VAL "23658",VAL "8"
17 FOR j=g TO VAL "8": READ d$(j): NEXT j
50 INPUT "ADDRESS? "'k$: LET j$=k$(g): IF k$="" OR (j$<>"D" AND j$<>"H") THEN GO TO st
52 IF LEN k$<2 OR LEN k$>(5+(j$="D")) THEN GO TO st
54 GO SUB VAL "1400": IF NOT z THEN GO TO st
55 GO SUB VAL "1300"+5*(j$="H")
57 IF ZX THEN INPUT "BANK 1-6:";BANK: IF BANK<E OR BANK>6 THEN GO TO VAL "57"
60 LET PA=E: LET c=e: CLS
75 IF ZX THEN GO SUB VAL "5010"
90 LET c$="": LET b$=""
100 GO SUB VAL "950": GO SUB VAL "980"
110 IF c$(LEN c$-g TO )="ED" THEN GO TO VAL "510"
120 IF c$(LEN c$-g TO )="CB" THEN GO TO VAL "550"
130 IF c$(LEN c$-g TO )="DD" THEN GO TO VAL "590"
140 IF c$(LEN c$-g TO )="FD" THEN GO TO VAL "610"
145 IF c$<"39" AND C$>"0F" THEN IF c$(2)="0" OR c$(2)="8" THEN GO TO VAL "4E3"
160 GO SUB VAL "1100"
185 LET n$="": FOR j=g TO LEN i$: IF i$(j)="#" THEN LET n$=n$+FN a$(j)
190 NEXT j
200 IF n$="" THEN GO TO VAL "340"
210 IF LEN n$=g THEN GO TO VAL "300"
230 GO SUB VAL "980": GO SUB VAL "980"
250 LET b$=c$(LEN c$-g TO )+c$(LEN c$-3 TO LEN c$-2)
270 LET n=FN b(n$(g))
280 LET i$=i$( TO n-g)+b$+(i$(n+g+(LEN n$=2) TO ) AND i$(LEN i$)<>"#")
290 GO TO VAL "350"
310 GO SUB VAL "980"
320 LET b$=c$(LEN c$-g TO )
330 GO TO VAL "270"
350 PRINT #SR; a$;TAB 6;c$;TAB 15;i$
360 LET c=c+g
370 IF c=VAL "22" THEN GO TO VAL "870"
380 IF i$="RST 0028" THEN GO TO VAL "400"
390 GO TO VAL "90"
410 LET c$=""
420 GO SUB VAL "950"
430 GO SUB VAL "980"
440 LET i$="DEFB "+c$
460 PRINT #SR;a$;TAB 6;c$;TAB 15;i$
470 IF c$="38" THEN GO TO VAL "360"
480 LET c=c+g
490 IF c=VAL "22" THEN GO TO VAL "870"
500 GO TO VAL "410"
520 GO SUB VAL "980"
525 LET b=b-VAL "64"
530 RESTORE VAL "2500"+10*INT VAL "b/10"
535 GO SUB VAL "1120"
540 GO TO VAL "170"
553 GO SUB VAL "980"
555 GO SUB VAL "560"
556 GO TO VAL "185"
560 RESTORE VAL "3E3"+10*INT VAL "b/64"
565 LET v=INT VAL "b/8"-8*INT VAL "b/64"
570 FOR j=e TO v: READ l$: NEXT j
571 LET v=b-8*INT VAL "b/8"
572 LET e$=d$(v+g)
575 LET i$=l$+e$(g TO g+VAL "3*(g+v=7)")
580 RETURN
600 LET x$="IX": GO TO VAL "620"
610 LET x$="IY"
620 GO SUB VAL "980"
630 IF c$(LEN c$-g TO )="CB" THEN GO TO VAL "790"
640 GO SUB VAL "1100"
680 LET k=g
690 IF k>LEN i$-g THEN STOP
700 IF i$(k)="H" AND i$(k+1)="L" THEN GO TO 720
710 LET k=k+g: GO TO VAL "690"
720 IF b<=43 OR b=57 OR b>=225 THEN GO TO VAL "760"
730 GO SUB VAL "980"
735 LET u$=""
736 IF k<>LEN i$-g THEN LET u$=i$(k+2 TO )
740 LET i$=i$(g TO k-g)+x$+"+"+c$(LEN c$-g TO )+u$
750 GO TO VAL "185"
762 LET u$=""
764 IF k<>LEN i$-g THEN LET u$=i$(k+2 TO )
770 LET i$=i$(g TO k-g)+x$+u$
780 GO TO VAL "185"
800 GO SUB VAL "980": GO SUB VAL "980"
810 LET b=PEEK (a-g)
820 GO SUB VAL "560"
840 LET i$=i$( TO LEN i$-3)+x$+"+"+c$(5 TO 6)+i$(LEN i$)
850 GO TO VAL "340"
870 PRINT #e;AT e,e;"MORE? (Y/N/C/E) BANK:";BANK: PAUSE PA: LET q$=INKEY$
875 IF q$="E" THEN STOP
880 IF q$="N" THEN GO TO st
882 IF q$="Y" THEN GO TO VAL "890"
884 IF q$="C" THEN IF NOT ZX THEN COPY
885 GO TO VAL "870"
890 IF i$="RST 0028" THEN GO TO VAL "910"
900 IF i$<>"DEFB "+c$ OR c$="38" THEN GO TO VAL "60"
910 CLS : LET c=e
920 GO TO VAL "400"
950 LET a$="": LET r=a: LET k=3
955 LET i=INT VAL "r/(16^k)"
960 LET a$=a$+FN a$(i)
965 LET r=r-VAL "16^k"*i
970 IF NOT K THEN RETURN
975 LET k=k-g: GO TO VAL "955"
980 IF a>FN A(VAL "23732") THEN GO TO VAL "992"
983 LET B=PEEK A: LET i=INT VAL "b/16"
987 LET c$=c$+FN A$(I)+FN a$(b-16*i)
990 LET a=a+g: RETURN
992 PRINT #e;AT e,6;;"ADDRESS EXCEEDS MAXIMUM": BEEP 3,st: LET q$=""
994 IF c THEN PRINT #e;AT g,e;"COPY? Y/N": PAUSE e: LET q$=INKEY$
995 IF q$="Y" THEN COPY
996 GO TO st
1100 IF b>=64 THEN GO TO VAL "1140"
1110 RESTORE VAL "2010"+10*INT VAL "b/10"
1120 FOR j=e TO b-10*INT VAL "b/10": READ i$: NEXT j
1130 RETURN
1140 IF b<=191 THEN GO TO VAL "1180"
1150 RESTORE VAL "2200"+10*INT VAL "(b-192)/10"
1160 FOR j=e TO b-10*INT VAL "(b-192)/10"-192: READ i$: NEXT j
1170 RETURN
1180 RESTORE VAL "2700"+10*INT VAL "(b-64)/64"
1182 LET v=INT VAL "(b-64)/8"-8*INT VAL "(b-64)/64"
1184 FOR j=e TO v: READ l$: NEXT j
1185 LET v=b-64-8*INT VAL "(b-64)/8"
1186 LET e$=d$(g+v)
1190 LET i$=l$+e$(g TO g+VAL "3*(g+v=7)")
1195 IF b=VAL "118" THEN LET i$="HALT"
1200 RETURN
1300 LET a=VAL k$(2 TO ): RETURN
1310 LET a=e: LET a$=k$(2 TO )
1320 FOR j=LEN A$ TO g STEP -g
1340 LET a=a+(16^(LEN A$-j))*FN b(a$(j)): NEXT j: RETURN
1400 FOR k=2 TO LEN k$: LET z=(k$(k)>="0" AND k$(k)<="9"): IF k$(g)="H" THEN LET z=z+(k$(k)>="A" AND k$(k)<="F")
1410 IF z THEN NEXT k
1420 LET z=(k=LEN k$+g): RETURN
2010 DATA "NOP","LD BC,##","LD (BC),A","INC BC","INC B","DEC B","LD B,#","RLCA","EX AF,A'F'","ADD HL,BC"
2020 DATA "LD A,(BC)","DEC BC","INC C","DEC C","LD C,#","RRCA","DJNZ #","LD DE,##","LD (DE),A","INC DE"
2030 DATA "INC D","DEC D","LD D,#","RLA","JR #","ADD HL,DE","LD A,(DE)","DEC DE","INC E","DEC E"
2040 DATA "LD E,#","RRA","JR NZ,#","LD HL,##","LD (##),HL","INC HL","INC H","DEC H","LD H,#","DAA"
2050 DATA "JR Z,#","ADD HL,HL","LD HL,(##)","DEC HL","INC L","DEC L","LD L,#","CP L","JR NC,#","LD SP,##"
2060 DATA "LD (##),A","INC SP","INC (HL)","DEC (HL)","LD (HL),#","SCF","JR C,#","ADD HL,SP","LD A,(##)","DEC SP"
2070 DATA "INC A","DEC A","LD A,#","CCF"
2200 DATA "RET NZ","POP BC","JP NZ,##","JP ##","CALL NZ,##","PUSH BC","ADD A,#","RST 0000","RET Z","RET "
2210 DATA "JP Z,##","","CALL Z,##","CALL ##","ADC A,#","RST 0008,#","RET NC","POP DE","JP NC,##","OUT (#),A"
2220 DATA "CALL NC,##","PUSH DE","SUB #","RST 0010","RET C","EXX","JP C,##","IN A,(#)","CALL C,##","***"
2230 DATA "SBC A,#","RST 0018","RET PO","POP HL","JP PO,##","EX (SP),HL","CALL PO,##","PUSH HL","AND #","RST 0020"
2240 DATA "RET PE","JP (HL)","JP PE,##","EX DE,HL","CALL PE,##","","XOR #","RST 0028","RET P","POP AF"
2250 DATA "JP P,##","DI","CALL P,##","PUSH AF","OR H","RST 0030","RET M","LD SP,HL","JP M,##","EI"
2260 DATA "CALL M,##","***","CP #","RST 0038"
2500 DATA "IN B,(C)","OUT (C),B","SBC HL,BC","LD (##),BC","NEG","RET N","IM 0","LD I,A","IN C,(C)","OUT (C),C"
2510 DATA "ADC HL,BC","LD BC,(##)","","RET I","","LD R,A","IN D,(C)","OUT (C),D","SBC HL,DE","LD (##),DE"
2520 DATA "","","IM 1","LD A,I","IN E,(C)","OUT (C),E","ADC HL,DE","LD DE,(##)","",""
2530 DATA "IM 2","LD A,R","IN H,(C)","OUT (C),H","SBC HL,HL","LD HL,(##)","","","","RRD"
2540 DATA "IN L,(C)","OUT (C),L","ADC HL,HL","LD HL,(##)","","","","RLD","IN F,(C)",""
2550 DATA "SBC HL,SP","LD (##),SP","","","","","IN A,(C)","OUT (C),A","ADC HL,SP","LD SP,(##)"
2590 DATA "","","","","","","LDI","CPI","INI","OUTI"
2600 DATA "","","","","LDD","CPD","IND","OUTD","",""
2610 DATA "","","LDIR","CPIR","INIR","OTIR","","","",""
2620 DATA "LDDR","CPDR","INDR","OTDR"
2700 DATA "LD B,","LD C,","LD D,","LD E,","LD H,","LD L,","LD (HL),","LD A,"
2710 DATA "ADD A,","ADC A,","SUB ","SBC A,","AND ","XOR ","OR ","CP "
3000 DATA "RLC ","RRC ","RL ","RR ","SLA ","SRA ","","SRL "
3010 DATA "BIT 0,","BIT 1,","BIT 2,","BIT 3,","BIT 4,","BIT 5,","BIT 6,","BIT 7,"
3020 DATA "RES 0,","RES 1,","RES 2,","RES 3,","RES 4,","RES 5,","RES 6,","RES 7,"
3030 DATA "SET 0,","SET 1,","SET 2,","SET 3,","SET 4,","SET 5,","SET 6,","SET 7,"
3950 DATA "DJNZ ","JR ","JR NZ,","JR Z,","JR NC,","JR C,"
4000 RESTORE VAL "3950"
4010 FOR j=e TO INT VAL "b/8"-2
4020 READ i$: NEXT j: GO SUB VAL "980"
4030 LET q=a: LET q$=a$
4040 LET a=VAL "a+b-256*(b>127)"
4050 GO SUB VAL "950": LET i$=i$+a$
4060 LET a=q: LET a$=q$: GO TO VAL "350"
5000 LET A=FN A(VAL "23627"): CLEAR VAL "A+1024": LET A=FN A(VAL "23730")+SGN PI: PRINT A
5005 LET ZX=(PEEK VAL "2899"=VAL "159" OR PEEK VAL "2899"=VAL "126"): IF NOT ZX THEN PRINT "48K": BEEP 1,-10: GO TO 10
5006 PRINT "128K": LET RM=0: SAVE !"THIS"+CHR$ (32+RND*96) LINE 1: BEEP 1,-10: GO TO 10
5010 LET RM=16+VAL "134670"(BANK)
5020 POKE VAL "23388",RM: OUT VAL "32765",RM: RETURN
9900 CLEAR : SAVE "SpDisas" LINE 1
9990 REM Spectrum Disassembler
9991 REM by SH Man 1985
9992 REM + WE Thomson 1986
9993 REM + J Grimwood 2004
9994 REM + C Born 2023