SRW4 debug

  • Thread starter Thread starter SPC700
  • Ngày gửi Ngày gửi

SPC700

Dragon Quest
org $FFB0
dw $3944 //maker code
dw $5241, $4A34 //game code
dw $0000, $0000, $0000
db $00
db $00 //expansion ram: none
db $00 //special version
db $00 //Cartridge type
db "SUPER ROBOT WARS4____"
db $31 // Hi-rom, fast speed
db $02 //Rom type: Rom + Ram + Battery, no co-processor
db $0C //rom size: 17~32Mbit
db $03 //Sram size: 64Kbit
db $00 //Destination code: Japan
db $33 //fixed value
db $01 //masked rom version
dw Complement check
dw Checksum

----------------------
C0/EE09: C230 REP #$30
C0/EE0B: A20000 LDX #$0000
C0/EE0E: AF106030 LDA $306010
C0/EE12: 7F00A0C0 ADC $C0A000,X
C0/EE16: 7F00A4C0 ADC $C0A400,X
C0/EE1A: 7F00A8C0 ADC $C0A800,X
C0/EE1E: 7F00ACC0 ADC $C0AC00,X
C0/EE22: 9F00DC7E STA $7EDC00,X
C0/EE26: E8 INX
C0/EE27: E8 INX
C0/EE28: E08000 CPX #$0080
C0/EE2B: D0E5 BNE $EE12
C0/EE2D: 297E00 AND #$007E
C0/EE30: 8586 STA $86
C0/EE32: A20001 LDX #$0100
C0/EE35: 2040EE JSR $EE40
C0/EE38: CA DEX
C0/EE39: D0FA BNE $EE35
C0/EE3B: 8F106030 STA $306010
C0/EE3F: 6B RTL

C0/EE40: DA PHX
C0/EE41: A586 LDA $86
C0/EE43: 38 SEC
C0/EE44: E96E00 SBC #$006E
C0/EE47: 297E00 AND #$007E
C0/EE4A: AA TAX
C0/EE4B: BF00DC7E LDA $7EDC00,X
C0/EE4F: 8502 STA $02
C0/EE51: A586 LDA $86
C0/EE53: 38 SEC
C0/EE54: E93000 SBC #$0030
C0/EE57: 297E00 AND #$007E
C0/EE5A: AA TAX
C0/EE5B: BF00DC7E LDA $7EDC00,X
C0/EE5F: 4502 EOR $02
C0/EE61: 8502 STA $02
C0/EE63: A586 LDA $86
C0/EE65: 29FF00 AND #$00FF
C0/EE68: AA TAX
C0/EE69: A502 LDA $02
C0/EE6B: 9F00DC7E STA $7EDC00,X
C0/EE6F: A90000 LDA #$0000
C0/EE72: E220 SEP #$20
C0/EE74: A586 LDA $86
C0/EE76: 18 CLC
C0/EE77: 6902 ADC #$02
C0/EE79: 297E AND #$7E
C0/EE7B: 8586 STA $86
C0/EE7D: A587 LDA $87
C0/EE7F: 18 CLC
C0/EE80: 6916 ADC #$16
C0/EE82: 297E AND #$7E
C0/EE84: 8587 STA $87
C0/EE86: AA TAX
C0/EE87: C220 REP #$20
C0/EE89: BF80DC7E LDA $7EDC80,X
C0/EE8D: 8500 STA $00
C0/EE8F: A502 LDA $02
C0/EE91: 9F80DC7E STA $7EDC80,X
C0/EE95: A500 LDA $00
C0/EE97: FA PLX
C0/EE98: 60 RTS


reset:
C0/EF98: 78 SEI
C0/EF99: 18 CLC
C0/EF9A: FB XCE
C0/EF9B: D8 CLD
C0/EF9C: E230 SEP #$30
C0/EF9E: 9C0042 STZ $4200
C0/EFA1: A98F LDA #$8F //force blank
C0/EFA3: 8D0021 STA $2100
C0/EFA6: A901 LDA #$01 //fast speed
C0/EFA8: 8D0D42 STA $420D
C0/EFAB: 8DBD03 STA $03BD
C0/EFAE: C230 REP #$30
C0/EFB0: A90000 LDA #$0000
C0/EFB3: 5B TCD
C0/EFB4: A27703 LDX #$0377
C0/EFB7: 9A TXS
C0/EFB8: 5CBCEF80 JMP $80EFBC //dummy jump
C0/EFBC: 9C0000 STZ $0000
C0/EFBF: A20000 LDX #$0000
C0/EFC2: A00100 LDY #$0001
C0/EFC5: A9FFFF LDA #$FFFF
C0/EFC8: 547E7E MVN $7E,$7E //init ram
C0/EFCB: 547F7E MVN $7F,$7E
C0/EFCE: 4B PHK
C0/EFCF: AB PLB
C0/EFD0: 2209EE80 JSR $80EE09
C0/EFD4: 22BCE380 JSR $80E3BC
C0/EFD8: 204082 JSR $8240
C0/EFDB: 20D1F4 JSR $F4D1
C0/EFDE: E230 SEP #$30
C0/EFE0: A98F LDA #$8F
C0/EFE2: 8D8003 STA $0380
C0/EFE5: A981 LDA #$81
C0/EFE7: 8DB603 STA $03B6
C0/EFEA: 8D0042 STA $4200
C0/EFED: 58 CLI
C0/EFEE: 4C46F5 JMP $F546
C0/EFF1: 78 SEI
C0/EFF2: 5CF6EF80 JMP $80EFF6
C0/EFF6: DB STP
C0/EFF7: C230 REP #$30
C0/EFF9: 48 PHA
C0/EFFA: DA PHX
C0/EFFB: 5A PHY
C0/EFFC: 8B PHB
C0/EFFD: 4B PHK
C0/EFFE: AB PLB
C0/EFFF: E230 SEP #$30
C0/F001: AD1142 LDA $4211
C0/F004: 5C08F080 JMP $80F008
C0/F008: A68F LDX $8F
C0/F00A: 7C0DF0 JMP ($F00D,X)

C0/F546: E230 SEP #$30
C0/F548: A940 LDA #$40
C0/F54A: 0480 TSB $80
C0/F54C: 2480 BIT $80
C0/F54E: 70FC BVS $F54C
C0/F550: A920 LDA #$20
C0/F552: 0480 TSB $80
C0/F554: 201D83 JSR $831D
C0/F557: E230 SEP #$30
C0/F559: A920 LDA #$20
C0/F55B: 1480 TRB $80
C0/F55D: 24C0 BIT $C0
C0/F55F: 1011 BPL $F572
C0/F561: C230 REP #$30
C0/F563: ADEA03 LDA $03EA
C0/F566: 29C000 AND #$00C0
C0/F569: 0DF003 ORA $03F0
C0/F56C: F004 BEQ $F572
C0/F56E: 2236E281 JSR $81E236
C0/F572: E230 SEP #$30
C0/F574: 2C5910 BIT $1059
C0/F577: 100E BPL $F587
C0/F579: ADED03 LDA $03ED
C0/F57C: 8910 BIT #$10
C0/F57E: F007 BEQ $F587
C0/F580: ADF103 LDA $03F1
C0/F583: 8920 BIT #$20
C0/F585: F0EB BEQ $F572
C0/F587: A581 LDA $81
C0/F589: 8940 BIT #$40
C0/F58B: F004 BEQ $F591
C0/F58D: 228ADF81 JSR $81DF8A
C0/F591: A5AA LDA $AA
C0/F593: F01B BEQ $F5B0
C0/F595: C230 REP #$30
C0/F597: 29FF00 AND #$00FF
C0/F59A: 0A ASL A
C0/F59B: 0A ASL A
C0/F59C: AA TAX
C0/F59D: BD9DFB LDA $FB9D,X
C0/F5A0: 8500 STA $00
C0/F5A2: BD9FFB LDA $FB9F,X
C0/F5A5: 8502 STA $02
C0/F5A7: E230 SEP #$30
C0/F5A9: A502 LDA $02
C0/F5AB: 48 PHA
C0/F5AC: AB PLB
C0/F5AD: DC0000 JMP [$0000]
 
Cứ tưởng patch Việt "người tố cổ" ạ
 
Phân tích cái này hữu ích hơn mấy cái patch nhiều. Phân tích để hiểu rõ thì muốn bao nhiêu patch, patch kiểu gì cũng được.
 
Hack nhạc trong trận đánh

Mỗi nhân vật trong một hệ Robot có nhạc nền riêng trong trận đấu.
Nhạc nền được điều khiển bởi routine bên dưới.

C0/831D: E230 SEP #$30
C0/831F: A578 LDA $78
C0/8321: C579 CMP $79
C0/8323: F0D1 BEQ $82F6
C0/8325: E678 INC $78
C0/8327: 290F AND #$0F
C0/8329: AA TAX
C0/832A: BF90D27E LDA $7ED290,X
C0/832E: 8575 STA $75
C0/8330: C9F0 CMP #$F0
C0/8332: 9007 BCC $833B
C0/8334: 290F AND #$0F
C0/8336: 0A ASL A
C0/8337: AA TAX
C0/8338: 7CFC84 JMP ($84FC,X)
C0/833B: 297F AND #$7F
C0/833D: 8F80D27E STA $7ED280
C0/8341: 857A STA $7A
C0/8343: 6476 STZ $76
C0/8345: AD4321 LDA $2143
C0/8348: 8920 BIT #$20
C0/834A: D0F9 BNE $8345
C0/834C: A908 LDA #$08
C0/834E: 20C782 JSR $82C7
C0/8351: 2475 BIT $75
C0/8353: 3006 BMI $835B
C0/8355: A900 LDA #$00
C0/8357: 8F81D27E STA $7ED281
C0/835B: A57A LDA $7A
C0/835D: C940 CMP #$40
C0/835F: B009 BCS $836A
C0/8361: 205184 JSR $8451
C0/8364: A002 LDY #$02
C0/8366: B770 LDA [$70],Y
C0/8368: 8576 STA $76
C0/836A: 6474 STZ $74
C0/836C: A674 LDX $74
C0/836E: BF80D27E LDA $7ED280,X
C0/8372: F047 BEQ $83BB
C0/8374: E674 INC $74
C0/8376: C230 REP #$30
C0/8378: 29FF00 AND #$00FF
C0/837B: 0A ASL A
C0/837C: AA TAX
C0/837D: BF0000E3 LDA $E30000,X
C0/8381: 8570 STA $70
C0/8383: E230 SEP #$30
C0/8385: A9E3 LDA #$E3
C0/8387: 8572 STA $72
C0/8389: A000 LDY #$00
C0/838B: A200 LDX #$00
C0/838D: B770 LDA [$70],Y
C0/838F: C9FF CMP #$FF
C0/8391: F0D9 BEQ $836C
C0/8393: C9FD CMP #$FD
C0/8395: 9003 BCC $839A
C0/8397: 4C0584 JMP $8405
C0/839A: E473 CPX $73
C0/839C: F00B BEQ $83A9
C0/839E: DF00D27E CMP $7ED200,X
C0/83A2: F007 BEQ $83AB
C0/83A4: E8 INX
C0/83A5: E473 CPX $73
C0/83A7: D0F5 BNE $839E
C0/83A9: E673 INC $73
C0/83AB: 9F00D27E STA $7ED200,X
C0/83AF: C8 INY
C0/83B0: B770 LDA [$70],Y
C0/83B2: 9F40D27E STA $7ED240,X
C0/83B6: C8 INY
C0/83B7: E02F CPX #$2F
C0/83B9: 90D0 BCC $838B
C0/83BB: A573 LDA $73
C0/83BD: F041 BEQ $8400
C0/83BF: 6474 STZ $74
C0/83C1: A674 LDX $74
C0/83C3: BF00D27E LDA $7ED200,X
C0/83C7: 1023 BPL $83EC
C0/83C9: C9FF CMP #$FF
C0/83CB: F018 BEQ $83E5
C0/83CD: 297F AND #$7F
C0/83CF: AA TAX
C0/83D0: BF70D27E LDA $7ED270,X
C0/83D4: 8D4121 STA $2141
C0/83D7: BF71D27E LDA $7ED271,X
C0/83DB: 8D4221 STA $2142
C0/83DE: A903 LDA #$03
C0/83E0: 20C782 JSR $82C7
C0/83E3: 8011 BRA $83F6
C0/83E5: A911 LDA #$11
C0/83E7: 20C782 JSR $82C7
C0/83EA: 800A BRA $83F6
C0/83EC: 8D4121 STA $2141
C0/83EF: BF40D27E LDA $7ED240,X
C0/83F3: 20AF84 JSR $84AF
C0/83F6: E230 SEP #$30
C0/83F8: E674 INC $74
C0/83FA: A573 LDA $73
C0/83FC: C574 CMP $74
C0/83FE: D0C1 BNE $83C1
C0/8400: 6490 STZ $90
C0/8402: 6475 STZ $75
C0/8404: 60 RTS
C0/8405: D026 BNE $842D
C0/8407: A673 LDX $73
C0/8409: E673 INC $73
C0/840B: A9FF LDA #$FF
C0/840D: 9F00D27E STA $7ED200,X
C0/8411: C8 INY
C0/8412: AFE80000 LDA $0000E8
C0/8416: 1012 BPL $842A
C0/8418: E8 INX
C0/8419: A940 LDA #$40
C0/841B: 9F00D27E STA $7ED200,X
C0/841F: 18 CLC
C0/8420: A57A LDA $7A
C0/8422: 69C0 ADC #$C0
C0/8424: 9F40D27E STA $7ED240,X
C0/8428: E673 INC $73
C0/842A: 4C6C83 JMP $836C
C0/842D: A673 LDX $73
C0/842F: E673 INC $73
C0/8431: A57C LDA $7C
C0/8433: 0980 ORA #$80
C0/8435: 9F00D27E STA $7ED200,X
C0/8439: A67C LDX $7C
C0/843B: E67C INC $7C
C0/843D: E67C INC $7C
C0/843F: C8 INY
C0/8440: B770 LDA [$70],Y
C0/8442: 9F70D27E STA $7ED270,X
C0/8446: C8 INY
C0/8447: B770 LDA [$70],Y
C0/8449: 9F71D27E STA $7ED271,X
C0/844D: C8 INY
C0/844E: 4C8B83 JMP $838B
C0/8451: C230 REP #$30
C0/8453: 297F00 AND #$007F
C0/8456: 8570 STA $70
C0/8458: 0A ASL A
C0/8459: 6570 ADC $70
C0/845B: AA TAX
C0/845C: BF0080E2 LDA $E28000,X
C0/8460: 8570 STA $70
C0/8462: BF0180E2 LDA $E28001,X
C0/8466: 8571 STA $71
C0/8468: A9001C LDA #$1C00
C0/846B: 857B STA $7B
C0/846D: 8023 BRA $8492
C0/846F: AA TAX
C0/8470: 18 CLC
C0/8471: 692052 ADC #$5220
C0/8474: 857B STA $7B
C0/8476: E670 INC $70
C0/8478: E670 INC $70
C0/847A: B770 LDA [$70],Y
C0/847C: 8D4221 STA $2142
C0/847F: E670 INC $70
C0/8481: E670 INC $70
C0/8483: E220 SEP #$20
C0/8485: A905 LDA #$05
C0/8487: 20DD84 JSR $84DD
C0/848A: C220 REP #$20
C0/848C: 98 TYA
C0/848D: 18 CLC
C0/848E: 6570 ADC $70
C0/8490: 8570 STA $70
C0/8492: A00000 LDY #$0000
C0/8495: B770 LDA [$70],Y
C0/8497: D0D6 BNE $846F
C0/8499: A57B LDA $7B
C0/849B: 8F70D27E STA $7ED270
C0/849F: E230 SEP #$30
C0/84A1: A980 LDA #$80
C0/84A3: 8F00D27E STA $7ED200
C0/84A7: A902 LDA #$02
C0/84A9: 857C STA $7C
C0/84AB: 3A DEC A
C0/84AC: 8573 STA $73
C0/84AE: 60 RTS

ID nhân vật được đọc ở $7E0078, sau đó kết hợp với địa chỉ bắt đầu ID nhạc ở $7ED290 để lấy ID nhạc tương ứng với nhân vật. Tiếp sau đó là một chuỗi xử lý dẫn tới địa chỉ dữ liệu nhac. Dữ liệu nhạc bắt đầu tại $E20000.
Dữ liệu nhạc được đọc và xử lý ở routine sau.

C0/84AF: C230 REP #$30
C0/84B1: 29FF00 AND #$00FF
C0/84B4: 8570 STA $70
C0/84B6: 0A ASL A
C0/84B7: 6570 ADC $70
C0/84B9: AA TAX
C0/84BA: BF0000E2 LDA $E20000,X
C0/84BE: 8570 STA $70
C0/84C0: BF0100E2 LDA $E20001,X
C0/84C4: 8571 STA $71
C0/84C6: A00000 LDY #$0000
C0/84C9: B770 LDA [$70],Y
C0/84CB: 8D4221 STA $2142
C0/84CE: E670 INC $70
C0/84D0: E670 INC $70
C0/84D2: B770 LDA [$70],Y
C0/84D4: E670 INC $70
C0/84D6: E670 INC $70
C0/84D8: AA TAX
C0/84D9: E220 SEP #$20
C0/84DB: A904 LDA #$04
C0/84DD: 20C782 JSR $82C7
C0/84E0: B770 LDA [$70],Y
C0/84E2: 8D4221 STA $2142
C0/84E5: 8C4021 STY $2140
C0/84E8: 98 TYA
C0/84E9: C8 INY
C0/84EA: CD4021 CMP $2140
C0/84ED: D0FB BNE $84EA
C0/84EF: CA DEX
C0/84F0: D0EE BNE $84E0
C0/84F2: 3A DEC A
C0/84F3: 8D4021 STA $2140
C0/84F6: CD4021 CMP $2140
C0/84F9: D0FB BNE $84F6
C0/84FB: 60 RTS

Biết được địa chỉ ID nhân vật, địa chỉ ID nhạc thì ta có thể tùy chỉnh nhạc nền trong trận đấu bằng cách bật cheat code của giả lập. Về lý thuyết là vậy, nhưng thực tế có thể khiến đơ game vì một địa chỉ mang nhiều giá trị khác nhau, nhiều ý nghĩa khác nhau ở từng thời điểm khác nhau. Địa chỉ $7E0078 chỉ mang ý nghĩa là nơi chứa ID nhân vật trong một thời điểm, do đó nếu dùng chức năng cheat để cố định một giá trị tại địa chỉ đó có thể đơ game trong những lúc CPU không coi địa chỉ đó là nơi chứa ID nhân vật.
Cách để tránh tình trạng này là thay vì đọc ID từ một địa chỉ mang nhiều ý nghĩa ở nhiều thời điểm thì ta đọc ID từ một địa chỉ mang một ý nghĩa duy nhất trong suốt thời gian.
Tìm một địa chỉ Ram trống bất kỳ rồi ép CPU đọc tại địa chỉ đó.
Chẳng hạn, routine bên trên được viết lại:

org $808451
JML newcode
oldcode


org $Rom trôngd
newcode:
REP #$30
LDA $7ED2A0
AND #$007F
STA $70
ASL
ADC $70
TAX
LDA $E28000,x
JML oldcode

Giờ đây CPU chỉ đọc ID nhạc tại $7ED2A0. Nhập số vào địa chỉ này bằng Ram editor của giả lập hoặc cheat code để đổi nhạc nền.

 
Có cách nào để nhạc ko bị dừng khi hết battle ko đại ka
 
Cũng cách làm như trên thôi. Đổi sang địa chỉ tuyệt đối thì nhạc trận đấu không bị mất.


Nhưng nhiêu này chưa đủ, vì chỉ mới hack phần dữ liệu nhạc thôi, chưa hack phần nhạc cụ (sample) nên nhạc mới tuy cùng giai điệu nhưng lệch tông.
 
Chưa thấy điểm gì đặc sắc ở cái video trên.
Lúc chưa biết gì, chỉnh chọt được chút đỉnh thì thấy thần thánh lắm.
Nhưng khi đã hiểu rõ mọi thứ thì thấy tất cả đều bình thường.
Phân tích rõ ra thì muốn làm gì với cái game đó cũng được.
 
Chưa thấy điểm gì đặc sắc ở cái video trên.
Lúc chưa biết gì, chỉnh chọt được chút đỉnh thì thấy thần thánh lắm.
Nhưng khi đã hiểu rõ mọi thứ thì thấy tất cả đều bình thường.
Phân tích rõ ra thì muốn làm gì với cái game đó cũng được.
Vụ music chơi tiếp khi hết battle đó mà.
(Thật ra thì có chèn nhạc mới vào.)
 
9s7cG61.jpg

DIgZ8d8.jpg

pAJes45.jpg

Br8FoFf.jpg

9s7cG61.jpg


 
Trong dữ liệu có dòng "VS" nhưng chưa ai nhìn thấy nó bao giờ.
Kích hoạt hiển thị dòng này tại
80F5D2 $B7 $92 LDA [$92],Y [CB01FD]
Nhấn chọn dòng dưới
org $839984
LDA $0E3A //dòng hiện tại
INC
JSR $99DA
Nhấn chọn dòng trên
org $839993
LDA $0E3A
DEC
JSR $99DA
$8399DA
CLC
ADC #$0005 //tổng số dòng
SEC
-
SBC #$0005
BCS -
ADC #$0005
STA $0E3A
ASL
TAY
LDA #$F830 //pallette xám
STA $0730
STA $0732
STA $0734
STA $0736
LDA #$FA30 //pallette vàng
STA $0730,y
STZ $0E97
RTS
Hóa ra chức năng của dòng "VS" là hiển thị đoạn demo ở đoạn opening mà nếu không nhấn nút gì sau một chặp thì nó cũng tự động kích hoạt.

IQI73AN.png

GjOTeCf.png
 
Sprite engine

Toàn bộ engine điều khiển của game này như bên dưới.
aZRwuKtL9_xATDREY1tRIT07HF2jPxpJ1DZu_WnhxxKREAkY75jAEf4U3rjP6hBUh-34dihTVI6ZKaxwWyTO6UY=w1280

UDEwRsoPfXRmH6_fpcFLg1mI7ag_hNpDHG7wgT1bp9WaWcTfR8Sd1lBekgpwVz02pOVXEu3PIK9L5EMNLqMY5JY=w1280

clRKHgZG1wWyaavcVTqXWq9rHpGjFguNEWjuvIx5N6WswMEs5Kvp9jWECsJNmOFbna1weOyfReV0MmoYC0u3PNwTprXKFKSS7eq37JlBKIbzmBLXxgLVa5z_qiij_Sit-Q=w1280


Phân tích

Routine xử lý sprite được đặt ở routine $80DF81 vào cuối kỳ NMI, sau khi đã DMA dữ liệu đồ họa cần thiết. Routine này kết thúc bằng cách thiết lập các thông số để DMA 0x220 byte bản sao OAM từ địa chỉ $000500 vào Vram vào đầu kỳ NMI sau. Set bit bất kỳ của $03BB để kích hoạt DMA trong kỳ NMI.


C0/E0D5: E220 SEP #$20

C0/E0D7: C210 REP #$10

C0/E0D9: A900 LDA #$00

C0/E0DB: 8D0043 STA $4300

C0/E0DE: A904 LDA #$04

C0/E0E0: 8D0143 STA $4301

C0/E0E3: A20005 LDX #$0500

C0/E0E6: 8E0243 STX $4302

C0/E0E9: 9C0443 STZ $4304

C0/E0EC: A22002 LDX #$0220

C0/E0EF: 8E0543 STX $4305

C0/E0F2: A901 LDA #$01

C0/E0F4: 0CBB03 TSB $03BB

C0/E0F7: 6B RTL


Có 2 phân đoạn sử dụng sprite trong game này, đó là sprite ở map và sprite ở những phần còn lại (như sprite trong trận đấu, sprite ở màn hình tựa đề,....). Sprite ở map là các icon Robot, còn sprite ở trận đấu là các nhân vật Robot trong trận đấu.

CqnZbUMpbL9326lVDGK0g4CjaLHGVyqpUoh7gjRMyJlFe-sBW3Qpqts4p2nHVgEjZrIst5fLsDImygGY2k9QcfJhjFgpaAer9YP7bgJ8cJkIHobLxVG4X4sahTQlR9O0EQ=w1280


Sprite ở hai phân đoạn này được quản lý theo hai hướng khác nhau. Vào đầu routine xử lý, CPU sẽ kiểm tra nó đang xử lý phân đoạn nào bằng cách kiểm tra $80. Nếu bit 15 của địa chỉ này được bật/mở/set thì nó sẽ xử lý các sprite trong table như là sprite trên map, còn bit này được tắt/đóng/reset/clear thì nó sẽ xử lý như sprite trong trận đấu và những phân đoạn khác. Mỗi "vật thể" trên map chỉ gồm 1 sprite có kích thước 16x16 pixel trong khi "vật thể" trong trận đấu gồm nhiều sprite hợp thành. Nếu bit 3 của $80 được tắt/đóng/reset/clear thì bỏ qua routine xử lý sprite, tức sprite ở frame đó không được cập nhật, đồng nghĩa với việc hình ảnh nhân vật được giữ nguyên từ frame trước đó, màn hình sẽ không hiển thị sự chuyển động hay thay đổi của sprite.


C0/DF81: C230 REP #$30

C0/DF83: 2480 BIT $80

C0/DF85: 101C BPL $DFA3 //bit 15 của $80 được tắt thì nhảy đến đoạn xử lý sprite trong trận đấu

C0/DF87: AD880E LDA $0E88

C0/DF8A: 85C5 STA $C5

C0/DF8C: AD8C0E LDA $0E8C //cuộn BG2 theo chiều ngang

C0/DF8F: 8D8E03 STA $038E

C0/DF92: 8D9203 STA $0392

C0/DF95: AD8A0E LDA $0E8A

C0/DF98: 85C7 STA $C7

C0/DF9A: AD8E0E LDA $0E8E //cuộn BG2 theo chiều dọc

C0/DF9D: 8D9003 STA $0390

C0/DFA0: 8D9403 STA $0394

C0/DFA3: A580 LDA $80

C0/DFA5: 890800 BIT #$0008

C0/DFA8: F0D6 BEQ $DF80 //bit 3 của $80 được tắt thì thoát routuine

C0/DFAA: 9C0007 STZ $0700 //định dạng OAM table #2

C0/DFAD: 9C0207 STZ $0702

C0/DFB0: 9C0407 STZ $0704

C0/DFB3: 9C0607 STZ $0706

C0/DFB6: 9C0807 STZ $0708

C0/DFB9: 9C0A07 STZ $070A

C0/DFBC: 9C0C07 STZ $070C

C0/DFBF: 9C0E07 STZ $070E

C0/DFC2: 9C1007 STZ $0710

C0/DFC5: 9C1207 STZ $0712

C0/DFC8: 9C1407 STZ $0714

C0/DFCB: 9C1607 STZ $0716

C0/DFCE: 9C1807 STZ $0718

C0/DFD1: 9C1A07 STZ $071A

C0/DFD4: 9C1C07 STZ $071C

C0/DFD7: 9C1E07 STZ $071E


Có thể dùng từ "vật thể" để diễn tả mọi sprite xuất hiện trong game này. Các "vật thể" có thể là Robot, vũ khí, viên đạn,... Mỗi vật thể gồm một (ở map) hoặc nhiều sprite (trong trận đấu) hợp thành. Chẳng hạn ở cảnh dưới đây gồm 2 vật thể: Robot đĩa bay bên địch và viên đạn. Vật thể đầu tiên là viên đạn, gồm 6 sprite cỡ nhỏ (8x8 pixel) hợp thành. Vật thể thứ hai là Robot đĩa bay, gồm 4 sprite cỡ lớn (16x16 pixel) và 2 sprite cỡ nhỏ hợp thành. Sprite cỡ lớn được đánh dấu bằng khung màu trắng, sprite cỡ nhỏ được đánh dấu bằng khung màu đỏ.

zOsMuvaRtoFL36HD5IdwxpyksrbMonA_014cRn0-EoKC8yloU-wDOg-3w-1cWszUovfesDuQFTlx-HhmKqYiQ-RHC3r7GML_tDx1nhhIRxsGCm0if8PvN-ELj6EkUyOAWQ=w1280


Do khung cảnh này sử dụng 12 sprite cho 2 vật thể, mỗi sprite chiếm 4 byte nên có cả thảy 48 byte (0x30) trong phần buffer của OAM được dùng để mô tả cảnh này. Phần buffer của OAM bắt đầu tại $0500, và 2 vật thể này dùng hết 0x30 byte nên bắt đầu từ địa chỉ $0530 trở đi, ta thấy tọa độ Y của tất cả các sprite còn lại đều có giá trị 0xF0, tức pixel thứ 240 từ trên đỉnh màn hình tính xuống. Nói cách khác, 128-12 = 116 sprite còn lại không được sử dụng đến, được giấu ở tọa độ Y = 240, tức nằm ngoài vùng hiển thị của màn hình. Do vậy, mặc dù máy SFC luôn hiển thị 128 sprite trong mỗi frame mà CPU xử lý routine này, nhưng ta không nhìn thấy gì khác ngoài các sprite cấu thành nên vật thể được phép xuất hiện trong phân cảnh đó.

Địa chỉ $0500 là nơi bắt đầu phần buffer của OAM table #1, còn OAM table #2 bắt đầu tại $0700 đến $071F. Như vậy, $0500 ~ $071F là đủ điều khiển OAM table #1 và table #2, nhưng game này còn sử dụng đến một số table phụ khác từ $0720 trở đi để tính toán các thành phần trong table. Game này cho phép xuất hiện 0x30 (48) vật thể trên màn hình, mỗi vật thể chiếm 2 byte trong các table phụ nên mỗi table phụ chiếm 0x60 byte. Dưới đây là một vài table phụ.

$0720 ~ $077F: table thuộc tính 1 của vật thể

$0780 ~ $07DF: table thuộc tính 2 của vật thể

$07E0 ~ $083F: table tọa độ X của vật thể

$0840 ~ $089F: table tọa độ Y của vật thể

$08A0 ~ $08FF: table chứa ID của vật thể phụ như vũ khí trên tay nhân vật, sprite khói lửa,...

$0900 ~ $095F: table chứa pointer dẫn đến dữ liệu đồ họa của cái bóng dưới chân nhân vật

$0960 ~ $09BF: table chứa thông tin về tốc độ di chuyển, thời gian tồn tại của vật thể, thời gian tồn tại của hiệu ứng trên màn hình

$0B40 ~ $0B9E: table địa chỉ Vram của sprite thể hiện vật thể


Table phụ đầu tiên là table thuộc tính 1 của vật thể. Đây là checkpoint đầu tiên để kiểm tra xem vật thể có được hiển thị trên màn hình hay không, vật thể dùng pallette màu nào, có mức độ ưu tiên như thế nào. Table phụ thứ hai định nghĩa nên những thuộc tính khác của vật thể: có lật ngược sprite hay không, xác định dữ liệu đồ họa của sprite trong Rom. Hai table phụ tiếp theo chứa thông tin về tọa độ nơi vật thể xuất hiện. Table $0B40 chứa thông tin về địa chỉ Vram của sprite cấu thành nên vật thể.


C0/DFEB: A20000 LDX #$0000

C0/DFEE: A03000 LDY #$0030 //xử lý 0x30 vật thể

C0/DFF1: BD2007 LDA $0720,X //table thuộc tính 1

C0/DFF4: 2930C0 AND #$C030

C0/DFF7: C930C0 CMP #$C030 //kiểm tra bit 4, bit 5 set

C0/DFFA: D008 BNE $E004

C0/DFFC: 20F8E0 JSR $E0F8 //xử lý sprite

C0/DFFF: 9003 BCC $E004

C0/E001: 4CCAE0 JMP $E0CA //kết thúc routine


Routine xử lý từng sprite ở $80E0F8, nhưng chỉ khi bit 4 và bit 5 của 2 byte thuộc tính 1 được set thì sprite mới được xử lý. Tại routine này, những thông tin như tọa độ X và Y, pallette màu, độ ưu tiên của sprite lần lượt được ghi vào OAM table.


C0/E0F8: 865E STX $5E

C0/E0FA: 8446 STY $46

C0/E0FC: BD2007 LDA $0720,X //đọc table thuộc tính 1

C0/E0FF: 855C STA $5C

C0/E101: 29003E AND #$3E00 //chỉ giữ lại thông tin pallette màu và độ ưu tiên

C0/E104: 855A STA $5A

C0/E106: BD8007 LDA $0780,X //đọc table thuộc tính 2

C0/E109: 853A STA $3A

C0/E10B: 2900C0 AND #$C000 //chỉ giữ lại thông tin lật sprite (bit 15, 14)

C0/E10E: 8552 STA $52

C0/E110: BDE007 LDA $07E0,X //đọc thông tin tọa độ X

C0/E113: 853C STA $3C

C0/E115: BD4008 LDA $0840,X //đọc thông tin tọa độ Y

C0/E118: 853E STA $3E

C0/E11A: BD400B LDA $0B40,X //offset ID của sprite

C0/E11D: 29FF01 AND #$01FF

C0/E120: 8550 STA $50

C0/E122: 245B BIT $5B //kiểm tra bit 6 của 2 byte thuộc tính 1

C0/E124: 501F BVC $E145 //nếu bit 6 được bật thì xử lý thành phần phụ như vũ khí của nhân vật

C0/E126: BDA008 LDA $08A0,X //đọc pointer đến thành phần phụ

C0/E129: 297E00 AND #$007E

C0/E12C: AA TAX

C0/E12D: BDE007 LDA $07E0,X //đọc tọa độ X của thành phần phụ

C0/E130: 18 CLC

C0/E131: 653C ADC $3C

C0/E133: 853C STA $3C

C0/E135: BD4008 LDA $0840,X //đọc tọa độ Y của thành phần phụ

C0/E138: 18 CLC

C0/E139: 653E ADC $3E

C0/E13B: 853E STA $3E

C0/E13D: BD2007 LDA $0720,X

C0/E140: 294000 AND #$0040

C0/E143: D0E1 BNE $E126

C0/E145: A55C LDA $5C

C0/E147: 290700 AND #$0007

C0/E14A: 0A ASL A

C0/E14B: AA TAX

C0/E14C: 7C4FE1 JMP ($E14F,X)


dw $E15F, $E174, $E228D, $E28D

dw $E30E, $E30E, $E30E, $E30E


C0/E15F: 245B BIT $5B

C0/E161: 103B BPL $E19E //nếu bit 7 của 2 byte trong table thuộc tính 1 được set thì xử lý như sprite trên map

C0/E163: A53C LDA $3C //xử lý tọa độ sprite trên map

C0/E165: 38 SEC

C0/E166: E5C5 SBC $C5

C0/E168: 853C STA $3C

C0/E16A: A53E LDA $3E

C0/E16C: 18 CLC

C0/E16D: E5C7 SBC $C7

C0/E16F: 853E STA $3E

C0/E171: 4C9EE1 JMP $E19E

C0/E174: A53C LDA $3C //tọa độ sprite = tọa độ sprite ÷ 8

C0/E176: 4A LSR A

C0/E177: 4A LSR A

C0/E178: 4A LSR A

C0/E179: 243C BIT $3C

C0/E17B: 1003 BPL $E180

C0/E17D: 0900E0 ORA #$E000

C0/E180: 245B BIT $5B

C0/E182: 1003 BPL $E187

C0/E184: 38 SEC

C0/E185: E5C5 SBC $C5

C0/E187: 853C STA $3C

C0/E189: A53E LDA $3E

C0/E18B: 4A LSR A

C0/E18C: 4A LSR A

C0/E18D: 4A LSR A

C0/E18E: 243E BIT $3E

C0/E190: 1003 BPL $E195

C0/E192: 0900E0 ORA #$E000

C0/E195: 245B BIT $5B

C0/E197: 1003 BPL $E19C

C0/E199: 18 CLC

C0/E19A: E5C7 SBC $C7

C0/E19C: 853E STA $3E

C0/E19E: A53B LDA $3B

C0/E1A0: 293F00 AND #$003F //trong số thông tin ở table thuộc tính 2, giữ phần thông tin địa chỉ graphic của sprite

C0/E1A3: 8530 STA $30

C0/E1A5: 0A ASL A

C0/E1A6: 6530 ADC $30

C0/E1A8: AA TAX //khối graphic

C0/E1A9: A53A LDA $3A

C0/E1AB: 29FF00 AND #$00FF

C0/E1AE: 0A ASL A

C0/E1AF: A8 TAY //graphic ID trong khối graphic

C0/E1B0: BF3000C4 LDA $C40030,X //địa chỉ graphic trong Rom

C0/E1B4: 8530 STA $30

C0/E1B6: BF3100C4 LDA $C40031,X

C0/E1BA: 8531 STA $31

C0/E1BC: B730 LDA [$30],Y

C0/E1BE: 8530 STA $30

C0/E1C0: A00000 LDY #$0000

C0/E1C3: B730 LDA [$30],Y //đọc số lượng sprite trong khối vật thể

C0/E1C5: 29FF00 AND #$00FF

C0/E1C8: F06A BEQ $E234

C0/E1CA: 8538 STA $38 //ghi số lượng sprite

C0/E1CC: C8 INY

C0/E1CD: B730 LDA [$30],Y //đọc kích thước, ID sprite

C0/E1CF: 8558 STA $58

C0/E1D1: 290010 AND #$1000

C0/E1D4: D003 BNE $E1D9

C0/E1D6: A90008 LDA #$0800

C0/E1D9: EB XBA

C0/E1DA: 8554 STA $54 //ghi kích thước sprite

C0/E1DC: C8 INY

C0/E1DD: B730 LDA [$30],Y //đọc tọa độ tương đối Y của sprite

C0/E1DF: 2900FF AND #$FF00

C0/E1E2: 1003 BPL $E1E7

C0/E1E4: 09FF00 ORA #$00FF //nếu Y là số âm

C0/E1E7: EB XBA

C0/E1E8: 18 CLC

C0/E1E9: 2452 BIT $52 //kiểm tra sprite có thuộc tính lật ngược theo chiều dọc không

C0/E1EB: 1007 BPL $E1F4

C0/E1ED: 49FFFF EOR #$FFFF //lật đối xứng theo trục hoành

C0/E1F0: 38 SEC

C0/E1F1: E554 SBC $54 //trừ kích thước 1 tile

C0/E1F3: 38 SEC

C0/E1F4: 653E ADC $3E //cộng tọa độ Y tương đối với tọa độ Y tuyệt đối

C0/E1F6: C8 INY

C0/E1F7: C9F1FF CMP #$FFF1

C0/E1FA: B005 BCS $E201

C0/E1FC: C9F000 CMP #$00F0

C0/E1FF: B02D BCS $E22E

C0/E201: 29FF00 AND #$00FF

C0/E204: EB XBA

C0/E205: 8556 STA $56 //ghi tọa độ Y của sprite

C0/E207: B730 LDA [$30],Y

C0/E209: 2900FF AND #$FF00

C0/E20C: 1003 BPL $E211

C0/E20E: 09FF00 ORA #$00FF //tọa độ Y âm

