C 64
Disassembler

Ein besonderer Disassembler

Dieser Disassembler für den C64 arbeitet ausschließlich mit Dezimalzahlen

Bei vielen Hobby-Programmierern besteht der einzige Kontakt zur Maschinensprache im gelegentlichen Eingeben von Basic-Ladern. Da tut man sich insbesondere mit den Hexadezimalzahlen schon mal etwas schwer.

Hier ist nun ein Disassembler, der sowohl Adressen als auch Befehls- und Datenbytes in dezimaler Form ausgibt.

Das Programm ist sehr einfach anzuwenden und erklärt sich im übrigen von selbst, so daß eine weitergehende Beschreibung hier überflüssig ist.

Bei der Adressenabfrage gibt es drei mögliche Eingaben:

  1. Die direkte Anfangsadresse (dezimal)
  2. »W« für weiter
  3. »E« für Ende

Bei der folgenden Frage nach der Ausgabe auf Drucker kann man wählen zwischen:

  1. »J« für Ja = Druckausgabe
  2. »N» für Nein (Return reicht)

Das Programm läuft auf dem C64, kann aber leicht auch für den VC 20 umgeschrieben werden (in Zeile 10 werden nur die Bildschirmfarben eingestellt).

Die verwendeten Steuerzeichen stellen nur Farben dar und können folglich frei gewählt werden.

