SRW4 debug

Thảo luận trong 'Mecha/Robots' bắt đầu bởi SPC700, 1/8/21.

  1. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    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]
     
  2. haman

    haman Mayor of SimCity Lão Làng GVN

    Tham gia ngày:
    26/6/04
    Bài viết:
    4,422
    Nơi ở:
    Axis
    Cứ tưởng patch Việt "người tố cổ" ạ
     
  3. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    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.
     
  4. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    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.

     
    haman thích bài này.
  5. haman

    haman Mayor of SimCity Lão Làng GVN

    Tham gia ngày:
    26/6/04
    Bài viết:
    4,422
    Nơi ở:
    Axis
    Có cách nào để nhạc ko bị dừng khi hết battle ko đại ka
     
  6. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    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.
     
  7. haman

    haman Mayor of SimCity Lão Làng GVN

    Tham gia ngày:
    26/6/04
    Bài viết:
    4,422
    Nơi ở:
    Axis

    tưởng video của đại ka :))
     
  8. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    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.
     
  9. haman

    haman Mayor of SimCity Lão Làng GVN

    Tham gia ngày:
    26/6/04
    Bài viết:
    4,422
    Nơi ở:
    Axis
    Vụ music chơi tiếp khi hết battle đó mà.
    (Thật ra thì có chèn nhạc mới vào.)
     
  10. youandme_nt2010

    youandme_nt2010 Mr & Ms Pac-Man

    Tham gia ngày:
    21/10/11
    Bài viết:
    213
    thấy nó có chèn cả Mech ngoài vào được kìa
    Duraxyll chắc lấy model từ SRW-EX, nhạc thì từ LOE :2cool_misdoubt:
     
  11. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]

     
    vuongtramy thích bài này.
  12. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    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.

    [​IMG]
    [​IMG]
     
    haman thích bài này.
  13. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    Sprite engine

    Toàn bộ engine điều khiển của game này như bên dưới.
    [​IMG]
    [​IMG]
    [​IMG]

    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.

    [​IMG]

    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 đỏ.

    [​IMG]

    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.

    [​IMG]

    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.

     
  14. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    [​IMG]

    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
     
  15. haman

    haman Mayor of SimCity Lão Làng GVN

    Tham gia ngày:
    26/6/04
    Bài viết:
    4,422
    Nơi ở:
    Axis
    gần tới map cuối chắc sớm ra thôi :))
     
  16. shun

    shun Dragon Quest Lão Làng GVN

    Tham gia ngày:
    22/2/03
    Bài viết:
    1,314
    bất khuất là chịu đòn -10 damage làm gì có trong srw4.
     
    Chỉnh sửa cuối: 22/9/23
  17. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    Nó là skill nâng cấp của Gan lỳ, hồi 100% máu.
     
  18. shun

    shun Dragon Quest Lão Làng GVN

    Tham gia ngày:
    22/2/03
    Bài viết:
    1,314
  19. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    Dòng này chỉ chơi các bản trên Sufami thôi. Hệ máy khác thì không có chơi.
    Cái tinh thần "bất khuất" là dịch từ chữ ド根性.
    Có vẻ như mấy bản sau này bỏ mất ド根性 rồi.
     
  20. SPC700

    SPC700 Legend of Zelda

    Tham gia ngày:
    1/10/20
    Bài viết:
    1,107
    Vẽ lại như này cho hợp lý.

    [​IMG]
    [​IMG]


     
    vuongtramy thích bài này.

Chia sẻ trang này