How to write code on your no-toolchain, no-documentation, and no-storage 1990s Chinese <del>totally-legal Famicom game console</del> educational home computer? No worries! You can find useful assembly routines on your own! Just dump the whole BASIC cartridge ROM via PEEK using this handy 6502 decoding script! ​:blobcatfacepalm:​ The next section also gives you a typed-in ROM monitor. Absolutely disastrous learning experience. But you know it's truly only possible on a 6502 - the disassembler fits in just 4 pages. Steve Wozniak is going to either be amazed or have a heart attack if someone told him this was how 1990s home computers worked in China.

第二节 6527 反汇编

为方便读者阅读内存 ROM 中的系统程序,学习编程技巧,现提供一个用 F BASIC 语言编写的 6527 反汇编程序,程序清单见 No. 4-8,本程序适用于任何版本的 F BASIC 语言系统。

在输入程序 No. 4-8 的数据语句行时,要注意每一个助记词中的空格。DATA 语句中的数据是按助记符的字符顺序装入的,如欲加快反汇编的运行速度,可调整 DATA 语句中的数据次序,把最常用的指令靠前放置。注意——DATA 中的数据每三个为一组,第一个为指令代码,第二个为汇编指令格式,第三个为指令的字节数。

5 REM No. 4-8 6527 反汇编
10 CLS: INPUT "输入反汇编首地址 &H"; N$: N= VAL("&" + N$)
20 PRINT : DD=N : GOSUB 2000
30 AA=PEEK(N); I=0; RESTORE
40 SS=N : GOSUB 1000 : N = N + 1
50 READ A$, B$, C : A=VAL("&" + A$) : IF AA=A THEN 80
60 I=I + 1 : IF I < 151 THEN 50
70 BS="??? : C = 1
80 IF C=1 THEN POKE 72, 15: PRINT B$ ; : GOTO 20090 SS=N : GOSUB 1000 : N=N + 1
100 IF C=2 THEN 120
110 SS=N : GOSUB 1000 ; N=N + 1
120 POKE 72, 15
130 FOR K=I TO LEN(B$) : D$=MID$(B$,K,1)
140 IF D$="3" THEN GOSUB 1100
150 IF D$="2" THEN SS=N-1 : GOSUB 1000 ; GOTO 190
160 IF D$="1" THEN SS=N-1 : GOSUB 1000 ; GONO 190
170 IF D$="/" THEN D$=","
180 PRINT D$ ;
190 NEXT
200 H=H+1 : IF H<20 THEN 20
210 PAUSE : H=0 : GOTO 20
1000 SS$=HEX$(PEEK(SS))
1010 IF LEN(SS$)=1 THEN SS$="0" + SS$
1020 PRINT SS$ ; : RETURN
1100 S=VAL("&"+SS$) ; IF S<128 THEN E=N+S A: GOTO 1120
1110 E=N-256+1
1120 DD=E : GOSUB 2000
1130 RETURN 190
2000 DD$=HEX$(DD)
2010 IF LEN(DD$)<4 THEN DD$="0"+DD$ : GOTO 2010
2020 PRINT DD$ "" ; : RETURN
220 DATA 69, ADC #$2,2,6D,ADC $20,3,65,ADC $2,2,61,
    ADC $(2/X),2,71,ADC ($2)/Y,2,75,ADC $2/X,3,7D,
    ADC $20/X,3,79,ADC $21/Y,3,29,AND #$2,2,2D,AND
    $21,3,25,ASD $4,4,41,AND ($2/X),2
230 DATA 31,AND ($2)/Y,2,35,AND $2/X,2,3D,AND $21/X,    3,39,AND $21/Y,3,E,ASL $21,3,6,ASL $2,2,A,ASL,1,
    16,ASL $2/X,2,1E,ASL $21/X,3,90,BCC $3,2,B0,BCS 3,
    2,F0,BEQ $3,2,D0,BNE $3,2,50,BVC $3,2
240 DATA 70,BVS 3,2,30,BMI $3,2,10,BPL $3,2,24,BIT $2,
    2,2C,BIT $21,3,0,BRK,1,18,CLC,1,D8,CLD,1,58,CLI,1,B8,
    CLV,1,C9,CMP #$2,2,CD,CMP $21,3,C1,CMP ($2/
    X),2,D1,CMP ($2)/Y,2,D3,CMP $2/X,2,
250 DATA DD,CMP $21/X,3,D9,CMP $21/Y,3,C5,CMP $2,2,
    E0,CPX #$2,2,E4,CPX $2,2,EC,CPX $21$3,C0,CPY #$
    2,2,C4,CPY $2,2,CC,CPY $21,3,C6,DEC $2,2,D6,DEC 2/
    X,2,CE,DEC $)1,3,DE,DEC $21/X,3
260 DATA CA,DEX,1,88,DEY,1,49,EOR #$2,2,45,EOR $2,2,
    55,EOR $2/X,2,4D,EOR $21,3,5D,EOR $21/X,3,59,EOR
    $21/Y,3,41,EOR ($2/X),2,51,EOR ($2)/Y,2,E6,INC
    $2,2,F6,INC $2/X,2,EE,INC $21,3
270 DATA FE,INC $21/X,3,E8,INX,1,C8,INY,1,4C,JMP $21,
    3,6C,JMP ($21),3,20,JSR $21,3,A9,LDA #$2,2,A5,LDA
    $2,2,B5,LDA $2/X,2,AD,LDA $21,3,BD,LDA $21/X,3,
    B9,LDA $21/Y,3,A1,LDA ($2/X),2,B1,LDA ($2)/Y,2
280 DATA A2,LDX #$2,2,A6,LDX $2,2,B6,LDX $2/Y,2,AE,
    LDX $21,3,BE,LDX $21/Y,3,A0,LDY #$2,A,A4 LDY
    $2,2,B4,LDY $2/X,2,AC,LDY $21,3,BC,LDY $21/X3,
    4A,LSR,1,46,LSR $2,2,56,LSR $2/X,2,4E,LSR $21,3
290 DATA 5E,LSR $21/X,3,EA,NOP,1,9,ORA #$2,2,5,ORA
    $2,2,15,ORA $2/X,2,D,ORA $21,3,1D,ORA $21/X,3,
    19,ORA $21/Y,3,1,ORA ($2/X),2,11,ORA ($2)/Y,2,48,
    PHA,1,8,PHP,1,68,PLA,1,28,PLP,1,2A,ROL,1
300 DATA 26,ROL $2,2,36,ROL $2/X,2,2E,ROL $21,3,3E,
    ROL $21/X,3,6A,ROR,1,66,ROR $2,2,76,ROR $2/X,2,
    6E,ROR $21,3,7E,ROR $21/X,3,40,RTI,1,60,RTS,1,E9
    SDC #$2,2,E5,SBC $2,2,F5,SBC $2/X,2310 DATA ED,SDC $21,3,FD,SDC $21,2,38,SEC,1,F8,SED,1,
    78,SEI,1,85,STA $2,2,95,STA $2/X,2,8D,STA $21,3,
    9D,STA $21/X,3,99,STA $21/Y,3
320 DATA 81,STA ($2/X),2,91,STA ($2)/Y,2,86,STX $2,2,
    96,STX $2/Y,2,8E,STX $21,3,84,STY $2,2,94,STY $2/
    X,2,8C,STY $21,3,AA,TAX,1,A8,TAY,1,BA,STX,1,8A,
    TXA,1,9A,TXS,1,98,TYA,1

程序输入完毕,检查无误后运行程序,根据提示,直接输入十六
进制的反汇编起始地址,回车后即刻开始反汇编。每反汇编二十行
自动暂停,按任一键后继续反汇编。按 STOP 键后停止反汇编。

程序 No. 4-8 可反汇编出任一起始地址的内存程序,其反汇编格
式与中华学习机的小汇编完全相同。
0

If you have a fediverse account, you can quote this note from your own instance. Search https://mk.absturztau.be/notes/aiir6u9wzr9f01xz on your instance and quote it. (Note that quoting is not supported in Mastodon.)