(Stefan Heine / ev)
|
1 rem dezimal-disassembler
2 rem
3 rem stefan heine
4 rem wiesenredder 1
5 rem 2330 eckernfoerde
6 rem
7 rem
10 poke53280,0:poke53281,0
20 print"{clr}{gry3}         disassembler  1.5"
30 print"            by st.heine"
40 print:print:print
50 print"{yel}* adressen bitte dezimal "
60 print"  eingeben!!!":print
70 print"{grn}* adressen: w=weiter e=ende":print
80 print"* drucker : 'return'=nein"
90 print:print:print
100 rem    copyright * st.heine *
110 dimm$(255),l%(255),f%(255),f1$(12),f2$(12)
120 fori=0to255:readm$(i):next:fori=0to255:readl%(i):next:fori=0to255:readf%(i)
130 next:fori=0to12:readf1$(i),f2$(i):next:pc=0
140 ific=1thengosub360:ic=0
150 input"{lblu}# anfangsadresse";a$
160 input"{gry3}# ausgabe auf drucker";gc$
170 hc$=left$(gc$,1)
180 ifhc$="j"thenic=1
190 j=len(a$):ifj>5then140
200 ifa$="w"then230
210 ifa$="e"then900
220 pc=val(a$)
230 fori=1to24:dz=pc:print"{grn}";:p1=peek(pc)
240 onl%(p1)gosub260,270,330
250 next:goto140
260 printtab(1)"{red}";pc;:printtab(9)"{grn}";p1;:print"{blu}";tab(24);m$(p1):pc=pc+1:return
270 printtab(1)"{red}";pc;:printtab(9)"{grn}";p1;:p2=peek(pc+1):printtab(13)p2;
280 print"{blu}";tab(24)m$(p1);" {lblu}";
290 iff%(p1)=9thenp2=peek(pc+1):ifp2<128thenp2=pc+p2+2:goto310
300 iff%(p1)=9thenp2=pc-(255-p2)+1
310 printf1$(f%(p1));p2;:dz=p2:goto320
320 printf2$(f%(p1)):pc=pc+2:return
330 printtab(1)"{red}";pc;:printtab(9)"{grn}";p1;:p2=peek(pc+1):printtab(14)p2;
340 p3=peek(pc+2):printtab(19)p3;:print"{blu}";tab(24);m$(p1)"{lblu}";:p4=(p3*256)+p2
350 printp4;f1$(f%(p1));:dz=p3*256+p2:printf2$(f%(p1)):pc=pc+3:return
360 open4,4:print#4,chr$(15)
370 vb=1024:vc=55296
380 fori=vbtovb+999step40:p$=""
390 forj=0to39:x=peek(i+j)
400 ifx<32thenx=x+64:goto440
410 ifx<64then440
420 ifx<96thenx=x+32:goto440
430 ifx<128thenx=x+64:goto440
440 p$=p$+chr$(x)
450 next:print#4,p$:next:close4:return
460 rem*** datas befehlsliste ***
470 databrk,ora,???,???,???,ora,asl,???,php,ora,asl,???,???,ora,asl,???
480 databpl,ora,???,???,???,ora,asl,???,clc,ora,???,???,???,ora,asl,???
490 datajsr,and,???,???,bit,and,rol,???,plp,and,rol,???,bit,and,rol,???
500 databmi,and,???,???,???,and,rol,???,sec,and,???,???,???,and,rol,???
510 datarti,eor,???,???,???,eor,lsr,???,pha,eor,lsr,???,jmp,eor,lsr,???
520 databvc,eor,???,???,???,eor,lsr,???,cli,eor,???,???,???,eor,lsr,???
530 datarts,adc,???,???,???,adc,ror,???,pla,adc,ror,???,jmp,adc,ror,???
540 databvs,adc,???,???,???,adc,ror,???,sei,adc,???,???,???,adc,ror,???
550 data???,sta,???,???,sty,sta,stx,???,dey,???,txa,???,sty,sta,stx,???
560 databcc,sta,???,???,sty,sta,stx,???,tya,sta,txs,???,???,sta,???,???
570 dataldy,lda,ldx,???,ldy,lda,ldx,???,tay,lda,tax,???,ldy,lda,ldx,???
580 databcs,lda,???,???,ldy,lda,ldx,???,clv,lda,tsx,???,ldy,lda,ldx,???
590 datacpy,cmp,???,???,cpy,cmp,dec,???,iny,cmp,dex,???,cpy,cmp,dec,???
600 databne,cmp,???,???,???,cmp,dec,???,cld,cmp,???,???,???,cmp,dec,???
610 datacpx,sbc,???,???,cpx,sbc,inc,???,inx,sbc,nop,???,cpx,sbc,inc,???
620 databeq,sbc,???,???,???,sbc,inc,???,sed,sbc,???,???,???,sbc,inc,???
630 rem*** datas 1,2 oder 3 bit ***
640 data1,2,1,1,1,2,2,1,1,2,1,1,1,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1
650 data3,2,1,1,2,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1
660 data1,2,1,1,1,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1
670 data1,2,1,1,1,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1
680 data1,2,1,1,2,2,2,1,1,1,1,1,3,3,3,1,2,2,1,1,2,2,2,1,1,3,1,1,1,3,1,1
690 data2,2,2,1,2,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,2,2,2,1,1,3,1,1,3,3,3,1
700 data2,2,1,1,2,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1
710 data2,2,1,1,2,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1
720 rem*** datas befehlart (zeichen)***
730 data0,10,0,0,0,4,4,0,0,2,1,0,0,3,3,0
740 data9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0
750 data3,10,0,0,4,4,4,0,0,2,1,0,3,3,3,0
760 data9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0
770 data0,10,0,0,0,4,4,0,0,2,1,0,3,3,3,0
780 data9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0
790 data0,10,0,0,0,4,4,0,0,2,1,0,12,3,3,0
800 data9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0
810 data0,10,0,0,4,4,4,0,0,0,0,0,3,3,3,0
820 data9,11,0,0,5,5,6,0,0,8,0,0,0,7,0,0
830 data2,10,2,0,4,4,4,0,0,2,0,0,3,3,3,0
840 data9,11,0,0,5,5,6,0,0,8,0,0,7,7,8,0
850 data2,10,0,0,4,4,4,0,0,2,0,0,3,3,3,0
860 data9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0
870 data2,10,0,0,4,4,4,0,0,2,0,0,3,3,3,0
880 data9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0
890 data,,,,#,,,,,,,",x",,",y",,",x",,",y",,,(,",x)",(,"),y",(,),
900 end
  1 REM DEZIMAL-DISASSEMBLER 
  2 REM 
  3 REM STEFAN HEINE 
  4 REM WIESENREDDER 1 
  5 REM 2330 ECKERNFOERDE 
  6 REM 
  7 REM 
 10 POKE 53280,0:POKE 53281,0 
 20 PRINT"{CLR,GREY3,9SPACE}DISASSEMBLER{2SPACE}1.5" 
 30 PRINT"{12SPACE}BY ST.HEINE" 
 40 PRINT:PRINT:PRINT 
 50 PRINT"{YELLOW}* ADRESSEN BITTE DEZIMAL " 
 60 PRINT"{2SPACE}EINGEBEN!!!":PRINT 
 70 PRINT"{GREEN}* ADRESSEN: W=WEITER E=ENDE":PRINT 
 80 PRINT"* DRUCKER : 'RETURN'=NEIN" 
 90 PRINT:PRINT:PRINT 
 100 REM    COPYRIGHT * ST.HEINE * 
 110 DIM M$(255),L%(255),F%(255),F1$(12),F2$(12) 
 120 FOR I=0 TO255:READ M$(I):NEXT :FOR I=0 TO255:READ L%(I):NEXT :FOR I=0 TO255:READ F%(I) 
 130 NEXT :FOR I=0 TO12:READ F1$(I),F2$(I):NEXT :PC=0 
 140 IF IC=1 THENGOSUB 360:IC=0 
 150 INPUT"{LIG.BLUE}# ANFANGSADRESSE";A$ 
 160 INPUT"{GREY3}# AUSGABE AUF DRUCKER";GC$ 
 170 HC$=LEFT$ (GC$,1) 
 180 IF HC$="J" THENIC=1 
 190 J=LEN (A$):IF J>5 THEN140 
 200 IF A$="W" THEN230 
 210 IF A$="E" THEN900 
 220 PC=VAL (A$) 
 230 FOR I=1 TO24:DZ=PC:PRINT"{GREEN}";:P1=PEEK (PC) 
 240 ON L%(P1)GOSUB 260,270,330 
 250 NEXT :GOTO 140 
 260 PRINTTAB( 1)"{RED}";PC;:PRINTTAB( 9)"{GREEN}";P1;:PRINT"{BLUE}";TAB( 24);M$(P1):PC=PC+1:RETURN 
 270 PRINTTAB( 1)"{RED}";PC;:PRINTTAB( 9)"{GREEN}";P1;:P2=PEEK (PC+1):PRINTTAB( 13)P2; 
 280 PRINT"{BLUE}";TAB( 24)M$(P1);"{SPACE,LIG.BLUE}"; 
 290 IF F%(P1)=9 THENP2=PEEK (PC+1):IF P2<128 THENP2=PC+P2+2:GOTO 310 
 300 IF F%(P1)=9 THENP2=PC-(255-P2)+1 
 310 PRINTF1$(F%(P1));P2;:DZ=P2:GOTO 320 
 320 PRINTF2$(F%(P1)):PC=PC+2:RETURN 
 330 PRINTTAB( 1)"{RED}";PC;:PRINTTAB( 9)"{GREEN}";P1;:P2=PEEK (PC+1):PRINTTAB( 14)P2; 
 340 P3=PEEK (PC+2):PRINTTAB( 19)P3;:PRINT"{BLUE}";TAB( 24);M$(P1)"{LIG.BLUE}";:P4=(P3*256)+P2 
 350 PRINTP4;F1$(F%(P1));:DZ=P3*256+P2:PRINTF2$(F%(P1)):PC=PC+3:RETURN 
 360 OPEN 4,4:PRINT#4,CHR$ (15) 
 370 VB=1024:VC=55296 
 380 FOR I=VB TOVB+999STEP 40:P$="" 
 390 FOR J=0 TO39:X=PEEK (I+J) 
 400 IF X<32 THENX=X+64:GOTO 440 
 410 IF X<64 THEN440 
 420 IF X<96 THENX=X+32:GOTO 440 
 430 IF X<128 THENX=X+64:GOTO 440 
 440 P$=P$+CHR$ (X) 
 450 NEXT :PRINT#4,P$:NEXT :CLOSE 4:RETURN 
 460 REM *** DATAS BEFEHLSLISTE *** 
 470 DATA BRK,ORA,???,???,???,ORA,ASL,???,PHP,ORA,ASL,???,???,ORA,ASL,??? 
 480 DATA BPL,ORA,???,???,???,ORA,ASL,???,CLC,ORA,???,???,???,ORA,ASL,??? 
 490 DATA JSR,AND,???,???,BIT,AND,ROL,???,PLP,AND,ROL,???,BIT,AND,ROL,??? 
 500 DATA BMI,AND,???,???,???,AND,ROL,???,SEC,AND,???,???,???,AND,ROL,??? 
 510 DATA RTI,EOR,???,???,???,EOR,LSR,???,PHA,EOR,LSR,???,JMP,EOR,LSR,??? 
 520 DATA BVC,EOR,???,???,???,EOR,LSR,???,CLI,EOR,???,???,???,EOR,LSR,??? 
 530 DATA RTS,ADC,???,???,???,ADC,ROR,???,PLA,ADC,ROR,???,JMP,ADC,ROR,??? 
 540 DATA BVS,ADC,???,???,???,ADC,ROR,???,SEI,ADC,???,???,???,ADC,ROR,??? 
 550 DATA ???,STA,???,???,STY,STA,STX,???,DEY,???,TXA,???,STY,STA,STX,??? 
 560 DATA BCC,STA,???,???,STY,STA,STX,???,TYA,STA,TXS,???,???,STA,???,??? 
 570 DATA LDY,LDA,LDX,???,LDY,LDA,LDX,???,TAY,LDA,TAX,???,LDY,LDA,LDX,??? 
 580 DATA BCS,LDA,???,???,LDY,LDA,LDX,???,CLV,LDA,TSX,???,LDY,LDA,LDX,??? 
 590 DATA CPY,CMP,???,???,CPY,CMP,DEC,???,INY,CMP,DEX,???,CPY,CMP,DEC,??? 
 600 DATA BNE,CMP,???,???,???,CMP,DEC,???,CLD,CMP,???,???,???,CMP,DEC,??? 
 610 DATA CPX,SBC,???,???,CPX,SBC,INC,???,INX,SBC,NOP,???,CPX,SBC,INC,??? 
 620 DATA BEQ,SBC,???,???,???,SBC,INC,???,SED,SBC,???,???,???,SBC,INC,??? 
 630 REM *** DATAS 1,2 ODER 3 BIT *** 
 640 DATA 1,2,1,1,1,2,2,1,1,2,1,1,1,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1 
 650 DATA 3,2,1,1,2,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1 
 660 DATA 1,2,1,1,1,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1 
 670 DATA 1,2,1,1,1,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1 
 680 DATA 1,2,1,1,2,2,2,1,1,1,1,1,3,3,3,1,2,2,1,1,2,2,2,1,1,3,1,1,1,3,1,1 
 690 DATA 2,2,2,1,2,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,2,2,2,1,1,3,1,1,3,3,3,1 
 700 DATA 2,2,1,1,2,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1 
 710 DATA 2,2,1,1,2,2,2,1,1,2,1,1,3,3,3,1,2,2,1,1,1,2,2,1,1,3,1,1,1,3,3,1 
 720 REM *** DATAS BEFEHLART (ZEICHEN)*** 
 730 DATA 0,10,0,0,0,4,4,0,0,2,1,0,0,3,3,0 
 740 DATA 9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0 
 750 DATA 3,10,0,0,4,4,4,0,0,2,1,0,3,3,3,0 
 760 DATA 9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0 
 770 DATA 0,10,0,0,0,4,4,0,0,2,1,0,3,3,3,0 
 780 DATA 9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0 
 790 DATA 0,10,0,0,0,4,4,0,0,2,1,0,12,3,3,0 
 800 DATA 9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0 
 810 DATA 0,10,0,0,4,4,4,0,0,0,0,0,3,3,3,0 
 820 DATA 9,11,0,0,5,5,6,0,0,8,0,0,0,7,0,0 
 830 DATA 2,10,2,0,4,4,4,0,0,2,0,0,3,3,3,0 
 840 DATA 9,11,0,0,5,5,6,0,0,8,0,0,7,7,8,0 
 850 DATA 2,10,0,0,4,4,4,0,0,2,0,0,3,3,3,0 
 860 DATA 9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0 
 870 DATA 2,10,0,0,4,4,4,0,0,2,0,0,3,3,3,0 
 880 DATA 9,11,0,0,0,5,5,0,0,8,0,0,0,7,7,0 
 890 DATA ,,,,#,,,,,,,",X",,",Y",,",X",,",Y",,,(,",X)",(,"),Y",(,), 
 900 END 
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →