调查一下。 我干了一年相关的工作,有共同爱好的话可以聊聊·~~
例子
.ORG $8000 ;from c921 / [4 [9 J6 ?6 X( Q
PHA ;保护A 进堆栈
TXA ;保护X
PHA 9 {, p V7 L8 R. S/ u! d+ f1 |
TYA ;保护Y
PHA % }; q" N( b G& y& v, b6 _$ c: ]
LDA #$01 ; Z7 k3 X4 F% Q+ [# s) w1 j
STA $8000
' f3 L$ ?2 a% J. S- M
;********************************************************* ! B9 W. h" ^: o) w( j: c8 ]: i
LDY #$02 / t0 {* n: v8 e7 n* q {
LDX #$60
LDA #$22 ;写屏幕,从$2200开始,写$60X$02=$C0个
STA $2006
LDA #00 / r2 F) ~9 h) q
STA $2006
LDA #$24 ;屏幕清成$24,空格,写$C0个
jp8 9 W2 L }6 h! v
STA $2007
DEX + e& k# s+ r9 O( _" j- T
BNE jp8
DEY 2 J6 `; h% b2 i
BNE jp8
;**********************************************************
;将test中的数据显示在屏幕上 7 `9 y6 ~) u6 l
LDY #$02 ;每个数据写2次 6 L& h' g; i- b# `( h" Q
LDX #$00
jp7 2 X9 G0 C6 F2 r% m; @7 V5 t8 J& {
LDA text,x ;起始地址为:$220B,放在$20和$21中 , t0 t* j+ /' y2 J% B
STA $20 & B7 |# v# [( N; t
INX ; ?5 Y8 ~% ~2 d& b5 E" M. d
LDA text,x ' W3 X7 X8 _6 e. C
STA $21
INX 6 ~- G4 c# ]7 y( [2 {' W
jp3 & J5 f3 f" I# A* ^, y- B5 z$ d5 `
LDA text,x
CMP #$ff ;数据在$FF终止
BEQ jp5 ;结束
CMP #$fe ;$FE为换行的标志,换行后的2位数是新的一行的地址。(如$224B)
BNE jp6
INX
JMP jp7
6 ?' Z, Z( e6 {( ]) e3 x
jp6 : N$ I& U( R3 i1 h8 p- d9 n
STA $22 ;$22中放要写在屏幕上的数据。 5 P& l8 T/ P; y" ~. B( e6 g
INX
;********************************************************************** 8 k2 ~. V7 X5 r; M
;将准备好的数据写入口地址,看的出是在写汉字:如 70,71 2 m( j% /# n9 Y& l: J2 @0 U
; 72,73
;这样只要一个字$70,就代表一个汉字 " G) W3 z5 M& }6 R4 j& d- l
jp1
LDA $20 ;高位地址 , d2 [9 q+ T6 y% _( T
STA $2006 - G& }2 }, P' v
LDA $21 ;低位地址
STA $2006 . I& V3 U8 I/ ] e9 C
LDA $22 2 [& P' E. ]* x. h
STA $2007 ;写数据
INC $22 - o6 v) r1 ^! _% Z4 w' S- d8 x% s
LDA $22
STA $2007 ;数据+1再写一次
INC $22 8 ]8 d Y1 h1 a: g
DEY ;Y=1 # a: |+ K+ H) I s
BEQ jp2 ;写完一个中文字,准备写下一个中文字 % /& }9 i0 O% K4 Z5 j0 `3 h
3 ~6 Z+ A2 C+ E' [
CLC / B& ]2 y/ o7 e9 ?8 P5 n
LDA $21 ;写屏幕的下面一行,即汉字的下半部
ADC #$20
STA $21 % x, o* r' s( ]( T) h% m
LDA $20 7 A }( c' z6 i* t1 v6 H$ E- ^
ADC #$00
STA $20 , }1 {8 U8 q' G1 d
JMP jp1
, f% j5 R4 y. b8 {$ j1 r% {1 d
4 Z7 E2 L1 }4 V5 H- N' I$ /
jp2 & [2 U9 x( ]' ^$ ~
LDY #$02 ;写第二个中文字
SEC
LDA $21 ;高度退回1E,跟前一个中文字平
SBC #$1e
STA $21
LDA $20
SBC #$00
STA $20 # ^/ B5 E# S, A5 P" {* T
JMP jp3 ;运行JP3直到数据出现$FF结束 * z3 z3 _; L( ~0 r; ?
jp5
LDA #$00 ;清中间变量
STA $20
STA $21
STA $22 / _1 ]9 w" ~; t- i4 T7 f8 K# y6 w
PLA ;推出堆栈 / n5 Y( }1 H$ d* D$ o& b& J5 U d; H' x
TAY & N% c' m* [3 t
PLA 2 B3 f* h8 w2 v# i: [
TAX 7 x. J) h9 [' r3 F$ p" a
PLA 1 ~" r' u, n `$ j p
LDA $0511 4 Z. v6 f+ ~( W" `
JMP $c924
5 P) ^! P$ ^) ?
text
.DB
7 V% D" H! s5 ?+ u
$22,$0b,$70,$78,$7c,$80,$84,$fe,$22,$4b,$70,$78,$7c,$80,$88,$fe,$22,$8b,$74,$78,$7c,$80,$84,$fe,$2
, H6 {. D2 Z6 c2 x* W( D
2,$cb,$74,$78,$7c,$80,$88,$fe,$23,$03,$8c,$90,$94,$8c,$98,$9c,$a0,$fe,$23,$14,$a4,$a8,$ac,$b0,$fe,
$20,$43,$b4,$fe,$20,$4f,$b8,$fe,$20,$5b,$bc,$fe,$23,$4a,$c0,$c4,$c8,$cc,$d0,$d4,$ff
晕了没???
例子
.ORG $8000 ;from c921 / [4 [9 J6 ?6 X( Q
PHA ;保护A 进堆栈
TXA ;保护X
PHA 9 {, p V7 L8 R. S/ u! d+ f1 |
TYA ;保护Y
PHA % }; q" N( b G& y& v, b6 _$ c: ]
LDA #$01 ; Z7 k3 X4 F% Q+ [# s) w1 j
STA $8000
' f3 L$ ?2 a% J. S- M
;********************************************************* ! B9 W. h" ^: o) w( j: c8 ]: i
LDY #$02 / t0 {* n: v8 e7 n* q {
LDX #$60
LDA #$22 ;写屏幕,从$2200开始,写$60X$02=$C0个
STA $2006
LDA #00 / r2 F) ~9 h) q
STA $2006
LDA #$24 ;屏幕清成$24,空格,写$C0个
jp8 9 W2 L }6 h! v
STA $2007
DEX + e& k# s+ r9 O( _" j- T
BNE jp8
DEY 2 J6 `; h% b2 i
BNE jp8
;**********************************************************
;将test中的数据显示在屏幕上 7 `9 y6 ~) u6 l
LDY #$02 ;每个数据写2次 6 L& h' g; i- b# `( h" Q
LDX #$00
jp7 2 X9 G0 C6 F2 r% m; @7 V5 t8 J& {
LDA text,x ;起始地址为:$220B,放在$20和$21中 , t0 t* j+ /' y2 J% B
STA $20 & B7 |# v# [( N; t
INX ; ?5 Y8 ~% ~2 d& b5 E" M. d
LDA text,x ' W3 X7 X8 _6 e. C
STA $21
INX 6 ~- G4 c# ]7 y( [2 {' W
jp3 & J5 f3 f" I# A* ^, y- B5 z$ d5 `
LDA text,x
CMP #$ff ;数据在$FF终止
BEQ jp5 ;结束
CMP #$fe ;$FE为换行的标志,换行后的2位数是新的一行的地址。(如$224B)
BNE jp6
INX
JMP jp7
6 ?' Z, Z( e6 {( ]) e3 x
jp6 : N$ I& U( R3 i1 h8 p- d9 n
STA $22 ;$22中放要写在屏幕上的数据。 5 P& l8 T/ P; y" ~. B( e6 g
INX
;********************************************************************** 8 k2 ~. V7 X5 r; M
;将准备好的数据写入口地址,看的出是在写汉字:如 70,71 2 m( j% /# n9 Y& l: J2 @0 U
; 72,73
;这样只要一个字$70,就代表一个汉字 " G) W3 z5 M& }6 R4 j& d- l
jp1
LDA $20 ;高位地址 , d2 [9 q+ T6 y% _( T
STA $2006 - G& }2 }, P' v
LDA $21 ;低位地址
STA $2006 . I& V3 U8 I/ ] e9 C
LDA $22 2 [& P' E. ]* x. h
STA $2007 ;写数据
INC $22 - o6 v) r1 ^! _% Z4 w' S- d8 x% s
LDA $22
STA $2007 ;数据+1再写一次
INC $22 8 ]8 d Y1 h1 a: g
DEY ;Y=1 # a: |+ K+ H) I s
BEQ jp2 ;写完一个中文字,准备写下一个中文字 % /& }9 i0 O% K4 Z5 j0 `3 h
3 ~6 Z+ A2 C+ E' [
CLC / B& ]2 y/ o7 e9 ?8 P5 n
LDA $21 ;写屏幕的下面一行,即汉字的下半部
ADC #$20
STA $21 % x, o* r' s( ]( T) h% m
LDA $20 7 A }( c' z6 i* t1 v6 H$ E- ^
ADC #$00
STA $20 , }1 {8 U8 q' G1 d
JMP jp1
, f% j5 R4 y. b8 {$ j1 r% {1 d
4 Z7 E2 L1 }4 V5 H- N' I$ /
jp2 & [2 U9 x( ]' ^$ ~
LDY #$02 ;写第二个中文字
SEC
LDA $21 ;高度退回1E,跟前一个中文字平
SBC #$1e
STA $21
LDA $20
SBC #$00
STA $20 # ^/ B5 E# S, A5 P" {* T
JMP jp3 ;运行JP3直到数据出现$FF结束 * z3 z3 _; L( ~0 r; ?
jp5
LDA #$00 ;清中间变量
STA $20
STA $21
STA $22 / _1 ]9 w" ~; t- i4 T7 f8 K# y6 w
PLA ;推出堆栈 / n5 Y( }1 H$ d* D$ o& b& J5 U d; H' x
TAY & N% c' m* [3 t
PLA 2 B3 f* h8 w2 v# i: [
TAX 7 x. J) h9 [' r3 F$ p" a
PLA 1 ~" r' u, n `$ j p
LDA $0511 4 Z. v6 f+ ~( W" `
JMP $c924
5 P) ^! P$ ^) ?
text
.DB
7 V% D" H! s5 ?+ u
$22,$0b,$70,$78,$7c,$80,$84,$fe,$22,$4b,$70,$78,$7c,$80,$88,$fe,$22,$8b,$74,$78,$7c,$80,$84,$fe,$2
, H6 {. D2 Z6 c2 x* W( D
2,$cb,$74,$78,$7c,$80,$88,$fe,$23,$03,$8c,$90,$94,$8c,$98,$9c,$a0,$fe,$23,$14,$a4,$a8,$ac,$b0,$fe,
$20,$43,$b4,$fe,$20,$4f,$b8,$fe,$20,$5b,$bc,$fe,$23,$4a,$c0,$c4,$c8,$cc,$d0,$d4,$ff
晕了没???