C0/E211: EB XBA

C0/E212: 18 CLC

C0/E213: 2452 BIT $52

C0/E215: 5007 BVC $E21E //kiểm tra sprite có thuộc tính lật ngược theo chiều dọc không

C0/E217: 49FFFF EOR #$FFFF

C0/E21A: 38 SEC

C0/E21B: E554 SBC $54 //trừ kích thước 1 tile

C0/E21D: 38 SEC

C0/E21E: 653C ADC $3C //cộng tọa độ X

C0/E220: 8534 STA $34

C0/E222: A64E LDX $4E

C0/E224: C9F1FF CMP #$FFF1

C0/E227: B011 BCS $E23A //tọa độ X là số âm

C0/E229: C90001 CMP #$0100

C0/E22C: 9014 BCC $E242

C0/E22E: C8 INY

C0/E22F: C8 INY

C0/E230: C638 DEC $38 //lặp đến hết số lượng sprite trong khối vật thể

C0/E232: D099 BNE $E1CD

C0/E234: A65E LDX $5E

C0/E236: A446 LDY $46

C0/E238: 18 CLC

C0/E239: 60 RTS


C0/E23A: BD0007 LDA $0700,X //2 bit ở table #2

C0/E23D: 054A ORA $4A

C0/E23F: 9D0007 STA $0700,X

C0/E242: 064A ASL $4A

C0/E244: A554 LDA $54

C0/E246: C91000 CMP #$0010

C0/E249: D008 BNE $E253

C0/E24B: BD0007 LDA $0700,X //sprite lớn

C0/E24E: 054A ORA $4A

C0/E250: 9D0007 STA $0700,X

C0/E253: 064A ASL $4A

C0/E255: 9006 BCC $E25D

C0/E257: 264A ROL $4A

C0/E259: E64E INC $4E

C0/E25B: E64E INC $4E

C0/E25D: A64C LDX $4C //thứ tự sprite trong table

C0/E25F: A534 LDA $34 //tọa độ X tuyệt đối

C0/E261: 29FF00 AND #$00FF //bỏ bit thừa

C0/E264: 0556 ORA $56 //tọa độ Y tuyệt đối

C0/E266: 9D0005 STA $0500,X

C0/E269: A558 LDA $58 //ID sprite

C0/E26B: 18 CLC

C0/E26C: 6550 ADC $50 //offset ID của sprite

C0/E26E: 4552 EOR $52 //thuộc tính của sprite: lật ngang lật dọc

C0/E270: 29FFCF AND #$CFFF //loại bỏ bit thừa

C0/E273: 18 CLC

C0/E274: 655A ADC $5A //pallette màu, độ ưu tiên

C0/E276: 9D0205 STA $0502,X

C0/E279: 8A TXA

C0/E27A: 18 CLC

C0/E27B: 690400 ADC #$0004

C0/E27E: 854C STA $4C

C0/E280: C90002 CMP #$0200

C0/E283: D0A9 BNE $E22E

C0/E285: A65E LDX $5E

C0/E287: A446 LDY $46

C0/E289: 6448 STZ $48

C0/E28B: 38 SEC

C0/E28C: 60 RTS


Dữ liệu của khối vật thể trong Rom gồm các byte sau:

  • Byte 1: số lượng sprite cấu thành nên vật thể đó

  • 4 byte tiếp theo gồm: số ID của tile đồ họa trong Vram, cỡ sprite (00: nhỏ/01: lớn), tọa độ Y, tọa độ X
Với byte chỉ định cỡ sprite, nếu set bit 0 thì có thể chỉ đến sprite trong phạm vi 0x100 tới 0x1FF, tuy nhiên cách dùng này khá bất tiện trong việc chỉ định tile đồ họa của sprite, nên thường không set bit này, mà dùng kết hợp với 2 byte ở table $0B40 để chỉ định tile đồ họa trong phạm vi trên.

7vInUlUHYJ5C5gOREQs-pGCsP_iaHgjwsuYoKtNPmnF37poV3KM-RV7kJmkujFSrwdN3Rb9F7ZOS-jDifl1HoMRlHeO8QqkEpS_oy59n3oQCTPDy6Fvk0INZ6L_37BJlcg=w1280


Cách dùng

  • Bật/tắt hiển thị sprite trong trận đấu: ghi giá trị 16 bit vào buffer table ở $0720 với bit 4, 5 được set ($XX30).

  • Hiển thị sprite trên map: ghi giá trị 16 bit vào buffer table ở $0720 với bit 4, 5, 7 được set ($XXB0).

  • Hiển thị sprite vũ khí, hiệu ứng trong trận đấu: ghi giá trị 16 bit vào buffer table ở $0720 với bit 4, 5, 6 được set ($XX70).

  • Chỉ định ID đồ họa của sprite: ghi giá trị 16 bit vào buffer table ở $0780: với hi-byte là ID của nhóm graphic, low-byte là số ID của sprite trong nhóm đó.

  • Lật ngược sprite theo chiều dọc: ghi giá trị 16 bit vào buffer table ở $0780 với bit 15 được set.

  • Lật ngược sprite theo chiều ngang: ghi giá trị 16 bit vào buffer table ở $0780 với bit 14 được set.

  • Tọa độ X của sprite: ghi giá trị 16 bit vào buffer table ở $07E0.

  • Tọa độ Y của sprite: ghi giá trị 16 bit vào buffer table ở $840.

  • Chỉ định ID đồ họa của sprite trong phạm vi 0x00 ~ 0x01FF: ghi giá trị 16 bit vào buffer table ở $0B40.

 
XNw03eL.png


Event $1F - 22

C1/83FB: 20718A JSR $8A71
C1/83FE: 242A BIT $2A
C1/8400: 700D BVS $840F
C1/8402: C9F000 CMP #$00F0
C1/8405: 9023 BCC $842A
C1/8407: 290F00 AND #$000F
C1/840A: 0A ASL A
C1/840B: AA TAX
C1/840C: 7C7190 JMP ($9071,X)
C1/840F: C9F600 CMP #$00F6
C1/8412: B0F3 BCS $8407
C1/8414: C9F000 CMP #$00F0 //check kanji
C1/8417: 903D BCC $8456 //kana
C1/8419: 1A INC A
C1/841A: 290F00 AND #$000F
C1/841D: 8500 STA $00
C1/841F: 20718A JSR $8A71
C1/8422: 8501 STA $01
C1/8424: A500 LDA $00
C1/8426: EB XBA
C1/8427: 4C5684 JMP $8456
C1/842A: 652E ADC $2E
C1/842C: 8500 STA $00
C1/842E: 20A18A JSR $8AA1
C1/8431: A618 LDX $18
C1/8433: 242A BIT $2A
C1/8435: 1012 BPL $8449
C1/8437: BF00807E LDA $7E8000,X
C1/843B: 2900FF AND #$FF00
C1/843E: 0500 ORA $00
C1/8440: 9F00807E STA $7E8000,X
C1/8444: E618 INC $18
C1/8446: 4CFB83 JMP $83FB
C1/8449: A500 LDA $00
C1/844B: 9F00807E STA $7E8000,X
C1/844F: E618 INC $18
C1/8451: E618 INC $18
C1/8453: 4CFB83 JMP $83FB
C1/8456: 8526 STA $26
C1/8458: C90001 CMP #$0100
C1/845B: B00E BCS $846B
C1/845D: A528 LDA $28
C1/845F: 302D BMI $848E
C1/8461: 38 SEC
C1/8462: E90200 SBC #$0002
C1/8465: 8528 STA $28
C1/8467: B025 BCS $848E
C1/8469: 800B BRA $8476
C1/846B: A528 LDA $28
C1/846D: 301F BMI $848E
C1/846F: E90300 SBC #$0003
C1/8472: 8528 STA $28
C1/8474: B018 BCS $848E
C1/8476: 22198A81 JSR $818A19
C1/847A: A516 LDA $16
C1/847C: 18 CLC
C1/847D: 698000 ADC #$0080
C1/8480: 8518 STA $18
C1/8482: 8516 STA $16
C1/8484: A52A LDA $2A
C1/8486: 29FF00 AND #$00FF
C1/8489: 18 CLC
C1/848A: 6528 ADC $28
C1/848C: 8528 STA $28
C1/848E: A426 LDY $26
C1/8490: A618 LDX $18
C1/8492: A5D0 LDA $D0
C1/8494: 18 CLC
C1/8495: 6D180E ADC $0E18
C1/8498: 29FF03 AND #$03FF
C1/849B: 18 CLC
C1/849C: 652E ADC $2E
C1/849E: 24D0 BIT $D0
C1/84A0: 101B BPL $84BD
C1/84A2: E8 INX
C1/84A3: E8 INX
C1/84A4: 18 CLC
C1/84A5: 690200 ADC #$0002
C1/84A8: 9F00807E STA $7E8000,X
C1/84AC: 18 CLC
C1/84AD: 690100 ADC #$0001
C1/84B0: 9F40807E STA $7E8040,X
C1/84B4: C00001 CPY #$0100
C1/84B7: 9027 BCC $84E0
C1/84B9: E8 INX
C1/84BA: E8 INX
C1/84BB: 8023 BRA $84E0
C1/84BD: 9F00807E STA $7E8000,X
C1/84C1: 18 CLC
C1/84C2: 690100 ADC #$0001
C1/84C5: 9F40807E STA $7E8040,X
C1/84C9: E8 INX
C1/84CA: E8 INX
C1/84CB: C00001 CPY #$0100
C1/84CE: 9010 BCC $84E0
C1/84D0: 18 CLC
C1/84D1: 690100 ADC #$0001
C1/84D4: 9F00807E STA $7E8000,X
C1/84D8: 18 CLC
C1/84D9: 690100 ADC #$0001
C1/84DC: 9F40807E STA $7E8040,X
C1/84E0: 8618 STX $18
C1/84E2: A526 LDA $26
C1/84E4: 22EB8481 JSR $8184EB //font tileset
C1/84E8: 4CFB83 JMP $83FB
C1/84EB: 24CE BIT $CE
C1/84ED: 3003 BMI $84F2
C1/84EF: 4CB387 JMP $87B3
C1/84F2: 8500 STA $00
C1/84F4: C90001 CMP #$0100
C1/84F7: 9011 BCC $850A
C1/84F9: C90005 CMP #$0500
C1/84FC: B006 BCS $8504
C1/84FE: E9FF00 SBC #$00FF
C1/8501: 4CC785 JMP $85C7
C1/8504: E90005 SBC #$0500
C1/8507: 4CBD86 JMP $86BD
C1/850A: 0A ASL A
C1/850B: 0A ASL A
C1/850C: 0A ASL A
C1/850D: 0A ASL A
C1/850E: A8 TAY
C1/850F: A5D0 LDA $D0 //char id
C1/8511: 0A ASL A
C1/8512: 0A ASL A
C1/8513: 0A ASL A
C1/8514: 0A ASL A
C1/8515: 0A ASL A
C1/8516: AA TAX
C1/8517: E220 SEP #$20
C1/8519: 8B PHB
C1/851A: A9EE LDA #$EE
C1/851C: 48 PHA
C1/851D: AB PLB
C1/851E: A908 LDA #$08
C1/8520: 8502 STA $02
C1/8522: 24D1 BIT $D1
C1/8524: 303A BMI $8560
C1/8526: B90080 LDA $8000,Y
C1/8529: 9F00807F STA $7F8000,X
C1/852D: B90880 LDA $8008,Y
C1/8530: 9F20807F STA $7F8020,X
C1/8534: A5FD LDA $FD
C1/8536: 9F01807F STA $7F8001,X
C1/853A: 9F21807F STA $7F8021,X
C1/853E: C220 REP #$20
C1/8540: A5FE LDA $FE
C1/8542: 9F10807F STA $7F8010,X
C1/8546: 9F30807F STA $7F8030,X
C1/854A: E220 SEP #$20
C1/854C: C8 INY
C1/854D: E8 INX
C1/854E: E8 INX
C1/854F: C602 DEC $02
C1/8551: D0D3 BNE $8526
C1/8553: C220 REP #$20
C1/8555: A5D0 LDA $D0
C1/8557: 1A INC A
C1/8558: 1A INC A
C1/8559: 29FF03 AND #$03FF
C1/855C: 85D0 STA $D0
C1/855E: AB PLB
C1/855F: 6B RTL

C1/8560: C220 REP #$20
C1/8562: B90080 LDA $8000,Y
C1/8565: 29FF00 AND #$00FF
C1/8568: 0A ASL A
C1/8569: 0A ASL A
C1/856A: 0A ASL A
C1/856B: 0A ASL A
C1/856C: 8504 STA $04
C1/856E: B90880 LDA $8008,Y
C1/8571: 29FF00 AND #$00FF
C1/8574: 0A ASL A
C1/8575: 0A ASL A
C1/8576: 0A ASL A
C1/8577: 0A ASL A
C1/8578: 8506 STA $06
C1/857A: A5FE LDA $FE
C1/857C: 9F50807F STA $7F8050,X
C1/8580: 9F70807F STA $7F8070,X
C1/8584: E220 SEP #$20
C1/8586: BF00807F LDA $7F8000,X
C1/858A: 0505 ORA $05
C1/858C: 9F00807F STA $7F8000,X
C1/8590: A504 LDA $04
C1/8592: 9F40807F STA $7F8040,X
C1/8596: BF20807F LDA $7F8020,X
C1/859A: 0507 ORA $07
C1/859C: 9F20807F STA $7F8020,X
C1/85A0: A506 LDA $06
C1/85A2: 9F60807F STA $7F8060,X
C1/85A6: A5FD LDA $FD
C1/85A8: 9F41807F STA $7F8041,X
C1/85AC: 9F61807F STA $7F8061,X
C1/85B0: C8 INY
C1/85B1: E8 INX
C1/85B2: E8 INX
C1/85B3: C602 DEC $02
C1/85B5: D0A9 BNE $8560
C1/85B7: C220 REP #$20
C1/85B9: A5D0 LDA $D0
C1/85BB: 1A INC A
C1/85BC: 1A INC A
C1/85BD: 29FF03 AND #$03FF
C1/85C0: 090080 ORA #$8000
C1/85C3: 85D0 STA $D0
C1/85C5: AB PLB
C1/85C6: 6B RTL

C1/85C7: 0A ASL A
C1/85C8: 0A ASL A
C1/85C9: 0A ASL A
C1/85CA: 0A ASL A
C1/85CB: 0A ASL A
C1/85CC: A8 TAY
C1/85CD: A5D0 LDA $D0
C1/85CF: 0A ASL A
C1/85D0: 0A ASL A
C1/85D1: 0A ASL A
C1/85D2: 0A ASL A
C1/85D3: 0A ASL A
C1/85D4: AA TAX
C1/85D5: E220 SEP #$20
C1/85D7: 8B PHB
C1/85D8: A9EE LDA #$EE
C1/85DA: 48 PHA
C1/85DB: AB PLB
C1/85DC: A908 LDA #$08
C1/85DE: 8502 STA $02
C1/85E0: 24D1 BIT $D1
C1/85E2: 305B BMI $863F
C1/85E4: B90000 LDA $0000,Y
C1/85E7: 9F00807F STA $7F8000,X
C1/85EB: B90800 LDA $0008,Y
C1/85EE: 9F20807F STA $7F8020,X
C1/85F2: B91000 LDA $0010,Y
C1/85F5: 9F40807F STA $7F8040,X
C1/85F9: B91800 LDA $0018,Y
C1/85FC: 9F60807F STA $7F8060,X
C1/8600: A5FD LDA $FD
C1/8602: 9F01807F STA $7F8001,X
C1/8606: 9F21807F STA $7F8021,X
C1/860A: 9F41807F STA $7F8041,X
C1/860E: 9F61807F STA $7F8061,X
C1/8612: C220 REP #$20
C1/8614: A5FE LDA $FE
C1/8616: 9F10807F STA $7F8010,X
C1/861A: 9F30807F STA $7F8030,X
C1/861E: 9F50807F STA $7F8050,X
C1/8622: 9F70807F STA $7F8070,X
C1/8626: E220 SEP #$20
C1/8628: C8 INY
C1/8629: E8 INX
C1/862A: E8 INX
C1/862B: C602 DEC $02
C1/862D: D0B5 BNE $85E4
C1/862F: C220 REP #$20
C1/8631: A5D0 LDA $D0
C1/8633: 1A INC A
C1/8634: 1A INC A
C1/8635: 29FF03 AND #$03FF
C1/8638: 090080 ORA #$8000
C1/863B: 85D0 STA $D0
C1/863D: AB PLB
C1/863E: 6B RTL

C1/863F: C220 REP #$20
C1/8641: B90F00 LDA $000F,Y
C1/8644: 8504 STA $04
C1/8646: B90000 LDA $0000,Y
C1/8649: 0604 ASL $04
C1/864B: 2A ROL A
C1/864C: 0604 ASL $04
C1/864E: 2A ROL A
C1/864F: 0604 ASL $04
C1/8651: 2A ROL A
C1/8652: 0604 ASL $04
C1/8654: 2A ROL A
C1/8655: 8504 STA $04
C1/8657: B91700 LDA $0017,Y
C1/865A: 8506 STA $06
C1/865C: B90800 LDA $0008,Y
C1/865F: 0606 ASL $06
C1/8661: 2A ROL A
C1/8662: 0606 ASL $06
C1/8664: 2A ROL A
C1/8665: 0606 ASL $06
C1/8667: 2A ROL A
C1/8668: 0606 ASL $06
C1/866A: 2A ROL A
C1/866B: 8506 STA $06
C1/866D: A5FE LDA $FE
C1/866F: 9F50807F STA $7F8050,X
C1/8673: 9F70807F STA $7F8070,X
C1/8677: E220 SEP #$20
C1/8679: A505 LDA $05
C1/867B: 290F AND #$0F
C1/867D: 1F00807F ORA $7F8000,X
C1/8681: 9F00807F STA $7F8000,X
C1/8685: A504 LDA $04
C1/8687: 9F40807F STA $7F8040,X
C1/868B: A507 LDA $07
C1/868D: 290F AND #$0F
C1/868F: 1F20807F ORA $7F8020,X
C1/8693: 9F20807F STA $7F8020,X
C1/8697: A506 LDA $06
C1/8699: 9F60807F STA $7F8060,X
C1/869D: A5FD LDA $FD
C1/869F: 9F41807F STA $7F8041,X
C1/86A3: 9F61807F STA $7F8061,X
C1/86A7: C8 INY
C1/86A8: E8 INX
C1/86A9: E8 INX
C1/86AA: C602 DEC $02
C1/86AC: D091 BNE $863F
C1/86AE: C220 REP #$20
C1/86B0: A5D0 LDA $D0
C1/86B2: 18 CLC
C1/86B3: 690400 ADC #$0004
C1/86B6: 29FF03 AND #$03FF
C1/86B9: 85D0 STA $D0
C1/86BB: AB PLB
C1/86BC: 6B RTL

C1/86BD: 0A ASL A
C1/86BE: 0A ASL A
C1/86BF: 0A ASL A
C1/86C0: 0A ASL A
C1/86C1: 0A ASL A
C1/86C2: A8 TAY
C1/86C3: A5D0 LDA $D0
C1/86C5: 0A ASL A
C1/86C6: 0A ASL A
C1/86C7: 0A ASL A
C1/86C8: 0A ASL A
C1/86C9: 0A ASL A
C1/86CA: AA TAX
C1/86CB: E220 SEP #$20
C1/86CD: 8B PHB
C1/86CE: A9E2 LDA #$E2
C1/86D0: 48 PHA
C1/86D1: AB PLB
C1/86D2: A908 LDA #$08
C1/86D4: 8502 STA $02
C1/86D6: 24D1 BIT $D1
C1/86D8: 305B BMI $8735
C1/86DA: B90040 LDA $4000,Y
C1/86DD: 9F00807F STA $7F8000,X
C1/86E1: B90840 LDA $4008,Y
C1/86E4: 9F20807F STA $7F8020,X
C1/86E8: B91040 LDA $4010,Y
C1/86EB: 9F40807F STA $7F8040,X
C1/86EF: B91840 LDA $4018,Y
C1/86F2: 9F60807F STA $7F8060,X
C1/86F6: A5FD LDA $FD
C1/86F8: 9F01807F STA $7F8001,X
C1/86FC: 9F21807F STA $7F8021,X
C1/8700: 9F41807F STA $7F8041,X
C1/8704: 9F61807F STA $7F8061,X
C1/8708: C220 REP #$20
C1/870A: A5FE LDA $FE
C1/870C: 9F10807F STA $7F8010,X
C1/8710: 9F30807F STA $7F8030,X
C1/8714: 9F50807F STA $7F8050,X
C1/8718: 9F70807F STA $7F8070,X
C1/871C: E220 SEP #$20
C1/871E: C8 INY
C1/871F: E8 INX
C1/8720: E8 INX
C1/8721: C602 DEC $02
C1/8723: D0B5 BNE $86DA
C1/8725: C220 REP #$20
C1/8727: A5D0 LDA $D0
C1/8729: 1A INC A
C1/872A: 1A INC A
C1/872B: 29FF03 AND #$03FF
C1/872E: 090080 ORA #$8000
C1/8731: 85D0 STA $D0
C1/8733: AB PLB
C1/8734: 6B RTL

C1/8735: C220 REP #$20
C1/8737: B90F40 LDA $400F,Y
C1/873A: 8504 STA $04
C1/873C: B90040 LDA $4000,Y
C1/873F: 0604 ASL $04
C1/8741: 2A ROL A
C1/8742: 0604 ASL $04
C1/8744: 2A ROL A
C1/8745: 0604 ASL $04
C1/8747: 2A ROL A
C1/8748: 0604 ASL $04
C1/874A: 2A ROL A
C1/874B: 8504 STA $04
C1/874D: B91740 LDA $4017,Y
C1/8750: 8506 STA $06
C1/8752: B90840 LDA $4008,Y
C1/8755: 0606 ASL $06
C1/8757: 2A ROL A
C1/8758: 0606 ASL $06
C1/875A: 2A ROL A
C1/875B: 0606 ASL $06
C1/875D: 2A ROL A
C1/875E: 0606 ASL $06
C1/8760: 2A ROL A
C1/8761: 8506 STA $06
C1/8763: A5FE LDA $FE
C1/8765: 9F50807F STA $7F8050,X
C1/8769: 9F70807F STA $7F8070,X
C1/876D: E220 SEP #$20
C1/876F: A505 LDA $05
C1/8771: 290F AND #$0F
C1/8773: 1F00807F ORA $7F8000,X
C1/8777: 9F00807F STA $7F8000,X
C1/877B: A504 LDA $04
C1/877D: 9F40807F STA $7F8040,X
C1/8781: A507 LDA $07
C1/8783: 290F AND #$0F
C1/8785: 1F20807F ORA $7F8020,X
C1/8789: 9F20807F STA $7F8020,X
C1/878D: A506 LDA $06
C1/878F: 9F60807F STA $7F8060,X
C1/8793: A5FD LDA $FD
C1/8795: 9F41807F STA $7F8041,X
C1/8799: 9F61807F STA $7F8061,X
C1/879D: C8 INY
C1/879E: E8 INX
C1/879F: E8 INX
C1/87A0: C602 DEC $02
C1/87A2: D091 BNE $8735
C1/87A4: C220 REP #$20
C1/87A6: A5D0 LDA $D0
C1/87A8: 18 CLC
C1/87A9: 690400 ADC #$0004
C1/87AC: 29FF03 AND #$03FF
C1/87AF: 85D0 STA $D0
C1/87B1: AB PLB
C1/87B2: 6B RTL

C1/87B3: 8500 STA $00
C1/87B5: C90001 CMP #$0100
C1/87B8: 9011 BCC $87CB
C1/87BA: C90005 CMP #$0500
C1/87BD: B006 BCS $87C5
C1/87BF: E9FF00 SBC #$00FF
C1/87C2: 4C6F88 JMP $886F
C1/87C5: E90005 SBC #$0500
C1/87C8: 4C4489 JMP $8944
C1/87CB: 0A ASL A
C1/87CC: 0A ASL A
C1/87CD: 0A ASL A
C1/87CE: 0A ASL A
C1/87CF: A8 TAY
C1/87D0: A5D0 LDA $D0
C1/87D2: 0A ASL A
C1/87D3: 0A ASL A
C1/87D4: 0A ASL A
C1/87D5: 0A ASL A
C1/87D6: AA TAX
C1/87D7: E220 SEP #$20
C1/87D9: 8B PHB
C1/87DA: A9EE LDA #$EE
C1/87DC: 48 PHA
C1/87DD: AB PLB
C1/87DE: A908 LDA #$08
C1/87E0: 8502 STA $02
C1/87E2: 24D1 BIT $D1
C1/87E4: 302C BMI $8812
C1/87E6: B90080 LDA $8000,Y
C1/87E9: 9F00807F STA $7F8000,X
C1/87ED: B90880 LDA $8008,Y
C1/87F0: 9F10807F STA $7F8010,X
C1/87F4: A5FD LDA $FD
C1/87F6: 9F01807F STA $7F8001,X
C1/87FA: 9F11807F STA $7F8011,X
C1/87FE: C8 INY
C1/87FF: E8 INX
C1/8800: E8 INX
C1/8801: C602 DEC $02
C1/8803: D0E1 BNE $87E6
C1/8805: C220 REP #$20
C1/8807: A5D0 LDA $D0
C1/8809: 1A INC A
C1/880A: 1A INC A
C1/880B: 29FF03 AND #$03FF
C1/880E: 85D0 STA $D0
C1/8810: AB PLB
C1/8811: 6B RTL

C1/8812: C220 REP #$20
C1/8814: B90080 LDA $8000,Y
C1/8817: 29FF00 AND #$00FF
C1/881A: 0A ASL A
C1/881B: 0A ASL A
C1/881C: 0A ASL A
C1/881D: 0A ASL A
C1/881E: 8504 STA $04
C1/8820: B90880 LDA $8008,Y
C1/8823: 29FF00 AND #$00FF
C1/8826: 0A ASL A
C1/8827: 0A ASL A
C1/8828: 0A ASL A
C1/8829: 0A ASL A
C1/882A: 8506 STA $06
C1/882C: E220 SEP #$20
C1/882E: BF00807F LDA $7F8000,X
C1/8832: 0505 ORA $05
C1/8834: 9F00807F STA $7F8000,X
C1/8838: A504 LDA $04
C1/883A: 9F20807F STA $7F8020,X
C1/883E: BF10807F LDA $7F8010,X
C1/8842: 0507 ORA $07
C1/8844: 9F10807F STA $7F8010,X
C1/8848: A506 LDA $06
C1/884A: 9F30807F STA $7F8030,X
C1/884E: A5FD LDA $FD
C1/8850: 9F21807F STA $7F8021,X
C1/8854: 9F31807F STA $7F8031,X
C1/8858: C8 INY
C1/8859: E8 INX
C1/885A: E8 INX
C1/885B: C602 DEC $02
C1/885D: D0B3 BNE $8812
C1/885F: C220 REP #$20
C1/8861: A5D0 LDA $D0
C1/8863: 1A INC A
C1/8864: 1A INC A
C1/8865: 29FF03 AND #$03FF
C1/8868: 090080 ORA #$8000
C1/886B: 85D0 STA $D0
C1/886D: AB PLB
C1/886E: 6B RTL

C1/886F: 0A ASL A
C1/8870: 0A ASL A
C1/8871: 0A ASL A
C1/8872: 0A ASL A
C1/8873: 0A ASL A
C1/8874: A8 TAY
C1/8875: A5D0 LDA $D0
C1/8877: 0A ASL A
C1/8878: 0A ASL A
C1/8879: 0A ASL A
C1/887A: 0A ASL A
C1/887B: AA TAX
C1/887C: E220 SEP #$20
C1/887E: 8B PHB
C1/887F: A9EE LDA #$EE
C1/8881: 48 PHA
C1/8882: AB PLB
C1/8883: A908 LDA #$08
C1/8885: 8502 STA $02
C1/8887: 24D1 BIT $D1
C1/8889: 3045 BMI $88D0
C1/888B: B90000 LDA $0000,Y
C1/888E: 9F00807F STA $7F8000,X
C1/8892: B90800 LDA $0008,Y
C1/8895: 9F10807F STA $7F8010,X
C1/8899: B91000 LDA $0010,Y
C1/889C: 9F20807F STA $7F8020,X
C1/88A0: B91800 LDA $0018,Y
C1/88A3: 9F30807F STA $7F8030,X
C1/88A7: A5FD LDA $FD
C1/88A9: 9F01807F STA $7F8001,X
C1/88AD: 9F11807F STA $7F8011,X
C1/88B1: 9F21807F STA $7F8021,X
C1/88B5: 9F31807F STA $7F8031,X
C1/88B9: C8 INY
C1/88BA: E8 INX
C1/88BB: E8 INX
C1/88BC: C602 DEC $02
C1/88BE: D0CB BNE $888B
C1/88C0: C220 REP #$20
C1/88C2: A5D0 LDA $D0
C1/88C4: 1A INC A
C1/88C5: 1A INC A
C1/88C6: 29FF03 AND #$03FF
C1/88C9: 090080 ORA #$8000
C1/88CC: 85D0 STA $D0
C1/88CE: AB PLB
C1/88CF: 6B RTL

C1/88D0: C220 REP #$20
C1/88D2: B90F00 LDA $000F,Y
C1/88D5: 8504 STA $04
C1/88D7: B90000 LDA $0000,Y
C1/88DA: 0604 ASL $04
C1/88DC: 2A ROL A
C1/88DD: 0604 ASL $04
C1/88DF: 2A ROL A
C1/88E0: 0604 ASL $04
C1/88E2: 2A ROL A
C1/88E3: 0604 ASL $04
C1/88E5: 2A ROL A
C1/88E6: 8504 STA $04
C1/88E8: B91700 LDA $0017,Y
C1/88EB: 8506 STA $06
C1/88ED: B90800 LDA $0008,Y
C1/88F0: 0606 ASL $06
C1/88F2: 2A ROL A
C1/88F3: 0606 ASL $06
C1/88F5: 2A ROL A
C1/88F6: 0606 ASL $06
C1/88F8: 2A ROL A
C1/88F9: 0606 ASL $06
C1/88FB: 2A ROL A
C1/88FC: 8506 STA $06
C1/88FE: E220 SEP #$20
C1/8900: A505 LDA $05
C1/8902: 290F AND #$0F
C1/8904: 1F00807F ORA $7F8000,X
C1/8908: 9F00807F STA $7F8000,X
C1/890C: A504 LDA $04
C1/890E: 9F20807F STA $7F8020,X
C1/8912: A507 LDA $07
C1/8914: 290F AND #$0F
C1/8916: 1F10807F ORA $7F8010,X
C1/891A: 9F10807F STA $7F8010,X
C1/891E: A506 LDA $06
C1/8920: 9F30807F STA $7F8030,X
C1/8924: A5FD LDA $FD
C1/8926: 9F21807F STA $7F8021,X
C1/892A: 9F31807F STA $7F8031,X
C1/892E: C8 INY
C1/892F: E8 INX
C1/8930: E8 INX
C1/8931: C602 DEC $02
C1/8933: D09B BNE $88D0
C1/8935: C220 REP #$20
C1/8937: A5D0 LDA $D0
C1/8939: 18 CLC
C1/893A: 690400 ADC #$0004
C1/893D: 29FF03 AND #$03FF
C1/8940: 85D0 STA $D0
C1/8942: AB PLB
C1/8943: 6B RTL

C1/8944: 0A ASL A
C1/8945: 0A ASL A
C1/8946: 0A ASL A
C1/8947: 0A ASL A
C1/8948: 0A ASL A
C1/8949: A8 TAY
C1/894A: A5D0 LDA $D0
C1/894C: 0A ASL A
C1/894D: 0A ASL A
C1/894E: 0A ASL A
C1/894F: 0A ASL A
C1/8950: AA TAX
C1/8951: E220 SEP #$20
C1/8953: 8B PHB
C1/8954: A9E2 LDA #$E2
C1/8956: 48 PHA
C1/8957: AB PLB
C1/8958: A908 LDA #$08
C1/895A: 8502 STA $02
C1/895C: 24D1 BIT $D1
C1/895E: 3045 BMI $89A5
C1/8960: B90040 LDA $4000,Y
C1/8963: 9F00807F STA $7F8000,X
C1/8967: B90840 LDA $4008,Y
C1/896A: 9F10807F STA $7F8010,X
C1/896E: B91040 LDA $4010,Y
C1/8971: 9F20807F STA $7F8020,X
C1/8975: B91840 LDA $4018,Y
C1/8978: 9F30807F STA $7F8030,X
C1/897C: A5FD LDA $FD
C1/897E: 9F01807F STA $7F8001,X
C1/8982: 9F11807F STA $7F8011,X
C1/8986: 9F21807F STA $7F8021,X
C1/898A: 9F31807F STA $7F8031,X
C1/898E: C8 INY
C1/898F: E8 INX
C1/8990: E8 INX
C1/8991: C602 DEC $02
C1/8993: D0CB BNE $8960
C1/8995: C220 REP #$20
C1/8997: A5D0 LDA $D0
C1/8999: 1A INC A
C1/899A: 1A INC A
C1/899B: 29FF03 AND #$03FF
C1/899E: 090080 ORA #$8000
C1/89A1: 85D0 STA $D0
C1/89A3: AB PLB
C1/89A4: 6B RTL

C1/89A5: C220 REP #$20
C1/89A7: B90F40 LDA $400F,Y
C1/89AA: 8504 STA $04
C1/89AC: B90040 LDA $4000,Y
C1/89AF: 0604 ASL $04
C1/89B1: 2A ROL A
C1/89B2: 0604 ASL $04
C1/89B4: 2A ROL A
C1/89B5: 0604 ASL $04
C1/89B7: 2A ROL A
C1/89B8: 0604 ASL $04
C1/89BA: 2A ROL A
C1/89BB: 8504 STA $04
C1/89BD: B91740 LDA $4017,Y
C1/89C0: 8506 STA $06
C1/89C2: B90840 LDA $4008,Y
C1/89C5: 0606 ASL $06
C1/89C7: 2A ROL A
C1/89C8: 0606 ASL $06
C1/89CA: 2A ROL A
C1/89CB: 0606 ASL $06
C1/89CD: 2A ROL A
C1/89CE: 0606 ASL $06
C1/89D0: 2A ROL A
C1/89D1: 8506 STA $06
C1/89D3: E220 SEP #$20
C1/89D5: A505 LDA $05
C1/89D7: 290F AND #$0F
C1/89D9: 1F00807F ORA $7F8000,X
C1/89DD: 9F00807F STA $7F8000,X
C1/89E1: A504 LDA $04
C1/89E3: 9F20807F STA $7F8020,X
C1/89E7: A507 LDA $07
C1/89E9: 290F AND #$0F
C1/89EB: 1F10807F ORA $7F8010,X
C1/89EF: 9F10807F STA $7F8010,X
C1/89F3: A506 LDA $06
C1/89F5: 9F30807F STA $7F8030,X
C1/89F9: A5FD LDA $FD
C1/89FB: 9F21807F STA $7F8021,X
C1/89FF: 9F31807F STA $7F8031,X
C1/8A03: C8 INY
C1/8A04: E8 INX
C1/8A05: E8 INX
C1/8A06: C602 DEC $02
C1/8A08: D09B BNE $89A5
C1/8A0A: C220 REP #$20
C1/8A0C: A5D0 LDA $D0
C1/8A0E: 18 CLC
C1/8A0F: 690400 ADC #$0004
C1/8A12: 29FF03 AND #$03FF
C1/8A15: 85D0 STA $D0
C1/8A17: AB PLB
C1/8A18: 6B RTL

C1/8A19: A5D0 LDA $D0
C1/8A1B: 1007 BPL $8A24
C1/8A1D: 1A INC A
C1/8A1E: 1A INC A
C1/8A1F: 29FF03 AND #$03FF
C1/8A22: 85D0 STA $D0
C1/8A24: 6B RTL

C1/8A25: E210 SEP #$10
C1/8A27: C220 REP #$20
C1/8A29: A48C LDY $8C
C1/8A2B: A5D0 LDA $D0
C1/8A2D: 38 SEC
C1/8A2E: E5D2 SBC $D2
C1/8A30: 29FF03 AND #$03FF
C1/8A33: 24CE BIT $CE
C1/8A35: 1001 BPL $8A38
C1/8A37: 0A ASL A
C1/8A38: 0A ASL A
C1/8A39: 0A ASL A
C1/8A3A: 0A ASL A
C1/8A3B: 0A ASL A
C1/8A3C: 990004 STA $0400,Y
C1/8A3F: A5D2 LDA $D2
C1/8A41: 29FF03 AND #$03FF
C1/8A44: 24CE BIT $CE
C1/8A46: 1001 BPL $8A49
C1/8A48: 0A ASL A
C1/8A49: 0A ASL A
C1/8A4A: 0A ASL A
C1/8A4B: 0A ASL A
C1/8A4C: 8500 STA $00
C1/8A4E: 0A ASL A
C1/8A4F: 690080 ADC #$8000
C1/8A52: 990204 STA $0402,Y
C1/8A55: A97F00 LDA #$007F
C1/8A58: 990404 STA $0404,Y
C1/8A5B: A5CE LDA $CE
C1/8A5D: 18 CLC
C1/8A5E: 6500 ADC $00
C1/8A60: 990604 STA $0406,Y
C1/8A63: E220 SEP #$20
C1/8A65: A58C LDA $8C
C1/8A67: 18 CLC
C1/8A68: 6908 ADC #$08
C1/8A6A: 858C STA $8C
C1/8A6C: E68E INC $8E
C1/8A6E: C230 REP #$30
C1/8A70: 6B RTL

C1/8A71: A51E LDA $1E
C1/8A73: D00B BNE $8A80
C1/8A75: A00000 LDY #$0000
C1/8A78: B71A LDA [$1A],Y
C1/8A7A: 29FF00 AND #$00FF
C1/8A7D: E61A INC $1A
C1/8A7F: 60 RTS

C1/8A80: 29FF00 AND #$00FF
C1/8A83: F00E BEQ $8A93
C1/8A85: C61E DEC $1E
C1/8A87: 242A BIT $2A
C1/8A89: 5004 BVC $8A8F
C1/8A8B: A90000 LDA #$0000
C1/8A8E: 60 RTS

C1/8A8F: A92800 LDA #$0028
C1/8A92: 60 RTS

C1/8A93: C61F DEC $1F
C1/8A95: E230 SEP #$30
C1/8A97: 224A8680 JSR $80864A
C1/8A9B: C230 REP #$30
C1/8A9D: 29FF00 AND #$00FF
C1/8AA0: 60 RTS

C1/8AA1: A528 LDA $28
C1/8AA3: 3021 BMI $8AC6
C1/8AA5: 38 SEC
C1/8AA6: E90200 SBC #$0002
C1/8AA9: 8528 STA $28
C1/8AAB: B019 BCS $8AC6
C1/8AAD: A94000 LDA #$0040
C1/8AB0: 242A BIT $2A
C1/8AB2: 1001 BPL $8AB5
C1/8AB4: 0A ASL A
C1/8AB5: 18 CLC
C1/8AB6: 6516 ADC $16
C1/8AB8: 8518 STA $18
C1/8ABA: 8516 STA $16
C1/8ABC: A52A LDA $2A
C1/8ABE: 29FF00 AND #$00FF
C1/8AC1: 18 CLC
C1/8AC2: 6528 ADC $28
C1/8AC4: 8528 STA $28
C1/8AC6: 60 RTS
#####menu event####
C1/8AC7: A00000 LDY #$0000 //$F0: del frame
C1/8ACA: B71A LDA [$1A],Y
C1/8ACC: 290700 AND #$0007
C1/8ACF: EB XBA
C1/8AD0: 0A ASL A
C1/8AD1: 0A ASL A
C1/8AD2: 0A ASL A
C1/8AD3: AA TAX
C1/8AD4: A90004 LDA #$0400
C1/8AD7: 8500 STA $00
C1/8AD9: C8 INY
C1/8ADA: B71A LDA [$1A],Y
C1/8ADC: 9F00807E STA $7E8000,X
C1/8AE0: E8 INX
C1/8AE1: E8 INX
C1/8AE2: C600 DEC $00
C1/8AE4: D0F6 BNE $8ADC
C1/8AE6: A51A LDA $1A
C1/8AE8: 18 CLC
C1/8AE9: 690300 ADC #$0003
C1/8AEC: 851A STA $1A
C1/8AEE: 4CFB83 JMP $83FB

C1/8AF1: A00000 LDY #$0000 //$F1: tile pro
C1/8AF4: B71A LDA [$1A],Y
C1/8AF6: 852E STA $2E
C1/8AF8: A51A LDA $1A
C1/8AFA: 18 CLC
C1/8AFB: 690200 ADC #$0002
C1/8AFE: 851A STA $1A
C1/8B00: 4CFB83 JMP $83FB

C1/8B03: A00000 LDY #$0000 //$F2
C1/8B06: B71A LDA [$1A],Y
C1/8B08: 8504 STA $04
C1/8B0A: 297F00 AND #$007F
C1/8B0D: D00B BNE $8B1A
C1/8B0F: E230 SEP #$30
C1/8B11: 224A8680 JSR $80864A
C1/8B15: C230 REP #$30
C1/8B17: 297F00 AND #$007F
C1/8B1A: 8502 STA $02
C1/8B1C: C8 INY
C1/8B1D: B71A LDA [$1A],Y
C1/8B1F: C9FFFF CMP #$FFFF
C1/8B22: D004 BNE $8B28
C1/8B24: 22618680 JSR $808661
C1/8B28: 8500 STA $00
C1/8B2A: 242A BIT $2A
C1/8B2C: 3035 BMI $8B63
C1/8B2E: 2403 BIT $03
C1/8B30: 3015 BMI $8B47
C1/8B32: 20A18A JSR $8AA1
C1/8B35: A618 LDX $18
C1/8B37: A500 LDA $00
C1/8B39: 9F00807E STA $7E8000,X
C1/8B3D: E618 INC $18
C1/8B3F: E618 INC $18
C1/8B41: C602 DEC $02
C1/8B43: D0ED BNE $8B32
C1/8B45: 8034 BRA $8B7B
C1/8B47: 20A18A JSR $8AA1
C1/8B4A: A618 LDX $18
C1/8B4C: BF00807E LDA $7E8000,X
C1/8B50: 29FFE3 AND #$E3FF
C1/8B53: 0500 ORA $00
C1/8B55: 9F00807E STA $7E8000,X
C1/8B59: E618 INC $18
C1/8B5B: E618 INC $18
C1/8B5D: C602 DEC $02
C1/8B5F: D0E6 BNE $8B47
C1/8B61: 8018 BRA $8B7B
C1/8B63: 20A18A JSR $8AA1
C1/8B66: A618 LDX $18
C1/8B68: BF00807E LDA $7E8000,X
C1/8B6C: 2900FF AND #$FF00
C1/8B6F: 0500 ORA $00
C1/8B71: 9F00807E STA $7E8000,X
C1/8B75: E618 INC $18
C1/8B77: C602 DEC $02
C1/8B79: D0E8 BNE $8B63
C1/8B7B: A51A LDA $1A
C1/8B7D: 18 CLC
C1/8B7E: 690300 ADC #$0003
C1/8B81: 851A STA $1A
C1/8B83: 4CFB83 JMP $83FB

C1/8B86: A00000 LDY #$0000 //$F3
C1/8B89: B71A LDA [$1A],Y
C1/8B8B: 8504 STA $04
C1/8B8D: 297F00 AND #$007F
C1/8B90: D00B BNE $8B9D
C1/8B92: E230 SEP #$30
C1/8B94: 224A8680 JSR $80864A
C1/8B98: C230 REP #$30
C1/8B9A: 297F00 AND #$007F
C1/8B9D: 8502 STA $02
C1/8B9F: C8 INY
C1/8BA0: B71A LDA [$1A],Y
C1/8BA2: C9FFFF CMP #$FFFF
C1/8BA5: D004 BNE $8BAB
C1/8BA7: 22618680 JSR $808661
C1/8BAB: 8500 STA $00
C1/8BAD: 242A BIT $2A
C1/8BAF: 304F BMI $8C00
C1/8BB1: A500 LDA $00
C1/8BB3: 2900FC AND #$FC00
C1/8BB6: 8506 STA $06
C1/8BB8: 2403 BIT $03
C1/8BBA: 301C BMI $8BD8
C1/8BBC: 20A18A JSR $8AA1
C1/8BBF: A618 LDX $18
C1/8BC1: A500 LDA $00
C1/8BC3: 29FF03 AND #$03FF
C1/8BC6: 0506 ORA $06
C1/8BC8: 9F00807E STA $7E8000,X
C1/8BCC: E600 INC $00
C1/8BCE: E618 INC $18
C1/8BD0: E618 INC $18
C1/8BD2: C602 DEC $02
C1/8BD4: D0E6 BNE $8BBC
C1/8BD6: 8040 BRA $8C18
C1/8BD8: 20A18A JSR $8AA1
C1/8BDB: A618 LDX $18
C1/8BDD: A500 LDA $00
C1/8BDF: 29FF03 AND #$03FF
C1/8BE2: 0506 ORA $06
C1/8BE4: 9F00807E STA $7E8000,X
C1/8BE8: 18 CLC
C1/8BE9: 690200 ADC #$0002
C1/8BEC: 8500 STA $00
C1/8BEE: 291000 AND #$0010
C1/8BF1: 18 CLC
C1/8BF2: 6500 ADC $00
C1/8BF4: 8500 STA $00
C1/8BF6: E618 INC $18
C1/8BF8: E618 INC $18
C1/8BFA: C602 DEC $02
C1/8BFC: D0DA BNE $8BD8
C1/8BFE: 8018 BRA $8C18
C1/8C00: 20A18A JSR $8AA1
C1/8C03: A618 LDX $18
C1/8C05: BF00807E LDA $7E8000,X
C1/8C09: 2900FF AND #$FF00
C1/8C0C: 0500 ORA $00
C1/8C0E: 9F00807E STA $7E8000,X
C1/8C12: E618 INC $18
C1/8C14: C602 DEC $02
C1/8C16: D0E8 BNE $8C00
C1/8C18: A51A LDA $1A
C1/8C1A: 18 CLC
C1/8C1B: 690300 ADC #$0003
C1/8C1E: 851A STA $1A
C1/8C20: 4CFB83 JMP $83FB

C1/8C23: A00000 LDY #$0000 //$F4: color
C1/8C26: B71A LDA [$1A],Y
C1/8C28: 29FF00 AND #$00FF
C1/8C2B: C9FF00 CMP #$00FF
C1/8C2E: D00B BNE $8C3B
C1/8C30: E230 SEP #$30
C1/8C32: 224A8680 JSR $80864A
C1/8C36: C230 REP #$30
C1/8C38: 29FF00 AND #$00FF
C1/8C3B: 85D4 STA $D4
C1/8C3D: AA TAX
C1/8C3E: BF909981 LDA $819990,X
C1/8C42: 85FC STA $FC
C1/8C44: BF929981 LDA $819992,X
C1/8C48: 85FE STA $FE
C1/8C4A: E61A INC $1A
C1/8C4C: 4CFB83 JMP $83FB

C1/8C4F: A00000 LDY #$0000 //$F5
C1/8C52: B71A LDA [$1A],Y
C1/8C54: 8500 STA $00
C1/8C56: C8 INY
C1/8C57: C8 INY
C1/8C58: B71A LDA [$1A],Y
C1/8C5A: C9FFFF CMP #$FFFF
C1/8C5D: D004 BNE $8C63
C1/8C5F: 22618680 JSR $808661
C1/8C63: 8504 STA $04
C1/8C65: A97E00 LDA #$007E
C1/8C68: 2404 BIT $04
C1/8C6A: 5001 BVC $8C6D
C1/8C6C: 1A INC A
C1/8C6D: 8502 STA $02
C1/8C6F: A505 LDA $05
C1/8C71: 291F00 AND #$001F
C1/8C74: 8508 STA $08
C1/8C76: A00000 LDY #$0000
C1/8C79: 2404 BIT $04
C1/8C7B: 302C BMI $8CA9
C1/8C7D: A504 LDA $04
C1/8C7F: 293F00 AND #$003F
C1/8C82: 8506 STA $06
C1/8C84: A618 LDX $18
C1/8C86: B700 LDA [$00],Y
C1/8C88: 9F00807E STA $7E8000,X
C1/8C8C: C8 INY
C1/8C8D: C8 INY
C1/8C8E: E8 INX
C1/8C8F: E8 INX
C1/8C90: C606 DEC $06
C1/8C92: D0F2 BNE $8C86
C1/8C94: A94000 LDA #$0040
C1/8C97: 242A BIT $2A
C1/8C99: 1001 BPL $8C9C
C1/8C9B: 0A ASL A
C1/8C9C: 18 CLC
C1/8C9D: 6516 ADC $16
C1/8C9F: 8518 STA $18
C1/8CA1: 8516 STA $16
C1/8CA3: C608 DEC $08
C1/8CA5: D0D6 BNE $8C7D
C1/8CA7: 8034 BRA $8CDD
C1/8CA9: A504 LDA $04
C1/8CAB: 293F00 AND #$003F
C1/8CAE: 8506 STA $06
C1/8CB0: A618 LDX $18
C1/8CB2: B700 LDA [$00],Y
C1/8CB4: 850A STA $0A
C1/8CB6: BF00807E LDA $7E8000,X
C1/8CBA: 9700 STA [$00],Y
C1/8CBC: A50A LDA $0A
C1/8CBE: 9F00807E STA $7E8000,X
C1/8CC2: C8 INY
C1/8CC3: C8 INY
C1/8CC4: E8 INX
C1/8CC5: E8 INX
C1/8CC6: C606 DEC $06
C1/8CC8: D0E8 BNE $8CB2
C1/8CCA: A94000 LDA #$0040
C1/8CCD: 242A BIT $2A
C1/8CCF: 1001 BPL $8CD2
C1/8CD1: 0A ASL A
C1/8CD2: 18 CLC
C1/8CD3: 6516 ADC $16
C1/8CD5: 8518 STA $18
C1/8CD7: 8516 STA $16
C1/8CD9: C608 DEC $08
C1/8CDB: D0CC BNE $8CA9
C1/8CDD: A51A LDA $1A
C1/8CDF: 18 CLC
C1/8CE0: 690400 ADC #$0004
C1/8CE3: 851A STA $1A
C1/8CE5: 4CFB83 JMP $83FB

C1/8CE8: 2428 BIT $28 //$F6
C1/8CEA: 3007 BMI $8CF3
C1/8CEC: A52A LDA $2A
C1/8CEE: 29FF00 AND #$00FF
C1/8CF1: 8528 STA $28
C1/8CF3: 242A BIT $2A
C1/8CF5: 7012 BVS $8D09
C1/8CF7: A94000 LDA #$0040
C1/8CFA: 242A BIT $2A
C1/8CFC: 1001 BPL $8CFF
C1/8CFE: 0A ASL A
C1/8CFF: 18 CLC
C1/8D00: 6516 ADC $16
C1/8D02: 8518 STA $18
C1/8D04: 8516 STA $16
C1/8D06: 4CFB83 JMP $83FB
C1/8D09: 22198A81 JSR $818A19
C1/8D0D: A516 LDA $16
C1/8D0F: 18 CLC
C1/8D10: 698000 ADC #$0080
C1/8D13: 8518 STA $18
C1/8D15: 8516 STA $16
C1/8D17: 4CFB83 JMP $83FB

C1/8D1A: E230 SEP #$30 //$F7 set/reset overflow $2A; set/reset negative $28
C1/8D1C: A000 LDY #$00
C1/8D1E: B71A LDA [$1A],Y
C1/8D20: 852B STA $2B
C1/8D22: 293F AND #$3F
C1/8D24: 0A ASL A
C1/8D25: 852A STA $2A
C1/8D27: 8528 STA $28
C1/8D29: D00B BNE $8D36
C1/8D2B: A980 LDA #$80
C1/8D2D: 8529 STA $29
C1/8D2F: C230 REP #$30
C1/8D31: E61A INC $1A
C1/8D33: 4CFB83 JMP $83FB
C1/8D36: 6429 STZ $29
C1/8D38: C230 REP #$30
C1/8D3A: E61A INC $1A
C1/8D3C: 4CFB83 JMP $83FB

