- 注册时间
- 2005-10-6
- 最后登录
- 1970-1-1
|
4_Gray就是切换至硬件4灰度模式的子程序。超级玛莉4灰度版里面用的就是这个。
这几天总发现有人在看这个帖子,我想说:现在4灰度的技术基本已经成熟了,那些汇编代码已经固定了,这个帖子已经没什么用了的…… dragon_ 2008.1.6- 4_Gray:
- JSR L_4017
- JSR L_C004
- RTS
- L_4017:LDA #$60
- STA $05
- STA $0432
- LDA #$20
- ORA #$00 ;原值为#$10,改后可大大降低屏幕闪烁,但还是有一丁点闪……
- STA $0B
- STA $043B
- LDA #$38 ;原值为#$83,可以修改,只要每次递减5,比如设为#$7e、#$79、#$74等。我怀疑这个值与显存地址有一定关系,因为设为#$38时显存地址正好在$1380……
- STA $06
- LDA #$A0 ;原值为#$50,这个应该就是调整行宽的了。但是我试了之后发现只有在值为#$40,#$50,#$A0时方有效。#$40就是让行宽等于16个字节。
- STA $0D
- RTS
- L_C004:PHP
- SEI
- JSR L_CD5B
- PLP
- PHP
- PHA
- LDA $3D
- AND #$FC
- ORA #$03
- STA $3D
- PLA
- PLP
- LDA $043D
- STA $3A
- LDA $043C
- STA $3C
- RTS
- L_CD5B:JSR L_CE62
- LDA #$A6
- STA $50
- JSR L_CE16
- LDA #$A6
- STA $50
- JSR L_CDC0
- JSR L_CDEE
- BCS L_CDA4
- LDX #$00
- L_CD73:LDA L_CEDE,X
- STA $50
- JSR L_CDC0
- JSR L_CDEE
- BCS L_CDA4
- LDA L_CEE8,X
- CPX #$02
- BNE L_CD8D
- LDY $03E9
- LDA L_CEF2,Y
- L_CD8D:STA $50
- JSR L_CDC0
- JSR L_CDEE
- BCS L_CDA4
- INX
- CPX #$0A
- BCC L_CD73
- JSR L_CE38
- JSR L_CDA5
- CLC
- L_CEDD:RTS
- L_CDA4:RTS
- L_CDA5:PHP
- PHA
- LDA $3D
- AND #$FC
- ORA #$03
- STA $3D
- PLA
- PLP
- LDA $3A
- AND #$F3
- ORA #$02
- STA $3A
- LDA $3C
- ORA #$02
- STA $3C
- RTS
- L_CDC0:LDA $3A
- ORA #$0C
- STA $3A
- LDA #$08
- STA $51
- LDA $3C
- L_CDCC:ASL $50
- BCC L_CDD5
- ORA #$08
- JMP L_CDD7
- L_CDD5:AND #$F7
- L_CDD7:AND #$FB
- STA $3C
- JSR L_CF02
- ORA #$04
- STA $3C
- JSR L_CF02
- AND #$FB
- STA $3C
- DEC $51
- BNE L_CDCC
- RTS
- L_CDEE:LDA $3A
- AND #$F7
- ORA #$04
- STA $3A
- JSR L_CF02
- LDA $3C
- ORA #$04
- STA $3C
- JSR L_CF02
- LDA $3C
- AND #$08
- BEQ L_CE0E
- AND #$08
- STA $3C
- SEC
- RTS
- L_CE0E:LDA $3C
- AND #$FB
- STA $3C
- CLC
- RTS
- L_CE16:LDA $3A
- ORA #$0C
- STA $3A
- LDA $3C
- ORA #$0C
- STA $3C
- JSR L_CF02
- LDA $3C
- AND #$F7
- STA $3C
- JSR L_CF02
- LDA $3C
- AND #$F3
- STA $3C
- JSR L_CF02
- RTS
- L_CE38:PHP
- PHA
- LDA $3D
- AND #$FC
- ORA #$03
- STA $3D
- PLA
- PLP
- LDA $3A
- ORA #$0C
- STA $3A
- LDA $3C
- AND #$F3
- STA $3C
- JSR L_CF02
- ORA #$04
- STA $3C
- JSR L_CF02
- ORA #$08
- STA $3C
- JSR L_CF02
- RTS
- L_CE62:LDA $043B
- ORA #$01
- STA $0B
- STA $043B
- LDA $0432
- ORA #$08
- ORA #$04
- ORA #$10
- STA $05
- STA $0432
- LDA #$26
- STA $3E
- LDA #$00
- STA $3F
- PHP
- PHA
- LDA $3D
- AND #$FC
- ORA #$02
- STA $3D
- PLA
- PLP
- LDA #$00
- STA $3C
- PHP
- PHA
- LDA $3D
- AND #$FC
- ORA #$03
- STA $3D
- PLA
- PLP
- LDA $3A
- ORA #$02
- STA $3A
- LDA $3C
- ORA #$02
- STA $3C
- RTS
- L_CF02:PHA
- TXA
- PHA
- L_CF05:TYA
- PHA
- LDX #$80
- L_CF09:NOP
- NOP
- INX
- BNE L_CF09
- PLA
- TAY
- PLA
- TAX
- PLA
- RTS
- L_CEDE:.DB $00,$01,$02,$03,$10,$11,$20,$21,$22,$23
- L_CEE8:.DB $0F,$00,$00,$03,$08,$00,$00,$05,$0A,$0F
- L_CEF2:.DB $01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$0B,$0C,$0D,$0E,$0F,$10
复制代码 简单说明:
$00,$05,$0A,$0F指的是灰度调色板。
$0F,$00,$00,$03,$09……中将03改为02或更小可以大幅提高屏幕亮度。将09改为08,就是灰度模式。
spld803支持32级屏幕亮度。
再增加两个小程序(当然还是仅适用于Tc808的,跟单词精灵学的):
关闭屏幕显示:
lda $0432
and #$f7
sta $0432
sta $05
打开屏幕显示:
lda $0432
ora #$08
sta $0432
sta $05
[ 本帖最后由 dragon_ 于 2009-4-21 22:15 编辑 ] |
|