becouse off the basic disassembler from mr Man, 1985,
viewtopic.php?t=10187
i now write a disassembler checker wich just build a long BIN file with all the documented codes.
its a simple and pragmatic aproach i gues. just repeat the byte as long as needed
by using the value of the code as a value its easy to see it in the list.
this is an example result with above disassembler, beneath its the "build" for the MCtest.BIN
now i HOPE you will ...
test this test file. if you have that possibility?
it should function as a list for every Z80 disassembler and i hope its realy complete !
Code: Select all
7FE6 00 NOP
7FE7 010101 LD BC,0101
7FEA 02 LD (BC),A
7FEB 03 INC BC
7FEC 04 INC B
7FED 05 DEC B
7FEE 0606 LD B,06
7FF0 07 RLCA
7FF1 08 EX AF,A'F'
7FF2 09 ADD HL,BC
7FF3 0A LD A,(BC)
7FF4 0B DEC BC
7FF5 0C INC C
7FF6 0D DEC C
7FF7 0E0E LD C,0E
7FF9 0F RRCA
7FFA 1010 DJNZ 800C
7FFC 111111 LD DE,1111
7FFF 12 LD (DE),A
8000 13 INC DE
8001 14 INC D
8002 15 DEC D
8003 1616 LD D,16
8005 17 RLA
8006 1818 JR 8020
8008 19 ADD HL,DE
8009 1A LD A,(DE)
800A 1B DEC DE
800B 1C INC E
800C 1D DEC E
800D 1E1E LD E,1E
800F 1F RRA
Code: Select all
10 DEF FN A(A)=PEEK A+VAL "256"*PEEK VAL "A+1"
20 DEF FN m(m)=(((m/16)-INT (m/16))*16)
30 DEF FN A$(A)=CHR$ (48+A+7*(A>9))
40 DEF FN H$(A)=FN A$(INT (A/16))+FN A$(FN M(A))
60 PRINT " This routine creates a BIN FILEas list of MC opcodes that will be saved."
70 PRINT '"It will POKE the opcode number and if the opcode needs a VALUE,the momentary opcode number is used as that value."
80 PRINT '"Those equal numbers are easy to check.Only the Documented opcodeare used and saved at 30000 witha length of 1423 bytes."
90 PRINT '"UNdocumented opcodes are skippedand need a file for themselves"'
100 PRINT ' INVERSE 1;TAB 31;" "'TAB 31;" "'TAB 9;"press any key";TAB 31;" "'TAB 31;" "'TAB 31;" "
110 PAUSE 0: CLEAR VAL "29999": LET r=FN A(VAL "23730")+SGN PI: LET scr=VAL "23692"
111 LET ST=VAL "2": LET PR=VAL "660": LET X$=""
120 LET a=r: LET cb=VAL "203": LET dd=VAL "221": LET ed=VAL "237": LET fd=VAL "253"
130 PRINT INVERSE 1;"00-FF"
140 FOR h=NOT PI TO VAL "255": POKE scr,-1
150 IF h=cb OR h=dd OR h=ed OR h=fd THEN NEXT h
160 LET H$=FN H$(H): LET z=NOT PI: LET y=Z: LET x=Z
170 IF H=1 OR H=17 OR H=33 OR H=34 OR H=42 OR H=49 OR H=50 OR H=58 OR H=194 OR H=195 OR H=196 OR H=202 OR H=203 OR H=204 OR H=205 OR H= 210 OR H=212 OR H=218 OR H=220 OR H=226 OR H=228 OR H=234 OR H=236 OR H=242 OR H=244 OR H=250 OR H=252 THEN LET z=1
180 IF H=6 OR H=14 OR H=16 OR H=22 OR H=24 OR H=30 OR H=32 OR H=38 OR H=40 OR H=46 OR H=48 OR H=54 OR H=56 OR H=62 OR H=198 OR H=206 OR H=211 OR H=214 OR H=219 OR H=222 OR H=230 OR H=238 OR H=254 THEN LET y=1
190 IF z THEN POKE A,H: LET A=A+1: LET X$=X$+H$
200 IF y OR z THEN POKE A,H: LET A=A+1: LET X$=X$+H$
210 POKE A,h: LET A=A+1: LET X$=X$+H$
220 IF h=239 THEN POKE A,56: LET A=A+1
230 GO SUB PR: NEXT h
240 PRINT INVERSE 1;"CBxx"
250 FOR h=NOT PI TO VAL "255": IF h=cb OR (h>=48 AND h<=55) THEN NEXT h
260 POKE scr,-1
270 POKE A,cb: POKE A+1,h: LET A=A+2: LET X$=X$+FN H$(cb)+FN H$(H): GO SUB PR: NEXT h
280 PRINT INVERSE 1;"DDxx": POKE scr,-1
290 LET xx=dd: GO SUB 490
300 PRINT INVERSE 1;"DDCBxx": POKE scr,-1
310 GO SUB 600
320 PRINT INVERSE 1;"EDxx": POKE scr,-1
330 FOR h=64 TO 187: LET z=1: LET y=0: LET x=0: IF h=124 THEN LET h=160
340 LET H$=FN H$(H)
350 IF h=78 OR h=80 OR h=84 OR h=85 OR h=92 OR h=93 OR (h>=100 AND h<=102) OR (h>=108 AND h<=110) OR h=113 OR (h>=116 AND h<=120) THEN LET z=0
360 IF (h>=164 AND h<=167) OR (h>=172 AND h<=175) OR (h>=180 AND h<=183) THEN LET z=0
370 IF h=67 OR h=75 OR h=83 OR h=91 OR h=99 OR h=107 OR h=115 OR h=123 THEN LET y=1
380 IF h=97 THEN LET x=1
390 IF z THEN POKE a,ed: POKE a+1,h: LET a=a+2: LET X$=X$+FN h$(ed)+h$
400 IF y OR x THEN POKE a,h: LET A=A+1: LET X$=X$+h$
410 IF y THEN POKE a,h: LET a=a+1: LET X$=X$+h$
420 IF x OR y OR z THEN PRINT
430 GO SUB PR: NEXT h
440 PRINT INVERSE 1;"FDxx": POKE scr,-1
450 LET xx=fd: GO SUB 490
460 PRINT INVERSE 1;"FDCBxx": POKE scr,-1
470 GO SUB 600
480 GO TO 650
490 FOR h=0 TO 255: IF h=cb THEN NEXT h
500 LET H$=FN H$(H): LET z=0: LET y=z: LET x=z: LET M=FN M(H)
510 IF h=9 OR h=25 OR h=35 OR h=41 OR h=43 OR h=57 OR h=126 OR h=134 OR h=142 OR h=150 OR h=158 OR h=166 OR h=174 OR h=182 OR h=190 OR h=225 OR h=227 OR h=229 OR h=233 OR h=249 THEN LET z=1
520 IF h=52 OR h=53 OR (h>=112 AND h<=117) OR H=119 THEN LET y=1
530 IF (M=6 OR M=14) AND ((h>=70 AND h<=110) OR (H>=126 AND H<=190)) THEN LET y=1
540 IF h=33 OR h=34 OR h=42 OR h=54 THEN LET x=1
550 IF z OR y OR x THEN POKE A,xx: POKE VAL "A+1",h: LET A=VAL "A+2": LET X$=X$+FN H$(xx)+H$
560 IF x OR y THEN POKE a,h: LET a=a+1: LET X$=X$+H$
570 IF x THEN POKE a,h: LET a=a+1: LET X$=X$+H$
580 IF x OR y OR z THEN PRINT
590 GO SUB PR: NEXT h: RETURN
600 FOR h=NOT PI TO 255: IF H=54 THEN NEXT H
610 LET z=FN m(h): LET z=(z=6 OR z=14)
620 IF z THEN POKE a,xx: POKE a+1,cb: POKE a+2,H: POKE a+3,h: LET a=a+4
630 IF z THEN LET X$=X$+FN h$(xx)+FN h$(cb)+FN h$(z)+FN h$(h)
640 GO SUB PR: NEXT h: RETURN
650 SAVE d*"MCtest.BIN"CODE r,a-r: STOP
660 IF X$<>"" THEN PRINT #ST;X$: IF ST<>2 THEN PRINT #2;X$
670 LET X$="": RETURN
680 CLEAR : SAVE d*"MClist33"
690 POKE @5,255: POKE @10,0: POKE @11,0: LPRINT : LPRINT : LLIST : LPRINT