C1/8D3F: E230 SEP #$30 //$F8
C1/8D41: A000 LDY #$00
C1/8D43: B71A LDA [$1A],Y
C1/8D45: 300A BMI $8D51
C1/8D47: D004 BNE $8D4D
C1/8D49: 224A8680 JSR $80864A
C1/8D4D: 851F STA $1F
C1/8D4F: 8017 BRA $8D68
C1/8D51: 297F AND #$7F
C1/8D53: D004 BNE $8D59
C1/8D55: 224A8680 JSR $80864A
C1/8D59: 851E STA $1E
C1/8D5B: 224A8680 JSR $80864A
C1/8D5F: 851F STA $1F
C1/8D61: A51E LDA $1E
C1/8D63: 38 SEC
C1/8D64: E51F SBC $1F
C1/8D66: 851E STA $1E
C1/8D68: C230 REP #$30
C1/8D6A: E61A INC $1A
C1/8D6C: 4CFB83 JMP $83FB

C1/8D6F: E230 SEP #$30 //$F9 save loop
C1/8D71: A515 LDA $15
C1/8D73: 18 CLC
C1/8D74: 6903 ADC #$03
C1/8D76: 8515 STA $15
C1/8D78: AA TAX
C1/8D79: A000 LDY #$00
C1/8D7B: B71A LDA [$1A],Y
C1/8D7D: D004 BNE $8D83
C1/8D7F: 224A8680 JSR $80864A
C1/8D83: 9D0B0E STA $0E0B,X
C1/8D86: C220 REP #$20
C1/8D88: E61A INC $1A
C1/8D8A: A51A LDA $1A
C1/8D8C: 9D090E STA $0E09,X
C1/8D8F: C230 REP #$30
C1/8D91: 4CFB83 JMP $83FB

C1/8D94: E230 SEP #$30 //$FA loop
C1/8D96: A615 LDX $15
C1/8D98: F01B BEQ $8DB5
C1/8D9A: DE0B0E DEC $0E0B,X
C1/8D9D: F00F BEQ $8DAE
C1/8D9F: BD090E LDA $0E09,X
C1/8DA2: 851A STA $1A
C1/8DA4: BD0A0E LDA $0E0A,X
C1/8DA7: 851B STA $1B
C1/8DA9: C230 REP #$30
C1/8DAB: 4CFB83 JMP $83FB
C1/8DAE: A515 LDA $15
C1/8DB0: 38 SEC
C1/8DB1: E903 SBC #$03
C1/8DB3: 8515 STA $15
C1/8DB5: C230 REP #$30
C1/8DB7: 4CFB83 JMP $83FB

C1/8DBA: E230 SEP #$30 //$FB
C1/8DBC: A514 LDA $14
C1/8DBE: 18 CLC
C1/8DBF: 6903 ADC #$03
C1/8DC1: 8514 STA $14
C1/8DC3: AA TAX
C1/8DC4: A51C LDA $1C
C1/8DC6: 9DFF0D STA $0DFF,X
C1/8DC9: C220 REP #$20
C1/8DCB: A51A LDA $1A
C1/8DCD: 18 CLC
C1/8DCE: 690200 ADC #$0002
C1/8DD1: 9DFD0D STA $0DFD,X
C1/8DD4: E230 SEP #$30
C1/8DD6: A000 LDY #$00
C1/8DD8: B71A LDA [$1A],Y
C1/8DDA: C9FF CMP #$FF
C1/8DDC: D004 BNE $8DE2
C1/8DDE: 224A8680 JSR $80864A
C1/8DE2: 8500 STA $00
C1/8DE4: C8 INY
C1/8DE5: B71A LDA [$1A],Y
C1/8DE7: C9FF CMP #$FF
C1/8DE9: D004 BNE $8DEF
C1/8DEB: 224A8680 JSR $80864A
C1/8DEF: 8501 STA $01
C1/8DF1: C230 REP #$30
C1/8DF3: A500 LDA $00
C1/8DF5: 3017 BMI $8E0E
C1/8DF7: EB XBA
C1/8DF8: 0A ASL A
C1/8DF9: 18 CLC
C1/8DFA: 6501 ADC $01
C1/8DFC: 29FF00 AND #$00FF
C1/8DFF: AA TAX
C1/8E00: BFD800C9 LDA $C900D8,X
C1/8E04: 851A STA $1A
C1/8E06: BFD900C9 LDA $C900D9,X
C1/8E0A: 851B STA $1B
C1/8E0C: 8052 BRA $8E60
C1/8E0E: C90090 CMP #$9000
C1/8E11: B032 BCS $8E45
C1/8E13: C90082 CMP #$8200
C1/8E16: B013 BCS $8E2B
C1/8E18: 29FF00 AND #$00FF
C1/8E1B: AA TAX
C1/8E1C: BF6E8E81 LDA $818E6E,X
C1/8E20: 851A STA $1A
C1/8E22: BF6F8E81 LDA $818E6F,X
C1/8E26: 851B STA $1B
C1/8E28: 4CFB83 JMP $83FB
C1/8E2B: AFEA00C9 LDA $C900EA
C1/8E2F: 851A STA $1A
C1/8E31: AFEB00C9 LDA $C900EB
C1/8E35: 851B STA $1B
C1/8E37: A500 LDA $00
C1/8E39: 29FF01 AND #$01FF
C1/8E3C: 0A ASL A
C1/8E3D: A8 TAY
C1/8E3E: B71A LDA [$1A],Y
C1/8E40: 851A STA $1A
C1/8E42: 4CFB83 JMP $83FB
C1/8E45: 38 SEC
C1/8E46: E90090 SBC #$9000
C1/8E49: EB XBA
C1/8E4A: 29FF00 AND #$00FF
C1/8E4D: 38 SEC
C1/8E4E: 8502 STA $02
C1/8E50: 0A ASL A
C1/8E51: 6502 ADC $02
C1/8E53: AA TAX
C1/8E54: BF0000E8 LDA $E80000,X
C1/8E58: 851A STA $1A
C1/8E5A: BF0100E8 LDA $E80001,X
C1/8E5E: 851B STA $1B
C1/8E60: A500 LDA $00
C1/8E62: 29FF00 AND #$00FF
C1/8E65: 0A ASL A
C1/8E66: A8 TAY
C1/8E67: B71A LDA [$1A],Y
C1/8E69: 851A STA $1A
C1/8E6B: 4CFB83 JMP $83FB

C1/8EA4: A00000 LDY #$0000 //$FC
C1/8EA7: B71A LDA [$1A],Y
C1/8EA9: 8502 STA $02
C1/8EAB: 29FF00 AND #$00FF
C1/8EAE: 2401 BIT $01
C1/8EB0: 1003 BPL $8EB5
C1/8EB2: 0900FF ORA #$FF00
C1/8EB5: 242A BIT $2A
C1/8EB7: 3013 BMI $8ECC
C1/8EB9: 0A ASL A
C1/8EBA: 8500 STA $00
C1/8EBC: A502 LDA $02
C1/8EBE: 2900FF AND #$FF00
C1/8EC1: 4A LSR A
C1/8EC2: 4A LSR A
C1/8EC3: 2402 BIT $02
C1/8EC5: 1014 BPL $8EDB
C1/8EC7: 0900C0 ORA #$C000
C1/8ECA: 800F BRA $8EDB
C1/8ECC: 8500 STA $00
C1/8ECE: A502 LDA $02
C1/8ED0: 2900FF AND #$FF00
C1/8ED3: 4A LSR A
C1/8ED4: 2402 BIT $02
C1/8ED6: 1003 BPL $8EDB
C1/8ED8: 090080 ORA #$8000
C1/8EDB: 18 CLC
C1/8EDC: 6500 ADC $00
C1/8EDE: 18 CLC
C1/8EDF: 6518 ADC $18
C1/8EE1: 8518 STA $18
C1/8EE3: 8516 STA $16
C1/8EE5: 22198A81 JSR $818A19
C1/8EE9: A51A LDA $1A
C1/8EEB: 18 CLC
C1/8EEC: 690200 ADC #$0002
C1/8EEF: 851A STA $1A
C1/8EF1: 4CFB83 JMP $83FB


C1/8EF4: A00000 LDY #$0000 //$FD
C1/8EF7: B71A LDA [$1A],Y
C1/8EF9: C9FFFF CMP #$FFFF
C1/8EFC: D004 BNE $8F02
C1/8EFE: 22618680 JSR $808661
C1/8F02: 8502 STA $02
C1/8F04: 297F00 AND #$007F
C1/8F07: 2401 BIT $01
C1/8F09: 3001 BMI $8F0C
C1/8F0B: 0A ASL A
C1/8F0C: 8500 STA $00
C1/8F0E: A502 LDA $02
C1/8F10: 2900FF AND #$FF00
C1/8F13: 2401 BIT $01
C1/8F15: 3001 BMI $8F18
C1/8F17: 4A LSR A
C1/8F18: 4A LSR A
C1/8F19: 18 CLC
C1/8F1A: 6500 ADC $00
C1/8F1C: 8518 STA $18
C1/8F1E: 8516 STA $16
C1/8F20: 22198A81 JSR $818A19
C1/8F24: A51A LDA $1A
C1/8F26: 18 CLC
C1/8F27: 690200 ADC #$0002
C1/8F2A: 851A STA $1A
C1/8F2C: 4CFB83 JMP $83FB

C1/8F2F: A00000 LDY #$0000 //$FE dma parameter
C1/8F32: B71A LDA [$1A],Y
C1/8F34: 29FF00 AND #$00FF
C1/8F37: C9FF00 CMP #$00FF
C1/8F3A: F051 BEQ $8F8D
C1/8F3C: 0A ASL A
C1/8F3D: AA TAX
C1/8F3E: BF919081 LDA $819091,X
C1/8F42: 8500 STA $00
C1/8F44: E230 SEP #$30
C1/8F46: A981 LDA #$81
C1/8F48: 8502 STA $02
C1/8F4A: A000 LDY #$00
C1/8F4C: B700 LDA [$00],Y
C1/8F4E: 8504 STA $04
C1/8F50: C8 INY
C1/8F51: A58E LDA $8E
C1/8F53: C920 CMP #$20
C1/8F55: F02F BEQ $8F86
C1/8F57: A68C LDX $8C
C1/8F59: C220 REP #$20
C1/8F5B: B700 LDA [$00],Y
C1/8F5D: 9D0004 STA $0400,X
C1/8F60: C8 INY
C1/8F61: C8 INY
C1/8F62: B700 LDA [$00],Y
C1/8F64: 9D0204 STA $0402,X
C1/8F67: C8 INY
C1/8F68: C8 INY
C1/8F69: B700 LDA [$00],Y
C1/8F6B: 9D0404 STA $0404,X
C1/8F6E: C8 INY
C1/8F6F: C8 INY
C1/8F70: B700 LDA [$00],Y
C1/8F72: 9D0604 STA $0406,X
C1/8F75: C8 INY
C1/8F76: C8 INY
C1/8F77: E220 SEP #$20
C1/8F79: A58C LDA $8C
C1/8F7B: 18 CLC
C1/8F7C: 6908 ADC #$08
C1/8F7E: 858C STA $8C
C1/8F80: E68E INC $8E
C1/8F82: C604 DEC $04
C1/8F84: D0CB BNE $8F51
C1/8F86: C230 REP #$30
C1/8F88: E61A INC $1A
C1/8F8A: 4CFB83 JMP $83FB
C1/8F8D: 22198A81 JSR $818A19
C1/8F91: A5D0 LDA $D0
C1/8F93: C5D2 CMP $D2
C1/8F95: F008 BEQ $8F9F
C1/8F97: 22258A81 JSR $818A25
C1/8F9B: A5D0 LDA $D0
C1/8F9D: 85D2 STA $D2
C1/8F9F: E61A INC $1A
C1/8FA1: 4CFB83 JMP $83FB

C1/8FA4: E230 SEP #$30 //$FF
C1/8FA6: A514 LDA $14
C1/8FA8: F01A BEQ $8FC4
C1/8FAA: 38 SEC
C1/8FAB: E903 SBC #$03
C1/8FAD: 8514 STA $14
C1/8FAF: AA TAX
C1/8FB0: BD000E LDA $0E00,X
C1/8FB3: 851A STA $1A
C1/8FB5: BD010E LDA $0E01,X
C1/8FB8: 851B STA $1B
C1/8FBA: BD020E LDA $0E02,X
C1/8FBD: 851C STA $1C
C1/8FBF: C230 REP #$30
C1/8FC1: 4CFB83 JMP $83FB
C1/8FC4: C230 REP #$30
C1/8FC6: 22198A81 JSR $818A19
C1/8FCA: A5D0 LDA $D0
C1/8FCC: C5D2 CMP $D2
C1/8FCE: F004 BEQ $8FD4
C1/8FD0: 22258A81 JSR $818A25
C1/8FD4: 6B RTL
 
bất khuất là chịu đòn -10 damage làm gì có trong srw4.
 
Chỉnh sửa cuối:
Back
Top