[退隐作][最后的教程]
Contra (J) PPU写入程序作者:FlameCyclone
时间:2017.2.12
按键跳转:
C1EF:95 F5 94 F1
C1EF:20 70 FB EA
滚动偏移:
F936:A5 FD 8D 05 20 A5 FC 8D 05 20
F936:20 C0 FB EA EA EA EA EA EA EA
背景调色板:
CF20:9D C0 07
CF20:20 A0 FB
PPU BANK号:
C8C9:9D F4 07
C8C9:20 B0 FB
按键跳转:
FB70: 95 F5 94 F1 48 8A 48 98 48 A5 FF 29 7F 8D 00 20
AD 00 80 48 A0 00 20 21 FB 20 00 A0 68 A8 C8 20
21 FB A5 FF 8D 00 20 68 A8 68 AA 68 60 FF FF FF
背景调色板:
FBA0: 48 AD FF 7F C9 FF D0 02 68 60 68 9D C0 07 60 FF
PPU BANK号:
FBB0: 48 AD FF 7F C9 FF D0 02 68 60 68 9D F4 07 60 FF
滚动偏移:
FBC0: AD FF 7F C9 FF D0 09 A9 00 8D 05 20 8D 05 20 60
A5 FD 8D 05 20 A5 FC 8D 05 20 60 60 FF FF FF FF
切BANK后A000:
A5 FF 29 7F 8D 00 20 AD 02 20 A5 25 C9 01 D0 0A B5 F5 29 CF F0 04 20 8C A2 60 48 8A 48 98 48 A5 25 C9 01 D0 07 AD 0A 01 C9 00 F0 03 4C AC A1 AD FF 7F C9 FF D0 19 AD A0 7F C9 00 D0 0B A9 FF 8D A0 7F 20 3A A1 4C AC A1 AD FF 7F C9 00 D0 DD AD 02 20 A9 00 8D 01 20 A2 00 A9 FF 8D FF 7F 8D A0 7F 20 6A A0 20 3A A1 4C AC A1 A5 FE 8D 50 7F A9 08 85 FE A2 00 BD C0 07 9D 00 7F E8 E0 40 90 F5 A2 00 A9 00 9D F4 07 E8 E0 04 90 F6 A2 00 BD 2A A1 9D C0 07 E8 E0 10 90 F5 A9 3F 8D 06 20 A9 00 8D 06 20 A2 00 BD 2A A1 8D 07 20 E8 E0 10 90 F5 A2 00 A0 00 A5 BD 48 A5 BC 48 A5 BB 48 A5 BA 48 A5 B9 48 A5 B8 48 A9 00 85 B8 85 B9 85 BA 85 BB 85 BC 85 BD A9 00 85 BA A9 20 85 BB A9 00 85 BC A9 60 85 BD A5 BB C9 28 D0 06 A5 BA C9 00 F0 27 A5 BB 8D 06 20 A5 BA 8D 06 20 AD 07 20 AD 07 20 91 BC A9 00 8D 00 20 E8 E6 BA E6 BC E0 00 D0 D4 E6 BB E6 BD 4C E4 A0 68 85 B8 68 85 B9 68 85 BA 68 85 BB 68 85 BC 68 85 BD 60 0F 28 28 28 0F 28 28 28 0F 28 28 28 0F 28 28 28 A5 BD 48 A5 BC 48 A5 BB 48 A5 BA 48 A5 B9 48 A5 B8 48 A9 00 85 B8 85 B9 85 BA 85 BB 85 BC 85 BD 8D 01 20 A2 00 A0 00 A9 00 85 BA A9 20 85 BB A5 BB C9 28 D0 06 A5 BA C9 00 F0 20 A5 BB 8D 06 20 A5 BA 8D 06 20 A9 00 8D 07 20 A9 00 8D 00 20 E8 E6 BA E0 00 D0 D9 E6 BB 4C 69 A1 EA 68 85 B8 68 85 B9 68 85 BA 68 85 BB 68 85 BC 68 85 BD 20 8D A2 60 68 A8 68 AA 68 A5 25 C9 00 F0 12 A5 25 C9 01 D0 0B B5 F5 29 EF F0 05 A9 00 8D A0 7F 60 AD FF 7F C9 FF D0 F8 A9 00 8D 01 20 A5 BD 48 A5 BC 48 A5 BB 48 A5 BA 48 A5 B9 48 A5 B8 48 A9 00 85 B8 85 B9 85 BA 85 BB 85 BC 85 BD A9 00 8D FF 7F A2 00 A0 00 A9 00 85 BA A9 20 85 BB A9 00 85 BC A9 60 85 BD A5 BD C9 68 D0 06 A5 BC C9 00 F0 24 A5 BD 8D 06 20 A5 BC 8D 06 20 B1 BC 8D 07 20 A9 00 8D 00 20 E8 E6 BA E6 BC E0 00 D0 D7 E6 BB E6 BD 4C 0E A2 A2 00 BD 00 7F 9D C0 07 E8 E0 40 90 F5 A2 00 A9 3F 8D 06 20 A9 00 8D 06 20 BD C0 07 8D 07 20 E8 E0 10 90 F5 AD 02 20 A5 FD 8D 05 20 A5 FC 8D 05 20 AD 50 7F 85 FE A9 00 8D 00 20 68 85 B8 68 85 B9 68 85 BA 68 85 BB 68 85 BC 68 85 BD 60 60 20 B9 A2 20 C0 CB 20 DE A2 20 FD A2 60 20 42 92 8B 8D 95 80 8C A3 80 90 96 8B 97 8F 8D A3 8D 96 99 98 8F 80 93 98 80 83 81 82 88 FF A2 00 AD 9A A2 8D 03 07 E8 BD 9A A2 8D 04 07 20 91 A5 BD 9C A2 C9 FF F0 08 9D 05 07 E8 A9 00 F0 F1 20 AB A5 60 20 28 A3 20 C0 CB 20 56 A3 20 C0 CB 20 7D A3 20 C0 CB 20 BE A3 20 C0 CB 20 EF A3 20 C0 CB 60 20 3B A4 20 C0 CB 20 69 A4 20 C0 CB 20 90 A4 20 C0 CB 20 D1 A4 20 C0 CB 20 02 A5 20 C0 CB 60 20 A3 9A 96 8B A3 8F 9C 80 81 82 FF A2 00 AD 1C A3 8D 03 07 E8 BD 1C A3 8D 04 07 20 91 A5 BD 1E A3 C9 FF F0 08 9D 05 07 E8 A9 00 F0 F1 20 AB A5 60 20 E3 9C 8F 96 93 90 8F FF A2 00 AD 4D A3 8D 03 07 E8 BD 4D A3 8D 04 07 20 91 A5 BD 4F A3 C9 FF F0 08 9D 05 07 E8 A9 00 F0 F1 20 AB A5 60 20 EA A2 00 AD 7B A3 8D 03 07 E8 BD 7B A3 8D 04 07 20 91 A5 A5 32 20 42 A5 AD 03 7A 8D 05 07 EE 05 07 AD 04 7A 8D 06 07 EE 06 07 AD 05 7A 8D 07 07 EE 07 07 A2 03 20 AB A5 60 21 23 A1 8F 8B 9A 99 98 FF A2 00 AD B5 A3 8D 03 07 E8 BD B5 A3 8D 04 07 20 91 A5 BD B7 A3 C9 FF F0 08 9D 05 07 E8 A9 00 F0 F1 20 AB A5 60 21 2A 00 01 02 03 04 98 97 90 9D 96 A2 00 AD E3 A3 8D 03 07 E8 BD E3 A3 8D 04 07 20 91 A5 A2 00 A5 AA 29 10 F0 07 A9 9D 8D 05 07 D0 05 A9 8D 8D 05 07 A5 AA 29 0F DD E5 A3 D0 06 BD EA A3 8D 06 07 E8 E0 05 90 EC A2 02 20 AB A5 60 20 B3 9A 96 8B A3 8F 9C 80 81 83 FF A2 00 AD 2F A4 8D 03 07 E8 BD 2F A4 8D 04 07 20 91 A5 BD 31 A4 C9 FF F0 08 9D 05 07 E8 A9 00 F0 F1 20 AB A5 60 20 F3 9C 8F 96 93 90 8F FF A2 00 AD 60 A4 8D 03 07 E8 BD 60 A4 8D 04 07 20 91 A5 BD 62 A4 C9 FF F0 08 9D 05 07 E8 A9 00 F0 F1 20 AB A5 60 20 FA A2 00 AD 8E A4 8D 03 07 E8 BD 8E A4 8D 04 07 20 91 A5 A5 33 20 42 A5 AD 03 7A 8D 05 07 EE 05 07 AD 04 7A 8D 06 07 EE 06 07 AD 05 7A 8D 07 07 EE 07 07 A2 03 20 AB A5 60 21 33 A1 8F 8B 9A 99 98 FF A2 00 AD C8 A4 8D 03 07 E8 BD C8 A4 8D 04 07 20 91 A5 BD CA A4 C9 FF F0 08 9D 05 07 E8 A9 00 F0 F1 20 AB A5 60 21 3A 00 01 02 03 04 98 97 90 9D 96 A2 00 AD F6 A4 8D 03 07 E8 BD F6 A4 8D 04 07 20 91 A5 A2 00 A5 AA 29 10 F0 07 A9 9D 8D 05 07 D0 05 A9 8D 8D 05 07 A5 AB 29 0F DD F8 A4 D0 06 BD FD A4 8D 06 07 E8 E0 05 90 EC A2 02 20 AB A5 60 8D 00 7A A9 00 8D 03 7A 8D 04 7A 8D 05 7A AD 00 7A 8D 01 7A AD 01 7A C9 64 90 13 AD 01 7A 38 E9 64 8D 01 7A EE 03 7A AD 01 7A C9 64 B0 ED AD 01 7A C9 0A 90 13 AD 01 7A 38 E9 0A 8D 01 7A EE 04 7A AD 01 7A C9 0A B0 ED AD 01 7A 8D 05 7A 60 A2 00 A5 FF 29 01 D0 09 AD 03 07 29 FB 8D 03 07 60 AD 03 07 09 04 8D 03 07 60 85 21 8E 01 07 A9 00 9D 05 07 A9 01 8D 00 07 8D 02 07 60 FF FF
6502 simulator:
PPU写入程序:
.ORG $A000
CSP = $80
C0 = $81
C1 = $82
C2 = $83
C3 = $84
C4 = $85
C5 = $86
C6 = $87
C7 = $88
C8 = $89
C9 = $8A
CA = $8B
CB = $8C
CC = $8D
CD = $8E
CE = $8F
CF = $90
CG = $91
CH = $92
CI = $93
CJ = $94
CK = $95
CL = $96
CM = $97
CN = $98
CO = $99
CP = $9A
CQ = $9B
CR = $9C
CS = $9D
CT = $9E
CU = $9F
CV = $A0
CW = $A1
CX = $A2
CY = $A3
CZ = $A4
CEND = $FF
CMP_RE:
LDA $FF
AND #$7F
STA $2000
LDA $2002
LDA $25
CMP #$01
BNE PROREG
LDA $F5,X
AND #$CF
BEQ PROREG
JSR PPU_CMP
C_RE:
RTS
PROREG:
PHA
TXA
PHA
TYA
PHA
LDA $25
CMP #$01
BNE RE
LDA $010A
CMP #$00
BEQ P1
RE:
JMP PPUWRITE
P1: ; 条件判断
LDA $7FFF
CMP #$FF
BNE P1RP
LDA $7FA0
CMP #$00
BNE P1CMP
LDA #$FF
STA $7FA0
JSR CLEANA
JMP PPUWRITE
P1CMP:
LDA $7FFF
CMP #$00
BNE RE
P1RP:
LDA $2002
LDA #$00
STA $2001
LDX #$00
LDA #$FF
STA $7FFF
STA $7FA0
JSR COPYPPU
PIRP2:
JSR CLEANA
JMP PPUWRITE
COPYPPU:
LDA $FE
STA $7F50
LDA #$08
STA $FE
L0:
LDX #$00
COPY_07C0_07DF:
LDA $07C0,X
STA $7F00,X
INX
CPX #$40
BCC COPY_07C0_07DF
LDX #$00
PPU_07F4_07F7:
LDA #$00
STA $07F4,X
INX
CPX #$04
BCC PPU_07F4_07F7
LDX #$00
COLOR:
LDA COLOR_DATA,X
STA $07C0,X
INX
CPX #$10
BCC COLOR
PPU_COLOR:
LDA #$3F
STA $2006
LDA #$00
STA $2006
LDX #$00
PPU_COLOR_W:
LDA COLOR_DATA,X
STA $2007
INX
CPX #$10
BCC PPU_COLOR_W
LDX #$00
LDY #$00
LDA $BD
PHA
LDA $BC
PHA
LDA $BB
PHA
LDA $BA
PHA
LDA $B9
PHA
LDA $B8
PHA
LDA #$00
STA $B8
STA $B9
STA $BA
STA $BB
STA $BC
STA $BD
LDA #$00
STA $BA
LDA #$20
STA $BB
LDA #$00
STA $BC
LDA #$60
STA $BD
L1: ; PPU复制
LDA $BB
CMP #$28
BNE L2
LDA $BA
CMP #$00
BEQ PROADPLA
L2:
LDA $BB
STA $2006
LDA $BA
STA $2006
L3:
LDA $2007
LDA $2007
STA ($BC),Y
L4:
LDA #$00
STA $2000
INX
INC $BA
INC $BC
CPX #$00
BNE L1
INC $BB
INC $BD
JMP L1
PROADPLA: ;出栈
PLA
STA $B8
PLA
STA $B9
PLA
STA $BA
PLA
STA $BB
PLA
STA $BC
PLA
STA $BD
CPRE:
RTS
CLEANA: ; PPU清空
LDA $BD
PHA
LDA $BC
PHA
LDA $BB
PHA
LDA $BA
PHA
LDA $B9
PHA
LDA $B8
PHA
LDA #$00
STA $B8
STA $B9
STA $BA
STA $BB
STA $BC
STA $BD
STA $2001
LDX #$00
LDY #$00
LDA #$00
STA $BA
LDA #$20
STA $BB
CL1:
LDA $BB
CMP #$28
BNE CL2
LDA $BA
CMP #$00
BEQ FREEWRIYE
CL2:
LDA $BB
STA $2006
LDA $BA
STA $2006
CL3:
LDA #$00
STA $2007
CL4:
LDA #$00
STA $2000
INX
INC $BA
CPX #$00
BNE CL1
INC $BB
JMP CL1
FREEWRIYE:
NOP
CLEANF: ; 恢复现场
PLA
STA $B8
PLA
STA $B9
PLA
STA $BA
PLA
STA $BB
PLA
STA $BC
PLA
STA $BD
CLRF:
JSR FREE_PPU
RTS
PPUWRITE: ;PPU写回
PLA
TAY
PLA
TAX
PLA
LDA $25
CMP #$00
BEQ WP1
LDA $25
CMP #$01
BNE WRE
LDA $F5,X
AND #$EF
BEQ WRE
LDA #$00
STA $7FA0
WRE:
RTS
WP1:
LDA $7FFF
CMP #$FF
BNE WRE
LDA #$00
STA $2001
LDA $BD
PHA
LDA $BC
PHA
LDA $BB
PHA
LDA $BA
PHA
LDA $B9
PHA
LDA $B8
PHA
LDA #$00
STA $B8
STA $B9
STA $BA
STA $BB
STA $BC
STA $BD
LDA #$00
STA $7FFF
WL0:
LDX #$00
LDY #$00
LDA #$00
STA $BA
LDA #$20
STA $BB
LDA #$00
STA $BC
LDA #$60
STA $BD
WL1:
LDA $BD
CMP #$68
BNE WL2
LDA $BC
CMP #$00
BEQ WLR
WL2:
LDA $BD
STA $2006
LDA $BC
STA $2006
WL3:
LDA ($BC),Y
STA $2007
WL4:
LDA #$00
STA $2000
INX
INC $BA
INC $BC
CPX #$00
BNE WL1
INC $BB
INC $BD
JMP WL1
WLR:
LDX #$00
COPY_7F00_7F3F:
LDA $7F00,X
STA $07C0,X
INX
CPX #$40
BCC COPY_7F00_7F3F
LDX #$00
LDA #$3F
STA $2006
LDA #$00
STA $2006
COPY_7F00_7F10:
LDA $7C0,X
STA $2007
INX
CPX #$10
BCC COPY_7F00_7F10
LDA $2002
LDA $FD
STA $2005
LDA $FC
STA $2005
LDA $7F50
STA $FE
LDA #$00
STA $2000
PLA
STA $B8
PLA
STA $B9
PLA
STA $BA
PLA
STA $BB
PLA
STA $BC
PLA
STA $BD
RTS
PPU_CMP:
PPURE:
RTS
FREE_PPU:
JSR TEXT01_PPU
JSR $CBC0
JSR P1_PPU
JSR P2_PPU
RTS
TEXT01_ADDR:
.BYTE $20,$42
TEXT01_DATA:
.BYTE CH,CA,CC,CK,CSP,CB,CY,CSP,CF,CL,CA,CM,CE,CC,CY,CC,CL,CO,CN,CE,CSP,CI,CN,CSP,C2,C0,C1,C7,CEND
TEXT01_PPU
LDX #$00
LDA TEXT01_ADDR
STA $0703
INX
LDA TEXT01_ADDR,X
STA $0704
JSR PPU_PROCESS
TEXT01_W:
LDA TEXT01_DATA,X
CMP #CEND
BEQ TEXT01_START
STA $0705,X
INX
LDA #$00
BEQ TEXT01_W
TEXT01_START:
JSR PPU_START
RTS
COLOR_DATA:
.BYTE $0F,$28,$28,$28,$0F,$28,$28,$28,$0F,$28,$28,$28,$0F,$28,$28,$28
P1_PPU:
JSR PLAYER_01_PPU
JSR $CBC0
JSR RELIFE_P1_PPU
JSR $CBC0
JSR RELIFE_NUMBER_P1_PPU
JSR $CBC0
JSR WEAPON_P1_PPU
JSR $CBC0
JSR BULLETPPU_P1_PPU
JSR $CBC0
RTS
P2_PPU:
JSR PLAYER_02_PPU
JSR $CBC0
JSR RELIFE_P2_PPU
JSR $CBC0
JSR RELIFE_NUMBER_P2_PPU
JSR $CBC0
JSR WEAPON_P2_PPU
JSR $CBC0
JSR BULLETPPU_P2_PPU
JSR $CBC0
RTS
PLAYER_01_ADDR:
.BYTE $20,$A3
PLAYER_01_DATA:
.BYTE CP,CL,CA,CY,CE,CR,CSP,C0,C1,CEND
PLAYER_01_PPU:
LDX #$00
LDA PLAYER_01_ADDR
STA $0703
INX
LDA PLAYER_01_ADDR,X
STA $0704
JSR PPU_PROCESS
PLAYER_01_W:
LDA PLAYER_01_DATA,X
CMP #CEND
BEQ PLAYER_01_START
STA $0705,X
INX
LDA #$00
BEQ PLAYER_01_W
PLAYER_01_START:
JSR PPU_START
RTS
RELIFE_P1_ADDR:
.BYTE $20,$E3
RELIFE_P1_DATA:
.BYTE CR,CE,CL,CI,CF,CE,CEND
RELIFE_P1_PPU:
LDX #$00
LDA RELIFE_P1_ADDR
STA $0703
INX
LDA RELIFE_P1_ADDR,X
STA $0704
JSR PPU_PROCESS
RELIFE_P1_W:
LDA RELIFE_P1_DATA,X
CMP #CEND
BEQ RELIFE_P1_START
STA $0705,X
INX
LDA #$00
BEQ RELIFE_P1_W
RELIFE_P1_START:
JSR PPU_START
RTS
RELIFE_NUMBER_P1_ADDR:
.BYTE $20,$EA
RELIFE_NUMBER_P1_PPU:
LDX #$00
LDA RELIFE_NUMBER_P1_ADDR
STA $0703
INX
LDA RELIFE_NUMBER_P1_ADDR,X
STA $0704
JSR PPU_PROCESS
LDA $32
JSR LIFETODEC
RELIFE_NUMBER_P1_W:
LDA $7A03
STA $0705
INC $0705
LDA $7A04
STA $0706
INC $0706
LDA $7A05
STA $0707
INC $0707
LDX #$03
RELIFE_NUMBER_P1_START:
JSR PPU_START
RTS
WEAPON_P1_ADDR:
.BYTE $21,$23
WEAPON_P1_DATA:
.BYTE CW,CE,CA,CP,CO,CN,CEND
WEAPON_P1_PPU:
LDX #$00
LDA WEAPON_P1_ADDR
STA $0703
INX
LDA WEAPON_P1_ADDR,X
STA $0704
JSR PPU_PROCESS
WEAPON_P1_W:
LDA WEAPON_P1_DATA,X
CMP #CEND
BEQ WEAPON_P1_START
STA $0705,X
INX
LDA #$00
BEQ WEAPON_P1_W
WEAPON_P1_START:
JSR PPU_START
RTS
BULLET_P1_ADDR:
.BYTE $21,$2A
BULLET_P1_DATA:
.BYTE $00,$01,$02,$03,$04
BULLET_P1_NAME:
.BYTE CN,CM,CF,CS,CL
BULLETPPU_P1_PPU:
LDX #$00
LDA BULLET_P1_ADDR
STA $0703
INX
LDA BULLET_P1_ADDR,X
STA $0704
JSR PPU_PROCESS
BULLET_P1_WRITE:
LDX #$00
LDA $AA
AND #$10
BEQ C_BULLET_P1
LDA #CS
STA $0705
BNE B_NAME_P1
C_BULLET_P1:
LDA #CC
STA $0705
B_NAME_P1:
LDA $AA
AND #$0F
CMP BULLET_P1_DATA,X
BNE B_NAME_P1_RECMP
LDA BULLET_P1_NAME,X
STA $0706
B_NAME_P1_RECMP
INX
CPX #$05
BCC B_NAME_P1
LDX #$02
JSR PPU_START
RTS
PLAYER_02_ADDR:
.BYTE $20,$B3
PLAYER_02_DATA:
.BYTE CP,CL,CA,CY,CE,CR,CSP,C0,C2,CEND
PLAYER_02_PPU:
LDX #$00
LDA PLAYER_02_ADDR
STA $0703
INX
LDA PLAYER_02_ADDR,X
STA $0704
JSR PPU_PROCESS
PLAYER_02_W:
LDA PLAYER_02_DATA,X
CMP #CEND
BEQ PLAYER_02_START
STA $0705,X
INX
LDA #$00
BEQ PLAYER_02_W
PLAYER_02_START:
JSR PPU_START
RTS
RELIFE_P2_ADDR:
.BYTE $20,$F3
RELIFE_P2_DATA:
.BYTE CR,CE,CL,CI,CF,CE,CEND
RELIFE_P2_PPU:
LDX #$00
LDA RELIFE_P2_ADDR
STA $0703
INX
LDA RELIFE_P2_ADDR,X
STA $0704
JSR PPU_PROCESS
RELIFE_P2_W:
LDA RELIFE_P2_DATA,X
CMP #CEND
BEQ RELIFE_P2_START
STA $0705,X
INX
LDA #$00
BEQ RELIFE_P2_W
RELIFE_P2_START:
JSR PPU_START
RTS
RELIFE_NUMBER_P2_ADDR:
.BYTE $20,$FA
RELIFE_NUMBER_P2_PPU:
LDX #$00
LDA RELIFE_NUMBER_P2_ADDR
STA $0703
INX
LDA RELIFE_NUMBER_P2_ADDR,X
STA $0704
JSR PPU_PROCESS
LDA $33
JSR LIFETODEC
RELIFE_NUMBER_P2_W:
LDA $7A03
STA $0705
INC $0705
LDA $7A04
STA $0706
INC $0706
LDA $7A05
STA $0707
INC $0707
LDX #$03
RELIFE_NUMBER_P2_START:
JSR PPU_START
RTS
WEAPON_P2_ADDR:
.BYTE $21,$33
WEAPON_P2_DATA:
.BYTE CW,CE,CA,CP,CO,CN,CEND
WEAPON_P2_PPU:
LDX #$00
LDA WEAPON_P2_ADDR
STA $0703
INX
LDA WEAPON_P2_ADDR,X
STA $0704
JSR PPU_PROCESS
WEAPON_P2_W:
LDA WEAPON_P2_DATA,X
CMP #CEND
BEQ WEAPON_P2_START
STA $0705,X
INX
LDA #$00
BEQ WEAPON_P2_W
WEAPON_P2_START:
JSR PPU_START
RTS
BULLET_P2_ADDR:
.BYTE $21,$3A
BULLET_P2_DATA:
.BYTE $00,$01,$02,$03,$04
BULLET_P2_NAME:
.BYTE CN,CM,CF,CS,CL
BULLETPPU_P2_PPU:
LDX #$00
LDA BULLET_P2_ADDR
STA $0703
INX
LDA BULLET_P2_ADDR,X
STA $0704
JSR PPU_PROCESS
BULLET_P2_WRITE:
LDX #$00
LDA $AA
AND #$10
BEQ C_BULLET_P2
LDA #CS
STA $0705
BNE B_NAME_P2
C_BULLET_P2:
LDA #CC
STA $0705
B_NAME_P2:
LDA $AB
AND #$0F
CMP BULLET_P2_DATA,X
BNE B_NAME_P2_RECMP
LDA BULLET_P2_NAME,X
STA $0706
B_NAME_P2_RECMP
INX
CPX #$05
BCC B_NAME_P2
LDX #$02
JSR PPU_START
RTS
LIFETODEC: ;十进制转换
LIFEL1: ;initialise
STA $7A00 ;$7A00=F3
LDA #$00
STA $7A03 ;$7A03=00
STA $7A04 ;$7A04=00
STA $7A05 ;$7A05=00
LIFEL2: ;copy data $7A00 to 6001
LDA $7A00
STA $7A01
LIFEL3: ;hundred
LDA $7A01
CMP #$64
BCC LIFEL6 ;$7A01<100 goto L6
LIFEL4:
LDA $7A01
SEC
SBC #$64 ;$7A01=$7A01-100
STA $7A01
INC $7A03 ;hundred++
LIFEL5:
LDA $7A01
CMP #$64
BCS LIFEL4 ;$7A01>100 goto L4
LIFEL6: ;decade
LDA $7A01
CMP #$0A
BCC LIFEL9 ;$7A01<10 goto L9
LIFEL7:
LDA $7A01
SEC
SBC #$0A
STA $7A01 ;$7A01=$7A01-10
INC $7A04 ;decade++
LIFEL8:
LDA $7A01
CMP #$0A
BCS LIFEL7 ;$7A01>10 goto L7
;unit
LIFEL9:
LDA $7A01 ;$7A05=$7A01
STA $7A05 ;unit
RTS ;return
PPU_PROCESS: ;PPU地址处理程序
LDX #$00
LDA $FF
AND #$01
BNE PPU_2400_27C0
PPU_2000_23C0: ;命名表1
LDA $0703
AND #$FB
STA $0703
RTS
PPU_2400_27C0: ;命名表2
LDA $0703
ORA #$04
STA $0703
RTS
PPU_START:;PPU数据写入
STA $21
STX $0701
LDA #$00
STA $0705,X
LDA #$01
STA $0700
STA $0702
RTS
这么好的教程竟然没有人支持!
怎么就退隐了呢?我还一直期待楼主能出SFC相关的教程呢。 没事时有时间时还是欢迎发表教程,谢谢楼主贡献 看不懂啊。。。。。
页:
[1]