Disassembler 6809

From Essential
Revision as of 01:28, 29 July 2010 by 82.227.27.29 (talk)
Jump to navigation Jump to search

{ ' 0 Inhérent ex:$0000 $4C INCA ' 1 Immédiat ex:$0001 $861F LDA #$1F ' 2 Immédiat2 ex:$0002 $CC3000 LDD #$3000 ' 3 Direct ex:$0003 $965C LDA <$5C ' 4 Indexé ex:$0004 $A64B LDA $4B,X ' 5 Etendu ex:$0005 $B64100 LDA $4100 ' 6 Relatif ex:$0006 $2040 BRA $0048 CLEAR mainmenu: init adr%=MALLOC(8192,0) charger a%=adr% b%=&H1F0 l%=10 DO

 desassemble(a%,b%,l%)
 REPEAT
 UNTIL MOUSEK
 PRINT a$;
 b%=b2%

LOOP b%=MFREE(adr%,4096) END > PROCEDURE init

 DIM mnem$(90),mnem|(255),mnem2|(255),d|(255),o|(6)
 FOR x|=0 TO 255
   READ mnem$(x|)
   EXIT IF mnem$(x|)=""
 NEXT x|
 FOR x|=0 TO 255
   READ a$
   a|=VAL("&"+LEFT$(a$,2))
   b|=VAL("&"+RIGHT$(a$,2))
   mnem|(x|)=a|
   mnem2|(x|)=b|
 NEXT x|
 i|=0
 DO
   READ a$,b$
   EXIT IF a$="FIN"
   a|=VAL("&"+a$)
   b|=VAL("&"+b$)
   FOR i|=i| TO b|
     d|(i|)=a|
   NEXT i|
 LOOP
 FOR i%=0 TO 255
   READ a%
   EXIT IF a%=256
   o|(i%)=a%
 NEXT i%
 '
 ' MNEM ascii
 '
 DATA ?,A,AB,ADC,ADD,AND,ASL,ASR,B,BC,BG,BH,BIT,BL,BM,BN,BR,BV,C,CB,CL
 DATA CLR,CMP,COM,CP,D,DA,DE,DEC,E,EOR,EQ,I,IN,INC,J
 DATA LD,LSR,MP,MUL,N,NEG,NOP,O,OR,P,PL,PSH,PUL,ROL,ROR,RT,S,SB,SBC
 DATA SE,SR,ST,SUB,SW,T,TA,TB,TP,TS,TST,TX,V,WA,X,
 '
 ' MNEM code
 '
 '      0    1    2    3    4    5    6    7    8    9    A    B    C    D
 DATA     ,2A46,    ,    ,2519,0619,3D2D,3F01,2145,1B45,1443,3743,1412,3712,1420,3720
 DATA 3501,1301,    ,    ,    ,    ,3D08,3E01,    ,1A01,    ,0201,    ,    ,    ,
 DATA 1001,1028,0B20,0D34,0B34,0934,0F1D,081F,1112,1134,082E,0E20,0A1D,0D3C,0A3C,0D1D
 DATA 4045,2134,3001,3008,1B34,4234,2F01,2F08,3045,3334,0245,3320,2F45,2746,4420,3B20
 DATA 2901,    ,    ,1701,2501,    ,3201,0701,0601,3101,1C01,    ,2201,4101,    ,1501
 DATA 2908,    ,    ,1708,2508,    ,3208,0708,0608,3108,1C08,    ,2208,4108,    ,1508
 DATA 2946,    ,    ,1746,2546,    ,3246,0746,0646,3146,1C46,    ,2246,4146,2326,1546
 DATA 2946,    ,    ,1746,2546,    ,3246,0746,0646,3146,1C46,    ,2246,4146,2326,1546
 DATA 3A01,1601,3601,3A19,0501,0C01,2401,    ,1E01,0301,2C01,0401,1845,0838,2434,
 DATA 3A01,1601,3601,3A19,0501,0C01,2401,3901,1E01,0301,2C01,0401,1845,2338,2434,3934
 DATA 3A01,1601,3601,3A19,0501,0C01,2401,3901,1E01,0301,2C01,0401,1845,2338,2434,3934
 DATA 3A01,1601,3601,3A19,0501,0C01,2401,3901,1E01,0301,2C01,0401,1845,2338,2434,3934
 DATA 3A08,1608,3608,0419,0508,0C08,2408,    ,1E08,0308,2C08,0408,2419,    ,2445,
 DATA 3A08,1608,3608,0419,0508,0C08,2408,3908,1E08,0308,2C08,0408,2419,3919,2445,3945
 DATA 3A08,1608,3608,0419,0508,0C08,2408,3908,1E08,0308,2C08,0408,2419,3919,2445,3945
 DATA 3A08,1608,3608,0419,0508,0C08,2408,3908,1E08,0308,2C08,0408,2419,3919,2445,3945
 '
 ' Mode d'adressage pour chaque code.
 '
 DATA 0,1F,6,2F,0,5F,4,6F,5,7F,1,82,2,83,1,8B,2,8F,3,9F,4,AF,5,BF
 DATA 1,C2,2,C3,1,CB,2,CF,3,DF,4,EF,5,FF,FIN,FIN
 DATA 0,1,2,1,1,2,1,256

RETURN > PROCEDURE charger

 FILESELECT "Read Binary","Charger","",a$
 BLOAD a$,adr%

RETURN > PROCEDURE desassemble(a%,b%,l%)

 b2%=b%
 a$=""
 FOR i%=1 TO l%
   a2%=a%+b2%
   code|=PEEK(a2%)
   mnem|=mnem|(code|)
   mnem2|=mnem2|(code|)
   mnem$=mnem$(mnem|)+mnem$(mnem2|)
   a$=a$+HEX$(b2%,4)+" "
   IF mnem|<>0
     d|=d|(code|)
   ELSE
     d|=0
   ENDIF
   o|=o|(d|)
   FOR i2|=0 TO o|
     a$=a$+FN peek$(a2%+i2|)
   NEXT i2|
   a$=a$+SPACE$(5-2*o|)+mnem$+SPACE$(5-LEN(mnem$))
   INC a2%
   IF d|=1
     a$=a$+"#"+FN peek$(a2%)
   ELSE IF d|=2
     a$=a$+"#"+FN dpeek$(a2%)
   ELSE IF d|=3
     a$=a$+"<"+FN peek$(a2%)
   ELSE IF d|=4
     a$=a$+FN peek$(a2%)+",X"
   ELSE IF d|=5
     a$=a$+FN dpeek$(a2%)
   ELSE IF d|=6
     v&=PEEK(a2%)
     IF v&>127
       SUB v&,256
     ENDIF
     a$=a$+HEX$(b2%+v&+1,4)
   ENDIF
   a$=a$+CHR$(10)
   IF mnem$="RTS" OR mnem$="BRA"
     a$=a$+STRING$(22,"*")+CHR$(10)
   ENDIF
   ADD b2%,o|+1
 NEXT i%
 DEFFN peek$(a%)=HEX$(PEEK(a%),2)
 DEFFN dpeek$(a%)=HEX$(PEEK(a%),2)+HEX$(PEEK(a%+1),2)

RETURN

}