The current URL is datacrystal.tcrf.net.
BS-X BIOS/ROM map
I mark with the tag "UNNECESSARY LINE" things that I think could be removed. If anyone ever wants to reassemble this and looks for some bytes to save, there you go.
Bank $10
There is a Jump Table on the Satellaview that is used at the Start Up. I guess its implemented to serve as a verification that the Satellaview is there and working correctly, because the BIOS jumps to this jump table just to be redirected to subroutines in itself again.
$10/5974 6B RTL ; (Executed at Start Up) $10/5978 6B RTL ; (Executed while NMI)
$10/598C 5C AD C2 80 JMP $80C2AD ; Check if Satellaview Stream Number Registers work $10/59A4 5C 6D C3 80 JMP $80C36D ; Transfer (fixed Set of) Data to Satellaview $10/59B0 5C D6 C3 80 JMP $80C3D6[$80:C3D6] A:0008 X:FFFE Y:E280 P:envMxdIzC $10/5A6C 5C 84 BB 80 JMP $80BB84 ; MCC Memory Controller Settings: Enable Flash R/W $10/5A70 5C B1 BB 80 JMP $80BBB1 ; MCC Memory Controller Settings: Disable Flash R/W
$10/5A90 5C 6C BD 80 JMP $80BD6C[$80:BD6C] A:0 X:0007 Y:0 P:envMXdIZC $10/5A94 5C 95 BD 80 JMP $80BD95[$80:BD95] A:0 X:0 Y:0 P:envMXdIZc
$10/5B0C 5C 77 C1 80 JMP $80C177[$80:C177] A:0080 X:0007 Y:0 P:eNvMxdIzC $10/5B10 5C C5 C1 80 JMP $80C1C5[$80:C1C5] A:0080 X:0007 Y:0 P:eNvMxdIzC
$10/5B40 5C EB F1 80 JMP $80F1EB[$80:F1EB] A:0061 X:FFFE Y:0 P:eNvmxdIzC $10/5B44 5C 31 F2 80 JMP $80F231[$80:F231] A:0 X:00FF Y:0 P:eNvmxdIzC
$10/5B4C 5C AB F2 80 JMP $80F2AB[$80:F2AB] A:0 X:0 Y:00FF P:envmxdIzC
$10/5B58 5C F2 F2 80 JMP $80F2F2[$80:F2F2] A:0 X:FFFE Y:E280 P:envMxdIZC
$10/5B70 5C A3 E7 80 JMP $80E7A3[$80:E7A3] A:0 X:00FF Y:0 P:envMxdIzC
$10/5BAC 5C 28 EA 80 JMP $80EA28[$80:EA28] A:0 X:0 Y:0 P:envMxdIzC
$10/5C0C 5C D6 EF 80 JMP $80EFD6[$80:EFD6] A:0 X:00FF Y:0 P:envMxdIzC
$10/5C18 5C 10 97 80 JMP $809710[$80:9710] A:00FF X:0003 Y:0 P:eNvMXdIzC $10/5C1C 5C 20 97 80 JMP $809720 ; Play Music/Sound Effect $10/5C20 5C A6 97 80 JMP $8097A6[$80:97A6] A:0 X:00FF Y:0 P:eNvmxdIzC $10/5C24 5C B2 98 80 JMP $8098B2[$80:98B2] A:1E97 X:0 Y:0010 P:envmxdizC
$10/5CA0 Hook Vectors
See $81/C5E9.
Bank $80
$80/8200 Update Graphics Registers
Transfers values from their $01xx-buffers to their registers
$80/8200 08 PHP ; Buffer Flag Register value on stack $80/8201 E2 20 SEP #$20 ; A = 8-bit $80/8203 AD 00 01 LDA $0100 ; Update Display Control 1 (FBLANK / Brightness) and it's buffer $80/8206 8D 00 21 STA $2100 $80/8209 8D 1B 02 STA $021B $80/820C AD 01 01 LDA $0101 ; Update Object Size and Object Base $80/820F 8D 01 21 STA $2101 $80/8212 AD 04 01 LDA $0104 ; Update BG Mode $80/8215 8D 05 21 STA $2105 $80/8218 AD 05 01 LDA $0105 ; Update Mosaic $80/821B 8D 06 21 STA $2106 $80/821E AD 06 01 LDA $0106 ; Update BG1 Tilemap Address and Mirroring $80/8221 8D 07 21 STA $2107 $80/8224 AD 07 01 LDA $0107 ; Update BG2 Tilemap Address and Mirroring $80/8227 8D 08 21 STA $2108 $80/822A AD 08 01 LDA $0108 ; Update BG3 Tilemap Address and Mirroring $80/822D 8D 09 21 STA $2109 $80/8230 AD 09 01 LDA $0109 ; Update BG4 Tilemap Address and Mirroring $80/8233 8D 0A 21 STA $210A $80/8236 AD 0A 01 LDA $010A ; Update BG1/2 Tileset Address $80/8239 8D 0B 21 STA $210B $80/823C AD 0B 01 LDA $010B ; Update BG3/4 Tileset Address $80/823F 8D 0C 21 STA $210C $80/8242 AD 0C 01 LDA $010C ; Update Mode 7 Rotation/Scaling Mode Settings $80/8245 8D 1A 21 STA $211A $80/8248 AD 0D 01 LDA $010D ; Update Window BG1/BG2 Mask Settings $80/824B 8D 23 21 STA $2123 $80/824E AD 0E 01 LDA $010E ; Update Window BG3/BG4 Mask Settings $80/8251 8D 24 21 STA $2124 $80/8254 AD 1F 01 LDA $011F ; Update Window OBJ/MATH Mask Settings $80/8257 8D 25 21 STA $2125 $80/825A AD 20 01 LDA $0120 ; Update Window 1 Left Position (X1) $80/825D 8D 26 21 STA $2126 $80/8260 AD 21 01 LDA $0121 ; Update Window 1 Right Position (X2) $80/8263 8D 27 21 STA $2127 $80/8266 AD 22 01 LDA $0122 ; Update Window 2 Left Position (X1) $80/8269 8D 28 21 STA $2128 $80/826C AD 23 01 LDA $0123 ; Update Window 2 Right Position (X2) $80/826F 8D 29 21 STA $2129 $80/8272 AD 24 01 LDA $0124 ; Update Window 1/2 Mask Logic (BG1-BG4) $80/8275 8D 2A 21 STA $212A $80/8278 AD 25 01 LDA $0125 ; Update Window 1/2 Mask Logic (OBJ/MATH) $80/827B 8D 2B 21 STA $212B $80/827E AD 26 01 LDA $0126 ; Update Main Screen Designation $80/8281 8D 2C 21 STA $212C $80/8284 AD 28 01 LDA $0128 ; Update Window Area Main Screen Disable $80/8287 8D 2E 21 STA $212E $80/828A AD 27 01 LDA $0127 ; Update Sub Screen Designation $80/828D 8D 2D 21 STA $212D $80/8290 AD 29 01 LDA $0129 ; Update Window Area Sub Screen Disable $80/8293 8D 2F 21 STA $212F $80/8296 AD 2A 01 LDA $012A ; Update $80/8299 8D 30 21 STA $2130 $80/829C AD 2B 01 LDA $012B ; Update $80/829F 8D 31 21 STA $2131 $80/82A2 AD 2D 01 LDA $012D ; Update Color Math Sub Screen Backdrop Color - RED $80/82A5 09 20 ORA #$20 $80/82A7 8D 32 21 STA $2132 $80/82AA AD 2E 01 LDA $012E ; Update Color Math Sub Screen Backdrop Color - GREEN $80/82AD 09 40 ORA #$40 $80/82AF 8D 32 21 STA $2132 $80/82B2 AD 2F 01 LDA $012F ; Update Color Math Sub Screen Backdrop Color - BLUE $80/82B5 09 80 ORA #$80 $80/82B7 8D 32 21 STA $2132 $80/82BA AD 30 01 LDA $0130 ; Update Display Control 2 $80/82BD 8D 33 21 STA $2133 $80/82C0 AD 0F 01 LDA $010F ; Update Scroll Registers for BG1 to BG4 $80/82C3 8D 0D 21 STA $210D $80/82C6 AD 10 01 LDA $0110 $80/82C9 8D 0D 21 STA $210D $80/82CC AD 11 01 LDA $0111 $80/82CF 8D 0E 21 STA $210E $80/82D2 AD 12 01 LDA $0112 $80/82D5 8D 0E 21 STA $210E $80/82D8 AD 13 01 LDA $0113 $80/82DB 8D 0F 21 STA $210F $80/82DE AD 14 01 LDA $0114 $80/82E1 8D 0F 21 STA $210F $80/82E4 AD 15 01 LDA $0115 $80/82E7 8D 10 21 STA $2110 $80/82EA AD 16 01 LDA $0116 $80/82ED 8D 10 21 STA $2110 $80/82F0 AD 17 01 LDA $0117 $80/82F3 8D 11 21 STA $2111 $80/82F6 AD 18 01 LDA $0118 $80/82F9 8D 11 21 STA $2111 $80/82FC AD 19 01 LDA $0119 $80/82FF 8D 12 21 STA $2112 $80/8302 AD 1A 01 LDA $011A $80/8305 8D 12 21 STA $2112 $80/8308 AD 1B 01 LDA $011B $80/830B 8D 13 21 STA $2113 $80/830E AD 1C 01 LDA $011C $80/8311 8D 13 21 STA $2113 $80/8314 AD 1D 01 LDA $011D $80/8317 8D 14 21 STA $2114 $80/831A AD 1E 01 LDA $011E $80/831D 8D 14 21 STA $2114 $80/8320 AD 3A 01 LDA $013A ; Set HDMA flags $80/8323 8D 0C 42 STA $420C $80/8326 28 PLP ; Restore Flag Register value $80/8327 6B RTL
$80/8328 During NMI: Update CGRAM
$80/8328 08 PHP ; Buffer Flag Register value on stack $80/8329 E2 10 SEP #$10 ; X/Y = 8-bit $80/832B C2 20 REP #$20 ; A = 16-bit $80/832D AD 1C 02 LDA $021C ; Is the flag to update the CGRAM set? $80/8330 F0 24 BEQ $24 ; [$8356] Exit if not $80/8332 A9 00 22 LDA #$2200 ; Setup DMA to CGRAM, transfer whole buffer ($7E/2000) $80/8335 8D 10 43 STA $4310 $80/8338 A9 00 20 LDA #$2000 $80/833B 8D 12 43 STA $4312 $80/833E A2 7E LDX #$7E $80/8340 8E 14 43 STX $4314 $80/8343 A9 00 02 LDA #$0200 $80/8346 8D 15 43 STA $4315 $80/8349 A2 00 LDX #$00 ; Set CGRAM address to its start $80/834B 8E 21 21 STX $2121 $80/834E A2 02 LDX #$02 ; Activate DMA $80/8350 8E 0B 42 STX $420B $80/8353 9C 1C 02 STZ $021C ; Clear Flag for CGRAM update $80/8356 28 PLP ; Restore Flag Register value $80/8357 6B RTL
$80/8358 ?
$80/8358 08 PHP ; Buffer Flag Register value on stack $80/8359 C2 20 REP #$20 ; A = 16-bit $80/835B A9 61 00 LDA #$0061 A:00E0 X:FFFE Y:0 P:eNvmxdIzC $80/835E 8D 24 02 STA $0224 [$80:0224] A:0061 X:FFFE Y:0 P:envmxdIzC $80/8361 28 PLP ; Restore Flag Register value $80/8362 6B RTL
$80/8363 ? (Executed while NMI)
$80/8363 08 PHP ; Buffer Flag Register value on stack $80/8364 E2 20 SEP #$20 ; A = 8-bit $80/8366 AD 24 02 LDA $0224 [$80:0224] A:0 X:0 Y:0 P:eNvMxdIzC $80/8369 8D 02 42 STA $4202 [$80:4202] A:0061 X:0 Y:0 P:envMxdIzC $80/836C A9 05 LDA #$05 A:0061 X:0 Y:0 P:envMxdIzC $80/836E 8D 03 42 STA $4203 [$80:4203] A:0005 X:0 Y:0 P:envMxdIzC $80/8371 EA NOP A:0005 X:0 Y:0 P:envMxdIzC $80/8372 C2 20 REP #$20 A:0005 X:0 Y:0 P:envMxdIzC $80/8374 AD 16 42 LDA $4216 [$80:4216] A:0005 X:0 Y:0 P:envmxdIzC $80/8377 48 PHA A:01E5 X:0 Y:0 P:envmxdIzC $80/8378 E2 20 SEP #$20 A:01E5 X:0 Y:0 P:envmxdIzC $80/837A AD 25 02 LDA $0225 [$80:0225] A:01E5 X:0 Y:0 P:envMxdIzC $80/837D 8D 02 42 STA $4202 [$80:4202] A:0100 X:0 Y:0 P:envMxdIZC $80/8380 A9 05 LDA #$05 A:0100 X:0 Y:0 P:envMxdIZC $80/8382 8D 03 42 STA $4203 [$80:4203] A:0105 X:0 Y:0 P:envMxdIzC $80/8385 EB XBA A:0105 X:0 Y:0 P:envMxdIzC $80/8386 EA NOP A:0501 X:0 Y:0 P:envMxdIzC $80/8387 AD 16 42 LDA $4216 [$80:4216] A:0501 X:0 Y:0 P:envMxdIzC $80/838A 38 SEC A:0500 X:0 Y:0 P:envMxdIZC $80/838B 63 02 ADC $02,s [$00:1EEA] A:0500 X:0 Y:0 P:envMxdIZC $80/838D 83 02 STA $02,s [$00:1EEA] A:0502 X:0 Y:0 P:envMxdIzc $80/838F C2 20 REP #$20 A:0502 X:0 Y:0 P:envMxdIzc $80/8391 68 PLA A:0502 X:0 Y:0 P:envmxdIzc $80/8392 69 11 00 ADC #$0011 A:02E5 X:0 Y:0 P:envmxdIzc $80/8395 6D 26 02 ADC $0226 [$80:0226] A:02F6 X:0 Y:0 P:envmxdIzc $80/8398 8D 24 02 STA $0224 [$80:0224] A:02F6 X:0 Y:0 P:envmxdIzc $80/839B 28 PLP ; Restore Flag Register value $80/839C 6B RTL
$80/839D Activate NMI
$80/839D 08 PHP ; Buffer Flag Register value on stack $80/839E E2 20 SEP #$20 $80/83A0 AD 35 01 LDA $0135 ; Load value for Interrupt Enable from buffer $80/83A3 09 80 ORA #$80 ; Set Flag to activate NMI $80/83A5 8D 00 42 STA $4200 ; Set Interrupt Enables $80/83A8 8D 35 01 STA $0135 ; Update buffer $80/83AB 28 PLP ; Restore Flag Register value $80/83AC 6B RTL
$80/83BD Clear whole VRAM via DMA
$80/83BD 08 PHP ; Buffer Flag Register value on stack $80/83BE E2 20 SEP #$20 ; A = 8-bit $80/83C0 A9 80 LDA #$80 ; 16-bit transfer $80/83C2 8D 15 21 STA $2115 $80/83C5 9C 16 21 STZ $2116 ; VRAM Address: $0000 $80/83C8 9C 17 21 STZ $2117 $80/83CB A9 09 LDA #$09 ; Fixed DMA, 16-bit transfer $80/83CD 8D 00 43 STA $4300 $80/83D0 A9 18 LDA #$18 ; Destination: $2118 (VRAM) $80/83D2 8D 01 43 STA $4301 $80/83D5 A9 F5 LDA #$F5 ; Source Address (Clear Byte): $80/83F5 $80/83D7 8D 02 43 STA $4302 $80/83DA A9 83 LDA #$83 $80/83DC 8D 03 43 STA $4303 $80/83DF A9 80 LDA #$80 $80/83E1 8D 04 43 STA $4304 $80/83E4 A9 00 LDA #$00 ; Number of Bytes: $10000 $80/83E6 8D 05 43 STA $4305 $80/83E9 A9 00 LDA #$00 $80/83EB 8D 06 43 STA $4306 $80/83EE A9 01 LDA #$01 ; Activate DMA $80/83F0 8D 0B 42 STA $420B $80/83F3 28 PLP ; Restore Flag Register value $80/83F4 6B RTL
Clear byte:
$80/83F5 00
$80/8411 Store a chain of values in $01xx (Graphics Register buffer)
When this subroutine is called from a place in code, the next three byte are arguments for this subroutine. The arguments are a 24-bit-address.
The address this points contains a variable number of arguments in the following format:
1st byte: Destination ($0100-$01FE) 2nd byte: Value for that register
When #$FF is the first byte the loop is ended.
$80/8411 08 PHP ; Buffer Flag Register value on stack $80/8412 E2 10 SEP #$10 ; X/Y = 8-bit $80/8414 C2 20 REP #$20 ; A = 16-bit $80/8416 A3 03 LDA $03,s ; Copy the original return address (pointing to data for this subroutine)... $80/8418 8D 21 00 STA $0021 ; ... into $20-$22 as a 24-bit load address $80/841B A3 02 LDA $02,s $80/841D 8D 20 00 STA $0020 $80/8420 18 CLC ; Change return address on stack to leap over the data $80/8421 69 03 00 ADC #$0003 $80/8424 83 02 STA $02,s $80/8426 A0 01 LDY #$01 ; Load Data from the original return address $80/8428 B7 20 LDA [$20],y ; Set this data up as another 24-bit-address in $23-$25 $80/842A 8D 23 00 STA $0023 $80/842D C8 INY $80/842E B7 20 LDA [$20],y $80/8430 8D 24 00 STA $0024 $80/8433 E2 20 SEP #$20 ; A = 8 bit $80/8435 A0 00 LDY #$00 ; Reset Load Index $80/8437 B7 23 LDA [$23],y ; Load byte from the second address $80/8439 AA TAX ; Transfer to X as (potential) Store Index $80/843A C9 FF CMP #$FF ; Exit if that byte was = #$FF $80/843C F0 09 BEQ $09 ; [$8447] $80/843E C8 INY $80/843F B7 23 LDA [$23],y ; Load next byte and store it in $01xx $80/8441 9D 00 01 STA $0100,x $80/8444 C8 INY $80/8445 80 F0 BRA $F0 ; [$8437] Loop $80/8447 28 PLP ; Restore Flag Register value $80/8448 6B RTL
$80/8449 Data
01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80 00 00 01 00 02 00 04 00 08 00 10 00 20 00 40 00 80
$80/8649 Data
00 1E 03 00 00 1E 0C 00 00 1E 30 00 00 1E C0 00 00 1E 00 03 00 1E 00 0C 00 1E 00 30 00 1E 00 C0 02 1E 03 00 02 1E 0C 00 02 1E 30 00 02 1E C0 00 02 1E 00 03 02 1E 00 0C 02 1E 00 30 02 1E 00 C0 04 1E 03 00 04 1E 0C 00 04 1E 30 00 04 1E C0 00 04 1E 00 03 04 1E 00 0C 04 1E 00 30 04 1E 00 C0 06 1E 03 00 06 1E 0C 00 06 1E 30 00 06 1E C0 00 06 1E 00 03 06 1E 00 0C 06 1E 00 30 06 1E 00 C0 08 1E 03 00 08 1E 0C 00 08 1E 30 00 08 1E C0 00 08 1E 00 03 08 1E 00 0C 08 1E 00 30 08 1E 00 C0 0A 1E 03 00 0A 1E 0C 00 0A 1E 30 00 0A 1E C0 00 0A 1E 00 03 0A 1E 00 0C 0A 1E 00 30 0A 1E 00 C0 0C 1E 03 00 0C 1E 0C 00 0C 1E 30 00 0C 1E C0 00 0C 1E 00 03 0C 1E 00 0C 0C 1E 00 30 0C 1E 00 C0 0E 1E 03 00 0E 1E 0C 00 0E 1E 30 00 0E 1E C0 00 0E 1E 00 03 0E 1E 00 0C 0E 1E 00 30 0E 1E 00 C0 10 1E 03 00 10 1E 0C 00 10 1E 30 00 10 1E C0 00 10 1E 00 03 10 1E 00 0C 10 1E 00 30 10 1E 00 C0 12 1E 03 00 12 1E 0C 00 12 1E 30 00 12 1E C0 00 12 1E 00 03 12 1E 00 0C 12 1E 00 30 12 1E 00 C0 14 1E 03 00 14 1E 0C 00 14 1E 30 00 14 1E C0 00 14 1E 00 03 14 1E 00 0C 14 1E 00 30 14 1E 00 C0 16 1E 03 00 16 1E 0C 00 16 1E 30 00 16 1E C0 00 16 1E 00 03 16 1E 00 0C 16 1E 00 30 16 1E 00 C0 18 1E 03 00 18 1E 0C 00 18 1E 30 00 18 1E C0 00 18 1E 00 03 18 1E 00 0C 18 1E 00 30 18 1E 00 C0 1A 1E 03 00 1A 1E 0C 00 1A 1E 30 00 1A 1E C0 00 1A 1E 00 03 1A 1E 00 0C 1A 1E 00 30 1A 1E 00 C0 1C 1E 03 00 1C 1E 0C 00 1C 1E 30 00 1C 1E C0 00 1C 1E 00 03 1C 1E 00 0C 1C 1E 00 30 1C 1E 00 C0 1E 1E 03 00 1E 1E 0C 00 1E 1E 30 00 1E 1E C0 00 1E 1E 00 03 1E 1E 00 0C 1E 1E 00 30 1E 1E 00 C0
$80/8849 Set Sprites in OAM buffer
Before this is called, there is an 16-bit value set into $00/1. This gets added to each X/Y-coordinate for every sprite that gets set with this subroutine.
$08/9 is what gets added to the other two bytes of OAM data.
$20-2 contains the Data Load address. First double-byte is the number of sprites to do
$80/8849 A7 20 LDA [$20] ; Load first double-byte - Number of Sprites to do $80/884B F0 78 BEQ $78 ; [$88C5] Exit if #$0000 $80/884D 85 04 STA $04 ; Store number of sprites to do as counter in $04 $80/884F A0 02 00 LDY #$0002 ; Set up Load Index $80/8852 AE 20 1E LDX $1E20 ; Load Number of used Sprites $80/8855 18 CLC A:000C X:0 Y:0002 P:envmxdIZc $80/8856 B7 20 LDA [$20],y ; Load next double-byte $80/8858 85 0C STA $0C [$00:000C] A:81F8 X:0 Y:0002 P:eNvmxdIzc $80/885A C8 INY ; Increment Load Index twice $80/885B C8 INY $80/885C 65 00 ADC $00 [$00:0000] A:81F8 X:0 Y:0004 P:envmxdIzc $80/885E 9D 00 1C STA $1C00,x ; Store in OAM Low Table buffer $80/8861 89 00 01 BIT #$0100 ; Is bit 8 set? $80/8864 F0 0E BEQ $0E ; [$8874] Branch if not $80/8866 BF 49 86 80 LDA $808649,x ; Setup corresponding address for OAM High Table buffer $80/886A 85 06 STA $06 $80/886C B2 06 LDA ($06) [$81:1E00] A:1E00 X:0004 Y:0009 P:envmxdIzc $80/886E 1F 49 84 80 ORA $808449,x[$80:844D] A:0002 X:0004 Y:0009 P:envmxdIzc $80/8872 92 06 STA ($06) [$81:1E00] A:0006 X:0004 Y:0009 P:envmxdIzc $80/8874 B7 20 LDA [$20],y[$95:82B1] A:8200 X:0 Y:0004 P:eNvmxdIZc $80/8876 29 FF 00 AND #$00FF A:0408 X:0 Y:0004 P:envmxdIzc $80/8879 89 80 00 BIT #$0080 A:0008 X:0 Y:0004 P:envmxdIzc $80/887C F0 03 BEQ $03 [$8881] A:0008 X:0 Y:0004 P:envmxdIZc $80/887E 09 00 FF ORA #$FF00 A:00F8 X:000C Y:0013 P:envmxdIzc $80/8881 18 CLC A:0008 X:0 Y:0004 P:envmxdIZc $80/8882 65 02 ADC $02 [$00:0002] A:0008 X:0 Y:0004 P:envmxdIZc $80/8884 C9 F0 00 CMP #$00F0 A:007F X:0 Y:0004 P:envmxdIzc $80/8887 90 08 BCC $08 [$8891] A:007F X:0 Y:0004 P:eNvmxdIzc
code is missing here
$80/8891 E2 20 SEP #$20 A:007F X:0 Y:0004 P:eNvmxdIzc $80/8893 9D 01 1C STA $1C01,x[$81:1C01] A:007F X:0 Y:0004 P:eNvMxdIzc $80/8896 C8 INY A:007F X:0 Y:0004 P:eNvMxdIzc $80/8897 C2 21 REP #$21 A:007F X:0 Y:0005 P:envMxdIzc $80/8899 A5 0C LDA $0C [$00:000C] A:007F X:0 Y:0005 P:envmxdIzc $80/889B 10 0E BPL $0E [$88AB] A:81F8 X:0 Y:0005 P:eNvmxdIzc $80/889D BF 49 86 80 LDA $808649,x[$80:8649] A:81F8 X:0 Y:0005 P:eNvmxdIzc $80/88A1 85 06 STA $06 [$00:0006] A:1E00 X:0 Y:0005 P:envmxdIzc $80/88A3 B2 06 LDA ($06) [$81:1E00] A:1E00 X:0 Y:0005 P:envmxdIzc $80/88A5 1F 4B 84 80 ORA $80844B,x[$80:844B] A:0 X:0 Y:0005 P:envmxdIZc $80/88A9 92 06 STA ($06) [$81:1E00] A:0002 X:0 Y:0005 P:envmxdIzc $80/88AB B7 20 LDA [$20],y[$95:82B2] A:0002 X:0 Y:0005 P:envmxdIzc $80/88AD C8 INY A:3E04 X:0 Y:0005 P:envmxdIzc $80/88AE C8 INY A:3E04 X:0 Y:0006 P:envmxdIzc $80/88AF 25 0A AND $0A [$00:000A] A:3E04 X:0 Y:0007 P:envmxdIzc $80/88B1 65 08 ADC $08 [$00:0008] A:3E04 X:0 Y:0007 P:envmxdIzc $80/88B3 9D 02 1C STA $1C02,x[$81:1C02] A:3E04 X:0 Y:0007 P:envmxdIzc $80/88B6 8A TXA ; Increment number of used sprites by four $80/88B7 69 04 00 ADC #$0004 $80/88BA 29 FF 01 AND #$01FF ; (Reset value if it surpasses the limit of #$200) $80/88BD AA TAX $80/88BE C6 04 DEC $04 ; Decrement number of sprites to do $80/88C0 D0 94 BNE $94 ; [$8856] Branch if there are still sprites to do $80/88C2 8E 20 1E STX $1E20 ; Store number of used sprites back $80/88C5 6B RTL
$80/8944 Update OAM
This subroutine transfers the whole OAM buffer at $7E/1C00 to the OAM via DMA.
$80/8944 08 PHP ; Buffer Flag Register value on stack $80/8945 E2 10 SEP #$10 ; X/Y = 8-bit $80/8947 C2 20 REP #$20 ; A = 16-bit $80/8949 A9 00 04 LDA #$0400 ; DMA transfer type: 8-bit, $2104 $80/894C 8D 00 43 STA $4300 $80/894F A9 00 1C LDA #$1C00 ; Source Address: $00/1C00 $80/8952 8D 02 43 STA $4302 $80/8955 A2 00 LDX #$00 $80/8957 8E 04 43 STX $4304 $80/895A A9 20 02 LDA #$0220 ; Transfer #$220 bytes $80/895D 8D 05 43 STA $4305 $80/8960 9C 02 21 STZ $2102 ; Start at $0000 in OAM $80/8963 A2 01 LDX #$01 ; Activate DMA $80/8965 8E 0B 42 STX $420B $80/8968 28 PLP ; Restore Flag Register value $80/8969 6B RTL
$80/896A Update Joypad Input buffers
$80/896A 08 PHP ; Buffer Flag Register value on stack $80/896B E2 20 SEP #$20 ; A = 8-bit $80/896D AD 12 42 LDA $4212 ; Wait until Auto-Joypad Read is done $80/8970 29 01 AND #$01 $80/8972 D0 F9 BNE $F9 ; [$896D] $80/8974 C2 20 REP #$20 ; A = 16-bit $80/8976 AD 18 42 LDA $4218 ; Buffer Joypad 1 Input of this frame $80/8979 8D 50 01 STA $0150 $80/897C 4D 5C 01 EOR $015C ; Calculate which buttons were pushed this frame $80/897F 2D 50 01 AND $0150 $80/8982 8D 54 01 STA $0154 [$80:0154] A:0 X:00FF Y:00FF P:envmxdIZC $80/8985 8D 58 01 STA $0158 [$80:0158] A:0 X:00FF Y:00FF P:envmxdIZC $80/8988 AD 50 01 LDA $0150 ; Is currently any button pushed/held? $80/898B F0 18 BEQ $18 ; [$89A5] Branch if not $80/898D CD 5C 01 CMP $015C [$80:015C] A:1000 X:00FF Y:00FF P:enVmxdIzC $80/8990 D0 13 BNE $13 [$89A5] A:1000 X:00FF Y:00FF P:enVmxdIzC $80/8992 CE 62 01 DEC $0162 [$80:0162] A:1000 X:00FF Y:00FF P:envmxdIZC $80/8995 D0 14 BNE $14 [$89AB] A:1000 X:00FF Y:00FF P:envmxdIzC $80/8997 AD 50 01 LDA $0150 [$80:0150] A:4000 X:00FF Y:00FF P:envmxdIZC $80/899A 8D 58 01 STA $0158 [$80:0158] A:4000 X:00FF Y:00FF P:envmxdIzC $80/899D AD 4E 01 LDA $014E [$80:014E] A:4000 X:00FF Y:00FF P:envmxdIzC $80/89A0 8D 62 01 STA $0162 [$80:0162] A:0004 X:00FF Y:00FF P:envmxdIzC $80/89A3 80 06 BRA $06 [$89AB] A:0004 X:00FF Y:00FF P:envmxdIzC $80/89A5 AD 4C 01 LDA $014C [$80:014C] A:0 X:00FF Y:00FF P:envmxdIZC $80/89A8 8D 62 01 STA $0162 [$80:0162] A:0008 X:00FF Y:00FF P:envmxdIzC $80/89AB AD 50 01 LDA $0150 ; Replace last frame's input with this one (for the next frame) $80/89AE 8D 5C 01 STA $015C $80/89B1 AD 1A 42 LDA $421A ; Buffer Joypad 2 Input of this frame $80/89B4 8D 52 01 STA $0152 $80/89B7 4D 64 01 EOR $0164 ; Calculate which buttons were pushed this frame $80/89BA 2D 52 01 AND $0152 $80/89BD 8D 56 01 STA $0156 [$80:0156] A:0 X:00FF Y:00FF P:envmxdIZC $80/89C0 8D 5A 01 STA $015A [$80:015A] A:0 X:00FF Y:00FF P:envmxdIZC $80/89C3 AD 52 01 LDA $0152 ; Is currently any button pushed/held? $80/89C6 F0 18 BEQ $18 ; [$89E0] Branch if not $80/89C8 CD 64 01 CMP $0164 [$80:0164] A:0020 X:00FF Y:00FF P:envmxdIzC $80/89CB D0 13 BNE $13 [$89E0] A:0020 X:00FF Y:00FF P:envmxdIzC $80/89CD CE 6A 01 DEC $016A [$80:016A] A:0020 X:00FF Y:00FF P:envmxdIZC $80/89D0 D0 14 BNE $14 [$89E6] A:0020 X:00FF Y:00FF P:envmxdIzC $80/89D2 AD 52 01 LDA $0152 [$80:0152] A:0020 X:00FF Y:00FF P:envmxdIZC $80/89D5 8D 5A 01 STA $015A [$80:015A] A:0020 X:00FF Y:00FF P:envmxdIzC $80/89D8 AD 4E 01 LDA $014E [$80:014E] A:0020 X:00FF Y:00FF P:envmxdIzC $80/89DB 8D 6A 01 STA $016A [$80:016A] A:0004 X:00FF Y:00FF P:envmxdIzC $80/89DE 80 06 BRA $06 [$89E6] A:0004 X:00FF Y:00FF P:envmxdIzC $80/89E0 AD 4C 01 LDA $014C [$80:014C] A:0 X:00FF Y:00FF P:envmxdIZC $80/89E3 8D 6A 01 STA $016A [$80:016A] A:0008 X:00FF Y:00FF P:envmxdIzC $80/89E6 AD 52 01 LDA $0152 ; Replace last frame's input with this one (for the next frame) $80/89E9 8D 64 01 STA $0164 $80/89EC 28 PLP ; Restore Flag Register value $80/89ED 6B RTL
$80/8A14 ? (Use Jump Table)
$80/8A14 08 PHP ; Buffer Flag Register value and Direct Bank on stack $80/8A15 0B PHD $80/8A16 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/8A18 AD 21 1E LDA $1E21 ; Load Jump Table Index $80/8A1B 29 03 AND #$03 ; Remove everything that would be off bounds $80/8A1D 0A ASL A ; Multiply by 2 (each entry is 2 bytes in size) $80/8A1E AA TAX ; Transfer in X for Jump $80/8A1F FC 2A 8A JSR ($8A2A,x) ; JUMP $80/8A22 C2 30 REP #$30 ; A/X/Y = 16-bit $80/8A24 9C 20 1E STZ $1E20 ; Clear Number of used Sprites AND Jump Table index in $1E21 $80/8A27 2B PLD ; Restore Flag Register value and Direct Bank $80/8A28 28 PLP $80/8A29 6B RTL
$80/8A2A Jump Table for $80/8A14
$80/8A2A 32 8A Entry #$00 - $80/8A32 - Push all unused sprites in OAM Buffer out of the Screen $80/8A2C 51 8A Entry #$01 - $80/8A51 - $80/8A2E EA 8A Entry #$02 - $80/8AEA - Exit $80/8A30 EA 8A Entry #$03 - $80/8AEA - Exit
$80/8A32 Push all unused sprites in OAM Buffer out of the Screen
$80/8A32 C2 20 REP #$20 ; A = 16-bit $80/8A34 A2 F0 LDX #$F0 ; Clear Byte for OAM Low Table (Set Y-Coordinate beyond Screen) $80/8A36 0B PHD ; Buffer Direct Bank on Stack - Test if this is an UNNECESSCARY LINE $80/8A37 A9 00 1D LDA #$1D00 ; Set Direct Bank for upper half of OAM buffer $80/8A3A 5B TCD $80/8A3B 20 6A 8A JSR $8A6A $80/8A3E 2B PLD ; Restore Original Direct Bank - Test if this is an UNNECESSCARY LINE $80/8A3F AD 20 1E LDA $1E20 ; Load number of used sprites $80/8A42 4A LSR A ; Depending on it, calculate how many other sprites can be cleared $80/8A43 18 CLC $80/8A44 69 6A 8A ADC #$8A6A ; Depending on that, form a Jump address into the midst of Subroutine $80/8A6A $80/8A47 8D 3C 00 STA $003C ; Store it in $3C to jump there $80/8A4A A9 00 1C LDA #$1C00 ; Set Direct Bank for lower half of the OAM buffer $80/8A4D 5B TCD $80/8A4E 6C 3C 00 JMP ($003C) ; Jump into OAM Low Table buffer clearing and return immediately afterwards
$80/8A6A Clear sixty-four entries of the OAM Low Table buffer
Executed during NMI. Before this is executed, the direct page has to be set to $1C00 or $1D00 and X has to contain the clear value #$00F0 (pushing any sprite over the bottom line of the screen)
$80/8A6A 86 01 STX $01 $80/8A6C 86 05 STX $05 $80/8A6E 86 09 STX $09 $80/8A70 86 0D STX $0D $80/8A72 86 11 STX $11 $80/8A74 86 15 STX $15 $80/8A76 86 19 STX $19 $80/8A78 86 1D STX $1D $80/8A7A 86 21 STX $21 $80/8A7C 86 25 STX $25 $80/8A7E 86 29 STX $29 $80/8A80 86 2D STX $2D $80/8A82 86 31 STX $31 $80/8A84 86 35 STX $35 $80/8A86 86 39 STX $39 $80/8A88 86 3D STX $3D $80/8A8A 86 41 STX $41 $80/8A8C 86 45 STX $45 $80/8A8E 86 49 STX $49 $80/8A90 86 4D STX $4D $80/8A92 86 51 STX $51 $80/8A94 86 55 STX $55 $80/8A96 86 59 STX $59 $80/8A98 86 5D STX $5D $80/8A9A 86 61 STX $61 $80/8A9C 86 65 STX $65 $80/8A9E 86 69 STX $69 $80/8AA0 86 6D STX $6D $80/8AA2 86 71 STX $71 $80/8AA4 86 75 STX $75 $80/8AA6 86 79 STX $79 $80/8AA8 86 7D STX $7D $80/8AAA 86 81 STX $81 $80/8AAC 86 85 STX $85 $80/8AAE 86 89 STX $89 $80/8AB0 86 8D STX $8D $80/8AB2 86 91 STX $91 $80/8AB4 86 95 STX $95 $80/8AB6 86 99 STX $99 $80/8AB8 86 9D STX $9D $80/8ABA 86 A1 STX $A1 $80/8ABC 86 A5 STX $A5 $80/8ABE 86 A9 STX $A9 $80/8AC0 86 AD STX $AD $80/8AC2 86 B1 STX $B1 $80/8AC4 86 B5 STX $B5 $80/8AC6 86 B9 STX $B9 $80/8AC8 86 BD STX $BD $80/8ACA 86 C1 STX $C1 $80/8ACC 86 C5 STX $C5 $80/8ACE 86 C9 STX $C9 $80/8AD0 86 CD STX $CD $80/8AD2 86 D1 STX $D1 $80/8AD4 86 D5 STX $D5 $80/8AD6 86 D9 STX $D9 $80/8AD8 86 DD STX $DD $80/8ADA 86 E1 STX $E1 $80/8ADC 86 E5 STX $E5 $80/8ADE 86 E9 STX $E9 $80/8AE0 86 ED STX $ED $80/8AE2 86 F1 STX $F1 $80/8AE4 86 F5 STX $F5 $80/8AE6 86 F9 STX $F9 $80/8AE8 86 FD STX $FD $80/8AEA 60 RTS
$80/8AEB Clear OAM High Table buffer
$80/8AEB 9C 00 1E STZ $1E00 $80/8AEE 9C 02 1E STZ $1E02 $80/8AF1 9C 04 1E STZ $1E04 $80/8AF4 9C 06 1E STZ $1E06 $80/8AF7 9C 08 1E STZ $1E08 $80/8AFA 9C 0A 1E STZ $1E0A $80/8AFD 9C 0C 1E STZ $1E0C $80/8B00 9C 0E 1E STZ $1E0E $80/8B03 9C 10 1E STZ $1E10 $80/8B06 9C 12 1E STZ $1E12 $80/8B09 9C 14 1E STZ $1E14 $80/8B0C 9C 16 1E STZ $1E16 $80/8B0F 9C 18 1E STZ $1E18 $80/8B12 9C 1A 1E STZ $1E1A $80/8B15 9C 1C 1E STZ $1E1C $80/8B18 9C 1E 1E STZ $1E1E $80/8B1B 6B RTL
$80/8B75 ?
$80/8B75 DA PHX ; Buffer X, Y, A and Flag Register value on stack $80/8B76 5A PHY $80/8B77 48 PHA $80/8B78 08 PHP $80/8B79 E2 10 SEP #$10 ; X/Y = 8-bit $80/8B7B C2 20 REP #$20 ; A = 16-bit $80/8B7D AE 14 00 LDX $0014 [$81:0014] A:0 X:0 Y:0022 P:envmXdIZc $80/8B80 8E 02 42 STX $4202 [$81:4202] A:0 X:0 Y:0022 P:envmXdIZc $80/8B83 AE 16 00 LDX $0016 [$81:0016] A:0 X:0 Y:0022 P:envmXdIZc $80/8B86 8E 03 42 STX $4203 [$81:4203] A:0 X:0030 Y:0022 P:envmXdIzc $80/8B89 EA NOP ; Wait for calculation result $80/8B8A EA NOP $80/8B8B EA NOP $80/8B8C AD 16 42 LDA $4216 [$81:4216] A:0 X:0030 Y:0022 P:envmXdIzc $80/8B8F 8D 18 00 STA $0018 [$81:0018] A:0 X:0030 Y:0022 P:envmXdIZc $80/8B92 AE 15 00 LDX $0015 [$81:0015] A:0 X:0030 Y:0022 P:envmXdIZc $80/8B95 8E 02 42 STX $4202 [$81:4202] A:0 X:0 Y:0022 P:envmXdIZc $80/8B98 AE 17 00 LDX $0017 [$81:0017] A:0 X:0 Y:0022 P:envmXdIZc $80/8B9B 8E 03 42 STX $4203 [$81:4203] A:0 X:0 Y:0022 P:envmXdIZc $80/8B9E EA NOP ; Wait for calculation result $80/8B9F EA NOP $80/8BA0 EA NOP $80/8BA1 AE 16 42 LDX $4216 [$81:4216] A:0 X:0 Y:0022 P:envmXdIZc $80/8BA4 8E 1A 00 STX $001A [$81:001A] A:0 X:0 Y:0022 P:envmXdIZc $80/8BA7 AC 17 42 LDY $4217 [$81:4217] A:0 X:0 Y:0022 P:envmXdIZc $80/8BAA AE 15 00 LDX $0015 [$81:0015] A:0 X:0 Y:0 P:envmXdIZc $80/8BAD 8E 02 42 STX $4202 [$81:4202] A:0 X:0 Y:0 P:envmXdIZc $80/8BB0 AE 16 00 LDX $0016 [$81:0016] A:0 X:0 Y:0 P:envmXdIZc $80/8BB3 8E 03 42 STX $4203 [$81:4203] A:0 X:0030 Y:0 P:envmXdIzc $80/8BB6 EA NOP ; Wait for calculation result $80/8BB7 EA NOP $80/8BB8 AD 19 00 LDA $0019 [$81:0019] A:0 X:0030 Y:0 P:envmXdIzc $80/8BBB 18 CLC A:0 X:0030 Y:0 P:envmXdIZc $80/8BBC 6D 16 42 ADC $4216 [$81:4216] A:0 X:0030 Y:0 P:envmXdIZc $80/8BBF 8D 19 00 STA $0019 [$81:0019] A:0 X:0030 Y:0 P:envmXdIZc $80/8BC2 90 01 BCC $01 [$8BC5] A:0 X:0030 Y:0 P:envmXdIZc $80/8BC5 AE 14 00 LDX $0014 [$81:0014] A:0 X:0030 Y:0 P:envmXdIZc $80/8BC8 8E 02 42 STX $4202 [$81:4202] A:0 X:0 Y:0 P:envmXdIZc $80/8BCB AE 17 00 LDX $0017 [$81:0017] A:0 X:0 Y:0 P:envmXdIZc $80/8BCE 8E 03 42 STX $4203 [$81:4203] A:0 X:0 Y:0 P:envmXdIZc $80/8BD1 EA NOP ; Wait for calculation result $80/8BD2 EA NOP $80/8BD3 AD 19 00 LDA $0019 [$81:0019] A:0 X:0 Y:0 P:envmXdIZc $80/8BD6 18 CLC A:0 X:0 Y:0 P:envmXdIZc $80/8BD7 6D 16 42 ADC $4216 [$81:4216] A:0 X:0 Y:0 P:envmXdIZc $80/8BDA 8D 19 00 STA $0019 [$81:0019] A:0 X:0 Y:0 P:envmXdIZc $80/8BDD 90 01 BCC $01 [$8BE0] A:0 X:0 Y:0 P:envmXdIZc $80/8BE0 8C 1B 00 STY $001B [$81:001B] A:0 X:0 Y:0 P:envmXdIZc $80/8BE3 28 PLP ; Restore X, Y, A and Flag Register $80/8BE4 68 PLA $80/8BE5 7A PLY $80/8BE6 FA PLX $80/8BE7 6B RTL
$80/8C0F ?
$80/8C0F 8B PHB ; Buffer Program Bank and Flag Register value on stack $80/8C10 08 PHP $80/8C11 4B PHK ; Set Program Bank to $80 $80/8C12 AB PLB $80/8C13 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/8C15 A9 80 LDA #$80 A:0080 X:0000 Y:0000 P:eNvMXdIzC $80/8C17 8D 0C 02 STA $020C [$80:020C] A:0080 X:0000 Y:0000 P:eNvMXdIzC $80/8C1A A9 10 LDA #$10 A:0080 X:0000 Y:0000 P:eNvMXdIzC $80/8C1C 8D FC 01 STA $01FC [$80:01FC] A:0010 X:0000 Y:0000 P:envMXdIzC $80/8C1F A2 0F LDX #$0F ; Deactivate all entries in the VRAM DMA pipeline $80/8C21 9E 6C 01 STZ $016C,x $80/8C24 CA DEX $80/8C25 10 FA BPL $FA ; [$8C21] $80/8C27 28 PLP ; Restore Program Bank and Flag Register value $80/8C28 AB PLB $80/8C29 6B RTL
$80/8C2A ? (Put DMA from ROM into DMA Pipeline)
This subroutine sets up a 24-bit address in $3E-$40. The value that is in the active 8-bit of A is the bank. The 16-bit value in X is the address.
$80/8C2A 08 PHP ; Buffer Flag Register value, X and Y on stack $80/8C2B C2 30 REP #$30 ; A/X/Y = 16-bit $80/8C2D DA PHX $80/8C2E 5A PHY $80/8C2F A8 TAY ; Buffer A in Y $80/8C30 AD 43 06 LDA $0643 ; Buffer NMI-is-active-flag on stack $80/8C33 48 PHA $80/8C34 A9 01 00 LDA #$0001 ; Set NMI-is-active-flag (so no half-added Pipeline entry gets executed) $80/8C37 8D 43 06 STA $0643 $80/8C3A 98 TYA ; Restore Original A value $80/8C3B EB XBA ; Build 24-bit address in $3E-$40 $80/8C3C 85 3F STA $3F $80/8C3E 86 3E STX $3E $80/8C40 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/8C42 A0 00 LDY #$00 ; Clear Y to use it as Load Index $80/8C44 A2 0F LDX #$0F ; Setup counter for Pipeline Slots $80/8C46 BD 6C 01 LDA $016C,x ; Check If Pipeline Slot is empty $80/8C49 F0 13 BEQ $13 ; [$8C5E] Branch if it is $80/8C4B CA DEX A:0002 X:000F Y:0 P:envMXdizc $80/8C4C 10 F8 BPL $F8 [$8C46] A:0002 X:000E Y:0 P:envMXdizc
code is missing here
$80/8C54 C2 30 REP #$30 ; A/X/Y = 16-bit $80/8C56 68 PLA ; Restore Original NMI-is-active-flag status $80/8C57 8D 43 06 STA $0643 $80/8C5A 7A PLY ; Restore Flag Register value, X and Y $80/8C5B FA PLX $80/8C5C 28 PLP $80/8C5D 6B RTL $80/8C5E B7 3E LDA [$3E],y ; Load Type of DMA Address and put it into DMA Pipeline $80/8C60 C8 INY $80/8C61 9D 6C 01 STA $016C,x $80/8C64 F0 FE BEQ $FE ; [$8C64] UNNECESSARY LINE - SOFT LOCK If Type = 00 (= Empty Slot) $80/8C66 3A DEC A $80/8C67 F0 35 BEQ $35 ; [$8C9E] Branch if Type is 01 = CGRAM
Put VRAM Write or Read DMA into DMA Pipeline
$80/8C69 B7 3E LDA [$3E],y ; Load DMA 24-bit Address from Address and put it into DMA Pipeline $80/8C6B C8 INY $80/8C6C 9D AC 01 STA $01AC,x $80/8C6F B7 3E LDA [$3E],y $80/8C71 C8 INY $80/8C72 9D BC 01 STA $01BC,x $80/8C75 B7 3E LDA [$3E],y $80/8C77 C8 INY $80/8C78 9D CC 01 STA $01CC,x $80/8C7B B7 3E LDA [$3E],y ; Load DMA Number of Bytes to do from Address and put it into DMA Pipeline $80/8C7D C8 INY $80/8C7E 9D DC 01 STA $01DC,x $80/8C81 B7 3E LDA [$3E],y $80/8C83 C8 INY $80/8C84 9D EC 01 STA $01EC,x $80/8C87 B7 3E LDA [$3E],y ; Load VRAM Settings from Address and put it into DMA Pipeline $80/8C89 C8 INY $80/8C8A 9D 7C 01 STA $017C,x $80/8C8D B7 3E LDA [$3E],y ; Load VRAM Address from Address and put it into DMA Pipeline $80/8C8F C8 INY $80/8C90 9D 8C 01 STA $018C,x $80/8C93 B7 3E LDA [$3E],y $80/8C95 C9 80 CMP #$80 ; Check if VRAM Address is invalid (i. e. greater than #$8000) $80/8C97 B0 B7 BCS $B7 ; [$8C50] Branch if it is, else: Go on as usual $80/8C99 9D 9C 01 STA $019C,x $80/8C9C 80 23 BRA $23 [$8CC1] A:0060 X:000F Y:0008 P:eNvMXdizc
Put CGRAM into DMA Pipeline code is missing here
$80/8CC1 A9 80 LDA #$80 A:0060 X:000F Y:0008 P:eNvMXdizc $80/8CC3 9D FC 01 STA $01FC,x[$80:020B] A:0080 X:000F Y:0008 P:eNvMXdizc $80/8CC6 8A TXA A:0080 X:000F Y:0008 P:eNvMXdizc $80/8CC7 AE FC 01 LDX $01FC [$80:01FC] A:000F X:000F Y:0008 P:envMXdizc $80/8CCA 9D FC 01 STA $01FC,x[$80:020C] A:000F X:0010 Y:0008 P:envMXdizc $80/8CCD 8D FC 01 STA $01FC [$80:01FC] A:000F X:0010 Y:0008 P:envMXdizc $80/8CD0 AD 1B 02 LDA $021B ; Is FBLANK active? $80/8CD3 10 04 BPL $04 ; [$8CD9] Branch if not $80/8CD5 22 DC 8C 80 JSL $808CDC ; Work off DMA Pipeline $80/8CD9 82 78 FF BRL $FF78 ; [$8C54] Loop
$80/8CDC Work off DMA Pipeline
$80/8CDC 8B PHB ; Buffer Program Bank and Flag Register value on stack $80/8CDD 08 PHP $80/8CDE 4B PHK ; Set Program Bank to $80 $80/8CDF AB PLB $80/8CE0 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/8CE2 A2 10 LDX #$10 ; Set up Loop Counter / Index for working off the Pipeline Slots $80/8CE4 BD FC 01 LDA $01FC,x[$80:020C] A:0220 X:0010 Y:0 P:envMXdIzC $80/8CE7 30 12 BMI $12 ; [$8CFB] Exit if negative $80/8CE9 AA TAX A:020F X:0010 Y:0004 P:enVMXdIzC $80/8CEA BD 6C 01 LDA $016C,x ; Load Byte to determine which type of DMA this is $80/8CED 3A DEC A $80/8CEE F0 5C BEQ $5C ; [$8D4C] If Byte is #$01 = CGRAM DMA $80/8CF0 3A DEC A $80/8CF1 F0 15 BEQ $15 ; [$8D08] If Byte is #$02 = VRAM Write DMA $80/8CF3 3A DEC A $80/8CF4 D0 03 BNE $03 ; [$8CF9] If Byte is #$04 or higher = BROKEN DATA, SOFT LOCK $80/8CF6 82 8A 00 BRL $008A ; [$8D83] If Byte is #$03 = VRAM Read DMA $80/8CF9 80 FE BRA $FE ; [$8CF9] SOFT LOCK $80/8CFB A9 80 LDA #$80 A:0280 X:0010 Y:0 P:eNvMXdIzC $80/8CFD 8D 0C 02 STA $020C [$80:020C] A:0280 X:0010 Y:0 P:eNvMXdIzC $80/8D00 A9 10 LDA #$10 A:0280 X:0010 Y:0 P:eNvMXdIzC $80/8D02 8D FC 01 STA $01FC [$80:01FC] A:0210 X:0010 Y:0 P:envMXdIzC $80/8D05 28 PLP ; Restore Program Bank and Flag Register value $80/8D06 AB PLB $80/8D07 6B RTL
VRAM Write DMA
$80/8D08 BD AC 01 LDA $01AC,x ; Setup DMA Source Address $80/8D0B 8D 12 43 STA $4312 $80/8D0E BD BC 01 LDA $01BC,x $80/8D11 8D 13 43 STA $4313 $80/8D14 BD CC 01 LDA $01CC,x $80/8D17 8D 14 43 STA $4314 $80/8D1A BD DC 01 LDA $01DC,x ; Setup DMA number of Bytes to transfer $80/8D1D 8D 15 43 STA $4315 $80/8D20 BD EC 01 LDA $01EC,x $80/8D23 8D 16 43 STA $4316 $80/8D26 BD 7C 01 LDA $017C,x ; Setup VRAM transfer settings $80/8D29 8D 15 21 STA $2115 $80/8D2C BD 8C 01 LDA $018C,x ; Setup VRAM Address $80/8D2F 8D 16 21 STA $2116 $80/8D32 BD 9C 01 LDA $019C,x $80/8D35 8D 17 21 STA $2117 $80/8D38 A9 01 LDA #$01 ; Set DMA Settings $80/8D3A 8D 10 43 STA $4310 $80/8D3D A9 18 LDA #$18 ; DMA Destination: $2118 - VRAM Write $80/8D3F 8D 11 43 STA $4311 $80/8D42 A9 02 LDA #$02 ; Activate DMA $80/8D44 8D 0B 42 STA $420B $80/8D47 9E 6C 01 STZ $016C,x ; Clear flag for DMA $80/8D4A 80 98 BRA $98 ; [$8CE4] Loop, do next DMA
CGRAM DMA
$80/8D4C BD AC 01 LDA $01AC,x ; Setup DMA Source Address $80/8D4F 8D 12 43 STA $4312 $80/8D52 BD BC 01 LDA $01BC,x $80/8D55 8D 13 43 STA $4313 $80/8D58 BD CC 01 LDA $01CC,x $80/8D5B 8D 14 43 STA $4314 $80/8D5E BD DC 01 LDA $01DC,x ; Setup DMA number of Bytes to transfer $80/8D61 8D 15 43 STA $4315 $80/8D64 BD EC 01 LDA $01EC,x $80/8D67 8D 16 43 STA $4316 $80/8D6A BD 7C 01 LDA $017C,x ; Setup CGRAM Address $80/8D6D 8D 21 21 STA $2121 $80/8D70 9C 10 43 STZ $4310 ; Set DMA Settings $80/8D73 A9 22 LDA #$22 ; DMA Destination: $2122 - CGRAM $80/8D75 8D 11 43 STA $4311 $80/8D78 A9 02 LDA #$02 ; Activate DMA $80/8D7A 8D 0B 42 STA $420B $80/8D7D 9E 6C 01 STZ $016C,x ; Clear flag for DMA $80/8D80 82 61 FF BRL $FF61 ; [$8CE4] Loop, do next DMA
VRAM Read DMA
$80/8D83 BD AC 01 LDA $01AC,x ; Setup DMA Destination Address $80/8D86 8D 12 43 STA $4312 $80/8D89 BD BC 01 LDA $01BC,x $80/8D8C 8D 13 43 STA $4313 $80/8D8F BD CC 01 LDA $01CC,x $80/8D92 8D 14 43 STA $4314 $80/8D95 BD DC 01 LDA $01DC,x ; Setup DMA number of Bytes to transfer $80/8D98 8D 15 43 STA $4315 $80/8D9B BD EC 01 LDA $01EC,x $80/8D9E 8D 16 43 STA $4316 $80/8DA1 BD 7C 01 LDA $017C,x ; Setup VRAM transfer settings $80/8DA4 8D 15 21 STA $2115 $80/8DA7 BD 8C 01 LDA $018C,x ; Setup VRAM Address $80/8DAA 8D 16 21 STA $2116 $80/8DAD BD 9C 01 LDA $019C,x $80/8DB0 8D 17 21 STA $2117 $80/8DB3 A9 81 LDA #$81 ; Set DMA Settings $80/8DB5 8D 10 43 STA $4310 $80/8DB8 A9 39 LDA #$39 ; DMA Source: $2139 - VRAM Read $80/8DBA 8D 11 43 STA $4311 $80/8DBD AD 39 21 LDA $2139 [$80:2139] A:0239 X:000D Y:0000 P:envMXdIzC $80/8DC0 AD 3A 21 LDA $213A [$80:213A] A:0200 X:000D Y:0000 P:envMXdIZC $80/8DC3 A9 02 LDA #$02 ; Activate DMA $80/8DC5 8D 0B 42 STA $420B $80/8DC8 9E 6C 01 STZ $016C,x ; Clear flag for DMA $80/8DCB 82 16 FF BRL $FF16 ; [$8CE4] Loop, do next DMA
$80/8DCE DA PHX ; Buffer X on stack $80/8DCF 20 D9 8D JSR $8DD9 ; Turn first input ($0211 or $0212) into negative number if necessary $80/8DD2 E8 INX ; Increment Index so that it points to the second register $80/8DD3 E8 INX $80/8DD4 20 D9 8D JSR $8DD9 ; Turn first input ($0213 or $0214) into negative number if necessary $80/8DD7 FA PLX ; Restore X $80/8DD8 60 RTS
If you move the mouse one pixel down, the value is #$01. If you move it up, it is #$81. The MSB tells the direction and the other bits tell the number of pixels moved, always as a positive.
This subroutine turns this into a real negative number (One pixel up = #$FF, two pixel up = #$FE), so it can be added more easily.
$80/8DD9 BD 11 02 LDA $0211,x ; Load Mouse input $80/8DDC 10 0A BPL $0A ; [$8DE8] Exit if it is positive (nothing is to change) $80/8DDE 29 7F AND #$7F ; If it is negative, remove the MSB $80/8DE0 49 FF EOR #$FF ; Turn the rest into a negative number (EOR + 1) $80/8DE2 1A INC A $80/8DE3 9D 11 02 STA $0211,x ; Store number $80/8DE6 80 02 BRA $02 ; [$8DEA] UNNECESSARY LINE - if the two lines below are removed, this is useless $80/8DE8 29 7F AND #$7F ; UNNECESSARY LINE - This is only executed the MSB already isn't set $80/8DEA 9D 11 02 STA $0211,x ; UNNECESSARY LINE - Nothing gets stored that isn't stored already $80/8DED 60 RTS
$80/8DEE 8A TXA A:0000 X:0000 Y:0000 P:envMXdIZc $80/8DEF 0A ASL A A:0000 X:0000 Y:0000 P:envMXdIZc $80/8DF0 A8 TAY A:0000 X:0000 Y:0000 P:envMXdIZc $80/8DF1 B9 58 01 LDA $0158,y[$80:0158] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8DF4 0A ASL A A:0001 X:0000 Y:0000 P:envMXdIzc $80/8DF5 0A ASL A A:0002 X:0000 Y:0000 P:envMXdIzc $80/8DF6 3E 15 02 ROL $0215,x[$80:0215] A:0004 X:0000 Y:0000 P:envMXdIzc $80/8DF9 B9 54 01 LDA $0154,y[$80:0154] A:0004 X:0000 Y:0000 P:envMXdIZc $80/8DFC 0A ASL A A:0001 X:0000 Y:0000 P:envMXdIzc $80/8DFD 0A ASL A A:0002 X:0000 Y:0000 P:envMXdIzc $80/8DFE 3E 15 02 ROL $0215,x[$80:0215] A:0004 X:0000 Y:0000 P:envMXdIzc $80/8E01 B9 50 01 LDA $0150,y[$80:0150] A:0004 X:0000 Y:0000 P:envMXdIZc $80/8E04 0A ASL A A:0001 X:0000 Y:0000 P:envMXdIzc $80/8E05 0A ASL A A:0002 X:0000 Y:0000 P:envMXdIzc $80/8E06 3E 15 02 ROL $0215,x[$80:0215] A:0004 X:0000 Y:0000 P:envMXdIzc $80/8E09 1E 15 02 ASL $0215,x[$80:0215] A:0004 X:0000 Y:0000 P:envMXdIZc $80/8E0C B9 58 01 LDA $0158,y[$80:0158] A:0004 X:0000 Y:0000 P:envMXdIZc $80/8E0F 0A ASL A A:0001 X:0000 Y:0000 P:envMXdIzc $80/8E10 3E 15 02 ROL $0215,x[$80:0215] A:0002 X:0000 Y:0000 P:envMXdIzc $80/8E13 B9 54 01 LDA $0154,y[$80:0154] A:0002 X:0000 Y:0000 P:envMXdIZc $80/8E16 0A ASL A A:0001 X:0000 Y:0000 P:envMXdIzc $80/8E17 3E 15 02 ROL $0215,x[$80:0215] A:0002 X:0000 Y:0000 P:envMXdIzc $80/8E1A B9 50 01 LDA $0150,y[$80:0150] A:0002 X:0000 Y:0000 P:envMXdIZc $80/8E1D 0A ASL A A:0001 X:0000 Y:0000 P:envMXdIzc $80/8E1E 3E 15 02 ROL $0215,x[$80:0215] A:0002 X:0000 Y:0000 P:envMXdIzc $80/8E21 20 25 8E JSR $8E25 [$80:8E25] A:0002 X:0000 Y:0000 P:envMXdIZc $80/8E24 60 RTS A:0000 X:0000 Y:0000 P:envMXdIZc
$80/8E25 BD 19 02 LDA $0219,x[$80:0219] A:0002 X:0000 Y:0000 P:envMXdIZc $80/8E28 D0 11 BNE $11 [$8E3B] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8E2A BD 15 02 LDA $0215,x[$80:0215] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8E2D 29 22 AND #$22 A:0000 X:0000 Y:0000 P:envMXdIZc $80/8E2F F0 2D BEQ $2D [$8E5E] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8E31 9D 17 02 STA $0217,x[$80:0217] A:0020 X:0000 Y:0000 P:enVMXdIzc $80/8E34 A9 40 LDA #$40 A:0020 X:0000 Y:0000 P:enVMXdIzc $80/8E36 9D 19 02 STA $0219,x[$80:0219] A:0040 X:0000 Y:0000 P:enVMXdIzc $80/8E39 80 23 BRA $23 ; [$8E5E] Exit $80/8E3B BD 11 02 LDA $0211,x[$80:0211] A:0040 X:0000 Y:0000 P:envMXdIzc $80/8E3E 1D 13 02 ORA $0213,x[$80:0213] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8E41 D0 15 BNE $15 [$8E58] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8E43 DE 19 02 DEC $0219,x[$80:0219] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8E46 BD 15 02 LDA $0215,x[$80:0215] A:0000 X:0000 Y:0000 P:envMXdIzc $80/8E49 29 22 AND #$22 A:0010 X:0000 Y:0000 P:envMXdIzc $80/8E4B 3D 17 02 AND $0217,x[$80:0217] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8E4E F0 0E BEQ $0E ; [$8E5E] Exit
code is missing here
$80/8E58 9E 19 02 STZ $0219,x[$80:0219] A:00FB X:0000 Y:0000 P:eNVMXdIzc $80/8E5B 9E 17 02 STZ $0217,x[$80:0217] A:00FB X:0000 Y:0000 P:eNVMXdIzc $80/8E5E 60 RTS A:0000 X:0000 Y:0000 P:envMXdIZc
$80/8E5F Is a SNES mouse connected?
$80/8E5F A2 01 LDX #$01 A:0061 X:00FF Y:00FF P:envMXdIzc $80/8E61 8A TXA A:0061 X:0001 Y:00FF P:envMXdIzc $80/8E62 0A ASL A A:0001 X:0001 Y:00FF P:envMXdIzc $80/8E63 A8 TAY A:0002 X:0001 Y:00FF P:envMXdIzc $80/8E64 B9 18 42 LDA $4218,y[$80:421A] A:0002 X:0001 Y:0002 P:envMXdIzc $80/8E67 29 0F AND #$0F ; Is a mouse connected to the Joypad port? $80/8E69 C9 01 CMP #$01 $80/8E6B F0 08 BEQ $08 ; [$8E75] Branch if it is $80/8E6D 9E 17 02 STZ $0217,x[$80:0218] A:0 X:0001 Y:0002 P:eNvMXdIzc $80/8E70 9E 19 02 STZ $0219,x[$80:021A] A:0 X:0001 Y:0002 P:eNvMXdIzc $80/8E73 80 1E BRA $1E [$8E93] A:0 X:0001 Y:0002 P:eNvMXdIzc
if a SNES mouse is connected
$80/8E75 AD 0E 02 LDA $020E [$80:020E] A:0001 X:0000 Y:0000 P:envMXdIZC $80/8E78 1D 97 8E ORA $8E97,x[$80:8E97] A:0000 X:0000 Y:0000 P:envMXdIZC $80/8E7B 8D 0E 02 STA $020E [$80:020E] A:0001 X:0000 Y:0000 P:envMXdIzC $80/8E7E A0 10 LDY #$10 ; Transfer the Mouse Input to $0211-4 (only 16 bit) $80/8E80 BD 16 40 LDA $4016,x ; (It seems only to care about the mouse POSITION, not if buttons are pushed) $80/8E83 4A LSR A $80/8E84 3E 11 02 ROL $0211,x $80/8E87 3E 13 02 ROL $0213,x $80/8E8A 88 DEY $80/8E8B D0 F3 BNE $F3 ; [$8E80] $80/8E8D 20 CE 8D JSR $8DCE ; Turn negatives input into negative numbers $80/8E90 20 EE 8D JSR $8DEE [$80:8DEE] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8E93 CA DEX A:0 X:0001 Y:0002 P:eNvMXdIzc $80/8E94 10 CB BPL $CB [$8E61] A:0 X:0 Y:0002 P:envMXdIZc $80/8E96 60 RTS A:0 X:00FF Y:0 P:eNvMXdIzc
$80/8E97 Data for $80/8E5F
$80/8E97 01 02
$80/8E99
$80/8E99 8B PHB ; Buffer Program Bank and Flag Register value on stack $80/8E9A 08 PHP $80/8E9B 4B PHK ; Set Program Bank to $80 $80/8E9C AB PLB $80/8E9D E2 30 SEP #$30 ; A/X/Y = 8-bit $80/8E9F 9C 0E 02 STZ $020E ; Clear all Mouse related registers $80/8EA2 9C 15 02 STZ $0215 $80/8EA5 9C 11 02 STZ $0211 $80/8EA8 9C 13 02 STZ $0213 $80/8EAB 9C 16 02 STZ $0216 $80/8EAE 9C 12 02 STZ $0212 $80/8EB1 9C 14 02 STZ $0214 $80/8EB4 AD 35 01 LDA $0135 ; Check if Auto Joypad Read is enabled $80/8EB7 4A LSR A $80/8EB8 90 0C BCC $0C ; [$8EC6] Exit if it is $80/8EBA AD 12 42 LDA $4212 ; Wait if Auto-Joypad-Read is still busy $80/8EBD 4A LSR A $80/8EBE B0 FA BCS $FA ; [$8EBA] $80/8EC0 20 5F 8E JSR $8E5F ; Is a SNES mouse connected? $80/8EC3 20 0A 8F JSR $8F0A [$80:8F0A] A:0 X:00FF Y:0 P:eNvMXdIzc $80/8EC6 28 PLP ; Restore Program Bank and Flag Register $80/8EC7 AB PLB $80/8EC8 6B RTL
From FullSNES:
Mouse Sensitivity The Mouse Resolution is specified as "50 counts/inch (+/-10%)". There are three selectable Sensitivity (Threshold) settings: 0 - slow - linear fixed level (1:1) 1 - normal - exponential -?- levels (1:1 to ?:1) (?:1=smaller than 6:1) 2 - fast - exponential six levels (1:1 to 6:1) Setting 0 returns raw mickeys (so one must implement effects like double-speed threshold by software). Settings 1-2 can be used directly as screen-pixel offsets. To change the sensitivity (for port n=0 or n=1): [4016h]=01h ;set STB=1 dummy=[4016h+n] ;issue CLK pulse while STB=1 <-- increments the value, [4016h]=00h ;set STB=0 or wraps from 2 to 0 ;Thereafter, one should read the Sensitivity bits, typically like so: [4016h]=01h ;set STB=1 ;\another STB on/off, for invoking reading [4016h]=00h ;set STB=0 ;/(not sure if this part is required) for i=11 to 0, dummy=[4016h+n], next i ;skip first 12 bits for i=1 to 0, sensitivity.bit(i)=[4016h+n], next i ;read 2 sensitivity bits ;Repeat the above procedure until the desired sensitivity value is reached. Caution: According to Nintendo, the internal threshold factors aren't initialized until the change-sensitivty procedure is executed at least once (ie. after power-up, or after sensing a newly connected mouse, one MUST execute the change-sensitivity procedure, EVEN if the mouse does return the desired 2bit sensitivity code).
This subroutine is still to-do
$80/8EC9 A9 06 LDA #$06 A:0001 X:0000 Y:0000 P:envMXdIzc $80/8ECB 8D 41 00 STA $0041 [$80:0041] A:0006 X:0000 Y:0000 P:envMXdIzc $80/8ECE A9 01 LDA #$01 A:0006 X:0000 Y:0000 P:envMXdIzc $80/8ED0 8D 16 40 STA $4016 [$80:4016] A:0001 X:0000 Y:0000 P:envMXdIzc $80/8ED3 BD 16 40 LDA $4016,x[$80:4016] A:0001 X:0000 Y:0000 P:envMXdIzc $80/8ED6 9C 16 40 STZ $4016 [$80:4016] A:0040 X:0000 Y:0000 P:envMXdIzc $80/8ED9 A9 01 LDA #$01 A:0040 X:0000 Y:0000 P:envMXdIzc $80/8EDB 8D 16 40 STA $4016 [$80:4016] A:0001 X:0000 Y:0000 P:envMXdIzc $80/8EDE A9 00 LDA #$00 A:0001 X:0000 Y:0000 P:envMXdIzc $80/8EE0 8D 16 40 STA $4016 [$80:4016] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8EE3 8D 44 00 STA $0044 [$80:0044] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8EE6 A0 0A LDY #$0A A:0000 X:0000 Y:0000 P:envMXdIZc $80/8EE8 BD 16 40 LDA $4016,x[$80:4016] A:0000 X:0000 Y:000A P:envMXdIzc $80/8EEB 88 DEY A:0040 X:0000 Y:000A P:envMXdIzc $80/8EEC D0 FA BNE $FA [$8EE8] A:0040 X:0000 Y:0009 P:envMXdIzc $80/8EEE BD 16 40 LDA $4016,x[$80:4016] A:0040 X:0000 Y:0000 P:envMXdIZc $80/8EF1 4A LSR A A:0040 X:0000 Y:0000 P:envMXdIzc $80/8EF2 2E 44 00 ROL $0044 [$80:0044] A:0020 X:0000 Y:0000 P:envMXdIzc $80/8EF5 BD 16 40 LDA $4016,x[$80:4016] A:0020 X:0000 Y:0000 P:envMXdIZc $80/8EF8 4A LSR A A:0041 X:0000 Y:0000 P:envMXdIzc $80/8EF9 2E 44 00 ROL $0044 [$80:0044] A:0020 X:0000 Y:0000 P:envMXdIzC $80/8EFC AD 44 00 LDA $0044 [$80:0044] A:0020 X:0000 Y:0000 P:envMXdIzc $80/8EFF DD 0F 02 CMP $020F,x[$80:020F] A:0001 X:0000 Y:0000 P:envMXdIzc $80/8F02 F0 05 BEQ $05 [$8F09] A:0001 X:0000 Y:0000 P:envMXdIzC $80/8F04 CE 41 00 DEC $0041 [$80:0041] A:0001 X:0000 Y:0000 P:envMXdIzC $80/8F07 D0 C5 BNE $C5 [$8ECE] A:0001 X:0000 Y:0000 P:envMXdIzC $80/8F09 60 RTS A:0000 X:0000 Y:0000 P:envMXdIZC
$80/8F0A ?
$80/8F0A A2 01 LDX #$01 ; Check if a mouse is connected $80/8F0C AD 0E 02 LDA $020E [$80:020E] A:0000 X:0001 Y:0000 P:envMXdIzc $80/8F0F 3D 1B 8F AND $8F1B,x[$80:8F1C] A:0001 X:0001 Y:0000 P:envMXdIzc $80/8F12 F0 03 BEQ $03 [$8F17] A:0000 X:0001 Y:0000 P:envMXdIZc $80/8F14 20 C9 8E JSR $8EC9 [$80:8EC9] A:0001 X:0000 Y:0000 P:envMXdIzc $80/8F17 CA DEX A:0000 X:0001 Y:0000 P:envMXdIZc $80/8F18 10 F2 BPL $F2 [$8F0C] A:0000 X:0000 Y:0000 P:envMXdIZc $80/8F1A 60 RTS A:0000 X:00FF Y:0000 P:eNvMXdIzC
$80/8F1B Data for $80/8F0A
$80/8F1B 01 02
$80/8F49 ? (Frame Counter?)
$80/8F49 AD 27 06 LDA $0627 [$80:0627] A:0 X:0 Y:004B P:envmxdIzC $80/8F4C 1A INC A A:0 X:0 Y:004B P:envmxdIZC $80/8F4D C9 3C 00 CMP #$003C A:0001 X:0 Y:004B P:envmxdIzC $80/8F50 B0 04 BCS $04 [$8F56] A:0001 X:0 Y:004B P:eNvmxdIzc $80/8F52 8D 27 06 STA $0627 [$80:0627] A:0001 X:0 Y:004B P:eNvmxdIzc $80/8F55 6B RTL A:0001 X:0 Y:004B P:eNvmxdIzc $80/8F56 9C 27 06 STZ $0627 [$80:0627] A:003C X:0010 Y:0 P:envmxdIZC $80/8F59 AD 29 06 LDA $0629 [$80:0629] A:003C X:0010 Y:0 P:envmxdIZC $80/8F5C 1A INC A A:0 X:0010 Y:0 P:envmxdIZC $80/8F5D C9 3C 00 CMP #$003C A:0001 X:0010 Y:0 P:envmxdIzC $80/8F60 B0 04 BCS $04 [$8F66] A:0001 X:0010 Y:0 P:eNvmxdIzc $80/8F62 8D 29 06 STA $0629 [$80:0629] A:0001 X:0010 Y:0 P:eNvmxdIzc $80/8F65 6B RTL A:0001 X:0010 Y:0 P:eNvmxdIzc $80/8F66 9C 29 06 STZ $0629 [$80:0629] A:003C X:0 Y:006E P:envmxdIZC $80/8F69 AD 2B 06 LDA $062B [$80:062B] A:003C X:0 Y:006E P:envmxdIZC $80/8F6C 1A INC A A:0 X:0 Y:006E P:envmxdIZC $80/8F6D C9 3C 00 CMP #$003C A:0001 X:0 Y:006E P:envmxdIzC $80/8F70 B0 04 BCS $04 [$8F76] A:0001 X:0 Y:006E P:eNvmxdIzc $80/8F72 8D 2B 06 STA $062B [$80:062B] A:0001 X:0 Y:006E P:eNvmxdIzc $80/8F75 6B RTL A:0001 X:0 Y:006E P:eNvmxdIzc $80/8F76 9C 2B 06 STZ $062B [$80:062B] A:0002 X:0010 Y:0000 P:envmxdIZC $80/8F79 EE 2D 06 INC $062D [$80:062D] A:0002 X:0010 Y:0000 P:envmxdIZC $80/8F7C 6B RTL A:0002 X:0010 Y:0000 P:envmxdIzC
$80/8F7D PROGRAM START
$00/8F7D 78 SEI ; Disable Interrupts $00/8F7E 18 CLC ; Activate Native Mode $00/8F7F FB XCE $00/8F80 5C 84 8F 80 JMP $808F84 ; Switch to FastROM addressing $80/8F84 E2 20 SEP #$20 ; A = 8-bit $80/8F86 C2 10 REP #$10 ; X/Y = 16-bit $80/8F88 4B PHK ; Data Bank = Program Bank $80/8F89 AB PLB $80/8F8A A9 01 LDA #$01 $80/8F8C 8D 00 42 STA $4200 ; Auto-Joypad-Enable, NMI/IRQ Disable $80/8F8F 8D 0D 42 STA $420D ; Activate FastROM $80/8F92 A9 80 LDA #$80 ; FBLANK $80/8F94 8D 00 21 STA $2100 $80/8F97 C2 30 REP #$30 ; A/X/Y = 16-bit $80/8F99 A9 00 00 LDA #$0000 ; Direct Page: $0000 $80/8F9C 5B TCD $80/8F9D AD 63 06 LDA $0663 [$80:0663] A:0000 X:0 Y:0 P:envmxdIZC $80/8FA0 49 FF FF EOR #$FFFF A:5555 X:0 Y:0 P:envmxdIzC $80/8FA3 CD 61 06 CMP $0661 [$80:0661] A:AAAA X:0 Y:0 P:eNvmxdIzC $80/8FA6 D0 06 BNE $06 [$8FAE] A:AAAA X:0 Y:0 P:envmxdIzC
code is missing here
$80/8FAE A9 00 00 LDA #$0000 ; Clear whole WRAM $80/8FB1 8F 00 00 7E STA $7E0000 $80/8FB5 8F 00 00 7F STA $7F0000 $80/8FB9 A9 FD FF LDA #$FFFD ; (Clear Bank $7E) $80/8FBC A2 01 00 LDX #$0001 $80/8FBF 9B TXY $80/8FC0 C8 INY $80/8FC1 54 7E 7E MVN 7E 7E $80/8FC4 A9 FD FF LDA #$FFFD ; (Clear Bank $7F) $80/8FC7 A2 01 00 LDX #$0001 $80/8FCA 9B TXY $80/8FCB C8 INY $80/8FCC 54 7F 7F MVN 7F 7F $80/8FCF 4B PHK ; Data Bank = Program Bank $80/8FD0 AB PLB $80/8FD1 7B TDC ; Buffer Direct Page in $0665 $80/8FD2 8D 65 06 STA $0665 $80/8FD5 A9 00 00 LDA #$0000 ; Direct Page: $0000 $80/8FD8 5B TCD $80/8FD9 A9 FF 1E LDA #$1EFF ; Stack: $1EFF $80/8FDC 1B TCS $80/8FDD 22 11 84 80 JSL $808411 ; Store a chain of values in $01xx
Arguments: $80/8FE1 D7 90 80 ; Data for $01xx registers is at $80/90D7
$80/8FE4 A9 80 00 LDA #$0080 $80/8FE7 8D 00 01 STA $0100 ; #$80 in value to set in $2100 (FBLANK) $80/8FEA 8D 1B 02 STA $021B ; #$80 in value currently set in $2100 (FBLANK) $80/8FED A9 01 00 LDA #$0001 ; Set Flag for Auto Joypad Read in $4200 buffer $80/8FF0 8D 35 01 STA $0135 $80/8FF3 22 00 82 80 JSL $808200[$80:8200] A:0001 X:00FF Y:0062 P:envmxdIzC $80/8FF7 AF F1 FF 9F LDA $9FFFF1 ; Setup address of the SPC program to transfer in $20-22: $9D/8000 $80/8FFB 85 21 STA $21 ; (UNNECESSARY LINE - one could save a few bytes if the address...) $80/8FFD AF F0 FF 9F LDA $9FFFF0 ; (... would be loaded directly here instead of this bank $9F detour) $80/9001 85 20 STA $20 $80/9003 22 5A 99 80 JSL $80995A ; Transfer Data to SPC $80/9007 AD 12 42 LDA $4212 ; Wait until the Auto-Joypad read is done $80/900A 4A LSR A $80/900B 90 FA BCC $FA ; [$9007] $80/900D AD 12 42 LDA $4212 $80/9010 4A LSR A $80/9011 B0 FA BCS $FA ; [$900D] $80/9013 AD 1A 42 LDA $421A ; Load Joypad 2 data $80/9016 29 F0 FF AND #$FFF0 ; Check if A/B/X/Y/L/R are pushed all at the same time $80/9019 C9 F0 C0 CMP #$C0F0 $80/901C D0 0E BNE $0E ; [$902C] Branch if not $80/901E 22 E4 C8 80 JSL $80C8E4[$80:C8E4] A:0000 X:0000 Y:E280 P:envmxdIzc
Play Sound Effect after SRAM reset
$80/9022 A9 84 03 LDA #$0384 ; Play Sound Effect #$84 $80/9025 A0 01 00 LDY #$0001 A:0384 X:FFFE Y:E280 P:envmxdIzc $80/9028 22 1C 5C 10 JSL $105C1C ; APU Message $80/902C 22 F7 C8 80 JSL $80C8F7 ; Copy data from banks $10-$12 to $13-$15 $80/9030 22 74 59 10 JSL $105974[$10:5974] A:0 X:FFFE Y:E280 P:envmxdIzc $80/9034 E2 20 SEP #$20 ; A = 8-bit $80/9036 C2 10 REP #$10 ; X/Y = 16-bit $80/9038 9C 3F 14 STZ $143F ; Clear Error Counter? $80/903B 22 8C 59 10 JSL $10598C ; Check if Satellaview Stream Number Registers work $80/903F F0 03 BEQ $03 ; [$9044] Branch if everything works fine $80/9041 EE 3F 14 INC $143F ; Increment Error Counter? $80/9044 22 58 5B 10 JSL $105B58[$10:5B58] A:0 X:FFFE Y:E280 P:envMxdIZC $80/9048 22 A4 59 10 JSL $1059A4 ; Transfer (fixed Set of) Data to Satellaview $80/904C 22 6C 5A 10 JSL $105A6C ; MCC Memory Controller Settings: Enable Flash R/W $80/9050 22 0C 5B 10 JSL $105B0C[$10:5B0C] A:0080 X:0007 Y:0 P:eNvMxdIzC $80/9054 22 70 5A 10 JSL $105A70 ; MCC Memory Controller Settings: Disable Flash R/W $80/9058 C2 30 REP #$30 A:0080 X:0 Y:0 P:eNvMxdIzC $80/905A 22 0F 8C 80 JSL $808C0F[$80:8C0F] A:0080 X:0 Y:0 P:eNvmxdIzC $80/905E 22 09 A7 80 JSL $80A709[$80:A709] A:0010 X:00FF Y:0 P:eNvmxdIzC $80/9062 22 58 83 80 JSL $808358[$80:8358] A:00E0 X:FFFE Y:0 P:eNvmxdIzC $80/9066 22 40 5B 10 JSL $105B40[$10:5B40] A:0061 X:FFFE Y:0 P:eNvmxdIzC $80/906A A9 08 00 LDA #$0008 A:0006 X:FFFF Y:0 P:eNvmxdIzC $80/906D 8D 4C 01 STA $014C [$80:014C] A:0008 X:FFFF Y:0 P:envmxdIzC $80/9070 A9 04 00 LDA #$0004 A:0008 X:FFFF Y:0 P:envmxdIzC $80/9073 8D 4E 01 STA $014E [$80:014E] A:0004 X:FFFF Y:0 P:envmxdIzC $80/9076 A9 FF FF LDA #$FFFF A:0004 X:FFFF Y:0 P:envmxdIzC $80/9079 8D 13 0A STA $0A13 [$80:0A13] A:FFFF X:FFFF Y:0 P:eNvmxdIzC $80/907C A9 FF FF LDA #$FFFF A:FFFF X:FFFF Y:0 P:eNvmxdIzC $80/907F 8F 15 87 7E STA $7E8715[$7E:8715] A:FFFF X:FFFF Y:0 P:eNvmxdIzC $80/9083 AD 65 06 LDA $0665 [$80:0665] A:FFFF X:FFFF Y:0 P:eNvmxdIzC $80/9086 C9 47 53 CMP #$5347 A:0 X:FFFF Y:0 P:envmxdIZC $80/9089 F0 0E BEQ $0E [$9099] A:0 X:FFFF Y:0 P:eNvmxdIzc $80/908B A9 00 80 LDA #$8000 ; Next NMI, go to $94/8000 $80/908E 8D 37 06 STA $0637 $80/9091 A9 94 00 LDA #$0094 $80/9094 8D 39 06 STA $0639 $80/9097 80 18 BRA $18 [$90B1] A:0094 X:FFFF Y:0 P:envmxdIzc $80/90B1 9C 65 06 STZ $0665 [$80:0665] A:0094 X:FFFF Y:0 P:envmxdIzc $80/90B4 22 25 92 80 JSL $809225[$80:9225] A:0094 X:FFFF Y:0 P:envmxdIzc $80/90B8 A9 3A 91 LDA #$913A A:0 X:0010 Y:0 P:envmxdIzc $80/90BB 8D 3F 06 STA $063F [$80:063F] A:913A X:0010 Y:0 P:eNvmxdIzc $80/90BE A9 80 00 LDA #$0080 A:913A X:0010 Y:0 P:eNvmxdIzc $80/90C1 8D 41 06 STA $0641 [$80:0641] A:0080 X:0010 Y:0 P:envmxdIzc $80/90C4 22 9D 83 80 JSL $80839D[$80:839D] A:0080 X:0010 Y:0 P:envmxdIzc $80/90C8 58 CLI A:0081 X:0010 Y:0 P:envmxdIzc $80/90C9 20 6A 93 JSR $936A [$80:936A] A:0081 X:0010 Y:0 P:envmxdizc $80/90CC 4B PHK A:913A X:0010 Y:0 P:eNvmxdizc $80/90CD F4 D2 90 PEA $90D2 A:913A X:0010 Y:0 P:eNvmxdizc $80/90D0 DC 33 06 JML [$0633][$80:913A] A:913A X:0010 Y:0 P:eNvmxdizc
$80/90D7 Data
This data gets transfered to the $01xx Graphics Register buffer via $80/8411 at $80/8FDD.
This is executed while the start-up, these values serve to clear those Graphics Registers.
$80/90D7 01 00 - Value for $0101 = $2101 - Object Size and Object Base $80/90D9 02 00 - Value for $0102 $80/90DB 03 00 - Value for $0103 $80/90DD 04 00 - Value for $0104 = $2105 - BG Mode $80/90DF 05 00 - Value for $0105 = $2106 - Mosaic $80/90E1 06 00 $80/90E3 07 00 $80/90E5 08 00 $80/90E7 09 00 $80/90E9 0A 00 $80/90EB 0B 00 $80/90ED 0F 00 $80/90EF 10 00 $80/90F1 11 00 $80/90F3 12 00 $80/90F5 13 00 $80/90F7 14 00 $80/90F9 15 00 $80/90FB 16 00 $80/90FD 17 00 $80/90FF 18 00 $80/9101 19 00 $80/9103 1A 00 $80/9105 1B 00 $80/9107 1C 00 $80/9109 1D 00 $80/910B 1E 00 $80/910D 0C 00 $80/910F 0D 00 $80/9111 0E 00 $80/9113 1F 00 $80/9115 20 00 $80/9117 21 00 $80/9119 22 00 $80/911B 23 00 $80/911D 24 00 $80/911F 25 00 $80/9121 26 00 $80/9123 27 00 $80/9125 28 00 $80/9127 2A 30 $80/9129 2B 00 $80/912B 2C E0 $80/912D 30 00 $80/912F 38 00 $80/9131 39 00 $80/9133 36 00 $80/9135 37 00 $80/9137 3A 00 $80/9139 FF
$80/913A ? (Executed when talking to the aerial building and at ROM start up)
$064D,y contain a 24-bit-address. $0650,y flags. If the MSB in $0650,y is set,
$80/913A 08 PHP ; Push everything on stack, A/X/Y = 16-bit $80/913B C2 30 REP #$30 $80/913D 48 PHA $80/913E DA PHX $80/913F 5A PHY $80/9140 0B PHD $80/9141 8B PHB $80/9142 4B PHK ; Set Program Bank to $80 $80/9143 AB PLB $80/9144 BA TSX A:0000 X:0000 Y:001C P:eNvmxdizc $80/9145 8A TXA A:0000 X:1E8D Y:001C P:envmxdizc $80/9146 E2 10 SEP #$10 ; X/Y = 16-bit $80/9148 AC 45 06 LDY $0645 [$80:0645] A:1E8D X:008D Y:001C P:envmXdizc $80/914B BE 50 06 LDX $0650,y[$80:0650] A:1E8D X:008D Y:0000 P:envmXdiZc $80/914E 10 03 BPL $03 [$9153] A:1E8D X:0000 Y:0000 P:envmXdiZc $80/9150 99 4D 06 STA $064D,y[$80:064D] A:1E86 X:00C0 Y:0 P:eNvmXdizc $80/9153 BB TYX A:1E8D X:0000 Y:0000 P:envmXdiZc $80/9154 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/9156 A9 FF LDA #$FF A:1E8D X:0000 Y:0000 P:envMXdiZc $80/9158 80 09 BRA $09 [$9163] A:1EFF X:0000 Y:0000 P:eNvMXdizc $80/915A 3C 50 06 BIT $0650,x[$80:0654] A:1EFF X:0004 Y:0 P:eNvMXdizc $80/915D 70 04 BVS $04 [$9163] A:1EFF X:0004 Y:0 P:envMXdiZc $80/915F 30 0E BMI $0E [$916F] A:1EFF X:0004 Y:0 P:envMXdiZc $80/9161 D0 1D BNE $1D [$9180] A:1EFF X:0004 Y:0 P:envMXdiZc $80/9163 E8 INX A:1EFF X:0 Y:0 P:eNvMXdizc $80/9164 E8 INX A:1EFF X:0001 Y:0 P:envMXdizc $80/9165 E8 INX A:1EFF X:0002 Y:0 P:envMXdizc $80/9166 E8 INX A:1EFF X:0003 Y:0 P:envMXdizc $80/9167 E0 10 CPX #$10 A:1EFF X:0004 Y:0 P:envMXdizc $80/9169 90 EF BCC $EF [$915A] A:1EFF X:0004 Y:0 P:eNvMXdizc $80/916B A2 00 LDX #$00 A:1EFF X:0010 Y:0 P:envMXdiZC $80/916D 80 EB BRA $EB [$915A] A:1EFF X:0 Y:0 P:envMXdiZC $80/916F 8E 45 06 STX $0645 [$80:0645] A:1EFF X:0 Y:0 P:eNvMXdizC $80/9172 9B TXY A:1EFF X:0 Y:0 P:eNvMXdizC $80/9173 C2 30 REP #$30 A:1EFF X:0 Y:0 P:envMXdiZC $80/9175 BE 4D 06 LDX $064D,y[$80:064D] A:1EFF X:0 Y:0 P:envmxdiZC $80/9178 9A TXS A:1EFF X:1E86 Y:0 P:envmxdizC $80/9179 AB PLB A:1EFF X:1E86 Y:0 P:envmxdizC $80/917A 2B PLD A:1EFF X:1E86 Y:0 P:eNvmxdizC $80/917B 7A PLY A:1EFF X:1E86 Y:0 P:envmxdiZC $80/917C FA PLX A:1EFF X:1E86 Y:0094 P:envmxdizC $80/917D 68 PLA A:1EFF X:0 Y:0094 P:envmxdiZC $80/917E 28 PLP A:1E01 X:0 Y:0094 P:envmxdizC $80/917F 6B RTL A:1E01 X:0 Y:0094 P:envmxdizc $80/9180 8E 45 06 STX $0645 [$80:0645] A:1EFF X:0 Y:0 P:envMXdizC $80/9183 A9 80 LDA #$80 A:1EFF X:0 Y:0 P:envMXdizC $80/9185 9D 50 06 STA $0650,x[$80:0650] A:1E80 X:0 Y:0 P:eNvMXdizC $80/9188 C2 20 REP #$20 ; A = 16-bit $80/918A BD 4D 06 LDA $064D,x[$80:064D] A:1E80 X:0 Y:0 P:eNvmXdizC $80/918D 8D 4A 06 STA $064A [$80:064A] A:8572 X:0 Y:0 P:eNvmXdizC $80/9190 BC 4F 06 LDY $064F,x[$80:064F] A:8572 X:0 Y:0 P:eNvmXdizC $80/9193 8C 4C 06 STY $064C [$80:064C] A:8572 X:0 Y:0094 P:eNvmXdizC $80/9196 C2 30 REP #$30 ; A/X/Y = 16-bit $80/9198 AD 45 06 LDA $0645 [$80:0645] A:8572 X:0 Y:0094 P:eNvmxdizC $80/919B 29 FF 00 AND #$00FF A:0 X:0 Y:0094 P:envmxdiZC $80/919E AA TAX A:0 X:0 Y:0094 P:envmxdiZC $80/919F BD A6 91 LDA $91A6,x[$80:91A6] A:0 X:0 Y:0094 P:envmxdiZC $80/91A2 1B TCS A:1E97 X:0 Y:0094 P:envmxdizC $80/91A3 DC 4A 06 JML [$064A][$94:8572] A:1E97 X:0 Y:0094 P:envmxdizC
$80/91B6 ? (Executed when talking to the aerial building and at start up)
$80/91B6 DA PHX ; Buffer X and Flag Register value on stack $80/91B7 08 PHP $80/91B8 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/91BA A2 00 LDX #$00 A:B0B4 X:0000 Y:0000 P:eNvMXdIzc $80/91BC BD 50 06 LDA $0650,x[$81:0650] A:B0B4 X:0000 Y:0000 P:envMXdIZc $80/91BF F0 0C BEQ $0C [$91CD] A:B000 X:0000 Y:0000 P:envMXdIZc
$80/91C1 E8 INX A:8A01 X:0 Y:0 P:envMXdIzc $80/91C2 E8 INX A:8A01 X:0001 Y:0 P:envMXdIzc $80/91C3 E8 INX A:8A01 X:0002 Y:0 P:envMXdIzc $80/91C4 E8 INX A:8A01 X:0003 Y:0 P:envMXdIzc $80/91C5 E0 10 CPX #$10 A:8A01 X:0004 Y:0 P:envMXdIzc $80/91C7 D0 F3 BNE $F3 [$91BC] A:8A01 X:0004 Y:0 P:eNvMXdIzc
$80/91CD C2 20 REP #$20 A:B000 X:0000 Y:0000 P:envMXdIZc $80/91CF AD 5D 06 LDA $065D [$81:065D] A:B000 X:0000 Y:0000 P:envmXdIZc $80/91D2 9D 4D 06 STA $064D,x[$81:064D] A:B0B4 X:0000 Y:0000 P:eNvmXdIzc $80/91D5 AD 5F 06 LDA $065F [$81:065F] A:B0B4 X:0000 Y:0000 P:eNvmXdIzc $80/91D8 29 FF 00 AND #$00FF A:0080 X:0000 Y:0000 P:envmXdIzc $80/91DB 09 00 01 ORA #$0100 A:0080 X:0000 Y:0000 P:envmXdIzc $80/91DE 9D 4F 06 STA $064F,x[$81:064F] A:0180 X:0000 Y:0000 P:envmXdIzc $80/91E1 8E 60 06 STX $0660 [$81:0660] A:0180 X:0000 Y:0000 P:envmXdIzc $80/91E4 8A TXA A:0180 X:0000 Y:0000 P:envmXdIzc $80/91E5 28 PLP A:0000 X:0000 Y:0000 P:envmXdIZc $80/91E6 FA PLX A:0000 X:0000 Y:0000 P:eNvmxdIzc $80/91E7 18 CLC A:0000 X:0000 Y:0000 P:envmxdIZc $80/91E8 6B RTL A:0000 X:0000 Y:0000 P:envmxdIZc
$80/91E9 ? (Executed when talking to the aerial building)
$80/91E9 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/91EB AE 45 06 LDX $0645 [$80:0645] A:0000 X:0000 Y:001C P:envMXdiZc $80/91EE 9E 50 06 STZ $0650,x[$80:0650] A:0000 X:0000 Y:001C P:envMXdiZc $80/91F1 4C 3A 91 JMP $913A [$80:913A] A:0000 X:0000 Y:001C P:envMXdiZc
$80/9225 ? (Clear $0650/4/8/C)
$80/9225 08 PHP ; Buffer Flag Register value on stack $80/9226 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/9228 A2 00 LDX #$00 ; Clear A and X $80/922A 8A TXA $80/922B 9D 50 06 STA $0650,x ; Clear $0650(/4/8/C) $80/922E E8 INX ; Increment Store Index four times $80/922F E8 INX $80/9230 E8 INX $80/9231 E8 INX $80/9232 E0 10 CPX #$10 ; Check if limit was reached $80/9234 D0 F5 BNE $F5 ; [$922B] $80/9236 28 PLP ; Restore Flag Register value $80/9237 6B RTL
$80/9238 ?
$80/9238 08 PHP ; Buffer Flag Register value, A, X and Y on stack $80/9239 C2 30 REP #$30 ; (A/X/Y = 16-bit) $80/923B 48 PHA $80/923C DA PHX $80/923D 5A PHY $80/923E E2 30 SEP #$30 ; A/X/Y = 8-bit $80/9240 AE 45 06 LDX $0645 [$80:0645] A:1E01 X:0 Y:0094 P:eNvMXdizc $80/9243 BD 50 06 LDA $0650,x[$80:0650] A:1E01 X:0 Y:0094 P:envMXdiZc $80/9246 09 40 ORA #$40 A:1E80 X:0 Y:0094 P:eNvMXdizc $80/9248 9D 50 06 STA $0650,x[$80:0650] A:1EC0 X:0 Y:0094 P:eNvMXdizc $80/924B C2 30 REP #$30 ; Restore A, X and Y $80/924D 7A PLY $80/924E FA PLX $80/924F 68 PLA $80/9250 22 3A 91 80 JSL $80913A[$80:913A] A:1E01 X:0 Y:0094 P:envmxdizc $80/9254 28 PLP ; Restore Flag Register value $80/9255 6B RTL
$80/926A ?
$80/926A 08 PHP ; Buffer Flag Register value, A, X and Y on stack $80/926B C2 30 REP #$30 ; (A/X/Y = 16-bit) $80/926D 48 PHA $80/926E DA PHX $80/926F 5A PHY $80/9270 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/9272 AD 1B 02 LDA $021B ; Is FBLANK active? $80/9275 10 06 BPL $06 ; [$927D] Branch if not $80/9277 22 DC 8C 80 JSL $808CDC[$80:8CDC] A:1E80 X:0084 Y:0 P:eNvMXdizc $80/927B 80 0B BRA $0B ; [$9288] Exit $80/927D AE 45 06 LDX $0645 [$80:0645] A:000F X:0 Y:00CA P:envMXdizc $80/9280 BD 50 06 LDA $0650,x[$80:0650] A:000F X:0 Y:00CA P:envMXdiZc $80/9283 09 40 ORA #$40 A:0080 X:0 Y:00CA P:eNvMXdizc $80/9285 9D 50 06 STA $0650,x[$80:0650] A:00C0 X:0 Y:00CA P:eNvMXdizc $80/9288 C2 30 REP #$30 ; Restore A, X and Y $80/928A 7A PLY $80/928B FA PLX $80/928C 68 PLA $80/928D 22 3A 91 80 JSL $80913A[$80:913A] A:1E8C X:1E84 Y:0 P:envmxdizc $80/9291 28 PLP ; Restore Flag Register $80/9292 6B RTL
$80/9293 ?
$80/9293 08 PHP ; Buffer Flag Register value on stack $80/9294 E2 30 SEP #$30 A:FFFF X:00F0 Y:0 P:envmxdIzC $80/9296 A2 00 LDX #$00 A:FFFF X:00F0 Y:0 P:envMXdIzC $80/9298 3C 50 06 BIT $0650,x[$80:0650] A:FFFF X:0 Y:0 P:envMXdIZC $80/929B 50 08 BVC $08 [$92A5] A:FFFF X:0 Y:0 P:envMXdIzC $80/929D BD 50 06 LDA $0650,x[$80:0650] A:FFFF X:0 Y:0 P:eNVMXdIzC $80/92A0 29 BF AND #$BF A:FFC0 X:0 Y:0 P:eNVMXdIzC $80/92A2 9D 50 06 STA $0650,x[$80:0650] A:FF80 X:0 Y:0 P:eNVMXdIzC $80/92A5 E8 INX A:FFFF X:0 Y:0 P:envMXdIzC $80/92A6 E8 INX A:FFFF X:0001 Y:0 P:envMXdIzC $80/92A7 E8 INX A:FFFF X:0002 Y:0 P:envMXdIzC $80/92A8 E8 INX A:FFFF X:0003 Y:0 P:envMXdIzC $80/92A9 E0 10 CPX #$10 A:FFFF X:0004 Y:0 P:envMXdIzC $80/92AB D0 EB BNE $EB [$9298] A:FFFF X:0004 Y:0 P:eNvMXdIzc $80/92AD 28 PLP ; Restore Flag Register $80/92AE 6B RTL
$80/92AF NMI Handler
$00/92AF 5C B3 92 80 JMP $8092B3 ; Change to FastROM $80/92B3 C2 30 REP #$30 ; Buffer everything on Stack $80/92B5 48 PHA $80/92B6 DA PHX $80/92B7 5A PHY $80/92B8 8B PHB $80/92B9 0B PHD $80/92BA 4B PHK ; Set Program Bank to $80 $80/92BB AB PLB $80/92BC A9 00 00 LDA #$0000 ; Set Direct Page to $0000 $80/92BF 5B TCD $80/92C0 AD 10 42 LDA $4210 ; Remove NMI flag $80/92C3 22 78 59 10 JSL $105978[$10:5978] A:42C2 X:0010 Y:0 P:envmxdIzc $80/92C7 A3 0D LDA $0D,s [$00:1EFB] A:42C2 X:0010 Y:0 P:envmxdIzc $80/92C9 29 FF 00 AND #$00FF A:0480 X:0010 Y:0 P:envmxdIzc $80/92CC C9 04 00 CMP #$0004 ; [$92CF] If #04, LOOP FOREVER $80/92CF F0 FE BEQ $FE $80/92D1 AD 43 06 LDA $0643 ; Check Flag: Is already one NMI Handler active? $80/92D4 F0 03 BEQ $03 ; [$92D9] Branch and go on if not $80/92D6 4C 45 93 JMP $9345 ; Branch to "short end" of this NMI $80/92D9 EE 43 06 INC $0643 ; Set Flag: NMI Handler is active $80/92DC 22 44 89 80 JSL $808944 ; Update OAM $80/92E0 22 DC 8C 80 JSL $808CDC ; Work off DMA Pipeline $80/92E4 22 4E 9C 80 JSL $809C4E[$80:9C4E] A:0210 X:0010 Y:0 P:eNvmxdIzC $80/92E8 22 C8 AF 83 JSL $83AFC8[$83:AFC8] A:0 X:0001 Y:0 P:envmxdIzC $80/92EC 22 28 83 80 JSL $808328 ; Update CGRAM $80/92F0 22 5E AC 80 JSL $80AC5E ; VRAM DMA ($0BB4/5) $80/92F4 22 00 82 80 JSL $808200 ; Update Graphics Registers $80/92F8 22 90 93 80 JSL $809390 ; UNNECESSARY LINE - USELESS SUBROUTINE $80/92FC 22 4C 5B 10 JSL $105B4C[$10:5B4C] A:0 X:0 Y:00FF P:envmxdIzC $80/9300 22 6A 89 80 JSL $80896A[$80:896A] A:0001 X:00FF Y:00FF P:envmxdIzC $80/9304 22 99 8E 80 JSL $808E99[$80:8E99] A:0 X:00FF Y:00FF P:envmxdIzC $80/9308 22 20 5C 10 JSL $105C20 ; ? (Work off SPC pipeline) $80/930C 22 44 5B 10 JSL $105B44[$10:5B44] A:0 X:00FF Y:0 P:eNvmxdIzC $80/9310 22 63 83 80 JSL $808363[$80:8363] A:0 X:0 Y:0 P:eNvmxdIzC $80/9314 22 EB 8A 80 JSL $808AEB[$80:8AEB] A:02F6 X:0 Y:0 P:eNvmxdIzC $80/9318 20 55 93 JSR $9355 ; Setup an 24-bit-Address in $062F to jump to $80/931B 4B PHK ; Push 24-bit Return Address on Stack (because it's a JML, not a JSL) $80/931C F4 21 93 PEA $9321 $80/931F DC 2F 06 JML [$062F] ; Jump to address in $062F-31 $80/9322 C2 30 REP #$30 ; A/X/Y = 16-bit $80/9324 22 67 C3 81 JSL $81C367[$81:C367] A:0094 X:FFFE Y:0001 P:envmxdIzc $80/9328 22 14 8A 80 JSL $808A14[$80:8A14] A:FFFF X:0028 Y:0001 P:envmxdIzc $80/932C 22 E1 B0 83 JSL $83B0E1[$83:B0E1] A:1C00 X:00F0 Y:0001 P:envmxdIzc $80/9330 22 93 92 80 JSL $809293[$80:9293] A:FFFF X:00F0 Y:0 P:envmxdIzC $80/9334 22 93 93 80 JSL $809393 ; UNNECESSARY LINE - USELESS SUBROUTINE $80/9338 22 49 8F 80 JSL $808F49 ; ? (Frame Counter?) $80/933C 2B PLD ; Restore everything $80/933D AB PLB $80/933E 7A PLY $80/933F FA PLX $80/9340 68 PLA $80/9341 9C 43 06 STZ $0643 ; Clear Flag: NMI Handler is not active anymore $80/9344 40 RTI
$80/9345 NMI Handler Short End
This is executed if a NMI interrupts an NMI Handler. The second NMI gets ended here quickly so the first one can be worked off and nothing gets done twice.
$80/9345 C2 30 REP #$30 ; A/X/Y = 16-bit $80/9347 22 44 5B 10 JSL $105B44[$10:5B44] A:0001 X:0007 Y:014B P:envmxdIzC $80/934B 22 49 8F 80 JSL $808F49 ; ? (Frame Counter?) $80/934F 2B PLD ; Restore everything $80/9350 AB PLB $80/9351 7A PLY $80/9352 FA PLX $80/9353 68 PLA $80/9354 40 RTI
$80/9355 Setup Jump Addres in $62F-31
Executed during NMI. A = 16 bit!
$80/9355 AD 39 06 LDA $0639 $80/9358 30 0F BMI $0F ; [$9369] Exit if MSB of $063A is set $80/935A 8D 31 06 STA $0631 ; If not, store it as Bank for the Jump Address in $062F-31 $80/935D 09 00 80 ORA #$8000 ; Set MSB in $063A (this subroutine won't be executed again by default) $80/9360 8D 39 06 STA $0639 $80/9363 AD 37 06 LDA $0637 ; Setup Jump Address in $62F-31 $80/9366 8D 2F 06 STA $062F $80/9369 60 RTS
$80/936A ?
$80/936A AD 41 06 LDA $0641 [$80:0641] A:0081 X:0010 Y:0 P:envmxdizc $80/936D 30 0F BMI $0F [$937E] A:0080 X:0010 Y:0 P:envmxdizc $80/936F 8D 35 06 STA $0635 [$80:0635] A:0080 X:0010 Y:0 P:envmxdizc $80/9372 09 00 80 ORA #$8000 A:0080 X:0010 Y:0 P:envmxdizc $80/9375 8D 41 06 STA $0641 [$80:0641] A:8080 X:0010 Y:0 P:eNvmxdizc $80/9378 AD 3F 06 LDA $063F [$80:063F] A:8080 X:0010 Y:0 P:eNvmxdizc $80/937B 8D 33 06 STA $0633 [$80:0633] A:913A X:0010 Y:0 P:eNvmxdizc $80/937E 60 RTS A:913A X:0010 Y:0 P:eNvmxdizc
$80/937F Next NMI-Jump: Nothing (RTL)
This sets up the NMI Jump Address to point on a RTL.
$80/937F 08 PHP ; Buffer Flag Register value on stack $80/9380 C2 30 REP #$30 ; A/X/Y = 16-bit $80/9382 A9 8F 93 LDA #$938F ; Next NMI, go to $94/938F - the RTL of this very subroutine $80/9385 8D 37 06 STA $0637 $80/9388 A9 80 00 LDA #$0080 $80/938B 8D 39 06 STA $0639 $80/938E 28 PLP ; Restore Flag Register $80/938F 6B RTL
$80/9390 USELESS SUBROUTINE
Life would be so desolate without them.
$80/9390 08 PHP ; UNNECESSARY LINE $80/9391 28 PLP ; UNNECESSARY LINE $80/9392 6B RTL ; UNNECESSARY LINE
$80/9393 USELESS SUBROUTINE
You should call home more often.
$80/9393 08 PHP ; UNNECESSARY LINE $80/9394 28 PLP ; UNNECESSARY LINE $80/9395 6B RTL ; UNNECESSARY LINE
$80/939F ?
When this subroutine is called from a place in code, the next three byte are arguments for this subroutine. The arguments are a 24-bit-address.
At $80/936A, it is set up that NMI Jump Address is set to $93BF
This subroutine loads data from the address that is its argument. The first byte there is a command byte. The three most significant bits are command signals, the other bits are arguments:
#%111a.aabb = ? #%1111.1111 = #$FF = Exit
$80/939F 08 PHP ; Buffer Flag Register value on stack $80/93A0 C2 30 REP #$30 ; A/X/Y = 16-bit $80/93A2 A3 03 LDA $03,s ; Copy the original return address (pointing to data for this subroutine)... $80/93A4 85 76 STA $76 ; ... into $75-$77 as a 24-bit load address $80/93A6 A3 02 LDA $02,s $80/93A8 85 75 STA $75 $80/93AA 18 CLC ; Change return address on stack to leap over the data $80/93AB 69 03 00 ADC #$0003 $80/93AE 83 02 STA $02,s $80/93B0 A0 01 00 LDY #$0001 ; Load Data from the original return address $80/93B3 B7 75 LDA [$75],y ; Set this data up as another 24-bit-address in $7D-$7F $80/93B5 85 7D STA $7D $80/93B7 C8 INY $80/93B8 B7 75 LDA [$75],y $80/93BA 85 7E STA $7E $80/93BC 28 PLP ; Restore Original Flag Register $80/93BD 08 PHP ; Buffer Flag Register value again on stack $80/93BE 8B PHB ; Buffer Direct Bank $80/93BF E2 20 SEP #$20 ; A = 8-bit $80/93C1 C2 10 REP #$10 ; X/Y = 16-bit $80/93C3 A5 7A LDA $7A ; Set Direct Bank to the Bank of the Data Load Address $80/93C5 48 PHA $80/93C6 AB PLB $80/93C7 64 81 STZ $81 [$00:0081] A:7E84 X:0084 Y:0002 P:eNvMxdIzC $80/93C9 A0 00 00 LDY #$0000 A:7E84 X:0084 Y:0002 P:eNvMxdIzC $80/93CC DA PHX ; Buffer X on stack $80/93CD A6 78 LDX $78 ; Load Compressed Data Address $80/93CF BD 00 00 LDA $0000,x ; Load Command Byte from Compressed Data $80/93D2 E8 INX ; Increment Data Load Address $80/93D3 D0 03 BNE $03 ; [$93D8] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/93D8 86 78 STX $78 ; Store Compressed Data Address back $80/93DA FA PLX ; Restore X $80/93DB 85 7B STA $7B ; Store Command Byte in $7B $80/93DD C9 FF CMP #$FF ; Exit if it is #$FF $80/93DF D0 07 BNE $07 ; [$93E8] Branch if not
Exit
$80/93E1 8B PHB ; Store current Program Bank back to $7A $80/93E2 68 PLA $80/93E3 85 7A STA $7A $80/93E5 AB PLB ; Restore Flag Register value and Program Bank $80/93E6 28 PLP $80/93E7 6B RTL
Check if Bits 5-7 of Command Byte are set
$80/93E8 29 E0 AND #$E0 ; Check if Bits 5 to 7 of the Data Byte are set $80/93EA C9 E0 CMP #$E0 $80/93EC D0 1E BNE $1E ; [$940C] Branch if not
If Command Byte Bits 5-7 are set
$80/93EE A5 7B LDA $7B ; Push Command Byte Bits 2-4 to 5-7, remove the rest, push that value on stack $80/93F0 0A ASL A $80/93F1 0A ASL A $80/93F2 0A ASL A $80/93F3 29 E0 AND #$E0 $80/93F5 48 PHA $80/93F6 A5 7B LDA $7B ; Load Command Byte, remove all the bits but Bits 0 and 1 $80/93F8 29 03 AND #$03 $80/93FA EB XBA ; Keep those in the hidden part of A $80/93FB DA PHX ; Buffer X on stack $80/93FC A6 78 LDX $78 ; Load next Data Byte $80/93FE BD 00 00 LDA $0000,x $80/9401 E8 INX ; Increment Data Load Address $80/9402 D0 03 BNE $03 ; [$9407] Branch if it did not latch from $FFFF to $0000
code is missing
$80/9407 86 78 STX $78 ; Store Compressed Data Address back $80/9409 FA PLX ; Restore X $80/940A 80 08 BRA $08 [$9414] A:0023 X:0084 Y:0 P:envMxdIzC
If not all Data Byte Bits 5-7 are set: But the other bits in X and Increment X
$80/940C 48 PHA ; Push Bits on Stack $80/940D A9 00 LDA #$00 A:0020 X:0 Y:0024 P:envMxdIzc $80/940F EB XBA A:0 X:0 Y:0024 P:envMxdIZc $80/9410 A5 7B LDA $7B ; Restore Command Byte $80/9412 29 1F AND #$1F ; Remove Bits 5-7 from Data Byte $80/9414 AA TAX A:0023 X:0084 Y:0 P:envMxdIzC $80/9415 E8 INX A:0023 X:0023 Y:0 P:envMxdIzC
If not all Data Byte Bits 5-7 are set: WHICH Bits ARE set, exactly?
$80/9416 68 PLA ; Pull Data Byte Bits 5-7 from Stack $80/9417 C9 00 CMP #$00 ; UNNECESSARY LINE? (unnecessary if PLA sets the negative flag) $80/9419 10 04 BPL $04 ; [$941F] Branch if positive $80/941B 5C AB 94 80 JMP $8094AB ; Jump if negative $80/941F C9 20 CMP #$20 $80/9421 F0 1F BEQ $1F ; [$9442] if %001x.xxxx $80/9423 C9 40 CMP #$40 $80/9425 F0 34 BEQ $34 ; [$945B] if %010x.xxxx $80/9427 C9 60 CMP #$60 $80/9429 F0 66 BEQ $66 ; [$9491] if %011x.xxxx
$80/942B DA PHX ; Buffer X on stack $80/942C A6 78 LDX $78 ; Load next Data Byte $80/942E BD 00 00 LDA $0000,x $80/9431 E8 INX ; Increment Data Load Address $80/9432 D0 03 BNE $03 ; [$9437]
code is missing here
$80/9437 86 78 STX $78 ; Store Compressed Data Address back $80/9439 FA PLX ; Restore X $80/943A 97 7D STA [$7D],y[$7E:2000] A:003F X:0024 Y:0 P:envMxdIzc $80/943C C8 INY A:003F X:0024 Y:0 P:envMxdIzc $80/943D CA DEX A:003F X:0024 Y:0001 P:envMxdIzc $80/943E D0 EB BNE $EB [$942B] A:003F X:0023 Y:0001 P:envMxdIzc $80/9440 F0 8A BEQ $8A [$93CC] A:007F X:0 Y:0024 P:envMxdIZc $80/9442 DA PHX ; Buffer X on stack $80/9443 A6 78 LDX $78 ; Load next Data Byte $80/9445 BD 00 00 LDA $0000,x $80/9448 E8 INX ; Increment Data Load Address $80/9449 D0 03 BNE $03 ; [$944E]
code is missing here
$80/944E 86 78 STX $78 ; Store Compressed Data Address back $80/9450 FA PLX ; Restore X $80/9451 97 7D STA [$7D],y[$7E:2024] A:0 X:0006 Y:0024 P:envMxdIzC $80/9453 C8 INY A:0 X:0006 Y:0024 P:envMxdIzC $80/9454 CA DEX A:0 X:0006 Y:0025 P:envMxdIzC $80/9455 D0 FA BNE $FA [$9451] A:0 X:0005 Y:0025 P:envMxdIzC $80/9457 5C CC 93 80 JMP $8093CC[$80:93CC] A:0 X:0 Y:002A P:envMxdIZC $80/945B DA PHX ; Buffer X on stack $80/945C A6 78 LDX $78 ; Load next Data Byte $80/945E BD 00 00 LDA $0000,x $80/9461 E8 INX ; Increment Data Load Address $80/9462 D0 03 BNE $03 ; [$9467]
code is missing here
$80/9467 86 78 STX $78 ; Store Compressed Data Address back $80/9469 FA PLX ; Restore X $80/946A 85 7B STA $7B [$00:007B] A:007B X:0004 Y:0050 P:envMxdIzC $80/946C DA PHX ; Buffer X on stack $80/946D A6 78 LDX $78 ; Load next Data Byte $80/946F BD 00 00 LDA $0000,x $80/9472 E8 INX ; Increment Data Load Address $80/9473 D0 03 BNE $03 ; [$9478]
code is missing here
$80/9478 86 78 STX $78 ; Store Compressed Data Address back $80/947A FA PLX ; Restore X $80/947B 85 7C STA $7C [$00:007C] A:006F X:0004 Y:0050 P:envMxdIzC $80/947D A5 7B LDA $7B [$00:007B] A:006F X:0004 Y:0050 P:envMxdIzC $80/947F 97 7D STA [$7D],y[$7E:2050] A:007B X:0004 Y:0050 P:envMxdIzC $80/9481 C8 INY A:007B X:0004 Y:0050 P:envMxdIzC $80/9482 CA DEX A:007B X:0004 Y:0051 P:envMxdIzC $80/9483 F0 08 BEQ $08 [$948D] A:007B X:0003 Y:0051 P:envMxdIzC $80/9485 A5 7C LDA $7C [$00:007C] A:007B X:0003 Y:0051 P:envMxdIzC $80/9487 97 7D STA [$7D],y[$7E:2051] A:006F X:0003 Y:0051 P:envMxdIzC $80/9489 C8 INY A:006F X:0003 Y:0051 P:envMxdIzC $80/948A CA DEX A:006F X:0003 Y:0052 P:envMxdIzC $80/948B D0 F0 BNE $F0 [$947D] A:006F X:0002 Y:0052 P:envMxdIzC $80/948D 5C CC 93 80 JMP $8093CC[$80:93CC] A:006F X:0 Y:0054 P:envMxdIZC
$80/9491 ?
$80/9491 DA PHX ; Buffer Loop Counter on stack $80/9492 A6 78 LDX $78 [$00:0078] A:0060 X:0003 Y:0C1B P:envMxdIZC $80/9494 BD 00 00 LDA $0000,x[$86:CBEB] A:0060 X:CBEB Y:0C1B P:eNvMxdIzC $80/9497 E8 INX ; Increment Load Index $80/9498 D0 03 BNE $03 ; [$949D] Branch if Load Index didn't leap from #$FFFF to #$0000
code is missing here
$80/949D 86 78 STX $78 ; Store Load Index back $80/949F FA PLX ; Restore Loop Counter $80/94A0 97 7D STA [$7D],y[$7F:161B] A:00FC X:0003 Y:0C1B P:envMxdIzC $80/94A2 1A INC A ; Increment Store Value $80/94A3 C8 INY ; Increment Store Index $80/94A4 CA DEX ; Decrement Loop Counter $80/94A5 D0 F9 BNE $F9 ; [$94A0] Repeat Value Storing until Loop Counter runs out $80/94A7 5C CC 93 80 JMP $8093CC[$80:93CC] A:00FF X:0 Y:0C1E P:envMxdIZC
$80/94AB ?
$80/94AB C9 C0 CMP #$C0 A:00C0 X:0003 Y:0010 P:eNvMxdIzC $80/94AD B0 43 BCS $43 [$94F2] A:00C0 X:0003 Y:0010 P:envMxdIZC $80/94AF 29 20 AND #$20 A:0080 X:0008 Y:0100 P:eNvMxdIzc $80/94B1 85 80 STA $80 [$00:0080] A:0000 X:0008 Y:0100 P:envMxdIZc $80/94B3 DA PHX A:0000 X:0008 Y:0100 P:envMxdIZc $80/94B4 A6 78 LDX $78 [$00:0078] A:0000 X:0008 Y:0100 P:envMxdIZc $80/94B6 BD 00 00 LDA $0000,x[$93:AD2F] A:0000 X:AD2F Y:0100 P:eNvMxdIzc $80/94B9 E8 INX A:0000 X:AD2F Y:0100 P:envMxdIZc $80/94BA D0 03 BNE $03 [$94BF] A:0000 X:AD30 Y:0100 P:eNvMxdIzc $80/94BF 86 78 STX $78 [$00:0078] A:0000 X:AD30 Y:0100 P:eNvMxdIzc $80/94C1 FA PLX A:0000 X:AD30 Y:0100 P:eNvMxdIzc $80/94C2 85 7B STA $7B [$00:007B] A:0000 X:0008 Y:0100 P:envMxdIzc $80/94C4 DA PHX A:0000 X:0008 Y:0100 P:envMxdIzc $80/94C5 A6 78 LDX $78 [$00:0078] A:0000 X:0008 Y:0100 P:envMxdIzc $80/94C7 BD 00 00 LDA $0000,x[$93:AD30] A:0000 X:AD30 Y:0100 P:eNvMxdIzc $80/94CA E8 INX A:0000 X:AD30 Y:0100 P:envMxdIZc $80/94CB D0 03 BNE $03 [$94D0] A:0000 X:AD31 Y:0100 P:eNvMxdIzc $80/94D0 86 78 STX $78 [$00:0078] A:0000 X:AD31 Y:0100 P:eNvMxdIzc $80/94D2 FA PLX A:0000 X:AD31 Y:0100 P:eNvMxdIzc $80/94D3 85 7C STA $7C [$00:007C] A:0000 X:0008 Y:0100 P:envMxdIzc $80/94D5 E2 20 SEP #$20 A:0001 X:0003 Y:0010 P:envmxdIzC $80/94D7 DA PHX A:0001 X:0003 Y:0010 P:envMxdIzC $80/94D8 5A PHY A:0001 X:0003 Y:0010 P:envMxdIzC $80/94D9 A4 7B LDY $7B [$00:007B] A:0001 X:0003 Y:0010 P:envMxdIzC $80/94DB B7 7D LDA [$7D],y[$7F:C001] A:0001 X:0003 Y:0001 P:envMxdIzC $80/94DD C8 INY A:0000 X:0003 Y:0001 P:envMxdIZC $80/94DE 84 7B STY $7B [$00:007B] A:0000 X:0003 Y:0002 P:envMxdIzC $80/94E0 7A PLY A:0000 X:0003 Y:0002 P:envMxdIzC $80/94E1 A6 80 LDX $80 [$00:0080] A:0000 X:0003 Y:0010 P:envMxdIzC $80/94E3 F0 02 BEQ $02 [$94E7] A:0000 X:0000 Y:0010 P:envMxdIZC $80/94E5 49 FF EOR #$FF A:0 X:0020 Y:0ADA P:envMxdIzc $80/94E7 97 7D STA [$7D],y[$7F:C010] A:0000 X:0000 Y:0010 P:envMxdIZC $80/94E9 C8 INY A:0000 X:0000 Y:0010 P:envMxdIZC $80/94EA FA PLX A:0000 X:0000 Y:0011 P:envMxdIzC $80/94EB CA DEX A:0000 X:0003 Y:0011 P:envMxdIzC $80/94EC D0 E9 BNE $E9 [$94D7] A:0000 X:0002 Y:0011 P:envMxdIzC $80/94EE 5C CC 93 80 JMP $8093CC[$80:93CC] A:0003 X:0000 Y:0013 P:envMxdIZC $80/94F2 29 20 AND #$20 A:00C0 X:0003 Y:0010 P:envMxdIZC $80/94F4 85 80 STA $80 [$00:0080] A:0000 X:0003 Y:0010 P:envMxdIZC $80/94F6 DA PHX A:0000 X:0003 Y:0010 P:envMxdIZC $80/94F7 A6 78 LDX $78 [$00:0078] A:0000 X:0003 Y:0010 P:envMxdIZC $80/94F9 BD 00 00 LDA $0000,x[$93:ACA9] A:0000 X:ACA9 Y:0010 P:eNvMxdIzC $80/94FC E8 INX A:000F X:ACA9 Y:0010 P:envMxdIzC $80/94FD D0 03 BNE $03 [$9502] A:000F X:ACAA Y:0010 P:eNvMxdIzC $80/9502 86 78 STX $78 [$00:0078] A:000F X:ACAA Y:0010 P:eNvMxdIzC $80/9504 FA PLX A:000F X:ACAA Y:0010 P:eNvMxdIzC $80/9505 85 7B STA $7B [$00:007B] A:000F X:0003 Y:0010 P:envMxdIzC $80/9507 64 7C STZ $7C [$00:007C] A:000F X:0003 Y:0010 P:envMxdIzC $80/9509 C2 20 REP #$20 A:000F X:0003 Y:0010 P:envMxdIzC $80/950B 98 TYA A:000F X:0003 Y:0010 P:envmxdIzC $80/950C 38 SEC A:0010 X:0003 Y:0010 P:envmxdIzC $80/950D E5 7B SBC $7B [$00:007B] A:0010 X:0003 Y:0010 P:envmxdIzC $80/950F 85 7B STA $7B [$00:007B] A:0001 X:0003 Y:0010 P:envmxdIzC $80/9511 80 C2 BRA $C2 [$94D5] A:0001 X:0003 Y:0010 P:envmxdIzC
$80/951E Inc Bank, reset Pointer to $8000 (Graphics Decompression directly to VRAM)
Used (at least) in the Decompression subroutine below. When byte $FFFF on one bank gets read, this subroutine is called and makes the settings so that the next byte that gets read is byte #$8000 from the next bank.
$80/9513 A2 00 80 LDX #$8000 ; Reset Index to #$8000 $80/9516 48 PHA ; Buffer A on stack $80/9517 8B PHB ; Get current Program Bank $80/9518 68 PLA $80/9519 1A INC A ; Increment Program Bank $80/951A 48 PHA ; Set this value as the new Program Bank $80/951B AB PLB $80/951C 68 PLA ; Restore A $80/951D 60 RTS
$80/951E Graphics Decompression directly to VRAM
This subroutine is to 80% commented. Since I do not plan to write compression/decompression Utility, I see no use in breaking my brain to fully understand every piece of its mechanisms.
Notes:
Transfers data directly to VRAM.
The data source address is stored in $78-$7A.
$7B Buffer for Loaded Compressed Data Byte.
$7D contains the VRAM destination (times two).
Compressed Data Byte = $FF - Exit Subroutine.
Bits 5-7 of the first Data Byte decide how to handle the other bits / the next byte(s)
%000x.xxxx The next byte gets stored alternating in $2118/9 and incremented after each storing, how often depends on bits 0-4 (#%0000.0000 transfers it one time, #%0001.1111 transfers it thirty-two times).
%001x.xxxx
The next byte gets stored alternating in $2118/9 unchanged, how often depends on bits 0-4 (#%0010.0000 transfers it one time, #%0011.1111 transfers it thirty-two times).
%010x.xxxx
The next two bytes get alternating stored in $2118/9 unchanged, how often depends on bits 0-4 (#%0100.0000 transfers one byte, #%0101.1111 transfers thirty-two). Note that the counter gets decremented every SINGLE byte transfered, not every byte duo; this way, with an uneven number, the first and the last byte are the same.
%011x.xxxx
The next bytes get stored alternating in $2118/9 unchanged, how many depends on bits 0-4 (#%0110.0000 transfers one byte, #%0111.1111 transfers thirty-two).
%100x.xxxx
Next two bytes are an offset. This subroutine repeats already decompressed data from there.
%101x.xxxx
Same as above, but Data Byte gets EORed with #$FF %110x.xxxx Next two bytes are an offset. This subroutine repeats already decompressed data from Offset - Y.
%111x.xxxx
Same as above, but Data Byte gets EORed with #$FF
START UP: Set VRAM Address
$80/951E 08 PHP ; Buffer Flag Register value and Program Bank on stack $80/951F 8B PHB $80/9520 C2 30 REP #$30 ; A/X/Y = 16-bit $80/9522 A5 7D LDA $7D [$00:007D] A:8000 X:0084 Y:003C P:eNvmxdIzC $80/9524 A8 TAY A:0 X:0084 Y:003C P:envmxdIZC $80/9525 4A LSR A ; Set VRAM Destination $80/9526 8D 16 21 STA $2116 $80/9529 E2 20 SEP #$20 ; A = 8-bit $80/952B A5 7A LDA $7A ; Set Program Bank to Bank of the Compressed Data $80/952D 48 PHA $80/952E AB PLB $80/952F 64 81 STZ $81 [$00:0081] A:0084 X:0084 Y:0 P:eNvMxdIzc
Load Data Byte and check if it's the Exit Signal
$80/9531 DA PHX ; Buffer X on stack $80/9532 A6 78 LDX $78 ; Load Compressed Data Address $80/9534 BD 00 00 LDA $0000,x ; Load Compressed Data Byte $80/9537 E8 INX ; Increment Data Load Address $80/9538 D0 03 BNE $03 ; [$953D] Branch if it did not latch from $FFFF to $0000 $80/953A 20 13 95 JSR $9513 ; Increment Program Bank, Reset Counter to $8000 $80/953D 86 78 STX $78 ; Store Compressed Data Address back $80/953F FA PLX ; Restore X $80/9540 85 7B STA $7B ; Buffer loaded Data Byte in $7B $80/9542 C9 FF CMP #$FF ; Branch if it is not $FF (which is the Exit Signal) $80/9544 D0 07 BNE $07 ; [$954D]
Exit
$80/9546 8B PHB ; Store current Program Bank back to $7A $80/9547 68 PLA $80/9548 85 7A STA $7A $80/954A AB PLB ; Restore Flag Register value and Program Bank $80/954B 28 PLP $80/954C 6B RTL
Check if Bits 5-7 of Data Byte are set
$80/954D 29 E0 AND #$E0 ; Check if Bits 5 to 7 of the Data Byte are set $80/954F C9 E0 CMP #$E0 $80/9551 D0 1E BNE $1E ; [$9571] Branch if not
If Data Byte Bits 5-7 are set
$80/9553 A5 7B LDA $7B ; Push Data Byte Bits 2-4 to 5-7, remove the rest, push that value on stack $80/9555 0A ASL A $80/9556 0A ASL A $80/9557 0A ASL A $80/9558 29 E0 AND #$E0 $80/955A 48 PHA $80/955B A5 7B LDA $7B ; Load Data Byte, remove all the bits but Bits 0 and 1 $80/955D 29 03 AND #$03 $80/955F EB XBA A:0 X:0084 Y:0 P:envMxdIZC $80/9560 DA PHX ; Buffer X on stack $80/9561 A6 78 LDX $78 ; Load next Data Byte $80/9563 BD 00 00 LDA $0000,x $80/9566 E8 INX ; Increment Data Load Address $80/9567 D0 03 BNE $03 ; [$956C] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/956C 86 78 STX $78 ; Store Compressed Data Address back $80/956E FA PLX ; Restore X $80/956F 80 08 BRA $08 [$9579] A:0020 X:0084 Y:0 P:envMxdIzC
If not all Data Byte Bits 5-7 are set: But the other bits in X and Increment X
$80/9571 48 PHA ; Push Bits on Stack $80/9572 A9 00 LDA #$00 A:0 X:0 Y:0021 P:envMxdIzc $80/9574 EB XBA A:0 X:0 Y:0021 P:envMxdIZc $80/9575 A5 7B LDA $7B ; Restore Data Byte $80/9577 29 1F AND #$1F ; Remove Bits 5-7 from Data Byte $80/9579 AA TAX A:0020 X:0084 Y:0 P:envMxdIzC $80/957A E8 INX A:0020 X:0020 Y:0 P:envMxdIzC
If not all Data Byte Bits 5-7 are set: WHICH Bits ARE set, exactly?
$80/957B 68 PLA ; Pull Data Byte Bits 5-7 from Stack $80/957C C9 00 CMP #$00 ; UNNECESSARY LINE? (unnecessary if PLA sets the negative flag) $80/957E 10 04 BPL $04 ; [$9584] Branch if positive $80/9580 5C 5C 96 80 JMP $80965C ; Jump if negative $80/9584 C9 20 CMP #$20 $80/9586 F0 33 BEQ $33 ; [$95BB] if %001x.xxxx $80/9588 C9 40 CMP #$40 $80/958A F0 56 BEQ $56 ; [$95E2] if %010x.xxxx $80/958C C9 60 CMP #$60 $80/958E D0 04 BNE $04 ; [$9594] if %011x.xxxx $80/9590 5C 34 96 80 JMP $809634 ; If %000x.xxxx
If Data Byte Bits 5-7 = %011x.xxxx --- TRANSFER DATA AS IS
$80/9594 DA PHX ; Buffer X on stack $80/9595 A6 78 LDX $78 ; Load next Data Byte $80/9597 BD 00 00 LDA $0000,x $80/959A E8 INX ; Increment Data Load Address $80/959B D0 03 BNE $03 ; [$95A0] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/95A0 86 78 STX $78 ; Store Compressed Data Address back $80/95A2 FA PLX ; Restore X $80/95A3 48 PHA ; Store in $2118 if Y is even / Store in $2119 if Y is odd $80/95A4 98 TYA $80/95A5 4A LSR A $80/95A6 68 PLA $80/95A7 B0 06 BCS $06 ; [$95AF] $80/95A9 8F 18 21 00 STA $002118 $80/95AD 80 04 BRA $04 ; [$95B3] $80/95AF 8F 19 21 00 STA $002119 $80/95B3 C8 INY ; Next time, store in the other VRAM register $80/95B4 CA DEX ; Decrement number of bytes to do this way $80/95B5 D0 DD BNE $DD ; [$9594] Loop if counter did not run out $80/95B7 5C 31 95 80 JMP $809531 ; Go back, load next Data Byte (next Command)
If Data Byte Bits 5-7 = %001x.xxxx --- REPEAT ONE BYTE
$80/95BB DA PHX ; Buffer X on stack $80/95BC A6 78 LDX $78 ; Load next Data Byte $80/95BE BD 00 00 LDA $0000,x $80/95C1 E8 INX ; Increment Data Load Address $80/95C2 D0 03 BNE $03 ; [$95C7] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/95C7 86 78 STX $78 ; Store Compressed Data Address back $80/95C9 FA PLX ; Restore X $80/95CA 48 PHA ; Store in $2118 if Y is even / Store in $2119 if Y is odd $80/95CB 98 TYA $80/95CC 4A LSR A $80/95CD 68 PLA $80/95CE B0 06 BCS $06 ; [$95D6] $80/95D0 8F 18 21 00 STA $002118 $80/95D4 80 04 BRA $04 ; [$95DA] $80/95D6 8F 19 21 00 STA $002119 $80/95DA C8 INY ; Next time, store in the other VRAM register $80/95DB CA DEX ; Decrement number of bytes to do this way $80/95DC D0 EC BNE $EC ; [$95CA] Loop if counter did not run out $80/95DE 5C 31 95 80 JMP $809531 ; Go back, load next Data Byte (next Command)
If Data Byte Bits 5-7 = %010x.xxxx --- STORE TWO BYTES ALTERNATING
$80/95E2 DA PHX ; Buffer X on stack $80/95E3 A6 78 LDX $78 ; Load next Data Byte $80/95E5 BD 00 00 LDA $0000,x $80/95E8 E8 INX ; Increment Data Load Address $80/95E9 D0 03 BNE $03 ; [$95EE] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/95EE 86 78 STX $78 ; Store Compressed Data Address back $80/95F0 FA PLX ; Restore X $80/95F1 85 7B STA $7B ; Buffer loaded Data Byte in $7B $80/95F3 DA PHX ; Buffer X on stack $80/95F4 A6 78 LDX $78 ; Load next Data Byte $80/95F6 BD 00 00 LDA $0000,x $80/95F9 E8 INX ; Increment Data Load Address $80/95FA D0 03 BNE $03 ; [$95FF] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/95FF 86 78 STX $78 ; Store Compressed Data Address back $80/9601 FA PLX ; Restore X $80/9602 85 7C STA $7C ; Buffer second loaded Data Byte in $7B $80/9604 A5 7B LDA $7B ; Load first data byte $80/9606 48 PHA ; Store in $2118 if Y is even / Store in $2119 if Y is odd $80/9607 98 TYA $80/9608 4A LSR A $80/9609 68 PLA $80/960A B0 06 BCS $06 ; [$9612] $80/960C 8F 18 21 00 STA $002118 $80/9610 80 04 BRA $04 ; [$9616] $80/9612 8F 19 21 00 STA $002119 $80/9616 C8 INY ; Next time, store in the other VRAM register $80/9617 CA DEX ; Decrement number of bytes to do this way $80/9618 F0 16 BEQ $16 ; [$9630] Load next command if number of Bytes has run out $80/961A A5 7C LDA $7C ; Load second Data Byte $80/961C 48 PHA ; Store in $2118 if Y is even / Store in $2119 if Y is odd $80/961D 98 TYA $80/961E 4A LSR A $80/961F 68 PLA $80/9620 B0 06 BCS $06 ; [$9628] $80/9622 8F 18 21 00 STA $002118 $80/9626 80 04 BRA $04 ; [$962C] $80/9628 8F 19 21 00 STA $002119 $80/962C C8 INY ; Next time, store in the other VRAM register $80/962D CA DEX ; Decrement number of bytes to do this way $80/962E D0 D4 BNE $D4 ; [$9604] Loop if counter did not run out $80/9630 5C 31 95 80 JMP $809531 ; Go back, load next Data Byte (next Command)
If Data Byte Bits 5-7 = %000x.xxxx --- REPEAT BYTE AND INC IT AFTER EACH STORING
$80/9634 DA PHX ; Buffer X on stack $80/9635 A6 78 LDX $78 ; Load next Data Byte $80/9637 BD 00 00 LDA $0000,x $80/963A E8 INX ; Increment Data Load Address $80/963B D0 03 BNE $03 ; [$9640] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/9640 86 78 STX $78 ; Store Compressed Data Address back $80/9642 FA PLX ; Restore X $80/9643 48 PHA ; Store in $2118 if Y is even / Store in $2119 if Y is odd $80/9644 98 TYA $80/9645 4A LSR A $80/9646 68 PLA $80/9647 B0 06 BCS $06 ; [$964F] $80/9649 8F 18 21 00 STA $002118 $80/964D 80 04 BRA $04 ; [$9653] $80/964F 8F 19 21 00 STA $002119 $80/9653 C8 INY ; Next time, store in the other VRAM register $80/9654 1A INC A ; Increment Byte to store $80/9655 CA DEX ; Decrement number of bytes to do this way $80/9656 D0 EB BNE $EB ; [$9643] Loop if counter did not run out $80/9658 5C 31 95 80 JMP $809531 ; Go back, load next Data Byte (next Command)
If Data Byte Bits 5-7 = %1??x.xxxx = Is bit 6 set?
$80/965C C9 C0 CMP #$C0 $80/965E B0 73 BCS $73 ; [$96D3] Branch if #$C0 or #$E0 (Bit 6 is set)
If Data Byte Bits 5-7 = %10?x.xxxx
$80/9660 29 20 AND #$20 ; Buffer bit 5 in $80 $80/9662 85 80 STA $80 $80/9664 DA PHX ; Buffer X on stack $80/9665 A6 78 LDX $78 ; Load next Data Byte $80/9667 BD 00 00 LDA $0000,x $80/966A E8 INX ; Increment Data Load Address $80/966B D0 03 BNE $03 ; [$9670] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/9670 86 78 STX $78 ; Store Compressed Data Address back $80/9672 FA PLX ; Restore X $80/9673 85 7B STA $7B ; Store first loaded Data Byte in $7B $80/9675 DA PHX ; Buffer X on stack $80/9676 A6 78 LDX $78 ; Load next Data Byte $80/9678 BD 00 00 LDA $0000,x $80/967B E8 INX ; Increment Data Load Address $80/967C D0 03 BNE $03 ; [$9681] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/9681 86 78 STX $78 ; Store Compressed Data Address back $80/9683 FA PLX ; Restore X $80/9684 85 7C STA $7C ; Store second loaded Data Byte in $7C $80/9686 C2 20 REP #$20 ; A = 16-bit $80/9688 A5 7D LDA $7D ; Add Offset ($7B/C) to VRAM Address ($7D/E) and store it in $7B/C $80/968A 18 CLC $80/968B 65 7B ADC $7B $80/968D 85 7B STA $7B
Second part of everything with Data Byte Bit 7 = %1xxx.xxxx
$80/968F DA PHX A:0350 X:0003 Y:0405 P:envmxdIzC $80/9690 C2 20 REP #$20 ; A = 16-bit $80/9692 A5 7B LDA $7B ; Set Address in VRAM $80/9694 4A LSR A $80/9695 8F 16 21 00 STA $002116 $80/9699 AF 39 21 00 LDA $002139 ; Load from VRAM $80/969D AF 39 21 00 LDA $002139 $80/96A1 90 01 BCC $01 ; [$96A4] Branch if the LSB of $7B was clear $80/96A3 EB XBA A:0300 X:0002 Y:0406 P:envmxdIzC $80/96A4 E6 7B INC $7B ; Increment VRAM Address $80/96A6 E2 20 SEP #$20 ; A = 8-bit $80/96A8 A6 80 LDX $80 ; If bit 5 of the Commando Byte was set, EOR the Data Byte $80/96AA F0 02 BEQ $02 ; [$96AE] Else, Branch $80/96AC 49 FF EOR #$FF $80/96AE 48 PHA ; Buffer A on Stack $80/96AF C2 20 REP #$20 ; A = 16-bit $80/96B1 98 TYA ; Restore VRAM Address (for Storing) $80/96B2 4A LSR A $80/96B3 8F 16 21 00 STA $002116 $80/96B7 E2 20 SEP #$20 ; A = 8-bit $80/96B9 68 PLA ; Restore A $80/96BA 48 PHA ; Store in $2118 if Y is even / Store in $2119 if Y is odd $80/96BB 98 TYA $80/96BC 4A LSR A $80/96BD 68 PLA $80/96BE B0 06 BCS $06 ; [$96C6] $80/96C0 8F 18 21 00 STA $002118 $80/96C4 80 04 BRA $04 ; [$96CA] $80/96C6 8F 19 21 00 STA $002119 $80/96CA C8 INY ; Next time, store in the other VRAM register $80/96CB FA PLX ; Decrement number of bytes to do this way $80/96CC CA DEX $80/96CD D0 C0 BNE $C0 ; [$968F] Loop if counter did not run out $80/96CF 5C 31 95 80 JMP $809531 ; Go back, load next Data Byte (next Command)
If Data Byte Bits 5-7 = %11?x.xxxx
$80/96D3 29 20 AND #$20 ; Buffer bit 5 in $80 $80/96D5 85 80 STA $80 $80/96D7 DA PHX ; Buffer X on stack $80/96D8 A6 78 LDX $78 ; Load next Data Byte $80/96DA BD 00 00 LDA $0000,x $80/96DD E8 INX ; Increment Data Load Address $80/96DE D0 03 BNE $03 ; [$96E3] Branch if it did not latch from $FFFF to $0000
code is missing here
$80/96E3 86 78 STX $78 ; Store Compressed Data Address back $80/96E5 FA PLX ; Restore X $80/96E6 85 7B STA $7B [$00:007B] A:00B5 X:0003 Y:0405 P:envMxdIzC $80/96E8 64 7C STZ $7C [$00:007C] A:00B5 X:0003 Y:0405 P:envMxdIzC $80/96EA C2 20 REP #$20 A:00B5 X:0003 Y:0405 P:envMxdIzC $80/96EC 98 TYA A:00B5 X:0003 Y:0405 P:envmxdIzC $80/96ED 38 SEC A:0405 X:0003 Y:0405 P:envmxdIzC $80/96EE E5 7B SBC $7B [$00:007B] A:0405 X:0003 Y:0405 P:envmxdIzC $80/96F0 85 7B STA $7B [$00:007B] A:0350 X:0003 Y:0405 P:envmxdIzC $80/96F2 80 9B BRA $9B ; [$968F] Branch to the second part
$80/9710 ?
Clears the buffers for APU-registers?
$80/9710 08 PHP ; Buffer Flag Register value on stack $80/9711 E2 20 SEP #$20 ; UNNECESSARY LINE - A is never used here $80/9713 C2 10 REP #$10 ; X/Y = 16-bit $80/9715 A0 00 00 LDY #$0000 A:00FF X:0003 Y:0 P:eNvMxdIzC $80/9718 8C 0E 07 STY $070E [$80:070E] A:00FF X:0003 Y:0 P:envMxdIZC $80/971B 8C 10 07 STY $0710 [$80:0710] A:00FF X:0003 Y:0 P:envMxdIZC $80/971E 28 PLP ; Restore Flag Register value $80/971F 6B RTL
This subroutine exits with an Error flag (in the Carry).
$80/9720 DA PHX ; Buffer X and Flag Register value on stack $80/9721 08 PHP $80/9722 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/9724 C0 00 CPY #$00 ; =#$00 = Music, !=#$00 = Sound Effect $80/9726 D0 34 BNE $34 ; [$975C] Branch if Sound Effect
If Music
$80/9728 C9 FD CMP #$FD A:0003 X:00FE Y:0 P:envMXdIZC $80/972A 90 1E BCC $1E [$974A] A:0003 X:00FE Y:0 P:envMXdIzc $80/972C AE 15 07 LDX $0715 [$81:0715] A:00FF X:0026 Y:0 P:envMXdIzC $80/972F D0 34 BNE $34 [$9765] A:00FF X:0 Y:0 P:envMXdIZC $80/9731 A2 01 LDX #$01 A:00FF X:0 Y:0 P:envMXdIZC $80/9733 8E 15 07 STX $0715 [$81:0715] A:00FF X:0001 Y:0 P:envMXdIzC $80/9736 AE 20 00 LDX $0020 [$81:0020] A:00FF X:0001 Y:0 P:envMXdIzC $80/9739 8E 12 07 STX $0712 [$81:0712] A:00FF X:0 Y:0 P:envMXdIZC $80/973C AE 21 00 LDX $0021 [$81:0021] A:00FF X:0 Y:0 P:envMXdIZC $80/973F 8E 13 07 STX $0713 [$81:0713] A:00FF X:0080 Y:0 P:eNvMXdIzC $80/9742 AE 22 00 LDX $0022 [$81:0022] A:00FF X:0080 Y:0 P:eNvMXdIzC $80/9745 8E 14 07 STX $0714 [$81:0714] A:00FF X:009F Y:0 P:eNvMXdIzC $80/9748 80 0B BRA $0B [$9755] A:00FF X:009F Y:0 P:eNvMXdIzC $80/974A C9 22 CMP #$22 A:0003 X:00FE Y:0 P:envMXdIzc $80/974C B0 07 BCS $07 [$9755] A:0003 X:00FE Y:0 P:eNvMXdIzc $80/974E 48 PHA A:0003 X:00FE Y:0 P:eNvMXdIzc $80/974F A9 80 LDA #$80 A:0003 X:00FE Y:0 P:eNvMXdIzc $80/9751 20 8D 97 JSR $978D [$80:978D] A:0080 X:00FE Y:0 P:eNvMXdIzc $80/9754 68 PLA A:0080 X:0080 Y:0 P:eNvMXdIzc $80/9755 20 8D 97 JSR $978D [$80:978D] A:0003 X:0080 Y:0 P:envMXdIzc $80/9758 B0 0B BCS $0B ; [$9765] Branch if Error flag is set $80/975A 80 05 BRA $05 ; [$9761] Else: Exit and clear Error flag
If Sound Effect
$80/975C 20 69 97 JSR $9769 ; Put sound effect to play in pipeline $80/975F B0 04 BCS $04 ; [$9765] Branch if Error flag is set $80/9761 28 PLP ; Restore X and Flag Register value $80/9762 FA PLX $80/9763 18 CLC ; Clear Error flag $80/9764 6B RTL $80/9765 28 PLP ; Restore X and Flag Register value $80/9766 FA PLX $80/9767 38 SEC ; Set Error flag $80/9768 6B RTL
When this subroutine gets called, Y contains the APU register destination (Y = #$0x ==> $214x). A is 8-bit, the active 8-bit (A) are the value store in that APU register, the inactive 8-bit (B) are for $2143.
The carry is used here as error flag. When it's set, something went wrong.
$80/9769 AA TAX ; Buffer Original (active) A value in X $80/976A AD 0A 07 LDA $070A [$80:070A] A:0384 X:0084 Y:0001 P:eNvMXdIzC $80/976D 1A INC A A:0300 X:0084 Y:0001 P:envMXdIZC $80/976E 29 0F AND #$0F A:0301 X:0084 Y:0001 P:envMXdIzC $80/9770 CD 0C 07 CMP $070C [$80:070C] A:0301 X:0084 Y:0001 P:envMXdIzC $80/9773 F0 16 BEQ $16 ; [$978B] Set Error Flag and Exit $80/9775 8D 0A 07 STA $070A [$80:070A] A:0301 X:0084 Y:0001 P:envMXdIzC $80/9778 3A DEC A A:0301 X:0084 Y:0001 P:envMXdIzC $80/9779 29 0F AND #$0F A:0300 X:0084 Y:0001 P:envMXdIZC $80/977B DA PHX ; Push Original A value on stack $80/977C AA TAX A:0300 X:0084 Y:0001 P:envMXdIZC $80/977D 98 TYA ; $80/977E 9D CA 06 STA $06CA,x[$80:06CA] A:0301 X:0000 Y:0001 P:envMXdIzC $80/9781 68 PLA ; Pull Original A from stack $80/9782 9D EA 06 STA $06EA,x[$80:06EA] A:0384 X:0000 Y:0001 P:eNvMXdIzC $80/9785 EB XBA ; Store byte from inactive Accumulator part as value for $2143 $80/9786 9D FA 06 STA $06FA,x[$80:06FA] A:8403 X:0000 Y:0001 P:envMXdIzC $80/9789 18 CLC ; Clear Error flag - everything's fine $80/978A 60 RTS $80/978B 38 SEC ; Set Error flag - something went wrong $80/978C 60 RTS
A contains the input.
The carry is used here as error flag. When it's set, something went wrong.
$80/978D AA TAX A:0080 X:00FE Y:0 P:eNvMXdIzc $80/978E AD 0B 07 LDA $070B [$80:070B] A:0080 X:0080 Y:0 P:eNvMXdIzc $80/9791 1A INC A A:0 X:0080 Y:0 P:envMXdIZc $80/9792 29 0F AND #$0F A:0001 X:0080 Y:0 P:envMXdIzc $80/9794 CD 0D 07 CMP $070D [$80:070D] A:0001 X:0080 Y:0 P:envMXdIzc $80/9797 F0 F2 BEQ $F2 ; [$978B] Branch to the subroutine before - Set Error Flag and exit $80/9799 8D 0B 07 STA $070B [$80:070B] A:0001 X:0080 Y:0 P:envMXdIzC $80/979C 3A DEC A A:0001 X:0080 Y:0 P:envMXdIzC $80/979D 29 0F AND #$0F A:0 X:0080 Y:0 P:envMXdIZC $80/979F A8 TAY A:0 X:0080 Y:0 P:envMXdIZC $80/97A0 8A TXA A:0 X:0080 Y:0 P:envMXdIZC $80/97A1 99 DA 06 STA $06DA,y[$80:06DA] A:0080 X:0080 Y:0 P:eNvMXdIzC $80/97A4 18 CLC ; Clear Error flag - everything's fine $80/97A5 60 RTS
A wild guess: This is used to play a sound effect
$80/97A6 08 PHP ; Buffer Flag Register value on stack $80/97A7 C2 30 REP #$30 ; A/X/Y 16-bit $80/97A9 AD 16 07 LDA $0716 [$80:0716] A:0000 X:00FF Y:0000 P:eNvmxdIzC $80/97AC F0 03 BEQ $03 [$97B1] A:0000 X:00FF Y:0000 P:envmxdIZC $80/97AE CE 16 07 DEC $0716 [$80:0716] A:FF00 X:00FF Y:0 P:eNVmxdIzC $80/97B1 E2 20 SEP #$20 ; A = 8-bit $80/97B3 AD 19 07 LDA $0719 [$80:0719] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97B6 F0 03 BEQ $03 [$97BB] A:0000 X:00FF Y:0000 P:envMxdIZC
code is missing here
$80/97BB AD 15 07 LDA $0715 [$80:0715] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97BE C9 02 CMP #$02 A:0000 X:00FF Y:0000 P:envMxdIZC $80/97C0 D0 03 BNE $03 [$97C5] A:0000 X:00FF Y:0000 P:eNvMxdIzc $80/97C2 4C B0 98 JMP $98B0 ; Exit $80/97C5 AD 41 21 LDA $2141 ; Has the value in $2141 changed? $80/97C8 CD 0F 07 CMP $070F $80/97CB D0 4A BNE $4A ; [$9817] Branch if the value has changed $80/97CD AC 42 21 LDY $2142 ; Have the values in $2142/3 changed? $80/97D0 CC 10 07 CPY $0710 $80/97D3 D0 42 BNE $42 ; [$9817] Branch if the values have changed $80/97D5 AD 18 07 LDA $0718 [$80:0718] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97D8 D0 08 BNE $08 [$97E2] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97DA AD 0C 07 LDA $070C [$80:070C] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97DD CD 0A 07 CMP $070A [$80:070A] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97E0 D0 14 BNE $14 [$97F6] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97E2 A0 00 00 LDY #$0000 A:0000 X:00FF Y:0000 P:envMxdIZC $80/97E5 9C 0F 07 STZ $070F [$80:070F] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97E8 8C 10 07 STY $0710 [$80:0710] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97EB 9C 41 21 STZ $2141 [$80:2141] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97EE 8C 42 21 STY $2142 [$80:2142] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97F1 9C 18 07 STZ $0718 [$80:0718] A:0000 X:00FF Y:0000 P:envMxdIZC $80/97F4 80 21 BRA $21 [$9817] A:0000 X:00FF Y:0000 P:envMxdIZC
executed when a sound effect is played
$80/97F6 E2 30 SEP #$30 A:0000 X:00FF Y:0000 P:eNvMxdIzc $80/97F8 AA TAX A:0000 X:00FF Y:0000 P:eNvMXdIzc $80/97F9 1A INC A A:0000 X:0000 Y:0000 P:envMXdIZc $80/97FA 29 0F AND #$0F A:0001 X:0000 Y:0000 P:envMXdIzc $80/97FC 8D 0C 07 STA $070C [$80:070C] A:0001 X:0000 Y:0000 P:envMXdIzc $80/97FF BD FA 06 LDA $06FA,x[$80:06FA] A:0001 X:0000 Y:0000 P:envMXdIzc $80/9802 8D 11 07 STA $0711 [$80:0711] A:0003 X:0000 Y:0000 P:envMXdIzc $80/9805 8D 43 21 STA $2143 [$80:2143] A:0003 X:0000 Y:0000 P:envMXdIzc $80/9808 BC CA 06 LDY $06CA,x[$80:06CA] A:0003 X:0000 Y:0000 P:envMXdIzc $80/980B BD EA 06 LDA $06EA,x[$80:06EA] A:0003 X:0000 Y:0001 P:envMXdIzc $80/980E 99 0E 07 STA $070E,y[$80:070F] A:0084 X:0000 Y:0001 P:eNvMXdIzc $80/9811 99 40 21 STA $2140,y[$80:2141] A:0084 X:0000 Y:0001 P:eNvMXdIzc $80/9814 EE 18 07 INC $0718 [$80:0718] A:0084 X:0000 Y:0001 P:eNvMXdIzc
if $2141 != $070F / $2142/3 != $0710/1
$80/9817 AD 40 21 LDA $2140 [$80:2140] A:0000 X:00FF Y:0000 P:envMxdIZC $80/981A CD 0E 07 CMP $070E [$80:070E] A:0000 X:00FF Y:0000 P:envMxdIZC $80/981D D0 A3 BNE $A3 ; [$97C2] Exit $80/981F AD 0D 07 LDA $070D [$80:070D] A:0000 X:00FF Y:0000 P:envMxdIZC $80/9822 CD 0B 07 CMP $070B [$80:070B] A:0000 X:00FF Y:0000 P:envMxdIZC $80/9825 F0 9B BEQ $9B ; [$97C2] Exit
executed when a sound effect is played?
$80/9827 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/9829 AE 19 07 LDX $0719 [$80:0719] A:0000 X:00FF Y:0000 P:eNvMXdIzc $80/982C D0 94 BNE $94 ; [$97C2] Exit $80/982E AA TAX A:0000 X:0000 Y:0000 P:envMXdIZc $80/982F 1A INC A A:0000 X:0000 Y:0000 P:envMXdIZc $80/9830 29 0F AND #$0F A:0001 X:0000 Y:0000 P:envMXdIzc $80/9832 8D 0D 07 STA $070D [$80:070D] A:0001 X:0000 Y:0000 P:envMXdIzc $80/9835 BD DA 06 LDA $06DA,x[$80:06DA] A:0001 X:0000 Y:0000 P:envMXdIzc $80/9838 8D 0E 07 STA $070E [$80:070E] A:0080 X:0000 Y:0000 P:eNvMXdIzc $80/983B 8D 40 21 STA $2140 [$80:2140] A:0080 X:0000 Y:0000 P:eNvMXdIzc $80/983E C9 81 CMP #$81 A:0080 X:0000 Y:0000 P:eNvMXdIzc $80/9840 D0 00 BNE $00 [$9842] A:0080 X:0000 Y:0000 P:eNvMXdIzc $80/9842 C9 FD CMP #$FD A:0080 X:0000 Y:0000 P:eNvMXdIzc $80/9844 90 6A BCC $6A ; [$98B0] Exit $80/9846 C9 FE CMP #$FE A:00FF X:0003 Y:0 P:envMXdIzC $80/9848 F0 3F BEQ $3F [$9889] A:00FF X:0003 Y:0 P:envMXdIzC $80/984A C9 FD CMP #$FD A:00FF X:0003 Y:0 P:envMXdIzC $80/984C F0 05 BEQ $05 [$9853] A:00FF X:0003 Y:0 P:envMXdIzC $80/984E A9 FF LDA #$FF A:00FF X:0003 Y:0 P:envMXdIzC $80/9850 8D 17 07 STA $0717 [$80:0717] A:00FF X:0003 Y:0 P:eNvMXdIzC $80/9853 22 18 5C 10 JSL $105C18 ; (Clear $70E-711 (APU register buffers?)) $80/9857 A2 02 LDX #$02 A:00FF X:0003 Y:0 P:eNvMXdIzC $80/9859 8E 15 07 STX $0715 [$80:0715] A:00FF X:0002 Y:0 P:envMXdIzC $80/985C C2 10 REP #$10 A:00FF X:0002 Y:0 P:envMXdIzC $80/985E A2 AA BB LDX #$BBAA A:00FF X:0002 Y:0 P:envMxdIzC $80/9861 8D 40 21 STA $2140 [$80:2140] A:00FF X:BBAA Y:0 P:eNvMxdIzC $80/9864 EC 40 21 CPX $2140 [$80:2140] A:00FF X:BBAA Y:0 P:eNvMxdIzC $80/9867 D0 F8 BNE $F8 [$9861] A:00FF X:BBAA Y:0 P:eNvMxdIzC $80/9869 AE 12 07 LDX $0712 [$80:0712] A:00FF X:BBAA Y:0 P:envMxdIZC $80/986C 86 82 STX $82 [$00:0082] A:00FF X:8000 Y:0 P:eNvMxdIzC $80/986E AD 14 07 LDA $0714 [$80:0714] A:00FF X:8000 Y:0 P:eNvMxdIzC $80/9871 85 84 STA $84 [$00:0084] A:009F X:8000 Y:0 P:eNvMxdIzC $80/9873 C2 20 REP #$20 A:009F X:8000 Y:0 P:eNvMxdIzC $80/9875 A9 00 10 LDA #$1000 A:009F X:8000 Y:0 P:eNvmxdIzC $80/9878 8D 5E 06 STA $065E [$80:065E] A:1000 X:8000 Y:0 P:envmxdIzC $80/987B A9 24 5C LDA #$5C24 A:1000 X:8000 Y:0 P:envmxdIzC $80/987E 8D 5D 06 STA $065D [$80:065D] A:5C24 X:8000 Y:0 P:envmxdIzC $80/9881 E2 20 SEP #$20 A:5C24 X:8000 Y:0 P:envmxdIzC $80/9883 22 B6 91 80 JSL $8091B6[$80:91B6] A:5C24 X:8000 Y:0 P:envMxdIzC $80/9887 80 27 BRA $27 ; [$98B0] Exit
code is missing here
$80/98B0 28 PLP ; Restore Flag Register value $80/98B1 6B RTL
$80/98B2 C2 30 REP #$30 A:1E97 X:0 Y:0010 P:envmxdizC $80/98B4 AC 82 00 LDY $0082 [$80:0082] A:1E97 X:0 Y:0010 P:envmxdizC $80/98B7 9C 82 00 STZ $0082 [$80:0082] A:1E97 X:0 Y:8000 P:eNvmxdizC $80/98BA A9 AA BB LDA #$BBAA A:1E97 X:0 Y:8000 P:eNvmxdizC $80/98BD CD 40 21 CMP $2140 [$80:2140] A:BBAA X:0 Y:8000 P:eNvmxdizC $80/98C0 D0 FB BNE $FB [$98BD] A:BBAA X:0 Y:8000 P:envmxdiZC $80/98C2 E2 20 SEP #$20 A:BBAA X:0 Y:8000 P:envmxdiZC $80/98C4 A9 CC LDA #$CC A:BBAA X:0 Y:8000 P:envMxdiZC $80/98C6 80 2B BRA $2B [$98F3] A:BBCC X:0 Y:8000 P:eNvMxdizC $80/98C8 FA PLX A:29CC X:03FA Y:8004 P:enVMxdiZC $80/98C9 B7 82 LDA [$82],y[$9F:8004] A:29CC X:2800 Y:8004 P:enVMxdizC $80/98CB 20 31 99 JSR $9931 [$80:9931] A:2910 X:2800 Y:8004 P:enVMxdizC $80/98CE EB XBA A:2910 X:2800 Y:8005 P:eNVMxdizC $80/98CF A9 00 LDA #$00 A:1029 X:2800 Y:8005 P:enVMxdizC $80/98D1 80 0D BRA $0D [$98E0] A:1000 X:2800 Y:8005 P:enVMxdiZC $80/98D3 EB XBA A:1000 X:27FF Y:8005 P:enVMxdizC $80/98D4 B7 82 LDA [$82],y[$9F:8005] A:0010 X:27FF Y:8005 P:enVMxdizC $80/98D6 20 31 99 JSR $9931 [$80:9931] A:002A X:27FF Y:8005 P:enVMxdizC $80/98D9 EB XBA A:002A X:27FF Y:8006 P:eNVMxdizC $80/98DA CD 40 21 CMP $2140 [$80:2140] A:2A00 X:27FF Y:8006 P:enVMxdiZC $80/98DD D0 FB BNE $FB [$98DA] A:2A00 X:27FF Y:8006 P:enVMxdiZC $80/98DF 1A INC A A:2A00 X:27FF Y:8006 P:enVMxdiZC $80/98E0 C2 20 REP #$20 A:1000 X:2800 Y:8005 P:enVMxdiZC $80/98E2 8D 40 21 STA $2140 [$80:2140] A:1000 X:2800 Y:8005 P:enVmxdiZC $80/98E5 E2 20 SEP #$20 A:1000 X:2800 Y:8005 P:enVmxdiZC $80/98E7 CA DEX A:1000 X:2800 Y:8005 P:enVMxdiZC $80/98E8 D0 E9 BNE $E9 [$98D3] A:1000 X:27FF Y:8005 P:enVMxdizC $80/98EA CD 40 21 CMP $2140 [$80:2140] A:00FF X:0 Y:A804 P:enVMxdiZC $80/98ED D0 FB BNE $FB [$98EA] A:00FF X:0 Y:A804 P:enVMxdizC $80/98EF 69 03 ADC #$03 A:00FF X:0 Y:A804 P:enVMxdiZC $80/98F1 F0 FC BEQ $FC [$98EF] A:0003 X:0 Y:A804 P:envMxdizC $80/98F3 48 PHA A:BBCC X:0 Y:8000 P:eNvMxdizC $80/98F4 C2 20 REP #$20 A:BBCC X:0 Y:8000 P:eNvMxdizC $80/98F6 B7 82 LDA [$82],y[$9F:8000] A:BBCC X:0 Y:8000 P:eNvmxdizC $80/98F8 20 31 99 JSR $9931 [$80:9931] A:2800 X:0 Y:8000 P:envmxdizC $80/98FB 20 31 99 JSR $9931 [$80:9931] A:2800 X:0 Y:8001 P:eNvmxdizC $80/98FE AA TAX A:2800 X:0 Y:8002 P:eNvmxdizC $80/98FF B7 82 LDA [$82],y[$9F:8002] A:2800 X:2800 Y:8002 P:envmxdizC $80/9901 20 31 99 JSR $9931 [$80:9931] A:2900 X:2800 Y:8002 P:envmxdizC $80/9904 20 31 99 JSR $9931 [$80:9931] A:2900 X:2800 Y:8003 P:eNvmxdizC $80/9907 8D 42 21 STA $2142 [$80:2142] A:2900 X:2800 Y:8004 P:eNvmxdizC $80/990A E2 20 SEP #$20 A:2900 X:2800 Y:8004 P:eNvmxdizC $80/990C E0 01 00 CPX #$0001 A:2900 X:2800 Y:8004 P:eNvMxdizC $80/990F A9 00 LDA #$00 A:2900 X:2800 Y:8004 P:envMxdizC $80/9911 2A ROL A A:2900 X:2800 Y:8004 P:envMxdiZC $80/9912 8D 41 21 STA $2141 [$80:2141] A:2901 X:2800 Y:8004 P:envMxdizc $80/9915 69 7F ADC #$7F A:2901 X:2800 Y:8004 P:envMxdizc $80/9917 68 PLA A:2980 X:2800 Y:8004 P:eNVMxdizc $80/9918 8D 40 21 STA $2140 [$80:2140] A:29CC X:2800 Y:8004 P:eNVMxdizc $80/991B DA PHX A:29CC X:2800 Y:8004 P:eNVMxdizc $80/991C A2 00 04 LDX #$0400 A:29CC X:2800 Y:8004 P:eNVMxdizc $80/991F CA DEX A:29CC X:0400 Y:8004 P:enVMxdizc $80/9920 F0 07 BEQ $07 [$9929] A:29CC X:03FF Y:8004 P:enVMxdizc $80/9922 CD 40 21 CMP $2140 [$80:2140] A:29CC X:03FF Y:8004 P:enVMxdizc $80/9925 D0 F8 BNE $F8 [$991F] A:29CC X:03FF Y:8004 P:enVMxdizC $80/9927 70 9F BVS $9F [$98C8] A:29CC X:03FA Y:8004 P:enVMxdiZC $80/9929 FA PLX A:0403 X:03F7 Y:A808 P:envMxdiZC $80/992A 9C 15 07 STZ $0715 [$80:0715] A:0403 X:0 Y:A808 P:envMxdiZC $80/992D 5C E9 91 80 JMP $8091E9[$80:91E9] A:0403 X:0 Y:A808 P:envMxdiZC $80/9931 5A PHY A:2800 X:0 Y:8000 P:envmxdizC $80/9932 AC 16 07 LDY $0716 [$80:0716] A:2800 X:0 Y:8000 P:envmxdizC $80/9935 F0 1B BEQ $1B [$9952] A:2800 X:0 Y:FF00 P:eNvmxdizC $80/9937 AC 1A 07 LDY $071A [$80:071A] A:2800 X:0 Y:FF00 P:eNvmxdizC $80/993A 88 DEY A:2800 X:0 Y:0 P:envmxdiZC $80/993B 10 07 BPL $07 [$9944] A:2800 X:0 Y:FFFF P:eNvmxdizC $80/993D 22 3A 91 80 JSL $80913A[$80:913A] A:2800 X:0 Y:FFFF P:eNvmxdizC $80/9941 A0 00 03 LDY #$0300 A:2800 X:0 Y:FFFF P:eNvmxdizC $80/9944 8C 1A 07 STY $071A [$80:071A] A:2800 X:0 Y:0300 P:envmxdizC $80/9947 7A PLY A:2800 X:0 Y:0300 P:envmxdizC $80/9948 C8 INY A:2800 X:0 Y:8000 P:eNvmxdizC $80/9949 F0 01 BEQ $01 [$994C] A:2800 X:0 Y:8001 P:eNvmxdizC $80/994B 60 RTS A:2800 X:0 Y:8001 P:eNvmxdizC
$80/995A Transfer Data to SPC
I guess this subroutine is the standard SPC Data Transfer Subroutine by Nintendo. Furthermore, since this ROM is programmed by Nintendo (I guess?), they surely will use this subroutine, too, to transfer song/sfx data. Other developers tended to write their own.
$80/995A 08 PHP ; Buffer Flag Register value on stack $80/995B C2 30 REP #$30 ; A/X/Y = 16 bit $80/995D AC 20 00 LDY $0020 [$80:0020] A:8000 X:00FF Y:0062 P:eNvmxdIzC $80/9960 9C 20 00 STZ $0020 [$80:0020] A:8000 X:00FF Y:8000 P:eNvmxdIzC $80/9963 A9 AA BB LDA #$BBAA ; Is the SPC ready? $80/9966 CD 40 21 CMP $2140 $80/9969 D0 FB BNE $FB ; [$9966] $80/996B E2 20 SEP #$20 ; Send ready signal back $80/996D A9 CC LDA #$CC $80/996F 80 2B BRA $2B ; [$999C]
$80/9971 FA PLX A:51CC X:03FA Y:8004 P:enVMxdIZC $80/9972 B7 20 LDA [$20],y[$9D:8004] A:51CC X:00F0 Y:8004 P:enVMxdIzC $80/9974 20 D5 99 JSR $99D5 ; Inc Y $80/9977 EB XBA A:5120 X:00F0 Y:8005 P:eNVMxdIzC $80/9978 A9 00 LDA #$00 A:2051 X:00F0 Y:8005 P:enVMxdIzC $80/997A 80 0D BRA $0D [$9989] A:2000 X:00F0 Y:8005 P:enVMxdIZC $80/997C EB XBA A:2000 X:00EF Y:8005 P:enVMxdIzC $80/997D B7 20 LDA [$20],y[$9D:8005] A:0020 X:00EF Y:8005 P:enVMxdIzC $80/997F 20 D5 99 JSR $99D5 [$80:99D5] A:0054 X:00EF Y:8005 P:enVMxdIzC $80/9982 EB XBA A:0054 X:00EF Y:8006 P:eNVMxdIzC $80/9983 CD 40 21 CMP $2140 [$80:2140] A:5400 X:00EF Y:8006 P:enVMxdIZC $80/9986 D0 FB BNE $FB [$9983] A:5400 X:00EF Y:8006 P:enVMxdIzc $80/9988 1A INC A A:5400 X:00EF Y:8006 P:enVMxdIZC $80/9989 C2 20 REP #$20 A:2000 X:00F0 Y:8005 P:enVMxdIZC $80/998B 8D 40 21 STA $2140 [$80:2140] A:2000 X:00F0 Y:8005 P:enVmxdIZC $80/998E E2 20 SEP #$20 A:2000 X:00F0 Y:8005 P:enVmxdIZC $80/9990 CA DEX A:2000 X:00F0 Y:8005 P:enVMxdIZC $80/9991 D0 E9 BNE $E9 [$997C] A:2000 X:00EF Y:8005 P:enVMxdIzC $80/9993 CD 40 21 CMP $2140 [$80:2140] A:E4EF X:0 Y:80F4 P:enVMxdIZC $80/9996 D0 FB BNE $FB [$9993] A:E4EF X:0 Y:80F4 P:enVMxdIzC $80/9998 69 03 ADC #$03 A:E4EF X:0 Y:80F4 P:enVMxdIZC $80/999A F0 FC BEQ $FC [$9998] A:E4F3 X:0 Y:80F4 P:eNvMxdIzc $80/999C 48 PHA A:BBCC X:00FF Y:8000 P:eNvMxdIzC $80/999D C2 20 REP #$20 ; A = 16-bit $80/999F B7 20 LDA [$20],y[$9D:8000] A:BBCC X:00FF Y:8000 P:eNvmxdIzC $80/99A1 20 D5 99 JSR $99D5 ; Inc Y $80/99A4 20 D5 99 JSR $99D5 ; Inc Y $80/99A7 AA TAX A:00F0 X:00FF Y:8002 P:eNvmxdIzC $80/99A8 B7 20 LDA [$20],y[$9D:8002] A:00F0 X:00F0 Y:8002 P:envmxdIzC $80/99AA 20 D5 99 JSR $99D5 ; Inc Y $80/99AD 20 D5 99 JSR $99D5 ; Inc Y $80/99B0 8D 42 21 STA $2142 [$80:2142] A:5100 X:00F0 Y:8004 P:eNvmxdIzC $80/99B3 E2 20 SEP #$20 A:5100 X:00F0 Y:8004 P:eNvmxdIzC $80/99B5 E0 01 00 CPX #$0001 A:5100 X:00F0 Y:8004 P:eNvMxdIzC $80/99B8 A9 00 LDA #$00 A:5100 X:00F0 Y:8004 P:envMxdIzC $80/99BA 2A ROL A A:5100 X:00F0 Y:8004 P:envMxdIZC $80/99BB 8D 41 21 STA $2141 [$80:2141] A:5101 X:00F0 Y:8004 P:envMxdIzc $80/99BE 69 7F ADC #$7F A:5101 X:00F0 Y:8004 P:envMxdIzc $80/99C0 68 PLA A:5180 X:00F0 Y:8004 P:eNVMxdIzc $80/99C1 8D 40 21 STA $2140 [$80:2140] A:51CC X:00F0 Y:8004 P:eNVMxdIzc $80/99C4 DA PHX A:51CC X:00F0 Y:8004 P:eNVMxdIzc $80/99C5 A2 00 04 LDX #$0400 A:51CC X:00F0 Y:8004 P:eNVMxdIzc $80/99C8 CA DEX A:51CC X:0400 Y:8004 P:enVMxdIzc $80/99C9 F0 07 BEQ $07 [$99D2] A:51CC X:03FF Y:8004 P:enVMxdIzc $80/99CB CD 40 21 CMP $2140 [$80:2140] A:51CC X:03FF Y:8004 P:enVMxdIzc $80/99CE D0 F8 BNE $F8 [$99C8] A:51CC X:03FF Y:8004 P:enVMxdIzC $80/99D0 70 9F BVS $9F [$9971] A:51CC X:03FA Y:8004 P:enVMxdIZC $80/99D2 FA PLX A:0403 X:03F9 Y:E280 P:envMxdIZC $80/99D3 28 PLP ; Restore Flag Register value $80/99D4 6B RTL
$80/99D5 Increment Load Index Y
This subroutine increments Y. If it turned from #$FFFF to #$0000, its value gets set to #$8000 and the bank of the 24-bit-address in $20-$22 gets incremented.
Side Note: One could save one byte of code if the branch command is a BNE that points to an RTS, but maybe they built it this way to save cycles?
$80/99D5 C8 INY ; Increment Load index $80/99D6 F0 01 BEQ $01 ; [$99D9] Branch if it turned from #$FFFF to #$0000 $80/99D8 60 RTS $80/99D9 E6 22 INC $22 ; Increment bank $80/99DB A0 00 80 LDY #$8000 ; Reset to #$8000 (first byte of the new LoROM bank) $80/99DE 60 RTS
$80/9AF0 DA PHX ; Buffer X on stack $80/9AF1 AD 1D 07 LDA $071D [$80:071D] A:0060 X:0000 Y:0000 P:envmxdizc $80/9AF4 85 89 STA $89 [$00:0089] A:9499 X:0000 Y:0000 P:eNvmxdizc $80/9AF6 AD 1C 07 LDA $071C [$80:071C] A:9499 X:0000 Y:0000 P:eNvmxdizc $80/9AF9 85 88 STA $88 [$00:0088] A:9909 X:0000 Y:0000 P:eNvmxdizc $80/9AFB 8B PHB ; Buffer Program Bank on stack $80/9AFC F4 00 7E PEA $7E00 ; Set Program Bank to $7E $80/9AFF AB PLB $80/9B00 AB PLB $80/9B01 AE 21 07 LDX $0721 [$7E:0721] A:9909 X:0000 Y:0000 P:envmxdizc $80/9B04 7C 07 9B JMP ($9B07,x)[$80:9B0F] A:9909 X:0002 Y:0000 P:envmxdizc
$80/9B07 Jump Table for $80/9AF0
0F 9B 0F 9B 1E 9B 7E 9B
The stuff where data gets transfered from $7E00 to $8200 has to do with writing the Tiles in the text boxes
$80/9B0F A2 00 00 LDX #$0000 A:9909 X:0002 Y:0000 P:envmxdizc $80/9B12 AD 1F 07 LDA $071F [$7E:071F] A:9909 X:0000 Y:0000 P:envmxdiZc $80/9B15 18 CLC A:0060 X:0000 Y:0000 P:envmxdizc $80/9B16 69 07 00 ADC #$0007 A:0060 X:0000 Y:0000 P:envmxdizc $80/9B19 4A LSR A A:0067 X:0000 Y:0000 P:envmxdizc $80/9B1A 4A LSR A A:0033 X:0000 Y:0000 P:envmxdizC $80/9B1B 4A LSR A A:0019 X:0000 Y:0000 P:envmxdizC $80/9B1C 80 0C BRA $0C [$9B2A] A:000C X:0000 Y:0000 P:envmxdizC
code is missing here
$80/9B2A 48 PHA A:000C X:0000 Y:0000 P:envmxdizC $80/9B2B A0 00 00 LDY #$0000 A:000C X:0000 Y:0000 P:envmxdizC $80/9B2E B7 88 LDA [$88],y[$94:9909] A:000C X:0000 Y:0000 P:envmxdiZC $80/9B30 9D 00 7E STA $7E00,x[$7E:7E00] A:FFFF X:0000 Y:0000 P:eNvmxdizC $80/9B33 9D 00 82 STA $8200,x[$7E:8200] A:FFFF X:0000 Y:0000 P:eNvmxdizC $80/9B36 C8 INY A:FFFF X:0000 Y:0000 P:eNvmxdizC $80/9B37 C8 INY A:FFFF X:0000 Y:0001 P:envmxdizC $80/9B38 9D 02 7E STA $7E02,x[$7E:7E02] A:FFFF X:0000 Y:0002 P:envmxdizC $80/9B3B 9D 02 82 STA $8202,x[$7E:8202] A:FFFF X:0000 Y:0002 P:envmxdizC $80/9B3E C8 INY A:FFFF X:0000 Y:0002 P:envmxdizC $80/9B3F C8 INY A:FFFF X:0000 Y:0003 P:envmxdizC $80/9B40 9D 04 7E STA $7E04,x[$7E:7E04] A:FFFF X:0000 Y:0004 P:envmxdizC $80/9B43 9D 04 82 STA $8204,x[$7E:8204] A:FFFF X:0000 Y:0004 P:envmxdizC $80/9B46 C8 INY A:FFFF X:0000 Y:0004 P:envmxdizC $80/9B47 C8 INY A:FFFF X:0000 Y:0005 P:envmxdizC $80/9B48 9D 06 7E STA $7E06,x[$7E:7E06] A:FFFF X:0000 Y:0006 P:envmxdizC $80/9B4B 9D 06 82 STA $8206,x[$7E:8206] A:FFFF X:0000 Y:0006 P:envmxdizC $80/9B4E C8 INY A:FFFF X:0000 Y:0006 P:envmxdizC $80/9B4F C8 INY A:FFFF X:0000 Y:0007 P:envmxdizC $80/9B50 9D 08 7E STA $7E08,x[$7E:7E08] A:FFFF X:0000 Y:0008 P:envmxdizC $80/9B53 9D 08 82 STA $8208,x[$7E:8208] A:FFFF X:0000 Y:0008 P:envmxdizC $80/9B56 C8 INY A:FFFF X:0000 Y:0008 P:envmxdizC $80/9B57 C8 INY A:FFFF X:0000 Y:0009 P:envmxdizC $80/9B58 9D 0A 7E STA $7E0A,x[$7E:7E0A] A:FFFF X:0000 Y:000A P:envmxdizC $80/9B5B 9D 0A 82 STA $820A,x[$7E:820A] A:FFFF X:0000 Y:000A P:envmxdizC $80/9B5E C8 INY A:FFFF X:0000 Y:000A P:envmxdizC $80/9B5F C8 INY A:FFFF X:0000 Y:000B P:envmxdizC $80/9B60 9D 0C 7E STA $7E0C,x[$7E:7E0C] A:FFFF X:0000 Y:000C P:envmxdizC $80/9B63 9D 0C 82 STA $820C,x[$7E:820C] A:FFFF X:0000 Y:000C P:envmxdizC $80/9B66 C8 INY A:FFFF X:0000 Y:000C P:envmxdizC $80/9B67 C8 INY A:FFFF X:0000 Y:000D P:envmxdizC $80/9B68 9D 0E 7E STA $7E0E,x[$7E:7E0E] A:FFFF X:0000 Y:000E P:envmxdizC $80/9B6B 9D 0E 82 STA $820E,x[$7E:820E] A:FFFF X:0000 Y:000E P:envmxdizC $80/9B6E 8A TXA A:FFFF X:0000 Y:000E P:envmxdizC $80/9B6F 18 CLC A:0000 X:0000 Y:000E P:envmxdiZC $80/9B70 69 10 00 ADC #$0010 A:0000 X:0000 Y:000E P:envmxdiZc $80/9B73 AA TAX A:0010 X:0000 Y:000E P:envmxdizc $80/9B74 68 PLA A:0010 X:0010 Y:000E P:envmxdizc $80/9B75 3A DEC A A:000C X:0010 Y:000E P:envmxdizc $80/9B76 D0 B2 BNE $B2 [$9B2A] A:000B X:0010 Y:000E P:envmxdizc $80/9B78 AB PLB A:0000 X:00C0 Y:000E P:envmxdiZc $80/9B79 FA PLX A:0000 X:00C0 Y:000E P:eNvmxdizc $80/9B7A 9C 35 07 STZ $0735 [$80:0735] A:0000 X:0000 Y:000E P:envmxdiZc $80/9B7D 6B RTL A:0000 X:0000 Y:000E P:envmxdiZc
$80/9C23 Store A into $7E/7600 to $7E/7DFF
$80/9C23 08 PHP ; Buffer Flag Register value and Data Bank on stack $80/9C24 8B PHB $80/9C25 F4 00 7E PEA $7E00 ; Set Data Bank to $7E $80/9C28 AB PLB $80/9C29 AB PLB $80/9C2A C2 30 REP #$30 ; A/X/Y = 16-bit $80/9C2C A2 FE 00 LDX #$00FE ; Loop $80/9C2F 9D 00 76 STA $7600,x $80/9C32 9D 00 77 STA $7700,x $80/9C35 9D 00 78 STA $7800,x $80/9C38 9D 00 79 STA $7900,x $80/9C3B 9D 00 7A STA $7A00,x $80/9C3E 9D 00 7B STA $7B00,x $80/9C41 9D 00 7C STA $7C00,x $80/9C44 9D 00 7D STA $7D00,x $80/9C47 CA DEX $80/9C48 CA DEX $80/9C49 10 E4 BPL $E4 ; [$9C2F] $80/9C4B AB PLB ; Restore Flag Register value and Data Bank $80/9C4C 28 PLP $80/9C4D 6B RTL
$80/9C4E TEXTBOX: Transfer Textbox Tiles from buffer to VRAM
Transfers #$800 byte from $7E/7600 to VRAM
$80/9C4E AD 42 07 LDA $0742 ; Is flag set for VRAM DMA? $80/9C51 F0 2E BEQ $2E ; [$9C81] Exit if not $80/9C53 E2 10 SEP #$10 ; X/Y = 8-bit $80/9C55 A9 01 18 LDA #$1801 ; 16-bit transfer to $2118 (VRAM) $80/9C58 8D 00 43 STA $4300 $80/9C5B A9 00 76 LDA #$7600 ; Source: $7E/7600 $80/9C5E 8D 02 43 STA $4302 $80/9C61 A2 7E LDX #$7E $80/9C63 8E 04 43 STX $4304 $80/9C66 A9 00 08 LDA #$0800 ; Transfer #$800 byte $80/9C69 8D 05 43 STA $4305 $80/9C6C A2 80 LDX #$80 ; 16-bit transfer $80/9C6E 8E 15 21 STX $2115 $80/9C71 AD 29 07 LDA $0729 ; Set VRAM destination $80/9C74 8D 16 21 STA $2116 $80/9C77 A2 01 LDX #$01 ; Activate DMA $80/9C79 8E 0B 42 STX $420B $80/9C7C 9C 42 07 STZ $0742 ; Remove flag for VRAM DMA $80/9C7F C2 10 REP #$10 ; X/Y = 16-bit $80/9C81 6B RTL
$80/9C89 ? (Executed when talking to the aerial building and at ROM start)
I presume this subroutine is textbox related. When I forced it to give out error flags, Satebo's text box at the start stayed empty.
This subroutine uses the Carry as an Error flag (i. e. it sets the Carry at the end if an error occurs or clears the Carry if everything worked just as planned).
NOTE (to self): The first double-byte of the Data below is the Lower Border value and the second double-byte as the Upper Border value. If A is
$80/9C89 8B PHB ; Buffer Program Bank on Stack $80/9C8A 4B PHK ; Set Program Bank to $80 $80/9C8B AB PLB $80/9C8C C9 FF FF CMP #$FFFF A:95FA X:0004 Y:000E P:eNvmxdizC $80/9C8F F0 43 BEQ $43 [$9CD4] A:95FA X:0004 Y:000E P:eNvmxdizc $80/9C91 A2 00 00 LDX #$0000 A:95FA X:0004 Y:000E P:eNvmxdizc $80/9C94 DD D7 9C CMP $9CD7,x[$80:9CD7] A:95FA X:0000 Y:000E P:envmxdiZc $80/9C97 90 3B BCC $3B [$9CD4] A:95FA X:0000 Y:000E P:envmxdizC $80/9C99 DD D9 9C CMP $9CD9,x[$80:9CD9] A:95FA X:0000 Y:000E P:envmxdizC $80/9C9C 90 0A BCC $0A [$9CA8] A:95FA X:0000 Y:000E P:envmxdizC $80/9C9E E8 INX A:95FA X:0000 Y:000E P:envmxdizC $80/9C9F E8 INX A:95FA X:0001 Y:000E P:envmxdizC $80/9CA0 E8 INX A:95FA X:0002 Y:000E P:envmxdizC $80/9CA1 E8 INX A:95FA X:0003 Y:000E P:envmxdizC $80/9CA2 E8 INX A:95FA X:0004 Y:000E P:envmxdizC $80/9CA3 E8 INX A:95FA X:0005 Y:000E P:envmxdizC $80/9CA4 E8 INX A:95FA X:0006 Y:000E P:envmxdizC $80/9CA5 E8 INX A:95FA X:0007 Y:000E P:envmxdizC $80/9CA6 80 EC BRA $EC [$9C94] A:95FA X:0008 Y:000E P:envmxdizC $80/9CA8 48 PHA A:95FA X:0038 Y:000E P:eNvmxdizc $80/9CA9 BD DC 9C LDA $9CDC,x[$80:9D14] A:95FA X:0038 Y:000E P:eNvmxdizc $80/9CAC 85 8C STA $8C [$00:008C] A:8B80 X:0038 Y:000E P:eNvmxdizc $80/9CAE 68 PLA A:8B80 X:0038 Y:000E P:eNvmxdizc $80/9CAF 38 SEC A:95FA X:0038 Y:000E P:eNvmxdizc $80/9CB0 FD D7 9C SBC $9CD7,x[$80:9D0F] A:95FA X:0038 Y:000E P:eNvmxdizC $80/9CB3 0A ASL A A:0549 X:0038 Y:000E P:envmxdizC $80/9CB4 0A ASL A A:0A92 X:0038 Y:000E P:envmxdizc $80/9CB5 0A ASL A A:1524 X:0038 Y:000E P:envmxdizc $80/9CB6 48 PHA A:2A48 X:0038 Y:000E P:envmxdizc $80/9CB7 0A ASL A A:2A48 X:0038 Y:000E P:envmxdizc $80/9CB8 18 CLC A:5490 X:0038 Y:000E P:envmxdizc $80/9CB9 63 01 ADC $01,s [$00:1E8B] A:5490 X:0038 Y:000E P:envmxdizc $80/9CBB 18 CLC A:7ED8 X:0038 Y:000E P:envmxdizc $80/9CBC 7D DB 9C ADC $9CDB,x[$80:9D13] A:7ED8 X:0038 Y:000E P:envmxdizc $80/9CBF 85 8B STA $8B [$00:008B] A:FED8 X:0038 Y:000E P:eNvmxdizc $80/9CC1 68 PLA A:FED8 X:0038 Y:000E P:eNvmxdizc $80/9CC2 BD DE 9C LDA $9CDE,x[$80:9D16] A:2A48 X:0038 Y:000E P:envmxdizc $80/9CC5 29 FF 00 AND #$00FF A:060C X:0038 Y:000E P:envmxdizc $80/9CC8 8D 39 07 STA $0739 [$80:0739] A:000C X:0038 Y:000E P:envmxdizc $80/9CCB A9 18 00 LDA #$0018 A:000C X:0038 Y:000E P:envmxdizc $80/9CCE 8D 3B 07 STA $073B [$80:073B] A:0018 X:0038 Y:000E P:envmxdizc $80/9CD1 AB PLB ; Restore Program Bank $80/9CD2 18 CLC ; Clear Error Flag $80/9CD3 6B RTL $80/9CD4 28 PLP ; UNNECESSARY LINE - This should be a "PLB", not a PLB $80/9CD5 38 SEC ; Set Error Flag $80/9CD6 6B RTL
$80/9CD7 Data for $80/9C89
$80/9CD7 40 81 AD 81 00 80 89 0C $80/9CDF 4F 82 F2 82 38 8A 89 0C $80/9CE7 40 83 D7 83 80 99 89 0C $80/9CEF 40 84 92 84 A8 A7 89 0C $80/9CF7 3F 85 DE 85 58 AF 89 06 $80/9DFF 9F 88 5C 8B 40 BE 89 0C $80/9D07 5C 8B B1 90 00 80 8A 0C $80/9D0F B1 90 06 96 00 80 8B 0C $80/9D17 06 96 74 98 00 80 8C 0C $80/9D1F 9F 98 86 9B 50 BA 8C 0C $80/9D27 86 9B FD 9F 00 80 8D 0C $80/9D2F 40 E0 1E E1 28 EB 8D 0C $80/9D37 1E E1 73 E6 00 80 8E 0C $80/9D3F 73 E6 A3 EA 00 80 8F 0C $80/9D47 FF FF
$80/9D49 ? (Executed when talking to the aerial building)
$80/9D49 B7 8B LDA [$8B],y[$8B:FED8] A:7E00 X:7E32 Y:0000 P:envmxdiZc $80/9D4B EB XBA A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D4C 85 8E STA $8E [$00:008E] A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D4E AF 25 07 00 LDA $000725[$00:0725] A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D52 85 90 STA $90 [$00:0090] A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D54 89 02 00 BIT #$0002 A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D57 F0 07 BEQ $07 [$9D60] A:0000 X:7E32 Y:0000 P:envmxdiZc
code is missing here
$80/9D60 A5 90 LDA $90 [$00:0090] A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D62 89 01 00 BIT #$0001 A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D65 F0 10 BEQ $10 [$9D77] A:0000 X:7E32 Y:0000 P:envmxdiZc
code is missing here
$80/9D77 A5 90 LDA $90 [$00:0090] A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D79 89 04 00 BIT #$0004 A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D7C F0 17 BEQ $17 [$9D95] A:0000 X:7E32 Y:0000 P:envmxdiZc
code is missing here
$80/9D95 A5 8E LDA $8E [$00:008E] A:0000 X:7E32 Y:0000 P:envmxdiZc $80/9D97 60 RTS A:0000 X:7E32 Y:0000 P:envmxdiZc
$80/9DDA ? (setup jump address in $88) (Executed when talking to the aerial building)
$80/9DDA AE 21 07 LDX $0721 [$80:0721] A:002A X:0038 Y:000E P:eNvmxdizc $80/9DDD BF 0B 9F 80 LDA $809F0B,x[$80:9F0D] A:002A X:0002 Y:000E P:envmxdizc $80/9DE1 18 CLC A:0000 X:0002 Y:000E P:envmxdiZc $80/9DE2 6D 23 07 ADC $0723 [$80:0723] A:0000 X:0002 Y:000E P:envmxdiZc $80/9DE5 0A ASL A A:0001 X:0002 Y:000E P:envmxdizc $80/9DE6 AA TAX A:0002 X:0002 Y:000E P:envmxdizc $80/9DE7 BF 13 9F 80 LDA $809F13,x[$80:9F15] A:0002 X:0002 Y:000E P:envmxdizc $80/9DEB 85 88 STA $88 [$00:0088] A:9E2F X:0002 Y:000E P:eNvmxdizc $80/9DED 60 RTS A:9E2F X:0002 Y:000E P:eNvmxdizc
$80/9E2F ? (bit stuff) (Executed when talking to the aerial building)
$80/9F1F jumps here
This subroutine transforms bits of values. You put three values in $8F-91. After that, you set an address RAM address in X. You put the "masks" for these values in X, X+#$01, X+#$10, X+#$11, X+#$20 and X+#$21.
The values get transformed and stored into the X-addresses. To make it short, this subroutine does this:
$0000,x = $8F OR $0000,x $0001,x = $8F NOR $0001,x $0010,x = $90 OR $0010,x $0011,x = $90 NOR $0011,x $0020,x = $91 OR $0020,x $0021,x = $91 NOR $0021,x
$80/9E2F E2 20 SEP #$20 A:0108 X:7E34 Y:0020 P:envmxdiZC $80/9E31 A5 91 LDA $91 [$00:0091] A:0108 X:7E34 Y:0020 P:envMxdiZC $80/9E33 F0 10 BEQ $10 [$9E45] A:0101 X:7E34 Y:0020 P:envMxdizC $80/9E35 1D 00 00 ORA $0000,x[$7E:7E34] A:0101 X:7E34 Y:0020 P:envMxdizC $80/9E38 9D 00 00 STA $0000,x[$7E:7E34] A:01FF X:7E34 Y:0020 P:eNvMxdizC $80/9E3B A5 91 LDA $91 [$00:0091] A:01FF X:7E34 Y:0020 P:eNvMxdizC $80/9E3D 49 FF EOR #$FF A:0101 X:7E34 Y:0020 P:envMxdizC $80/9E3F 3D 01 00 AND $0001,x[$7E:7E35] A:01FE X:7E34 Y:0020 P:eNvMxdizC $80/9E42 9D 01 00 STA $0001,x[$7E:7E35] A:01FE X:7E34 Y:0020 P:eNvMxdizC $80/9E45 A5 90 LDA $90 [$00:0090] A:01FE X:7E34 Y:0020 P:eNvMxdizC $80/9E47 F0 10 BEQ $10 [$9E59] A:0108 X:7E34 Y:0020 P:envMxdizC $80/9E49 1D 10 00 ORA $0010,x[$7E:7E44] A:0108 X:7E34 Y:0020 P:envMxdizC $80/9E4C 9D 10 00 STA $0010,x[$7E:7E44] A:01FF X:7E34 Y:0020 P:eNvMxdizC $80/9E4F A5 90 LDA $90 [$00:0090] A:01FF X:7E34 Y:0020 P:eNvMxdizC $80/9E51 49 FF EOR #$FF A:0108 X:7E34 Y:0020 P:envMxdizC $80/9E53 3D 11 00 AND $0011,x[$7E:7E45] A:01F7 X:7E34 Y:0020 P:eNvMxdizC $80/9E56 9D 11 00 STA $0011,x[$7E:7E45] A:01F7 X:7E34 Y:0020 P:eNvMxdizC $80/9E59 A5 8F LDA $8F [$00:008F] A:01F7 X:7E34 Y:0020 P:eNvMxdizC $80/9E5B F0 10 BEQ $10 [$9E6D] A:0100 X:7E34 Y:0020 P:envMxdiZC $80/9E5D 1D 20 00 ORA $0020,x[$7E:7E58] A:0380 X:7E38 Y:0020 P:eNvMxdizC $80/9E60 9D 20 00 STA $0020,x[$7E:7E58] A:03FF X:7E38 Y:0020 P:eNvMxdizC $80/9E63 A5 8F LDA $8F [$00:008F] A:03FF X:7E38 Y:0020 P:eNvMxdizC $80/9E65 49 FF EOR #$FF A:0380 X:7E38 Y:0020 P:eNvMxdizC $80/9E67 3D 21 00 AND $0021,x[$7E:7E59] A:037F X:7E38 Y:0020 P:envMxdizC $80/9E6A 9D 21 00 STA $0021,x[$7E:7E59] A:037F X:7E38 Y:0020 P:envMxdizC $80/9E6D C2 20 REP #$20 A:0100 X:7E34 Y:0020 P:envMxdiZC $80/9E6F 60 RTS A:0100 X:7E34 Y:0020 P:envmxdiZC
$80/9E70 ? (Executed at startup)
$80/9F1F jumps here
$80/9E70 E2 20 SEP #$20 A:F000 X:7E06 Y:0 P:envmxdiZc $80/9E72 A5 91 LDA $91 [$00:0091] A:F000 X:7E06 Y:0 P:envMxdiZc $80/9E74 F0 10 BEQ $10 [$9E86] A:F0F0 X:7E06 Y:0 P:eNvMxdizc $80/9E76 49 FF EOR #$FF A:F0F0 X:7E06 Y:0 P:eNvMxdizc $80/9E78 3D 00 00 AND $0000,x[$7E:7E06] A:F00F X:7E06 Y:0 P:envMxdizc $80/9E7B 9D 00 00 STA $0000,x[$7E:7E06] A:F00F X:7E06 Y:0 P:envMxdizc $80/9E7E A5 91 LDA $91 [$00:0091] A:F00F X:7E06 Y:0 P:envMxdizc $80/9E80 1D 01 00 ORA $0001,x[$7E:7E07] A:F0F0 X:7E06 Y:0 P:eNvMxdizc $80/9E83 9D 01 00 STA $0001,x[$7E:7E07] A:F0FF X:7E06 Y:0 P:eNvMxdizc $80/9E86 A5 90 LDA $90 [$00:0090] A:F0FF X:7E06 Y:0 P:eNvMxdizc $80/9E88 F0 10 BEQ $10 [$9E9A] A:F000 X:7E06 Y:0 P:envMxdiZc $80/9E8A 49 FF EOR #$FF A:0080 X:7E06 Y:0020 P:eNvMxdizC $80/9E8C 3D 10 00 AND $0010,x[$7E:7E16] A:007F X:7E06 Y:0020 P:envMxdizC $80/9E8F 9D 10 00 STA $0010,x[$7E:7E16] A:007F X:7E06 Y:0020 P:envMxdizC $80/9E92 A5 90 LDA $90 [$00:0090] A:007F X:7E06 Y:0020 P:envMxdizC $80/9E94 1D 11 00 ORA $0011,x[$7E:7E17] A:0080 X:7E06 Y:0020 P:eNvMxdizC $80/9E97 9D 11 00 STA $0011,x[$7E:7E17] A:00FF X:7E06 Y:0020 P:eNvMxdizC $80/9E9A A5 8F LDA $8F [$00:008F] A:F000 X:7E06 Y:0 P:envMxdiZc $80/9E9C F0 10 BEQ $10 [$9EAE] A:F000 X:7E06 Y:0 P:envMxdiZc
code is missing here
$80/9EAE C2 20 REP #$20 A:F000 X:7E06 Y:0 P:envMxdiZc $80/9EB0 60 RTS A:F000 X:7E06 Y:0 P:envmxdiZc
$80/9EB1 ? (Executed at startup)
$80/9F1F jumps here
$80/9EB1 E2 20 SEP #$20 A:2100 X:7E06 Y:0 P:envmxdiZc $80/9EB3 A5 91 LDA $91 [$00:0091] A:2100 X:7E06 Y:0 P:envMxdiZc $80/9EB5 F0 0D BEQ $0D [$9EC4] A:2121 X:7E06 Y:0 P:envMxdizc $80/9EB7 EB XBA A:2121 X:7E06 Y:0 P:envMxdizc $80/9EB8 A5 91 LDA $91 [$00:0091] A:2121 X:7E06 Y:0 P:envMxdizc $80/9EBA C2 20 REP #$20 ; A = 16-bit $80/9EBC 1D 00 00 ORA $0000,x[$7E:7E06] A:2121 X:7E06 Y:0 P:envmxdizc $80/9EBF 9D 00 00 STA $0000,x[$7E:7E06] A:21FF X:7E06 Y:0 P:envmxdizc $80/9EC2 E2 20 SEP #$20 ; A = 8-bit $80/9EC4 A5 90 LDA $90 [$00:0090] A:21FF X:7E06 Y:0 P:envMxdizc $80/9EC6 F0 0D BEQ $0D [$9ED5] A:2100 X:7E06 Y:0 P:envMxdiZc $80/9EC8 EB XBA A:4FC0 X:7E0A Y:0 P:eNvMxdizc $80/9EC9 A5 90 LDA $90 [$00:0090] A:C04F X:7E0A Y:0 P:envMxdizc $80/9ECB C2 20 REP #$20 A:C0C0 X:7E0A Y:0 P:eNvMxdizc $80/9ECD 1D 10 00 ORA $0010,x[$7E:7E1A] A:C0C0 X:7E0A Y:0 P:eNvmxdizc $80/9ED0 9D 10 00 STA $0010,x[$7E:7E1A] A:C0FF X:7E0A Y:0 P:eNvmxdizc $80/9ED3 E2 20 SEP #$20 A:C0FF X:7E0A Y:0 P:eNvmxdizc $80/9ED5 A5 8F LDA $8F [$00:008F] A:2100 X:7E06 Y:0 P:envMxdiZc $80/9ED7 F0 0C BEQ $0C [$9EE5] A:2100 X:7E06 Y:0 P:envMxdiZc
code is missing here
$80/9EE5 C2 20 REP #$20 ; A = 16-bit $80/9EE7 60 RTS
$80/9F0B ?
These are pointers for the table at $80/9F13 which contains jump addresses that are set up in $88 at $80/9DDA.
$80/9F0B 00 00 ; Entry #$00 $80/9F0D 00 00 ; Entry #$01 $80/9F0F 04 00 ; Entry #$02 $80/9F11 00 00 ; Entry #$03
$80/9F13 ?
These are addresses that are set up in $88 at $80/9DDA. Pointers for this table are at $80/9F0B
$80/9F13 EE 9D ; Entry #$00 - $9DEE $80/9F15 2F 9E ; Entry #$01 - $9E2F $80/9F17 70 9E ; Entry #$02 - $9E70 $80/9F19 B1 9E ; Entry #$03 - $9EB1 $80/9F1B E8 9E ; Entry #$04 - $9EE8 $80/9F1D E8 9E ; Entry #$05 - $9EE8
$80/9F1F ? (Executed when talking to the aerial building and at startup)
$80/9F1F A4 92 LDY $92 [$00:0092] A:4200 X:7E34 Y:0002 P:envmxdizc $80/9F21 84 8E STY $8E [$00:008E] A:4200 X:7E34 Y:0020 P:envmxdizc $80/9F23 F0 05 BEQ $05 [$9F2A] A:4200 X:7E34 Y:0020 P:envmxdizc $80/9F25 4A LSR A A:4200 X:7E34 Y:0020 P:envmxdizc $80/9F26 66 8E ROR $8E [$00:008E] A:2100 X:7E34 Y:0020 P:envmxdizc $80/9F28 90 FB BCC $FB [$9F25] A:2100 X:7E34 Y:0020 P:envmxdizc $80/9F2A 85 90 STA $90 [$00:0090] A:0108 X:7E34 Y:0020 P:envmxdiZC $80/9F2C 6C 88 00 JMP ($0088)[$80:9E2F] A:0108 X:7E34 Y:0020 P:envmxdiZC
$80/9F2F ? (Executed at startup)
$80/9F2F F4 00 00 PEA $0000 A:0002 X:002E Y:000E P:envmxdizc $80/9F32 48 PHA A:0002 X:002E Y:000E P:envmxdizc $80/9F33 A3 03 LDA $03,s [$00:1E93] A:0002 X:002E Y:000E P:envmxdizc $80/9F35 0A ASL A A:0 X:002E Y:000E P:envmxdiZc $80/9F36 83 03 STA $03,s [$00:1E93] A:0 X:002E Y:000E P:envmxdiZc $80/9F38 0A ASL A A:0 X:002E Y:000E P:envmxdiZc $80/9F39 0A ASL A A:0 X:002E Y:000E P:envmxdiZc $80/9F3A 18 CLC A:0 X:002E Y:000E P:envmxdiZc $80/9F3B 63 03 ADC $03,s [$00:1E93] A:0 X:002E Y:000E P:envmxdiZc $80/9F3D 83 03 STA $03,s [$00:1E93] A:0 X:002E Y:000E P:envmxdiZc $80/9F3F A7 85 LDA [$85] [$94:A7CF] A:0 X:002E Y:000E P:envmxdiZc $80/9F41 29 FF 00 AND #$00FF A:3130 X:002E Y:000E P:envmxdizc $80/9F44 38 SEC A:0030 X:002E Y:000E P:envmxdizc $80/9F45 E9 30 00 SBC #$0030 A:0030 X:002E Y:000E P:envmxdizC $80/9F48 18 CLC A:0 X:002E Y:000E P:envmxdiZC $80/9F49 63 03 ADC $03,s [$00:1E93] A:0 X:002E Y:000E P:envmxdiZc $80/9F4B 83 03 STA $03,s [$00:1E93] A:0 X:002E Y:000E P:envmxdiZc $80/9F4D E6 85 INC $85 [$00:0085] A:0 X:002E Y:000E P:envmxdiZc $80/9F4F 68 PLA A:0 X:002E Y:000E P:eNvmxdizc $80/9F50 3A DEC A A:0002 X:002E Y:000E P:envmxdizc $80/9F51 D0 DF BNE $DF [$9F32] A:0001 X:002E Y:000E P:envmxdizc $80/9F53 68 PLA A:0 X:002E Y:000E P:envmxdiZc $80/9F54 60 RTS A:0001 X:002E Y:000E P:envmxdizc
$80/9F55 ? (Executed when talking to the aerial building)
$80/9F55 08 PHP A:00B0 X:0002 Y:000E P:envmxdizC $80/9F56 C2 30 REP #$30 A:00B0 X:0002 Y:000E P:envmxdizC $80/9F58 A7 85 LDA [$85] [$88:A1E1] A:00B0 X:0002 Y:000E P:envmxdizC $80/9F5A 29 FF 00 AND #$00FF A:4081 X:0002 Y:000E P:envmxdizC $80/9F5D AA TAX A:0081 X:0002 Y:000E P:envmxdizC $80/9F5E BF FD A2 80 LDA $80A2FD,x[$80:A37E] A:0081 X:0081 Y:000E P:envmxdizC $80/9F62 29 FF 00 AND #$00FF A:0202 X:0081 Y:000E P:envmxdizC $80/9F65 0A ASL A A:0002 X:0081 Y:000E P:envmxdizC $80/9F66 AA TAX A:0004 X:0081 Y:000E P:envmxdizc $80/9F67 7C 6A 9F JMP ($9F6A,x)[$80:9FE5] A:0004 X:0004 Y:000E P:envmxdizc
$80/9F6A Jump Table for $80/9F55
F8 A2 85 9F E5 9F 41 A0 17 A2 84 A0 B6 A1 7A 9F 82 9A 02
$80/9F7D ? (Executed when talking to the aerial building and at startup)
At startup the BEQ-branch is not taken, while talking with the aerial building, it is.
$80/9F7D AD 3D 07 LDA $073D [$80:073D] A:002A X:823A Y:0018 P:eNvmxdizc $80/9F80 F0 D6 BEQ $D6 [$9F58] A:0000 X:823A Y:0018 P:envmxdiZc $80/9F82 82 B3 02 BRL $02B3 [$A238] A:0002 X:820A Y:0018 P:envmxdizc
$80/9F85 ? (Executed when talking to the aerial building and at startup)
$80/9F85 AD 44 07 LDA $0744 [$80:0744] A:0002 X:0002 Y:000E P:envmxdizc $80/9F88 89 01 00 BIT #$0001 A:0000 X:0002 Y:000E P:envmxdiZc $80/9F8B F0 12 BEQ $12 [$9F9F] A:0000 X:0002 Y:000E P:envmxdiZc
code is missing here
$80/9F9F A7 85 LDA [$85] [$88:A1E5] A:0000 X:0002 Y:000E P:envmxdiZc $80/9FA1 29 FF 00 AND #$00FF A:9520 X:0002 Y:000E P:eNvmxdizc $80/9FA4 C9 20 00 CMP #$0020 A:0020 X:0002 Y:000E P:envmxdizc $80/9FA7 F0 23 BEQ $23 [$9FCC] A:0020 X:0002 Y:000E P:envmxdiZC $80/9FA9 18 CLC A:002F X:0002 Y:0018 P:envmxdizC $80/9FAA 69 1F 85 ADC #$851F A:002F X:0002 Y:0018 P:envmxdizc $80/9FAD 22 89 9C 80 JSL $809C89[$80:9C89] A:854E X:0002 Y:0018 P:eNvmxdizc $80/9FB1 B0 17 BCS $17 [$9FCA] A:0018 X:0020 Y:0018 P:eNvmxdizc $80/9FB3 AD 35 07 LDA $0735 [$80:0735] A:0018 X:0020 Y:0018 P:eNvmxdizc $80/9FB6 18 CLC A:000C X:0020 Y:0018 P:envmxdizc $80/9FB7 6D 39 07 ADC $0739 [$80:0739] A:000C X:0020 Y:0018 P:envmxdizc $80/9FBA CD 1F 07 CMP $071F [$80:071F] A:0012 X:0020 Y:0018 P:envmxdizc $80/9FBD F0 05 BEQ $05 [$9FC4] A:0012 X:0020 Y:0018 P:eNvmxdizc $80/9FBF 90 03 BCC $03 [$9FC4] A:0012 X:0020 Y:0018 P:eNvmxdizc $80/9FC4 22 83 A7 80 JSL $80A783[$80:A783] A:0012 X:0020 Y:0018 P:eNvmxdizc $80/9FC8 E6 85 INC $85 [$00:0085] A:0012 X:821A Y:0018 P:eNvmxdizc $80/9FCA 80 B1 BRA $B1 [$9F7D] A:0012 X:821A Y:0018 P:eNvmxdizc $80/9FCC AD 35 07 LDA $0735 [$80:0735] A:0020 X:0002 Y:000E P:envmxdiZC $80/9FCF 18 CLC A:0018 X:0002 Y:000E P:envmxdizC $80/9FD0 69 06 00 ADC #$0006 A:0018 X:0002 Y:000E P:envmxdizc $80/9FD3 CD 1F 07 CMP $071F [$80:071F] A:001E X:0002 Y:000E P:envmxdizc $80/9FD6 F0 05 BEQ $05 [$9FDD] A:001E X:0002 Y:000E P:eNvmxdizc $80/9FD8 90 03 BCC $03 [$9FDD] A:001E X:0002 Y:000E P:eNvmxdizc $80/9FDD 8D 35 07 STA $0735 [$80:0735] A:001E X:0002 Y:000E P:eNvmxdizc $80/9FE0 E6 85 INC $85 [$00:0085] A:001E X:0002 Y:000E P:eNvmxdizc $80/9FE2 82 73 FF BRL $FF73 [$9F58] A:001E X:0002 Y:000E P:eNvmxdizc
$80/9FE5 ? (Executed when talking to the aerial building and at startup)
$80/9FE5 AD 44 07 LDA $0744 [$80:0744] A:0004 X:0004 Y:000E P:envmxdizc $80/9FE8 89 01 00 BIT #$0001 A:0000 X:0004 Y:000E P:envmxdiZc $80/9FEB F0 0F BEQ $0F [$9FFC] A:0000 X:0004 Y:000E P:envmxdiZc $80/9FED AD 35 07 LDA $0735 [$80:0735] A:0001 X:0004 Y:000E P:envmxdizc $80/9FF0 18 CLC A:0 X:0004 Y:000E P:envmxdiZc $80/9FF1 69 0F 00 ADC #$000F A:0 X:0004 Y:000E P:envmxdiZc $80/9FF4 29 F0 FF AND #$FFF0 A:000F X:0004 Y:000E P:envmxdizc $80/9FF7 1A INC A A:0 X:0004 Y:000E P:envmxdiZc $80/9FF8 1A INC A A:0001 X:0004 Y:000E P:envmxdizc $80/9FF9 8D 35 07 STA $0735 [$80:0735] A:0002 X:0004 Y:000E P:envmxdizc $80/9FFC A7 85 LDA [$85] [$88:A1E1] A:0000 X:0004 Y:000E P:envmxdiZc $80/9FFE EB XBA A:4081 X:0004 Y:000E P:envmxdizc $80/9FFF C9 40 81 CMP #$8140 A:8140 X:0004 Y:000E P:envmxdizc $80/A002 F0 22 BEQ $22 [$A026] A:8140 X:0004 Y:000E P:envmxdiZC $80/A004 22 89 9C 80 JSL $809C89[$80:9C89] A:95FA X:0004 Y:000E P:envmxdizC $80/A008 B0 19 BCS $19 ; [$A023] Branch=Exit=Loop if Error Flag is set $80/A00A AD 35 07 LDA $0735 [$80:0735] A:0018 X:0038 Y:000E P:eNvmxdizc $80/A00D 18 CLC A:001E X:0038 Y:000E P:envmxdizc $80/A00E 6D 39 07 ADC $0739 [$80:0739] A:001E X:0038 Y:000E P:envmxdizc $80/A011 CD 1F 07 CMP $071F [$80:071F] A:002A X:0038 Y:000E P:envmxdizc $80/A014 F0 05 BEQ $05 [$A01B] A:002A X:0038 Y:000E P:eNvmxdizc $80/A016 90 03 BCC $03 [$A01B] A:002A X:0038 Y:000E P:eNvmxdizc $80/A01B 22 83 A7 80 JSL $80A783[$80:A783] A:002A X:0038 Y:000E P:eNvmxdizc $80/A01F E6 85 INC $85 [$00:0085] A:002A X:823A Y:0018 P:eNvmxdizc $80/A021 E6 85 INC $85 [$00:0085] A:002A X:823A Y:0018 P:eNvmxdizc $80/A023 82 57 FF BRL $FF57 [$9F7D] A:002A X:823A Y:0018 P:eNvmxdizc
$80/A026 AD 35 07 LDA $0735 [$80:0735] A:8140 X:0004 Y:000E P:envmxdiZC $80/A029 18 CLC A:0000 X:0004 Y:000E P:envmxdiZC $80/A02A 69 0C 00 ADC #$000C A:0000 X:0004 Y:000E P:envmxdiZc $80/A02D CD 1F 07 CMP $071F [$80:071F] A:000C X:0004 Y:000E P:envmxdizc $80/A030 F0 05 BEQ $05 [$A037] A:000C X:0004 Y:000E P:eNvmxdizc $80/A032 90 03 BCC $03 [$A037] A:000C X:0004 Y:000E P:eNvmxdizc $80/A037 8D 35 07 STA $0735 [$80:0735] A:000C X:0004 Y:000E P:eNvmxdizc $80/A03A E6 85 INC $85 [$00:0085] A:000C X:0004 Y:000E P:eNvmxdizc $80/A03C E6 85 INC $85 [$00:0085] A:000C X:0004 Y:000E P:eNvmxdizc $80/A03E 82 17 FF BRL $FF17 [$9F58] A:000C X:0004 Y:000E P:eNvmxdizc
$80/A084 ?
$80/A084 E6 85 INC $85 [$00:0085] A:000A X:000A Y:000E P:envmxdizc $80/A086 A7 85 LDA [$85] [$94:B757] A:000A X:000A Y:000E P:eNvmxdizc $80/A088 29 FF 00 AND #$00FF A:7D73 X:000A Y:000E P:envmxdizc $80/A08B C9 5C 00 CMP #$005C A:0073 X:000A Y:000E P:envmxdizc $80/A08E F0 2E BEQ $2E [$A0BE] A:0073 X:000A Y:000E P:envmxdizC $80/A090 C9 62 00 CMP #$0062 A:0073 X:000A Y:000E P:envmxdizC $80/A093 F0 23 BEQ $23 [$A0B8] A:0073 X:000A Y:000E P:envmxdizC $80/A095 C9 63 00 CMP #$0063 A:0073 X:000A Y:000E P:envmxdizC $80/A098 F0 2D BEQ $2D [$A0C7] A:0073 X:000A Y:000E P:envmxdizC $80/A09A C9 64 00 CMP #$0064 A:0073 X:000A Y:000E P:envmxdizC $80/A09D F0 36 BEQ $36 [$A0D5] A:0073 X:000A Y:000E P:envmxdizC $80/A09F C9 44 00 CMP #$0044 A:0073 X:000A Y:000E P:envmxdizC $80/A0A2 F0 37 BEQ $37 [$A0DB] A:0073 X:000A Y:000E P:envmxdizC $80/A0A4 C9 65 00 CMP #$0065 A:0073 X:000A Y:000E P:envmxdizC $80/A0A7 F0 0A BEQ $0A [$A0B3] A:0073 X:000A Y:000E P:envmxdizC $80/A0A9 C9 67 00 CMP #$0067 A:0073 X:000A Y:000E P:envmxdizC $80/A0AC F0 13 BEQ $13 [$A0C1] A:0073 X:000A Y:000E P:envmxdizC $80/A0AE C9 73 00 CMP #$0073 A:0073 X:000A Y:000E P:envmxdizC $80/A0B1 F0 11 BEQ $11 [$A0C4] A:0073 X:000A Y:000E P:envmxdiZC $80/A0B3 C6 85 DEC $85 [$00:0085] A:0078 X:000A Y:0018 P:envmxdizC $80/A0B5 82 5F 01 BRL $015F [$A217] A:0078 X:000A Y:0018 P:eNvmxdizC
code is missing here
$80/A0C4 82 D1 00 BRL $00D1 [$A198] A:0073 X:000A Y:000E P:envmxdiZC $80/A0C7 E6 85 INC $85 [$00:0085] A:0063 X:000A Y:0 P:envmxdiZC $80/A0C9 A9 02 00 LDA #$0002 A:0063 X:000A Y:0 P:eNvmxdizC $80/A0CC 20 2F 9F JSR $9F2F [$80:9F2F] A:0002 X:000A Y:0 P:envmxdizC $80/A0CF 8D 23 07 STA $0723 [$80:0723] A:0002 X:000A Y:0 P:envmxdizc $80/A0D2 82 83 FE BRL $FE83 [$9F58] A:0002 X:000A Y:0 P:envmxdizc
code is missing here
$80/A198 E6 85 INC $85 [$00:0085] A:0073 X:000A Y:000E P:envmxdiZC $80/A19A A5 86 LDA $86 [$00:0086] A:0073 X:000A Y:000E P:eNvmxdizC $80/A19C 8D 40 07 STA $0740 [$80:0740] A:94B7 X:000A Y:000E P:eNvmxdizC $80/A19F A5 85 LDA $85 [$00:0085] A:94B7 X:000A Y:000E P:eNvmxdizC $80/A1A1 1A INC A A:B758 X:000A Y:000E P:eNvmxdizC $80/A1A2 1A INC A A:B759 X:000A Y:000E P:eNvmxdizC $80/A1A3 1A INC A A:B75A X:000A Y:000E P:eNvmxdizC $80/A1A4 8D 3F 07 STA $073F [$80:073F] A:B75B X:000A Y:000E P:eNvmxdizC $80/A1A7 A7 85 LDA [$85] [$94:B758] A:B75B X:000A Y:000E P:eNvmxdizC $80/A1A9 48 PHA A:067D X:000A Y:000E P:envmxdizC $80/A1AA E6 85 INC $85 [$00:0085] A:067D X:000A Y:000E P:envmxdizC $80/A1AC A7 85 LDA [$85] [$94:B759] A:067D X:000A Y:000E P:eNvmxdizC $80/A1AE 85 86 STA $86 [$00:0086] A:0006 X:000A Y:000E P:envmxdizC $80/A1B0 68 PLA A:0006 X:000A Y:000E P:envmxdizC $80/A1B1 85 85 STA $85 [$00:0085] A:067D X:000A Y:000E P:envmxdizC $80/A1B3 82 A2 FD BRL $FDA2 [$9F58] A:067D X:000A Y:000E P:envmxdizC
code is missing here
$80/A21F AD 40 07 LDA $0740 [$80:0740] A:B7FF X:0008 Y:000E P:eNvmxdizc $80/A222 85 86 STA $86 [$00:0086] A:94B7 X:0008 Y:000E P:eNvmxdizc $80/A224 AD 3F 07 LDA $073F [$80:073F] A:94B7 X:0008 Y:000E P:eNvmxdizc $80/A227 85 85 STA $85 [$00:0085] A:B75B X:0008 Y:000E P:eNvmxdizc $80/A229 9C 3F 07 STZ $073F [$80:073F] A:B75B X:0008 Y:000E P:eNvmxdizc $80/A22C 9C 40 07 STZ $0740 [$80:0740] A:B75B X:0008 Y:000E P:eNvmxdizc $80/A22F 82 26 FD BRL $FD26 [$9F58] A:B75B X:0008 Y:000E P:eNvmxdizc
code is missing here
$80/A244 82 AE 00 BRL $00AE [$A2F5] A:0 X:0008 Y:000E P:envmxdiZC
$80/A217 ? (Executed when talking to the aerial building and at startup)
$80/A217 AD 3F 07 LDA $073F [$80:073F] A:0008 X:0008 Y:0018 P:envmxdizc $80/A21A 0D 40 07 ORA $0740 [$80:0740] A:0000 X:0008 Y:0018 P:envmxdiZc $80/A21D F0 19 BEQ $19 [$A238] A:0000 X:0008 Y:0018 P:envmxdiZc
code is missing here
$80/A238 28 PLP A:0000 X:0008 Y:0018 P:envmxdiZc $80/A239 C2 40 REP #$40 A:0000 X:0008 Y:0018 P:envmxdizC $80/A23B 08 PHP A:0000 X:0008 Y:0018 P:envmxdizC $80/A23C AD 35 07 LDA $0735 [$80:0735] A:0000 X:0008 Y:0018 P:envmxdizC $80/A23F CD 37 07 CMP $0737 [$80:0737] A:0060 X:0008 Y:0018 P:envmxdizC $80/A242 D0 03 BNE $03 [$A247] A:0060 X:0008 Y:0018 P:envmxdizC
code is missing here
$80/A247 E2 10 SEP #$10 A:0060 X:0008 Y:0018 P:envmxdizC $80/A249 AD 2F 07 LDA $072F [$80:072F] A:0060 X:0008 Y:0018 P:envmXdizC $80/A24C 29 FF 03 AND #$03FF A:20B0 X:0008 Y:0018 P:envmXdizC $80/A24F 0A ASL A A:00B0 X:0008 Y:0018 P:envmXdizC $80/A250 0A ASL A A:0160 X:0008 Y:0018 P:envmXdizc $80/A251 0A ASL A A:02C0 X:0008 Y:0018 P:envmXdizc $80/A252 18 CLC A:0580 X:0008 Y:0018 P:envmXdizc $80/A253 6D 27 07 ADC $0727 [$80:0727] A:0580 X:0008 Y:0018 P:envmXdizc $80/A256 48 PHA A:5580 X:0008 Y:0018 P:envmXdizc $80/A257 A2 80 LDX #$80 A:5580 X:0008 Y:0018 P:envmXdizc $80/A259 DA PHX A:5580 X:0080 Y:0018 P:eNvmXdizc $80/A25A AE 21 07 LDX $0721 [$80:0721] A:5580 X:0080 Y:0018 P:eNvmXdizc $80/A25D AD 37 07 LDA $0737 [$80:0737] A:5580 X:0002 Y:0018 P:envmXdizc $80/A260 3F FD A3 80 AND $80A3FD,x[$80:A3FF] A:0000 X:0002 Y:0018 P:envmXdiZc $80/A264 48 PHA A:0000 X:0002 Y:0018 P:envmXdiZc $80/A265 AD 35 07 LDA $0735 [$80:0735] A:0000 X:0002 Y:0018 P:envmXdiZc $80/A268 38 SEC A:0060 X:0002 Y:0018 P:envmXdizc $80/A269 E3 01 SBC $01,s [$00:1E8C] A:0060 X:0002 Y:0018 P:envmXdizC $80/A26B 18 CLC A:0060 X:0002 Y:0018 P:envmXdizC $80/A26C 7F 05 A4 80 ADC $80A405,x[$80:A407] A:0060 X:0002 Y:0018 P:envmXdizc $80/A270 3F FD A3 80 AND $80A3FD,x[$80:A3FF] A:0067 X:0002 Y:0018 P:envmXdizc $80/A274 0A ASL A A:0060 X:0002 Y:0018 P:envmXdizc $80/A275 83 01 STA $01,s [$00:1E8C] A:00C0 X:0002 Y:0018 P:envmXdizc $80/A277 A2 7E LDX #$7E A:00C0 X:0002 Y:0018 P:envmXdizc $80/A279 DA PHX A:00C0 X:007E Y:0018 P:envmXdizc $80/A27A AE 21 07 LDX $0721 [$80:0721] A:00C0 X:007E Y:0018 P:envmXdizc $80/A27D AD 37 07 LDA $0737 [$80:0737] A:00C0 X:0002 Y:0018 P:envmXdizc $80/A280 3F FD A3 80 AND $80A3FD,x[$80:A3FF] A:0000 X:0002 Y:0018 P:envmXdiZc $80/A284 0A ASL A A:0000 X:0002 Y:0018 P:envmXdiZc $80/A285 18 CLC A:0000 X:0002 Y:0018 P:envmXdiZc $80/A286 69 00 7E ADC #$7E00 A:0000 X:0002 Y:0018 P:envmXdiZc $80/A289 48 PHA A:7E00 X:0002 Y:0018 P:envmXdizc $80/A28A A2 02 LDX #$02 A:7E00 X:0002 Y:0018 P:envmXdizc $80/A28C DA PHX A:7E00 X:0002 Y:0018 P:envmXdizc $80/A28D C2 10 REP #$10 A:7E00 X:0002 Y:0018 P:envmXdizc $80/A28F BA TSX A:7E00 X:0002 Y:0018 P:envmxdizc $80/A290 E8 INX A:7E00 X:1E87 Y:0018 P:envmxdizc $80/A291 A9 00 00 LDA #$0000 A:7E00 X:1E88 Y:0018 P:envmxdizc $80/A294 22 2A 8C 80 JSL $808C2A[$80:8C2A] A:0000 X:1E88 Y:0018 P:envmxdiZc $80/A298 3B TSC A:0000 X:1E88 Y:0018 P:envmxdiZc $80/A299 18 CLC A:1E87 X:1E88 Y:0018 P:envmxdizc $80/A29A 69 09 00 ADC #$0009 A:1E87 X:1E88 Y:0018 P:envmxdizc $80/A29D 1B TCS A:1E90 X:1E88 Y:0018 P:envmxdizc $80/A29E E2 10 SEP #$10 A:1E90 X:1E88 Y:0018 P:envmxdizc $80/A2A0 AD 31 07 LDA $0731 [$80:0731] A:1E90 X:0088 Y:0018 P:envmXdizc $80/A2A3 29 FF 03 AND #$03FF A:20BC X:0088 Y:0018 P:envmXdizc $80/A2A6 0A ASL A A:00BC X:0088 Y:0018 P:envmXdizc $80/A2A7 0A ASL A A:0178 X:0088 Y:0018 P:envmXdizc $80/A2A8 0A ASL A A:02F0 X:0088 Y:0018 P:envmXdizc $80/A2A9 18 CLC A:05E0 X:0088 Y:0018 P:envmXdizc $80/A2AA 6D 27 07 ADC $0727 [$80:0727] A:05E0 X:0088 Y:0018 P:envmXdizc $80/A2AD 48 PHA A:55E0 X:0088 Y:0018 P:envmXdizc $80/A2AE A2 80 LDX #$80 A:55E0 X:0088 Y:0018 P:envmXdizc $80/A2B0 DA PHX A:55E0 X:0080 Y:0018 P:eNvmXdizc $80/A2B1 AE 21 07 LDX $0721 [$80:0721] A:55E0 X:0080 Y:0018 P:eNvmXdizc $80/A2B4 AD 37 07 LDA $0737 [$80:0737] A:55E0 X:0002 Y:0018 P:envmXdizc $80/A2B7 3F FD A3 80 AND $80A3FD,x[$80:A3FF] A:0000 X:0002 Y:0018 P:envmXdiZc $80/A2BB 48 PHA A:0000 X:0002 Y:0018 P:envmXdiZc $80/A2BC AD 35 07 LDA $0735 [$80:0735] A:0000 X:0002 Y:0018 P:envmXdiZc $80/A2BF 38 SEC A:0060 X:0002 Y:0018 P:envmXdizc $80/A2C0 E3 01 SBC $01,s [$00:1E8C] A:0060 X:0002 Y:0018 P:envmXdizC $80/A2C2 18 CLC A:0060 X:0002 Y:0018 P:envmXdizC $80/A2C3 7F 05 A4 80 ADC $80A405,x[$80:A407] A:0060 X:0002 Y:0018 P:envmXdizc $80/A2C7 3F FD A3 80 AND $80A3FD,x[$80:A3FF] A:0067 X:0002 Y:0018 P:envmXdizc $80/A2CB 0A ASL A A:0060 X:0002 Y:0018 P:envmXdizc $80/A2CC 83 01 STA $01,s [$00:1E8C] A:00C0 X:0002 Y:0018 P:envmXdizc $80/A2CE A2 7E LDX #$7E A:00C0 X:0002 Y:0018 P:envmXdizc $80/A2D0 DA PHX A:00C0 X:007E Y:0018 P:envmXdizc $80/A2D1 AE 21 07 LDX $0721 [$80:0721] A:00C0 X:007E Y:0018 P:envmXdizc $80/A2D4 AD 37 07 LDA $0737 [$80:0737] A:00C0 X:0002 Y:0018 P:envmXdizc $80/A2D7 3F FD A3 80 AND $80A3FD,x[$80:A3FF] A:0000 X:0002 Y:0018 P:envmXdiZc $80/A2DB 0A ASL A A:0000 X:0002 Y:0018 P:envmXdiZc $80/A2DC 18 CLC A:0000 X:0002 Y:0018 P:envmXdiZc $80/A2DD 69 00 82 ADC #$8200 A:0000 X:0002 Y:0018 P:envmXdiZc $80/A2E0 48 PHA A:8200 X:0002 Y:0018 P:eNvmXdizc $80/A2E1 A2 02 LDX #$02 A:8200 X:0002 Y:0018 P:eNvmXdizc $80/A2E3 DA PHX A:8200 X:0002 Y:0018 P:envmXdizc $80/A2E4 C2 10 REP #$10 A:8200 X:0002 Y:0018 P:envmXdizc $80/A2E6 BA TSX A:8200 X:0002 Y:0018 P:envmxdizc $80/A2E7 E8 INX A:8200 X:1E87 Y:0018 P:envmxdizc $80/A2E8 A9 00 00 LDA #$0000 A:8200 X:1E88 Y:0018 P:envmxdizc $80/A2EB 22 2A 8C 80 JSL $808C2A[$80:8C2A] A:0000 X:1E88 Y:0018 P:envmxdiZc $80/A2EF 3B TSC A:0000 X:1E88 Y:0018 P:envmxdiZc $80/A2F0 18 CLC A:1E87 X:1E88 Y:0018 P:envmxdizc $80/A2F1 69 09 00 ADC #$0009 A:1E87 X:1E88 Y:0018 P:envmxdizc $80/A2F4 1B TCS A:1E90 X:1E88 Y:0018 P:envmxdizc $80/A2F5 28 PLP A:1E90 X:1E88 Y:0018 P:envmxdizc $80/A2F6 18 CLC A:1E90 X:1E88 Y:0018 P:envmxdizC $80/A2F7 6B RTL A:1E90 X:1E88 Y:0018 P:envmxdizc
$80/A605 AD 35 07 LDA $0735 [$80:0735] A:1E90 X:1E88 Y:0018 P:envmxdizc $80/A608 CD 37 07 CMP $0737 [$80:0737] A:0060 X:1E88 Y:0018 P:envmxdizc $80/A60B F0 6A BEQ $6A ; [$A677] Exit if equal $80/A60D A9 00 7E LDA #$7E00 ; Setup two Textbox Tiles write addressses in $88-A and $8B-D $80/A610 85 89 STA $89 ; $88-A = $7E/7600, $8B-D = $7E/7640 (same row, one column below) $80/A612 85 8C STA $8C $80/A614 A9 00 76 LDA #$7600 $80/A617 85 88 STA $88 $80/A619 18 CLC $80/A61A 69 40 00 ADC #$0040 $80/A61D 85 8B STA $8B $80/A61F AD 2D 07 LDA $072D ; Load Textbox Position in Column and multiply by #$20 $80/A622 0A ASL A $80/A623 0A ASL A $80/A624 0A ASL A $80/A625 0A ASL A $80/A626 0A ASL A $80/A627 18 CLC ; Add Position in Row $80/A628 6D 2B 07 ADC $072B $80/A62B 0A ASL A ; Multiply by 2 (each value is 2 bytes in size) $80/A62C A8 TAY ; Transfer Offset in Y $80/A62D AE 21 07 LDX $0721 [$80:0721] A:0404 X:1E88 Y:0404 P:envmxdizc $80/A630 7C 33 A6 JMP ($A633,x)[$80:A63B] A:0404 X:0002 Y:0404 P:envmxdizc
$80/A633 Jump Table for $80/A605
3B A6 3B A6 3B A6 78 A6
$80/A63B AD 37 07 LDA $0737 [$80:0737] A:0404 X:0002 Y:0404 P:envmxdizc $80/A63E 29 F8 FF AND #$FFF8 A:0000 X:0002 Y:0404 P:envmxdiZc $80/A641 48 PHA A:0000 X:0002 Y:0404 P:envmxdiZc $80/A642 AD 35 07 LDA $0735 [$80:0735] A:0000 X:0002 Y:0404 P:envmxdiZc $80/A645 38 SEC A:0060 X:0002 Y:0404 P:envmxdizc $80/A646 E3 01 SBC $01,s [$00:1E8F] A:0060 X:0002 Y:0404 P:envmxdizC $80/A648 FA PLX A:0060 X:0002 Y:0404 P:envmxdizC $80/A649 18 CLC A:0060 X:0000 Y:0404 P:envmxdiZC $80/A64A 69 07 00 ADC #$0007 ; (Div by 8, always round up) $80/A64D 4A LSR A $80/A64E 4A LSR A $80/A64F 4A LSR A $80/A650 AA TAX ; Transfer in X as Loop Counter $80/A651 AD 2F 07 LDA $072F [$80:072F] A:000C X:000C Y:0404 P:envmxdizC $80/A654 97 88 STA [$88],y[$7E:7A04] A:20B0 X:000C Y:0404 P:envmxdizC $80/A656 AD 31 07 LDA $0731 [$80:0731] A:20B0 X:000C Y:0404 P:envmxdizC $80/A659 97 8B STA [$8B],y[$7E:7A44] A:20BC X:000C Y:0404 P:envmxdizC $80/A65B EE 2F 07 INC $072F [$80:072F] A:20BC X:000C Y:0404 P:envmxdizC $80/A65E EE 31 07 INC $0731 [$80:0731] A:20BC X:000C Y:0404 P:envmxdizC $80/A661 C8 INY A:20BC X:000C Y:0404 P:envmxdizC $80/A662 C8 INY A:20BC X:000C Y:0405 P:envmxdizC $80/A663 EE 2B 07 INC $072B ; Increment Position in Row (X-coordinate) $80/A666 CA DEX ; Decrement Loop Counter $80/A667 D0 E8 BNE $E8 ; [$A651] Loop until it runs out $80/A669 AD 44 07 LDA $0744 [$80:0744] A:20C7 X:0000 Y:041C P:envmxdiZC $80/A66C 89 02 00 BIT #$0002 A:0000 X:0000 Y:041C P:envmxdiZC $80/A66F D0 06 BNE $06 [$A677] A:0000 X:0000 Y:041C P:envmxdiZC $80/A671 A9 01 00 LDA #$0001 ; Set Flag for VRAM update $80/A674 8D 42 07 STA $0742 $80/A677 6B RTL
$80/A6BD AD 35 07 LDA $0735 [$80:0735] A:0081 X:0000 Y:000E P:envmxdizC $80/A6C0 8D 37 07 STA $0737 [$80:0737] A:0000 X:0000 Y:000E P:envmxdiZC $80/A6C3 AE 21 07 LDX $0721 [$80:0721] A:0000 X:0000 Y:000E P:envmxdiZC $80/A6C6 3F F9 A6 80 AND $80A6F9,x[$80:A6FB] A:0000 X:0002 Y:000E P:envmxdizC $80/A6CA F0 19 BEQ $19 [$A6E5] A:0000 X:0002 Y:000E P:envmxdiZC $80/A6CC CE 2B 07 DEC $072B ; Decrement Position in Row (X-Coordinate) $80/A6CF AD 2F 07 LDA $072F [$80:072F] A:0004 X:0002 Y:00CA P:envmxdizC $80/A6D2 38 SEC A:3CCF X:0002 Y:00CA P:envmxdizC $80/A6D3 FF 01 A7 80 SBC $80A701,x[$80:A703] A:3CCF X:0002 Y:00CA P:envmxdizC $80/A6D7 8D 2F 07 STA $072F [$80:072F] A:3CCE X:0002 Y:00CA P:envmxdizC $80/A6DA AD 31 07 LDA $0731 [$80:0731] A:3CCE X:0002 Y:00CA P:envmxdizC $80/A6DD 38 SEC A:3CEB X:0002 Y:00CA P:envmxdizC $80/A6DE FF 01 A7 80 SBC $80A701,x[$80:A703] A:3CEB X:0002 Y:00CA P:envmxdizC $80/A6E2 8D 31 07 STA $0731 [$80:0731] A:3CEA X:0002 Y:00CA P:envmxdizC $80/A6E5 AD 2F 07 LDA $072F [$80:072F] A:0000 X:0002 Y:000E P:envmxdiZC $80/A6E8 29 FF 03 AND #$03FF A:20B0 X:0002 Y:000E P:envmxdizC $80/A6EB 8D 33 07 STA $0733 [$80:0733] A:00B0 X:0002 Y:000E P:envmxdizC $80/A6EE 22 55 9F 80 JSL $809F55[$80:9F55] A:00B0 X:0002 Y:000E P:envmxdizC $80/A6F2 08 PHP ; Buffer Flag Register value on stack $80/A6F3 22 05 A6 80 JSL $80A605[$80:A605] A:1E90 X:1E88 Y:0018 P:envmxdizc $80/A6F7 28 PLP ; Restore Flag Register value $80/A6F8 6B RTL
$80/A6F9 Data for $80/A6BD
07 00 07 00 07 00 0F 00 01 00 01 00 01 00 02 00
$80/A709 ?
$80/A709 08 PHP ; Buffer Flag Register value on stack $80/A70A C2 30 REP #$30 ; A/X/Y = 16-bit $80/A70C A9 00 80 LDA #$8000 A:0010 X:00FF Y:0 P:eNvmxdIzC $80/A70F 8D 1D 07 STA $071D [$80:071D] A:8000 X:00FF Y:0 P:eNvmxdIzC $80/A712 A9 63 A7 LDA #$A763 A:8000 X:00FF Y:0 P:eNvmxdIzC $80/A715 8D 1C 07 STA $071C [$80:071C] A:A763 X:00FF Y:0 P:eNvmxdIzC $80/A718 A9 00 00 LDA #$0000 ; Clear $7E/7600 to $7E/7DFF $80/A71B 22 23 9C 80 JSL $809C23 ; Store A into $7E/7600 to $7E/7DFF $80/A71F A9 01 00 LDA #$0001 ; Set Flag for VRAM update $80/A722 8D 42 07 STA $0742 $80/A725 A9 02 00 LDA #$0002 A:0001 X:FFFE Y:0 P:envmxdIzC $80/A728 8D 21 07 STA $0721 [$80:0721] A:0002 X:FFFE Y:0 P:envmxdIzC $80/A72B 9C 2F 07 STZ $072F [$80:072F] A:0002 X:FFFE Y:0 P:envmxdIzC $80/A72E 9C 31 07 STZ $0731 [$80:0731] A:0002 X:FFFE Y:0 P:envmxdIzC $80/A731 9C 2B 07 STZ $072B ; Clear Textbox X-Position $80/A734 9C 2D 07 STZ $072D ; Clear Textbox Y-Position $80/A737 A9 01 00 LDA #$0001 A:0002 X:FFFE Y:0 P:envmxdIzC $80/A73A 8D 23 07 STA $0723 [$80:0723] A:0001 X:FFFE Y:0 P:envmxdIzC $80/A73D 9C 25 07 STZ $0725 [$80:0725] A:0001 X:FFFE Y:0 P:envmxdIzC $80/A740 9C 3D 07 STZ $073D [$80:073D] A:0001 X:FFFE Y:0 P:envmxdIzC $80/A743 9C 27 07 STZ $0727 [$80:0727] A:0001 X:FFFE Y:0 P:envmxdIzC $80/A746 9C 29 07 STZ $0729 [$80:0729] A:0001 X:FFFE Y:0 P:envmxdIzC $80/A749 9C 44 07 STZ $0744 [$80:0744] A:0001 X:FFFE Y:0 P:envmxdIzC $80/A74C A9 E0 00 LDA #$00E0 A:0001 X:FFFE Y:0 P:envmxdIzC $80/A74F 8D 1F 07 STA $071F [$80:071F] A:00E0 X:FFFE Y:0 P:envmxdIzC $80/A752 9C 92 0B STZ $0B92 [$80:0B92] A:00E0 X:FFFE Y:0 P:envmxdIzC $80/A755 9C 98 0B STZ $0B98 [$80:0B98] A:00E0 X:FFFE Y:0 P:envmxdIzC $80/A758 9C 9E 0B STZ $0B9E [$80:0B9E] A:00E0 X:FFFE Y:0 P:envmxdIzC $80/A75B 9C 3F 07 STZ $073F [$80:073F] A:00E0 X:FFFE Y:0 P:envmxdIzC $80/A75E 9C 40 07 STZ $0740 [$80:0740] A:00E0 X:FFFE Y:0 P:envmxdIzC $80/A761 28 PLP ; Restore Flag Register value $80/A762 6B RTL
$80/A783 08 PHP ; Buffer Flag Register value on stack $80/A784 C2 30 REP #$30 ; A/X/Y = 16-bit $80/A786 20 DA 9D JSR $9DDA [$80:9DDA] A:002A X:0038 Y:000E P:eNvmxdizc $80/A789 AD 35 07 LDA $0735 [$80:0735] A:9E2F X:0002 Y:000E P:eNvmxdizc $80/A78C 29 07 00 AND #$0007 ; This part here turns the number now in A into a value where... $80/A78F 0A ASL A ; ... the corresponding bit is set: #$01 = #$01, #$03 = #$04, ... $80/A790 AA TAX ; ... #$04 = #$08, #$05 = #$10 and so on $80/A791 BF FB A7 80 LDA $80A7FB,x $80/A795 85 92 STA $92 ; Store this value in $92 $80/A797 AD 35 07 LDA $0735 [$80:0735] A:0020 X:000C Y:000E P:envmxdizc $80/A79A 29 F8 FF AND #$FFF8 A:001E X:000C Y:000E P:envmxdizc $80/A79D 0A ASL A A:0018 X:000C Y:000E P:envmxdizc $80/A79E 18 CLC A:0030 X:000C Y:000E P:envmxdizc $80/A79F 69 00 7E ADC #$7E00 A:0030 X:000C Y:000E P:envmxdizc $80/A7A2 AA TAX A:7E30 X:000C Y:000E P:envmxdizc $80/A7A3 E8 INX A:7E30 X:7E30 Y:000E P:envmxdizc $80/A7A4 E8 INX A:7E30 X:7E31 Y:000E P:envmxdizc $80/A7A5 8B PHB ; Buffer Program Bank on Stack $80/A7A6 A9 00 7E LDA #$7E00 ; Set Program Bank to $7E $80/A7A9 48 PHA $80/A7AA AB PLB $80/A7AB AB PLB $80/A7AC A0 00 00 LDY #$0000 A:7E00 X:7E32 Y:000E P:envmxdizc $80/A7AF 20 49 9D JSR $9D49 [$80:9D49] A:7E00 X:7E32 Y:0000 P:envmxdiZc $80/A7B2 F0 05 BEQ $05 [$A7B9] A:0000 X:7E32 Y:0000 P:envmxdiZc $80/A7B4 5A PHY A:4200 X:7E34 Y:0002 P:envmxdizc $80/A7B5 20 1F 9F JSR $9F1F [$80:9F1F] A:4200 X:7E34 Y:0002 P:envmxdizc $80/A7B8 7A PLY A:0100 X:7E34 Y:0020 P:envmxdiZC $80/A7B9 E8 INX A:0000 X:7E32 Y:0000 P:envmxdiZc $80/A7BA E8 INX A:0000 X:7E33 Y:0000 P:envmxdizc $80/A7BB 8A TXA A:0000 X:7E34 Y:0000 P:envmxdizc $80/A7BC 29 0F 00 AND #$000F A:7E34 X:7E34 Y:0000 P:envmxdizc $80/A7BF D0 06 BNE $06 [$A7C7] A:0004 X:7E34 Y:0000 P:envmxdizc $80/A7C1 8A TXA A:0000 X:7E40 Y:000C P:envmxdiZC $80/A7C2 18 CLC A:7E40 X:7E40 Y:000C P:envmxdizC $80/A7C3 69 F0 03 ADC #$03F0 A:7E40 X:7E40 Y:000C P:envmxdizc $80/A7C6 AA TAX A:8230 X:7E40 Y:000C P:eNVmxdizc $80/A7C7 C8 INY A:0004 X:7E34 Y:0000 P:envmxdizc $80/A7C8 C8 INY A:0004 X:7E34 Y:0001 P:envmxdizc $80/A7C9 CC 3B 07 CPY $073B [$7E:073B] A:0004 X:7E34 Y:0002 P:envmxdizc $80/A7CC 90 E1 BCC $E1 [$A7AF] A:0004 X:7E34 Y:0002 P:eNvmxdizc $80/A7CE A0 18 00 LDY #$0018 A:000A X:823A Y:0018 P:enVmxdiZC $80/A7D1 CC 3B 07 CPY $073B [$7E:073B] A:000A X:823A Y:0018 P:enVmxdizC $80/A7D4 90 18 BCC $18 [$A7EE] A:000A X:823A Y:0018 P:enVmxdiZC $80/A7D6 AD 25 07 LDA $0725 [$7E:0725] A:000A X:823A Y:0018 P:enVmxdiZC $80/A7D9 89 08 00 BIT #$0008 A:0000 X:823A Y:0018 P:enVmxdiZC $80/A7DC F0 10 BEQ $10 [$A7EE] A:0000 X:823A Y:0018 P:enVmxdiZC
code is missing here
$80/A7EE AB PLB A:0000 X:823A Y:0018 P:enVmxdiZC $80/A7EF AD 35 07 LDA $0735 [$80:0735] A:0000 X:823A Y:0018 P:eNVmxdizC $80/A7F2 18 CLC A:001E X:823A Y:0018 P:enVmxdizC $80/A7F3 6D 39 07 ADC $0739 [$80:0739] A:001E X:823A Y:0018 P:enVmxdizc $80/A7F6 8D 35 07 STA $0735 [$80:0735] A:002A X:823A Y:0018 P:envmxdizc $80/A7F9 28 PLP ; Restore Flag Register value $80/A7FA 6B RTL
$80/A7FB Data for $80/A783
This data can be used to turn a value from #$00-#$07 into its corresponding bit being set.
$80/A7FB 00 00 $80/A7FD 01 00 $80/A7FF 02 00 $80/A801 04 00 $80/A803 08 00 $80/A805 10 00 $80/A807 20 00 $80/A809 40 00
$80/A9A4 ? (Executed when talking to the aerial building and at startup)
$80/A9A4 AD 29 0C LDA $0C29 [$80:0C29] A:1E97 X:0000 Y:0080 P:envmxdiZC $80/A9A7 EB XBA A:E194 X:0000 Y:0080 P:eNvmxdizC $80/A9A8 8D 1D 07 STA $071D [$80:071D] A:94E1 X:0000 Y:0080 P:eNvmxdizC $80/A9AB BD 92 0C LDA $0C92,x[$80:0C92] A:94E1 X:0000 Y:0080 P:eNvmxdizC $80/A9AE 0A ASL A A:0003 X:0000 Y:0080 P:envmxdizC $80/A9AF 0A ASL A A:0006 X:0000 Y:0080 P:envmxdizc $80/A9B0 0A ASL A A:000C X:0000 Y:0080 P:envmxdizc $80/A9B1 0A ASL A A:0018 X:0000 Y:0080 P:envmxdizc $80/A9B2 18 CLC A:0030 X:0000 Y:0080 P:envmxdizc $80/A9B3 6D 27 0C ADC $0C27 [$80:0C27] A:0030 X:0000 Y:0080 P:envmxdizc $80/A9B6 8D 1C 07 STA $071C [$80:071C] A:9909 X:0000 Y:0080 P:eNvmxdizc $80/A9B9 BD 86 0C LDA $0C86,x[$80:0C86] A:9909 X:0000 Y:0080 P:eNvmxdizc $80/A9BC 8D 23 07 STA $0723 [$80:0723] A:0001 X:0000 Y:0080 P:envmxdizc $80/A9BF 6B RTL A:0001 X:0000 Y:0080 P:envmxdizc
$80/A9C0 BD AA 0C LDA $0CAA,x[$80:0CAA] A:0001 X:0000 Y:0080 P:envmxdizc $80/A9C3 BC 6E 0C LDY $0C6E,x[$80:0C6E] A:00B0 X:0000 Y:0080 P:envmxdizc $80/A9C6 18 CLC A:00B0 X:0000 Y:0000 P:envmxdiZc $80/A9C7 F0 06 BEQ $06 [$A9CF] A:00B0 X:0000 Y:0000 P:envmxdiZc $80/A9C9 7D 4A 0C ADC $0C4A,x[$80:0C4A] A:00B0 X:0 Y:0001 P:envmxdizc $80/A9CC 88 DEY A:00CC X:0 Y:0001 P:envmxdizc $80/A9CD D0 FA BNE $FA [$A9C9] A:00CC X:0 Y:0 P:envmxdiZc $80/A9CF 7D 62 0C ADC $0C62,x[$80:0C62] A:00B0 X:0000 Y:0000 P:envmxdiZc $80/A9D2 8D 2F 07 STA $072F [$80:072F] A:00B0 X:0000 Y:0000 P:envmxdizc $80/A9D5 BD 9E 0C LDA $0C9E,x[$80:0C9E] A:00B0 X:0000 Y:0000 P:envmxdizc $80/A9D8 EB XBA A:0000 X:0000 Y:0000 P:envmxdiZc $80/A9D9 0A ASL A A:0000 X:0000 Y:0000 P:envmxdiZc $80/A9DA 0A ASL A A:0000 X:0000 Y:0000 P:envmxdiZc $80/A9DB 18 CLC A:0000 X:0000 Y:0000 P:envmxdiZc $80/A9DC 09 00 20 ORA #$2000 A:0000 X:0000 Y:0000 P:envmxdiZc $80/A9DF 0D 2F 07 ORA $072F [$80:072F] A:2000 X:0000 Y:0000 P:envmxdizc $80/A9E2 8D 2F 07 STA $072F [$80:072F] A:20B0 X:0000 Y:0000 P:envmxdizc $80/A9E5 18 CLC A:20B0 X:0000 Y:0000 P:envmxdizc $80/A9E6 7D 4A 0C ADC $0C4A,x[$80:0C4A] A:20B0 X:0000 Y:0000 P:envmxdizc $80/A9E9 8D 31 07 STA $0731 [$80:0731] A:20BC X:0000 Y:0000 P:envmxdizc $80/A9EC 6B RTL A:20BC X:0000 Y:0000 P:envmxdizc
$80/AA0C ? (Executed when talking to the aerial building and at startup)
$80/AA0C 48 PHA A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA0D 22 53 AA 80 JSL $80AA53 ; UNNECESSARY LINE - Just write "LDA $0B92"! $80/AA11 D0 3D BNE $3D [$AA50] A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA13 A9 01 00 LDA #$0001 A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA16 8D 92 0B STA $0B92 [$81:0B92] A:0001 X:0000 Y:0000 P:envmxdIzc $80/AA19 A3 01 LDA $01,s [$00:1E6A] A:0001 X:0000 Y:0000 P:envmxdIzc $80/AA1B 29 FF 00 AND #$00FF A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA1E 0A ASL A A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA1F 8D 94 0B STA $0B94 [$81:0B94] A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA22 A3 01 LDA $01,s [$00:1E6A] A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA24 29 00 FF AND #$FF00 A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA27 EB XBA A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA28 8D 3D 07 STA $073D [$81:073D] A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA2B A5 21 LDA $21 [$00:0021] A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA2D 85 86 STA $86 [$00:0086] A:88A1 X:0000 Y:0000 P:eNvmxdIzc $80/AA2F A5 20 LDA $20 [$00:0020] A:88A1 X:0000 Y:0000 P:eNvmxdIzc $80/AA31 85 85 STA $85 [$00:0085] A:A1E1 X:0000 Y:0000 P:eNvmxdIzc $80/AA33 68 PLA A:A1E1 X:0000 Y:0000 P:eNvmxdIzc $80/AA34 29 FF 00 AND #$00FF A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA37 22 41 B3 80 JSL $80B341[$80:B341] A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA3B A9 00 80 LDA #$8000 A:0010 X:0000 Y:0000 P:envmxdIZc $80/AA3E 8D 5E 06 STA $065E [$81:065E] A:8000 X:0000 Y:0000 P:eNvmxdIzc $80/AA41 A9 B4 B0 LDA #$B0B4 A:8000 X:0000 Y:0000 P:eNvmxdIzc $80/AA44 8D 5D 06 STA $065D [$81:065D] A:B0B4 X:0000 Y:0000 P:eNvmxdIzc $80/AA47 22 B6 91 80 JSL $8091B6[$80:91B6] A:B0B4 X:0000 Y:0000 P:eNvmxdIzc $80/AA4B 8D 9A 0B STA $0B9A [$81:0B9A] A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA4E 18 CLC A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA4F 6B RTL A:0000 X:0000 Y:0000 P:envmxdIZc
$80/AA53 LDA $0B92 (Executed when talking to the aerial building)
If this isn't just the end of a longer Subroutine, this makes no sense. UNNECESSARY LINE?
$80/AA53 AD 92 0B LDA $0B92 [$81:0B92] A:0000 X:0000 Y:0000 P:envmxdIZc $80/AA56 6B RTL A:0000 X:0000 Y:0000 P:envmxdIZc
$80/AC5E While NMI: VRAM DMA
If the flag in $0BB6 is set, this subroutine transfers the data in $7E/8C15-$7E/9414 to whatever VRAM address is in $0BB4/5.
$80/AC5E 08 PHP ; Buffer Flag Register value on stack $80/AC5F E2 10 SEP #$10 ; X/Y = 8-bit $80/AC61 C2 20 REP #$20 ; A = 16-bit $80/AC63 AD B6 0B LDA $0BB6 ; Is the flag for the VRAM DMA set? $80/AC66 F0 2A BEQ $2A ; [$AC92] $80/AC68 A9 01 18 LDA #$1801 ; Setup DMA from $7E/8C15 to VRAM, $800 bytes $80/AC6B 8D 00 43 STA $4300 $80/AC6E A9 15 8C LDA #$8C15 $80/AC71 8D 02 43 STA $4302 $80/AC74 A2 7E LDX #$7E $80/AC76 8E 04 43 STX $4304 $80/AC79 A9 00 08 LDA #$0800 $80/AC7C 8D 05 43 STA $4305 $80/AC7F A2 80 LDX #$80 ; VRAM transfer settings: 16-bit transfer $80/AC81 8E 15 21 STX $2115 $80/AC84 AD B4 0B LDA $0BB4 ; Set VRAM address according to $0BB4/5 $80/AC87 8D 16 21 STA $2116 $80/AC8A A2 01 LDX #$01 ; Activate DMA $80/AC8C 8E 0B 42 STX $420B $80/AC8F 9C B6 0B STZ $0BB6 ; Remove flag for this VRAM DMA $80/AC92 28 PLP ; Restore Flag Register value $80/AC93 6B RTL
$80/AC94 ?
$80/AC94 A9 00 00 LDA #$0000 A:0010 X:0 Y:0 P:envmxdiZC $80/AC97 48 PHA A:0 X:0 Y:0 P:envmxdiZC $80/AC98 A9 08 00 LDA #$0008 A:0 X:0 Y:0 P:envmxdiZC $80/AC9B 48 PHA A:0008 X:0 Y:0 P:envmxdizC $80/AC9C B7 97 LDA [$97],y[$7F:0A00] A:0008 X:0 Y:0 P:envmxdizC $80/AC9E 9F 15 94 7E STA $7E9415,x[$7E:9415] A:F408 X:0 Y:0 P:eNvmxdizC $80/ACA2 C8 INY A:F408 X:0 Y:0 P:eNvmxdizC $80/ACA3 C8 INY A:F408 X:0 Y:0001 P:envmxdizC $80/ACA4 E8 INX A:F408 X:0 Y:0002 P:envmxdizC $80/ACA5 E8 INX A:F408 X:0001 Y:0002 P:envmxdizC $80/ACA6 68 PLA A:F408 X:0002 Y:0002 P:envmxdizC $80/ACA7 3A DEC A A:0008 X:0002 Y:0002 P:envmxdizC $80/ACA8 D0 F1 BNE $F1 [$AC9B] A:0007 X:0002 Y:0002 P:envmxdizC $80/ACAA 68 PLA A:0 X:0010 Y:0010 P:envmxdiZC $80/ACAB 1A INC A A:0 X:0010 Y:0010 P:envmxdiZC $80/ACAC 1A INC A A:0001 X:0010 Y:0010 P:envmxdizC $80/ACAD C5 9D CMP $9D [$00:009D] A:0002 X:0010 Y:0010 P:envmxdizC $80/ACAF 90 E6 BCC $E6 [$AC97] A:0002 X:0010 Y:0010 P:eNvmxdizc $80/ACB1 80 15 BRA $15 [$ACC8] A:0004 X:0020 Y:0020 P:envmxdiZC $80/ACC8 C5 9F CMP $9F [$00:009F] A:0004 X:0020 Y:0020 P:envmxdiZC $80/ACCA 90 E7 BCC $E7 [$ACB3] A:0004 X:0020 Y:0020 P:envmxdiZC $80/ACCC 60 RTS A:0004 X:0020 Y:0020 P:envmxdiZC
$80/AD1D ?
$80/AD1D A5 9F LDA $9F [$00:009F] A:0004 X:0020 Y:0020 P:envmxdiZC $80/AD1F C9 08 00 CMP #$0008 A:0004 X:0020 Y:0020 P:envmxdizC $80/AD22 F0 01 BEQ $01 [$AD25] A:0004 X:0020 Y:0020 P:eNvmxdizc $80/AD24 60 RTS A:0004 X:0020 Y:0020 P:eNvmxdizc
$80/ADA2 ?
$80/ADA2 C9 00 00 CMP #$0000 A:0080 X:0001 Y:0 P:envmxdizC $80/ADA5 F0 3B BEQ $3B [$ADE2] A:0080 X:0001 Y:0 P:envmxdizC $80/ADA7 48 PHA A:0080 X:0001 Y:0 P:envmxdizC $80/ADA8 A5 9F LDA $9F [$00:009F] A:0080 X:0001 Y:0 P:envmxdizC $80/ADAA 4A LSR A A:0004 X:0001 Y:0 P:envmxdizC $80/ADAB 48 PHA A:0002 X:0001 Y:0 P:envmxdizc $80/ADAC 8A TXA A:0002 X:0001 Y:0 P:envmxdizc $80/ADAD FA PLX A:0001 X:0001 Y:0 P:envmxdizc $80/ADAE 0A ASL A A:0001 X:0002 Y:0 P:envmxdizc $80/ADAF 0A ASL A A:0002 X:0002 Y:0 P:envmxdizc $80/ADB0 0A ASL A A:0004 X:0002 Y:0 P:envmxdizc $80/ADB1 CA DEX A:0008 X:0002 Y:0 P:envmxdizc $80/ADB2 F0 09 BEQ $09 [$ADBD] A:0008 X:0001 Y:0 P:envmxdizc $80/ADB4 0A ASL A A:0008 X:0001 Y:0 P:envmxdizc $80/ADB5 CA DEX A:0010 X:0001 Y:0 P:envmxdizc $80/ADB6 F0 05 BEQ $05 [$ADBD] A:0010 X:0 Y:0 P:envmxdiZc $80/ADBD 18 CLC A:0010 X:0 Y:0 P:envmxdiZc $80/ADBE 6D B2 0B ADC $0BB2 [$80:0BB2] A:0010 X:0 Y:0 P:envmxdiZc $80/ADC1 85 A5 STA $A5 [$00:00A5] A:2010 X:0 Y:0 P:envmxdizc $80/ADC3 68 PLA A:2010 X:0 Y:0 P:envmxdizc $80/ADC4 48 PHA A:0080 X:0 Y:0 P:envmxdizc $80/ADC5 38 SEC A:0080 X:0 Y:0 P:envmxdizc $80/ADC6 E9 10 00 SBC #$0010 A:0080 X:0 Y:0 P:envmxdizC $80/ADC9 90 0E BCC $0E [$ADD9] A:0070 X:0 Y:0 P:envmxdizC $80/ADCB 83 01 STA $01,s [$00:1E93] A:0070 X:0 Y:0 P:envmxdizC $80/ADCD A9 10 00 LDA #$0010 A:0070 X:0 Y:0 P:envmxdizC $80/ADD0 20 E3 AD JSR $ADE3 [$80:ADE3] A:0010 X:0 Y:0 P:envmxdizC $80/ADD3 20 F4 AD JSR $ADF4 [$80:ADF4] A:0010 X:0200 Y:0200 P:envmxdizc $80/ADD6 68 PLA A:1E8C X:0200 Y:0200 P:envmxdizc $80/ADD7 80 EB BRA $EB [$ADC4] A:0070 X:0200 Y:0200 P:envmxdizc $80/ADD9 68 PLA A:FFF0 X:0200 Y:1000 P:eNvmxdizc $80/ADDA F0 06 BEQ $06 [$ADE2] A:0 X:0200 Y:1000 P:envmxdiZc
code is missing here
$80/ADE2 6B RTL A:0 X:0200 Y:1000 P:envmxdiZc
$80/ADE3 ?
$80/ADE3 48 PHA A:0010 X:0 Y:0 P:envmxdizC $80/ADE4 A2 00 00 LDX #$0000 A:0010 X:0 Y:0 P:envmxdizC $80/ADE7 48 PHA A:0010 X:0 Y:0 P:envmxdiZC $80/ADE8 20 94 AC JSR $AC94 [$80:AC94] A:0010 X:0 Y:0 P:envmxdiZC $80/ADEB 20 1D AD JSR $AD1D [$80:AD1D] A:0004 X:0020 Y:0020 P:envmxdiZC $80/ADEE 68 PLA A:0004 X:0020 Y:0020 P:eNvmxdizc $80/ADEF 3A DEC A A:0010 X:0020 Y:0020 P:envmxdizc $80/ADF0 D0 F5 BNE $F5 [$ADE7] A:000F X:0020 Y:0020 P:envmxdizc $80/ADF2 68 PLA A:0 X:0200 Y:0200 P:envmxdiZc $80/ADF3 60 RTS A:0010 X:0200 Y:0200 P:envmxdizc
$80/ADF4 ?
$80/ADF4 DA PHX A:0010 X:0200 Y:0200 P:envmxdizc $80/ADF5 5A PHY A:0010 X:0200 Y:0200 P:envmxdizc $80/ADF6 D4 A5 PEI ($A5) [$2010] A:0010 X:0200 Y:0200 P:envmxdizc $80/ADF8 E2 10 SEP #$10 A:0010 X:0200 Y:0200 P:envmxdizc $80/ADFA A2 80 LDX #$80 A:0010 X:0 Y:0 P:envmXdizc $80/ADFC DA PHX A:0010 X:0080 Y:0 P:eNvmXdizc $80/ADFD C2 10 REP #$10 A:0010 X:0080 Y:0 P:eNvmXdizc $80/ADFF A6 9F LDX $9F [$00:009F] A:0010 X:0080 Y:0 P:eNvmxdizc $80/AE01 0A ASL A A:0010 X:0004 Y:0 P:envmxdizc $80/AE02 0A ASL A A:0020 X:0004 Y:0 P:envmxdizc $80/AE03 0A ASL A A:0040 X:0004 Y:0 P:envmxdizc $80/AE04 0A ASL A A:0080 X:0004 Y:0 P:envmxdizc $80/AE05 CA DEX A:0100 X:0004 Y:0 P:envmxdizc $80/AE06 CA DEX A:0100 X:0003 Y:0 P:envmxdizc $80/AE07 F0 06 BEQ $06 [$AE0F] A:0100 X:0002 Y:0 P:envmxdizc $80/AE09 0A ASL A A:0100 X:0002 Y:0 P:envmxdizc $80/AE0A CA DEX A:0200 X:0002 Y:0 P:envmxdizc $80/AE0B CA DEX A:0200 X:0001 Y:0 P:envmxdizc $80/AE0C F0 01 BEQ $01 [$AE0F] A:0200 X:0 Y:0 P:envmxdiZc $80/AE0F 48 PHA A:0200 X:0 Y:0 P:envmxdiZc $80/AE10 4A LSR A A:0200 X:0 Y:0 P:envmxdiZc $80/AE11 18 CLC A:0100 X:0 Y:0 P:envmxdizc $80/AE12 65 A5 ADC $A5 [$00:00A5] A:0100 X:0 Y:0 P:envmxdizc $80/AE14 85 A5 STA $A5 [$00:00A5] A:2110 X:0 Y:0 P:envmxdizc $80/AE16 F4 94 7E PEA $7E94 A:2110 X:0 Y:0 P:envmxdizc $80/AE19 F4 02 15 PEA $1502 A:2110 X:0 Y:0 P:envmxdizc $80/AE1C BA TSX A:2110 X:0 Y:0 P:envmxdizc $80/AE1D E8 INX A:2110 X:1E83 Y:0 P:envmxdizc $80/AE1E A9 00 00 LDA #$0000 A:2110 X:1E84 Y:0 P:envmxdizc $80/AE21 22 2A 8C 80 JSL $808C2A[$80:8C2A] A:0 X:1E84 Y:0 P:envmxdiZc $80/AE25 3B TSC A:0 X:1E84 Y:0 P:envmxdiZc $80/AE26 18 CLC A:1E83 X:1E84 Y:0 P:envmxdizc $80/AE27 69 09 00 ADC #$0009 A:1E83 X:1E84 Y:0 P:envmxdizc $80/AE2A 1B TCS A:1E8C X:1E84 Y:0 P:envmxdizc $80/AE2B 22 6A 92 80 JSL $80926A[$80:926A] A:1E8C X:1E84 Y:0 P:envmxdizc $80/AE2F 7A PLY A:1E8C X:1E84 Y:0 P:envmxdizc $80/AE30 FA PLX A:1E8C X:1E84 Y:0200 P:envmxdizc $80/AE31 60 RTS A:1E8C X:0200 Y:0200 P:envmxdizc
$80/AEBF Transfer Data in CGRAM buffer
This subroutine transfers colors from [$97] to the CGRAM buffer. A contains the number of colors to transfer, X contains the number of the color to begin, Y contains the Load Index.
$80/AEBF C9 00 00 CMP #$0000 ; Exit if A is empty (Zero colors to transfer) $80/AEC2 F0 13 BEQ $13 ; [$AED7] $80/AEC4 85 9D STA $9D ; Else, store it as Loop Counter $80/AEC6 8A TXA ; Multiply X by 2 (as store counter) $80/AEC7 0A ASL A $80/AEC8 AA TAX $80/AEC9 B7 97 LDA [$97],y ; Load Data $80/AECB 9F 00 20 7E STA $7E2000,x ; Store in CGRAM Buffer $80/AECF C8 INY ; Increment Load Index twice $80/AED0 C8 INY $80/AED1 E8 INX ; Increment Store Index twice $80/AED2 E8 INX $80/AED3 C6 9D DEC $9D ; Decrement Loop Counter $80/AED5 D0 F2 BNE $F2 ; [$AEC9] Loop until Counter runs out $80/AED7 6B RTL
$80/AED8 ? (Write a double byte in VRAM data buffer)
Used to store a double byte in a VRAM data buffer. X contains the X coordinate, Y contains the Y coordinate.
$80/AED8 E0 00 00 CPX #$0000 ; Exit if X and Y are not between #$00 and #$20 $80/AEDB 30 22 BMI $22 ; [$AEFF] $80/AEDD E0 20 00 CPX #$0020 $80/AEE0 10 1D BPL $1D ; [$AEFF] $80/AEE2 C0 00 00 CPY #$0000 $80/AEE5 30 18 BMI $18 ; [$AEFF] $80/AEE7 C0 20 00 CPY #$0020 $80/AEEA 10 13 BPL $13 ; [$AEFF] $80/AEEC 5A PHY ; Buffer Y, A and X on stack $80/AEED 48 PHA $80/AEEE DA PHX $80/AEEF 98 TYA ; Multiply value in Y by #$20 $80/AEF0 0A ASL A $80/AEF1 0A ASL A $80/AEF2 0A ASL A $80/AEF3 0A ASL A $80/AEF4 0A ASL A $80/AEF5 18 CLC ; Add the value Original value in X to it (to form an offset) $80/AEF6 63 01 ADC $01,s $80/AEF8 0A ASL A ; Multiply by 2 (each entry is two bytes in size) $80/AEF9 A8 TAY ; Transfer in Y as Store Index $80/AEFA FA PLX ; Pull X from stack (to clear the stack) $80/AEFB 68 PLA ; Pull A from stack (as value to store) $80/AEFC 97 9A STA [$9A],y ; STORE VALUE $80/AEFE 7A PLY ; Pull Y from stack (to clear the stack) $80/AEFF 60 RTS
$80/AF00 ? Write a Rectangle in VRAM buffer
This subroutine writes a rectangle of values into a VRAM buffer.
The values that get stored get incremented.
A contains the Y-coordinate where to start X contains the X-coordinate where to start $9A-$9C contains the 24-bit address where to store $9D contains the number of values to do per row $9E is always empty $9F contains the number of rows to do $A0 is always empty $A1-$A2 contains the first value to store $A5-$A6 contains AT THE END the last value that was stored + 1
$80/AF00 48 PHA ; Buffer A (first row number) on stack $80/AF01 A8 TAY ; Transfer it in Y $80/AF02 A5 9D LDA $9D ; Exit if number of values to do per row is zero $80/AF04 F0 2C BEQ $2C ; [$AF32] $80/AF06 A5 9F LDA $9F ; Exit if number of rows to do is zero $80/AF08 F0 28 BEQ $28 ; [$AF32] $80/AF0A DA PHX ; Put X coordinate where to start a new row on stack $80/AF0B 98 TYA ; Transfer row number to begin in A $80/AF0C 18 CLC ; Add number of rows to do $80/AF0D 65 9F ADC $9F $80/AF0F 48 PHA ; Put Y coordinate limit on stack $80/AF10 8A TXA ; Transfer position in row where to begin in A $80/AF11 18 CLC ; Add number of values to do $80/AF12 65 9D ADC $9D $80/AF14 48 PHA ; Put X coordinate limit on stack $80/AF15 A5 A1 LDA $A1 ; Load value to start and buffer it in $A5 $80/AF17 85 A5 STA $A5 $80/AF19 A5 A5 LDA $A5 $80/AF1B 20 D8 AE JSR $AED8 ; Store A in VRAM buffer (X/Y as coordinates) $80/AF1E E6 A5 INC $A5 ; Increment value to store $80/AF20 E8 INX ; Increment X coordinate $80/AF21 8A TXA ; Has X coordinate reached its limit? $80/AF22 C3 01 CMP $01,s $80/AF24 30 F3 BMI $F3 ; [$AF19] Loop if not $80/AF26 A3 05 LDA $05,s ; Set X coordinate back to its start value (new row) $80/AF28 AA TAX $80/AF29 C8 INY ; Increment Y coordinate (new row) $80/AF2A 98 TYA ; Has Y coordinate reached its limit? $80/AF2B C3 03 CMP $03,s $80/AF2D 30 EA BMI $EA ; [$AF19] $80/AF2F 68 PLA ; Pull all the compare values from stack $80/AF30 68 PLA $80/AF31 FA PLX ; Restore X and A $80/AF32 68 PLA $80/AF33 6B RTL
$80/AF34 ? Write several Rectangles in VRAM buffer
This follows the same instructions as $80/AF00.
After finishing one rectangle, it starts the next one (with the same size and the same values) right next to the other one, until the x-coordinate #$20 is reached. Than it repeats the same in the rows beneath, until y-coordinate #$20 is reached.
Means for example:
For: $9D = #$04, $9F = #$03, $A1 = #$01 01 02 03 04 01 02 03 04 01... 05 06 07 08 05 06 07 08 05... 09 0A 0B 0C 09 0A 0B 0C 09... 01 02 03 04 01 02 03 04 01...
$80/AF34 A8 TAY ; Buffer the number of the row to begin in Y $80/AF35 A5 9D LDA $9D ; Exit if number of values to do per row is zero $80/AF37 F0 23 BEQ $23 ; [$AF5C] $80/AF39 A5 9F LDA $9F ; Exit if number of rows to do is zero $80/AF3B F0 1F BEQ $1F ; [$AF5C] $80/AF3D DA PHX ; Buffer x coordinate of row start on stack $80/AF3E 98 TYA ; Restore number of the first row in A $80/AF3F 22 00 AF 80 JSL $80AF00 ; Write a Rectangle in VRAM buffer $80/AF43 A8 TAY ; Put number of the first row back in Y $80/AF44 8A TXA ; Add the number of values done in a row to the start point, ... $80/AF45 18 CLC ; ... so the next rectangle start to the right of the previous one $80/AF46 65 9D ADC $9D $80/AF48 AA TAX ; Check if the start point is higher than #$20 $80/AF49 E0 20 00 CPX #$0020 $80/AF4C 30 F0 BMI $F0 ; [$AF3E] Loop if not $80/AF4E A3 01 LDA $01,s ; Restore Original X coordinate to start $80/AF50 AA TAX $80/AF51 98 TYA ; Add number of rows to Y-coordinate to start, so it does now the rows beneath $80/AF52 18 CLC $80/AF53 65 9F ADC $9F $80/AF55 A8 TAY ; Check if the start point is higher than #$20 $80/AF56 C0 20 00 CPY #$0020 $80/AF59 30 E3 BMI $E3 ; [$AF3E] Loop if not $80/AF5B FA PLX ; Pull compare value from stack $80/AF5C 6B RTL
$80/AFFD ?
$80/AFFD A5 18 LDA $18 [$00:0018] A:0020 X:0026 Y:0003 P:envmxdIzc $80/AFFF 05 1A ORA $1A [$00:001A] A:0020 X:0026 Y:0003 P:envmxdIzc $80/B001 D0 06 BNE $06 [$B009] A:0020 X:0026 Y:0003 P:envmxdIzc
code is missing here
$80/B009 A5 16 LDA $16 [$00:0016] A:0020 X:0026 Y:0003 P:envmxdIzc $80/B00B 45 1A EOR $1A [$00:001A] A:0 X:0026 Y:0003 P:envmxdIZc $80/B00D 08 PHP A:0 X:0026 Y:0003 P:envmxdIZc $80/B00E A5 16 LDA $16 [$00:0016] A:0 X:0026 Y:0003 P:envmxdIZc $80/B010 10 13 BPL $13 [$B025] A:0 X:0026 Y:0003 P:envmxdIZc
code is missing here
$80/B025 A5 1A LDA $1A [$00:001A] A:0 X:0026 Y:0003 P:envmxdIZc $80/B027 10 13 BPL $13 [$B03C] A:0 X:0026 Y:0003 P:envmxdIZc
code is missing here
$80/B03C 64 1C STZ $1C [$00:001C] A:0 X:0026 Y:0003 P:envmxdIZc $80/B03E 64 1E STZ $1E [$00:001E] A:0 X:0026 Y:0003 P:envmxdIZc $80/B040 18 CLC A:0 X:0026 Y:0003 P:envmxdIZc $80/B041 A0 31 00 LDY #$0031 A:0 X:0026 Y:0003 P:envmxdIZc $80/B044 26 14 ROL $14 [$00:0014] A:0 X:0026 Y:0031 P:envmxdIzc $80/B046 26 16 ROL $16 [$00:0016] A:0 X:0026 Y:0031 P:envmxdIzc $80/B048 88 DEY A:0 X:0026 Y:0031 P:envmxdIZc $80/B049 F0 19 BEQ $19 [$B064] A:0 X:0026 Y:0030 P:envmxdIzc $80/B04B 26 1C ROL $1C [$00:001C] A:0 X:0026 Y:0030 P:envmxdIzc $80/B04D 26 1E ROL $1E [$00:001E] A:0 X:0026 Y:0030 P:envmxdIZc $80/B04F A5 1C LDA $1C [$00:001C] A:0 X:0026 Y:0030 P:envmxdIZc $80/B051 38 SEC A:0 X:0026 Y:0030 P:envmxdIZc $80/B052 E5 18 SBC $18 [$00:0018] A:0 X:0026 Y:0030 P:envmxdIZC $80/B054 85 12 STA $12 [$00:0012] A:FFE0 X:0026 Y:0030 P:eNvmxdIzc $80/B056 A5 1E LDA $1E [$00:001E] A:FFE0 X:0026 Y:0030 P:eNvmxdIzc $80/B058 E5 1A SBC $1A [$00:001A] A:0 X:0026 Y:0030 P:envmxdIZc $80/B05A 90 E8 BCC $E8 [$B044] A:FFFF X:0026 Y:0030 P:eNvmxdIzc $80/B05C 85 1E STA $1E [$00:001E] A:0 X:0026 Y:0010 P:envmxdIZC $80/B05E A5 12 LDA $12 [$00:0012] A:0 X:0026 Y:0010 P:envmxdIZC $80/B060 85 1C STA $1C [$00:001C] A:0 X:0026 Y:0010 P:envmxdIZC $80/B062 80 E0 BRA $E0 [$B044] A:0 X:0026 Y:0010 P:envmxdIZC $80/B064 28 PLP A:FFFF X:0026 Y:0 P:envmxdIZc $80/B065 10 15 BPL $15 [$B07C] A:FFFF X:0026 Y:0 P:envmxdIZc
code is missing here
$80/B07C 18 CLC A:FFFF X:0026 Y:0 P:envmxdIZc $80/B07D 6B RTL A:FFFF X:0026 Y:0 P:envmxdIZc
$80/B0B4 ? (Executed when talking to the aerial building and at start up)
$80/B0B4 AE 94 0B LDX $0B94 [$80:0B94] A:1E97 X:0000 Y:0080 P:envmxdizC $80/B0B7 22 A4 A9 80 JSL $80A9A4[$80:A9A4] A:1E97 X:0000 Y:0080 P:envmxdiZC $80/B0BB 22 C0 A9 80 JSL $80A9C0[$80:A9C0] A:0001 X:0000 Y:0080 P:envmxdizc $80/B0BF BD 4A 0C LDA $0C4A,x[$80:0C4A] A:20BC X:0000 Y:0000 P:envmxdizc $80/B0C2 0A ASL A A:000C X:0000 Y:0000 P:envmxdizc $80/B0C3 0A ASL A A:0018 X:0000 Y:0000 P:envmxdizc $80/B0C4 0A ASL A A:0030 X:0000 Y:0000 P:envmxdizc $80/B0C5 8D 1F 07 STA $071F [$80:071F] A:0060 X:0000 Y:0000 P:envmxdizc $80/B0C8 22 F0 9A 80 JSL $809AF0[$80:9AF0] A:0060 X:0000 Y:0000 P:envmxdizc $80/B0CC AD 3D 07 LDA $073D [$80:073D] A:0000 X:0000 Y:000E P:envmxdiZc $80/B0CF 8D 96 0B STA $0B96 [$80:0B96] A:0000 X:0000 Y:000E P:envmxdiZc $80/B0D2 80 3A BRA $3A [$B10E] A:0000 X:0000 Y:000E P:envmxdiZc $80/B0D4 22 BD A6 80 JSL $80A6BD[$80:A6BD] A:0081 X:0000 Y:000E P:envmxdizC $80/B0D8 08 PHP A:0001 X:0000 Y:041C P:envmxdizc $80/B0D9 AE 94 0B LDX $0B94 [$80:0B94] A:0001 X:0000 Y:041C P:envmxdizc $80/B0DC AD 2B 07 LDA $072B [$80:072B] A:0001 X:0000 Y:041C P:envmxdiZc $80/B0DF 38 SEC A:000E X:0000 Y:041C P:envmxdizc $80/B0E0 FD 32 0C SBC $0C32,x[$80:0C32] A:000E X:0000 Y:041C P:envmxdizC $80/B0E3 9D 62 0C STA $0C62,x[$80:0C62] A:000C X:0000 Y:041C P:envmxdizC $80/B0E6 AD 2D 07 LDA $072D [$80:072D] A:000C X:0000 Y:041C P:envmxdizC $80/B0E9 38 SEC A:0010 X:0000 Y:041C P:envmxdizC $80/B0EA FD 3E 0C SBC $0C3E,x[$80:0C3E] A:0010 X:0000 Y:041C P:envmxdizC $80/B0ED 9D 6E 0C STA $0C6E,x[$80:0C6E] A:0000 X:0000 Y:041C P:envmxdiZC $80/B0F0 28 PLP A:0000 X:0000 Y:041C P:envmxdiZC $80/B0F1 70 2E BVS $2E [$B121] A:0000 X:0000 Y:041C P:envmxdizc $80/B0F3 B0 33 BCS $33 [$B128] A:0000 X:0000 Y:041C P:envmxdizc $80/B0F5 AD 3D 07 LDA $073D [$80:073D] A:0000 X:0000 Y:041C P:envmxdizc $80/B0F8 F0 14 BEQ $14 [$B10E] A:0000 X:0000 Y:041C P:envmxdiZc
this part is only executed at startup:
$80/B0FA 22 6A 92 80 JSL $80926A[$80:926A] A:0002 X:0 Y:00CA P:envmxdizc $80/B0FE AD 3D 07 LDA $073D [$80:073D] A:0002 X:0 Y:00CA P:envmxdizc $80/B101 F0 0B BEQ $0B [$B10E] A:0002 X:0 Y:00CA P:envmxdizc $80/B103 CE 96 0B DEC $0B96 [$80:0B96] A:0002 X:0 Y:00CA P:envmxdizc $80/B106 D0 F2 BNE $F2 [$B0FA] A:0002 X:0 Y:00CA P:envmxdizc $80/B108 AD 3D 07 LDA $073D [$80:073D] A:0002 X:0 Y:00CA P:envmxdiZc $80/B10B 8D 96 0B STA $0B96 [$80:0B96] A:0002 X:0 Y:00CA P:envmxdizc
$80/B10E A7 85 LDA [$85] [$88:A1E1] A:0000 X:0000 Y:000E P:envmxdiZc $80/B110 29 FF 00 AND #$00FF A:4081 X:0000 Y:000E P:envmxdizc $80/B113 F0 13 BEQ $13 [$B128] A:0081 X:0000 Y:000E P:envmxdizc $80/B115 C9 0D 00 CMP #$000D A:0081 X:0000 Y:000E P:envmxdizc $80/B118 F0 26 BEQ $26 [$B140] A:0081 X:0000 Y:000E P:envmxdizC $80/B11A C9 5C 00 CMP #$005C A:0081 X:0000 Y:000E P:envmxdizC $80/B11D F0 24 BEQ $24 [$B143] A:0081 X:0000 Y:000E P:envmxdizC $80/B11F 80 B3 BRA $B3 [$B0D4] A:0081 X:0000 Y:000E P:envmxdizC
code is missing here
$80/B128 AD 3F 07 LDA $073F [$80:073F] A:0000 X:0000 Y:041C P:envmxdiZc $80/B12B 0D 40 07 ORA $0740 [$80:0740] A:0000 X:0000 Y:041C P:envmxdiZc $80/B12E D0 A4 BNE $A4 [$B0D4] A:0000 X:0000 Y:041C P:envmxdiZc $80/B130 9C 25 07 STZ $0725 [$80:0725] A:0000 X:0000 Y:041C P:envmxdiZc $80/B133 9C 44 07 STZ $0744 [$80:0744] A:0000 X:0000 Y:041C P:envmxdiZc $80/B136 9C 92 0B STZ $0B92 [$80:0B92] A:0000 X:0000 Y:041C P:envmxdiZc $80/B139 9C 98 0B STZ $0B98 [$80:0B98] A:0000 X:0000 Y:041C P:envmxdiZc $80/B13C 5C E9 91 80 JMP $8091E9[$80:91E9] A:0000 X:0000 Y:041C P:envmxdiZc
code is missing here
$80/B143 E6 85 INC $85 [$00:0085] A:005C X:0 Y:000E P:envmxdiZC $80/B145 A7 85 LDA [$85] [$94:A7CE] A:005C X:0 Y:000E P:eNvmxdizC $80/B147 29 FF 00 AND #$00FF A:3078 X:0 Y:000E P:envmxdizC $80/B14A C9 44 00 CMP #$0044 A:0078 X:0 Y:000E P:envmxdizC $80/B14D F0 44 BEQ $44 [$B193] A:0078 X:0 Y:000E P:envmxdizC $80/B14F 38 SEC A:0078 X:0 Y:000E P:envmxdizC $80/B150 E9 61 00 SBC #$0061 A:0078 X:0 Y:000E P:envmxdizC $80/B153 90 43 BCC $43 [$B198] A:0017 X:0 Y:000E P:envmxdizC $80/B155 C9 7B 00 CMP #$007B A:0017 X:0 Y:000E P:envmxdizC $80/B158 B0 3E BCS $3E [$B198] A:0017 X:0 Y:000E P:eNvmxdizc $80/B15A 0A ASL A A:0017 X:0 Y:000E P:eNvmxdizc $80/B15B AA TAX A:002E X:0 Y:000E P:envmxdizc $80/B15C 7C 5F B1 JMP ($B15F,x)[$80:B1E2] A:002E X:002E Y:000E P:envmxdizc
$80/B193 ?
$80/B193 C6 85 DEC $85 [$00:0085] A:0024 X:0024 Y:000E P:envmxdizc $80/B195 82 3C FF BRL $FF3C [$B0D4] A:0024 X:0024 Y:000E P:eNvmxdizc
$80/B19A ?
$80/B19A E6 85 INC $85 [$00:0085] A:0018 X:0018 Y:000E P:envmxdizc $80/B19C A9 01 00 LDA #$0001 A:0018 X:0018 Y:000E P:eNvmxdizc $80/B19F 22 2F 9F 80 JSL $809F2F[$80:9F2F] A:0001 X:0018 Y:000E P:envmxdizc $80/B1A3 8D 44 07 STA $0744 [$80:0744] A:0001 X:0018 Y:000E P:envmxdizc $80/B1A6 82 65 FF BRL $FF65 [$B10E] A:0001 X:0018 Y:000E P:envmxdizc
$80/B1E2 ?
$80/B0B4 jumps here
$80/B1E2 AD 35 07 LDA $0735 [$80:0735] A:002E X:002E Y:000E P:envmxdizc $80/B1E5 F0 08 BEQ $08 [$B1EF] A:0 X:002E Y:000E P:envmxdiZc $80/B1E7 22 6A 92 80 JSL $80926A[$80:926A] A:001E X:002E Y:0518 P:envmxdizc $80/B1EB 22 F0 9A 80 JSL $809AF0[$80:9AF0] A:001E X:002E Y:0518 P:envmxdizc $80/B1EF E6 85 INC $85 [$00:0085] A:0 X:002E Y:000E P:envmxdiZc $80/B1F1 A9 02 00 LDA #$0002 A:0 X:002E Y:000E P:eNvmxdizc $80/B1F4 22 2F 9F 80 JSL $809F2F[$80:9F2F] A:0002 X:002E Y:000E P:envmxdizc $80/B1F8 8D 98 0B STA $0B98 [$80:0B98] A:0001 X:002E Y:000E P:envmxdizc $80/B1FB AA TAX A:0001 X:002E Y:000E P:envmxdizc $80/B1FC AC 94 0B LDY $0B94 [$80:0B94] A:0001 X:0001 Y:000E P:envmxdizc $80/B1FF B9 6E 0C LDA $0C6E,y[$80:0C6E] A:0001 X:0001 Y:0 P:envmxdiZc $80/B202 A8 TAY A:0 X:0001 Y:0 P:envmxdiZc $80/B203 AD 94 0B LDA $0B94 [$80:0B94] A:0 X:0001 Y:0 P:envmxdiZc $80/B206 4A LSR A A:0 X:0001 Y:0 P:envmxdiZc $80/B207 22 41 B3 80 JSL $80B341[$80:B341] A:0 X:0001 Y:0 P:envmxdiZc $80/B20B AE 94 0B LDX $0B94 [$80:0B94] A:0002 X:0001 Y:0 P:envmxdizc $80/B20E 22 C0 A9 80 JSL $80A9C0[$80:A9C0] A:0002 X:0 Y:0 P:envmxdiZc $80/B212 82 F9 FE BRL $FEF9 [$B10E] A:3CCD X:0 Y:0 P:envmxdizc $80/B215 E6 85 INC $85 [$00:0085] A:0030 X:0030 Y:0 P:envmxdizc $80/B217 AD 35 07 LDA $0735 [$80:0735] A:0030 X:0030 Y:0 P:eNvmxdizc $80/B21A F0 08 BEQ $08 [$B224] A:0 X:0030 Y:0 P:envmxdiZc $80/B224 AC 94 0B LDY $0B94 [$80:0B94] A:0 X:0030 Y:0 P:envmxdiZc $80/B227 BE 62 0C LDX $0C62,y[$80:0C62] A:0 X:0030 Y:0 P:envmxdiZc $80/B22A A9 02 00 LDA #$0002 A:0 X:0001 Y:0 P:envmxdizc $80/B22D 22 2F 9F 80 JSL $809F2F[$80:9F2F] A:0002 X:0001 Y:0 P:envmxdizc $80/B231 A8 TAY A:0001 X:0001 Y:0 P:envmxdizc $80/B232 AD 94 0B LDA $0B94 [$80:0B94] A:0001 X:0001 Y:0001 P:envmxdizc $80/B235 4A LSR A A:0 X:0001 Y:0001 P:envmxdiZc $80/B236 22 41 B3 80 JSL $80B341[$80:B341] A:0 X:0001 Y:0001 P:envmxdiZc $80/B23A AE 94 0B LDX $0B94 [$80:0B94] A:0003 X:0001 Y:0001 P:envmxdizc $80/B23D 22 C0 A9 80 JSL $80A9C0[$80:A9C0] A:0003 X:0 Y:0001 P:envmxdiZc $80/B241 82 CA FE BRL $FECA [$B10E] A:3CE9 X:0 Y:0 P:envmxdizc
$80/B26F ?
$80/B26F E6 85 INC $85 [$00:0085] A:001A X:001A Y:00DC P:envmxdizc $80/B271 AD 35 07 LDA $0735 [$80:0735] A:001A X:001A Y:00DC P:eNvmxdizc $80/B274 F0 08 BEQ $08 [$B27E] A:0054 X:001A Y:00DC P:envmxdizc $80/B276 22 6A 92 80 JSL $80926A[$80:926A] A:0054 X:001A Y:00DC P:envmxdizc $80/B27A 22 F0 9A 80 JSL $809AF0[$80:9AF0] A:0054 X:001A Y:00DC P:envmxdizc $80/B27E AE 94 0B LDX $0B94 [$80:0B94] A:0 X:001A Y:000E P:envmxdizc $80/B281 9E 62 0C STZ $0C62,x[$80:0C62] A:0 X:0 Y:000E P:envmxdiZc $80/B284 BD 6E 0C LDA $0C6E,x[$80:0C6E] A:0 X:0 Y:000E P:envmxdiZc $80/B287 1A INC A A:0001 X:0 Y:000E P:envmxdizc $80/B288 1A INC A A:0002 X:0 Y:000E P:envmxdizc $80/B289 1A INC A A:0003 X:0 Y:000E P:envmxdizc $80/B28A DD 56 0C CMP $0C56,x[$80:0C56] A:0004 X:0 Y:000E P:envmxdizc $80/B28D B0 1E BCS $1E [$B2AD] A:0004 X:0 Y:000E P:eNvmxdizc $80/B28F 3A DEC A A:0004 X:0 Y:000E P:eNvmxdizc $80/B290 9D 6E 0C STA $0C6E,x[$80:0C6E] A:0003 X:0 Y:000E P:envmxdizc $80/B293 BD 6E 0C LDA $0C6E,x[$80:0C6E] A:0003 X:0 Y:000E P:envmxdizc $80/B296 48 PHA A:0003 X:0 Y:000E P:envmxdizc $80/B297 BD 62 0C LDA $0C62,x[$80:0C62] A:0003 X:0 Y:000E P:envmxdizc $80/B29A 48 PHA A:0 X:0 Y:000E P:envmxdiZc $80/B29B 8A TXA A:0 X:0 Y:000E P:envmxdiZc $80/B29C 4A LSR A A:0 X:0 Y:000E P:envmxdiZc $80/B29D FA PLX A:0 X:0 Y:000E P:envmxdiZc $80/B29E 7A PLY A:0 X:0 Y:000E P:envmxdiZc $80/B29F 22 41 B3 80 JSL $80B341[$80:B341] A:0 X:0 Y:0003 P:envmxdizc $80/B2A3 AE 94 0B LDX $0B94 [$80:0B94] A:0005 X:0 Y:0003 P:envmxdiZc $80/B2A6 22 C0 A9 80 JSL $80A9C0[$80:A9C0] A:0005 X:0 Y:0003 P:envmxdiZc $80/B2AA 82 61 FE BRL $FE61 [$B10E] A:3D20 X:0 Y:0 P:envmxdizc
$80/B341 ? (Executed when talking to the aerial building)
$80/B341 DA PHX ; Buffer X and Y on stack $80/B342 5A PHY $80/B343 0A ASL A A:0000 X:0000 Y:0000 P:envmxdIZc $80/B344 AA TAX A:0000 X:0000 Y:0000 P:envmxdIZc $80/B345 A3 03 LDA $03,s [$00:1E67] A:0000 X:0000 Y:0000 P:envmxdIZc $80/B347 F0 05 BEQ $05 [$B34E] A:0000 X:0000 Y:0000 P:envmxdIZc $80/B349 DD 4A 0C CMP $0C4A,x[$80:0C4A] A:0001 X:0 Y:0 P:envmxdizc $80/B34C B0 24 BCS $24 [$B372] A:0001 X:0 Y:0 P:eNvmxdizc $80/B34E A3 01 LDA $01,s [$00:1E65] A:0000 X:0000 Y:0000 P:envmxdIZc $80/B350 F0 05 BEQ $05 [$B357] A:0000 X:0000 Y:0000 P:envmxdIZc $80/B352 DD 56 0C CMP $0C56,x[$80:0C56] A:0001 X:0 Y:0001 P:envmxdizc $80/B355 B0 1B BCS $1B [$B372] A:0001 X:0 Y:0001 P:eNvmxdizc $80/B357 A3 03 LDA $03,s [$00:1E67] A:0000 X:0000 Y:0000 P:envmxdIZc $80/B359 9D 62 0C STA $0C62,x[$81:0C62] A:0000 X:0000 Y:0000 P:envmxdIZc $80/B35C 18 CLC A:0000 X:0000 Y:0000 P:envmxdIZc $80/B35D 7D 32 0C ADC $0C32,x[$81:0C32] A:0000 X:0000 Y:0000 P:envmxdIZc $80/B360 8D 2B 07 STA $072B [$81:072B] A:0002 X:0000 Y:0000 P:envmxdIzc $80/B363 A3 01 LDA $01,s [$00:1E65] A:0002 X:0000 Y:0000 P:envmxdIzc $80/B365 9D 6E 0C STA $0C6E,x[$81:0C6E] A:0000 X:0000 Y:0000 P:envmxdIZc $80/B368 18 CLC A:0000 X:0000 Y:0000 P:envmxdIZc $80/B369 7D 3E 0C ADC $0C3E,x[$81:0C3E] A:0000 X:0000 Y:0000 P:envmxdIZc $80/B36C 8D 2D 07 STA $072D [$81:072D] A:0010 X:0000 Y:0000 P:envmxdIzc $80/B36F 7A PLY ; Restore X and Y $80/B370 FA PLX $80/B371 6B RTL
$80/B381 08 PHP ; Buffer Flag Register value on stack $80/B382 E2 10 SEP #$10 ; X/Y = 8-bit $80/B384 C2 20 REP #$20 ; $80/B386 A2 80 LDX #$80 A:9994 X:0026 Y:0004 P:eNvmXdIzc $80/B388 8E 15 21 STX $2115 [$81:2115] A:9994 X:0080 Y:0004 P:eNvmXdIzc $80/B38B AD 27 07 LDA $0727 [$81:0727] A:9994 X:0080 Y:0004 P:eNvmXdIzc $80/B38E 18 CLC A:4000 X:0080 Y:0004 P:envmXdIzc $80/B38F 69 00 04 ADC #$0400 A:4000 X:0080 Y:0004 P:envmXdIzc $80/B392 8D 16 21 STA $2116 [$81:2116] A:4400 X:0080 Y:0004 P:envmXdIzc $80/B395 A9 01 18 LDA #$1801 ; Setup VRAM DMA $80/B398 8D 00 43 STA $4300 $80/B39B A9 00 01 LDA #$0100 ; Transfer #$100 Bytes $80/B39E 8D 05 43 STA $4305 $80/B3A1 AD 27 0C LDA $0C27 ; Source Address is in $0C27-9 $80/B3A4 8D 02 43 STA $4302 $80/B3A7 AE 29 0C LDX $0C29 $80/B3AA 8E 04 43 STX $4304 $80/B3AD A2 01 LDX #$01 ; Activate DMA $80/B3AF 8E 0B 42 STX $420B $80/B3B2 AD 27 0C LDA $0C27 ; Add #$100 to the source address and set it up in $20-2 $80/B3B5 18 CLC $80/B3B6 69 00 01 ADC #$0100 $80/B3B9 85 20 STA $20 $80/B3BB AE 29 0C LDX $0C29 $80/B3BE 86 22 STX $22 $80/B3C0 A7 20 LDA [$20] ; Next 8 bytes are palette data, stored in second BG palette $80/B3C2 8F 30 20 7E STA $7E2030 $80/B3C6 E6 20 INC $20 $80/B3C8 E6 20 INC $20 $80/B3CA A7 20 LDA [$20] $80/B3CC 8F 32 20 7E STA $7E2032 $80/B3D0 E6 20 INC $20 $80/B3D2 E6 20 INC $20 $80/B3D4 A7 20 LDA [$20] $80/B3D6 8F 34 20 7E STA $7E2034 $80/B3DA E6 20 INC $20 $80/B3DC E6 20 INC $20 $80/B3DE A7 20 LDA [$20] $80/B3E0 8F 36 20 7E STA $7E2036 $80/B3E4 E6 20 INC $20 $80/B3E6 E6 20 INC $20 $80/B3E8 A2 80 LDX #$80 A:00CD X:0094 Y:0004 P:eNvmXdIzc $80/B3EA 8E 15 21 STX $2115 [$81:2115] A:00CD X:0080 Y:0004 P:eNvmXdIzc $80/B3ED AD 27 07 LDA $0727 [$81:0727] A:00CD X:0080 Y:0004 P:eNvmXdIzc $80/B3F0 18 CLC A:4000 X:0080 Y:0004 P:envmXdIzc $80/B3F1 69 80 04 ADC #$0480 A:4000 X:0080 Y:0004 P:envmXdIzc $80/B3F4 8D 16 21 STA $2116 [$81:2116] A:4480 X:0080 Y:0004 P:envmXdIzc $80/B3F7 A9 01 18 LDA #$1801 ; Setup VRAM DMA $80/B3FA 8D 00 43 STA $4300 $80/B3FD A9 00 01 LDA #$0100 ; Transfer #$100 bytes $80/B400 8D 05 43 STA $4305 $80/B403 AD 2A 0C LDA $0C2A ; Source Address is in $0C2A-C $80/B406 8D 02 43 STA $4302 $80/B409 AE 2C 0C LDX $0C2C $80/B40C 8E 04 43 STX $4304 $80/B40F A2 01 LDX #$01 ; Activate DMA $80/B411 8E 0B 42 STX $420B $80/B414 AD 2A 0C LDA $0C2A ; Add #$100 to the source address and set it up in $20-2 $80/B417 18 CLC $80/B418 69 00 01 ADC #$0100 $80/B41B 85 20 STA $20 $80/B41D AE 2C 0C LDX $0C2C $80/B420 86 22 STX $22 $80/B422 A7 20 LDA [$20] ; Next 8 bytes are palette data, stored in second BG palette $80/B424 8F 38 20 7E STA $7E2038 $80/B428 E6 20 INC $20 $80/B42A E6 20 INC $20 $80/B42C A7 20 LDA [$20] $80/B42E 8F 3A 20 7E STA $7E203A $80/B432 E6 20 INC $20 $80/B434 E6 20 INC $20 $80/B436 A7 20 LDA [$20] $80/B438 8F 3C 20 7E STA $7E203C $80/B43C E6 20 INC $20 $80/B43E E6 20 INC $20 $80/B440 A7 20 LDA [$20] $80/B442 8F 3E 20 7E STA $7E203E $80/B446 E6 20 INC $20 $80/B448 E6 20 INC $20 $80/B44A A9 01 00 LDA #$0001 ; Set Flag for CGRAM Update $80/B44D 8D 1C 02 STA $021C $80/B450 A2 80 LDX #$80 A:0001 X:0094 Y:0004 P:envmXdIzc $80/B452 8E 15 21 STX $2115 [$81:2115] A:0001 X:0080 Y:0004 P:eNvmXdIzc $80/B455 AD 27 07 LDA $0727 [$81:0727] A:0001 X:0080 Y:0004 P:eNvmXdIzc $80/B458 18 CLC A:4000 X:0080 Y:0004 P:envmXdIzc $80/B459 69 00 05 ADC #$0500 A:4000 X:0080 Y:0004 P:envmXdIzc $80/B45C 8D 16 21 STA $2116 [$81:2116] A:4500 X:0080 Y:0004 P:envmXdIzc $80/B45F A9 01 18 LDA #$1801 ; Setup VRAM DMA $80/B462 8D 00 43 STA $4300 $80/B465 A9 00 01 LDA #$0100 ; Transfer #$100 bytes $80/B468 8D 05 43 STA $4305 $80/B46B A9 D9 97 LDA #$97D9 ; Source Address: $94/97D9 $80/B46E 8D 02 43 STA $4302 $80/B471 A2 94 LDX #$94 $80/B473 8E 04 43 STX $4304 $80/B476 A2 01 LDX #$01 ; Activate DMA $80/B478 8E 0B 42 STX $420B $80/B47B 28 PLP ; Restore Flag Register value $80/B47C 6B RTL
$80/B47D TEXTBOX: Setup VRAM Address (and other stuff???)
$80/B47D 08 PHP ; Buffer Flag Register value on stack $80/B47E C2 30 REP #$30 ; A/X/Y = 16-bit $80/B480 A9 B0 00 LDA #$00B0 A:9DAD X:0024 Y:0004 P:eNvmxdIzc $80/B483 8D 30 0C STA $0C30 [$81:0C30] A:00B0 X:0024 Y:0004 P:envmxdIzc $80/B486 A9 02 00 LDA #$0002 A:00B0 X:0024 Y:0004 P:envmxdIzc $80/B489 8D 21 07 STA $0721 [$81:0721] A:0002 X:0024 Y:0004 P:envmxdIzc $80/B48C AD 04 01 LDA $0104 ; Check if BG Mode is Mode 1 $80/B48F 29 07 00 AND #$0007 $80/B492 C9 01 00 CMP #$0001 $80/B495 D0 13 BNE $13 ; [$B4AA] Branch if not $80/B497 AD 0B 01 LDA $010B ; Take the address of the BG3 Tiles (Textbox Tiles) and form its VRAM address $80/B49A 29 0F 00 AND #$000F $80/B49D EB XBA $80/B49E 0A ASL A $80/B49F 0A ASL A $80/B4A0 0A ASL A $80/B4A1 0A ASL A $80/B4A2 8D 27 07 STA $0727 ; Store the VRAM Address of the Textbox Tiles in $0727 $80/B4A5 8D 29 07 STA $0729 ; Store the VRAM Address of the Textbox Tiles in $0729 $80/B4A8 28 PLP ; Restore Flag Register value $80/B4A9 6B RTL
$80/B4BF ? (Executed when talking to the aerial building and at startup)
$80/B4BF 86 00 STX $00 [$00:0000] A:0000 X:1002 Y:020C P:envmxdIZc $80/B4C1 84 02 STY $02 [$00:0002] A:0000 X:1002 Y:020C P:envmxdIZc $80/B4C3 0A ASL A A:0000 X:1002 Y:020C P:envmxdIZc $80/B4C4 AA TAX A:0000 X:1002 Y:020C P:envmxdIZc $80/B4C5 A5 00 LDA $00 [$00:0000] A:0000 X:0000 Y:020C P:envmxdIZc $80/B4C7 29 FF 00 AND #$00FF A:1002 X:0000 Y:020C P:envmxdIzc $80/B4CA 9D 32 0C STA $0C32,x[$81:0C32] A:0002 X:0000 Y:020C P:envmxdIzc $80/B4CD A5 00 LDA $00 [$00:0000] A:0002 X:0000 Y:020C P:envmxdIzc $80/B4CF 29 00 FF AND #$FF00 A:1002 X:0000 Y:020C P:envmxdIzc $80/B4D2 EB XBA A:1000 X:0000 Y:020C P:envmxdIzc $80/B4D3 9D 3E 0C STA $0C3E,x[$81:0C3E] A:0010 X:0000 Y:020C P:envmxdIzc $80/B4D6 A5 02 LDA $02 [$00:0002] A:0010 X:0000 Y:020C P:envmxdIzc $80/B4D8 29 FF 00 AND #$00FF A:020C X:0000 Y:020C P:envmxdIzc $80/B4DB 9D 4A 0C STA $0C4A,x[$81:0C4A] A:000C X:0000 Y:020C P:envmxdIzc $80/B4DE A5 02 LDA $02 [$00:0002] A:000C X:0000 Y:020C P:envmxdIzc $80/B4E0 29 00 FF AND #$FF00 A:020C X:0000 Y:020C P:envmxdIzc $80/B4E3 EB XBA A:0200 X:0000 Y:020C P:envmxdIzc $80/B4E4 9D 56 0C STA $0C56,x[$81:0C56] A:0002 X:0000 Y:020C P:envmxdIzc $80/B4E7 A5 02 LDA $02 [$00:0002] A:0002 X:0000 Y:020C P:envmxdIzc $80/B4E9 8D 02 42 STA $4202 [$81:4202] A:020C X:0000 Y:020C P:envmxdIzc $80/B4EC A9 00 00 LDA #$0000 A:020C X:0000 Y:020C P:envmxdIzc $80/B4EF 9D 7A 0C STA $0C7A,x[$81:0C7A] A:0000 X:0000 Y:020C P:envmxdIZc $80/B4F2 A9 01 00 LDA #$0001 A:0000 X:0000 Y:020C P:envmxdIZc $80/B4F5 9D 86 0C STA $0C86,x[$81:0C86] A:0001 X:0000 Y:020C P:envmxdIzc $80/B4F8 A9 03 00 LDA #$0003 A:0001 X:0000 Y:020C P:envmxdIzc $80/B4FB 9D 92 0C STA $0C92,x[$81:0C92] A:0003 X:0000 Y:020C P:envmxdIzc $80/B4FE A9 00 00 LDA #$0000 A:0003 X:0000 Y:020C P:envmxdIzc $80/B501 9D 9E 0C STA $0C9E,x[$81:0C9E] A:0000 X:0000 Y:020C P:envmxdIZc $80/B504 9E 62 0C STZ $0C62,x[$81:0C62] A:0000 X:0000 Y:020C P:envmxdIZc $80/B507 9E 6E 0C STZ $0C6E,x[$81:0C6E] A:0000 X:0000 Y:020C P:envmxdIZc $80/B50A AD 30 0C LDA $0C30 [$81:0C30] A:0000 X:0000 Y:020C P:envmxdIZc $80/B50D 29 FF 03 AND #$03FF A:00B0 X:0000 Y:020C P:envmxdIzc $80/B510 9D AA 0C STA $0CAA,x[$81:0CAA] A:00B0 X:0000 Y:020C P:envmxdIzc $80/B513 18 CLC A:00B0 X:0000 Y:020C P:envmxdIzc $80/B514 6D 16 42 ADC $4216 [$81:4216] A:00B0 X:0000 Y:020C P:envmxdIzc $80/B517 8D 30 0C STA $0C30 [$81:0C30] A:00C8 X:0000 Y:020C P:envmxdIzc $80/B51A 6B RTL A:00C8 X:0000 Y:020C P:envmxdIzc
$80/B51B ?
$80/B51B 8B PHB ; Buffer Program Bank on stack $80/B51C F4 00 7E PEA $7E00 ; Set Program Bank to $7E $80/B51F AB PLB $80/B520 AB PLB $80/B521 0A ASL A A:0 X:0 Y:0004 P:envmxdIzc $80/B522 AA TAX A:0 X:0 Y:0004 P:envmxdIZc $80/B523 BD 3E 0C LDA $0C3E,x ; Form Store Index: Load Y-coordinate $80/B526 3A DEC A ; Decrement Y-coordinate (so "#$01" is the actual lowest coordinate value) $80/B527 0A ASL A ; Multiply by #$20 (#$20 tiles per Tilemap row) $80/B528 0A ASL A $80/B529 0A ASL A $80/B52A 0A ASL A $80/B52B 0A ASL A $80/B52C 18 CLC ; Add X-coordinate $80/B52D 7D 32 0C ADC $0C32,x $80/B530 3A DEC A ; Decrement X-coordinate (so "#$01" is the actual lowest coordinate value) $80/B531 0A ASL A ; Multiply by 2 - each Tile value is 2 bytes in size $80/B532 A8 TAY ; Transfer Store Index in Y (for buffering) $80/B533 BD 56 0C LDA $0C56,x[$7E:0C56] A:0042 X:0 Y:0042 P:envmxdIzc $80/B536 1A INC A A:0008 X:0 Y:0042 P:envmxdIzc $80/B537 85 02 STA $02 [$00:0002] A:0009 X:0 Y:0042 P:envmxdIzc $80/B539 BD 4A 0C LDA $0C4A,x[$7E:0C4A] A:0009 X:0 Y:0042 P:envmxdIzc $80/B53C 1A INC A A:001C X:0 Y:0042 P:envmxdIzc $80/B53D 85 00 STA $00 [$00:0000] A:001D X:0 Y:0042 P:envmxdIzc $80/B53F 84 04 STY $04 ; Buffer Store Index in $04 $80/B541 DA PHX A:001D X:0 Y:0042 P:envmxdIzc $80/B542 BB TYX ; Transfer buffered Store Index in X for actual storing $80/B543 A9 80 20 LDA #$2080 A:001D X:0042 Y:0042 P:envmxdIzc $80/B546 9D 00 76 STA $7600,x[$7E:7642] A:2080 X:0042 Y:0042 P:envmxdIzc $80/B549 FA PLX A:2080 X:0042 Y:0042 P:envmxdIzc $80/B54A C8 INY A:2080 X:0 Y:0042 P:envmxdIZc $80/B54B C8 INY A:2080 X:0 Y:0043 P:envmxdIzc $80/B54C A5 00 LDA $00 [$00:0000] A:2080 X:0 Y:0044 P:envmxdIzc $80/B54E 3A DEC A A:001D X:0 Y:0044 P:envmxdIzc $80/B54F 85 00 STA $00 [$00:0000] A:001C X:0 Y:0044 P:envmxdIzc $80/B551 10 EE BPL $EE [$B541] A:001C X:0 Y:0044 P:envmxdIzc $80/B553 A5 04 LDA $04 ; Load Store Index, add #$40 (so it points one row lower) $80/B555 18 CLC $80/B556 69 40 00 ADC #$0040 $80/B559 A8 TAY ; Transfer new Store Index back in Y $80/B55A A5 02 LDA $02 [$00:0002] A:0082 X:0 Y:0082 P:envmxdIzc $80/B55C 3A DEC A A:0009 X:0 Y:0082 P:envmxdIzc $80/B55D 85 02 STA $02 [$00:0002] A:0008 X:0 Y:0082 P:envmxdIzc $80/B55F 10 D8 BPL $D8 [$B539] A:0008 X:0 Y:0082 P:envmxdIzc $80/B561 A9 01 00 LDA #$0001 ; Set Flag for VRAM update $80/B564 8D 42 07 STA $0742 $80/B567 AB PLB ; Restore Program Bank $80/B568 6B RTL
$80/B569 C2 30 REP #$30 ; A/X/Y = 16-bit $80/B56B 8B PHB ; Buffer Program Bank on stack $80/B56C F4 00 7E PEA $7E00 ; Set Program Bank to $7E $80/B56F AB PLB $80/B570 AB PLB $80/B571 0A ASL A A:0000 X:0024 Y:0004 P:envmxdIzc $80/B572 AA TAX A:0000 X:0024 Y:0004 P:envmxdIZc $80/B573 BD 4A 0C LDA $0C4A,x[$7E:0C4A] A:0000 X:0000 Y:0004 P:envmxdIZc $80/B576 85 02 STA $02 [$00:0002] A:000C X:0000 Y:0004 P:envmxdIzc $80/B578 BD 56 0C LDA $0C56,x[$7E:0C56] A:000C X:0000 Y:0004 P:envmxdIzc $80/B57B 85 04 STA $04 [$00:0004] A:0002 X:0000 Y:0004 P:envmxdIzc $80/B57D BD 9E 0C LDA $0C9E,x[$7E:0C9E] A:0002 X:0000 Y:0004 P:envmxdIzc $80/B580 EB XBA A:0000 X:0000 Y:0004 P:envmxdIZc $80/B581 0A ASL A A:0000 X:0000 Y:0004 P:envmxdIZc $80/B582 0A ASL A A:0000 X:0000 Y:0004 P:envmxdIZc $80/B583 18 CLC A:0000 X:0000 Y:0004 P:envmxdIZc $80/B584 7D 92 0C ADC $0C92,x[$7E:0C92] A:0000 X:0000 Y:0004 P:envmxdIZc $80/B587 18 CLC A:0003 X:0000 Y:0004 P:envmxdIzc $80/B588 69 80 20 ADC #$2080 A:0003 X:0000 Y:0004 P:envmxdIzc $80/B58B 85 08 STA $08 [$00:0008] A:2083 X:0000 Y:0004 P:envmxdIzc $80/B58D BD 7A 0C LDA $0C7A,x[$7E:0C7A] A:2083 X:0000 Y:0004 P:envmxdIzc $80/B590 C9 FF 00 CMP #$00FF A:0000 X:0000 Y:0004 P:envmxdIZc $80/B593 D0 03 BNE $03 [$B598] A:0000 X:0000 Y:0004 P:eNvmxdIzc
code is missing here
$80/B598 0A ASL A A:0000 X:0000 Y:0004 P:eNvmxdIzc $80/B599 0A ASL A A:0000 X:0000 Y:0004 P:envmxdIZc $80/B59A 0A ASL A A:0000 X:0000 Y:0004 P:envmxdIZc $80/B59B 0A ASL A A:0000 X:0000 Y:0004 P:envmxdIZc $80/B59C 89 10 00 BIT #$0010 A:0000 X:0000 Y:0004 P:envmxdIZc $80/B59F F0 03 BEQ $03 [$B5A4] A:0000 X:0000 Y:0004 P:envmxdIZc $80/B5A1 09 00 04 ORA #$0400 A:0010 X:0 Y:0004 P:envmxdIzc $80/B5A4 85 06 STA $06 [$00:0006] A:0000 X:0000 Y:0004 P:envmxdIZc $80/B5A6 BD 3E 0C LDA $0C3E,x[$7E:0C3E] A:0000 X:0000 Y:0004 P:envmxdIZc $80/B5A9 3A DEC A A:0010 X:0000 Y:0004 P:envmxdIzc $80/B5AA 0A ASL A A:000F X:0000 Y:0004 P:envmxdIzc $80/B5AB 0A ASL A A:001E X:0000 Y:0004 P:envmxdIzc $80/B5AC 0A ASL A A:003C X:0000 Y:0004 P:envmxdIzc $80/B5AD 0A ASL A A:0078 X:0000 Y:0004 P:envmxdIzc $80/B5AE 0A ASL A A:00F0 X:0000 Y:0004 P:envmxdIzc $80/B5AF 18 CLC A:01E0 X:0000 Y:0004 P:envmxdIzc $80/B5B0 7D 32 0C ADC $0C32,x[$7E:0C32] A:01E0 X:0000 Y:0004 P:envmxdIzc $80/B5B3 3A DEC A A:01E2 X:0000 Y:0004 P:envmxdIzc $80/B5B4 0A ASL A A:01E1 X:0000 Y:0004 P:envmxdIzc $80/B5B5 85 00 STA $00 [$00:0000] A:03C2 X:0000 Y:0004 P:envmxdIzc $80/B5B7 AA TAX A:03C2 X:0000 Y:0004 P:envmxdIzc $80/B5B8 A9 84 38 LDA #$3884 A:03C2 X:03C2 Y:0004 P:envmxdIzc $80/B5BB 18 CLC A:3884 X:03C2 Y:0004 P:envmxdIzc $80/B5BC 65 06 ADC $06 [$00:0006] A:3884 X:03C2 Y:0004 P:envmxdIzc $80/B5BE 9D 00 76 STA $7600,x[$7E:79C2] A:3884 X:03C2 Y:0004 P:envmxdIzc $80/B5C1 E8 INX A:3884 X:03C2 Y:0004 P:envmxdIzc $80/B5C2 E8 INX A:3884 X:03C3 Y:0004 P:envmxdIzc $80/B5C3 A5 02 LDA $02 [$00:0002] A:3884 X:03C4 Y:0004 P:envmxdIzc $80/B5C5 F0 10 BEQ $10 [$B5D7] A:000C X:03C4 Y:0004 P:envmxdIzc $80/B5C7 3A DEC A A:000C X:03C4 Y:0004 P:envmxdIzc $80/B5C8 A8 TAY A:000B X:03C4 Y:0004 P:envmxdIzc $80/B5C9 A9 85 38 LDA #$3885 A:000B X:03C4 Y:000B P:envmxdIzc $80/B5CC 18 CLC A:3885 X:03C4 Y:000B P:envmxdIzc $80/B5CD 65 06 ADC $06 [$00:0006] A:3885 X:03C4 Y:000B P:envmxdIzc $80/B5CF 9D 00 76 STA $7600,x[$7E:79C4] A:3885 X:03C4 Y:000B P:envmxdIzc $80/B5D2 E8 INX A:3885 X:03C4 Y:000B P:envmxdIzc $80/B5D3 E8 INX A:3885 X:03C5 Y:000B P:envmxdIzc $80/B5D4 88 DEY A:3885 X:03C6 Y:000B P:envmxdIzc $80/B5D5 10 F8 BPL $F8 [$B5CF] A:3885 X:03C6 Y:000A P:envmxdIzc $80/B5D7 A9 86 38 LDA #$3886 A:3885 X:03DC Y:FFFF P:eNvmxdIzc $80/B5DA 18 CLC A:3886 X:03DC Y:FFFF P:envmxdIzc $80/B5DB 65 06 ADC $06 [$00:0006] A:3886 X:03DC Y:FFFF P:envmxdIzc $80/B5DD 9D 00 76 STA $7600,x[$7E:79DC] A:3886 X:03DC Y:FFFF P:envmxdIzc $80/B5E0 A5 00 LDA $00 [$00:0000] A:3886 X:03DC Y:FFFF P:envmxdIzc $80/B5E2 18 CLC A:03C2 X:03DC Y:FFFF P:envmxdIzc $80/B5E3 69 40 00 ADC #$0040 A:03C2 X:03DC Y:FFFF P:envmxdIzc $80/B5E6 85 00 STA $00 [$00:0000] A:0402 X:03DC Y:FFFF P:envmxdIzc $80/B5E8 AA TAX A:0402 X:03DC Y:FFFF P:envmxdIzc $80/B5E9 A5 04 LDA $04 [$00:0004] A:0402 X:0402 Y:FFFF P:envmxdIzc $80/B5EB F0 34 BEQ $34 [$B621] A:0002 X:0402 Y:FFFF P:envmxdIzc $80/B5ED 3A DEC A A:0002 X:0402 Y:FFFF P:envmxdIzc $80/B5EE A8 TAY A:0001 X:0402 Y:FFFF P:envmxdIzc $80/B5EF 5A PHY A:0001 X:0402 Y:0001 P:envmxdIzc $80/B5F0 A9 87 38 LDA #$3887 A:0001 X:0402 Y:0001 P:envmxdIzc $80/B5F3 18 CLC A:3887 X:0402 Y:0001 P:envmxdIzc $80/B5F4 65 06 ADC $06 [$00:0006] A:3887 X:0402 Y:0001 P:envmxdIzc $80/B5F6 9D 00 76 STA $7600,x[$7E:7A02] A:3887 X:0402 Y:0001 P:envmxdIzc $80/B5F9 E8 INX A:3887 X:0402 Y:0001 P:envmxdIzc $80/B5FA E8 INX A:3887 X:0403 Y:0001 P:envmxdIzc $80/B5FB A5 02 LDA $02 [$00:0002] A:3887 X:0404 Y:0001 P:envmxdIzc $80/B5FD F0 0C BEQ $0C [$B60B] A:000C X:0404 Y:0001 P:envmxdIzc $80/B5FF 3A DEC A A:000C X:0404 Y:0001 P:envmxdIzc $80/B600 A8 TAY A:000B X:0404 Y:0001 P:envmxdIzc $80/B601 A5 08 LDA $08 [$00:0008] A:000B X:0404 Y:000B P:envmxdIzc $80/B603 9D 00 76 STA $7600,x[$7E:7A04] A:2083 X:0404 Y:000B P:envmxdIzc $80/B606 E8 INX A:2083 X:0404 Y:000B P:envmxdIzc $80/B607 E8 INX A:2083 X:0405 Y:000B P:envmxdIzc $80/B608 88 DEY A:2083 X:0406 Y:000B P:envmxdIzc $80/B609 10 F8 BPL $F8 [$B603] A:2083 X:0406 Y:000A P:envmxdIzc $80/B60B A9 88 38 LDA #$3888 A:2083 X:041C Y:FFFF P:eNvmxdIzc $80/B60E 18 CLC A:3888 X:041C Y:FFFF P:envmxdIzc $80/B60F 65 06 ADC $06 [$00:0006] A:3888 X:041C Y:FFFF P:envmxdIzc $80/B611 9D 00 76 STA $7600,x[$7E:7A1C] A:3888 X:041C Y:FFFF P:envmxdIzc $80/B614 A5 00 LDA $00 [$00:0000] A:3888 X:041C Y:FFFF P:envmxdIzc $80/B616 18 CLC A:0402 X:041C Y:FFFF P:envmxdIzc $80/B617 69 40 00 ADC #$0040 A:0402 X:041C Y:FFFF P:envmxdIzc $80/B61A 85 00 STA $00 [$00:0000] A:0442 X:041C Y:FFFF P:envmxdIzc $80/B61C AA TAX A:0442 X:041C Y:FFFF P:envmxdIzc $80/B61D 7A PLY A:0442 X:0442 Y:FFFF P:envmxdIzc $80/B61E 88 DEY A:0442 X:0442 Y:0001 P:envmxdIzc $80/B61F 10 CE BPL $CE [$B5EF] A:0442 X:0442 Y:0000 P:envmxdIZc $80/B621 A9 89 38 LDA #$3889 A:0482 X:0482 Y:FFFF P:eNvmxdIzc $80/B624 18 CLC A:3889 X:0482 Y:FFFF P:envmxdIzc $80/B625 65 06 ADC $06 [$00:0006] A:3889 X:0482 Y:FFFF P:envmxdIzc $80/B627 9D 00 76 STA $7600,x[$7E:7A82] A:3889 X:0482 Y:FFFF P:envmxdIzc $80/B62A E8 INX A:3889 X:0482 Y:FFFF P:envmxdIzc $80/B62B E8 INX A:3889 X:0483 Y:FFFF P:envmxdIzc $80/B62C A5 02 LDA $02 [$00:0002] A:3889 X:0484 Y:FFFF P:envmxdIzc $80/B62E F0 10 BEQ $10 [$B640] A:000C X:0484 Y:FFFF P:envmxdIzc $80/B630 3A DEC A A:000C X:0484 Y:FFFF P:envmxdIzc $80/B631 A8 TAY A:000B X:0484 Y:FFFF P:envmxdIzc $80/B632 A9 8A 38 LDA #$388A A:000B X:0484 Y:000B P:envmxdIzc $80/B635 18 CLC A:388A X:0484 Y:000B P:envmxdIzc $80/B636 65 06 ADC $06 [$00:0006] A:388A X:0484 Y:000B P:envmxdIzc $80/B638 9D 00 76 STA $7600,x[$7E:7A84] A:388A X:0484 Y:000B P:envmxdIzc $80/B63B E8 INX A:388A X:0484 Y:000B P:envmxdIzc $80/B63C E8 INX A:388A X:0485 Y:000B P:envmxdIzc $80/B63D 88 DEY A:388A X:0486 Y:000B P:envmxdIzc $80/B63E 10 F8 BPL $F8 [$B638] A:388A X:0486 Y:000A P:envmxdIzc $80/B640 A9 8B 38 LDA #$388B A:388A X:049C Y:FFFF P:eNvmxdIzc $80/B643 18 CLC A:388B X:049C Y:FFFF P:envmxdIzc $80/B644 65 06 ADC $06 [$00:0006] A:388B X:049C Y:FFFF P:envmxdIzc $80/B646 9D 00 76 STA $7600,x[$7E:7A9C] A:388B X:049C Y:FFFF P:envmxdIzc $80/B649 A9 01 00 LDA #$0001 ; Set Flag for VRAM update $80/B64C 8D 42 07 STA $0742 $80/B64F AB PLB ; Restore Program Bank $80/B650 6B RTL
$80/B68D ?
$80/B68D 48 PHA A:0 X:0002 Y:0004 P:eNvmxdIzc $80/B68E 8A TXA A:0 X:0002 Y:0004 P:eNvmxdIzc $80/B68F 29 07 00 AND #$0007 A:0002 X:0002 Y:0004 P:envmxdIzc $80/B692 0A ASL A A:0002 X:0002 Y:0004 P:envmxdIzc $80/B693 AA TAX A:0004 X:0002 Y:0004 P:envmxdIzc $80/B694 BF A4 B6 80 LDA $80B6A4,x[$80:B6A8] A:0004 X:0004 Y:0004 P:envmxdIzc $80/B698 85 00 STA $00 [$00:0000] A:B73B X:0004 Y:0004 P:eNvmxdIzc $80/B69A 68 PLA A:B73B X:0004 Y:0004 P:eNvmxdIzc $80/B69B 0A ASL A A:0 X:0004 Y:0004 P:envmxdIZc $80/B69C AA TAX A:0 X:0004 Y:0004 P:envmxdIZc $80/B69D F4 A2 B6 PEA $B6A2 ; Put Return Address on stack $80/B6A0 6C 00 00 JMP ($0000)[$80:B73B] A:0 X:0 Y:0004 P:envmxdIZc $80/B6A3 6B RTL
$80/B6A4 Jump Table for $80/B68D
data is missing here
$80/B6B4 ?
$80/B6B4 48 PHA A:0 X:0002 Y:0004 P:eNvmxdIzc $80/B6B5 8A TXA A:0 X:0002 Y:0004 P:eNvmxdIzc $80/B6B6 29 07 00 AND #$0007 A:0002 X:0002 Y:0004 P:envmxdIzc $80/B6B9 0A ASL A A:0002 X:0002 Y:0004 P:envmxdIzc $80/B6BA AA TAX A:0004 X:0002 Y:0004 P:envmxdIzc $80/B6BB BF CB B6 80 LDA $80B6CB,x[$80:B6CF] A:0004 X:0004 Y:0004 P:envmxdIzc $80/B6BF 85 00 STA $00 [$00:0000] A:B87D X:0004 Y:0004 P:eNvmxdIzc $80/B6C1 68 PLA A:B87D X:0004 Y:0004 P:eNvmxdIzc $80/B6C2 0A ASL A A:0 X:0004 Y:0004 P:envmxdIZc $80/B6C3 AA TAX A:0 X:0004 Y:0004 P:envmxdIZc $80/B6C4 F4 C9 B6 PEA $B6C9 A:0 X:0 Y:0004 P:envmxdIZc $80/B6C7 6C 00 00 JMP ($0000)[$80:B87D] A:0 X:0 Y:0004 P:envmxdIZc $80/B6CA 6B RTL A:0007 X:0 Y:FFFF P:envmxdIzc
$80/B6CB Jump Table for $80/B6B4
data is missing here
$80/B73B ?
$80/B68D jumps here
$80/B73B AD B6 0C LDA $0CB6 [$81:0CB6] A:0 X:0 Y:0004 P:envmxdIZc $80/B73E D0 0C BNE $0C [$B74C] A:0 X:0 Y:0004 P:envmxdIZc $80/B740 BD 56 0C LDA $0C56,x[$81:0C56] A:0 X:0 Y:0004 P:envmxdIZc $80/B743 8D 1D 0C STA $0C1D [$81:0C1D] A:0008 X:0 Y:0004 P:envmxdIzc $80/B746 A9 00 00 LDA #$0000 A:0008 X:0 Y:0004 P:envmxdIzc $80/B749 9D 56 0C STA $0C56,x[$81:0C56] A:0 X:0 Y:0004 P:envmxdIZc $80/B74C BD 56 0C LDA $0C56,x[$81:0C56] A:0 X:0 Y:0004 P:envmxdIZc $80/B74F CD 1D 0C CMP $0C1D [$81:0C1D] A:0 X:0 Y:0004 P:envmxdIZc $80/B752 10 01 BPL $01 [$B755] A:0 X:0 Y:0004 P:eNvmxdIzc $80/B754 1A INC A A:0 X:0 Y:0004 P:eNvmxdIzc $80/B755 9D 56 0C STA $0C56,x[$81:0C56] A:0001 X:0 Y:0004 P:envmxdIzc $80/B758 DA PHX A:0001 X:0 Y:0004 P:envmxdIzc $80/B759 8A TXA A:0001 X:0 Y:0004 P:envmxdIzc $80/B75A 4A LSR A A:0 X:0 Y:0004 P:envmxdIZc $80/B75B 22 69 B5 80 JSL $80B569[$80:B569] A:0 X:0 Y:0004 P:envmxdIZc $80/B75F FA PLX A:0001 X:00FC Y:FFFF P:eNvmxdIzc $80/B760 BD 56 0C LDA $0C56,x[$81:0C56] A:0001 X:0 Y:FFFF P:envmxdIZc $80/B763 CD 1D 0C CMP $0C1D [$81:0C1D] A:0001 X:0 Y:FFFF P:envmxdIzc $80/B766 D0 07 BNE $07 [$B76F] A:0001 X:0 Y:FFFF P:eNvmxdIzc $80/B768 A9 01 00 LDA #$0001 ; Set Flag $80/B76B 8D 1B 0C STA $0C1B $80/B76E 60 RTS $80/B76F 9C 1B 0C STZ $0C1B ; Clear Flag $80/B772 60 RTS
$80/B87D ?
$80/B6B4 jumps here
$80/B87D AD B6 0C LDA $0CB6 [$81:0CB6] A:0 X:0 Y:0004 P:envmxdIZc $80/B880 D0 06 BNE $06 [$B888] A:0 X:0 Y:0004 P:envmxdIZc $80/B882 BD 56 0C LDA $0C56,x[$81:0C56] A:0 X:0 Y:0004 P:envmxdIZc $80/B885 8D 1D 0C STA $0C1D [$81:0C1D] A:0008 X:0 Y:0004 P:envmxdIzc $80/B888 DA PHX A:0008 X:0 Y:0004 P:envmxdIzc $80/B889 8A TXA A:0008 X:0 Y:0004 P:envmxdIzc $80/B88A 4A LSR A A:0 X:0 Y:0004 P:envmxdIZc $80/B88B 22 1B B5 80 JSL $80B51B[$80:B51B] A:0 X:0 Y:0004 P:envmxdIZc $80/B88F FA PLX A:0001 X:0 Y:02C2 P:eNvmxdIzc $80/B890 BD 56 0C LDA $0C56,x[$81:0C56] A:0001 X:0 Y:02C2 P:envmxdIZc $80/B893 F0 01 BEQ $01 [$B896] A:0008 X:0 Y:02C2 P:envmxdIzc $80/B895 3A DEC A A:0008 X:0 Y:02C2 P:envmxdIzc $80/B896 9D 56 0C STA $0C56,x[$81:0C56] A:0007 X:0 Y:02C2 P:envmxdIzc $80/B899 DA PHX A:0007 X:0 Y:02C2 P:envmxdIzc $80/B89A 8A TXA A:0007 X:0 Y:02C2 P:envmxdIzc $80/B89B 4A LSR A A:0 X:0 Y:02C2 P:envmxdIZc $80/B89C 22 69 B5 80 JSL $80B569[$80:B569] A:0 X:0 Y:02C2 P:envmxdIZc $80/B8A0 FA PLX A:0001 X:027C Y:FFFF P:eNvmxdIzc $80/B8A1 BD 56 0C LDA $0C56,x[$81:0C56] A:0001 X:0 Y:FFFF P:envmxdIZc $80/B8A4 D0 13 BNE $13 [$B8B9] A:0007 X:0 Y:FFFF P:envmxdIzc $80/B8A6 AD 1D 0C LDA $0C1D [$81:0C1D] A:0 X:0 Y:FFFF P:envmxdIZc $80/B8A9 9D 56 0C STA $0C56,x[$81:0C56] A:0008 X:0 Y:FFFF P:envmxdIzc $80/B8AC 8A TXA A:0008 X:0 Y:FFFF P:envmxdIzc $80/B8AD 4A LSR A A:0 X:0 Y:FFFF P:envmxdIZc $80/B8AE 22 1B B5 80 JSL $80B51B[$80:B51B] A:0 X:0 Y:FFFF P:envmxdIZc $80/B8B2 A9 01 00 LDA #$0001 ; Set Flag $80/B8B5 8D 1B 0C STA $0C1B $80/B8B8 60 RTS $80/B8B9 9C 1B 0C STZ $0C1B ; Clear Flag $80/B8BC 60 RTS
$80/B91E TEXTBOX: Clear Tiles
$80/B91E 08 PHP ; Buffer Flag Register value and Program Bank on stack $80/B91F 8B PHB $80/B920 F4 00 7E PEA $7E00 ; Set Program Bank to $7E $80/B923 AB PLB $80/B924 AB PLB $80/B925 C2 30 REP #$30 ; A/X/Y = 16-bit $80/B927 A2 FE 07 LDX #$07FE ; Setup Store Index/Loop Counter $80/B92A A9 80 00 LDA #$0080 ; Load Value to clear $80/B92D 9D 00 76 STA $7600,x ; Store in Textbox Tile Buffer $80/B930 CA DEX ; Decrement Store Index/Loop Counter twice $80/B931 CA DEX $80/B932 10 F6 BPL $F6 ; [$B92A] Loop until everything is done $80/B934 A9 01 00 LDA #$0001 ; Set Flag for VRAM update $80/B937 8D 42 07 STA $0742 $80/B93A AB PLB ; Restore Flag Register value and Program Bank $80/B93B 28 PLP $80/B93C 6B RTL
$80/B93D Set new Palette 0 in CGRAM Buffer
This subroutine transfers one palette from the address in $0C2D-F to CGRAM buffer. Note that it always transfers only one palette, and the destination is fixed, too (always the first Background Palette).
$80/B93D C2 30 REP #$30 ; A/X/Y = 16-bit $80/B93F AD 2E 0C LDA $0C2E ; Setup source address in $20-2 $80/B942 85 21 STA $21 $80/B944 AD 2D 0C LDA $0C2D $80/B947 85 20 STA $20 $80/B949 A9 00 7E LDA #$7E00 ; Setup the address of the CGRAM buffer ($7E/2000) in $23-5 $80/B94C 85 24 STA $24 $80/B94E A9 00 20 LDA #$2000 $80/B951 85 23 STA $23 $80/B953 A0 1E 00 LDY #$001E ; Transfer one Palette from Source Address to CGRAM buffer $80/B956 B7 20 LDA [$20],y $80/B958 97 23 STA [$23],y $80/B95A 88 DEY ; (Decrement Loop Counter/Index twice) $80/B95B 88 DEY $80/B95C 10 F8 BPL $F8 ; [$B956] Loop until the whole palette is transfered $80/B95E A9 01 00 LDA #$0001 ; Set Flag to CGRAM Update $80/B961 8D 1C 02 STA $021C $80/B964 6B RTL
A contains the value that gets ORed to every tile, Y contains the number of double-bytes to do.
$80/B965 29 03 00 AND #$0003 A:0003 X:0306 Y:0002 P:envmxdIzc $80/B968 EB XBA A:0003 X:0306 Y:0002 P:envmxdIzc $80/B969 0A ASL A A:0300 X:0306 Y:0002 P:envmxdIZc $80/B96A 0A ASL A A:0600 X:0306 Y:0002 P:envmxdIzc $80/B96B 85 02 STA $02 [$00:0002] A:0C00 X:0306 Y:0002 P:envmxdIzc $80/B96D 86 04 STX $04 [$00:0004] A:0C00 X:0306 Y:0002 P:envmxdIzc $80/B96F 88 DEY ; Decrement double-bytes to do by one and store it in $06 $80/B970 84 06 STY $06 ; (Has to be decremented because Loop Counter stops at #$FF, not at #$00) $80/B972 8A TXA A:0C00 X:0306 Y:0001 P:envmxdIzc $80/B973 29 1F 00 AND #$001F A:0306 X:0306 Y:0001 P:envmxdIzc $80/B976 0A ASL A A:0006 X:0306 Y:0001 P:envmxdIzc $80/B977 85 00 STA $00 [$00:0000] A:000C X:0306 Y:0001 P:envmxdIzc $80/B979 A5 04 LDA $04 [$00:0004] A:000C X:0306 Y:0001 P:envmxdIzc $80/B97B 29 00 1F AND #$1F00 A:0306 X:0306 Y:0001 P:envmxdIzc $80/B97E 4A LSR A A:0300 X:0306 Y:0001 P:envmxdIzc $80/B97F 4A LSR A A:0180 X:0306 Y:0001 P:envmxdIzc $80/B980 18 CLC A:00C0 X:0306 Y:0001 P:envmxdIzc $80/B981 65 00 ADC $00 [$00:0000] A:00C0 X:0306 Y:0001 P:envmxdIzc $80/B983 AA TAX A:00CC X:0306 Y:0001 P:envmxdIzc $80/B984 A4 06 LDY $06 ; Load Loop Counter in Y $80/B986 BF 00 76 7E LDA $7E7600,x[$7E:76CC] A:00CC X:00CC Y:0001 P:envmxdIzc $80/B98A 29 FF F3 AND #$F3FF A:2083 X:00CC Y:0001 P:envmxdIzc $80/B98D 05 02 ORA $02 [$00:0002] A:2083 X:00CC Y:0001 P:envmxdIzc $80/B98F 9F 00 76 7E STA $7E7600,x[$7E:76CC] A:2C83 X:00CC Y:0001 P:envmxdIzc $80/B993 BF 40 76 7E LDA $7E7640,x[$7E:770C] A:2C83 X:00CC Y:0001 P:envmxdIzc $80/B997 29 FF F3 AND #$F3FF A:20DD X:00CC Y:0001 P:envmxdIzc $80/B99A 05 02 ORA $02 [$00:0002] A:20DD X:00CC Y:0001 P:envmxdIzc $80/B99C 9F 40 76 7E STA $7E7640,x[$7E:770C] A:2CDD X:00CC Y:0001 P:envmxdIzc $80/B9A0 E8 INX ; Increment Load/Store Index twice $80/B9A1 E8 INX $80/B9A2 88 DEY ; Decrement Loop Counter $80/B9A3 10 E1 BPL $E1 [$B986] A:2CDD X:00CE Y:0 P:envmxdIZc $80/B9A5 A9 01 00 LDA #$0001 ; Set Flag to Update Textbox Tiles in VRAM $80/B9A8 8D 42 07 STA $0742 $80/B9AB 6B RTL
$80/BB84 MCC Memory Controller Settings: Enable Flash R/W
$80/BB84 08 PHP ; Buffer Flag Register value on stack $80/BB85 E2 20 SEP #$20 ; A = 8-bit $80/BB87 A9 00 LDA #$00 $80/BB89 8F 00 50 05 STA $055000 ; Bank $40-$4F: PSRAM $80/BB8D 8F 00 50 06 STA $065000 ; Bank $50-$5F: PSRAM $80/BB91 8F 00 50 04 STA $045000 ; LoROM Mapping $80/BB95 8F 00 50 01 STA $015000 ; Bank $00-$3F: Flash $80/BB99 A9 80 LDA #$80 $80/BB9B 8F 00 50 02 STA $025000 ; Flash: HiROM $80/BB9F 8F 00 50 03 STA $035000 ; Bank $60-$6F: Flash $80/BBA3 8F 00 50 0C STA $0C5000 ; Enable Bank $C0-$FF Flash Reads $80/BBA7 8F 00 50 0D STA $0D5000 ; Enable Bank $C0-$FF Flash Writes $80/BBAB 8F 00 50 0E STA $0E5000 ; Apply Changes to Other MCC Registers $80/BBAF 28 PLP ; Restore Flag Register value $80/BBB0 6B RTL
$80/BBB1 MCC Memory Controller Settings: Disable Flash R/W
$80/BBB1 08 PHP ; Buffer Flag Register value on stack $80/BBB2 E2 20 SEP #$20 ; A = 8-bit $80/BBB4 A9 00 LDA #$00 $80/BBB6 8F 00 50 05 STA $055000 ; Bank $40-$4F: PSRAM $80/BBBA 8F 00 50 06 STA $065000 ; Bank $50-$5F: PSRAM $80/BBBE 8F 00 50 04 STA $045000 ; LoROM Mapping $80/BBC2 8F 00 50 01 STA $015000 ; Bank $00-$3F: Flash $80/BBC6 8F 00 50 0C STA $0C5000 ; Disable Bank $C0-$FF Flash Reads $80/BBCA 8F 00 50 0D STA $0D5000 ; Disable Bank $C0-$FF Flash Writes $80/BBCE A9 80 LDA #$80 $80/BBD0 8F 00 50 02 STA $025000 ; Flash: HiROM $80/BBD4 8F 00 50 03 STA $035000 ; Bank $60-$6F: Flash $80/BBD8 8F 00 50 0E STA $0E5000 ; Apply Changes to Other MCC Registers $80/BBDC 28 PLP ; Restore Flag Register value $80/BBDD 6B RTL
$80/BD6C ? (Execute Subroutine from Jump Table)
$80/BD6C 08 PHP ; Buffer Flag Register value on stack $80/BD6D E2 30 SEP #$30 ; A/X/Y = 8-bit $80/BD6F AD 41 14 LDA $1441 ; Load Jump Table Index $80/BD72 0A ASL A ; Multiply by 2 (each Jump Table Entry is 2 bytes in size) $80/BD73 AA TAX ; Transfer to X $80/BD74 FC 79 BD JSR ($BD79,x) ; JUMP $80/BD77 28 PLP ; Restore Flag Register value $80/BD78 6B RTL
$80/BD79 Jump Table for $80/BD6C
81 BD 86 BD 8B BD 90 BD
$80/BD81 ?
$80/BD81 22 94 5A 10 JSL $105A94[$10:5A94] A:0 X:0 Y:0 P:envMXdIZc $80/BD85 60 RTS A:00FF X:0 Y:0 P:eNvMXdIzc
$80/BD95 ?
$80/BD95 A9 FF LDA #$FF A:0 X:0 Y:0 P:envMXdIZc $80/BD97 8F 00 00 C0 STA $C00000[$C0:0000] A:00FF X:0 Y:0 P:eNvMXdIzc $80/BD9B 6B RTL A:00FF X:0 Y:0 P:eNvMXdIzc
$80/C177 ? (Check if Data from Flash Cart is valid)
$80/C177 08 PHP ; Buffer Flag Register value on stack $80/C178 E2 20 SEP #$20 ; A = 8-bit $80/C17A C2 10 REP #$10 ; X/Y = 16-bit $80/C17C 22 10 5B 10 JSL $105B10[$10:5B10] A:0080 X:0007 Y:0 P:eNvMxdIzC $80/C180 AF D6 99 7E LDA $7E99D6[$7E:99D6] A:00FF X:0 Y:0 P:eNvMxdIzC $80/C184 C9 4D CMP #$4D A:004D X:0 Y:0 P:envMxdIzC $80/C186 D0 36 BNE $36 ; [$C1BE] Flash Cart data isn't valid - clear flag, exit $80/C188 AF D7 99 7E LDA $7E99D7[$7E:99D7] A:004D X:0 Y:0 P:envMxdIZC $80/C18C C9 50 CMP #$50 A:0050 X:0 Y:0 P:envMxdIzC $80/C18E D0 2E BNE $2E ; [$C1BE] Flash Cart data isn't valid - clear flag, exit $80/C190 AF D8 99 7E LDA $7E99D8[$7E:99D8] A:0050 X:0 Y:0 P:envMxdIZC $80/C194 29 81 AND #$81 A:0 X:0 Y:0 P:envMxdIZC $80/C196 D0 26 BNE $26 ; [$C1BE] Flash Cart data isn't valid - clear flag, exit $80/C198 E2 10 SEP #$10 A:0 X:0 Y:0 P:envMxdIZC $80/C19A AF D9 99 7E LDA $7E99D9[$7E:99D9] A:0 X:0 Y:0 P:envMXdIZC $80/C19E 4A LSR A A:002B X:0 Y:0 P:envMXdIzC $80/C19F 4A LSR A A:0015 X:0 Y:0 P:envMXdIzC $80/C1A0 4A LSR A A:000A X:0 Y:0 P:envMXdIzC $80/C1A1 4A LSR A A:0005 X:0 Y:0 P:envMXdIzc $80/C1A2 3A DEC A A:0002 X:0 Y:0 P:envMXdIzC $80/C1A3 8D 41 14 STA $1441 [$80:1441] A:0001 X:0 Y:0 P:envMXdIzC $80/C1A6 C9 04 CMP #$04 A:0001 X:0 Y:0 P:envMXdIzC $80/C1A8 B0 14 BCS $14 [$C1BE] A:0001 X:0 Y:0 P:eNvMXdIzc $80/C1AA AF D9 99 7E LDA $7E99D9[$7E:99D9] A:0001 X:0 Y:0 P:eNvMXdIzc $80/C1AE 29 0F AND #$0F A:002B X:0 Y:0 P:envMXdIzc $80/C1B0 38 SEC A:000B X:0 Y:0 P:envMXdIzc $80/C1B1 E9 06 SBC #$06 ; If value is less than #$06... $80/C1B3 90 09 BCC $09 ; [$C1BE] ... Flash Cart data isn't valid - clear flag, exit $80/C1B5 AA TAX A:0005 X:0 Y:0 P:envMXdIzC $80/C1B6 A9 01 LDA #$01 ; Set Flag in $1440 "Flash Cart data is valid" $80/C1B8 CA DEX ; Decrement X $80/C1B9 F0 05 BEQ $05 ; [$C1C0] Exit when X has run out $80/C1BB 0A ASL A ; The flag gets pushed on bit to the left for 1 in X $80/C1BC 80 FA BRA $FA ; [$C1B8] (Loop until X has run out) $80/C1BE A9 00 LDA #$00 ; Clear Flag in $1440: Flash Cart data is invalid $80/C1C0 8D 40 14 STA $1440 $80/C1C3 28 PLP ; Restore Flag Register value $80/C1C4 6B RTL
$80/C1C5 ?
See nocash's FullSNES, Section "SNES Cart Satellaview I/O FLASH Detection"
$80/C1C5 08 PHP ; Buffer Flag Register value on stack $80/C1C6 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/C1C8 A9 38 LDA #$38 ; DETECTION SEQUENCE FOR FLASH CHIP $80/C1CA 8F 00 00 C0 STA $C00000 ; Send #$38 and #$D0 to Flash Chip $80/C1CE A9 D0 LDA #$D0 $80/C1D0 8F 00 00 C0 STA $C00000 $80/C1D4 48 PHA ; Wait $80/C1D5 68 PLA $80/C1D6 48 PHA $80/C1D7 68 PLA $80/C1D8 48 PHA $80/C1D9 68 PLA $80/C1DA A9 71 LDA #$71 ; "Enter Status Mode" $80/C1DC 8F 00 00 C0 STA $C00000 $80/C1E0 AF 02 00 C0 LDA $C00002 ; Wait until Flash Cart sets MSB (ready) $80/C1E4 10 FA BPL $FA ; [$C1E0] $80/C1E6 A9 72 LDA #$72 ; "Request Chip Info Part 2" ($72, $75) $80/C1E8 8F 00 00 C0 STA $C00000 $80/C1EC A9 75 LDA #$75 $80/C1EE 8F 00 00 C0 STA $C00000 $80/C1F2 AF 00 FF C0 LDA $C0FF00[$C0:FF00] A:0075 X:0007 Y:0 P:envMXdIzC $80/C1F6 8F D6 99 7E STA $7E99D6[$7E:99D6] A:004D X:0007 Y:0 P:envMXdIzC $80/C1FA AF 02 FF C0 LDA $C0FF02[$C0:FF02] A:004D X:0007 Y:0 P:envMXdIzC $80/C1FE 8F D7 99 7E STA $7E99D7[$7E:99D7] A:0050 X:0007 Y:0 P:envMXdIzC $80/C202 AF 04 FF C0 LDA $C0FF04[$C0:FF04] A:0050 X:0007 Y:0 P:envMXdIzC $80/C206 8F D8 99 7E STA $7E99D8[$7E:99D8] A:0 X:0007 Y:0 P:envMXdIZC $80/C20A AF 06 FF C0 LDA $C0FF06[$C0:FF06] A:0 X:0007 Y:0 P:envMXdIZC $80/C20E 8F D9 99 7E STA $7E99D9[$7E:99D9] A:002B X:0007 Y:0 P:envMXdIzC $80/C212 AF 08 FF C0 LDA $C0FF08[$C0:FF08] A:002B X:0007 Y:0 P:envMXdIzC $80/C216 8F DA 99 7E STA $7E99DA[$7E:99DA] A:0 X:0007 Y:0 P:envMXdIZC $80/C21A AF 0A FF C0 LDA $C0FF0A[$C0:FF0A] A:0 X:0007 Y:0 P:envMXdIZC $80/C21E 8F DB 99 7E STA $7E99DB[$7E:99DB] A:0 X:0007 Y:0 P:envMXdIZC $80/C222 AF 0C FF C0 LDA $C0FF0C[$C0:FF0C] A:0 X:0007 Y:0 P:envMXdIZC $80/C226 8F DC 99 7E STA $7E99DC[$7E:99DC] A:0 X:0007 Y:0 P:envMXdIZC $80/C22A AF 0E FF C0 LDA $C0FF0E[$C0:FF0E] A:0 X:0007 Y:0 P:envMXdIZC $80/C22E 8F DD 99 7E STA $7E99DD[$7E:99DD] A:0 X:0007 Y:0 P:envMXdIZC $80/C232 AF 10 FF C0 LDA $C0FF10[$C0:FF10] A:0 X:0007 Y:0 P:envMXdIZC $80/C236 8F DE 99 7E STA $7E99DE[$7E:99DE] A:0 X:0007 Y:0 P:envMXdIZC $80/C23A AF 12 FF C0 LDA $C0FF12[$C0:FF12] A:0 X:0007 Y:0 P:envMXdIZC $80/C23E 8F DF 99 7E STA $7E99DF[$7E:99DF] A:0 X:0007 Y:0 P:envMXdIZC $80/C242 22 90 5A 10 JSL $105A90[$10:5A90] A:0 X:0007 Y:0 P:envMXdIZC $80/C246 28 PLP ; Restore Flag Register value $80/C247 6B RTL
$80/C2AD Check if Satellaview Stream Number Registers work
If something went wrong, A != #$00 at the end. If everything is fine, A = #$00.
$80/C2AD A9 01 LDA #$01 ; Set Power Bit for Satellaview $80/C2AF 8D 94 21 STA $2194 $80/C2B2 A9 AA LDA #$AA ; Check if you can write into $2188 and check if it keeps its value $80/C2B4 8D 88 21 STA $2188 $80/C2B7 CD 88 21 CMP $2188 $80/C2BA D0 22 BNE $22 ; [$C2DE] Exit if it doesn't work $80/C2BC A9 55 LDA #$55 ; Check if you can write into $2188 and check if it keeps its value $80/C2BE 8D 88 21 STA $2188 $80/C2C1 CD 88 21 CMP $2188 $80/C2C4 D0 18 BNE $18 ; [$C2DE] Exit if it doesn't work $80/C2C6 9C 88 21 STZ $2188 ; Check if you can clear $2189/9/E/F and the values stay cleared $80/C2C9 9C 89 21 STZ $2189 $80/C2CC 9C 8E 21 STZ $218E $80/C2CF 9C 8F 21 STZ $218F $80/C2D2 AD 88 21 LDA $2188 $80/C2D5 0D 89 21 ORA $2189 $80/C2D8 0D 8E 21 ORA $218E $80/C2DB 0D 8F 21 ORA $218F $80/C2DE 6B RTL
$80/C36D Transfer (fixed Set of) Data to Satellaview
This subroutine transfers data to the Satellaview via Serial Port 2.
First, it sends "08" and then "00" (maybe the "$08" says that there will come eight double-bytes in total?). Then it sends one byte with a counter value and one data byte from $C392. So the transfered data is:
08 00 00 xx 01 xx 02 xx 03 xx 04 xx 05 xx 06 xx (xx = data bytes from $80/C392)
$80/C36D 8B PHB ; Buffer Program Bank on Stack $80/C36E 4B PHK ; Set Program Bank to $80 $80/C36F AB PLB $80/C370 A9 41 LDA #$41 ; Select port 1 (to signalize a transfer comes up!?), set Clock bit $80/C372 8D 99 21 STA $2199 $80/C375 A9 00 LDA #$00 ; Setup first double-byte to transfer: $08 $00 $80/C377 EB XBA $80/C378 A9 08 LDA #$08 $80/C37A 22 B0 59 10 JSL $1059B0 ; Transfer Data to Satellaview via Serial I/O Port 2 $80/C37E A2 00 00 LDX #$0000 ; Setup counter for Data Loading/Transfer $80/C381 BD 92 C3 LDA $C392,x ; Load byte to transfer $80/C384 EB XBA $80/C385 8A TXA ; Transfer Counter Value from X to A $80/C386 22 B0 59 10 JSL $1059B0 ; Transfer Data to Satellaview via Serial I/O Port 2 $80/C38A E8 INX ; Increment Counter $80/C38B E0 07 00 CPX #$0007 ; Branch if the counter hasn't reached #$0007 yet $80/C38E 90 F1 BCC $F1 ; [$C381] $80/C390 AB PLB ; Restore Program Bank $80/C391 6B RTL
$80/C392 Data for Satellaview (transfered at $80/C36D)
§80/C392 88 80 04 00 08 00 70
$80/C3D6 Transfer Data to Satellaview via Serial I/O Port 2
From nocash's FullSNES document:
2198h Serial I/O Port 1 (R/W) 2199h Serial I/O Port 2 (R/W) These ports are basically 3-bit parallel ports, which can be used as three-wire serial ports (with clock, data.in, data.out lines) (by doing the "serial" transfer by software). Outgoing data must be written before toggling clock, incoming data can be read thereafter. 0 Clock (must be manually toggled per data bit) 1-5 Unknown/unused (should be 0) 6 Chip Select - For Port 1: 1=Select / For Port 2: 0=Select 7 Data (Write=Data.Out, Read=Data.in) (data-in is directly poll-able) Bits are transferred MSB first. Unknown which chips these ports are connected to. One port does most probably connect to the 64pin MN88821 chip (which should do have a serial port; assuming that it is a MN88831 variant). The other port <might> connect to the small 8pin SPR-BSA chip? Possible purposes might be configuration/calibration, Audio volume control, and Audio channel selection (assuming that the hardware can decode audio data and inject it to SNES Expansion Port sound inputs).
A contains a 16-bit value that gets transfered via Serial I/O Port 2 ($2199) to the Satellaview. The MSB gets transfered first.
As mentioned: A contains a 16-bit value, even though A has to be set to 8-bit-size before this Subroutine gets executed.
$80/C3D6 A0 08 00 LDY #$0008 ; Setup counter for first byte $80/C3D9 48 PHA ; Buffer first byte on stack $80/C3DA 29 80 AND #$80 ; Transfer bit $80/C3DC 8D 99 21 STA $2199 $80/C3DF 09 01 ORA #$01 ; Toggle Clock bit $80/C3E1 8D 99 21 STA $2199 $80/C3E4 68 PLA ; Restore byte $80/C3E5 0A ASL A ; Prepare byte to transfer next bit $80/C3E6 88 DEY ; Decrement Loop Counter $80/C3E7 D0 F0 BNE $F0 ; [$C3D9] $80/C3E9 EB XBA ; Now do the second byte $80/C3EA A0 08 00 LDY #$0008 ; Reset counter for second byte $80/C3ED 48 PHA ; Buffer second byte on stack $80/C3EE 29 80 AND #$80 ; Transfer bit $80/C3F0 8D 99 21 STA $2199 $80/C3F3 09 01 ORA #$01 ; Toggle Clock bit $80/C3F5 8D 99 21 STA $2199 $80/C3F8 68 PLA ; Restore byte $80/C3F9 0A ASL A ; Prepare byte to transfer next bit $80/C3FA 88 DEY ; Decrement Loop Counter $80/C3FB D0 F0 BNE $F0 ; [$C3ED] $80/C3FD A9 41 LDA #$41 ; Select port 1 (to make sure this transfer is over?), set Clock bit $80/C3FF 8D 99 21 STA $2199 $80/C402 6B RTL
This transfers the original Hook Vectors & Reset function from ROM to SRAM (after the SRAM is reset).
$80/C5BC 08 PHP ; Buffer Flag Register value on stack $80/C5BD C2 30 REP #$30 ; A/X/Y = 16 bit $80/C5BF A2 12 03 LDX #$0312 $80/C5C2 BF D0 C5 80 LDA $80C5D0,x $80/C5C6 9F 8C 59 10 STA $10598C,x $80/C5CA CA DEX $80/C5CB CA DEX $80/C5CC 10 F4 BPL $F4 ; [$C5C2] $80/C5CE 28 PLP ; Restore Flag Register $80/C5CF 6B RTL
$80/C8E4 ?
$80/C8E4 08 PHP A:0000 X:0000 Y:E280 P:envmxdIzc $80/C8E5 E2 20 SEP #$20 A:0000 X:0000 Y:E280 P:envmxdIzc $80/C8E7 A9 00 LDA #$00 A:0000 X:0000 Y:E280 P:envMxdIzc $80/C8E9 8F 00 50 10 STA $105000[$10:5000] A:0000 X:0000 Y:E280 P:envMxdIZc $80/C8ED 8F 00 50 13 STA $135000[$13:5000] A:0000 X:0000 Y:E280 P:envMxdIZc $80/C8F1 22 F7 C8 80 JSL $80C8F7[$80:C8F7] A:0000 X:0000 Y:E280 P:envMxdIZc $80/C8F5 28 PLP A:0000 X:FFFE Y:E280 P:envMxdIZc $80/C8F6 6B RTL A:0000 X:FFFE Y:E280 P:envmxdIzc
I am not entirely sure, but $02 is at least used as a flag (maybe for more):
First, it gets cleared (everything is fine). If something is wrong, it gets checked if it is clear. If it is, the backup from banks $13-15 gets transfered to $10-$12, its value gets incremented and the subroutine starts over. If something goes wrong again, the subroutine branches to a different path.
$80/C8F7 08 PHP ; Buffer Flag Register value on stack $80/C8F8 C2 30 REP #$30 ; A/X/Y = 16 bit $80/C8FA 9C 02 00 STZ $0002 [$80:0002] A:0 X:0 Y:E280 P:envmxdIzc $80/C8FD AF 00 50 10 LDA $105000 ; Check if a Satellaview is connected $80/C901 C9 53 47 CMP #$4753 ; If it is, it has #$4753 in $10/5000 (ASCII: "SG") $80/C904 D0 45 BNE $45 ; [$C94B] Branch if not $80/C906 AF 04 50 10 LDA $105004 ; Load Checksum $80/C90A 4F 02 50 10 EOR $105002 ; EOR it with the Checksum Complement $80/C90E C9 FF FF CMP #$FFFF ; Does Checksum fit with its complement? $80/C911 D0 38 BNE $38 ; [$C94B] Branch if not $80/C913 64 00 STZ $00 [$00:0000] A:FFFF X:0 Y:E280 P:envmxdIZC $80/C915 A2 FF 0F LDX #$0FFF ; CALCULATE CHECKSUM $80/C918 BF 00 50 10 LDA $105000,x ; The Checksum is every byte between $5000-$5FFF (from banks $10-$12) added together $80/C91C 29 FF 00 AND #$00FF $80/C91F 18 CLC $80/C920 65 00 ADC $00 $80/C922 85 00 STA $00 $80/C924 BF 00 50 11 LDA $115000,x $80/C928 29 FF 00 AND #$00FF $80/C92B 18 CLC $80/C92C 65 00 ADC $00 $80/C92E 85 00 STA $00 $80/C930 BF 00 50 12 LDA $125000,x $80/C934 29 FF 00 AND #$00FF $80/C937 18 CLC $80/C938 65 00 ADC $00 $80/C93A 85 00 STA $00 $80/C93C CA DEX $80/C93D 10 D9 BPL $D9 ; [$C918] Loop $80/C93F CF 04 50 10 CMP $105004 ; Is the calculated Checksum the same as the one in $10/5004? $80/C943 D0 06 BNE $06 ; [$C94B] Branch if not $80/C945 22 1B CA 80 JSL $80CA1B ; Copy data from banks $10-$12 to $13-$15 $80/C949 80 42 BRA $42 ; [$C98D] Exit
(executed when Satellaview does not respond correctly)
$80/C94B A5 02 LDA $02 [$00:0002] A:4700 X:0000 Y:E280 P:eNvmxdIzc $80/C94D D0 08 BNE $08 [$C957] A:0000 X:0000 Y:E280 P:envmxdIZc $80/C94F E6 02 INC $02 [$00:0002] A:0000 X:0000 Y:E280 P:envmxdIZc $80/C951 22 F7 C9 80 JSL $80C9F7 ; Satellaview-related: Copy data from banks $13-$15 to $10-$12 $80/C955 80 A6 BRA $A6 ; [$C8FD] Go back to the start and check if everything works now $80/C957 22 8F C9 80 JSL $80C98F ; Clear banks $10-$12 $80/C95B 22 FF BC 94 JSL $94BCFF ; Clear BS-X SRAM $80/C95F AD 8E C9 LDA $C98E ; This could be optimized with an "LDA #$6B" (UNNECESSARY LINE) $80/C962 8F 74 59 10 STA $105974 ; "Boot Hook" $80/C966 8F 78 59 10 STA $105978 ; "NMI Hook" $80/C96A 8F 7C 59 10 STA $10597C ; "IRQ Vector" $80/C96E 8F 80 59 10 STA $105980 ; "Download Start Hook" $80/C972 8F 84 59 10 STA $105984 ; "File Start Hook" $80/C976 8F 88 59 10 STA $105988 ; "Whatever Hook" $80/C97A A9 53 47 LDA #$4753 ; Store ASCII text "SG" in $10/5000 $80/C97D 8F 00 50 10 STA $105000 $80/C981 22 D7 C5 81 JSL $81C5D7 ; Restore original Hook Vectors $80/C985 22 BC C5 80 JSL $80C5BC ; Restore original Fuction Hook Vectors & Reset function $80/C989 22 AA C9 80 JSL $80C9AA ; Calculate new SRAM Checksum $80/C98D 28 PLP ; Restore Flag Register value $80/C98E 6B RTL
$80/C98F 08 PHP ; Buffer Flag Register value on stack $80/C990 C2 30 REP #$30 ; $80/C992 A9 00 00 LDA #$0000 ; Setup Store Value $80/C995 A2 FE 0F LDX #$0FFE ; Setup Store Index $80/C998 9F 00 50 10 STA $105000,x ; Clear double-byte on bank $10 $80/C99C 9F 00 50 11 STA $115000,x ; Clear double-byte on bank $11 $80/C9A0 9F 00 50 12 STA $125000,x ; Clear double-byte on bank $12 $80/C9A4 CA DEX ; Decrement Store Index twice $80/C9A5 CA DEX $80/C9A6 10 F0 BPL $F0 ; [$C998] Loop until everything is done $80/C9A8 28 PLP ; Restore Flag Register value $80/C9A9 6B RTL
$80/C9AA Calculate new SRAM Checksum
$80/C9AA 08 PHP ; Buffer Flag Register value on stack $80/C9AB C2 30 REP #$30 ; A/X/Y = 16 bit $80/C9AD A9 00 00 LDA #$0000 ; Set temporary Checksum: #$0000 $80/C9B0 8F 04 50 10 STA $105004 $80/C9B4 3A DEC A ; Set temporary Checksum Complement: #$FFFF $80/C9B5 8F 02 50 10 STA $105002 $80/C9B9 9C 00 00 STZ $0000 ; Clear Buffer for Checksum $80/C9BC A2 FF 0F LDX #$0FFF ; CALCULATE CHECKSUM $80/C9BF BF 00 50 10 LDA $105000,x ; The Checksum is every byte between $5000-$5FFF (from banks $10-$12) added together $80/C9C3 29 FF 00 AND #$00FF $80/C9C6 18 CLC $80/C9C7 65 00 ADC $00 $80/C9C9 85 00 STA $00 $80/C9CB BF 00 50 11 LDA $115000,x $80/C9CF 29 FF 00 AND #$00FF $80/C9D2 18 CLC $80/C9D3 65 00 ADC $00 $80/C9D5 85 00 STA $00 $80/C9D7 BF 00 50 12 LDA $125000,x $80/C9DB 29 FF 00 AND #$00FF $80/C9DE 18 CLC $80/C9DF 65 00 ADC $00 $80/C9E1 85 00 STA $00 $80/C9E3 CA DEX $80/C9E4 10 D9 BPL $D9 ; [$C9BF] $80/C9E6 8F 04 50 10 STA $105004 ; Store Checksum $80/C9EA 49 FF FF EOR #$FFFF ; Form Checksum Complement and store it $80/C9ED 8F 02 50 10 STA $105002 $80/C9F1 28 PLP ; Restore Flag Register value $80/C9F2 22 1B CA 80 JSL $80CA1B ; Copy data from banks $10-$12 to $13-$15 $80/C9F6 6B RTL
This subroutine copies the data from $5000-$5FFF from the banks $13-15 to $10-12.
$80/C9F7 08 PHP ; Buffer Flag Register value on stack $80/C9F8 C2 30 REP #$30 ; A/X/Y = 16 bit $80/C9FA A2 FE 0F LDX #$0FFE ; Setup Load/Store Index/Loop Counter $80/C9FD BF 00 50 13 LDA $135000,x ; Transfer from bank $13 to $10 $80/CA01 9F 00 50 10 STA $105000,x $80/CA05 BF 00 50 14 LDA $145000,x ; Transfer from bank $14 to $11 $80/CA09 9F 00 50 11 STA $115000,x $80/CA0D BF 00 50 15 LDA $155000,x ; Transfer from bank $15 to $12 $80/CA11 9F 00 50 12 STA $125000,x $80/CA15 CA DEX ; Decrement Load/Store Index twice $80/CA16 CA DEX $80/CA17 10 E4 BPL $E4 ; [$C9FD] Loop until everything is done $80/CA19 28 PLP ; Restore Flag Register value $80/CA1A 6B RTL
This subroutine copies the data from $5000-$5FFF from the banks $10-12 to $13-15.
$80/CA1B 08 PHP ; Buffer Flag Register value on stack $80/CA1C C2 30 REP #$30 ; A/X/Y = 16 bit $80/CA1E A2 FE 0F LDX #$0FFE ; Setup Load/Store Index/Loop Counter $80/CA21 BF 00 50 10 LDA $105000,x ; Transfer from bank $10 to $13 $80/CA25 9F 00 50 13 STA $135000,x $80/CA29 BF 00 50 11 LDA $115000,x ; Transfer from bank $11 to $14 $80/CA2D 9F 00 50 14 STA $145000,x $80/CA31 BF 00 50 12 LDA $125000,x ; Transfer from bank $12 to $15 $80/CA35 9F 00 50 15 STA $155000,x $80/CA39 CA DEX ; Decrement Load/Store Index twice $80/CA3A CA DEX $80/CA3B 10 E4 BPL $E4 ; [$CA21] Loop until everything is done $80/CA3D 28 PLP ; Restore Flag Register value $80/CA3E 6B RTL
$80/E7A3 ?
Executed while NMI.
$80/E7A3 08 PHP ; Buffer Flag Register value on stack $80/E7A4 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/E7A6 AD D2 13 LDA $13D2 [$80:13D2] A:0 X:00FF Y:0 P:envMXdIzC $80/E7A9 D0 35 BNE $35 [$E7E0] A:0 X:00FF Y:0 P:envMXdIZC $80/E7AB AE DD 13 LDX $13DD [$80:13DD] A:0 X:00FF Y:0 P:envMXdIZC $80/E7AE EC DE 13 CPX $13DE [$80:13DE] A:0 X:0 Y:0 P:envMXdIZC $80/E7B1 F0 2D BEQ $2D [$E7E0] A:0 X:0 Y:0 P:envMXdIZC
code is missing here
$80/E7E0 28 PLP ; Restore Flag Register value $80/E7E1 6B RTL
$80/EA28 ?
Executed while NMI.
$80/EA28 08 PHP ; Buffer Flag Register value on stack $80/EA29 AD D2 13 LDA $13D2 [$80:13D2] A:0 X:0 Y:0 P:envMxdIzC $80/EA2C F0 0C BEQ $0C [$EA3A] A:0 X:0 Y:0 P:envMxdIZC
code is missing here
$80/EA3A 28 PLP ; Restore Flag Register value $80/EA3B 6B RTL
$80/EFD6 ?
Executed while NMI.
$80/EFD6 08 PHP ; Buffer Flag Register value on stack $80/EFD7 E2 30 SEP #$30 ; A/X/Y = 8-bit $80/EFD9 AD C9 13 LDA $13C9 [$80:13C9] A:0 X:00FF Y:0 P:envMXdIzC $80/EFDC F0 0B BEQ $0B [$EFE9] A:0 X:00FF Y:0 P:envMXdIZC
code is missing here
$80/EFE9 28 PLP ; Restore Flag Register value $80/EFEA 6B RTL
$80/F1EB ?
$80/F1EB 08 PHP ; Buffer Flag Register value on stack $80/F1EC E2 20 SEP #$20 ; A = 8-bit $80/F1EE C2 10 REP #$10 ; X/Y = 16-bit $80/F1F0 9C D1 13 STZ $13D1 [$80:13D1] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F1F3 9C D2 13 STZ $13D2 [$80:13D2] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F1F6 9C DD 13 STZ $13DD [$80:13DD] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F1F9 9C DE 13 STZ $13DE [$80:13DE] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F1FC 9C DF 13 STZ $13DF [$80:13DF] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F1FF 9C C4 13 STZ $13C4 [$80:13C4] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F202 9C B6 13 STZ $13B6 [$80:13B6] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F205 9C B2 13 STZ $13B2 [$80:13B2] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F208 9C B4 13 STZ $13B4 [$80:13B4] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F20B 9C B5 13 STZ $13B5 [$80:13B5] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F20E 9C BF 13 STZ $13BF [$80:13BF] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F211 9C 42 14 STZ $1442 [$80:1442] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F214 9C B7 13 STZ $13B7 [$80:13B7] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F217 9C 74 0B STZ $0B74 [$80:0B74] A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F21A A2 FF FF LDX #$FFFF A:0061 X:FFFE Y:0 P:eNvMxdIzC $80/F21D 8E 33 14 STX $1433 [$80:1433] A:0061 X:FFFF Y:0 P:eNvMxdIzC $80/F220 A9 FF LDA #$FF A:0061 X:FFFF Y:0 P:eNvMxdIzC $80/F222 8D 4F 14 STA $144F [$80:144F] A:00FF X:FFFF Y:0 P:eNvMxdIzC $80/F225 A9 09 LDA #$09 A:00FF X:FFFF Y:0 P:eNvMxdIzC $80/F227 8D 50 14 STA $1450 [$80:1450] A:0009 X:FFFF Y:0 P:envMxdIzC $80/F22A A9 06 LDA #$06 A:0009 X:FFFF Y:0 P:envMxdIzC $80/F22C 8D 51 14 STA $1451 [$80:1451] A:0006 X:FFFF Y:0 P:envMxdIzC $80/F22F 28 PLP ; Restore Flag Register value $80/F230 6B RTL
$80/F231 ? (Check if Errors have occured)
$80/F231 08 PHP ; Buffer Flag Register value on stack $80/F232 E2 20 SEP #$20 ; A = 8-bit $80/F234 C2 10 REP #$10 ; X/Y = 16-bit $80/F236 AD 3F 14 LDA $143F ; Check if Errors occured(?) $80/F239 D0 3C BNE $3C ; [$F277] Exit if it has $80/F23B AD DF 13 LDA $13DF [$80:13DF] A:0 X:00FF Y:0 P:envMxdIZC $80/F23E D0 37 BNE $37 ; [$F277] Exit $80/F240 EE DF 13 INC $13DF [$80:13DF] A:0 X:00FF Y:0 P:envMxdIZC $80/F243 22 0C 5C 10 JSL $105C0C[$10:5C0C] A:0 X:00FF Y:0 P:envMxdIzC $80/F247 22 70 5B 10 JSL $105B70[$10:5B70] A:0 X:00FF Y:0 P:envMxdIzC $80/F24B 22 AC 5B 10 JSL $105BAC[$10:5BAC] A:0 X:0 Y:0 P:envMxdIzC $80/F24F AD D1 13 LDA $13D1 [$80:13D1] A:0 X:0 Y:0 P:envMxdIzC $80/F252 F0 20 BEQ $20 [$F274] A:0 X:0 Y:0 P:envMxdIZC
code is missing here
$80/F274 9C DF 13 STZ $13DF [$80:13DF] A:0 X:0 Y:0 P:envMxdIZC $80/F277 28 PLP ; Restore Flag Register value $80/F278 6B RTL
$80/F2AB ?
$80/F2AB 08 PHP ; Buffer Flag Register value on stack $80/F2AC E2 30 SEP #$30 ; A/X/Y = 8-bit $80/F2AE AD 94 21 LDA $2194 [$80:2194] A:0 X:0 Y:00FF P:envMXdIzC $80/F2B1 AE 4F 14 LDX $144F [$80:144F] A:0001 X:0 Y:00FF P:envMXdIzC $80/F2B4 F0 0E BEQ $0E [$F2C4] A:0001 X:00FF Y:00FF P:eNvMXdIzC $80/F2B6 E0 FF CPX #$FF A:0001 X:00FF Y:00FF P:eNvMXdIzC $80/F2B8 D0 07 BNE $07 [$F2C1] A:0001 X:00FF Y:00FF P:envMXdIZC $80/F2BA 29 F3 AND #$F3 ; Deactivate Access LED $80/F2BC 8D 94 21 STA $2194 $80/F2BF 80 19 BRA $19 ; [$F2DA] Exit
code is missing here
$80/F2DA 28 PLP ; Restore Flag Register value $80/F2DB 6B RTL
$80/F2F2 Deactivate Satellaview Power Down Mode
From FullSNES:
2197h Control (only bit7 is modified) (R/W) 0-6 Unknown/unused (should be left unchanged) 7 Power Down Mode? (0=Power Down, 1=Operate/Normal) (Soundlink enable?) Bit7 is set by various BIOS functions, and, notably: When [7FD9h/FFD9h].Bit4 (in Satellaview FLASH File Header) is set. Also notably: Bit7 is set/cleared depending on Town Status Entry[07h].Bit6-7.
$80/F2F2 08 PHP ; Buffer Flag Register value and A on stack $80/F2F3 E2 20 SEP #$20 $80/F2F5 48 PHA $80/F2F6 AF 97 21 00 LDA $002197 ; Load $2197 value, set MSB, store back $80/F2FA 09 80 ORA #$80 $80/F2FC 8F 97 21 00 STA $002197 $80/F300 68 PLA ; Restore Flag Register value and A $80/F301 28 PLP $80/F302 6B RTL
Bank $81
$81/8002 ? (Executed when talking to the aerial building and at startup)
$81/8002 A5 AC LDA $AC [$00:00AC] A:8001 X:0024 Y:0007 P:envmxdIzc $81/8004 1A INC A A:9DF8 X:0024 Y:0007 P:eNvmxdIzc $81/8005 1A INC A A:9DF9 X:0024 Y:0007 P:eNvmxdIzc $81/8006 1A INC A A:9DFA X:0024 Y:0007 P:eNvmxdIzc $81/8007 1A INC A A:9DFB X:0024 Y:0007 P:eNvmxdIzc $81/8008 20 49 C1 JSR $C149 [$81:C149] A:9DFC X:0024 Y:0007 P:eNvmxdIzc $81/800B A5 AD LDA $AD [$00:00AD] A:9DFC X:0024 Y:1000 P:eNvmxdIzc $81/800D 20 49 C1 JSR $C149 [$81:C149] A:889D X:0024 Y:1000 P:eNvmxdIzc $81/8010 A0 01 00 LDY #$0001 A:889D X:0024 Y:0FFE P:eNvmxdIzc $81/8013 B7 AC LDA [$AC],y[$88:9DF9] A:889D X:0024 Y:0001 P:envmxdIzc $81/8015 85 20 STA $20 [$00:0020] A:DE65 X:0024 Y:0001 P:eNvmxdIzc $81/8017 C8 INY A:DE65 X:0024 Y:0001 P:eNvmxdIzc $81/8018 B7 AC LDA [$AC],y[$88:9DFA] A:DE65 X:0024 Y:0002 P:envmxdIzc $81/801A 85 21 STA $21 [$00:0021] A:88DE X:0024 Y:0002 P:eNvmxdIzc $81/801C 20 96 BA JSR $BA96 [$81:BA96] A:88DE X:0024 Y:0002 P:eNvmxdIzc $81/801F A5 21 LDA $21 [$00:0021] A:0088 X:0024 Y:0002 P:envmxdIzc $81/8021 85 AD STA $AD [$00:00AD] A:88DE X:0024 Y:0002 P:eNvmxdIzc $81/8023 A5 20 LDA $20 [$00:0020] A:88DE X:0024 Y:0002 P:eNvmxdIzc $81/8025 85 AC STA $AC [$00:00AC] A:DE65 X:0024 Y:0002 P:eNvmxdIzc $81/8027 60 RTS A:DE65 X:0024 Y:0002 P:eNvmxdIzc
$81/8028 ? (Executed when talking to the aerial building and at startup)
$81/8028 20 8B C1 JSR $C18B [$81:C18B] A:8027 X:0024 Y:0007 P:envmxdIzc $81/802B 85 AD STA $AD [$00:00AD] A:889D X:0024 Y:0FFE P:envmxdIzc $81/802D 20 8B C1 JSR $C18B [$81:C18B] A:889D X:0024 Y:0FFE P:envmxdIzc $81/8030 85 AC STA $AC [$00:00AC] A:9DFC X:0024 Y:1000 P:envmxdIzc $81/8032 60 RTS A:9DFC X:0024 Y:1000 P:envmxdIzc
$81/8033 ?
$81/8033 AD B6 0C LDA $0CB6 [$81:0CB6] A:8032 X:0024 Y:0002 P:envmxdIzc $81/8036 F0 0D BEQ $0D [$8045] A:0 X:0024 Y:0002 P:envmxdIZc
code is missing here
$81/8045 A0 01 00 LDY #$0001 A:0 X:0024 Y:0002 P:envmxdIZc $81/8048 B7 AC LDA [$AC],y[$93:B490] A:0 X:0024 Y:0001 P:envmxdIzc $81/804A 8D B6 0C STA $0CB6 [$81:0CB6] A:0 X:0024 Y:0001 P:envmxdIZc $81/804D C8 INY A:0 X:0024 Y:0001 P:envmxdIZc $81/804E C8 INY A:0 X:0024 Y:0002 P:envmxdIzc $81/804F 20 5F BB JSR $BB5F [$81:BB5F] A:0 X:0024 Y:0003 P:envmxdIzc $81/8052 9D 50 16 STA $1650,x[$81:1674] A:0120 X:0024 Y:0006 P:envmxdIzc $81/8055 9E 28 16 STZ $1628,x[$81:164C] A:0120 X:0024 Y:0006 P:envmxdIzc $81/8058 20 5F BB JSR $BB5F [$81:BB5F] A:0120 X:0024 Y:0006 P:envmxdIzc $81/805B 9D A0 16 STA $16A0,x[$81:16C4] A:0090 X:0024 Y:0009 P:envmxdIzc $81/805E 9E 78 16 STZ $1678,x[$81:169C] A:0090 X:0024 Y:0009 P:envmxdIzc $81/8061 AD B6 0C LDA $0CB6 [$81:0CB6] A:0090 X:0024 Y:0009 P:envmxdIzc $81/8064 F0 01 BEQ $01 [$8067] A:0 X:0024 Y:0009 P:envmxdIZc $81/8067 A5 AC LDA $AC [$00:00AC] A:0 X:0024 Y:0009 P:envmxdIZc $81/8069 18 CLC A:B48F X:0024 Y:0009 P:eNvmxdIzc $81/806A 69 09 00 ADC #$0009 A:B48F X:0024 Y:0009 P:eNvmxdIzc $81/806D 85 AC STA $AC [$00:00AC] A:B498 X:0024 Y:0009 P:eNvmxdIzc $81/806F 60 RTS A:B498 X:0024 Y:0009 P:eNvmxdIzc
$81/8070 TOKEN VECTOR #$25: ?
$81/8070 AD B6 0C LDA $0CB6 [$81:0CB6] A:806F X:0026 Y:0007 P:envmxdIzc $81/8073 F0 0D BEQ $0D [$8082] A:0000 X:0026 Y:0007 P:envmxdIZc $81/8075 C9 FF FF CMP #$FFFF $81/8078 F0 12 BEQ $12 ; [$808C] Exit $81/807A CE B6 0C DEC $0CB6 [$81:0CB6] A:0001 X:0026 Y:0000 P:envmxdIzc $81/807D D0 0D BNE $0D [$808C] A:0001 X:0026 Y:0000 P:envmxdIZc $81/807F 4C 8D 80 JMP $808D [$81:808D] A:0001 X:0026 Y:0000 P:envmxdIZc $81/8082 A0 01 00 LDY #$0001 A:0000 X:0026 Y:0007 P:envmxdIZc $81/8085 B7 AC LDA [$AC],y[$95:830F] A:0000 X:0026 Y:0001 P:envmxdIzc $81/8087 F0 04 BEQ $04 [$808D] A:0001 X:0026 Y:0001 P:envmxdIzc $81/8089 8D B6 0C STA $0CB6 [$81:0CB6] A:0001 X:0026 Y:0001 P:envmxdIzc $81/808C 60 RTS A:0001 X:0026 Y:0001 P:envmxdIzc $81/808D A5 AC LDA $AC [$00:00AC] A:0001 X:0026 Y:0000 P:envmxdIZc $81/808F 18 CLC A:830E X:0026 Y:0000 P:eNvmxdIzc $81/8090 69 03 00 ADC #$0003 A:830E X:0026 Y:0000 P:eNvmxdIzc $81/8093 85 AC STA $AC [$00:00AC] A:8311 X:0026 Y:0000 P:eNvmxdIzc $81/8095 60 RTS A:8311 X:0026 Y:0000 P:eNvmxdIzc
$81/8096 TOKEN VECTOR #$38: ?
$81/8096 A0 01 00 LDY #$0001 A:8095 X:0026 Y:0009 P:envmxdIzc $81/8099 20 5F BB JSR $BB5F [$81:BB5F] A:8095 X:0026 Y:0001 P:envmxdIzc $81/809C 85 00 STA $00 [$00:0000] A:0 X:0026 Y:0004 P:envmxdIzc $81/809E 20 5F BB JSR $BB5F [$81:BB5F] A:0 X:0026 Y:0004 P:envmxdIzc $81/80A1 85 02 STA $02 [$00:0002] A:0 X:0026 Y:0007 P:envmxdIzc $81/80A3 B7 AC LDA [$AC],y[$94:8B1D] A:0 X:0026 Y:0007 P:envmxdIzc $81/80A5 85 20 STA $20 [$00:0020] A:B47D X:0026 Y:0007 P:eNvmxdIzc $81/80A7 C8 INY A:B47D X:0026 Y:0007 P:eNvmxdIzc $81/80A8 B7 AC LDA [$AC],y[$94:8B1E] A:B47D X:0026 Y:0008 P:envmxdIzc $81/80AA 85 21 STA $21 [$00:0021] A:93B4 X:0026 Y:0008 P:eNvmxdIzc $81/80AC 20 96 BA JSR $BA96 [$81:BA96] A:93B4 X:0026 Y:0008 P:eNvmxdIzc $81/80AF C8 INY A:0093 X:0026 Y:0008 P:envmxdIzc $81/80B0 C8 INY A:0093 X:0026 Y:0009 P:envmxdIzc $81/80B1 DA PHX A:0093 X:0026 Y:000A P:envmxdIzc $81/80B2 5A PHY A:0093 X:0026 Y:000A P:envmxdIzc $81/80B3 A5 22 LDA $22 [$00:0022] A:0093 X:0026 Y:000A P:envmxdIzc $81/80B5 85 BE STA $BE [$00:00BE] A:DC93 X:0026 Y:000A P:eNvmxdIzc $81/80B7 A5 20 LDA $20 [$00:0020] A:DC93 X:0026 Y:000A P:eNvmxdIzc $81/80B9 A6 00 LDX $00 [$00:0000] A:B47D X:0026 Y:000A P:eNvmxdIzc $81/80BB A4 02 LDY $02 [$00:0002] A:B47D X:0 Y:000A P:envmxdIZc $81/80BD 22 B0 C2 81 JSL $81C2B0[$81:C2B0] A:B47D X:0 Y:0 P:envmxdIZc $81/80C1 7A PLY A:16C4 X:0024 Y:0 P:envmxdIZc $81/80C2 FA PLX A:16C4 X:0024 Y:000A P:envmxdIzc $81/80C3 98 TYA A:16C4 X:0026 Y:000A P:envmxdIzc $81/80C4 18 CLC A:000A X:0026 Y:000A P:envmxdIzc $81/80C5 65 AC ADC $AC [$00:00AC] A:000A X:0026 Y:000A P:envmxdIzc $81/80C7 85 AC STA $AC [$00:00AC] A:8B20 X:0026 Y:000A P:eNvmxdIzc $81/80C9 60 RTS A:8B20 X:0026 Y:000A P:eNvmxdIzc
$81/818F TOKEN VECTOR #$2F: ?
$81/818F DA PHX A:818E X:0026 Y:0000 P:envmxdIzc $81/8190 A0 01 00 LDY #$0001 A:818E X:0026 Y:0000 P:envmxdIzc $81/8193 20 5F BB JSR $BB5F [$81:BB5F] A:818E X:0026 Y:0001 P:envmxdIzc $81/8196 85 00 STA $00 [$00:0000] A:0008 X:0026 Y:0004 P:envmxdIzc $81/8198 B7 AC LDA [$AC],y ; Load Byte from Token Data Load Address (which is a Jump Table Index) $81/819A 30 13 BMI $13 ; [$81AF] Branch if Jump Table Index is negative (invalid) $81/819C C9 06 00 CMP #$0006 $81/819F 10 0E BPL $0E ; [$81AF] Branch if Jump Table Index is greater than #$05 (invalid) $81/81A1 48 PHA ; Buffer Jump Table Index on stack $81/81A2 C8 INY A:0000 X:0026 Y:0004 P:eNvmxdIzc $81/81A3 C8 INY A:0000 X:0026 Y:0005 P:envmxdIzc $81/81A4 20 5F BB JSR $BB5F [$81:BB5F] A:0000 X:0026 Y:0006 P:envmxdIzc $81/81A7 85 02 STA $02 [$00:0002] A:0100 X:0026 Y:0009 P:envmxdIzc $81/81A9 68 PLA ; Restore Jump Table Index (and use it) $81/81AA 0A ASL A $81/81AB AA TAX $81/81AC 7C B4 81 JMP ($81B4,x)
code is missing here
$81/81B4 Jump Table for $81/818F
$81/81B4 C0 81 $81/81B7 C8 81 $81/81B8 D2 81 $81/81BA DA 81 $81/81BC E2 81 $81/81BE EC 81
$81/81C0 ?
$81/81C0 A5 00 LDA $00 [$00:0000] A:0000 X:0000 Y:0009 P:envmxdIZc $81/81C2 C5 02 CMP $02 [$00:0002] A:0008 X:0000 Y:0009 P:envmxdIzc $81/81C4 30 2E BMI $2E [$81F4] A:0008 X:0000 Y:0009 P:eNvmxdIzc $81/81C6 80 42 BRA $42 ; [$820A] Increment Token Data Load Address and exit $81/81C8 A5 00 LDA $00 [$00:0000] A:0002 X:0002 Y:0009 P:envmxdIzc $81/81CA C5 02 CMP $02 [$00:0002] A:0240 X:0002 Y:0009 P:envmxdIzc $81/81CC 30 26 BMI $26 [$81F4] A:0240 X:0002 Y:0009 P:eNvmxdIzc $81/81CE F0 24 BEQ $24 [$81F4] A:7080 X:0002 Y:0009 P:envmxdIzC $81/81D0 80 38 BRA $38 ; [$820A] Increment Token Data Load Address and exit
code is missing here
$81/81DA A5 00 LDA $00 [$00:0000] A:0006 X:0006 Y:0009 P:envmxdIzc $81/81DC C5 02 CMP $02 [$00:0002] A:0001 X:0006 Y:0009 P:envmxdIzc $81/81DE D0 14 BNE $14 [$81F4] A:0001 X:0006 Y:0009 P:eNvmxdIzc $81/81E0 80 28 BRA $28 ; [$820A] End this Token/Command
code is missing here
$81/81EC A5 00 LDA $00 [$00:0000] A:000A X:000A Y:0009 P:envmxdIzc $81/81EE C5 02 CMP $02 [$00:0002] A:0002 X:000A Y:0009 P:envmxdIzc $81/81F0 10 02 BPL $02 [$81F4] A:0002 X:000A Y:0009 P:eNvmxdIzc $81/81F2 80 16 BRA $16 [$820A] A:0002 X:000A Y:0009 P:eNvmxdIzc $81/81F4 B7 AC LDA [$AC],y[$95:831A] A:0008 X:0000 Y:0009 P:eNvmxdIzc $81/81F6 85 20 STA $20 [$00:0020] A:8300 X:0000 Y:0009 P:eNvmxdIzc $81/81F8 C8 INY A:8300 X:0000 Y:0009 P:eNvmxdIzc $81/81F9 B7 AC LDA [$AC],y[$95:831B] A:8300 X:0000 Y:000A P:envmxdIzc $81/81FB 85 21 STA $21 [$00:0021] A:9583 X:0000 Y:000A P:eNvmxdIzc $81/81FD 20 96 BA JSR $BA96 [$81:BA96] A:9583 X:0000 Y:000A P:eNvmxdIzc $81/8200 A5 20 LDA $20 [$00:0020] A:0095 X:0000 Y:000A P:envmxdIZc $81/8202 85 AC STA $AC [$00:00AC] A:8300 X:0000 Y:000A P:eNvmxdIzc $81/8204 A5 21 LDA $21 [$00:0021] A:8300 X:0000 Y:000A P:eNvmxdIzc $81/8206 85 AD STA $AD [$00:00AD] A:9583 X:0000 Y:000A P:eNvmxdIzc $81/8208 FA PLX A:9583 X:0000 Y:000A P:eNvmxdIzc $81/8209 60 RTS A:9583 X:0026 Y:000A P:envmxdIzc
$81/820A A5 AC LDA $AC [$00:00AC] A:0100 X:0000 Y:0009 P:envmxdIZC $81/820C 18 CLC A:8311 X:0000 Y:0009 P:eNvmxdIzC $81/820D 69 0C 00 ADC #$000C A:8311 X:0000 Y:0009 P:eNvmxdIzc $81/8210 85 AC STA $AC [$00:00AC] A:831D X:0000 Y:0009 P:eNvmxdIzc $81/8212 FA PLX A:831D X:0000 Y:0009 P:eNvmxdIzc $81/8213 60 RTS A:831D X:0026 Y:0009 P:envmxdIzc
$81/84A7 ?
$81/84A7 A0 01 00 LDY #$0001 A:84A6 X:0026 Y:0 P:envmxdIzc $81/84AA C9 00 00 CMP #$0000 A:84A6 X:0026 Y:0001 P:envmxdIzc $81/84AD B7 AC LDA [$AC],y ; Build a 24-bit Jump Address in $20-22 $81/84AF C8 INY $81/84B0 85 20 STA $20 $81/84B2 B7 AC LDA [$AC],y $81/84B4 C8 INY $81/84B5 C8 INY $81/84B6 85 21 STA $21 $81/84B8 20 96 BA JSR $BA96 [$81:BA96] A:81A6 X:0026 Y:0004 P:envmxdIzC $81/84BB A5 AC LDA $AC [$00:00AC] A:0081 X:0026 Y:0004 P:envmxdIzc $81/84BD 18 CLC A:8AE8 X:0026 Y:0004 P:eNvmxdIzc $81/84BE 69 04 00 ADC #$0004 A:8AE8 X:0026 Y:0004 P:eNvmxdIzc $81/84C1 85 AC STA $AC [$00:00AC] A:8AEC X:0026 Y:0004 P:eNvmxdIzc $81/84C3 DA PHX A:8AEC X:0026 Y:0004 P:eNvmxdIzc $81/84C4 4B PHK A:8AEC X:0026 Y:0004 P:eNvmxdIzc $81/84C5 F4 D0 84 PEA $84D0 A:8AEC X:0026 Y:0004 P:eNvmxdIzc $81/84C8 DC 20 00 JML [$0020][$81:A693] A:8AEC X:0026 Y:0004 P:eNvmxdIzc
code/data is missing here
$81/84D1 FA PLX A:0 X:0026 Y:0003 P:envmxdIZc $81/84D2 60 RTS A:0 X:0026 Y:0003 P:envmxdIzc
$81/861A ?
$81/861A AD B6 0C LDA $0CB6 [$81:0CB6] A:8619 X:0026 Y:FFFF P:envmxdIzc $81/861D F0 03 BEQ $03 [$8622] A:0 X:0026 Y:FFFF P:envmxdIZc $81/861F 3A DEC A A:0001 X:0026 Y:0 P:envmxdIzc $81/8620 80 47 BRA $47 [$8669] A:0 X:0026 Y:0 P:envmxdIZc $81/8622 DA PHX A:0 X:0026 Y:FFFF P:envmxdIZc $81/8623 A0 01 00 LDY #$0001 A:0 X:0026 Y:FFFF P:envmxdIZc $81/8626 20 5F BB JSR $BB5F [$81:BB5F] A:0 X:0026 Y:0001 P:envmxdIzc $81/8629 29 FF 00 AND #$00FF A:0 X:0026 Y:0004 P:envmxdIzc $81/862C 48 PHA A:0 X:0026 Y:0004 P:envmxdIZc $81/862D 20 5F BB JSR $BB5F [$81:BB5F] A:0 X:0026 Y:0004 P:envmxdIZc $81/8630 29 FF 00 AND #$00FF A:0002 X:0026 Y:0007 P:envmxdIzc $81/8633 EB XBA A:0002 X:0026 Y:0007 P:envmxdIzc $81/8634 03 01 ORA $01,s [$00:1E74] A:0200 X:0026 Y:0007 P:envmxdIZc $81/8636 83 01 STA $01,s [$00:1E74] A:0200 X:0026 Y:0007 P:envmxdIzc $81/8638 20 5F BB JSR $BB5F [$81:BB5F] A:0200 X:0026 Y:0007 P:envmxdIzc $81/863B 85 00 STA $00 [$00:0000] A:0 X:0026 Y:000A P:envmxdIzc $81/863D 20 5F BB JSR $BB5F [$81:BB5F] A:0 X:0026 Y:000A P:envmxdIzc $81/8640 85 02 STA $02 [$00:0002] A:0 X:0026 Y:000D P:envmxdIzc $81/8642 B7 AC LDA [$AC],y[$94:A5A3] A:0 X:0026 Y:000D P:envmxdIzc $81/8644 85 20 STA $20 [$00:0020] A:A7CD X:0026 Y:000D P:eNvmxdIzc $81/8646 C8 INY A:A7CD X:0026 Y:000D P:eNvmxdIzc $81/8647 B7 AC LDA [$AC],y[$94:A5A4] A:A7CD X:0026 Y:000E P:envmxdIzc $81/8649 85 21 STA $21 [$00:0021] A:94A7 X:0026 Y:000E P:eNvmxdIzc $81/864B 20 96 BA JSR $BA96 [$81:BA96] A:94A7 X:0026 Y:000E P:eNvmxdIzc $81/864E 68 PLA A:0094 X:0026 Y:000E P:envmxdIzc $81/864F A6 00 LDX $00 [$00:0000] A:0200 X:0026 Y:000E P:envmxdIzc $81/8651 A4 02 LDY $02 [$00:0002] A:0200 X:0 Y:000E P:envmxdIZc $81/8653 22 0C AA 80 JSL $80AA0C[$80:AA0C] A:0200 X:0 Y:0 P:envmxdIZc $81/8657 A9 01 00 LDA #$0001 A:0 X:0 Y:0 P:envmxdIZc $81/865A 8D B6 0C STA $0CB6 [$81:0CB6] A:0001 X:0 Y:0 P:envmxdIzc $81/865D FA PLX A:0001 X:0 Y:0 P:envmxdIzc $81/865E 8E 46 07 STX $0746 [$81:0746] A:0001 X:0026 Y:0 P:envmxdIzc $81/8661 AD A4 19 LDA $19A4 [$81:19A4] A:0001 X:0026 Y:0 P:envmxdIzc $81/8664 8D 48 07 STA $0748 [$81:0748] A:0 X:0026 Y:0 P:envmxdIZc $81/8667 80 11 BRA $11 [$867A] A:0 X:0026 Y:0 P:envmxdIZc $81/8669 AD 9E 0B LDA $0B9E [$81:0B9E] A:0 X:0026 Y:0 P:envmxdIZc $81/866C F0 06 BEQ $06 [$8674] A:0 X:0026 Y:0 P:envmxdIZc
code is missing here
$81/8674 22 53 AA 80 JSL $80AA53[$80:AA53] A:0 X:0026 Y:0 P:envmxdIZc $81/8678 F0 01 BEQ $01 [$867B] A:0001 X:0026 Y:0 P:envmxdIzc $81/867A 60 RTS A:0 X:0026 Y:0 P:envmxdIZc $81/867B 9C B6 0C STZ $0CB6 [$81:0CB6] A:0 X:0026 Y:0 P:envmxdIZc $81/867E A5 AC LDA $AC [$00:00AC] A:0 X:0026 Y:0 P:envmxdIZc $81/8680 18 CLC A:A596 X:0026 Y:0 P:eNvmxdIzc $81/8681 69 10 00 ADC #$0010 A:A596 X:0026 Y:0 P:eNvmxdIzc $81/8684 85 AC STA $AC [$00:00AC] A:A5A6 X:0026 Y:0 P:eNvmxdIzc $81/8686 60 RTS A:A5A6 X:0026 Y:0 P:eNvmxdIzc
$81/8688 Transfer Color Data in CGRAM Buffer
Argument Bytes: 1st byte - Number of Colors to do - Low Byte 2nd byte - Number of Colors to do - High Byte 3rd byte - Command Byte (Bits 6 and 7 are used as function flags)
If Command Byte's Bit 6 is set: (4th byte - Palette Data Address - Low Byte) (5th byte - Palette Data Address - High Byte) (6th byte - Palette Data Bank)
$81/8688 DA PHX ; Buffer X on stack $81/8689 AD A8 0B LDA $0BA8 [$81:0BA8] A:8280 X:0026 Y:0001 P:eNvmxdIzc $81/868C C9 08 00 CMP #$0008 A:0004 X:0026 Y:0001 P:envmxdIzc $81/868F F0 0D BEQ $0D [$869E] A:0004 X:0026 Y:0001 P:eNvmxdIzc
code is missing here
$81/8691 AD AA 0B LDA $0BAA ; Load the Number of the Color to begin $81/8694 18 CLC ; Round up, set to first Color of a Palette $81/8695 69 0F 00 ADC #$000F $81/8698 29 70 00 AND #$0070 $81/869B 8D AA 0B STA $0BAA ; Store back $81/869E A0 00 00 LDY #$0000 ; Setup Load Index $81/86A1 B7 97 LDA [$97],y ; Load Number of Colors to do $81/86A3 8D AC 0B STA $0BAC ; Store it in $0BAC $81/86A6 F0 4F BEQ $4F ; [$86F7] Exit if zero colors are to do $81/86A8 C8 INY ; Increment Data Load Index twice (after Loading) $81/86A9 C8 INY $81/86AA 48 PHA ; Push number of colors to transfer on stack $81/86AB B7 97 LDA [$97],y ; Load next double-byte (Command Byte) $81/86AD C8 INY ; Increment Load Index once (only one of the two bytes is relevant) $81/86AE 29 FF 00 AND #$00FF ; Remove unimportant byte $81/86B1 89 40 00 BIT #$0040 ; Is Bit 6 set? $81/86B4 F0 10 BEQ $10 ; [$86C6] Branch if not - Palette Data is right here in Token Data $81/86B6 48 PHA ; Push Command Byte on stack $81/86B7 B7 97 LDA [$97],y ; Load Address of the Palette Data and set it up in $97-9 $81/86B9 48 PHA $81/86BA C8 INY $81/86BB B7 97 LDA [$97],y $81/86BD 85 98 STA $98 $81/86BF 68 PLA $81/86C0 85 97 STA $97 $81/86C2 A0 00 00 LDY #$0000 ; Setup Load Index for Color $81/86C5 68 PLA ; Pull Command Byte $81/86C6 89 80 00 BIT #$0080 ; Is Bit 7 set? $81/86C9 F0 1E BEQ $1E ; [$86E9] Branch if not
code is missing here
$81/86E9 68 PLA ; Pull Number of Colors to do from stack $81/86EA AE AA 0B LDX $0BAA ; Load Number of the Color to begin $81/86ED 22 BF AE 80 JSL $80AEBF ; Transfer Data in CGRAM buffer $81/86F1 A9 01 00 LDA #$0001 ; Set Flag for CGRAM Buffer $81/86F4 8D 1C 02 STA $021C $81/86F7 FA PLX ; Restore X $81/86F8 6B RTL
$81/86F9 ?
Data bytes at [$97],y:
1st byte: Rectangle Width (number of values per row) 2nd byte: Rectangle Height (number of rows)
$81/86F9 DA PHX A:8C15 X:0026 Y:0007 P:eNvmxdIzc $81/86FA A0 00 00 LDY #$0000 A:8C15 X:0026 Y:0007 P:eNvmxdIzc $81/86FD B7 97 LDA [$97],y[$82:8000] A:8C15 X:0026 Y:0 P:envmxdIZc $81/86FF C8 INY A:0810 X:0026 Y:0 P:envmxdIzc $81/8700 29 FF 00 AND #$00FF A:0810 X:0026 Y:0001 P:envmxdIzc $81/8703 85 9D STA $9D [$00:009D] A:0010 X:0026 Y:0001 P:envmxdIzc $81/8705 B7 97 LDA [$97],y[$82:8001] A:0010 X:0026 Y:0001 P:envmxdIzc $81/8707 C8 INY A:0108 X:0026 Y:0001 P:envmxdIzc $81/8708 29 FF 00 AND #$00FF A:0108 X:0026 Y:0002 P:envmxdIzc $81/870B 85 9F STA $9F [$00:009F] A:0008 X:0026 Y:0002 P:envmxdIzc $81/870D AD A8 0B LDA $0BA8 [$81:0BA8] A:0008 X:0026 Y:0002 P:envmxdIzc $81/8710 C9 08 00 CMP #$0008 A:0004 X:0026 Y:0002 P:envmxdIzc $81/8713 F0 13 BEQ $13 [$8728] A:0004 X:0026 Y:0002 P:eNvmxdIzc $81/8715 AD AA 0B LDA $0BAA [$81:0BAA] A:0004 X:0026 Y:0002 P:eNvmxdIzc $81/8718 29 70 00 AND #$0070 A:0020 X:0026 Y:0002 P:envmxdIzc $81/871B 0A ASL A A:0020 X:0026 Y:0002 P:envmxdIzc $81/871C 0A ASL A A:0040 X:0026 Y:0002 P:envmxdIzc $81/871D 0A ASL A A:0080 X:0026 Y:0002 P:envmxdIzc $81/871E 0A ASL A A:0100 X:0026 Y:0002 P:envmxdIzc $81/871F 0A ASL A A:0200 X:0026 Y:0002 P:envmxdIzc $81/8720 0A ASL A A:0400 X:0026 Y:0002 P:envmxdIzc $81/8721 0D AE 0B ORA $0BAE [$81:0BAE] A:0800 X:0026 Y:0002 P:envmxdIzc $81/8724 85 A1 STA $A1 [$00:00A1] A:0801 X:0026 Y:0002 P:envmxdIzc $81/8726 80 05 BRA $05 [$872D] A:0801 X:0026 Y:0002 P:envmxdIzc
code is missing here
$81/872D B7 97 LDA [$97],y[$82:8002] A:0801 X:0026 Y:0002 P:envmxdIzc $81/872F C8 INY A:0C01 X:0026 Y:0002 P:envmxdIzc $81/8730 29 FF 00 AND #$00FF A:0C01 X:0026 Y:0003 P:envmxdIzc $81/8733 89 40 00 BIT #$0040 A:0001 X:0026 Y:0003 P:envmxdIzc $81/8736 F0 10 BEQ $10 [$8748] A:0001 X:0026 Y:0003 P:envmxdIZc
code is missing here
$81/8748 89 80 00 BIT #$0080 A:0001 X:0026 Y:0003 P:envmxdIZc $81/874B F0 20 BEQ $20 [$876D] A:0001 X:0026 Y:0003 P:envmxdIZc $81/876D 29 0F 00 AND #$000F A:0001 X:0026 Y:0003 P:envmxdIZc $81/8770 0A ASL A A:0001 X:0026 Y:0003 P:envmxdIzc $81/8771 AE A2 0B LDX $0BA2 [$81:0BA2] A:0002 X:0026 Y:0003 P:envmxdIzc $81/8774 10 01 BPL $01 [$8777] A:0002 X:8000 Y:0003 P:eNvmxdIzc $81/8776 1A INC A A:0002 X:8000 Y:0003 P:eNvmxdIzc $81/8777 0A ASL A A:0003 X:8000 Y:0003 P:envmxdIzc $81/8778 AA TAX A:0006 X:8000 Y:0003 P:envmxdIzc $81/8779 FC 84 87 JSR ($8784,x)[$81:8797] A:0006 X:0006 Y:0003 P:envmxdIzc $81/877C A9 01 00 LDA #$0001 A:0020 X:0 Y:0020 P:envmxdIZC $81/877F 8D B6 0B STA $0BB6 [$81:0BB6] A:0001 X:0 Y:0020 P:envmxdIzC $81/8782 FA PLX A:0001 X:0 Y:0020 P:envmxdIzC $81/8783 6B RTL A:0001 X:0026 Y:0020 P:envmxdIzC
$81/8784 Jump Table for $81/86F9
data is missing here
$81/8797 ? (Write Rectangles in Buffer)
$81/8797 AE A4 0B LDX $0BA4 ; Load X start coordinate for Rectangles $81/879A AD A6 0B LDA $0BA6 ; Load Y start coordinate for Rectangles $81/879D 22 34 AF 80 JSL $80AF34 ; Write Rectangles $81/87A1 60 RTS
$81/87B8 ?
$81/87B8 D4 9F PEI ($9F) [$0080] A:1E97 X:0 Y:0081 P:envmxdizC $81/87BA A4 A1 LDY $A1 [$00:00A1] A:1E97 X:0 Y:0081 P:envmxdizC $81/87BC AD A8 0B LDA $0BA8 [$80:0BA8] A:1E97 X:0 Y:0 P:envmxdiZC $81/87BF 85 9F STA $9F [$00:009F] A:0004 X:0 Y:0 P:envmxdizC $81/87C1 AD AA 0B LDA $0BAA [$80:0BAA] A:0004 X:0 Y:0 P:envmxdizC $81/87C4 85 A1 STA $A1 [$00:00A1] A:0020 X:0 Y:0 P:envmxdizC $81/87C6 AE AE 0B LDX $0BAE [$80:0BAE] A:0020 X:0 Y:0 P:envmxdizC $81/87C9 68 PLA A:0020 X:0001 Y:0 P:envmxdizC $81/87CA 22 A2 AD 80 JSL $80ADA2[$80:ADA2] A:0080 X:0001 Y:0 P:envmxdizC $81/87CE 9C B8 0B STZ $0BB8 [$80:0BB8] A:0 X:0200 Y:1000 P:envmxdiZc $81/87D1 5C E9 91 80 JMP $8091E9[$80:91E9] A:0 X:0200 Y:1000 P:envmxdiZc
$81/87D5 ?
$81/87D5 DA PHX A:8280 X:0026 Y:0004 P:eNvmxdIzc $81/87D6 A0 00 00 LDY #$0000 A:8280 X:0026 Y:0004 P:eNvmxdIzc $81/87D9 B7 97 LDA [$97],y[$82:8012] A:8280 X:0026 Y:0 P:envmxdIZc $81/87DB C8 INY A:8004 X:0026 Y:0 P:eNvmxdIzc $81/87DC 29 FF 00 AND #$00FF A:8004 X:0026 Y:0001 P:envmxdIzc $81/87DF 85 9D STA $9D [$00:009D] A:0004 X:0026 Y:0001 P:envmxdIzc $81/87E1 B7 97 LDA [$97],y[$82:8013] A:0004 X:0026 Y:0001 P:envmxdIzc $81/87E3 8D B0 0B STA $0BB0 [$81:0BB0] A:0080 X:0026 Y:0001 P:envmxdIzc $81/87E6 C8 INY A:0080 X:0026 Y:0001 P:envmxdIzc $81/87E7 C8 INY A:0080 X:0026 Y:0002 P:envmxdIzc $81/87E8 85 9F STA $9F [$00:009F] A:0080 X:0026 Y:0003 P:envmxdIzc $81/87EA B7 97 LDA [$97],y[$82:8015] A:0080 X:0026 Y:0003 P:envmxdIzc $81/87EC C8 INY A:F9C0 X:0026 Y:0003 P:eNvmxdIzc $81/87ED 29 FF 00 AND #$00FF A:F9C0 X:0026 Y:0004 P:envmxdIzc $81/87F0 89 40 00 BIT #$0040 A:00C0 X:0026 Y:0004 P:envmxdIzc $81/87F3 F0 10 BEQ $10 [$8805] A:00C0 X:0026 Y:0004 P:envmxdIzc $81/87F5 48 PHA A:00C0 X:0026 Y:0004 P:envmxdIzc $81/87F6 B7 97 LDA [$97],y[$82:8016] A:00C0 X:0026 Y:0004 P:envmxdIzc $81/87F8 48 PHA A:BFF9 X:0026 Y:0004 P:eNvmxdIzc $81/87F9 C8 INY A:BFF9 X:0026 Y:0004 P:eNvmxdIzc $81/87FA B7 97 LDA [$97],y[$82:8017] A:BFF9 X:0026 Y:0005 P:envmxdIzc $81/87FC 85 98 STA $98 [$00:0098] A:86BF X:0026 Y:0005 P:eNvmxdIzc $81/87FE 68 PLA A:86BF X:0026 Y:0005 P:eNvmxdIzc $81/87FF 85 97 STA $97 [$00:0097] A:BFF9 X:0026 Y:0005 P:eNvmxdIzc $81/8801 A0 00 00 LDY #$0000 A:BFF9 X:0026 Y:0005 P:eNvmxdIzc $81/8804 68 PLA A:BFF9 X:0026 Y:0 P:envmxdIZc $81/8805 89 80 00 BIT #$0080 A:00C0 X:0026 Y:0 P:envmxdIzc $81/8808 F0 1E BEQ $1E [$8828] A:00C0 X:0026 Y:0 P:envmxdIzc $81/880A A5 98 LDA $98 [$00:0098] A:00C0 X:0026 Y:0 P:envmxdIzc $81/880C 85 79 STA $79 [$00:0079] A:86BF X:0026 Y:0 P:eNvmxdIzc $81/880E 98 TYA A:86BF X:0026 Y:0 P:eNvmxdIzc $81/880F 18 CLC A:0 X:0026 Y:0 P:envmxdIZc $81/8810 65 97 ADC $97 [$00:0097] A:0 X:0026 Y:0 P:envmxdIZc $81/8812 85 78 STA $78 [$00:0078] A:BFF9 X:0026 Y:0 P:eNvmxdIzc $81/8814 22 9F 93 80 JSL $80939F[$80:939F] A:BFF9 X:0026 Y:0 P:eNvmxdIzc
code/data is missing here
$81/881B A9 00 7F LDA #$7F00 A:0086 X:0 Y:1000 P:eNvmxdIzc $81/881E 85 98 STA $98 [$00:0098] A:7F00 X:0 Y:1000 P:envmxdIzc $81/8820 A9 00 0A LDA #$0A00 A:7F00 X:0 Y:1000 P:envmxdIzc $81/8823 85 97 STA $97 [$00:0097] A:0A00 X:0 Y:1000 P:envmxdIzc $81/8825 A0 00 00 LDY #$0000 A:0A00 X:0 Y:1000 P:envmxdIzc $81/8828 84 A1 STY $A1 [$00:00A1] A:0A00 X:0 Y:0 P:envmxdIZc $81/882A A9 00 81 LDA #$8100 A:0A00 X:0 Y:0 P:envmxdIZc $81/882D 8D 5E 06 STA $065E [$81:065E] A:8100 X:0 Y:0 P:eNvmxdIzc $81/8830 A9 B8 87 LDA #$87B8 A:8100 X:0 Y:0 P:eNvmxdIzc $81/8833 8D 5D 06 STA $065D [$81:065D] A:87B8 X:0 Y:0 P:eNvmxdIzc $81/8836 22 B6 91 80 JSL $8091B6[$80:91B6] A:87B8 X:0 Y:0 P:eNvmxdIzc $81/883A FA PLX A:0 X:0 Y:0 P:envmxdIZc $81/883B 6B RTL A:0 X:0026 Y:0 P:envmxdIzc
$81/883C ?
$81/883C AD B6 0C LDA $0CB6 [$81:0CB6] A:883B X:0026 Y:0200 P:envmxdIzc $81/883F 0A ASL A A:0 X:0026 Y:0200 P:envmxdIZc $81/8840 DA PHX A:0 X:0026 Y:0200 P:envmxdIZc $81/8841 AA TAX A:0 X:0026 Y:0200 P:envmxdIZc $81/8842 BF 49 88 81 LDA $818849,x[$81:8849] A:0 X:0 Y:0200 P:envmxdIZc $81/8846 FA PLX A:8859 X:0 Y:0200 P:eNvmxdIzc $81/8847 48 PHA A:8859 X:0026 Y:0200 P:envmxdIzc $81/8848 60 RTS A:8859 X:0026 Y:0200 P:envmxdIzc
$81/885A ?
$81/885A AD A0 0B LDA $0BA0 [$81:0BA0] A:8859 X:0026 Y:0200 P:envmxdIzc $81/885D D0 F2 BNE $F2 [$8851] A:0 X:0026 Y:0200 P:envmxdIZc $81/885F A9 01 00 LDA #$0001 A:0 X:0026 Y:0200 P:envmxdIZc $81/8862 8D A0 0B STA $0BA0 [$81:0BA0] A:0001 X:0026 Y:0200 P:envmxdIzc $81/8865 A0 01 00 LDY #$0001 A:0001 X:0026 Y:0200 P:envmxdIzc $81/8868 20 5F BB JSR $BB5F [$81:BB5F] A:0001 X:0026 Y:0001 P:envmxdIzc $81/886B 8D A4 0B STA $0BA4 [$81:0BA4] A:0 X:0026 Y:0004 P:envmxdIzc $81/886E 20 5F BB JSR $BB5F [$81:BB5F] A:0 X:0026 Y:0004 P:envmxdIzc $81/8871 8D A6 0B STA $0BA6 [$81:0BA6] A:0 X:0026 Y:0007 P:envmxdIzc $81/8874 B7 AC LDA [$AC],y[$94:C022] A:0 X:0026 Y:0007 P:envmxdIzc $81/8876 85 20 STA $20 [$00:0020] A:8003 X:0026 Y:0007 P:eNvmxdIzc $81/8878 C8 INY A:8003 X:0026 Y:0007 P:eNvmxdIzc $81/8879 B7 AC LDA [$AC],y[$94:C023] A:8003 X:0026 Y:0008 P:envmxdIzc $81/887B 85 21 STA $21 [$00:0021] A:8280 X:0026 Y:0008 P:eNvmxdIzc $81/887D C8 INY A:8280 X:0026 Y:0008 P:eNvmxdIzc $81/887E C8 INY A:8280 X:0026 Y:0009 P:envmxdIzc $81/887F 20 96 BA JSR $BA96 [$81:BA96] A:8280 X:0026 Y:000A P:envmxdIzc $81/8882 A5 20 LDA $20 [$00:0020] A:0082 X:0026 Y:000A P:envmxdIzc $81/8884 85 A9 STA $A9 [$00:00A9] A:8003 X:0026 Y:000A P:eNvmxdIzc $81/8886 A5 21 LDA $21 [$00:0021] A:8003 X:0026 Y:000A P:eNvmxdIzc $81/8888 85 AA STA $AA [$00:00AA] A:8280 X:0026 Y:000A P:eNvmxdIzc $81/888A 20 5F BB JSR $BB5F [$81:BB5F] A:8280 X:0026 Y:000A P:eNvmxdIzc $81/888D 8D A2 0B STA $0BA2 [$81:0BA2] A:8000 X:0026 Y:000D P:envmxdIzc $81/8890 A0 00 00 LDY #$0000 A:8000 X:0026 Y:000D P:envmxdIzc $81/8893 B7 A9 LDA [$A9],y[$82:8003] A:8000 X:0026 Y:0 P:envmxdIZc $81/8895 85 97 STA $97 [$00:0097] A:800C X:0026 Y:0 P:eNvmxdIzc $81/8897 C8 INY A:800C X:0026 Y:0 P:eNvmxdIzc $81/8898 B7 A9 LDA [$A9],y[$82:8004] A:800C X:0026 Y:0001 P:envmxdIzc $81/889A 85 98 STA $98 [$00:0098] A:8280 X:0026 Y:0001 P:eNvmxdIzc $81/889C 22 88 86 81 JSL $818688 ; Transfer Color Data in CGRAM Buffer $81/88A0 A9 01 00 LDA #$0001 A:0001 X:0026 Y:0020 P:envmxdIzc $81/88A3 8D B8 0B STA $0BB8 [$81:0BB8] A:0001 X:0026 Y:0020 P:envmxdIzc $81/88A6 A0 03 00 LDY #$0003 A:0001 X:0026 Y:0020 P:envmxdIzc $81/88A9 B7 A9 LDA [$A9],y[$82:8006] A:0001 X:0026 Y:0003 P:envmxdIzc $81/88AB 85 97 STA $97 [$00:0097] A:8012 X:0026 Y:0003 P:eNvmxdIzc $81/88AD C8 INY A:8012 X:0026 Y:0003 P:eNvmxdIzc $81/88AE B7 A9 LDA [$A9],y[$82:8007] A:8012 X:0026 Y:0004 P:envmxdIzc $81/88B0 85 98 STA $98 [$00:0098] A:8280 X:0026 Y:0004 P:eNvmxdIzc $81/88B2 22 D5 87 81 JSL $8187D5[$81:87D5] A:8280 X:0026 Y:0004 P:eNvmxdIzc $81/88B6 EE B6 0C INC $0CB6 [$81:0CB6] A:0 X:0026 Y:0 P:envmxdIzc $81/88B9 60 RTS A:0 X:0026 Y:0 P:envmxdIzc
$81/88BA ?
$81/88BA AD B8 0B LDA $0BB8 $81/88BD D0 40 BNE $40 ; [$88FF] Exit if not empty $81/88BF A0 06 00 LDY #$0006 A:0 X:0026 Y:0 P:envmxdIZc $81/88C2 B7 A9 LDA [$A9],y[$82:8009] A:0 X:0026 Y:0006 P:envmxdIzc $81/88C4 85 97 STA $97 [$00:0097] A:8000 X:0026 Y:0006 P:eNvmxdIzc $81/88C6 C8 INY A:8000 X:0026 Y:0006 P:eNvmxdIzc $81/88C7 B7 A9 LDA [$A9],y[$82:800A] A:8000 X:0026 Y:0007 P:envmxdIzc $81/88C9 85 98 STA $98 [$00:0098] A:8280 X:0026 Y:0007 P:eNvmxdIzc $81/88CB A9 00 7E LDA #$7E00 ; Setup Address $7E/8C15 in $9A-C $81/88CE 85 9B STA $9B $81/88D0 A9 15 8C LDA #$8C15 $81/88D3 85 9A STA $9A $81/88D5 22 F9 86 81 JSL $8186F9[$81:86F9] A:8C15 X:0026 Y:0007 P:eNvmxdIzc $81/88D9 AD AC 0B LDA $0BAC [$81:0BAC] A:0001 X:0026 Y:0020 P:envmxdIzC $81/88DC 18 CLC A:0010 X:0026 Y:0020 P:envmxdIzC $81/88DD 6D AA 0B ADC $0BAA [$81:0BAA] A:0010 X:0026 Y:0020 P:envmxdIzc $81/88E0 8D AA 0B STA $0BAA [$81:0BAA] A:0030 X:0026 Y:0020 P:envmxdIzc $81/88E3 AD B0 0B LDA $0BB0 [$81:0BB0] A:0030 X:0026 Y:0020 P:envmxdIzc $81/88E6 18 CLC A:0080 X:0026 Y:0020 P:envmxdIzc $81/88E7 6D AE 0B ADC $0BAE [$81:0BAE] A:0080 X:0026 Y:0020 P:envmxdIzc $81/88EA 8D AE 0B STA $0BAE [$81:0BAE] A:0081 X:0026 Y:0020 P:envmxdIzc $81/88ED EE B6 0C INC $0CB6 [$81:0CB6] A:0081 X:0026 Y:0020 P:envmxdIzc $81/88F0 60 RTS A:0081 X:0026 Y:0020 P:envmxdIzc $81/88F1 9C A0 0B STZ $0BA0 [$81:0BA0] A:88F0 X:0026 Y:0 P:envmxdIzc $81/88F4 9C B6 0C STZ $0CB6 [$81:0CB6] A:88F0 X:0026 Y:0 P:envmxdIzc $81/88F7 A5 AC LDA $AC [$00:00AC] A:88F0 X:0026 Y:0 P:envmxdIzc $81/88F9 18 CLC A:C01B X:0026 Y:0 P:eNvmxdIzc $81/88FA 69 0D 00 ADC #$000D A:C01B X:0026 Y:0 P:eNvmxdIzc $81/88FD 85 AC STA $AC [$00:00AC] A:C028 X:0026 Y:0 P:eNvmxdIzc $81/88FF 60 RTS
$81/91D9 ?
$81/91D9 DA PHX A:91D8 X:0026 Y:0 P:envmxdIzc $81/91DA A9 80 00 LDA #$0080 A:91D8 X:0026 Y:0 P:envmxdIzc $81/91DD 1C 00 01 TRB $0100 [$81:0100] A:0080 X:0026 Y:0 P:envmxdIzc $81/91E0 AD B6 0C LDA $0CB6 [$81:0CB6] A:0080 X:0026 Y:0 P:envmxdIzc $81/91E3 F0 0D BEQ $0D [$91F2] A:0 X:0026 Y:0 P:envmxdIZc $81/91E5 C9 FF FF CMP #$FFFF A:0020 X:0026 Y:0 P:envmxdIzc $81/91E8 F0 3F BEQ $3F [$9229] A:0020 X:0026 Y:0 P:envmxdIzc $81/91EA CE B6 0C DEC $0CB6 [$81:0CB6] A:0020 X:0026 Y:0 P:envmxdIzc $81/91ED D0 3A BNE $3A [$9229] A:0020 X:0026 Y:0 P:envmxdIzc $81/91EF 4C 5F 92 JMP $925F [$81:925F] A:0001 X:0026 Y:0 P:envmxdIZc $81/91F2 AD DE 0C LDA $0CDE [$81:0CDE] A:0 X:0026 Y:0 P:envmxdIZc $81/91F5 D0 6B BNE $6B [$9262] A:0 X:0026 Y:0 P:envmxdIZc $81/91F7 A9 01 00 LDA #$0001 A:0 X:0026 Y:0 P:envmxdIZc $81/91FA 8D DE 0C STA $0CDE [$81:0CDE] A:0001 X:0026 Y:0 P:envmxdIzc $81/91FD 8D 6E 0B STA $0B6E [$81:0B6E] A:0001 X:0026 Y:0 P:envmxdIzc $81/9200 A0 01 00 LDY #$0001 A:0001 X:0026 Y:0 P:envmxdIzc $81/9203 B7 AC LDA [$AC],y[$94:C060] A:0001 X:0026 Y:0001 P:envmxdIzc $81/9205 8D B6 0C STA $0CB6 [$81:0CB6] A:0020 X:0026 Y:0001 P:envmxdIzc $81/9208 64 16 STZ $16 [$00:0016] A:0020 X:0026 Y:0001 P:envmxdIzc $81/920A 64 1A STZ $1A [$00:001A] A:0020 X:0026 Y:0001 P:envmxdIzc $81/920C A9 10 00 LDA #$0010 A:0020 X:0026 Y:0001 P:envmxdIzc $81/920F 85 14 STA $14 [$00:0014] A:0010 X:0026 Y:0001 P:envmxdIzc $81/9211 A0 03 00 LDY #$0003 A:0010 X:0026 Y:0001 P:envmxdIzc $81/9214 B7 AC LDA [$AC],y[$94:C062] A:0010 X:0026 Y:0003 P:envmxdIzc $81/9216 85 18 STA $18 [$00:0018] A:0020 X:0026 Y:0003 P:envmxdIzc $81/9218 22 FD AF 80 JSL $80AFFD[$80:AFFD] A:0020 X:0026 Y:0003 P:envmxdIzc $81/921C A5 14 LDA $14 [$00:0014] A:FFFF X:0026 Y:0 P:envmxdIZc $81/921E 8D E2 0C STA $0CE2 [$81:0CE2] A:8000 X:0026 Y:0 P:eNvmxdIzc $81/9221 8D E0 0C STA $0CE0 [$81:0CE0] A:8000 X:0026 Y:0 P:eNvmxdIzc $81/9224 A5 16 LDA $16 [$00:0016] A:8000 X:0026 Y:0 P:eNvmxdIzc $81/9226 8D E4 0C STA $0CE4 [$81:0CE4] A:0 X:0026 Y:0 P:envmxdIZc $81/9229 AD E2 0C LDA $0CE2 [$81:0CE2] A:0 X:0026 Y:0 P:envmxdIZc $81/922C 18 CLC A:8000 X:0026 Y:0 P:eNvmxdIzc $81/922D 6D E0 0C ADC $0CE0 [$81:0CE0] A:8000 X:0026 Y:0 P:eNvmxdIzc $81/9230 8D E2 0C STA $0CE2 [$81:0CE2] A:0 X:0026 Y:0 P:enVmxdIZC $81/9233 E2 20 SEP #$20 A:0 X:0026 Y:0 P:enVmxdIZC $81/9235 AD 00 01 LDA $0100 [$81:0100] A:0 X:0026 Y:0 P:enVMxdIZC $81/9238 6D E4 0C ADC $0CE4 [$81:0CE4] A:0 X:0026 Y:0 P:enVMxdIZC $81/923B 8D 00 01 STA $0100 [$81:0100] A:0001 X:0026 Y:0 P:envMxdIzc $81/923E 29 7F AND #$7F A:0001 X:0026 Y:0 P:envMxdIzc $81/9240 C9 10 CMP #$10 A:0001 X:0026 Y:0 P:envMxdIzc $81/9242 90 0A BCC $0A [$924E] A:0001 X:0026 Y:0 P:eNvMxdIzc $81/9244 AD 00 01 LDA $0100 [$81:0100] A:0010 X:0026 Y:0 P:envMxdIZC $81/9247 29 80 AND #$80 A:0010 X:0026 Y:0 P:envMxdIzC $81/9249 09 0F ORA #$0F A:0 X:0026 Y:0 P:envMxdIZC $81/924B 8D 00 01 STA $0100 [$81:0100] A:000F X:0026 Y:0 P:envMxdIzC $81/924E C2 20 REP #$20 A:0001 X:0026 Y:0 P:eNvMxdIzc $81/9250 AD B6 0C LDA $0CB6 [$81:0CB6] A:0001 X:0026 Y:0 P:eNvmxdIzc $81/9253 D0 15 BNE $15 [$926A] A:0020 X:0026 Y:0 P:envmxdIzc
code is missing here
$81/925F 9C DE 0C STZ $0CDE [$81:0CDE] A:0001 X:0026 Y:0 P:envmxdIZc $81/9262 A5 AC LDA $AC [$00:00AC] A:0001 X:0026 Y:0 P:envmxdIZc $81/9264 18 CLC A:C05F X:0026 Y:0 P:eNvmxdIzc $81/9265 69 05 00 ADC #$0005 A:C05F X:0026 Y:0 P:eNvmxdIzc $81/9268 85 AC STA $AC [$00:00AC] A:C064 X:0026 Y:0 P:eNvmxdIzc $81/926A FA PLX A:0020 X:0026 Y:0 P:envmxdIzc $81/926B 60 RTS A:0020 X:0026 Y:0 P:envmxdIzc
$81/926C TOKEN VECTOR #$06: ?
$81/926C DA PHX ; Buffer X on stack $81/926D AD B6 0C LDA $0CB6 [$81:0CB6] A:926B X:0026 Y:0004 P:envmxdIzc $81/9270 F0 0D BEQ $0D [$927F] A:0 X:0026 Y:0004 P:envmxdIZc $81/9272 C9 FF FF CMP #$FFFF A:0021 X:0026 Y:0001 P:envmxdIzc $81/9275 F0 43 BEQ $43 [$92BA] A:0021 X:0026 Y:0001 P:envmxdIzc $81/9277 CE B6 0C DEC $0CB6 [$81:0CB6] A:0021 X:0026 Y:0001 P:envmxdIzc $81/927A D0 3E BNE $3E [$92BA] A:0021 X:0026 Y:0001 P:envmxdIzc $81/927C 4C E6 92 JMP $92E6 [$81:92E6] A:0001 X:0026 Y:0 P:envmxdIZc $81/927F AD DE 0C LDA $0CDE [$81:0CDE] A:0 X:0026 Y:0004 P:envmxdIZc $81/9282 F0 03 BEQ $03 [$9287] A:0 X:0026 Y:0004 P:envmxdIZc $81/9284 4C 0E 93 JMP $930E [$81:930E] A:0001 X:0026 Y:0 P:envmxdIzc $81/9287 A9 01 00 LDA #$0001 A:0 X:0026 Y:0004 P:envmxdIZc $81/928A 8D DE 0C STA $0CDE [$81:0CDE] A:0001 X:0026 Y:0004 P:envmxdIzc $81/928D 8D 6E 0B STA $0B6E [$81:0B6E] A:0001 X:0026 Y:0004 P:envmxdIzc $81/9290 A0 01 00 LDY #$0001 A:0001 X:0026 Y:0004 P:envmxdIzc $81/9293 B7 AC LDA [$AC],y[$94:C00E] A:0001 X:0026 Y:0001 P:envmxdIzc $81/9295 1A INC A A:0020 X:0026 Y:0001 P:envmxdIzc $81/9296 8D B6 0C STA $0CB6 [$81:0CB6] A:0021 X:0026 Y:0001 P:envmxdIzc $81/9299 64 16 STZ $16 [$00:0016] A:0021 X:0026 Y:0001 P:envmxdIzc $81/929B 64 1A STZ $1A [$00:001A] A:0021 X:0026 Y:0001 P:envmxdIzc $81/929D A9 10 00 LDA #$0010 A:0021 X:0026 Y:0001 P:envmxdIzc $81/92A0 85 14 STA $14 [$00:0014] A:0010 X:0026 Y:0001 P:envmxdIzc $81/92A2 A0 03 00 LDY #$0003 A:0010 X:0026 Y:0001 P:envmxdIzc $81/92A5 B7 AC LDA [$AC],y[$94:C010] A:0010 X:0026 Y:0003 P:envmxdIzc $81/92A7 85 18 STA $18 [$00:0018] A:0020 X:0026 Y:0003 P:envmxdIzc $81/92A9 22 FD AF 80 JSL $80AFFD[$80:AFFD] A:0020 X:0026 Y:0003 P:envmxdIzc $81/92AD A5 14 LDA $14 [$00:0014] A:FFFF X:0026 Y:0 P:envmxdIZc $81/92AF 8D E2 0C STA $0CE2 [$81:0CE2] A:8000 X:0026 Y:0 P:eNvmxdIzc $81/92B2 8D E0 0C STA $0CE0 [$81:0CE0] A:8000 X:0026 Y:0 P:eNvmxdIzc $81/92B5 A5 16 LDA $16 [$00:0016] A:8000 X:0026 Y:0 P:eNvmxdIzc $81/92B7 8D E4 0C STA $0CE4 [$81:0CE4] A:0 X:0026 Y:0 P:envmxdIZc $81/92BA AD 00 01 LDA $0100 [$81:0100] A:0 X:0026 Y:0 P:envmxdIZc $81/92BD 29 80 00 AND #$0080 A:030F X:0026 Y:0 P:envmxdIzc $81/92C0 85 00 STA $00 [$00:0000] A:0 X:0026 Y:0 P:envmxdIZc $81/92C2 AD E2 0C LDA $0CE2 [$81:0CE2] A:0 X:0026 Y:0 P:envmxdIZc $81/92C5 38 SEC A:8000 X:0026 Y:0 P:eNvmxdIzc $81/92C6 ED E0 0C SBC $0CE0 [$81:0CE0] A:8000 X:0026 Y:0 P:eNvmxdIzC $81/92C9 8D E2 0C STA $0CE2 [$81:0CE2] A:0 X:0026 Y:0 P:envmxdIZC $81/92CC E2 20 SEP #$20 A:0 X:0026 Y:0 P:envmxdIZC $81/92CE AD 00 01 LDA $0100 [$81:0100] A:0 X:0026 Y:0 P:envMxdIZC $81/92D1 29 7F AND #$7F A:000F X:0026 Y:0 P:envMxdIzC $81/92D3 ED E4 0C SBC $0CE4 [$81:0CE4] A:000F X:0026 Y:0 P:envMxdIzC $81/92D6 10 02 BPL $02 [$92DA] A:000F X:0026 Y:0 P:envMxdIzC $81/92D8 A9 00 LDA #$00 A:80FF X:0026 Y:0 P:eNvMxdIzc $81/92DA 05 00 ORA $00 [$00:0000] A:000F X:0026 Y:0 P:envMxdIzC $81/92DC 8D 00 01 STA $0100 [$81:0100] A:000F X:0026 Y:0 P:envMxdIzC $81/92DF C2 20 REP #$20 A:000F X:0026 Y:0 P:envMxdIzC $81/92E1 AD B6 0C LDA $0CB6 [$81:0CB6] A:000F X:0026 Y:0 P:envmxdIzC $81/92E4 D0 33 BNE $33 [$9319] A:0021 X:0026 Y:0 P:envmxdIzC $81/92E6 AD 6E 0B LDA $0B6E [$81:0B6E] A:0001 X:0026 Y:0 P:envmxdIZc $81/92E9 F0 2E BEQ $2E [$9319] A:0001 X:0026 Y:0 P:envmxdIzc $81/92EB A9 01 00 LDA #$0001 A:0001 X:0026 Y:0 P:envmxdIzc $81/92EE 8D B6 0C STA $0CB6 [$81:0CB6] A:0001 X:0026 Y:0 P:envmxdIzc $81/92F1 A0 01 00 LDY #$0001 A:0001 X:0026 Y:0 P:envmxdIzc $81/92F4 B7 AC LDA [$AC],y[$94:C00E] A:0001 X:0026 Y:0001 P:envmxdIzc $81/92F6 A0 03 00 LDY #$0003 A:0020 X:0026 Y:0001 P:envmxdIzc $81/92F9 D7 AC CMP [$AC],y[$94:C010] A:0020 X:0026 Y:0003 P:envmxdIzc $81/92FB 90 0C BCC $0C [$9309] A:0020 X:0026 Y:0003 P:envmxdIZC $81/92FD A9 00 00 LDA #$0000 A:0020 X:0026 Y:0003 P:envmxdIZC $81/9300 8D 0C 42 STA $420C [$81:420C] A:0 X:0026 Y:0003 P:envmxdIZC $81/9303 A9 80 00 LDA #$0080 A:0 X:0026 Y:0003 P:envmxdIZC $81/9306 0C 00 01 TSB $0100 [$81:0100] A:0080 X:0026 Y:0003 P:envmxdIzC $81/9309 9C 6E 0B STZ $0B6E [$81:0B6E] A:0080 X:0026 Y:0003 P:envmxdIZC $81/930C 80 0B BRA $0B ; [$9319] Exit $81/930E 9C DE 0C STZ $0CDE [$81:0CDE] A:0001 X:0026 Y:0 P:envmxdIzc $81/9311 A5 AC LDA $AC [$00:00AC] A:0001 X:0026 Y:0 P:envmxdIzc $81/9313 18 CLC A:C00D X:0026 Y:0 P:eNvmxdIzc $81/9314 69 05 00 ADC #$0005 A:C00D X:0026 Y:0 P:eNvmxdIzc $81/9317 85 AC STA $AC [$00:00AC] A:C012 X:0026 Y:0 P:eNvmxdIzc $81/9319 FA PLX A:0021 X:0026 Y:0 P:envmxdIzC $81/931A 60 RTS A:0021 X:0026 Y:0 P:envmxdIzC
$81/9356 TOKEN VECTOR #$27: ?
$81/9356 5A PHY ; Buffer Y and X on stack $81/9357 DA PHX $81/9358 9C 98 19 STZ $1998 [$81:1998] A:9355 X:0026 Y:0007 P:envmxdIzc $81/935B A0 01 00 LDY #$0001 A:9355 X:0026 Y:0007 P:envmxdIzc $81/935E 20 EA BD JSR $BDEA [$81:BDEA] A:9355 X:0026 Y:0001 P:envmxdIzc $81/9361 85 00 STA $00 [$00:0000] A:1676 X:0026 Y:0004 P:envmxdIzc $81/9363 20 5F BB JSR $BB5F [$81:BB5F] A:1676 X:0026 Y:0004 P:envmxdIzc $81/9366 85 02 STA $02 [$00:0002] A:0008 X:0026 Y:0007 P:envmxdIzc $81/9368 B2 00 LDA ($00) [$81:1676] A:0008 X:0026 Y:0007 P:envmxdIzc $81/936A 18 CLC A:0 X:0026 Y:0007 P:envmxdIZc $81/936B 65 02 ADC $02 [$00:0002] A:0 X:0026 Y:0007 P:envmxdIZc $81/936D 92 00 STA ($00) [$81:1676] A:0008 X:0026 Y:0007 P:envmxdIzc $81/936F 2E 98 19 ROL $1998 [$81:1998] A:0008 X:0026 Y:0007 P:envmxdIzc $81/9372 98 TYA A:0008 X:0026 Y:0007 P:envmxdIZc $81/9373 18 CLC A:0007 X:0026 Y:0007 P:envmxdIzc $81/9374 65 AC ADC $AC [$00:00AC] A:0007 X:0026 Y:0007 P:envmxdIzc $81/9376 85 AC STA $AC [$00:00AC] A:8307 X:0026 Y:0007 P:eNvmxdIzc $81/9378 FA PLX ; Restore Y and X $81/9379 7A PLY $81/937A 60 RTS
$81/9459 ?
$81/9459 08 PHP A:9458 X:001E Y:0008 P:envmxdIzc $81/945A DA PHX A:9458 X:001E Y:0008 P:envmxdIzc $81/945B A0 01 00 LDY #$0001 A:9458 X:001E Y:0008 P:envmxdIzc $81/945E 20 5F BB JSR $BB5F [$81:BB5F] A:9458 X:001E Y:0001 P:envmxdIzc $81/9461 85 00 STA $00 [$00:0000] A:0 X:001E Y:0004 P:envmxdIzc $81/9463 20 5F BB JSR $BB5F [$81:BB5F] A:0 X:001E Y:0004 P:envmxdIzc $81/9466 25 00 AND $00 [$00:0000] A:0F80 X:001E Y:0007 P:envmxdIzc $81/9468 F0 19 BEQ $19 [$9483] A:0 X:001E Y:0007 P:envmxdIZc $81/9483 A5 AC LDA $AC [$00:00AC] A:0 X:001E Y:0007 P:envmxdIZc $81/9485 18 CLC A:AA91 X:001E Y:0007 P:eNvmxdIzc $81/9486 69 0A 00 ADC #$000A A:AA91 X:001E Y:0007 P:eNvmxdIzc $81/9489 85 AC STA $AC [$00:00AC] A:AA9B X:001E Y:0007 P:eNvmxdIzc $81/948B FA PLX A:AA9B X:001E Y:0007 P:eNvmxdIzc $81/948C 28 PLP A:AA9B X:001E Y:0007 P:envmxdIzc $81/948D 60 RTS A:AA9B X:001E Y:0007 P:envmxdIzc
$81/948E ? (Executed when talking to the aerial building and at startup)
$81/948E 08 PHP A:948D X:0024 Y:0000 P:envmxdIzc $81/948F DA PHX A:948D X:0024 Y:0000 P:envmxdIzc $81/9490 A0 01 00 LDY #$0001 A:948D X:0024 Y:0000 P:envmxdIzc $81/9493 20 5F BB JSR $BB5F [$81:BB5F] A:948D X:0024 Y:0001 P:envmxdIzc $81/9496 85 00 STA $00 [$00:0000] A:0000 X:0024 Y:0004 P:envmxdIzc $81/9498 20 5F BB JSR $BB5F [$81:BB5F] A:0000 X:0024 Y:0004 P:envmxdIzc $81/949B 25 00 AND $00 [$00:0000] A:8080 X:0024 Y:0007 P:envmxdIzc $81/949D D0 19 BNE $19 [$94B8] A:0000 X:0024 Y:0007 P:envmxdIZc $81/949F B7 AC LDA [$AC],y[$88:DE75] A:0000 X:0024 Y:0007 P:envmxdIZc $81/94A1 85 20 STA $20 [$00:0020] A:DE65 X:0024 Y:0007 P:eNvmxdIzc $81/94A3 C8 INY A:DE65 X:0024 Y:0007 P:eNvmxdIzc $81/94A4 B7 AC LDA [$AC],y[$88:DE76] A:DE65 X:0024 Y:0008 P:envmxdIzc $81/94A6 85 21 STA $21 [$00:0021] A:88DE X:0024 Y:0008 P:eNvmxdIzc $81/94A8 20 96 BA JSR $BA96 [$81:BA96] A:88DE X:0024 Y:0008 P:eNvmxdIzc $81/94AB AD 20 00 LDA $0020 [$81:0020] A:0088 X:0024 Y:0008 P:envmxdIzc $81/94AE 85 AC STA $AC [$00:00AC] A:DE65 X:0024 Y:0008 P:eNvmxdIzc $81/94B0 AD 21 00 LDA $0021 [$81:0021] A:DE65 X:0024 Y:0008 P:eNvmxdIzc $81/94B3 85 AD STA $AD [$00:00AD] A:88DE X:0024 Y:0008 P:eNvmxdIzc $81/94B5 FA PLX A:88DE X:0024 Y:0008 P:eNvmxdIzc $81/94B6 28 PLP A:88DE X:0024 Y:0008 P:envmxdIzc $81/94B7 60 RTS A:88DE X:0024 Y:0008 P:envmxdIzc $81/94B8 A5 AC LDA $AC [$00:00AC] A:0080 X:0024 Y:0007 P:envmxdIzc $81/94BA 18 CLC A:DE6E X:0024 Y:0007 P:eNvmxdIzc $81/94BB 69 0A 00 ADC #$000A A:DE6E X:0024 Y:0007 P:eNvmxdIzc $81/94BE 85 AC STA $AC [$00:00AC] A:DE78 X:0024 Y:0007 P:eNvmxdIzc $81/94C0 FA PLX A:DE78 X:0024 Y:0007 P:eNvmxdIzc $81/94C1 28 PLP A:DE78 X:0024 Y:0007 P:envmxdIzc $81/94C2 60 RTS A:DE78 X:0024 Y:0007 P:envmxdIzc
$81/A02A ?
$81/A02A AD B6 0C LDA $0CB6 [$81:0CB6] A:A029 X:0024 Y:0009 P:envmxdIzc $81/A02D F0 0D BEQ $0D [$A03C] A:0 X:0024 Y:0009 P:envmxdIZc $81/A02F C9 FF FF CMP #$FFFF A:0001 X:0024 Y:0001 P:envmxdIzc $81/A032 F0 1F BEQ $1F [$A053] A:0001 X:0024 Y:0001 P:envmxdIzc $81/A034 CE B6 0C DEC $0CB6 [$81:0CB6] A:0001 X:0024 Y:0001 P:envmxdIzc $81/A037 D0 1A BNE $1A [$A053] A:0001 X:0024 Y:0001 P:envmxdIZc $81/A039 4C 5C A0 JMP $A05C [$81:A05C] A:0001 X:0024 Y:0001 P:envmxdIZc $81/A03C A0 01 00 LDY #$0001 A:0 X:0024 Y:0009 P:envmxdIZc $81/A03F B7 AC LDA [$AC],y[$93:B499] A:0 X:0024 Y:0001 P:envmxdIzc $81/A041 8D B6 0C STA $0CB6 [$81:0CB6] A:0001 X:0024 Y:0001 P:envmxdIzc $81/A044 A0 03 00 LDY #$0003 A:0001 X:0024 Y:0001 P:envmxdIzc $81/A047 20 5F BB JSR $BB5F [$81:BB5F] A:0001 X:0024 Y:0003 P:envmxdIzc $81/A04A 9D C8 16 STA $16C8,x[$81:16EC] A:FF80 X:0024 Y:0006 P:envmxdIzc $81/A04D 20 5F BB JSR $BB5F [$81:BB5F] A:FF80 X:0024 Y:0006 P:envmxdIzc $81/A050 9D F0 16 STA $16F0,x[$81:1714] A:0 X:0024 Y:0009 P:envmxdIzc $81/A053 AD B6 0C LDA $0CB6 [$81:0CB6] A:0 X:0024 Y:0009 P:envmxdIzc $81/A056 F0 04 BEQ $04 [$A05C] A:0001 X:0024 Y:0009 P:envmxdIzc $81/A058 20 96 C4 JSR $C496 [$81:C496] A:0001 X:0024 Y:0009 P:envmxdIzc $81/A05B 60 RTS A:0090 X:0024 Y:0009 P:envmxdIzc $81/A05C A0 09 00 LDY #$0009 A:0001 X:0024 Y:0001 P:envmxdIZc $81/A05F 98 TYA A:0001 X:0024 Y:0009 P:envmxdIzc $81/A060 18 CLC A:0009 X:0024 Y:0009 P:envmxdIzc $81/A061 65 AC ADC $AC [$00:00AC] A:0009 X:0024 Y:0009 P:envmxdIzc $81/A063 85 AC STA $AC [$00:00AC] A:B4A1 X:0024 Y:0009 P:eNvmxdIzc $81/A065 60 RTS A:B4A1 X:0024 Y:0009 P:eNvmxdIzc
$81/A183 ?
$81/A183 AD 98 19 LDA $1998 $81/A186 F0 19 BEQ $19 ; [$A1A1] If $1998 is zero, Exit this Token / Command $81/A188 A0 01 00 LDY #$0001 A:0001 X:0022 Y:0001 P:envmxdIzc $81/A18B B7 AC LDA [$AC],y[$93:C1D9] A:0001 X:0022 Y:0001 P:envmxdIzc $81/A18D 85 20 STA $20 [$00:0020] A:C1C6 X:0022 Y:0001 P:eNvmxdIzc $81/A18F C8 INY A:C1C6 X:0022 Y:0001 P:eNvmxdIzc $81/A190 B7 AC LDA [$AC],y[$93:C1DA] A:C1C6 X:0022 Y:0002 P:envmxdIzc $81/A192 85 21 STA $21 [$00:0021] A:93C1 X:0022 Y:0002 P:eNvmxdIzc $81/A194 20 96 BA JSR $BA96 [$81:BA96] A:93C1 X:0022 Y:0002 P:eNvmxdIzc $81/A197 A5 21 LDA $21 [$00:0021] A:0093 X:0022 Y:0002 P:envmxdIzc $81/A199 85 AD STA $AD [$00:00AD] A:93C1 X:0022 Y:0002 P:eNvmxdIzc $81/A19B A5 20 LDA $20 [$00:0020] A:93C1 X:0022 Y:0002 P:eNvmxdIzc $81/A19D 85 AC STA $AC [$00:00AC] A:C1C6 X:0022 Y:0002 P:eNvmxdIzc $81/A19F 80 09 BRA $09 [$A1AA] A:C1C6 X:0022 Y:0002 P:eNvmxdIzc $81/A1A1 A0 04 00 LDY #$0004 A:0 X:0022 Y:0004 P:envmxdIZc $81/A1A4 98 TYA A:0 X:0022 Y:0004 P:envmxdIzc $81/A1A5 18 CLC A:0004 X:0022 Y:0004 P:envmxdIzc $81/A1A6 65 AC ADC $AC [$00:00AC] A:0004 X:0022 Y:0004 P:envmxdIzc $81/A1A8 85 AC STA $AC [$00:00AC] A:C1DC X:0022 Y:0004 P:eNvmxdIzc $81/A1AA 60 RTS A:C1C6 X:0022 Y:0002 P:eNvmxdIzc
$81/A1AB ?
$81/A1AB AD 98 19 LDA $1998 $81/A1AE D0 19 BNE $19 ; [$A1C9] If $1998 is not zero, Exit this Token / Command $81/A1B0 A0 01 00 LDY #$0001 A:0 X:0022 Y:0009 P:envmxdIZc $81/A1B3 B7 AC LDA [$AC],y[$93:C12F] A:0 X:0022 Y:0001 P:envmxdIzc $81/A1B5 85 20 STA $20 [$00:0020] A:C11C X:0022 Y:0001 P:eNvmxdIzc $81/A1B7 C8 INY A:C11C X:0022 Y:0001 P:eNvmxdIzc $81/A1B8 B7 AC LDA [$AC],y[$93:C130] A:C11C X:0022 Y:0002 P:envmxdIzc $81/A1BA 85 21 STA $21 [$00:0021] A:93C1 X:0022 Y:0002 P:eNvmxdIzc $81/A1BC 20 96 BA JSR $BA96 [$81:BA96] A:93C1 X:0022 Y:0002 P:eNvmxdIzc $81/A1BF A5 21 LDA $21 [$00:0021] A:0093 X:0022 Y:0002 P:envmxdIzc $81/A1C1 85 AD STA $AD [$00:00AD] A:93C1 X:0022 Y:0002 P:eNvmxdIzc $81/A1C3 A5 20 LDA $20 [$00:0020] A:93C1 X:0022 Y:0002 P:eNvmxdIzc $81/A1C5 85 AC STA $AC [$00:00AC] A:C11C X:0022 Y:0002 P:eNvmxdIzc $81/A1C7 80 09 BRA $09 ; [$A1D2] Exit $81/A1C9 A0 04 00 LDY #$0004 A:0001 X:0022 Y:0004 P:envmxdIzc $81/A1CC 98 TYA A:0001 X:0022 Y:0004 P:envmxdIzc $81/A1CD 18 CLC A:0004 X:0022 Y:0004 P:envmxdIzc $81/A1CE 65 AC ADC $AC [$00:00AC] A:0004 X:0022 Y:0004 P:envmxdIzc $81/A1D0 85 AC STA $AC [$00:00AC] A:C132 X:0022 Y:0004 P:eNvmxdIzc $81/A1D2 60 RTS A:C11C X:0022 Y:0002 P:eNvmxdIzc
$81/A1D3 ?
$81/A1D3 9C 98 19 STZ $1998 [$81:1998] A:A1D2 X:0022 Y:0007 P:envmxdIzc $81/A1D6 A0 01 00 LDY #$0001 A:A1D2 X:0022 Y:0007 P:envmxdIzc $81/A1D9 20 EA BD JSR $BDEA [$81:BDEA] A:A1D2 X:0022 Y:0001 P:envmxdIzc $81/A1DC 85 00 STA $00 [$00:0000] A:1B3C X:0022 Y:0004 P:envmxdIzc $81/A1DE 20 5F BB JSR $BB5F [$81:BB5F] A:1B3C X:0022 Y:0004 P:envmxdIzc $81/A1E1 85 02 STA $02 [$00:0002] A:0018 X:0022 Y:0007 P:envmxdIzc $81/A1E3 B2 00 LDA ($00) [$81:1B3C] A:0018 X:0022 Y:0007 P:envmxdIzc $81/A1E5 38 SEC A:0050 X:0022 Y:0007 P:envmxdIzc $81/A1E6 E5 02 SBC $02 [$00:0002] A:0050 X:0022 Y:0007 P:envmxdIzC $81/A1E8 92 00 STA ($00) [$81:1B3C] A:0038 X:0022 Y:0007 P:envmxdIzC $81/A1EA 50 03 BVC $03 [$A1EF] A:0038 X:0022 Y:0007 P:envmxdIzC $81/A1EF 98 TYA A:0038 X:0022 Y:0007 P:envmxdIzC $81/A1F0 18 CLC A:0007 X:0022 Y:0007 P:envmxdIzC $81/A1F1 65 AC ADC $AC [$00:00AC] A:0007 X:0022 Y:0007 P:envmxdIzc $81/A1F3 85 AC STA $AC [$00:00AC] A:C11C X:0022 Y:0007 P:eNvmxdIzc $81/A1F5 60 RTS A:C11C X:0022 Y:0007 P:eNvmxdIzc
$81/A1F6 ?
$81/A1F6 9C 98 19 STZ $1998 [$81:1998] A:A1F5 X:0026 Y:0003 P:envmxdIzc $81/A1F9 A0 01 00 LDY #$0001 A:A1F5 X:0026 Y:0003 P:envmxdIzc $81/A1FC 20 EA BD JSR $BDEA [$81:BDEA] A:A1F5 X:0026 Y:0001 P:envmxdIzc $81/A1FF 85 00 STA $00 [$00:0000] A:1A00 X:0026 Y:0004 P:envmxdIzc $81/A201 20 5F BB JSR $BB5F [$81:BB5F] A:1A00 X:0026 Y:0004 P:envmxdIzc $81/A204 85 02 STA $02 [$00:0002] A:01FF X:0026 Y:0007 P:envmxdIzc $81/A206 B2 00 LDA ($00) [$81:1A00] A:01FF X:0026 Y:0007 P:envmxdIzc $81/A208 25 02 AND $02 [$00:0002] A:0001 X:0026 Y:0007 P:envmxdIzc $81/A20A 92 00 STA ($00) [$81:1A00] A:0001 X:0026 Y:0007 P:envmxdIzc $81/A20C F0 03 BEQ $03 [$A211] A:0001 X:0026 Y:0007 P:envmxdIzc $81/A20E EE 98 19 INC $1998 [$81:1998] A:0001 X:0026 Y:0007 P:envmxdIzc $81/A211 98 TYA A:0001 X:0026 Y:0007 P:envmxdIzc $81/A212 18 CLC A:0007 X:0026 Y:0007 P:envmxdIzc $81/A213 65 AC ADC $AC [$00:00AC] A:0007 X:0026 Y:0007 P:envmxdIzc $81/A215 85 AC STA $AC [$00:00AC] A:8B00 X:0026 Y:0007 P:eNvmxdIzc $81/A217 60 RTS A:8B00 X:0026 Y:0007 P:eNvmxdIzc
$81/A23A ?
$81/A23A 9C 98 19 STZ $1998 [$81:1998] A:A239 X:001E Y:0009 P:envmxdIzc $81/A23D A0 01 00 LDY #$0001 A:A239 X:001E Y:0009 P:envmxdIzc $81/A240 20 EA BD JSR $BDEA [$81:BDEA] A:A239 X:001E Y:0001 P:envmxdIzc $81/A243 85 00 STA $00 [$00:0000] A:1A70 X:001E Y:0004 P:envmxdIzc $81/A245 20 5F BB JSR $BB5F [$81:BB5F] A:1A70 X:001E Y:0004 P:envmxdIzc $81/A248 85 02 STA $02 [$00:0002] A:0003 X:001E Y:0007 P:envmxdIzc $81/A24A B2 00 LDA ($00) [$81:1A70] A:0003 X:001E Y:0007 P:envmxdIzc $81/A24C 45 02 EOR $02 [$00:0002] A:0003 X:001E Y:0007 P:envmxdIzc $81/A24E 92 00 STA ($00) [$81:1A70] A:0 X:001E Y:0007 P:envmxdIZc $81/A250 F0 03 BEQ $03 [$A255] A:0 X:001E Y:0007 P:envmxdIZc $81/A252 EE 98 19 INC $1998 [$81:1998] A:0003 X:001E Y:0007 P:envmxdIzc $81/A255 98 TYA A:0 X:001E Y:0007 P:envmxdIZc $81/A256 18 CLC A:0007 X:001E Y:0007 P:envmxdIzc $81/A257 65 AC ADC $AC [$00:00AC] A:0007 X:001E Y:0007 P:envmxdIzc $81/A259 85 AC STA $AC [$00:00AC] A:B26B X:001E Y:0007 P:eNvmxdIzc $81/A25B 60 RTS A:B26B X:001E Y:0007 P:eNvmxdIzc
$81/A401 TOKEN VECTOR #$3A: Change Music
$81/A401 A0 01 00 LDY #$0001 A:A400 X:0026 Y:0002 P:envmxdIzc $81/A404 20 5F BB JSR $BB5F [$81:BB5F] A:A400 X:0026 Y:0001 P:envmxdIzc $81/A407 29 FF 00 AND #$00FF A:0081 X:0026 Y:0004 P:envmxdIzc $81/A40A 5A PHY A:0081 X:0026 Y:0004 P:envmxdIzc $81/A40B A0 00 00 LDY #$0000 A:0081 X:0026 Y:0004 P:envmxdIzc $81/A40E 22 1C 5C 10 JSL $105C1C[$10:5C1C] A:0081 X:0026 Y:0 P:envmxdIZc $81/A412 7A PLY A:0081 X:0026 Y:0002 P:envmxdIzc $81/A413 98 TYA A:0081 X:0026 Y:0004 P:envmxdIzc $81/A414 18 CLC A:0004 X:0026 Y:0004 P:envmxdIzc $81/A415 65 AC ADC $AC [$00:00AC] A:0004 X:0026 Y:0004 P:envmxdIzc $81/A417 85 AC STA $AC [$00:00AC] A:C00D X:0026 Y:0004 P:eNvmxdIzc $81/A419 60 RTS A:C00D X:0026 Y:0004 P:eNvmxdIzc
$81/A41A Play Sound Effect during Textbox? (Executed when talking to the aerial building and at start up)
$81/A41A A0 01 00 LDY #$0001 A:A419 X:0026 Y:000A P:envmxdIzc $81/A41D 20 5F BB JSR $BB5F [$81:BB5F] A:A419 X:0026 Y:0001 P:envmxdIzc $81/A420 29 3F 00 AND #$003F A:000E X:0026 Y:0004 P:envmxdIzc $81/A423 85 00 STA $00 [$00:0000] A:000E X:0026 Y:0004 P:envmxdIzc $81/A425 C9 3F 00 CMP #$003F A:000E X:0026 Y:0004 P:envmxdIzc $81/A428 D0 04 BNE $04 [$A42E] A:000E X:0026 Y:0004 P:eNvmxdIzc
code is missing here
$81/A42E B7 AC LDA [$AC],y[$88:8E40] A:000E X:0026 Y:0004 P:eNvmxdIzc $81/A430 29 03 00 AND #$0003 A:0303 X:0026 Y:0004 P:envmxdIzc $81/A433 EB XBA A:0003 X:0026 Y:0004 P:envmxdIzc $81/A434 4A LSR A A:0300 X:0026 Y:0004 P:envmxdIZc $81/A435 4A LSR A A:0180 X:0026 Y:0004 P:envmxdIzc $81/A436 05 00 ORA $00 [$00:0000] A:00C0 X:0026 Y:0004 P:envmxdIzc $81/A438 85 00 STA $00 [$00:0000] A:00CE X:0026 Y:0004 P:envmxdIzc $81/A43A C8 INY A:00CE X:0026 Y:0004 P:envmxdIzc $81/A43B B7 AC LDA [$AC],y[$88:8E41] A:00CE X:0026 Y:0005 P:envmxdIzc $81/A43D 29 03 00 AND #$0003 A:3403 X:0026 Y:0005 P:envmxdIzc $81/A440 EB XBA A:0003 X:0026 Y:0005 P:envmxdIzc $81/A441 05 00 ORA $00 [$00:0000] A:0300 X:0026 Y:0005 P:envmxdIZc $81/A443 85 00 STA $00 [$00:0000] A:03CE X:0026 Y:0005 P:envmxdIzc $81/A445 C8 INY A:03CE X:0026 Y:0005 P:envmxdIzc $81/A446 5A PHY A:03CE X:0026 Y:0006 P:envmxdIzc $81/A447 A0 01 00 LDY #$0001 ; Play Sound Effect which is in A $81/A44A A5 00 LDA $00 $81/A44C 22 1C 5C 10 JSL $105C1C $81/A450 7A PLY A:CE03 X:0026 Y:0001 P:envmxdIzc $81/A451 98 TYA A:CE03 X:0026 Y:0006 P:envmxdIzc $81/A452 18 CLC A:0006 X:0026 Y:0006 P:envmxdIzc $81/A453 65 AC ADC $AC [$00:00AC] A:0006 X:0026 Y:0006 P:envmxdIzc $81/A455 85 AC STA $AC [$00:00AC] A:8E42 X:0026 Y:0006 P:eNvmxdIzc $81/A457 60 RTS A:8E42 X:0026 Y:0006 P:eNvmxdIzc
$81/A498 ?
$81/A498 A0 01 00 LDY #$0001 A:A497 X:0026 Y:0004 P:envmxdIzc $81/A49B B7 AC LDA [$AC],y[$94:C054] A:A497 X:0026 Y:0001 P:envmxdIzc $81/A49D 29 FF 00 AND #$00FF A:F300 X:0026 Y:0001 P:eNvmxdIzc $81/A4A0 F0 07 BEQ $07 [$A4A9] A:0 X:0026 Y:0001 P:envmxdIZc $81/A4A9 A9 FF 00 LDA #$00FF A:0 X:0026 Y:0001 P:envmxdIZc $81/A4AC 85 00 STA $00 [$00:0000] A:00FF X:0026 Y:0001 P:envmxdIzc $81/A4AE C8 INY A:00FF X:0026 Y:0001 P:envmxdIzc $81/A4AF B7 AC LDA [$AC],y[$94:C055] A:00FF X:0026 Y:0002 P:envmxdIzc $81/A4B1 85 23 STA $23 [$00:0023] A:FFF3 X:0026 Y:0002 P:eNvmxdIzc $81/A4B3 C8 INY A:FFF3 X:0026 Y:0002 P:eNvmxdIzc $81/A4B4 B7 AC LDA [$AC],y[$94:C056] A:FFF3 X:0026 Y:0003 P:envmxdIzc $81/A4B6 85 24 STA $24 [$00:0024] A:9FFF X:0026 Y:0003 P:eNvmxdIzc $81/A4B8 A7 23 LDA [$23] [$9F:FFF3] A:9FFF X:0026 Y:0003 P:eNvmxdIzc $81/A4BA 85 20 STA $20 [$00:0020] A:8000 X:0026 Y:0003 P:eNvmxdIzc $81/A4BC E6 23 INC $23 [$00:0023] A:8000 X:0026 Y:0003 P:eNvmxdIzc $81/A4BE A7 23 LDA [$23] [$9F:FFF4] A:8000 X:0026 Y:0003 P:eNvmxdIzc $81/A4C0 85 21 STA $21 [$00:0021] A:9F80 X:0026 Y:0003 P:eNvmxdIzc $81/A4C2 5A PHY A:9F80 X:0026 Y:0003 P:eNvmxdIzc $81/A4C3 A0 00 00 LDY #$0000 A:9F80 X:0026 Y:0003 P:eNvmxdIzc $81/A4C6 A5 00 LDA $00 [$00:0000] A:9F80 X:0026 Y:0 P:envmxdIZc $81/A4C8 22 1C 5C 10 JSL $105C1C[$10:5C1C] A:00FF X:0026 Y:0 P:envmxdIzc $81/A4CC 7A PLY A:00FF X:0026 Y:0003 P:envmxdIzc $81/A4CD C8 INY A:00FF X:0026 Y:0003 P:envmxdIzc $81/A4CE C8 INY A:00FF X:0026 Y:0004 P:envmxdIzc $81/A4CF 98 TYA A:00FF X:0026 Y:0005 P:envmxdIzc $81/A4D0 18 CLC A:0005 X:0026 Y:0005 P:envmxdIzc $81/A4D1 65 AC ADC $AC [$00:00AC] A:0005 X:0026 Y:0005 P:envmxdIzc $81/A4D3 85 AC STA $AC [$00:00AC] A:C058 X:0026 Y:0005 P:eNvmxdIzc $81/A4D5 60 RTS A:C058 X:0026 Y:0005 P:eNvmxdIzc
$81/A508 ?
$81/A508 DA PHX A:C042 X:0026 Y:0004 P:eNvmxdIzc $81/A509 C2 20 REP #$20 A:C042 X:0026 Y:0004 P:eNvmxdIzc $81/A50B A7 AC LDA [$AC] [$94:C042] A:C042 X:0026 Y:0004 P:eNvmxdIzc $81/A50D D0 04 BNE $04 [$A513] A:98D9 X:0026 Y:0004 P:eNvmxdIzc $81/A513 8D 27 0C STA $0C27 [$81:0C27] A:98D9 X:0026 Y:0004 P:eNvmxdIzc $81/A516 E6 AC INC $AC [$00:00AC] A:98D9 X:0026 Y:0004 P:eNvmxdIzc $81/A518 E6 AC INC $AC [$00:00AC] A:98D9 X:0026 Y:0004 P:eNvmxdIzc $81/A51A E2 20 SEP #$20 A:98D9 X:0026 Y:0004 P:eNvmxdIzc $81/A51C A7 AC LDA [$AC] [$94:C044] A:98D9 X:0026 Y:0004 P:eNvMxdIzc $81/A51E D0 04 BNE $04 [$A524] A:9894 X:0026 Y:0004 P:eNvMxdIzc $81/A524 8D 29 0C STA $0C29 [$81:0C29] A:9894 X:0026 Y:0004 P:eNvMxdIzc $81/A527 C2 20 REP #$20 A:9894 X:0026 Y:0004 P:eNvMxdIzc $81/A529 E6 AC INC $AC [$00:00AC] A:9894 X:0026 Y:0004 P:eNvmxdIzc $81/A52B A7 AC LDA [$AC] [$94:C045] A:9894 X:0026 Y:0004 P:eNvmxdIzc $81/A52D D0 04 BNE $04 [$A533] A:99E1 X:0026 Y:0004 P:eNvmxdIzc $81/A533 8D 2A 0C STA $0C2A [$81:0C2A] A:99E1 X:0026 Y:0004 P:eNvmxdIzc $81/A536 E6 AC INC $AC [$00:00AC] A:99E1 X:0026 Y:0004 P:eNvmxdIzc $81/A538 E6 AC INC $AC [$00:00AC] A:99E1 X:0026 Y:0004 P:eNvmxdIzc $81/A53A E2 20 SEP #$20 A:99E1 X:0026 Y:0004 P:eNvmxdIzc $81/A53C A7 AC LDA [$AC] [$94:C047] A:99E1 X:0026 Y:0004 P:eNvMxdIzc $81/A53E D0 04 BNE $04 [$A544] A:9994 X:0026 Y:0004 P:eNvMxdIzc $81/A544 8D 2C 0C STA $0C2C [$81:0C2C] A:9994 X:0026 Y:0004 P:eNvMxdIzc $81/A547 C2 20 REP #$20 A:9994 X:0026 Y:0004 P:eNvMxdIzc $81/A549 E6 AC INC $AC [$00:00AC] A:9994 X:0026 Y:0004 P:eNvmxdIzc $81/A54B 22 81 B3 80 JSL $80B381[$80:B381] A:9994 X:0026 Y:0004 P:eNvmxdIzc $81/A54F FA PLX A:97D9 X:0001 Y:0004 P:eNvmxdIzc $81/A550 6B RTL A:97D9 X:0026 Y:0004 P:envmxdIzc
$81/A551 ? (Executed when talking to the aerial building)
$81/A551 DA PHX A:9DB5 X:0024 Y:0004 P:eNvmxdIzc $81/A552 A7 AC LDA [$AC] [$88:9DB5] A:9DB5 X:0024 Y:0004 P:eNvmxdIzc $81/A554 48 PHA A:0000 X:0024 Y:0004 P:envmxdIZc $81/A555 E6 AC INC $AC [$00:00AC] A:0000 X:0024 Y:0004 P:envmxdIZc $81/A557 E6 AC INC $AC [$00:00AC] A:0000 X:0024 Y:0004 P:eNvmxdIzc $81/A559 A7 AC LDA [$AC] [$88:9DB7] A:0000 X:0024 Y:0004 P:eNvmxdIzc $81/A55B AA TAX A:1002 X:0024 Y:0004 P:envmxdIzc $81/A55C E6 AC INC $AC [$00:00AC] A:1002 X:1002 Y:0004 P:envmxdIzc $81/A55E E6 AC INC $AC [$00:00AC] A:1002 X:1002 Y:0004 P:eNvmxdIzc $81/A560 A7 AC LDA [$AC] [$88:9DB9] A:1002 X:1002 Y:0004 P:eNvmxdIzc $81/A562 A8 TAY A:020C X:1002 Y:0004 P:envmxdIzc $81/A563 E6 AC INC $AC [$00:00AC] A:020C X:1002 Y:020C P:envmxdIzc $81/A565 E6 AC INC $AC [$00:00AC] A:020C X:1002 Y:020C P:eNvmxdIzc $81/A567 68 PLA A:020C X:1002 Y:020C P:eNvmxdIzc $81/A568 22 BF B4 80 JSL $80B4BF[$80:B4BF] A:0000 X:1002 Y:020C P:envmxdIZc $81/A56C FA PLX A:00C8 X:0000 Y:020C P:envmxdIzc $81/A56D 6B RTL A:00C8 X:0024 Y:020C P:envmxdIzc
$81/A57B ?
$81/A57B DA PHX A:A567 X:0026 Y:0004 P:eNvmxdIzc $81/A57C A7 AC LDA [$AC] [$94:A567] A:A567 X:0026 Y:0004 P:eNvmxdIzc $81/A57E E6 AC INC $AC [$00:00AC] A:0 X:0026 Y:0004 P:envmxdIZc $81/A580 E6 AC INC $AC [$00:00AC] A:0 X:0026 Y:0004 P:eNvmxdIzc $81/A582 0A ASL A A:0 X:0026 Y:0004 P:eNvmxdIzc $81/A583 AA TAX A:0 X:0026 Y:0004 P:envmxdIZc $81/A584 A7 AC LDA [$AC] [$94:A569] A:0 X:0 Y:0004 P:envmxdIZc $81/A586 E6 AC INC $AC [$00:00AC] A:0001 X:0 Y:0004 P:envmxdIzc $81/A588 E6 AC INC $AC [$00:00AC] A:0001 X:0 Y:0004 P:eNvmxdIzc $81/A58A 29 FF 00 AND #$00FF A:0001 X:0 Y:0004 P:eNvmxdIzc $81/A58D C9 FF 00 CMP #$00FF A:0001 X:0 Y:0004 P:envmxdIzc $81/A590 F0 03 BEQ $03 [$A595] A:0001 X:0 Y:0004 P:eNvmxdIzc $81/A592 29 03 00 AND #$0003 A:0001 X:0 Y:0004 P:eNvmxdIzc $81/A595 9D 7A 0C STA $0C7A,x[$81:0C7A] A:0001 X:0 Y:0004 P:envmxdIzc $81/A598 FA PLX A:0001 X:0 Y:0004 P:envmxdIzc $81/A599 6B RTL A:0001 X:0026 Y:0004 P:envmxdIzc
$81/A59A ?
$81/A59A DA PHX A:A56F X:0026 Y:0004 P:eNvmxdIzc $81/A59B A7 AC LDA [$AC] [$94:A56F] A:A56F X:0026 Y:0004 P:eNvmxdIzc $81/A59D E6 AC INC $AC [$00:00AC] A:0 X:0026 Y:0004 P:envmxdIZc $81/A59F E6 AC INC $AC [$00:00AC] A:0 X:0026 Y:0004 P:eNvmxdIzc $81/A5A1 0A ASL A A:0 X:0026 Y:0004 P:eNvmxdIzc $81/A5A2 AA TAX A:0 X:0026 Y:0004 P:envmxdIZc $81/A5A3 A7 AC LDA [$AC] [$94:A571] A:0 X:0 Y:0004 P:envmxdIZc $81/A5A5 29 03 00 AND #$0003 A:0103 X:0 Y:0004 P:envmxdIzc $81/A5A8 9D 86 0C STA $0C86,x[$81:0C86] A:0003 X:0 Y:0004 P:envmxdIzc $81/A5AB E6 AC INC $AC [$00:00AC] A:0003 X:0 Y:0004 P:envmxdIzc $81/A5AD A7 AC LDA [$AC] [$94:A572] A:0003 X:0 Y:0004 P:eNvmxdIzc $81/A5AF 29 03 00 AND #$0003 A:0701 X:0 Y:0004 P:envmxdIzc $81/A5B2 9D 92 0C STA $0C92,x[$81:0C92] A:0001 X:0 Y:0004 P:envmxdIzc $81/A5B5 E6 AC INC $AC [$00:00AC] A:0001 X:0 Y:0004 P:envmxdIzc $81/A5B7 A7 AC LDA [$AC] [$94:A573] A:0001 X:0 Y:0004 P:eNvmxdIzc $81/A5B9 29 07 00 AND #$0007 A:6007 X:0 Y:0004 P:envmxdIzc $81/A5BC 9D 9E 0C STA $0C9E,x[$81:0C9E] A:0007 X:0 Y:0004 P:envmxdIzc $81/A5BF E6 AC INC $AC [$00:00AC] A:0007 X:0 Y:0004 P:envmxdIzc $81/A5C1 FA PLX A:0007 X:0 Y:0004 P:eNvmxdIzc $81/A5C2 6B RTL A:0007 X:0026 Y:0004 P:envmxdIzc
$81/A5C3 ? (Executed when talking to the aerial building)
$81/A5C3 C2 30 REP #$30 A:9DBF X:0024 Y:0004 P:eNvmxdIzc $81/A5C5 DA PHX A:9DBF X:0024 Y:0004 P:eNvmxdIzc $81/A5C6 A7 AC LDA [$AC] [$88:9DBF] A:9DBF X:0024 Y:0004 P:eNvmxdIzc $81/A5C8 E6 AC INC $AC [$00:00AC] A:0000 X:0024 Y:0004 P:envmxdIZc $81/A5CA E6 AC INC $AC [$00:00AC] A:0000 X:0024 Y:0004 P:eNvmxdIzc $81/A5CC 22 69 B5 80 JSL $80B569[$80:B569] A:0000 X:0024 Y:0004 P:eNvmxdIzc $81/A5D0 FA PLX A:0001 X:049C Y:FFFF P:eNvmxdIzc $81/A5D1 6B RTL A:0001 X:0024 Y:FFFF P:envmxdIzc
$81/A5D2 ?
$81/A5D2 DA PHX ; Buffer X on stack $81/A5D3 A7 AC LDA [$AC] ; Load two Double Bytes from Data Address - put first in A, second in X $81/A5D5 E6 AC INC $AC $81/A5D7 E6 AC INC $AC $81/A5D9 48 PHA $81/A5DA A7 AC LDA [$AC] $81/A5DC AA TAX $81/A5DD 68 PLA $81/A5DE E6 AC INC $AC $81/A5E0 E6 AC INC $AC $81/A5E2 22 8D B6 80 JSL $80B68D[$80:B68D] A:0 X:0002 Y:0004 P:eNvmxdIzc $81/A5E6 AD 1B 0C LDA $0C1B ; Check if Flag is set $81/A5E9 D0 10 BNE $10 ; [$A5FB] Branch if it is $81/A5EB A5 AC LDA $AC [$00:00AC] A:0 X:0 Y:FFFF P:envmxdIZc $81/A5ED 38 SEC A:A596 X:0 Y:FFFF P:eNvmxdIzc $81/A5EE E9 08 00 SBC #$0008 A:A596 X:0 Y:FFFF P:eNvmxdIzC $81/A5F1 85 AC STA $AC [$00:00AC] A:A58E X:0 Y:FFFF P:eNvmxdIzC $81/A5F3 A9 01 00 LDA #$0001 ; Set "No Repitition" flag $81/A5F6 8D B6 0C STA $0CB6 $81/A5F9 FA PLX ; Restore X $81/A5FA 6B RTL $81/A5FB 9C 1B 0C STZ $0C1B ; Clear Flag $81/A5FE 9C B6 0C STZ $0CB6 ; Clear "No Repitition" flag - try again? $81/A601 FA PLX ; Restore X $81/A602 6B RTL
$81/A603 ?
$81/A603 DA PHX ; Buffer X on stack $81/A604 A7 AC LDA [$AC] ; Load two Double Bytes from Data Address - put first in A, second in X $81/A606 E6 AC INC $AC $81/A608 E6 AC INC $AC $81/A60A 48 PHA $81/A60B A7 AC LDA [$AC] $81/A60D AA TAX $81/A60E 68 PLA $81/A60F E6 AC INC $AC $81/A611 E6 AC INC $AC $81/A613 22 B4 B6 80 JSL $80B6B4[$80:B6B4] A:0 X:0002 Y:0004 P:eNvmxdIzc $81/A617 AD 1B 0C LDA $0C1B [$81:0C1B] A:0007 X:0 Y:FFFF P:envmxdIzc $81/A61A D0 10 BNE $10 [$A62C] A:0 X:0 Y:FFFF P:envmxdIZc $81/A61C A5 AC LDA $AC [$00:00AC] A:0 X:0 Y:FFFF P:envmxdIZc $81/A61E 38 SEC A:A5E1 X:0 Y:FFFF P:eNvmxdIzc $81/A61F E9 08 00 SBC #$0008 A:A5E1 X:0 Y:FFFF P:eNvmxdIzC $81/A622 85 AC STA $AC [$00:00AC] A:A5D9 X:0 Y:FFFF P:eNvmxdIzC $81/A624 A9 01 00 LDA #$0001 A:A5D9 X:0 Y:FFFF P:eNvmxdIzC $81/A627 8D B6 0C STA $0CB6 [$81:0CB6] A:0001 X:0 Y:FFFF P:envmxdIzC $81/A62A FA PLX A:0001 X:0 Y:FFFF P:envmxdIzC $81/A62B 6B RTL A:0001 X:0026 Y:FFFF P:envmxdIzC
$81/A62C ?
$81/A62C 9C 1B 0C STZ $0C1B [$81:0C1B] A:0001 X:0 Y:02C2 P:envmxdIzc $81/A62F 9C B6 0C STZ $0CB6 [$81:0CB6] A:0001 X:0 Y:02C2 P:envmxdIzc $81/A632 FA PLX A:0001 X:0 Y:02C2 P:envmxdIzc $81/A633 6B RTL A:0001 X:0026 Y:02C2 P:envmxdIzc
$81/A634 ?
Load Token Data (which is a 24-bit address to a palette), set it up CGRAM buffer as first background palette and set CGRAM update flag.
$81/A634 08 PHP ; Buffer Flag Register value on stack $81/A635 C2 20 REP #$20 ; A = 16-bit $81/A637 A7 AC LDA [$AC] [$94:C04C] A:C04C X:0026 Y:0004 P:eNvmxdIzc $81/A639 D0 04 BNE $04 [$A63F] A:A531 X:0026 Y:0004 P:eNvmxdIzc
code is missing here
$81/A63F 8D 2D 0C STA $0C2D [$81:0C2D] A:A531 X:0026 Y:0004 P:eNvmxdIzc $81/A642 E6 AC INC $AC ; Increment (Token) Data Load Address twice after Loading a Double-Byte $81/A644 E6 AC INC $AC $81/A646 E2 20 SEP #$20 ; A = 8-bit $81/A648 A7 AC LDA [$AC] [$94:C04E] A:A531 X:0026 Y:0004 P:eNvMxdIzc $81/A64A D0 04 BNE $04 [$A650] A:A594 X:0026 Y:0004 P:eNvMxdIzc
code is missing here
$81/A650 8D 2F 0C STA $0C2F [$81:0C2F] A:A594 X:0026 Y:0004 P:eNvMxdIzc $81/A653 C2 20 REP #$20 ; A = 16-bit $81/A655 E6 AC INC $AC ; Increment (Token) Data Load Address after Loading $81/A657 22 3D B9 80 JSL $80B93D ; Set new Palette 0 in CGRAM Buffer $81/A65B 28 PLP ; Restore Flag Register value $81/A65C 6B RTL
$81/A65D ?
$81/A65D C2 30 REP #$30 ; A/X/Y = 16-bit $81/A65F DA PHX ; Buffer X on stack $81/A660 A0 00 00 LDY #$0000 A:AA6E X:001E Y:0004 P:eNvmxdIzc $81/A663 20 5F BB JSR $BB5F [$81:BB5F] A:AA6E X:001E Y:0 P:envmxdIZc $81/A666 29 FF 00 AND #$00FF A:0006 X:001E Y:0003 P:envmxdIzc $81/A669 85 00 STA $00 [$00:0000] A:0006 X:001E Y:0003 P:envmxdIzc $81/A66B 20 5F BB JSR $BB5F [$81:BB5F] A:0006 X:001E Y:0003 P:envmxdIzc $81/A66E 29 FF 00 AND #$00FF A:0003 X:001E Y:0006 P:envmxdIzc $81/A671 EB XBA A:0003 X:001E Y:0006 P:envmxdIzc $81/A672 18 CLC A:0300 X:001E Y:0006 P:envmxdIZc $81/A673 65 00 ADC $00 [$00:0000] A:0300 X:001E Y:0006 P:envmxdIZc $81/A675 85 00 STA $00 [$00:0000] A:0306 X:001E Y:0006 P:envmxdIzc $81/A677 20 5F BB JSR $BB5F [$81:BB5F] A:0306 X:001E Y:0006 P:envmxdIzc $81/A67A 85 02 STA $02 [$00:0002] A:0002 X:001E Y:0009 P:envmxdIzc $81/A67C 20 5F BB JSR $BB5F [$81:BB5F] A:0002 X:001E Y:0009 P:envmxdIzc $81/A67F A6 00 LDX $00 [$00:0000] A:0003 X:001E Y:000C P:envmxdIzc $81/A681 A4 02 LDY $02 [$00:0002] A:0003 X:0306 Y:000C P:envmxdIzc $81/A683 48 PHA A:0003 X:0306 Y:0002 P:envmxdIzc $81/A684 A5 AC LDA $AC [$00:00AC] A:0003 X:0306 Y:0002 P:envmxdIzc $81/A686 18 CLC A:AA6E X:0306 Y:0002 P:eNvmxdIzc $81/A687 69 0C 00 ADC #$000C A:AA6E X:0306 Y:0002 P:eNvmxdIzc $81/A68A 85 AC STA $AC [$00:00AC] A:AA7A X:0306 Y:0002 P:eNvmxdIzc $81/A68C 68 PLA A:AA7A X:0306 Y:0002 P:eNvmxdIzc $81/A68D 22 65 B9 80 JSL $80B965[$80:B965] A:0003 X:0306 Y:0002 P:envmxdIzc $81/A691 FA PLX ; Restore X $81/A692 6B RTL
$81/A693 ?
$81/A693 A0 00 00 LDY #$0000 A:8AEC X:0026 Y:0004 P:eNvmxdIzc $81/A696 20 EA BD JSR $BDEA [$81:BDEA] A:8AEC X:0026 Y:0 P:envmxdIZc $81/A699 85 00 STA $00 [$00:0000] A:1A00 X:0026 Y:0003 P:envmxdIzc $81/A69B E6 AC INC $AC [$00:00AC] A:1A00 X:0026 Y:0003 P:envmxdIzc $81/A69D E6 AC INC $AC [$00:00AC] A:1A00 X:0026 Y:0003 P:eNvmxdIzc $81/A69F E6 AC INC $AC [$00:00AC] A:1A00 X:0026 Y:0003 P:eNvmxdIzc $81/A6A1 A7 AC LDA [$AC] [$94:8AEF] A:1A00 X:0026 Y:0003 P:eNvmxdIzc $81/A6A3 85 20 STA $20 [$00:0020] A:022B X:0026 Y:0003 P:envmxdIzc $81/A6A5 E6 AC INC $AC [$00:00AC] A:022B X:0026 Y:0003 P:envmxdIzc $81/A6A7 A7 AC LDA [$AC] [$94:8AF0] A:022B X:0026 Y:0003 P:eNvmxdIzc $81/A6A9 85 21 STA $21 [$00:0021] A:0002 X:0026 Y:0003 P:envmxdIzc $81/A6AB E6 AC INC $AC [$00:00AC] A:0002 X:0026 Y:0003 P:envmxdIzc $81/A6AD E6 AC INC $AC [$00:00AC] A:0002 X:0026 Y:0003 P:eNvmxdIzc $81/A6AF A7 20 LDA [$20] [$00:022B] A:0002 X:0026 Y:0003 P:eNvmxdIzc $81/A6B1 92 00 STA ($00) [$81:1A00] A:0 X:0026 Y:0003 P:envmxdIZc $81/A6B3 6B RTL
$81/A6B4 ? (Executed when talking to the aerial building)
$81/A6B4 A0 00 00 LDY #$0000 A:9F45 X:0024 Y:0004 P:eNvmxdIzc $81/A6B7 20 EA BD JSR $BDEA [$81:BDEA] A:9F45 X:0024 Y:0000 P:envmxdIZc $81/A6BA 85 00 STA $00 [$00:0000] A:1B3E X:0024 Y:0003 P:envmxdIzc $81/A6BC E6 AC INC $AC [$00:00AC] A:1B3E X:0024 Y:0003 P:envmxdIzc $81/A6BE E6 AC INC $AC [$00:00AC] A:1B3E X:0024 Y:0003 P:eNvmxdIzc $81/A6C0 E6 AC INC $AC [$00:00AC] A:1B3E X:0024 Y:0003 P:eNvmxdIzc $81/A6C2 A7 AC LDA [$AC] [$88:9F48] A:1B3E X:0024 Y:0003 P:eNvmxdIzc $81/A6C4 85 20 STA $20 [$00:0020] A:0B5E X:0024 Y:0003 P:envmxdIzc $81/A6C6 E6 AC INC $AC [$00:00AC] A:0B5E X:0024 Y:0003 P:envmxdIzc $81/A6C8 A7 AC LDA [$AC] [$88:9F49] A:0B5E X:0024 Y:0003 P:eNvmxdIzc $81/A6CA 85 21 STA $21 [$00:0021] A:000B X:0024 Y:0003 P:envmxdIzc $81/A6CC E6 AC INC $AC [$00:00AC] A:000B X:0024 Y:0003 P:envmxdIzc $81/A6CE E6 AC INC $AC [$00:00AC] A:000B X:0024 Y:0003 P:eNvmxdIzc $81/A6D0 B2 00 LDA ($00) [$81:1B3E] A:000B X:0024 Y:0003 P:eNvmxdIzc $81/A6D2 87 20 STA [$20] [$00:0B5E] A:0000 X:0024 Y:0003 P:envmxdIZc $81/A6D4 6B RTL A:0000 X:0024 Y:0003 P:envmxdIZc
$81/AA1D ?
$81/AA1D AD B6 0C LDA $0CB6 [$81:0CB6] A:AA1C X:0026 Y:0000 P:envmxdIzc $81/AA20 F0 06 BEQ $06 [$AA28] A:0000 X:0026 Y:0000 P:envmxdIZc $81/AA22 3A DEC A A:0002 X:0026 Y:0000 P:envmxdIzc $81/AA23 F0 03 BEQ $03 [$AA28] A:0001 X:0026 Y:0000 P:envmxdIzc $81/AA25 4C 58 AA JMP $AA58 [$81:AA58] A:0001 X:0026 Y:0000 P:envmxdIzc $81/AA28 AD A5 13 LDA $13A5 [$81:13A5] A:0000 X:0026 Y:0000 P:envmxdIZc $81/AA2B D0 24 BNE $24 [$AA51] A:0000 X:0026 Y:0000 P:envmxdIZc $81/AA2D 9C EE 0C STZ $0CEE [$81:0CEE] A:0000 X:0026 Y:0000 P:envmxdIZc $81/AA30 A0 02 00 LDY #$0002 A:0000 X:0026 Y:0000 P:envmxdIZc $81/AA33 B7 AC LDA [$AC],y[$94:810A] A:0000 X:0026 Y:0002 P:envmxdIzc $81/AA35 85 21 STA $21 [$00:0021] A:93AC X:0026 Y:0002 P:eNvmxdIzc $81/AA37 A0 01 00 LDY #$0001 A:93AC X:0026 Y:0002 P:eNvmxdIzc $81/AA3A B7 AC LDA [$AC],y[$94:8109] A:93AC X:0026 Y:0001 P:envmxdIzc $81/AA3C 85 20 STA $20 [$00:0020] A:AC8F X:0026 Y:0001 P:eNvmxdIzc $81/AA3E 20 96 BA JSR $BA96 [$81:BA96] A:AC8F X:0026 Y:0001 P:eNvmxdIzc $81/AA41 22 C3 C8 81 JSL $81C8C3[$81:C8C3] A:0093 X:0026 Y:0001 P:envmxdIzc $81/AA45 AD A5 13 LDA $13A5 [$81:13A5] A:0000 X:0026 Y:0001 P:envmxdIzc $81/AA48 F0 17 BEQ $17 [$AA61] A:0001 X:0026 Y:0001 P:envmxdIzc $81/AA4A A9 02 00 LDA #$0002 A:0001 X:0026 Y:0001 P:envmxdIzc $81/AA4D 8D B6 0C STA $0CB6 [$81:0CB6] A:0002 X:0026 Y:0001 P:envmxdIzc $81/AA50 60 RTS A:0002 X:0026 Y:0001 P:envmxdIzc
code is missing here
$81/AA58 AD A3 13 LDA $13A3 [$81:13A3] A:0001 X:0026 Y:0000 P:envmxdIzc $81/AA5B C9 02 00 CMP #$0002 A:0001 X:0026 Y:0000 P:envmxdIzc $81/AA5E F0 01 BEQ $01 [$AA61] A:0001 X:0026 Y:0000 P:eNvmxdIzc $81/AA60 60 RTS A:0001 X:0026 Y:0000 P:eNvmxdIzc $81/AA61 9C B6 0C STZ $0CB6 ; Clear "No-repitition flag" (= settings for a repitition) $81/AA64 9C A3 13 STZ $13A3 [$81:13A3] A:0002 X:0026 Y:0000 P:envmxdIZC $81/AA67 9C A5 13 STZ $13A5 [$81:13A5] A:0002 X:0026 Y:0000 P:envmxdIZC $81/AA6A A5 AC LDA $AC ; Increment Token Data Load address by four $81/AA6C 18 CLC $81/AA6D 69 04 00 ADC #$0004 $81/AA70 85 AC STA $AC $81/AA72 60 RTS
$81/AAA9 Set Flag for every Used Token Vector Index Slot (Executed when talking to the aerial building)
$81/AAA9 86 00 STX $00 ; Store Number of Slot to leave out in $00 $81/AAAB A0 26 00 LDY #$0026 ; Set up Slot Load Index/Loop Counter $81/AAAE C4 00 CPY $00 ; Check if Slot Number is the one that should be left out $81/AAB0 F0 0B BEQ $0B ; [$AABD] Do next Slot if it is $81/AAB2 BD E0 17 LDA $17E0,x ; Check if Slot for Token Vector Index is empty $81/AAB5 F0 06 BEQ $06 ; [$AABD] Branch and do next Slot if it is $81/AAB7 A9 01 00 LDA #$0001 A:886C X:0024 Y:0026 P:eNvmxdIzC $81/AABA 99 7A 11 STA $117A,y[$81:11A0] A:0001 X:0024 Y:0026 P:envmxdIzC $81/AABD 88 DEY ; Decrement Slot Load Index twice so it points to the next one $81/AABE 88 DEY $81/AABF 10 ED BPL $ED ; [$AAAE] Do next Slot until all are done $81/AAC1 A5 AC LDA $AC ; Increment (Token) Data Load Address $81/AAC3 18 CLC $81/AAC4 69 01 00 ADC #$0001 $81/AAC7 85 AC STA $AC $81/AAC9 60 RTS
$81/AACA TOKEN VECTOR: Clear Flag for every Used Token Vector Index Slot
$81/AACA 86 00 STX $00 ; Store Number of Slot to leave out in $00 $81/AACC A0 26 00 LDY #$0026 ; Set up Slot Load Index/Loop Counter $81/AACF C4 00 CPY $00 ; Check if Slot Number is the one that should be left out $81/AAD1 F0 0B BEQ $0B ; [$AADE] Do next Slot if it is $81/AAD3 BD E0 17 LDA $17E0,x ; Check if Slot for Token Vector Index is empty $81/AAD6 F0 06 BEQ $06 ; [$AADE] Branch and do next Slot if it is $81/AAD8 A9 00 00 LDA #$0000 A:88DE X:0024 Y:0026 P:eNvmxdIzC $81/AADB 99 7A 11 STA $117A,y[$81:11A0] A:0000 X:0024 Y:0026 P:envmxdIZC $81/AADE 88 DEY ; Decrement Slot Load Index twice so it points to the next one $81/AADF 88 DEY $81/AAE0 10 ED BPL $ED ; [$AACF] Do next Slot until all are done $81/AAE2 A5 AC LDA $AC ; Increment (Token) Data Load Address $81/AAE4 18 CLC $81/AAE5 69 01 00 ADC #$0001 $81/AAE8 85 AC STA $AC $81/AAEA 60 RTS
$81/AD9D TOKEN VECTOR #$23: ? (Remove Token Data Load Address)
$81/AD9D 64 AC STZ $AC ; Clear Address part of the Token Data Load Address $81/AD9F 64 AD STZ $AD $81/ADA1 A9 01 00 LDA #$0001 ; Set "No Repition flag" $81/ADA4 8D B6 0C STA $0CB6 $81/ADA7 20 2A BA JSR $BA2A [$81:BA2A] A:0001 X:0024 Y:1000 P:envmxdIzc $81/ADAA 60 RTS
$81/ADAB TOKEN VECTOR #$40: ?
$81/ADAB DA PHX A:ADAA X:0026 Y:021C P:envmxdIzc $81/ADAC 86 00 STX $00 [$00:0000] A:ADAA X:0026 Y:021C P:envmxdIzc $81/ADAE A0 01 00 LDY #$0001 A:ADAA X:0026 Y:021C P:envmxdIzc $81/ADB1 20 5F BB JSR $BB5F [$81:BB5F] A:ADAA X:0026 Y:0001 P:envmxdIzc $81/ADB4 85 02 STA $02 [$00:0002] A:8000 X:0026 Y:0004 P:envmxdIzc $81/ADB6 A2 26 00 LDX #$0026 A:8000 X:0026 Y:0004 P:envmxdIzc $81/ADB9 A5 02 LDA $02 [$00:0002] A:8000 X:0026 Y:0004 P:envmxdIzc $81/ADBB F0 07 BEQ $07 [$ADC4] A:8000 X:0026 Y:0004 P:eNvmxdIzc $81/ADBD BD 40 17 LDA $1740,x[$81:1766] A:8000 X:0026 Y:0004 P:eNvmxdIzc $81/ADC0 25 02 AND $02 [$00:0002] A:0 X:0026 Y:0004 P:envmxdIZc $81/ADC2 F0 03 BEQ $03 [$ADC7] A:0 X:0026 Y:0004 P:envmxdIZc $81/ADC4 20 2A BA JSR $BA2A [$81:BA2A] A:8000 X:0020 Y:0004 P:eNvmxdIzc $81/ADC7 CA DEX A:0 X:0026 Y:0004 P:envmxdIZc $81/ADC8 CA DEX A:0 X:0025 Y:0004 P:envmxdIzc $81/ADC9 10 EE BPL $EE [$ADB9] A:0 X:0024 Y:0004 P:envmxdIzc $81/ADCB FA PLX A:0 X:FFFE Y:0004 P:eNvmxdIzc $81/ADCC A5 AC LDA $AC [$00:00AC] A:0 X:0026 Y:0004 P:envmxdIzc $81/ADCE 18 CLC A:A57E X:0026 Y:0004 P:eNvmxdIzc $81/ADCF 69 04 00 ADC #$0004 A:A57E X:0026 Y:0004 P:eNvmxdIzc $81/ADD2 85 AC STA $AC [$00:00AC] A:A582 X:0026 Y:0004 P:eNvmxdIzc $81/ADD4 60 RTS A:A582 X:0026 Y:0004 P:eNvmxdIzc
$81/ADEF TOKEN VECTOR #$69: ?
$81/ADEF DA PHX A:ADEE X:0026 Y:0 P:envmxdIzc $81/ADF0 86 00 STX $00 [$00:0000] A:ADEE X:0026 Y:0 P:envmxdIzc $81/ADF2 A2 26 00 LDX #$0026 A:ADEE X:0026 Y:0 P:envmxdIzc $81/ADF5 E4 00 CPX $00 [$00:0000] A:ADEE X:0026 Y:0 P:envmxdIzc $81/ADF7 F0 03 BEQ $03 [$ADFC] A:ADEE X:0026 Y:0 P:envmxdIZC
code is missing here
$81/ADFC CA DEX A:ADEE X:0026 Y:0 P:envmxdIZC $81/ADFD CA DEX A:ADEE X:0025 Y:0 P:envmxdIzC $81/ADFE 10 F5 BPL $F5 [$ADF5] A:ADEE X:0024 Y:0 P:envmxdIzC $81/ADF9 20 2A BA JSR $BA2A [$81:BA2A] A:ADEE X:0024 Y:0 P:eNvmxdIzc
code/data is missing here
$81/AE00 FA PLX A:ADEE X:FFFE Y:FFFF P:eNvmxdIzC $81/AE01 A5 AC LDA $AC [$00:00AC] A:ADEE X:0026 Y:FFFF P:envmxdIzC $81/AE03 18 CLC A:C012 X:0026 Y:FFFF P:eNvmxdIzC $81/AE04 69 01 00 ADC #$0001 A:C012 X:0026 Y:FFFF P:eNvmxdIzc $81/AE07 85 AC STA $AC [$00:00AC] A:C013 X:0026 Y:FFFF P:eNvmxdIzc $81/AE09 60 RTS A:C013 X:0026 Y:FFFF P:eNvmxdIzc
$81/AE37 TOKEN VECTOR #$02: ?
$81/AE37 AD B6 0C LDA $0CB6 [$81:0CB6] A:AE36 X:0026 Y:0001 P:envmxdIzc $81/AE3A F0 0D BEQ $0D [$AE49] A:0 X:0026 Y:0001 P:envmxdIZc $81/AE3C C9 FF FF CMP #$FFFF A:0002 X:0026 Y:0001 P:envmxdIzc $81/AE3F F0 24 BEQ $24 [$AE65] A:0002 X:0026 Y:0001 P:envmxdIzc $81/AE41 CE B6 0C DEC $0CB6 [$81:0CB6] A:0002 X:0026 Y:0001 P:envmxdIzc $81/AE44 D0 1F BNE $1F [$AE65] A:0002 X:0026 Y:0001 P:envmxdIzc $81/AE46 4C 6B AE JMP $AE6B ; Branch if $0CB6 was #$0001 $81/AE49 A0 01 00 LDY #$0001 A:0 X:0026 Y:0001 P:envmxdIZc $81/AE4C B7 AC LDA [$AC],y[$95:82EC] A:0 X:0026 Y:0001 P:envmxdIzc $81/AE4E 8D B6 0C STA $0CB6 [$81:0CB6] A:0002 X:0026 Y:0001 P:envmxdIzc $81/AE51 A0 03 00 LDY #$0003 A:0002 X:0026 Y:0001 P:envmxdIzc $81/AE54 B7 AC LDA [$AC],y[$95:82EE] A:0002 X:0026 Y:0003 P:envmxdIzc $81/AE56 85 20 STA $20 [$00:0020] A:82AD X:0026 Y:0003 P:eNvmxdIzc $81/AE58 A0 04 00 LDY #$0004 A:82AD X:0026 Y:0003 P:eNvmxdIzc $81/AE5B B7 AC LDA [$AC],y[$95:82EF] A:82AD X:0026 Y:0004 P:envmxdIzc $81/AE5D 85 21 STA $21 [$00:0021] A:9582 X:0026 Y:0004 P:eNvmxdIzc $81/AE5F 20 96 BA JSR $BA96 [$81:BA96] A:9582 X:0026 Y:0004 P:eNvmxdIzc $81/AE62 20 1A B9 JSR $B91A ; (Add "Animation Step" to buffer) $81/AE65 AD B6 0C LDA $0CB6 [$81:0CB6] A:9582 X:0026 Y:0004 P:eNvmxdIzc $81/AE68 F0 01 BEQ $01 [$AE6B] A:0002 X:0026 Y:0004 P:envmxdIzc $81/AE6A 60 RTS $81/AE6B A5 AC LDA $AC [$00:00AC] A:0001 X:0026 Y:0001 P:envmxdIZc $81/AE6D 18 CLC A:82EB X:0026 Y:0001 P:eNvmxdIzc $81/AE6E 69 06 00 ADC #$0006 A:82EB X:0026 Y:0001 P:eNvmxdIzc $81/AE71 85 AC STA $AC [$00:00AC] A:82F1 X:0026 Y:0001 P:eNvmxdIzc $81/AE73 60 RTS A:82F1 X:0026 Y:0001 P:eNvmxdIzc
$81/AFA5 TOKEN VECTOR #$20: ?
$81/AFA5 A0 01 00 LDY #$0001 A:AFA4 X:0026 Y:0001 P:envmxdIzc $81/AFA8 B7 AC LDA [$AC],y[$95:82F2] A:AFA4 X:0026 Y:0001 P:envmxdIzc $81/AFAA 85 20 STA $20 [$00:0020] A:82EB X:0026 Y:0001 P:eNvmxdIzc $81/AFAC A0 02 00 LDY #$0002 A:82EB X:0026 Y:0001 P:eNvmxdIzc $81/AFAF B7 AC LDA [$AC],y[$95:82F3] A:82EB X:0026 Y:0002 P:envmxdIzc $81/AFB1 85 21 STA $21 [$00:0021] A:9582 X:0026 Y:0002 P:eNvmxdIzc $81/AFB3 20 96 BA JSR $BA96 [$81:BA96] A:9582 X:0026 Y:0002 P:eNvmxdIzc $81/AFB6 A5 20 LDA $20 [$00:0020] A:0095 X:0026 Y:0002 P:envmxdIzc $81/AFB8 85 AC STA $AC [$00:00AC] A:82EB X:0026 Y:0002 P:eNvmxdIzc $81/AFBA A5 21 LDA $21 [$00:0021] A:82EB X:0026 Y:0002 P:eNvmxdIzc $81/AFBC 85 AD STA $AD [$00:00AD] A:9582 X:0026 Y:0002 P:eNvmxdIzc $81/AFBE 60 RTS A:9582 X:0026 Y:0002 P:eNvmxdIzc
$81/AFBF TOKEN VECTOR #$00: ?
$81/AFBF A0 01 00 LDY #$0001 A:AFBE X:0026 Y:0077 P:envmxdIzc $81/AFC2 B7 AC LDA [$AC],y[$95:82F6] A:AFBE X:0026 Y:0001 P:envmxdIzc $81/AFC4 85 20 STA $20 [$00:0020] A:82EB X:0026 Y:0001 P:eNvmxdIzc $81/AFC6 A0 02 00 LDY #$0002 A:82EB X:0026 Y:0001 P:eNvmxdIzc $81/AFC9 B7 AC LDA [$AC],y[$95:82F7] A:82EB X:0026 Y:0002 P:envmxdIzc $81/AFCB 85 21 STA $21 [$00:0021] A:9582 X:0026 Y:0002 P:eNvmxdIzc $81/AFCD 20 96 BA JSR $BA96 [$81:BA96] A:9582 X:0026 Y:0002 P:eNvmxdIzc $81/AFD0 18 CLC A:0095 X:0026 Y:0002 P:envmxdIzc $81/AFD1 A5 20 LDA $20 [$00:0020] A:0095 X:0026 Y:0002 P:envmxdIzc $81/AFD3 C9 06 00 CMP #$0006 A:82EB X:0026 Y:0002 P:eNvmxdIzc $81/AFD6 90 25 BCC $25 [$AFFD] A:82EB X:0026 Y:0002 P:eNvmxdIzC $81/AFD8 DD 1A 12 CMP $121A,x[$81:1240] A:82EB X:0026 Y:0002 P:eNvmxdIzC $81/AFDB D0 0A BNE $0A [$AFE7] A:82EB X:0026 Y:0002 P:eNvmxdIzC $81/AFE7 A5 20 LDA $20 [$00:0020] A:82EB X:0026 Y:0002 P:eNvmxdIzC $81/AFE9 9D 08 18 STA $1808,x[$81:182E] A:82EB X:0026 Y:0002 P:eNvmxdIzC $81/AFEC 9D 1A 12 STA $121A,x[$81:1240] A:82EB X:0026 Y:0002 P:eNvmxdIzC $81/AFEF A5 21 LDA $21 [$00:0021] A:82EB X:0026 Y:0002 P:eNvmxdIzC $81/AFF1 9D 30 18 STA $1830,x[$81:1856] A:9582 X:0026 Y:0002 P:eNvmxdIzC $81/AFF4 9D 42 12 STA $1242,x[$81:1268] A:9582 X:0026 Y:0002 P:eNvmxdIzC $81/AFF7 9E 80 18 STZ $1880,x[$81:18A6] A:9582 X:0026 Y:0002 P:eNvmxdIzC $81/AFFA 4C 04 B0 JMP $B004 [$81:B004] A:9582 X:0026 Y:0002 P:eNvmxdIzC
$81/AFFD ? (Executed when talking to the aerial building and at start up)
$81/AFFD 86 00 STX $00 [$00:0000] A:0005 X:0026 Y:0002 P:eNvmxdIzc $81/AFFF 0A ASL A A:0005 X:0026 Y:0002 P:eNvmxdIzc $81/B000 AA TAX A:000A X:0026 Y:0002 P:envmxdIzc $81/B001 7C 0D B0 JMP ($B00D,x)[$81:B07E] A:000A X:000A Y:0002 P:envmxdIzc $81/B004 A5 AC LDA $AC [$00:00AC] A:9582 X:0026 Y:0002 P:eNvmxdIzC $81/B006 18 CLC A:82F5 X:0026 Y:0002 P:eNvmxdIzC $81/B007 69 04 00 ADC #$0004 A:82F5 X:0026 Y:0002 P:eNvmxdIzc $81/B00A 85 AC STA $AC [$00:00AC] A:82F9 X:0026 Y:0002 P:eNvmxdIzc $81/B00C 60 RTS A:82F9 X:0026 Y:0002 P:eNvmxdIzc
$81/B00D Jump Table for $81/AFFD
$81/B00D 19 B0 $81/B00F 28 B0 $81/B011 3C B0 $81/B013 4B B0 $81/B015 63 B0 $81/B017 7E B0
$81/B07E ? (Executed when talking to the aerial building and at start up)
$81/B07E AE 00 00 LDX $0000 [$81:0000] A:000A X:000A Y:0002 P:envmxdIzc $81/B081 22 88 B0 81 JSL $81B088[$81:B088] A:000A X:0026 Y:0002 P:envmxdIzc $81/B085 4C 04 B0 JMP $B004 [$81:B004] A:0010 X:0026 Y:0002 P:envmxdIzc
$81/B088 ? (Executed when talking to the aerial building and at start up)
$81/B088 9E 52 11 STZ $1152,x[$81:1178] A:000A X:0026 Y:0002 P:envmxdIzc $81/B08B 9E 42 12 STZ $1242,x[$81:1268] A:000A X:0026 Y:0002 P:envmxdIzc $81/B08E 9E 30 18 STZ $1830,x[$81:1856] A:000A X:0026 Y:0002 P:envmxdIzc $81/B091 9E 1A 12 STZ $121A,x[$81:1240] A:000A X:0026 Y:0002 P:envmxdIzc $81/B094 9E 08 18 STZ $1808,x[$81:182E] A:000A X:0026 Y:0002 P:envmxdIzc $81/B097 9E 80 18 STZ $1880,x[$81:18A6] A:000A X:0026 Y:0002 P:envmxdIzc $81/B09A 9E 6A 0D STZ $0D6A,x[$81:0D90] A:000A X:0026 Y:0002 P:envmxdIzc $81/B09D 9E 92 0D STZ $0D92,x[$81:0DB8] A:000A X:0026 Y:0002 P:envmxdIzc $81/B0A0 9E F2 11 STZ $11F2,x[$81:1218] A:000A X:0026 Y:0002 P:envmxdIzc $81/B0A3 A9 10 00 LDA #$0010 A:000A X:0026 Y:0002 P:envmxdIzc $81/B0A6 9D AA 0E STA $0EAA,x[$81:0ED0] A:0010 X:0026 Y:0002 P:envmxdIzc $81/B0A9 6B RTL A:0010 X:0026 Y:0002 P:envmxdIzc
$81/B0AA TOKEN VECTOR #$34: ? (Executed when talking to the aerial building and at start up)
$81/B0AA A0 01 00 LDY #$0001 A:B0A9 X:0026 Y:0006 P:envmxdIzc $81/B0AD 20 EA BD JSR $BDEA [$81:BDEA] A:B0A9 X:0026 Y:0001 P:envmxdIzc $81/B0B0 9D CA 11 STA $11CA,x[$81:11F0] A:178E X:0026 Y:0004 P:envmxdIzc $81/B0B3 A0 04 00 LDY #$0004 A:178E X:0026 Y:0004 P:envmxdIzc $81/B0B6 B7 AC LDA [$AC],y[$88:8E46] A:178E X:0026 Y:0004 P:envmxdIzc $81/B0B8 29 FF 00 AND #$00FF A:A801 X:0026 Y:0004 P:eNvmxdIzc $81/B0BB 85 00 STA $00 [$00:0000] A:0001 X:0026 Y:0004 P:envmxdIzc $81/B0BD C8 INY A:0001 X:0026 Y:0004 P:envmxdIzc $81/B0BE B7 AC LDA [$AC],y[$88:8E47] A:0001 X:0026 Y:0005 P:envmxdIzc $81/B0C0 85 20 STA $20 [$00:0020] A:9DA8 X:0026 Y:0005 P:eNvmxdIzc $81/B0C2 C8 INY A:9DA8 X:0026 Y:0005 P:eNvmxdIzc $81/B0C3 B7 AC LDA [$AC],y[$88:8E48] A:9DA8 X:0026 Y:0006 P:envmxdIzc $81/B0C5 85 21 STA $21 [$00:0021] A:889D X:0026 Y:0006 P:eNvmxdIzc $81/B0C7 20 96 BA JSR $BA96 [$81:BA96] A:889D X:0026 Y:0006 P:eNvmxdIzc $81/B0CA 20 53 BA JSR $BA53 [$81:BA53] A:0088 X:0026 Y:0006 P:envmxdIzc $81/B0CD B0 0F BCS $0F [$B0DE] A:0001 X:0026 Y:178E P:envmxdIzc $81/B0CF A9 01 00 LDA #$0001 A:0001 X:0026 Y:178E P:envmxdIzc $81/B0D2 8D 98 19 STA $1998 [$81:1998] A:0001 X:0026 Y:178E P:envmxdIzc $81/B0D5 A5 AC LDA $AC [$00:00AC] A:0001 X:0026 Y:178E P:envmxdIzc $81/B0D7 18 CLC A:8E42 X:0026 Y:178E P:eNvmxdIzc $81/B0D8 69 08 00 ADC #$0008 A:8E42 X:0026 Y:178E P:eNvmxdIzc $81/B0DB 85 AC STA $AC [$00:00AC] A:8E4A X:0026 Y:178E P:eNvmxdIzc $81/B0DD 60 RTS A:8E4A X:0026 Y:178E P:eNvmxdIzc
$81/B0ED TOKEN VECTOR #$33: ?
$81/B0ED 08 PHP ; Buffer Flag Register value on stack $81/B0EE A0 01 00 LDY #$0001 A:B0EC X:0026 Y:0 P:envmxdIzc $81/B0F1 B7 AC LDA [$AC],y[$94:A5C4] A:B0EC X:0026 Y:0001 P:envmxdIzc $81/B0F3 29 FF 00 AND #$00FF A:0001 X:0026 Y:0001 P:envmxdIzc $81/B0F6 3A DEC A A:0001 X:0026 Y:0001 P:envmxdIzc $81/B0F7 0A ASL A A:0 X:0026 Y:0001 P:envmxdIZc $81/B0F8 A8 TAY A:0 X:0026 Y:0001 P:envmxdIZc $81/B0F9 B9 50 01 LDA $0150,y ; Transfer Joypad Input of this frame in $19A0 $81/B0FC 8D A0 19 STA $19A0 $81/B0FF B9 54 01 LDA $0154,y ; Transfer Joypad buttons pushed in this frame in $199E $81/B102 8D 9E 19 STA $199E $81/B105 B9 58 01 LDA $0158,y[$81:0158] A:0 X:0026 Y:0 P:envmxdIZc $81/B108 8D A2 19 STA $19A2 [$81:19A2] A:0 X:0026 Y:0 P:envmxdIZc $81/B10B 9C 9A 19 STZ $199A [$81:199A] A:0 X:0026 Y:0 P:envmxdIZc $81/B10E 9C 9C 19 STZ $199C [$81:199C] A:0 X:0026 Y:0 P:envmxdIZc $81/B111 9C 98 19 STZ $1998 [$81:1998] A:0 X:0026 Y:0 P:envmxdIZc $81/B114 AD A0 19 LDA $19A0 ; Is the Down-Button in this frame's input? $81/B117 29 00 04 AND #$0400 $81/B11A C9 00 04 CMP #$0400 $81/B11D D0 10 BNE $10 ; [$B12F] Branch if not
$81/B11F A0 04 00 LDY #$0004 A:0400 X:0024 Y:0000 P:envmxdIZC $81/B122 B7 AC LDA [$AC],y[$94:BF27] A:0400 X:0024 Y:0004 P:envmxdIzC $81/B124 8D 9C 19 STA $199C [$81:199C] A:0000 X:0024 Y:0004 P:envmxdIZC $81/B127 A9 01 00 LDA #$0001 A:0000 X:0024 Y:0004 P:envmxdIZC $81/B12A 8D 98 19 STA $1998 [$81:1998] A:0001 X:0024 Y:0004 P:envmxdIzC $81/B12D 80 1D BRA $1D [$B14C] A:0001 X:0024 Y:0004 P:envmxdIzC
$81/B12F AD A0 19 LDA $19A0 ; Is the Up-Button in this frame's input? $81/B132 29 00 08 AND #$0800 $81/B135 C9 00 08 CMP #$0800 $81/B138 D0 12 BNE $12 ; [$B14C] Branch if not
$81/B13A A0 04 00 LDY #$0004 A:0800 X:0024 Y:0000 P:envmxdIZC $81/B13D B7 AC LDA [$AC],y[$94:BF27] A:0800 X:0024 Y:0004 P:envmxdIzC $81/B13F 49 FF FF EOR #$FFFF A:0000 X:0024 Y:0004 P:envmxdIZC $81/B142 1A INC A A:FFFF X:0024 Y:0004 P:eNvmxdIzC $81/B143 8D 9C 19 STA $199C [$81:199C] A:0000 X:0024 Y:0004 P:envmxdIZC $81/B146 A9 01 00 LDA #$0001 A:0000 X:0024 Y:0004 P:envmxdIZC $81/B149 8D 98 19 STA $1998 [$81:1998] A:0001 X:0024 Y:0004 P:envmxdIzC
$81/B14C AD A0 19 LDA $19A0 ; Is the Right-Button in this frame's input? $81/B14F 29 00 01 AND #$0100 $81/B152 C9 00 01 CMP #$0100 $81/B155 D0 10 BNE $10 ; [$B167] Branch if not
$81/B157 A0 02 00 LDY #$0002 A:0100 X:0024 Y:0004 P:envmxdIZC $81/B15A B7 AC LDA [$AC],y[$94:BF25] A:0100 X:0024 Y:0002 P:envmxdIzC $81/B15C 8D 9A 19 STA $199A [$81:199A] A:0000 X:0024 Y:0002 P:envmxdIZC $81/B15F A9 01 00 LDA #$0001 A:0000 X:0024 Y:0002 P:envmxdIZC $81/B162 8D 98 19 STA $1998 [$81:1998] A:0001 X:0024 Y:0002 P:envmxdIzC $81/B165 80 1F BRA $1F [$B186] A:0001 X:0024 Y:0002 P:envmxdIzC
$81/B167 AD A0 19 LDA $19A0 ; Is the Left-Button in this frame's input? $81/B16A 29 00 02 AND #$0200 $81/B16D C9 00 02 CMP #$0200 $81/B170 D0 14 BNE $14 ; [$B186] Branch if not
$81/B172 5A PHY A:0200 X:0024 Y:0000 P:envmxdIZC $81/B173 A0 02 00 LDY #$0002 A:0200 X:0024 Y:0000 P:envmxdIZC $81/B176 B7 AC LDA [$AC],y[$94:BF25] A:0200 X:0024 Y:0002 P:envmxdIzC $81/B178 49 FF FF EOR #$FFFF A:0000 X:0024 Y:0002 P:envmxdIZC $81/B17B 1A INC A A:FFFF X:0024 Y:0002 P:eNvmxdIzC $81/B17C 8D 9A 19 STA $199A [$81:199A] A:0000 X:0024 Y:0002 P:envmxdIZC $81/B17F 7A PLY A:0000 X:0024 Y:0002 P:envmxdIZC $81/B180 A9 01 00 LDA #$0001 A:0000 X:0024 Y:0000 P:envmxdIZC $81/B183 8D 98 19 STA $1998 [$81:1998] A:0001 X:0024 Y:0000 P:envmxdIzC
$81/B186 A5 AC LDA $AC [$00:00AC] A:0 X:0026 Y:0 P:eNvmxdIzc $81/B188 18 CLC A:A5C3 X:0026 Y:0 P:eNvmxdIzc $81/B189 69 06 00 ADC #$0006 A:A5C3 X:0026 Y:0 P:eNvmxdIzc $81/B18C 85 AC STA $AC [$00:00AC] A:A5C9 X:0026 Y:0 P:eNvmxdIzc $81/B18E 28 PLP ; Restore Flag Register value $81/B18F 60 RTS
$81/B190 TOKEN VECTOR #$26: Store Value in Register
This Token Vector has six argument bytes
1st byte: Destination Address - Low Byte 2nd byte: Destination Address - High Byte 3rd byte: Destination Address Setup Command, see $81/BDEA 1st byte: Value/Source - Low Byte 2nd byte: Value/Source - High Byte 3rd byte: Value/Source Command, see $81/BB5F
$81/B190 A0 01 00 LDY #$0001 ; Setup Load Index for Loading Arguments $81/B193 20 EA BD JSR $BDEA [$81:BDEA] A:B18F X:0026 Y:0001 P:envmxdIzc $81/B196 85 00 STA $00 [$00:0000] A:1A00 X:0026 Y:0004 P:envmxdIzc $81/B198 20 5F BB JSR $BB5F [$81:BB5F] A:1A00 X:0026 Y:0004 P:envmxdIzc $81/B19B 92 00 STA ($00) [$81:1A00] A:0 X:0026 Y:0007 P:envmxdIzc $81/B19D A5 AC LDA $AC ; Make Token Data Load Address point to the next token $81/B19F 18 CLC ; (This skips the old Token (#$26) and six argument bytes) $81/B1A0 69 07 00 ADC #$0007 $81/B1A3 85 AC STA $AC $81/B1A5 60 RTS
$81/B1A6 TOKEN VECTOR #$61: Store Value in $19A4 (Executed when talking to the aerial building)
This Token Vector has three argument bytes
$81/B1A6 A0 01 00 LDY #$0001 ; Setup Load Index for Loading Arguments $81/B1A9 20 5F BB JSR $BB5F [$81:BB5F] A:B1A5 X:0024 Y:0001 P:envmxdIzc $81/B1AC 8D A4 19 STA $19A4 ; Store Loaded Value in $19A4 $81/B1AF A5 AC LDA $AC ; Make Token Data Load Address point to the next token $81/B1B1 18 CLC ; (This skips the old Token (#$26) and three argument bytes) $81/B1B2 69 04 00 ADC #$0004 $81/B1B5 85 AC STA $AC $81/B1B7 60 RTS
$81/B3AF TOKEN VECTOR #$37: ?
$81/B3AF A0 01 00 LDY #$0001 ; Setup Load Index for Loading Arguments $81/B3B2 20 5F BB JSR $BB5F [$81:BB5F] A:B3AE X:0024 Y:0001 P:envmxdIzc $81/B3B5 9D BA 0D STA $0DBA,x[$81:0DDE] A:0006 X:0024 Y:0004 P:envmxdIzc $81/B3B8 A0 04 00 LDY #$0004 A:0006 X:0024 Y:0004 P:envmxdIzc $81/B3BB 20 5F BB JSR $BB5F [$81:BB5F] A:0006 X:0024 Y:0004 P:envmxdIzc $81/B3BE 9D E2 0D STA $0DE2,x[$81:0E06] A:0004 X:0024 Y:0007 P:envmxdIzc $81/B3C1 A0 07 00 LDY #$0007 A:0004 X:0024 Y:0007 P:envmxdIzc $81/B3C4 20 5F BB JSR $BB5F [$81:BB5F] A:0004 X:0024 Y:0007 P:envmxdIzc $81/B3C7 9D 40 17 STA $1740,x[$81:1764] A:0010 X:0024 Y:000A P:envmxdIzc $81/B3CA A5 AC LDA $AC [$00:00AC] A:0010 X:0024 Y:000A P:envmxdIzc $81/B3CC 18 CLC A:B481 X:0024 Y:000A P:eNvmxdIzc $81/B3CD 69 0A 00 ADC #$000A A:B481 X:0024 Y:000A P:eNvmxdIzc $81/B3D0 85 AC STA $AC [$00:00AC] A:B48B X:0024 Y:000A P:eNvmxdIzc $81/B3D2 60 RTS A:B48B X:0024 Y:000A P:eNvmxdIzc
$81/B779 TOKEN VECTOR #$79: ?
$81/B779 A0 01 00 LDY #$0001 ; Setup Load Index for Loading Arguments $81/B77C 20 EA BD JSR $BDEA [$81:BDEA] A:B778 X:0024 Y:0001 P:envmxdIzc $81/B77F 9D 20 19 STA $1920,x[$81:1944] A:19FE X:0024 Y:0004 P:envmxdIzc $81/B782 A5 AC LDA $AC [$00:00AC] A:19FE X:0024 Y:0004 P:envmxdIzc $81/B784 18 CLC A:966F X:0024 Y:0004 P:eNvmxdIzc $81/B785 69 04 00 ADC #$0004 A:966F X:0024 Y:0004 P:eNvmxdIzc $81/B788 85 AC STA $AC [$00:00AC] A:9673 X:0024 Y:0004 P:eNvmxdIzc $81/B78A 60 RTS A:9673 X:0024 Y:0004 P:eNvmxdIzc
$81/B78B TOKEN VECTOR #$7A: ?
$81/B78B A0 01 00 LDY #$0001 ; Setup Load Index for Loading Arguments $81/B78E 20 5F BB JSR $BB5F [$81:BB5F] A:B78A X:0024 Y:0001 P:envmxdIzc $81/B791 9D 5A 0E STA $0E5A,x[$81:0E7E] A:0 X:0024 Y:0004 P:envmxdIzc $81/B794 A5 AC LDA $AC [$00:00AC] A:0 X:0024 Y:0004 P:envmxdIzc $81/B796 18 CLC A:966B X:0024 Y:0004 P:eNvmxdIzc $81/B797 69 04 00 ADC #$0004 A:966B X:0024 Y:0004 P:eNvmxdIzc $81/B79A 85 AC STA $AC [$00:00AC] A:966F X:0024 Y:0004 P:eNvmxdIzc $81/B79C 60 RTS A:966F X:0024 Y:0004 P:eNvmxdIzc
$81/B91A ? (Add "Animation Step" to buffer)
$81/B91A A7 20 LDA [$20] [$95:82AD] A:0095 X:0026 Y:0004 P:envmxdIzc $81/B91C 29 00 F0 AND #$F000 A:000C X:0026 Y:0004 P:envmxdIzc $81/B91F F0 47 BEQ $47 [$B968] A:0 X:0026 Y:0004 P:envmxdIZc
code is missing here
$81/B968 9E F2 11 STZ $11F2,x[$81:1218] A:0 X:0026 Y:0004 P:envmxdIZc $81/B96B A5 20 LDA $20 ; Set Address in $20-22 in Animation Step buffer $81/B96D 9D 1A 0D STA $0D1A,x $81/B970 A5 21 LDA $21 $81/B972 9D 6A 0D STA $0D6A,x $81/B975 60 RTS
$81/BA2A ? (Executed when talking to the aerial building and on the title screen)
$81/BA2A 9E E0 17 STZ $17E0,x ; Clear Bank for the 24-bit address of a Index for the Token Vector table $81/BA2D 9E 30 18 STZ $1830,x[$81:1854] A:0001 X:0024 Y:1000 P:envmxdIzc $81/BA30 9E 1A 12 STZ $121A,x[$81:123E] A:0001 X:0024 Y:1000 P:envmxdIzc $81/BA33 9E 42 12 STZ $1242,x[$81:1266] A:0001 X:0024 Y:1000 P:envmxdIzc $81/BA36 9E 6A 0D STZ $0D6A,x[$81:0D8E] A:0001 X:0024 Y:1000 P:envmxdIzc $81/BA39 BC 90 17 LDY $1790,x[$81:17B4] A:0001 X:0024 Y:1000 P:envmxdIzc $81/BA3C C0 FF FF CPY #$FFFF A:0001 X:0024 Y:0026 P:envmxdIzc $81/BA3F F0 11 BEQ $11 [$BA52] A:0001 X:0024 Y:0026 P:envmxdIzc $81/BA41 B9 CA 11 LDA $11CA,y[$81:11F0] A:0001 X:0024 Y:0026 P:envmxdIzc $81/BA44 A8 TAY A:178E X:0024 Y:0026 P:envmxdIzc $81/BA45 B9 00 00 LDA $0000,y[$81:178E] A:178E X:0024 Y:178E P:envmxdIzc $81/BA48 3A DEC A A:0001 X:0024 Y:178E P:envmxdIzc $81/BA49 99 00 00 STA $0000,y[$81:178E] A:0000 X:0024 Y:178E P:envmxdIZc $81/BA4C A9 FF FF LDA #$FFFF A:0000 X:0024 Y:178E P:envmxdIZc $81/BA4F 9D 90 17 STA $1790,x[$81:17B4] A:FFFF X:0024 Y:178E P:eNvmxdIzc $81/BA52 60 RTS A:FFFF X:0024 Y:178E P:eNvmxdIzc
$81/BA53 ? (Executed when talking to the aerial building)
$81/BA53 DA PHX A:0088 X:0026 Y:0006 P:envmxdIzc $81/BA54 BD CA 11 LDA $11CA,x[$81:11F0] A:0088 X:0026 Y:0006 P:envmxdIzc $81/BA57 85 02 STA $02 [$00:0002] A:178E X:0026 Y:0006 P:envmxdIzc $81/BA59 B2 02 LDA ($02) [$81:178E] A:178E X:0026 Y:0006 P:envmxdIzc $81/BA5B C5 00 CMP $00 [$00:0000] A:0000 X:0026 Y:0006 P:envmxdIZc $81/BA5D 10 15 BPL $15 [$BA74] A:0000 X:0026 Y:0006 P:eNvmxdIzc $81/BA5F BD A0 16 LDA $16A0,x[$81:16C6] A:0000 X:0026 Y:0006 P:eNvmxdIzc $81/BA62 A8 TAY A:01A5 X:0026 Y:0006 P:envmxdIzc $81/BA63 BD 50 16 LDA $1650,x[$81:1676] A:01A5 X:0026 Y:01A5 P:envmxdIzc $81/BA66 AA TAX A:0129 X:0026 Y:01A5 P:envmxdIzc $81/BA67 A5 22 LDA $22 [$00:0022] A:0129 X:0129 Y:01A5 P:envmxdIzc $81/BA69 8D BE 00 STA $00BE [$81:00BE] A:6C88 X:0129 Y:01A5 P:envmxdIzc $81/BA6C A5 20 LDA $20 [$00:0020] A:6C88 X:0129 Y:01A5 P:envmxdIzc $81/BA6E 22 B0 C2 81 JSL $81C2B0[$81:C2B0] A:9DA8 X:0129 Y:01A5 P:eNvmxdIzc $81/BA72 90 03 BCC $03 [$BA77] A:16C4 X:0024 Y:01A5 P:eNvmxdIzc $81/BA77 9B TXY A:16C4 X:0024 Y:01A5 P:eNvmxdIzc $81/BA78 FA PLX A:16C4 X:0024 Y:0024 P:envmxdIzc $81/BA79 8A TXA A:16C4 X:0026 Y:0024 P:envmxdIzc $81/BA7A 99 90 17 STA $1790,y[$81:17B4] A:0026 X:0026 Y:0024 P:envmxdIzc $81/BA7D BD 32 0E LDA $0E32,x[$81:0E58] A:0026 X:0026 Y:0024 P:envmxdIzc $81/BA80 99 32 0E STA $0E32,y[$81:0E56] A:0200 X:0026 Y:0024 P:envmxdIzc $81/BA83 BD 0A 0E LDA $0E0A,x[$81:0E30] A:0200 X:0026 Y:0024 P:envmxdIzc $81/BA86 99 0A 0E STA $0E0A,y[$81:0E2E] A:0020 X:0026 Y:0024 P:envmxdIzc $81/BA89 BD CA 11 LDA $11CA,x[$81:11F0] A:0020 X:0026 Y:0024 P:envmxdIzc $81/BA8C A8 TAY A:178E X:0026 Y:0024 P:envmxdIzc $81/BA8D B9 00 00 LDA $0000,y[$81:178E] A:178E X:0026 Y:178E P:envmxdIzc $81/BA90 1A INC A A:0000 X:0026 Y:178E P:envmxdIZc $81/BA91 99 00 00 STA $0000,y[$81:178E] A:0001 X:0026 Y:178E P:envmxdIzc $81/BA94 18 CLC A:0001 X:0026 Y:178E P:envmxdIzc $81/BA95 60 RTS A:0001 X:0026 Y:178E P:envmxdIzc
$81/BA96 ?
$81/BA96 DA PHX A:9582 X:0026 Y:0002 P:eNvmxdIzc $81/BA97 A5 22 LDA $22 [$00:0022] A:9582 X:0026 Y:0002 P:eNvmxdIzc $81/BA99 29 FF 00 AND #$00FF A:CB95 X:0026 Y:0002 P:eNvmxdIzc $81/BA9C C9 F0 00 CMP #$00F0 A:0095 X:0026 Y:0002 P:envmxdIzc $81/BA9F 30 41 BMI $41 [$BAE2] A:0095 X:0026 Y:0002 P:eNvmxdIzc
code is missing here
$81/BAE2 FA PLX A:0095 X:0026 Y:0002 P:eNvmxdIzc $81/BAE3 60 RTS A:0095 X:0026 Y:0002 P:envmxdIzc
$81/BB5F ?
This subroutine is called when a Token Handler is active. It has the Token Data Address set up in [$AC].
The Command for this subroutine is the third byte in the Token Data. This is an Index for the Jump Table at $BB6E. The first two bytes are arguments for these commands.
$81/BB5F 5A PHY ; Buffer Token Data Load Index on stack $81/BB60 C8 INY ; Increment Token Data Load Index twice $81/BB61 C8 INY $81/BB62 B7 AC LDA [$AC],y ; Load Double-Byte from Token Data Address $81/BB64 29 FF 00 AND #$00FF ; Remove accidentally loaded second byte $81/BB67 0A ASL A ; Multiply loaded byte (Jump Table Index) by two $81/BB68 7A PLY ; Restore Token Data Load Index $81/BB69 DA PHX ; Buffer X on stack $81/BB6A AA TAX ; Transfer Jump Table Index in X for Jump $81/BB6B 7C 6E BB JMP ($BB6E,x) ; Jump
$81/BB6E Jump Table for $81/BB5F
$81/BB6E 70 BD ; Entry #$00: $BD70 - Load Data Byte in A $81/BB70 77 BD ; Entry #$01: $BD77 - Load Byte from [Data Byte] + X $81/BB72 86 BD ; Entry #$02: $BD86 - Load Byte from [Data Byte] $81/BB74 6E BD ; Entry #$03: $BD6E
$81/BD70 ?
$81/BB5F jumps here
$81/BD70 FA PLX ; Restore X $81/BD71 B7 AC LDA [$AC],y ; Load Double byte in A $81/BD73 C8 INY ; Increment Token Data Load Address thrice and exit $81/BD74 C8 INY $81/BD75 C8 INY $81/BD76 60 RTS
$81/BD77 ?
$81/BB5F jumps here
$81/BD77 FA PLX ; Restore X $81/BD78 8A TXA ; Transfer X in A and add Data Byte $81/BD79 18 CLC $81/BD7A 77 AC ADC [$AC],y $81/BD7C 5A PHY ; Buffer Y on stack $81/BD7D A8 TAY ; Use value in A as Load Index on Bank $81 $81/BD7E B9 00 00 LDA $0000,y $81/BD81 7A PLY ; Restore Y $81/BD82 C8 INY ; Increment Token Data Load Address thrice and exit $81/BD83 C8 INY $81/BD84 C8 INY $81/BD85 60 RTS
$81/BD86 ?
$81/BB5F jumps here
$81/BD86 FA PLX ; Restore X $81/BD87 B7 AC LDA [$AC],y ; Load Double byte in A $81/BD89 5A PHY ; Buffer Y on stack $81/BD8A A8 TAY ; Use value in A as Load Index on Bank $81 $81/BD8B B9 00 00 LDA $0000,y $81/BD8E 7A PLY ; Restore Y $81/BD8F C8 INY ; Increment Token Data Load Address thrice and exit $81/BD90 C8 INY $81/BD91 C8 INY $81/BD92 60 RTS
$81/BDEA ?
This subroutine is called when a Token Handler is active. It has the Token Data Address set up in [$AC].
The Command for this subroutine is the third byte in the Token Data. This is an Index for the Jump Table at $BB6E. The first two bytes are arguments for these commands.
$81/BDEA 5A PHY ; Buffer Token Data Load Index on stack $81/BDEB C8 INY ; Increment Token Data Load Index twice $81/BDEC C8 INY $81/BDED B7 AC LDA [$AC],y ; Load Double-Byte from Token Data Address $81/BDEF 29 FF 00 AND #$00FF ; Remove accidentally loaded second byte $81/BDF2 0A ASL A ; Multiply loaded byte (Jump Table Index) by two $81/BDF3 7A PLY ; Restore Token Data Load Index $81/BDF4 DA PHX ; Buffer X on stack $81/BDF5 AA TAX ; Transfer Jump Table Index in X for Jump $81/BDF6 7C F9 BD JMP ($BDF9,x) ; Jump
$81/BDF9 Jump Table for $81/BDEA
$81/BDF9 FB BF ; Entry #$00: $BFFB $81/BDFB FD BF ; Entry #$01: $BFFD - A = X + Data Double Byte $81/BDFD 06 C0 ; Entry #$02: $C006 $81/BDFF 0D C0 ; Entry #$03: $C00D - A = Data Double Byte + $19A4
$81/BFFD ?
$81/BFFD FA PLX ; Restore X $81/BFFE 8A TXA ; Transfer X in A and add Data Double Byte $81/BFFF 18 CLC $81/C000 77 AC ADC [$AC],y $81/C002 C8 INY ; Increment Token Data Load Address thrice and exit $81/C003 C8 INY $81/C004 C8 INY $81/C005 60 RTS
$81/C00D ? (Executed when talking to the aerial building)
$81/C00D FA PLX ; Restore X $81/C00E B7 AC LDA [$AC],y ; Load Data Double Byte in A and add $19A4 $81/C010 18 CLC $81/C011 6D A4 19 ADC $19A4 $81/C014 C8 INY ; Increment Token Data Load Address thrice and exit $81/C015 C8 INY $81/C016 C8 INY $81/C017 60 RTS
$81/C149 ? (Executed when talking to the aerial building and at startup)
$81/C149 48 PHA A:9DFC X:0024 Y:0007 P:eNvmxdIzc $81/C14A AD BA 0C LDA $0CBA [$81:0CBA] A:9DFC X:0024 Y:0007 P:eNvmxdIzc $81/C14D D0 1D BNE $1D [$C16C] A:0000 X:0024 Y:0007 P:envmxdIZc $81/C14F DE 82 0E DEC $0E82,x[$81:0EA6] A:0000 X:0024 Y:0007 P:envmxdIZc $81/C152 DE 82 0E DEC $0E82,x[$81:0EA6] A:0000 X:0024 Y:0007 P:envmxdIzc $81/C155 BD 82 0E LDA $0E82,x[$81:0EA6] A:0000 X:0024 Y:0007 P:envmxdIzc $81/C158 30 2F BMI $2F [$C189] A:000E X:0024 Y:0007 P:envmxdIzc $81/C15A BF D0 C1 81 LDA $81C1D0,x[$81:C1F4] A:000E X:0024 Y:0007 P:envmxdIzc $81/C15E 18 CLC A:0120 X:0024 Y:0007 P:envmxdIzc $81/C15F 69 D2 0E ADC #$0ED2 A:0120 X:0024 Y:0007 P:envmxdIzc $81/C162 18 CLC A:0FF2 X:0024 Y:0007 P:envmxdIzc $81/C163 7D 82 0E ADC $0E82,x[$81:0EA6] A:0FF2 X:0024 Y:0007 P:envmxdIzc $81/C166 A8 TAY A:1000 X:0024 Y:0007 P:envmxdIzc $81/C167 68 PLA A:1000 X:0024 Y:1000 P:envmxdIzc $81/C168 99 00 00 STA $0000,y[$81:1000] A:9DFC X:0024 Y:1000 P:eNvmxdIzc $81/C16B 60 RTS A:9DFC X:0024 Y:1000 P:eNvmxdIzc
$81/C18B ? (Executed when talking to the aerial building)
$81/C18B AD BA 0C LDA $0CBA [$81:0CBA] A:8027 X:0024 Y:0007 P:envmxdIzc $81/C18E D0 1F BNE $1F [$C1AF] A:0000 X:0024 Y:0007 P:envmxdIZc $81/C190 BD 82 0E LDA $0E82,x[$81:0EA6] A:0000 X:0024 Y:0007 P:envmxdIZc $81/C193 C9 10 00 CMP #$0010 A:000C X:0024 Y:0007 P:envmxdIzc $81/C196 10 36 BPL $36 [$C1CE] A:000C X:0024 Y:0007 P:eNvmxdIzc $81/C198 BF D0 C1 81 LDA $81C1D0,x[$81:C1F4] A:000C X:0024 Y:0007 P:eNvmxdIzc $81/C19C 18 CLC A:0120 X:0024 Y:0007 P:envmxdIzc $81/C19D 69 D2 0E ADC #$0ED2 A:0120 X:0024 Y:0007 P:envmxdIzc $81/C1A0 18 CLC A:0FF2 X:0024 Y:0007 P:envmxdIzc $81/C1A1 7D 82 0E ADC $0E82,x[$81:0EA6] A:0FF2 X:0024 Y:0007 P:envmxdIzc $81/C1A4 A8 TAY A:0FFE X:0024 Y:0007 P:envmxdIzc $81/C1A5 B9 00 00 LDA $0000,y[$81:0FFE] A:0FFE X:0024 Y:0FFE P:envmxdIzc $81/C1A8 FE 82 0E INC $0E82,x[$81:0EA6] A:889D X:0024 Y:0FFE P:eNvmxdIzc $81/C1AB FE 82 0E INC $0E82,x[$81:0EA6] A:889D X:0024 Y:0FFE P:envmxdIzc $81/C1AE 60 RTS A:889D X:0024 Y:0FFE P:envmxdIzc
$81/C210 ?
$81/C210 08 PHP A:0001 X:0 Y:0 P:envmxdIzC $81/C211 8B PHB A:0001 X:0 Y:0 P:envmxdIzC $81/C212 C2 30 REP #$30 A:0001 X:0 Y:0 P:envmxdIzC $81/C214 A2 26 00 LDX #$0026 A:0001 X:0 Y:0 P:envmxdIzC $81/C217 20 2A BA JSR $BA2A [$81:BA2A] A:0001 X:0026 Y:0 P:envmxdIzC $81/C21A CA DEX A:FFFF X:0026 Y:0 P:eNvmxdIzc $81/C21B CA DEX A:FFFF X:0025 Y:0 P:envmxdIzc $81/C21C 10 F9 BPL $F9 [$C217] A:FFFF X:0024 Y:0 P:envmxdIzc $81/C21E 22 25 C2 81 JSL $81C225[$81:C225] A:FFFF X:FFFE Y:0 P:eNvmxdIzc $81/C222 AB PLB A:000A X:FFFE Y:0 P:envmxdIzc $81/C223 28 PLP A:000A X:FFFE Y:0 P:eNvmxdIzc $81/C224 6B RTL A:000A X:FFFE Y:0 P:envmxdIzC
$81/C225 ?
$81/C225 A9 C0 FF LDA #$FFC0 A:FFFF X:FFFE Y:0 P:eNvmxdIzc $81/C228 8D CE 0C STA $0CCE [$80:0CCE] A:FFC0 X:FFFE Y:0 P:eNvmxdIzc $81/C22B 8D D6 0C STA $0CD6 [$80:0CD6] A:FFC0 X:FFFE Y:0 P:eNvmxdIzc $81/C22E A9 40 01 LDA #$0140 A:FFC0 X:FFFE Y:0 P:eNvmxdIzc $81/C231 8D D0 0C STA $0CD0 [$80:0CD0] A:0140 X:FFFE Y:0 P:envmxdIzc $81/C234 8D D8 0C STA $0CD8 [$80:0CD8] A:0140 X:FFFE Y:0 P:envmxdIzc $81/C237 A9 C0 FF LDA #$FFC0 A:0140 X:FFFE Y:0 P:envmxdIzc $81/C23A 8D D2 0C STA $0CD2 [$80:0CD2] A:FFC0 X:FFFE Y:0 P:eNvmxdIzc $81/C23D 8D DA 0C STA $0CDA [$80:0CDA] A:FFC0 X:FFFE Y:0 P:eNvmxdIzc $81/C240 A9 40 01 LDA #$0140 A:FFC0 X:FFFE Y:0 P:eNvmxdIzc $81/C243 8D D4 0C STA $0CD4 [$80:0CD4] A:0140 X:FFFE Y:0 P:envmxdIzc $81/C246 8D DC 0C STA $0CDC [$80:0CDC] A:0140 X:FFFE Y:0 P:envmxdIzc $81/C249 9C C2 0C STZ $0CC2 [$80:0CC2] A:0140 X:FFFE Y:0 P:envmxdIzc $81/C24C 9C C4 0C STZ $0CC4 [$80:0CC4] A:0140 X:FFFE Y:0 P:envmxdIzc $81/C24F 9C C0 0C STZ $0CC0 [$80:0CC0] A:0140 X:FFFE Y:0 P:envmxdIzc $81/C252 A9 0A 00 LDA #$000A A:0140 X:FFFE Y:0 P:envmxdIzc $81/C255 8D BC 0C STA $0CBC [$80:0CBC] A:000A X:FFFE Y:0 P:envmxdIzc $81/C258 8D BE 0C STA $0CBE [$80:0CBE] A:000A X:FFFE Y:0 P:envmxdIzc $81/C25B 9C EE 0C STZ $0CEE [$80:0CEE] A:000A X:FFFE Y:0 P:envmxdIzc $81/C25E 9C A3 13 STZ $13A3 [$80:13A3] A:000A X:FFFE Y:0 P:envmxdIzc $81/C261 9C A7 13 STZ $13A7 [$80:13A7] A:000A X:FFFE Y:0 P:envmxdIzc $81/C264 9C A5 13 STZ $13A5 [$80:13A5] A:000A X:FFFE Y:0 P:envmxdIzc $81/C267 6B RTL A:000A X:FFFE Y:0 P:envmxdIzc
$81/C29A ?
$81/C29A 08 PHP A:000A X:FFFE Y:0 P:envmxdIzC $81/C29B C2 20 REP #$20 A:000A X:FFFE Y:0 P:envmxdIzC $81/C29D A9 00 80 LDA #$8000 A:000A X:FFFE Y:0 P:envmxdIzC $81/C2A0 0C B8 0C TSB $0CB8 [$80:0CB8] A:8000 X:FFFE Y:0 P:eNvmxdIzC $81/C2A3 28 PLP A:8000 X:FFFE Y:0 P:eNvmxdIZC $81/C2A4 6B RTL A:8000 X:FFFE Y:0 P:envmxdIzC
$81/C2B0 ? (Executed when talking to the aerial building and at start up)
When this subroutine is called, A contains the address of a Token Vector table Index. Its Bank got stored in $00BE beforehand.
The carry is used here as error flag. When it's set, something went wrong.
Look for an empty Token Slot
$81/C2B0 08 PHP ; Buffer Flag Register value, Y, X and A on stack $81/C2B1 5A PHY $81/C2B2 DA PHX $81/C2B3 48 PHA $81/C2B4 A2 26 00 LDX #$0026 ; Setup Slot Load Index/Loop Counter $81/C2B7 BD E0 17 LDA $17E0,x ; Is this slot empty? $81/C2BA F0 0A BEQ $0A ; [$C2C6] Branch if it is $81/C2BC CA DEX ; If not, decrement Load Index twice (to try the next Slot) $81/C2BD CA DEX $81/C2BE 10 F7 BPL $F7 ; [$C2B7] Loop until all
If no Token Slot is empty, exit and set Error flag
$81/C2C0 68 PLA ; Restore Flag Register value, Y, X and A $81/C2C1 FA PLX $81/C2C2 7A PLY $81/C2C3 28 PLP $81/C2C4 38 SEC ; Set Error flag - something went wrong $81/C2C5 6B RTL
If it found an empty Token Slot
$81/C2C6 AD BE 00 LDA $00BE ; Load $00BE and set the high byte as Bank for a Token Vector table Index $81/C2C9 EB XBA $81/C2CA 9D E0 17 STA $17E0,x $81/C2CD 68 PLA ; Pull Original A-value (16-bit) from Stack $81/C2CE 9D B8 17 STA $17B8,x ; Set it as Address for a Token Vector table Index $81/C2D1 68 PLA ; Pull Original X-value (16-bit) from Stack $81/C2D2 9D 50 16 STA $1650,x ; Set as X/Y coordinate addition value for all sprites of this Animation Step $81/C2D5 68 PLA ; Pull Original Y-value (16-bit) from Stack $81/C2D6 9D A0 16 STA $16A0,x[$81:16C4] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2D9 9E 30 18 STZ $1830,x[$81:1854] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2DC 9E 08 18 STZ $1808,x[$81:182C] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2DF 9E 58 18 STZ $1858,x ; Clear No Repitition flag for this slot - it gets repeated $81/C2E2 9E 80 18 STZ $1880,x[$81:18A4] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2E5 9E 1A 0D STZ $0D1A,x[$81:0D3E] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2E8 9E 42 0D STZ $0D42,x[$81:0D66] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2EB 9E 6A 0D STZ $0D6A,x[$81:0D8E] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2EE 9E 92 0D STZ $0D92,x[$81:0DB6] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2F1 9E BA 0D STZ $0DBA,x[$81:0DDE] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2F4 9E E2 0D STZ $0DE2,x[$81:0E06] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2F7 9E 0A 0E STZ $0E0A,x[$81:0E2E] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2FA 9E 32 0E STZ $0E32,x[$81:0E56] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C2FD 9E 1A 12 STZ $121A,x[$81:123E] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C300 9E 42 12 STZ $1242,x[$81:1266] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C303 9E C8 16 STZ $16C8,x[$81:16EC] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C306 9E F0 16 STZ $16F0,x[$81:1714] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C309 9E 68 17 STZ $1768,x[$81:178C] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C30C 9E 40 17 STZ $1740,x[$81:1764] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C30F 9E F2 11 STZ $11F2,x[$81:1216] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C312 9E 7A 11 STZ $117A,x ; Clear Leave out Flag - this Token Vector gets executed (and not left out) $81/C315 9E A2 11 STZ $11A2,x[$81:11C6] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C318 9E 52 11 STZ $1152,x[$81:1176] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C31B 9E 48 19 STZ $1948,x[$81:196C] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C31E 9E 70 19 STZ $1970,x[$81:1994] A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C321 A9 FF FF LDA #$FFFF A:01A5 X:0024 Y:01A5 P:envmxdIzc $81/C324 9D 90 17 STA $1790,x[$81:17B4] A:FFFF X:0024 Y:01A5 P:eNvmxdIzc $81/C327 9D 18 17 STA $1718,x[$81:173C] A:FFFF X:0024 Y:01A5 P:eNvmxdIzc $81/C32A A9 00 30 LDA #$3000 A:FFFF X:0024 Y:01A5 P:eNvmxdIzc $81/C32D 9D 5A 0E STA $0E5A,x[$81:0E7E] A:3000 X:0024 Y:01A5 P:envmxdIzc $81/C330 A9 10 00 LDA #$0010 A:3000 X:0024 Y:01A5 P:envmxdIzc $81/C333 9D 82 0E STA $0E82,x[$81:0EA6] A:0010 X:0024 Y:01A5 P:envmxdIzc $81/C336 9D AA 0E STA $0EAA,x[$81:0ECE] A:0010 X:0024 Y:01A5 P:envmxdIzc $81/C339 8A TXA A:0010 X:0024 Y:01A5 P:envmxdIzc $81/C33A 4A LSR A A:0024 X:0024 Y:01A5 P:envmxdIzc $81/C33B 9D 00 16 STA $1600,x[$81:1624] A:0012 X:0024 Y:01A5 P:envmxdIzc $81/C33E 8A TXA A:0012 X:0024 Y:01A5 P:envmxdIzc $81/C33F 18 CLC A:0024 X:0024 Y:01A5 P:envmxdIzc $81/C340 69 A0 16 ADC #$16A0 A:0024 X:0024 Y:01A5 P:envmxdIzc $81/C343 9D 20 19 STA $1920,x[$81:1944] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C346 9E B2 19 STZ $19B2,x[$81:19D6] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C349 9E DA 19 STZ $19DA,x[$81:19FE] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C34C 9E 02 1A STZ $1A02,x[$81:1A26] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C34F 9E 2A 1A STZ $1A2A,x[$81:1A4E] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C352 9E 52 1A STZ $1A52,x[$81:1A76] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C355 9E 7A 1A STZ $1A7A,x[$81:1A9E] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C358 9E A2 1A STZ $1AA2,x[$81:1AC6] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C35B 9E CA 1A STZ $1ACA,x[$81:1AEE] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C35E 9E F2 1A STZ $1AF2,x[$81:1B16] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C361 9E 1A 1B STZ $1B1A,x[$81:1B3E] A:16C4 X:0024 Y:01A5 P:envmxdIzc $81/C364 28 PLP ; Restore Flag Register value $81/C365 18 CLC ; Clear Error flag - everything's fine $81/C366 6B RTL
$81/C367 ? (Check/Work off every Token Data Slot)
$81/C367 08 PHP ; Buffer Flag Register value and Program Bank on Stack $81/C368 8B PHB $81/C369 4B PHK ; Set Program Bank to $81 $81/C36A AB PLB $81/C36B C2 30 REP #$30 ; A/X/Y = 16-bit $81/C36D AD B8 0C LDA $0CB8 [$81:0CB8] A:0094 X:FFFE Y:0001 P:eNvmxdIzc $81/C370 89 00 80 BIT #$8000 A:8000 X:FFFE Y:0001 P:eNvmxdIzc $81/C373 F0 27 BEQ $27 ; [$C39C] If MSB is not set, exit $81/C375 20 9F C3 JSR $C39F [$81:C39F] A:8000 X:FFFE Y:0001 P:eNvmxdIzc $81/C378 B0 1C BCS $1C [$C396] A:0001 X:FFFE Y:0001 P:eNvmxdIzc $81/C37A A2 26 00 LDX #$0026 ; Setup slot counter $81/C37D BD E0 17 LDA $17E0,x[$81:1806] A:0001 X:0026 Y:0001 P:envmxdIzc $81/C380 F0 10 BEQ $10 ; [$C392] If empty, do next slot
$81/C382 20 C9 C3 JSR $C3C9 [$81:C3C9] A:9500 X:0026 Y:0077 P:eNvmxdIzc $81/C385 B0 0B BCS $0B ; [$C392] Do next slot $81/C387 BD 7A 11 LDA $117A,x ; Check if Flag for this Token Vector Index Slot is set $81/C38A D0 06 BNE $06 ; [$C392] If it is, do next slot $81/C38C 20 FB C3 JSR $C3FB [$81:C3FB] A:0 X:0026 Y:0077 P:envmxdIZc $81/C38F 20 3B C4 JSR $C43B ; (= Execute Token Data)
$81/C392 CA DEX ; Decrement slot counter twice $81/C393 CA DEX $81/C394 10 E7 BPL $E7 ; [$C37D] Loop until every slot is checked/worked off $81/C396 20 DD C4 JSR $C4DD [$81:C4DD] A:0 X:FFFE Y:0001 P:eNvmxdIzc $81/C399 20 20 C5 JSR $C520 [$81:C520] A:0 X:FFFE Y:0001 P:eNvmxdIzc $81/C39C AB PLB ; Restore Flag Register value and Program Bank $81/C39D 28 PLP $81/C39E 6B RTL
$81/C39F ?
$81/C39F 08 PHP ; Buffer Flag Register value on stack $81/C3A0 C2 30 REP #$30 ; A/X/Y = 16-bit $81/C3A2 EE C0 0C INC $0CC0 [$81:0CC0] A:8000 X:FFFE Y:0001 P:eNvmxdIzc $81/C3A5 AD BE 0C LDA $0CBE [$81:0CBE] A:8000 X:FFFE Y:0001 P:envmxdIzc $81/C3A8 CD C0 0C CMP $0CC0 [$81:0CC0] A:000A X:FFFE Y:0001 P:envmxdIzc $81/C3AB 10 0E BPL $0E [$C3BB] A:000A X:FFFE Y:0001 P:envmxdIzC
code is missing here
$81/C3BB AD C0 0C LDA $0CC0 [$81:0CC0] A:000A X:FFFE Y:0001 P:envmxdIzC $81/C3BE CD BC 0C CMP $0CBC [$81:0CBC] A:0001 X:FFFE Y:0001 P:envmxdIzC $81/C3C1 30 03 BMI $03 [$C3C6] A:0001 X:FFFE Y:0001 P:eNvmxdIzc $81/C3C3 9C C0 0C STZ $0CC0 [$81:0CC0] A:000A X:0 Y:0 P:enVmxdIZC $81/C3C6 28 PLP ; Restore Flag Register value $81/C3C7 18 CLC A:0001 X:FFFE Y:0001 P:eNvmxdIzc $81/C3C8 60 RTS
$81/C3C9 ?
$81/C3C9 C2 30 REP #$30 A:9500 X:0026 Y:0077 P:eNvmxdIzc $81/C3CB BD 50 16 LDA $1650,x[$81:1676] A:9500 X:0026 Y:0077 P:eNvmxdIzc $81/C3CE 38 SEC A:0000 X:0026 Y:0077 P:envmxdIZc $81/C3CF ED C2 0C SBC $0CC2 [$81:0CC2] A:0000 X:0026 Y:0077 P:envmxdIZC $81/C3D2 CD D2 0C CMP $0CD2 [$81:0CD2] A:0000 X:0026 Y:0077 P:envmxdIZC $81/C3D5 30 18 BMI $18 [$C3EF] A:0000 X:0026 Y:0077 P:envmxdIzc $81/C3D7 CD D4 0C CMP $0CD4 [$81:0CD4] A:0000 X:0026 Y:0077 P:envmxdIzc $81/C3DA 10 13 BPL $13 [$C3EF] A:0000 X:0026 Y:0077 P:eNvmxdIzc $81/C3DC BD A0 16 LDA $16A0,x[$81:16C6] A:0000 X:0026 Y:0077 P:eNvmxdIzc $81/C3DF 38 SEC A:0077 X:0026 Y:0077 P:envmxdIzc $81/C3E0 ED C4 0C SBC $0CC4 [$81:0CC4] A:0077 X:0026 Y:0077 P:envmxdIzC $81/C3E3 CD CE 0C CMP $0CCE [$81:0CCE] A:0077 X:0026 Y:0077 P:envmxdIzC $81/C3E6 30 07 BMI $07 [$C3EF] A:0077 X:0026 Y:0077 P:envmxdIzc $81/C3E8 CD D0 0C CMP $0CD0 [$81:0CD0] A:0077 X:0026 Y:0077 P:envmxdIzc $81/C3EB 10 02 BPL $02 [$C3EF] A:0077 X:0026 Y:0077 P:eNvmxdIzc $81/C3ED 80 08 BRA $08 [$C3F7] A:0077 X:0026 Y:0077 P:eNvmxdIzc $81/C3EF BD 40 17 LDA $1740,x[$81:1762] A:0140 X:0022 Y:0009 P:envmxdIZC $81/C3F2 29 20 00 AND #$0020 A:0010 X:0022 Y:0009 P:envmxdIzC $81/C3F5 D0 02 BNE $02 [$C3F9] A:0 X:0022 Y:0009 P:envmxdIZC $81/C3F7 18 CLC A:0077 X:0026 Y:0077 P:eNvmxdIzc $81/C3F8 60 RTS
$81/C3FB C2 30 REP #$30 ; A/X/Y = 16-bit $81/C3FD 9C BA 0C STZ $0CBA [$81:0CBA] A:0000 X:0026 Y:0077 P:envmxdIZc $81/C400 BD 58 18 LDA $1858,x ; Load value if the Token Handler should be executed multiple times $81/C403 8D B6 0C STA $0CB6 $81/C406 BD E0 17 LDA $17E0,x ; Setup 24-bit address in $AC-E $81/C409 85 AD STA $AD $81/C40B BD B8 17 LDA $17B8,x $81/C40E 85 AC STA $AC $81/C410 A7 AC LDA [$AC] ; Load byte from there (Index to Token Vector table) $81/C412 29 FF 00 AND #$00FF ; Remove accidentally loaded second byte $81/C415 8D EC 0C STA $0CEC ; Store loaded Token Vector table Index in $0CEC $81/C418 0A ASL A ; Multiply by 2 (each Token Vector is 2 bytes in size) $81/C419 86 00 STX $00 ; Buffer X $81/C41B AA TAX ; Transfer Token Vector table Index in X $81/C41C F4 27 C4 PEA $C427 ; Put Return Address on stack - go to $C428 after Token Handler $81/C41F BF A0 5C 10 LDA $105CA0,x ; Load Token Vector (with the help of the loaded Index) $81/C423 3A DEC A ; Dec Vector (so the program jumps right), push it on stack $81/C424 48 PHA $81/C425 A6 00 LDX $00 ; Restore X on stack $81/C427 60 RTS ; Follow Token Vector - this is NOT the end of this subroutine! $81/C428 AD B6 0C LDA $0CB6 ; Load Token Handler no-repetition flag $81/C42B F0 E3 BEQ $E3 ; [$C410] Loop if the no-repetition flag is not set $81/C42D 9D 58 18 STA $1858,x ; Store Token Handler no-repetition flag back $81/C430 A5 AD LDA $AD ; Store 24-bit Address for Token Vector table Index back $81/C432 9D E0 17 STA $17E0,x $81/C435 A5 AC LDA $AC $81/C437 9D B8 17 STA $17B8,x $81/C43A 60 RTS
$81/C43B ? (Execute Token Data)
$81/C43B C2 30 REP #$30 ; A/X/Y = 16-bit $81/C43D BD 30 18 LDA $1830,x ; Load BANK for 24-bit Slot Token Data address $81/C440 F0 53 BEQ $53 ; [$C495] If it is empty, exit $81/C442 A9 02 00 LDA #$0002 A:9582 X:0026 Y:0001 P:eNvmxdIzc $81/C445 8D BA 0C STA $0CBA [$81:0CBA] A:0002 X:0026 Y:0001 P:envmxdIzc $81/C448 BD 80 18 LDA $1880,x ; Load No-Repition flag $81/C44B 8D B6 0C STA $0CB6 $81/C44E BD 30 18 LDA $1830,x ; Setup 24-bit Address to Load Data (Token Stuff) in $AC-E $81/C451 85 AD STA $AD $81/C453 BD 08 18 LDA $1808,x $81/C456 85 AC STA $AC $81/C458 BD 52 11 LDA $1152,x[$81:1178] A:82EB X:0026 Y:0001 P:eNvmxdIzc $81/C45B 89 01 00 BIT #$0001 A:0000 X:0026 Y:0001 P:envmxdIZc $81/C45E F0 0B BEQ $0B [$C46B] A:0000 X:0026 Y:0001 P:envmxdIZc
code is missing here
$81/C46B A7 AC LDA [$AC] ; Load byte from there (Index to Token Vector table) $81/C46D 29 FF 00 AND #$00FF ; Remove accidentally loaded second byte $81/C470 8D EC 0C STA $0CEC ; Store loaded Token Vector table Index in $0CEC $81/C473 0A ASL A ; Multiply by 2 (each Token Vector is 2 bytes in size) $81/C474 86 00 STX $00 ; Buffer X $81/C476 AA TAX ; Transfer Token Vector table Index in X $81/C477 F4 82 C4 PEA $C482 ; Put Return Address on stack - go to $C483 after Token Handler $81/C47A BF A0 5C 10 LDA $105CA0,x ; Load Token Vector (with the help of the loaded Index) $81/C47E 3A DEC A ; Dec Vector (so the program jumps right), push it on stack $81/C47F 48 PHA $81/C480 A6 00 LDX $00 ; Restore X on stack $81/C482 60 RTS ; Follow Token Vector - this is NOT the end of this subroutine! $81/C483 AD B6 0C LDA $0CB6 ; Is "No-Repition flag" set? $81/C486 F0 E3 BEQ $E3 ; [$C46B] If it is, go on, else branch/loop $81/C488 9D 80 18 STA $1880,x ; Store (empty?) no-repition flag value back $81/C48B A5 AD LDA $AD ; Store 24-bit Data Load address back $81/C48D 9D 30 18 STA $1830,x $81/C490 A5 AC LDA $AC $81/C492 9D 08 18 STA $1808,x $81/C495 60 RTS
$81/C496 USELESS SUBROUTINE: Jump to $81/C49A
Eat more fruit and vegetables.
$81/C496 20 9A C4 JSR $C49A ; UNNECESSARY LINE - Senseless detour. Why not jump directly there? $81/C499 60 RTS ; UNNECESSARY LINE
$81/C49A ?
$81/C49A BD C8 16 LDA $16C8,x[$81:16EC] A:0001 X:0024 Y:0009 P:envmxdIzc $81/C49D 85 14 STA $14 [$00:0014] A:FF80 X:0024 Y:0009 P:eNvmxdIzc $81/C49F 20 B5 C5 JSR $C5B5 [$81:C5B5] A:FF80 X:0024 Y:0009 P:eNvmxdIzc $81/C4A2 A5 14 LDA $14 [$00:0014] A:FFFF X:0024 Y:0009 P:eNvmxdIzc $81/C4A4 85 00 STA $00 [$00:0000] A:8000 X:0024 Y:0009 P:eNvmxdIzc $81/C4A6 A5 16 LDA $16 [$00:0016] A:8000 X:0024 Y:0009 P:eNvmxdIzc $81/C4A8 85 02 STA $02 [$00:0002] A:FFFF X:0024 Y:0009 P:eNvmxdIzc $81/C4AA BD F0 16 LDA $16F0,x[$81:1714] A:FFFF X:0024 Y:0009 P:eNvmxdIzc $81/C4AD 85 14 STA $14 [$00:0014] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4AF 20 B5 C5 JSR $C5B5 [$81:C5B5] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4B2 A5 14 LDA $14 [$00:0014] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4B4 85 04 STA $04 [$00:0004] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4B6 A5 16 LDA $16 [$00:0016] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4B8 85 06 STA $06 [$00:0006] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4BA BD 28 16 LDA $1628,x[$81:164C] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4BD 18 CLC A:0 X:0024 Y:0009 P:envmxdIZc $81/C4BE 65 00 ADC $00 [$00:0000] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4C0 9D 28 16 STA $1628,x[$81:164C] A:8000 X:0024 Y:0009 P:eNvmxdIzc $81/C4C3 BD 50 16 LDA $1650,x[$81:1674] A:8000 X:0024 Y:0009 P:eNvmxdIzc $81/C4C6 65 02 ADC $02 [$00:0002] A:0120 X:0024 Y:0009 P:envmxdIzc $81/C4C8 9D 50 16 STA $1650,x[$81:1674] A:011F X:0024 Y:0009 P:envmxdIzC $81/C4CB BD 78 16 LDA $1678,x[$81:169C] A:011F X:0024 Y:0009 P:envmxdIzC $81/C4CE 18 CLC A:0 X:0024 Y:0009 P:envmxdIZC $81/C4CF 65 04 ADC $04 [$00:0004] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4D1 9D 78 16 STA $1678,x[$81:169C] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4D4 BD A0 16 LDA $16A0,x[$81:16C4] A:0 X:0024 Y:0009 P:envmxdIZc $81/C4D7 65 06 ADC $06 [$00:0006] A:0090 X:0024 Y:0009 P:envmxdIzc $81/C4D9 9D A0 16 STA $16A0,x[$81:16C4] A:0090 X:0024 Y:0009 P:envmxdIzc $81/C4DC 60 RTS A:0090 X:0024 Y:0009 P:envmxdIzc
$81/C4DD ?
$81/C4DD A9 FF FF LDA #$FFFF A:0 X:FFFE Y:0001 P:eNvmxdIzc $81/C4E0 8D 18 0D STA $0D18 [$81:0D18] A:FFFF X:FFFE Y:0001 P:eNvmxdIzc $81/C4E3 A2 26 00 LDX #$0026 ; Go through every Slot $81/C4E6 BD E0 17 LDA $17E0,x ; Check if Bank-entry is #$00 $81/C4E9 F0 03 BEQ $03 ; [$C4EE] If it is, the slot is unused. Branch and do next slot $81/C4EB 20 F3 C4 JSR $C4F3 [$81:C4F3] A:9583 X:0026 Y:0004 P:eNvmxdIzc $81/C4EE CA DEX ; Decrement Index/Loop Counter twice $81/C4EF CA DEX $81/C4F0 10 F4 BPL $F4 ; [$C4E6] Loop until every Slot is checked/worked off $81/C4F2 60 RTS
$81/C4F3 ?
$81/C4F3 A0 28 00 LDY #$0028 A:9583 X:0026 Y:0004 P:eNvmxdIzc $81/C4F6 84 20 STY $20 [$00:0020] A:9583 X:0026 Y:0028 P:envmxdIzc $81/C4F8 B9 F0 0C LDA $0CF0,y[$81:0D18] A:9583 X:0026 Y:0028 P:envmxdIzc $81/C4FB C9 FF FF CMP #$FFFF A:FFFF X:0026 Y:0028 P:eNvmxdIzc $81/C4FE F0 13 BEQ $13 [$C513] A:FFFF X:0026 Y:0028 P:envmxdIZC $81/C500 A8 TAY A:0026 X:0024 Y:0028 P:envmxdIzc $81/C501 BD 20 19 LDA $1920,x[$81:1944] A:0026 X:0024 Y:0026 P:envmxdIzc $81/C504 85 00 STA $00 [$00:0000] A:16C4 X:0024 Y:0026 P:envmxdIzc $81/C506 B9 20 19 LDA $1920,y[$81:1946] A:16C4 X:0024 Y:0026 P:envmxdIzc $81/C509 85 02 STA $02 [$00:0002] A:16C6 X:0024 Y:0026 P:envmxdIzc $81/C50B B2 00 LDA ($00) [$81:16C4] A:16C6 X:0024 Y:0026 P:envmxdIzc $81/C50D D2 02 CMP ($02) [$81:16C6] A:01A5 X:0024 Y:0026 P:envmxdIzc $81/C50F 10 02 BPL $02 [$C513] A:01A5 X:0024 Y:0026 P:envmxdIZC $81/C511 80 E3 BRA $E3 [$C4F6] A:0050 X:0022 Y:0024 P:eNvmxdIzc $81/C513 A4 20 LDY $20 [$00:0020] A:FFFF X:0026 Y:0028 P:envmxdIZC $81/C515 B9 F0 0C LDA $0CF0,y[$81:0D18] A:FFFF X:0026 Y:0028 P:envmxdIzC $81/C518 9D F0 0C STA $0CF0,x[$81:0D16] A:FFFF X:0026 Y:0028 P:eNvmxdIzC $81/C51B 8A TXA A:FFFF X:0026 Y:0028 P:eNvmxdIzC $81/C51C 99 F0 0C STA $0CF0,y[$81:0D18] A:0026 X:0026 Y:0028 P:envmxdIzC $81/C51F 60 RTS A:0026 X:0026 Y:0028 P:envmxdIzC
$81/C520 ? (Add the sprites of objects to the OAM buffer)
$81/C520 A2 28 00 LDX #$0028 A:0 X:FFFE Y:0001 P:eNvmxdIzc $81/C523 BD F0 0C LDA $0CF0,x[$81:0D18] A:0 X:0028 Y:0001 P:envmxdIzc $81/C526 C9 FF FF CMP #$FFFF A:FFFF X:0028 Y:0001 P:eNvmxdIzc $81/C529 D0 01 BNE $01 [$C52C] A:FFFF X:0028 Y:0001 P:envmxdIZC $81/C52B 60 RTS A:FFFF X:0028 Y:0001 P:envmxdIZC $81/C52C AA TAX A:0026 X:0028 Y:0028 P:envmxdIzc $81/C52D BD F2 11 LDA $11F2,x[$81:1218] A:0026 X:0026 Y:0028 P:envmxdIzc $81/C530 29 00 F0 AND #$F000 A:0 X:0026 Y:0028 P:envmxdIZc $81/C533 F0 29 BEQ $29 [$C55E] A:0 X:0026 Y:0028 P:envmxdIZc
code is missing here
$81/C55E BD 6A 0D LDA $0D6A,x ; Load Bank of 24-bit-address - if zero, slot is empty, do next $81/C561 F0 4F BEQ $4F ; [$C5B2] UNNECESSARY LINE - Cycles could be saved if branching to $C523 $81/C563 85 21 STA $21 ; If not empty, set up 24-bit-address in $20-22 $81/C565 BD 1A 0D LDA $0D1A,x $81/C568 85 20 STA $20 $81/C56A BD 50 16 LDA $1650,x[$81:1676] A:82AD X:0026 Y:0028 P:eNvmxdIzc $81/C56D 38 SEC A:0008 X:0026 Y:0028 P:envmxdIzc $81/C56E ED C2 0C SBC $0CC2 [$81:0CC2] A:0008 X:0026 Y:0028 P:envmxdIzC $81/C571 CD D2 0C CMP $0CD2 [$81:0CD2] A:0008 X:0026 Y:0028 P:envmxdIzC $81/C574 30 3C BMI $3C [$C5B2] A:0008 X:0026 Y:0028 P:envmxdIzc $81/C576 CD D4 0C CMP $0CD4 [$81:0CD4] A:0008 X:0026 Y:0028 P:envmxdIzc $81/C579 10 37 BPL $37 [$C5B2] A:0008 X:0026 Y:0028 P:eNvmxdIzc $81/C57B 85 00 STA $00 [$00:0000] A:0008 X:0026 Y:0028 P:eNvmxdIzc $81/C57D BD A0 16 LDA $16A0,x[$81:16C6] A:0008 X:0026 Y:0028 P:eNvmxdIzc $81/C580 38 SEC A:0077 X:0026 Y:0028 P:envmxdIzc $81/C581 ED C4 0C SBC $0CC4 [$81:0CC4] A:0077 X:0026 Y:0028 P:envmxdIzC $81/C584 CD CE 0C CMP $0CCE [$81:0CCE] A:0077 X:0026 Y:0028 P:envmxdIzC $81/C587 30 29 BMI $29 [$C5B2] A:0077 X:0026 Y:0028 P:envmxdIzc $81/C589 CD D0 0C CMP $0CD0 [$81:0CD0] A:0077 X:0026 Y:0028 P:envmxdIzc $81/C58C 10 24 BPL $24 [$C5B2] A:0077 X:0026 Y:0028 P:eNvmxdIzc $81/C58E 85 02 STA $02 [$00:0002] A:0077 X:0026 Y:0028 P:eNvmxdIzc $81/C590 64 08 STZ $08 [$00:0008] A:0077 X:0026 Y:0028 P:eNvmxdIzc $81/C592 A9 FF FF LDA #$FFFF A:0077 X:0026 Y:0028 P:eNvmxdIzc $81/C595 85 0A STA $0A [$00:000A] A:FFFF X:0026 Y:0028 P:eNvmxdIzc $81/C597 AD EE 0C LDA $0CEE [$81:0CEE] A:FFFF X:0026 Y:0028 P:eNvmxdIzc $81/C59A D0 10 BNE $10 [$C5AC] A:0001 X:0026 Y:0028 P:envmxdIzc $81/C59C BD 0A 0E LDA $0E0A,x[$81:0E2E] A:0 X:0024 Y:0024 P:envmxdIZc $81/C59F 1D 32 0E ORA $0E32,x[$81:0E56] A:0 X:0024 Y:0024 P:envmxdIZc $81/C5A2 1D 5A 0E ORA $0E5A,x[$81:0E7E] A:0 X:0024 Y:0024 P:envmxdIZc $81/C5A5 85 08 STA $08 [$00:0008] A:3000 X:0024 Y:0024 P:envmxdIzc $81/C5A7 A9 FF C1 LDA #$C1FF A:3000 X:0024 Y:0024 P:envmxdIzc $81/C5AA 85 0A STA $0A [$00:000A] A:C1FF X:0024 Y:0024 P:eNvmxdIzc $81/C5AC DA PHX ; Buffer Index/Loop Counter on stack $81/C5AD 22 49 88 80 JSL $808849 ; Set Sprites in OAM buffer $81/C5B1 FA PLX ; Restore Index/Loop Counter $81/C5B2 4C 23 C5 JMP $C523 [$81:C523] A:0030 X:0026 Y:003E P:envmxdIzc
$81/C5B5 ?
Notes for myself:
If Positive: A = $16/$17 $14 = #$00 $15 = Original $14 $16 = Original $15 $17 = #$FF $18 = #$00 $19 = #$00 If Negative: A = #$FFFF $14 = #$00 $15 = Original $14 $16 = Original $15 $17 = #$00 $18 = #$FF $19 = #$FF
$81/C5B5 64 18 STZ $18 [$00:0018] A:FF80 X:0024 Y:0009 P:eNvmxdIzc $81/C5B7 A5 14 LDA $14 [$00:0014] A:FF80 X:0024 Y:0009 P:eNvmxdIzc $81/C5B9 10 02 BPL $02 [$C5BD] A:FF80 X:0024 Y:0009 P:eNvmxdIzc $81/C5BB C6 18 DEC $18 [$00:0018] A:FF80 X:0024 Y:0009 P:eNvmxdIzc $81/C5BD 29 00 FF AND #$FF00 A:FF80 X:0024 Y:0009 P:eNvmxdIzc $81/C5C0 EB XBA A:FF00 X:0024 Y:0009 P:eNvmxdIzc $81/C5C1 85 16 STA $16 [$00:0016] A:00FF X:0024 Y:0009 P:eNvmxdIzc $81/C5C3 A5 14 LDA $14 [$00:0014] A:00FF X:0024 Y:0009 P:eNvmxdIzc $81/C5C5 29 FF 00 AND #$00FF A:FF80 X:0024 Y:0009 P:eNvmxdIzc $81/C5C8 EB XBA A:0080 X:0024 Y:0009 P:envmxdIzc $81/C5C9 85 14 STA $14 [$00:0014] A:8000 X:0024 Y:0009 P:envmxdIZc $81/C5CB A5 18 LDA $18 [$00:0018] A:8000 X:0024 Y:0009 P:envmxdIZc $81/C5CD 10 07 BPL $07 [$C5D6] A:FFFF X:0024 Y:0009 P:eNvmxdIzc $81/C5CF A5 16 LDA $16 [$00:0016] A:FFFF X:0024 Y:0009 P:eNvmxdIzc $81/C5D1 09 00 FF ORA #$FF00 A:00FF X:0024 Y:0009 P:envmxdIzc $81/C5D4 85 16 STA $16 [$00:0016] A:FFFF X:0024 Y:0009 P:eNvmxdIzc $81/C5D6 60 RTS A:FFFF X:0024 Y:0009 P:eNvmxdIzc
$81/C5D7 Restore original Token Handlers
This transfers the original Token Handlers from ROM to SRAM (after the SRAM is reset).
$81/C5D7 DA PHX ; Buffer X on stack $81/C5D8 A2 00 02 LDX #$0200 $81/C5DB BF E9 C5 81 LDA $81C5E9,x $81/C5DF 9F A0 5C 10 STA $105CA0,x $81/C5E3 CA DEX $81/C5E4 CA DEX $81/C5E5 10 F4 BPL $F4 ; [$C5DB] $81/C5E7 FA PLX ; Restore X $81/C5E8 6B RTL
$81/C5E9 Hook Vectors
The #$200 byte here get transfered to $10/5CA0-$10/5EA0 if the SRAM got reset.
$81/C5E9 BF AF ; = $10/5CA0 Vector #$00 $81/C5EB B7 B2 ; = $10/5CA2 Vector #$01 $81/C5ED 37 AE ; = $10/5CA4 Vector #$02 $81/C5EF 0A B3 ; = $10/5CA6 Vector #$03 $81/C5F1 45 B3 ; = $10/5CA8 Vector #$04 $81/C5F3 D9 91 ; = $10/5CAA Vector #$05 $81/C5F5 6C 92 ; = $10/5CAC Vector #$06 $81/C5F7 1B 93 ; = $10/5CAE Vector #$07 $81/C5F9 87 86 ; = $10/5CB0 Vector #$08 $81/C5FB C2 83 ; = $10/5CB2 Vector #$09 $81/C5FD A5 8E ; = $10/5CB4 Vector #$0A $81/C5FF BD AB ; = $10/5CB6 Vector #$0B $81/C601 73 AA ; = $10/5CB8 Vector #$0C $81/C603 91 AA ; = $10/5CBA Vector #$0D $81/C605 39 AC ; = $10/5CBC Vector #$0E $81/C607 9C AD ; = $10/5CBE Vector #$0F $81/C609 33 80 ; = $10/5CC0 Vector #$10 $81/C60B 09 85 ; = $10/5CC2 Vector #$11 $81/C60D 2A A0 ; = $10/5CC4 Vector #$12 $81/C60F 4D 81 ; = $10/5CC6 Vector #$13 $81/C611 C6 90 ; = $10/5CC8 Vector #$14 $81/C613 74 AE ; = $10/5CCA Vector #$15 $81/C615 66 A0 ; = $10/5CCC Vector #$16 $81/C617 35 8D ; = $10/5CCE Vector #$17 $81/C619 F9 A0 ; = $10/5CD0 Vector #$18 $81/C61B 7B 93 ; = $10/5CD2 Vector #$19 $81/C61D 08 95 ; = $10/5CD4 Vector #$1A $81/C61F 2B AE ; = $10/5CD6 Vector #$1B $81/C621 BA AC ; = $10/5CD8 Vector #$1C $81/C623 9C AD ; = $10/5CDA Vector #$1D $81/C625 9C AD ; = $10/5CDC Vector #$1E $81/C627 9C AD ; = $10/5CDE Vector #$1F $81/C629 A5 AF ; = $10/5CE0 Vector #$20 $81/C62B 02 80 ; = $10/5CE2 Vector #$21 $81/C62D 28 80 ; = $10/5CE4 Vector #$22 $81/C62F 9D AD ; = $10/5CE6 Vector #$23 $81/C631 80 B3 ; = $10/5CE8 Vector #$24 $81/C633 70 80 ; = $10/5CEA Vector #$25 $81/C635 90 B1 ; = $10/5CEC Vector #$26 $81/C637 56 93 ; = $10/5CEE Vector #$27 $81/C639 D3 A1 ; = $10/5CF0 Vector #$28 $81/C63B F6 A1 ; = $10/5CF2 Vector #$29 $81/C63D 18 A2 ; = $10/5CF4 Vector #$2A $81/C63F 3A A2 ; = $10/5CF6 Vector #$2B $81/C641 5C A2 ; = $10/5CF8 Vector #$2C $81/C643 4E B2 ; = $10/5CFA Vector #$2D $81/C645 14 82 ; = $10/5CFC Vector #$2E $81/C647 8F 81 ; = $10/5CFE Vector #$2F $81/C649 83 A1 ; = $10/5D00 Vector #$30 $81/C64B AB A1 ; = $10/5D02 Vector #$31 $81/C64D 50 82 ; = $10/5D04 Vector #$32 $81/C64F ED B0 ; = $10/5D06 Vector #$33 $81/C651 AA B0 ; = $10/5D08 Vector #$34 $81/C653 5A AF ; = $10/5D0A Vector #$35 $81/C655 FD 93 ; = $10/5D0C Vector #$36 $81/C657 AF B3 ; = $10/5D0E Vector #$37 $81/C659 96 80 ; = $10/5D10 Vector #$38 $81/C65A F2 98 ; = $10/5D12 Vector #$39 $81/C65C 01 A4 ; = $10/5D14 Vector #$3A $81/C65E 1A A4 ; = $10/5D16 Vector #$3B $81/C660 58 A4 ; = $10/5D18 Vector #$3C $81/C662 98 A4 ; = $10/5D1A Vector #$3D $81/C664 B8 8A ; = $10/5D1C Vector #$3E $81/C666 B8 B1 ; = $10/5D1E Vector #$3F $81/C668 AB AD ; = $10/5D20 Vector #$40 $81/C66A 0A AE ; = $10/5D22 Vector #$41 $81/C66C CC B6 ; = $10/5D24 Vector #$42 $81/C66E 1B B6 ; = $10/5D26 Vector #$43 $81/C670 D3 B3 ; = $10/5D28 Vector #$44 $81/C672 EA B3 ; = $10/5D2A Vector #$45 $81/C674 F3 B3 ; = $10/5D2C Vector #$46 $81/C676 84 B4 ; = $10/5D2E Vector #$47 $81/C678 D9 B4 ; = $10/5D30 Vector #$48 $81/C67A 40 B5 ; = $10/5D32 Vector #$49 $81/C67C 9D B7 ; = $10/5D34 Vector #$4A $81/C67E 53 B8 ; = $10/5D36 Vector #$4B $81/C680 9C AD ; = $10/5D38 Vector #$4C $81/C682 9C AD ; = $10/5D3A Vector #$4D $81/C684 9C AD ; = $10/5D3C Vector #$4E $81/C686 9C AD ; = $10/5D3E Vector #$4F $81/C688 59 94 ; = $10/5D40 Vector #$50 $81/C68A 8E 94 ; = $10/5D42 Vector #$51 $81/C68C CA 80 ; = $10/5D44 Vector #$52 $81/C68E C5 85 ; = $10/5D46 Vector #$53 $81/C690 6F 85 ; = $10/5D48 Vector #$54 $81/C692 87 A3 ; = $10/5D4A Vector #$55 $81/C694 C3 94 ; = $10/5D4C Vector #$56 $81/C696 E8 B1 ; = $10/5D4E Vector #$57 $81/C698 19 B2 ; = $10/5D50 Vector #$58 $81/C69A D6 A4 ; = $10/5D52 Vector #$59 $81/C69C 9C AD ; = $10/5D54 Vector #$5A $81/C69E 9C AD ; = $10/5D56 Vector #$5B $81/C6A0 9C AD ; = $10/5D58 Vector #$5C $81/C6A2 9C AD ; = $10/5D5A Vector #$5D $81/C6A4 9C AD ; = $10/5D5C Vector #$5E $81/C6A6 9C AD ; = $10/5D5E Vector #$5F $81/C6A8 A7 84 ; = $10/5D60 Vector #$60 $81/C6AA A6 B1 ; = $10/5D62 Vector #$61 $81/C6AC 91 B3 ; = $10/5D64 Vector #$62 $81/C6AE D3 84 ; = $10/5D66 Vector #$63 $81/C6B0 EE 84 ; = $10/5D68 Vector #$64 $81/C6B2 1D AA ; = $10/5D6A Vector #$65 $81/C6B4 7A A2 ; = $10/5D6C Vector #$66 $81/C6B6 F0 A2 ; = $10/5D6E Vector #$67 $81/C6B8 27 A3 ; = $10/5D70 Vector #$68 $81/C6BA EF AD ; = $10/5D72 Vector #$69 $81/C6BC 78 85 ; = $10/5D74 Vector #$6A $81/C6BE 32 8A ; = $10/5D76 Vector #$6B $81/C6C0 1E AE ; = $10/5D78 Vector #$6C $81/C6C2 57 95 ; = $10/5D7A Vector #$6D $81/C6C4 C0 95 ; = $10/5D7C Vector #$6E $81/C6C6 05 96 ; = $10/5D7E Vector #$6F $81/C6C8 A9 AA ; = $10/5D80 Vector #$70 $81/C6CA CA AA ; = $10/5D82 Vector #$71 $81/C6CC E5 A8 ; = $10/5D84 Vector #$72 $81/C6CE EB AA ; = $10/5D86 Vector #$73 $81/C6D0 54 AB ; = $10/5D88 Vector #$74 $81/C6D2 F8 AB ; = $10/5D8A Vector #$75 $81/C6D4 D5 A6 ; = $10/5D8C Vector #$76 $81/C6D6 D5 AD ; = $10/5D8E Vector #$77 $81/C6D8 43 B7 ; = $10/5D90 Vector #$78 $81/C6DA 79 B7 ; = $10/5D92 Vector #$79 $81/C6DC 8B B7 ; = $10/5D94 Vector #$7A $81/C6DE 6E AD ; = $10/5D96 Vector #$7B $81/C6E0 6F B5 ; = $10/5D98 Vector #$7C $81/C6E2 3C 88 ; = $10/5D9A Vector #$7D $81/C6E4 1A 86 ; = $10/5D9C Vector #$7E $81/C6E6 06 8F ; = $10/5D9E Vector #$7F $81/C6E8 08 8B ; = $10/5DA0 Vector #$80
$81/C7D0 DA PHX ; Buffer X and Flag Register value on Stack $81/C7D1 08 PHP $81/C7D2 22 DD C7 81 JSL $81C7DD[$81:C7DD] A:8000 X:FFFE Y:0 P:envmxdIzC $81/C7D6 22 0E C8 81 JSL $81C80E[$81:C80E] A:0010 X:FFFE Y:0 P:eNvmxdIzC $81/C7DA 28 PLP ; Restore X and Flag Register value $81/C7DB FA PLX $81/C7DC 6B RTL
$81/C7DD DA PHX ; Buffer X and Flag Register value on Stack $81/C7DE 08 PHP $81/C7DF AD 01 01 LDA $0101 ; Load Object Size and Object Base $81/C7E2 18 CLC A:0003 X:FFFE Y:0 P:envmxdIzC $81/C7E3 6A ROR A A:0003 X:FFFE Y:0 P:envmxdIzc $81/C7E4 6A ROR A A:0001 X:FFFE Y:0 P:envmxdIzC $81/C7E5 6A ROR A A:8000 X:FFFE Y:0 P:eNvmxdIzC $81/C7E6 6A ROR A A:C000 X:FFFE Y:0 P:eNvmxdIzc $81/C7E7 29 00 E0 AND #$E000 A:6000 X:FFFE Y:0 P:envmxdIzc $81/C7EA 8D 78 12 STA $1278 [$80:1278] A:6000 X:FFFE Y:0 P:envmxdIzc $81/C7ED A9 01 20 LDA #$2001 A:6000 X:FFFE Y:0 P:envmxdIzc $81/C7F0 8D 7C 12 STA $127C [$80:127C] A:2001 X:FFFE Y:0 P:envmxdIzc $81/C7F3 A9 00 00 LDA #$0000 A:2001 X:FFFE Y:0 P:envmxdIzc $81/C7F6 8D 7A 12 STA $127A [$80:127A] A:0 X:FFFE Y:0 P:envmxdIZc $81/C7F9 A9 00 00 LDA #$0000 A:0 X:FFFE Y:0 P:envmxdIZc $81/C7FC 0A ASL A A:0 X:FFFE Y:0 P:envmxdIZc $81/C7FD 8D 7E 12 STA $127E [$80:127E] A:0 X:FFFE Y:0 P:envmxdIZc $81/C800 8D 82 12 STA $1282 [$80:1282] A:0 X:FFFE Y:0 P:envmxdIZc $81/C803 A9 07 00 LDA #$0007 A:0 X:FFFE Y:0 P:envmxdIZc $81/C806 1A INC A A:0007 X:FFFE Y:0 P:envmxdIzc $81/C807 0A ASL A A:0008 X:FFFE Y:0 P:envmxdIzc $81/C808 8D 80 12 STA $1280 [$80:1280] A:0010 X:FFFE Y:0 P:envmxdIzc $81/C80B 28 PLP ; Restore X and Flag Register value $81/C80C FA PLX $81/C80D 6B RTL
$81/C80E DA PHX ; Buffer X and Flag Register value on Stack $81/C80F 08 PHP $81/C810 A9 00 00 LDA #$0000 A:0010 X:FFFE Y:0 P:eNvmxdIzC $81/C813 8D A6 12 STA $12A6 [$80:12A6] A:0 X:FFFE Y:0 P:envmxdIZC $81/C816 8D 20 13 STA $1320 [$80:1320] A:0 X:FFFE Y:0 P:envmxdIZC $81/C819 AD 7E 12 LDA $127E [$80:127E] A:0 X:FFFE Y:0 P:envmxdIZC $81/C81C 0A ASL A A:0 X:FFFE Y:0 P:envmxdIZC $81/C81D 0A ASL A A:0 X:FFFE Y:0 P:envmxdIZc $81/C81E 0A ASL A A:0 X:FFFE Y:0 P:envmxdIZc $81/C81F 0A ASL A A:0 X:FFFE Y:0 P:envmxdIZc $81/C820 85 00 STA $00 [$00:0000] A:0 X:FFFE Y:0 P:envmxdIZc $81/C822 AD 80 12 LDA $1280 [$80:1280] A:0 X:FFFE Y:0 P:envmxdIZc $81/C825 0A ASL A A:0010 X:FFFE Y:0 P:envmxdIzc $81/C826 0A ASL A A:0020 X:FFFE Y:0 P:envmxdIzc $81/C827 0A ASL A A:0040 X:FFFE Y:0 P:envmxdIzc $81/C828 0A ASL A A:0080 X:FFFE Y:0 P:envmxdIzc $81/C829 85 02 STA $02 [$00:0002] A:0100 X:FFFE Y:0 P:envmxdIzc $81/C82B A6 00 LDX $00 [$00:0000] A:0100 X:FFFE Y:0 P:envmxdIzc $81/C82D A9 00 00 LDA #$0000 A:0100 X:0 Y:0 P:envmxdIZc $81/C830 9F 00 21 7E STA $7E2100,x[$7E:2100] A:0 X:0 Y:0 P:envmxdIZc $81/C834 A5 00 LDA $00 [$00:0000] A:0 X:0 Y:0 P:envmxdIZc $81/C836 69 10 00 ADC #$0010 A:0 X:0 Y:0 P:envmxdIZc $81/C839 85 00 STA $00 [$00:0000] A:0010 X:0 Y:0 P:envmxdIzc $81/C83B C5 02 CMP $02 [$00:0002] A:0010 X:0 Y:0 P:envmxdIzc $81/C83D 30 EC BMI $EC [$C82B] A:0010 X:0 Y:0 P:eNvmxdIzc $81/C83F A0 28 00 LDY #$0028 A:0100 X:00F0 Y:0 P:envmxdIZC $81/C842 A9 00 00 LDA #$0000 A:0100 X:00F0 Y:0028 P:envmxdIzC $81/C845 99 A8 12 STA $12A8,y[$80:12D0] A:0 X:00F0 Y:0028 P:envmxdIZC $81/C848 99 D0 12 STA $12D0,y[$80:12F8] A:0 X:00F0 Y:0028 P:envmxdIZC $81/C84B 99 F8 12 STA $12F8,y[$80:1320] A:0 X:00F0 Y:0028 P:envmxdIZC $81/C84E 99 22 13 STA $1322,y[$80:134A] A:0 X:00F0 Y:0028 P:envmxdIZC $81/C851 99 4A 13 STA $134A,y[$80:1372] A:0 X:00F0 Y:0028 P:envmxdIZC $81/C854 99 72 13 STA $1372,y[$80:139A] A:0 X:00F0 Y:0028 P:envmxdIZC $81/C857 88 DEY A:0 X:00F0 Y:0028 P:envmxdIZC $81/C858 88 DEY A:0 X:00F0 Y:0027 P:envmxdIzC $81/C859 10 E7 BPL $E7 [$C842] A:0 X:00F0 Y:0026 P:envmxdIzC $81/C85B A0 20 00 LDY #$0020 A:0 X:00F0 Y:FFFE P:eNvmxdIzC $81/C85E A9 00 00 LDA #$0000 A:0 X:00F0 Y:0020 P:envmxdIzC $81/C861 99 84 12 STA $1284,y[$80:12A4] A:0 X:00F0 Y:0020 P:envmxdIZC $81/C864 88 DEY A:0 X:00F0 Y:0020 P:envmxdIZC $81/C865 88 DEY A:0 X:00F0 Y:001F P:envmxdIzC $81/C866 10 F6 BPL $F6 [$C85E] A:0 X:00F0 Y:001E P:envmxdIzC $81/C868 9C A3 13 STZ $13A3 [$80:13A3] A:0 X:00F0 Y:FFFE P:eNvmxdIzC $81/C86B 9C A5 13 STZ $13A5 [$80:13A5] A:0 X:00F0 Y:FFFE P:eNvmxdIzC $81/C86E 28 PLP ; Restore X and Flag Register value $81/C86F FA PLX $81/C870 6B RTL
$81/C8C3 ?
$81/C8C3 DA PHX A:0093 X:0026 Y:0001 P:envmxdIzc $81/C8C4 5A PHY A:0093 X:0026 Y:0001 P:envmxdIzc $81/C8C5 08 PHP A:0093 X:0026 Y:0001 P:envmxdIzc $81/C8C6 C2 30 REP #$30 A:0093 X:0026 Y:0001 P:envmxdIzc $81/C8C8 9C A4 12 STZ $12A4 [$81:12A4] A:0093 X:0026 Y:0001 P:envmxdIzc $81/C8CB A0 01 00 LDY #$0001 A:0093 X:0026 Y:0001 P:envmxdIzc $81/C8CE B7 20 LDA [$20],y[$93:AC90] A:0093 X:0026 Y:0001 P:envmxdIzc $81/C8D0 85 24 STA $24 [$00:0024] A:93B1 X:0026 Y:0001 P:eNvmxdIzc $81/C8D2 85 27 STA $27 [$00:0027] A:93B1 X:0026 Y:0001 P:eNvmxdIzc $81/C8D4 A0 00 00 LDY #$0000 A:93B1 X:0026 Y:0001 P:eNvmxdIzc $81/C8D7 B7 20 LDA [$20],y[$93:AC8F] A:93B1 X:0026 Y:0000 P:envmxdIZc $81/C8D9 85 23 STA $23 [$00:0023] A:B19F X:0026 Y:0000 P:eNvmxdIzc $81/C8DB 85 26 STA $26 [$00:0026] A:B19F X:0026 Y:0000 P:eNvmxdIzc $81/C8DD 20 E1 CC JSR $CCE1 [$81:CCE1] A:B19F X:0026 Y:0000 P:eNvmxdIzc $81/C8E0 90 0F BCC $0F [$C8F1] A:B19F X:0026 Y:FFFE P:eNvmxdIzc
$81/C8E2 B9 72 13 LDA $1372,y[$81:1372] A:0093 X:0024 Y:0 P:envmxdIZC $81/C8E5 9D 32 0E STA $0E32,x[$81:0E56] A:0 X:0024 Y:0 P:envmxdIZC $81/C8E8 B9 F8 12 LDA $12F8,y[$81:12F8] A:0 X:0024 Y:0 P:envmxdIZC $81/C8EB 9D 0A 0E STA $0E0A,x[$81:0E2E] A:0 X:0024 Y:0 P:envmxdIZC $81/C8EE 4C 60 C9 JMP $C960 [$81:C960] A:0 X:0024 Y:0 P:envmxdIZC
$81/C8F1 22 9C CA 81 JSL $81CA9C[$81:CA9C] A:B19F X:0026 Y:FFFE P:eNvmxdIzc $81/C8F5 B0 64 BCS $64 [$C95B] A:0000 X:0026 Y:FFFE P:envmxdIzc $81/C8F7 AC 20 13 LDY $1320 [$81:1320] A:0000 X:0026 Y:FFFE P:envmxdIzc $81/C8FA A5 26 LDA $26 [$00:0026] A:0000 X:0026 Y:0000 P:envmxdIZc $81/C8FC 99 22 13 STA $1322,y[$81:1322] A:B19F X:0026 Y:0000 P:eNvmxdIzc $81/C8FF A5 28 LDA $28 [$00:0028] A:B19F X:0026 Y:0000 P:eNvmxdIzc $81/C901 29 FF 00 AND #$00FF A:0093 X:0026 Y:0000 P:envmxdIzc $81/C904 99 4A 13 STA $134A,y[$81:134A] A:0093 X:0026 Y:0000 P:envmxdIzc $81/C907 BD 32 0E LDA $0E32,x[$81:0E58] A:0093 X:0026 Y:0000 P:envmxdIzc $81/C90A 99 72 13 STA $1372,y[$81:1372] A:0000 X:0026 Y:0000 P:envmxdIZc $81/C90D A0 04 00 LDY #$0004 A:0000 X:0026 Y:0000 P:envmxdIZc $81/C910 B7 20 LDA [$20],y[$93:AC93] A:0000 X:0026 Y:0004 P:envmxdIzc $81/C912 85 24 STA $24 [$00:0024] A:93AC X:0026 Y:0004 P:eNvmxdIzc $81/C914 85 27 STA $27 [$00:0027] A:93AC X:0026 Y:0004 P:eNvmxdIzc $81/C916 A0 03 00 LDY #$0003 A:93AC X:0026 Y:0004 P:eNvmxdIzc $81/C919 B7 20 LDA [$20],y[$93:AC92] A:93AC X:0026 Y:0003 P:envmxdIzc $81/C91B 85 23 STA $23 [$00:0023] A:AC95 X:0026 Y:0003 P:eNvmxdIzc $81/C91D 85 26 STA $26 [$00:0026] A:AC95 X:0026 Y:0003 P:eNvmxdIzc $81/C91F 20 FD CC JSR $CCFD [$81:CCFD] A:AC95 X:0026 Y:0003 P:eNvmxdIzc $81/C922 90 09 BCC $09 [$C92D] A:AC95 X:0026 Y:FFFE P:eNvmxdIzc
code is missing here
$81/C92D 22 68 C9 81 JSL $81C968[$81:C968] A:AC95 X:0026 Y:FFFE P:eNvmxdIzc $81/C931 B0 28 BCS $28 [$C95B] A:0008 X:0026 Y:0000 P:envmxdIzc $81/C933 AC A6 12 LDY $12A6 [$81:12A6] A:0008 X:0026 Y:0000 P:envmxdIzc $81/C936 A5 26 LDA $26 [$00:0026] A:0008 X:0026 Y:0000 P:envmxdIZc $81/C938 99 A8 12 STA $12A8,y[$81:12A8] A:AC95 X:0026 Y:0000 P:eNvmxdIzc $81/C93B A5 28 LDA $28 [$00:0028] A:AC95 X:0026 Y:0000 P:eNvmxdIzc $81/C93D 29 FF 00 AND #$00FF A:EE93 X:0026 Y:0000 P:eNvmxdIzc $81/C940 0D A4 12 ORA $12A4 [$81:12A4] A:0093 X:0026 Y:0000 P:envmxdIzc $81/C943 99 D0 12 STA $12D0,y[$81:12D0] A:0093 X:0026 Y:0000 P:envmxdIzc $81/C946 BD 0A 0E LDA $0E0A,x[$81:0E30] A:0093 X:0026 Y:0000 P:envmxdIzc $81/C949 99 F8 12 STA $12F8,y[$81:12F8] A:0000 X:0026 Y:0000 P:envmxdIZc $81/C94C EE 20 13 INC $1320 [$81:1320] A:0000 X:0026 Y:0000 P:envmxdIZc $81/C94F EE 20 13 INC $1320 [$81:1320] A:0000 X:0026 Y:0000 P:envmxdIzc $81/C952 EE A6 12 INC $12A6 [$81:12A6] A:0000 X:0026 Y:0000 P:envmxdIzc $81/C955 EE A6 12 INC $12A6 [$81:12A6] A:0000 X:0026 Y:0000 P:envmxdIzc $81/C958 4C 60 C9 JMP $C960 [$81:C960] A:0000 X:0026 Y:0000 P:envmxdIzc $81/C960 EE 1C 02 INC $021C [$81:021C] A:0000 X:0026 Y:0000 P:envmxdIzc $81/C963 28 PLP A:0000 X:0026 Y:0000 P:envmxdIzc $81/C964 7A PLY A:0000 X:0026 Y:0000 P:envmxdIzc $81/C965 FA PLX A:0000 X:0026 Y:0001 P:envmxdIzc $81/C966 18 CLC A:0000 X:0026 Y:0001 P:envmxdIzc $81/C967 6B RTL A:0000 X:0026 Y:0001 P:envmxdIzc
$81/C968 ?
Notes:
First Double Byte is a command, everything afterwards is Data
Bit 0 of Double byte is a case decider at c9ab, the rest of it is the number of bytes of the data to transfer to vram
$81/C968 DA PHX A:AC95 X:0026 Y:FFFE P:eNvmxdIzc $81/C969 08 PHP A:AC95 X:0026 Y:FFFE P:eNvmxdIzc $81/C96A C2 30 REP #$30 A:AC95 X:0026 Y:FFFE P:eNvmxdIzc $81/C96C A7 23 LDA [$23] [$93:AC95] A:AC95 X:0026 Y:FFFE P:eNvmxdIzc $81/C96E 29 01 00 AND #$0001 A:0801 X:0026 Y:FFFE P:envmxdIzc $81/C971 85 08 STA $08 [$00:0008] A:0001 X:0026 Y:FFFE P:envmxdIzc $81/C973 AD 78 12 LDA $1278 [$81:1278] A:0001 X:0026 Y:FFFE P:envmxdIzc $81/C976 18 CLC A:6000 X:0026 Y:FFFE P:envmxdIzc $81/C977 6D 7A 12 ADC $127A [$81:127A] A:6000 X:0026 Y:FFFE P:envmxdIzc $81/C97A 85 02 STA $02 [$00:0002] A:6000 X:0026 Y:FFFE P:envmxdIzc $81/C97C AD 7A 12 LDA $127A [$81:127A] A:6000 X:0026 Y:FFFE P:envmxdIzc $81/C97F 4A LSR A A:0000 X:0026 Y:FFFE P:envmxdIZc $81/C980 4A LSR A A:0000 X:0026 Y:FFFE P:envmxdIZc $81/C981 4A LSR A A:0000 X:0026 Y:FFFE P:envmxdIZc $81/C982 4A LSR A A:0000 X:0026 Y:FFFE P:envmxdIZc $81/C983 9D 0A 0E STA $0E0A,x[$81:0E30] A:0000 X:0026 Y:FFFE P:envmxdIZc $81/C986 A7 23 LDA [$23] [$93:AC95] A:0000 X:0026 Y:FFFE P:envmxdIZc $81/C988 29 FE FF AND #$FFFE A:0801 X:0026 Y:FFFE P:envmxdIzc $81/C98B 85 04 STA $04 [$00:0004] A:0800 X:0026 Y:FFFE P:envmxdIzc $81/C98D 4A LSR A A:0800 X:0026 Y:FFFE P:envmxdIzc $81/C98E 18 CLC A:0400 X:0026 Y:FFFE P:envmxdIzc $81/C98F 6D 7A 12 ADC $127A [$81:127A] A:0400 X:0026 Y:FFFE P:envmxdIzc $81/C992 CD 7C 12 CMP $127C [$81:127C] A:0400 X:0026 Y:FFFE P:envmxdIzc $81/C995 30 03 BMI $03 [$C99A] A:0400 X:0026 Y:FFFE P:eNvmxdIzc
code is missing here
$81/C99A 8D 7A 12 STA $127A [$81:127A] A:0400 X:0026 Y:FFFE P:eNvmxdIzc $81/C99D E6 23 INC $23 ; Increment Data Load Address twice $81/C99F E6 23 INC $23 $81/C9A1 A9 00 7F LDA #$7F00 ; Setup address $7F/C000 in $2C-E $81/C9A4 85 2D STA $2D $81/C9A6 A9 00 C0 LDA #$C000 $81/C9A9 85 2C STA $2C $81/C9AB A5 08 LDA $08 [$00:0008] A:C000 X:0026 Y:FFFE P:eNvmxdIzc $81/C9AD D0 0D BNE $0D [$C9BC] A:0001 X:0026 Y:FFFE P:envmxdIzc $81/C9AF A4 04 LDY $04 [$00:0004] A:0 X:0026 Y:FFFE P:envmxdIZc $81/C9B1 B7 23 LDA [$23],y[$82:9B58] A:0 X:0026 Y:0400 P:envmxdIzc $81/C9B3 97 2C STA [$2C],y[$7F:C400] A:882A X:0026 Y:0400 P:eNvmxdIzc $81/C9B5 88 DEY A:882A X:0026 Y:0400 P:eNvmxdIzc $81/C9B6 88 DEY A:882A X:0026 Y:03FF P:envmxdIzc $81/C9B7 10 F8 BPL $F8 [$C9B1] A:882A X:0026 Y:03FE P:envmxdIzc $81/C9B9 4C CE C9 JMP $C9CE [$81:C9CE] A:0 X:0026 Y:FFFE P:eNvmxdIzc $81/C9BC A5 23 LDA $23 [$00:0023] A:0001 X:0026 Y:FFFE P:envmxdIzc $81/C9BE 85 78 STA $78 [$00:0078] A:AC97 X:0026 Y:FFFE P:eNvmxdIzc $81/C9C0 A6 24 LDX $24 [$00:0024] A:AC97 X:0026 Y:FFFE P:eNvmxdIzc $81/C9C2 86 79 STX $79 [$00:0079] A:AC97 X:93AC Y:FFFE P:eNvmxdIzc $81/C9C4 22 9F 93 80 JSL $80939F[$80:939F] A:AC97 X:93AC Y:FFFE P:eNvmxdIzc
Arguments: $81/C9C8 80 00 C0 ; Data for $01xx registers is at $80/90D7
$81/C9CB 4C CE C9 JMP $C9CE ; UNNECESSARY LINE $81/C9CE A2 00 00 LDX #$0000 A:0093 X:0000 Y:0800 P:eNvmxdIzc $81/C9D1 AD A4 12 LDA $12A4 [$81:12A4] A:0093 X:0000 Y:0800 P:envmxdIZc $81/C9D4 C9 00 80 CMP #$8000 A:0000 X:0000 Y:0800 P:envmxdIZc $81/C9D7 D0 03 BNE $03 [$C9DC] A:0000 X:0000 Y:0800 P:eNvmxdIzc $81/C9D9 4C 16 CA JMP $CA16 [$81:CA16] A:8000 X:0000 Y:0800 P:envmxdIZC $81/C9DC 8A TXA A:0000 X:0000 Y:0800 P:eNvmxdIzc $81/C9DD 29 10 00 AND #$0010 A:0000 X:0000 Y:0800 P:envmxdIZc $81/C9E0 F0 2A BEQ $2A [$CA0C] A:0000 X:0000 Y:0800 P:envmxdIZc $81/C9E2 A5 2D LDA $2D [$00:002D] A:0010 X:0010 Y:0800 P:envmxdIzc $81/C9E4 85 2A STA $2A [$00:002A] A:7FC0 X:0010 Y:0800 P:envmxdIzc $81/C9E6 A5 2C LDA $2C [$00:002C] A:7FC0 X:0010 Y:0800 P:envmxdIzc $81/C9E8 38 SEC A:C010 X:0010 Y:0800 P:eNvmxdIzc $81/C9E9 E9 10 00 SBC #$0010 A:C010 X:0010 Y:0800 P:eNvmxdIzC $81/C9EC 85 29 STA $29 [$00:0029] A:C000 X:0010 Y:0800 P:eNvmxdIzC $81/C9EE A0 00 00 LDY #$0000 A:C000 X:0010 Y:0800 P:eNvmxdIzC $81/C9F1 B7 29 LDA [$29],y[$7F:C000] A:C000 X:0010 Y:0000 P:envmxdIZC $81/C9F3 C8 INY A:0000 X:0010 Y:0000 P:envmxdIZC $81/C9F4 17 29 ORA [$29],y[$7F:C001] A:0000 X:0010 Y:0001 P:envmxdIzC $81/C9F6 88 DEY A:0300 X:0010 Y:0001 P:envmxdIzC $81/C9F7 17 2C ORA [$2C],y[$7F:C010] A:0300 X:0010 Y:0000 P:envmxdIZC $81/C9F9 C8 INY A:0300 X:0010 Y:0000 P:envmxdIzC $81/C9FA 57 2C EOR [$2C],y[$7F:C011] A:0300 X:0010 Y:0001 P:envmxdIzC $81/C9FC 29 FF 00 AND #$00FF A:0003 X:0010 Y:0001 P:envmxdIzC $81/C9FF EB XBA A:0003 X:0010 Y:0001 P:envmxdIzC $81/CA00 85 06 STA $06 [$00:0006] A:0300 X:0010 Y:0001 P:envmxdIZC $81/CA02 88 DEY A:0300 X:0010 Y:0001 P:envmxdIZC $81/CA03 B7 2C LDA [$2C],y[$7F:C010] A:0300 X:0010 Y:0000 P:envmxdIZC $81/CA05 29 FF 00 AND #$00FF A:0300 X:0010 Y:0000 P:envmxdIzC $81/CA08 05 06 ORA $06 [$00:0006] A:0000 X:0010 Y:0000 P:envmxdIZC $81/CA0A 87 2C STA [$2C] [$7F:C010] A:0300 X:0010 Y:0000 P:envmxdIzC $81/CA0C E6 2C INC $2C [$00:002C] A:0000 X:0000 Y:0800 P:envmxdIZc $81/CA0E E6 2C INC $2C [$00:002C] A:0000 X:0000 Y:0800 P:eNvmxdIzc $81/CA10 E8 INX A:0000 X:0000 Y:0800 P:eNvmxdIzc $81/CA11 E8 INX A:0000 X:0001 Y:0800 P:envmxdIzc $81/CA12 E4 04 CPX $04 [$00:0004] A:0000 X:0002 Y:0800 P:envmxdIzc $81/CA14 30 C6 BMI $C6 [$C9DC] A:0000 X:0002 Y:0800 P:eNvmxdIzc $81/CA16 E2 20 SEP #$20 ; A = 8-bit $81/CA18 C2 10 REP #$10 ; X/Y = 16-bit $81/CA1A AD 1B 02 LDA $021B ; Is FBLANK active? $81/CA1D 89 80 BIT #$80 $81/CA1F D0 03 BNE $03 ; [$CA24] $81/CA21 4C 60 CA JMP $CA60 [$81:CA60] A:C00F X:0800 Y:0000 P:envMxdIZC $81/CA24 48 PHA ; Buffer current $2100 value on stack $81/CA25 A9 80 LDA #$80 ; Activate FBLANK $81/CA27 8D 00 21 STA $2100 $81/CA2A E2 20 SEP #$20 ; A = 8-bit $81/CA2C C2 10 REP #$10 ; X/Y = 16-bit $81/CA2E A4 02 LDY $02 [$00:0002] A:8080 X:0 Y:FFFE P:eNvMxdIzC $81/CA30 8C 16 21 STY $2116 [$81:2116] A:8080 X:0 Y:0 P:envMxdIZC $81/CA33 A9 80 LDA #$80 ; VRAM transfer Settings $81/CA35 8D 15 21 STA $2115 $81/CA38 A0 01 18 LDY #$1801 ; Setup VRAM DMA $81/CA3B 8C 00 43 STY $4300 $81/CA3E A0 00 C0 LDY #$C000 ; Source: $7F/C000 $81/CA41 8C 02 43 STY $4302 $81/CA44 A9 7F LDA #$7F $81/CA46 8D 04 43 STA $4304 $81/CA49 A4 04 LDY $04 [$00:0004] A:807F X:0 Y:C000 P:envMxdIzC $81/CA4B 8C 05 43 STY $4305 [$81:4305] A:807F X:0 Y:0400 P:envMxdIzC $81/CA4E A9 01 LDA #$01 ; Activate DMA $81/CA50 8D 0B 42 STA $420B $81/CA53 68 PLA ; Restore old value in $2100 and its buffers $81/CA54 8D 00 21 STA $2100 $81/CA57 8D 1B 02 STA $021B $81/CA5A 8D 00 01 STA $0100 $81/CA5D 4C 94 CA JMP $CA94 ; Exit $81/CA60 C2 30 REP #$30 ; A/X/Y = 16-bit $81/CA62 A9 00 7F LDA #$7F00 A:C00F X:0800 Y:0000 P:envmxdIZC $81/CA65 8D AC 13 STA $13AC [$81:13AC] A:7F00 X:0800 Y:0000 P:envmxdIzC $81/CA68 A9 00 C0 LDA #$C000 A:7F00 X:0800 Y:0000 P:envmxdIzC $81/CA6B 8D AB 13 STA $13AB [$81:13AB] A:C000 X:0800 Y:0000 P:eNvmxdIzC $81/CA6E A5 02 LDA $02 [$00:0002] A:C000 X:0800 Y:0000 P:eNvmxdIzC $81/CA70 8D AE 13 STA $13AE [$81:13AE] A:6000 X:0800 Y:0000 P:envmxdIzC $81/CA73 A5 04 LDA $04 [$00:0004] A:6000 X:0800 Y:0000 P:envmxdIzC $81/CA75 8D A9 13 STA $13A9 [$81:13A9] A:0800 X:0800 Y:0000 P:envmxdIzC $81/CA78 EE B0 13 INC $13B0 [$81:13B0] A:0800 X:0800 Y:0000 P:envmxdIzC $81/CA7B A9 01 00 LDA #$0001 A:0800 X:0800 Y:0000 P:envmxdIzC $81/CA7E 8D A5 13 STA $13A5 [$81:13A5] A:0001 X:0800 Y:0000 P:envmxdIzC $81/CA81 9C A3 13 STZ $13A3 [$81:13A3] A:0001 X:0800 Y:0000 P:envmxdIzC $81/CA84 A9 00 81 LDA #$8100 A:0001 X:0800 Y:0000 P:envmxdIzC $81/CA87 8D 5E 06 STA $065E [$81:065E] A:8100 X:0800 Y:0000 P:eNvmxdIzC $81/CA8A A9 89 CD LDA #$CD89 A:8100 X:0800 Y:0000 P:eNvmxdIzC $81/CA8D 8D 5D 06 STA $065D [$81:065D] A:CD89 X:0800 Y:0000 P:eNvmxdIzC $81/CA90 22 B6 91 80 JSL $8091B6[$80:91B6] A:CD89 X:0800 Y:0000 P:eNvmxdIzC $81/CA94 28 PLP ; Restore X and Flag Register value $81/CA95 FA PLX $81/CA96 18 CLC ; Clear Error flag? $81/CA97 6B RTL
$81/CA9C DA PHX A:B19F X:0026 Y:FFFE P:eNvmxdIzc $81/CA9D 5A PHY A:B19F X:0026 Y:FFFE P:eNvmxdIzc $81/CA9E 08 PHP A:B19F X:0026 Y:FFFE P:eNvmxdIzc $81/CA9F C2 30 REP #$30 A:B19F X:0026 Y:FFFE P:eNvmxdIzc $81/CAA1 AD 7E 12 LDA $127E [$81:127E] A:B19F X:0026 Y:FFFE P:eNvmxdIzc $81/CAA4 8D 82 12 STA $1282 [$81:1282] A:0000 X:0026 Y:FFFE P:envmxdIZc $81/CAA7 AD 82 12 LDA $1282 [$81:1282] A:0000 X:0026 Y:FFFE P:envmxdIZc $81/CAAA CD 80 12 CMP $1280 [$81:1280] A:0000 X:0026 Y:FFFE P:envmxdIZc $81/CAAD 30 03 BMI $03 [$CAB2] A:0000 X:0026 Y:FFFE P:eNvmxdIzc
code is missing here
$81/CAB2 AD 82 12 LDA $1282 [$81:1282] A:0000 X:0026 Y:FFFE P:eNvmxdIzc $81/CAB5 0A ASL A A:0000 X:0026 Y:FFFE P:envmxdIZc $81/CAB6 A8 TAY A:0000 X:0026 Y:FFFE P:envmxdIZc $81/CAB7 B9 84 12 LDA $1284,y[$81:1284] A:0000 X:0026 Y:0000 P:envmxdIZc $81/CABA F0 06 BEQ $06 [$CAC2] A:0000 X:0026 Y:0000 P:envmxdIZc $81/CABC EE 82 12 INC $1282 [$81:1282] A:0010 X:0026 Y:0000 P:envmxdIzc $81/CABF 4C A7 CA JMP $CAA7 [$81:CAA7] A:0010 X:0026 Y:0000 P:envmxdIzc $81/CAC2 AD 82 12 LDA $1282 [$81:1282] A:0000 X:0026 Y:0000 P:envmxdIZc $81/CAC5 85 02 STA $02 [$00:0002] A:0000 X:0026 Y:0000 P:envmxdIZc $81/CAC7 A7 23 LDA [$23] [$93:B19F] A:0000 X:0026 Y:0000 P:envmxdIZc $81/CAC9 85 00 STA $00 [$00:0000] A:0010 X:0026 Y:0000 P:envmxdIzc $81/CACB C9 20 00 CMP #$0020 A:0010 X:0026 Y:0000 P:envmxdIzc $81/CACE F0 08 BEQ $08 [$CAD8] A:0010 X:0026 Y:0000 P:eNvmxdIzc $81/CAD0 C9 10 00 CMP #$0010 A:0010 X:0026 Y:0000 P:eNvmxdIzc $81/CAD3 F0 28 BEQ $28 [$CAFD] A:0010 X:0026 Y:0000 P:envmxdIZC
code is missing here
$81/CAD8 AD 82 12 LDA $1282 [$81:1282] A:0020 X:0026 Y:0 P:envmxdIZC $81/CADB 29 01 00 AND #$0001 A:0 X:0026 Y:0 P:envmxdIZC $81/CADE F0 06 BEQ $06 [$CAE6] A:0 X:0026 Y:0 P:envmxdIZC $81/CAE6 A5 00 LDA $00 [$00:0000] A:0 X:0026 Y:0 P:envmxdIZC $81/CAE8 99 84 12 STA $1284,y[$81:1284] A:0020 X:0026 Y:0 P:envmxdIzC $81/CAEB 99 86 12 STA $1286,y[$81:1286] A:0020 X:0026 Y:0 P:envmxdIzC $81/CAEE EE 82 12 INC $1282 [$81:1282] A:0020 X:0026 Y:0 P:envmxdIzC $81/CAF1 EE 82 12 INC $1282 [$81:1282] A:0020 X:0026 Y:0 P:envmxdIzC $81/CAF4 A9 00 80 LDA #$8000 A:0020 X:0026 Y:0 P:envmxdIzC $81/CAF7 8D A4 12 STA $12A4 [$81:12A4] A:8000 X:0026 Y:0 P:eNvmxdIzC $81/CAFA 4C 12 CB JMP $CB12 [$81:CB12] A:8000 X:0026 Y:0 P:eNvmxdIzC $81/CAFD A5 00 LDA $00 [$00:0000] A:0010 X:0026 Y:0000 P:envmxdIZC $81/CAFF 99 84 12 STA $1284,y[$81:1284] A:0010 X:0026 Y:0000 P:envmxdIzC $81/CB02 EE 82 12 INC $1282 [$81:1282] A:0010 X:0026 Y:0000 P:envmxdIzC $81/CB05 A5 02 LDA $02 [$00:0002] A:0010 X:0026 Y:0000 P:envmxdIzC $81/CB07 29 01 00 AND #$0001 A:0000 X:0026 Y:0000 P:envmxdIZC $81/CB0A F0 06 BEQ $06 [$CB12] A:0000 X:0026 Y:0000 P:envmxdIZC $81/CB0C A9 00 80 LDA #$8000 A:0001 X:0026 Y:0002 P:envmxdIzC $81/CB0F 8D A4 12 STA $12A4 [$81:12A4] A:8000 X:0026 Y:0002 P:eNvmxdIzC $81/CB12 DA PHX A:0000 X:0026 Y:0000 P:envmxdIZC $81/CB13 A5 02 LDA $02 [$00:0002] A:0000 X:0026 Y:0000 P:envmxdIZC $81/CB15 0A ASL A A:0000 X:0026 Y:0000 P:envmxdIZC $81/CB16 0A ASL A A:0000 X:0026 Y:0000 P:envmxdIZc $81/CB17 0A ASL A A:0000 X:0026 Y:0000 P:envmxdIZc $81/CB18 0A ASL A A:0000 X:0026 Y:0000 P:envmxdIZc $81/CB19 18 CLC A:0000 X:0026 Y:0000 P:envmxdIZc $81/CB1A 69 00 01 ADC #$0100 ; Add #$100 so it points to the upper half of the CGRAM (Sprite Palettes) $81/CB1D AA TAX ; Transfer to X as Store Index $81/CB1E A0 00 00 LDY #$0000 ; Setup Load Index $81/CB21 E6 23 INC $23 ; Increment Load address twice $81/CB23 E6 23 INC $23 $81/CB25 B7 23 LDA [$23],y ; Transfer Sprite Color Data from ROM to CGRAM Buffer $81/CB27 9F 00 20 7E STA $7E2000,x $81/CB2B E8 INX ; Increment Store Index twice $81/CB2C E8 INX $81/CB2D C8 INY ; Increment Load Index twice $81/CB2E C8 INY $81/CB2F C4 00 CPY $00 ; Compare Load Index to Limit value $81/CB31 30 F2 BMI $F2 ; [$CB25] Loop until all colors are done $81/CB33 FA PLX A:6AD4 X:0110 Y:0010 P:envmxdIZC $81/CB34 A5 02 LDA $02 [$00:0002] A:6AD4 X:0026 Y:0010 P:envmxdIzC $81/CB36 29 0E 00 AND #$000E A:0000 X:0026 Y:0010 P:envmxdIZC $81/CB39 EB XBA A:0000 X:0026 Y:0010 P:envmxdIZC $81/CB3A 9D 32 0E STA $0E32,x[$81:0E58] A:0000 X:0026 Y:0010 P:envmxdIZC $81/CB3D 28 PLP A:0000 X:0026 Y:0010 P:envmxdIZC $81/CB3E 7A PLY A:0000 X:0026 Y:0010 P:eNvmxdIzc $81/CB3F FA PLX A:0000 X:0026 Y:FFFE P:eNvmxdIzc $81/CB40 18 CLC A:0000 X:0026 Y:FFFE P:envmxdIzc $81/CB41 6B RTL
$81/CCE1 ?
$81/CCE1 AC 20 13 LDY $1320 [$81:1320] A:B19F X:0026 Y:0000 P:eNvmxdIzc $81/CCE4 A5 23 LDA $23 [$00:0023] A:B19F X:0026 Y:0000 P:envmxdIZc $81/CCE6 D9 22 13 CMP $1322,y[$81:1322] A:B19F X:0026 Y:0000 P:eNvmxdIzc $81/CCE9 D0 0A BNE $0A [$CCF5] A:B19F X:0026 Y:0000 P:eNvmxdIzC $81/CCEB A5 25 LDA $25 [$00:0025] A:B19F X:0024 Y:0 P:envmxdIZC $81/CCED 29 FF 00 AND #$00FF A:9F93 X:0024 Y:0 P:eNvmxdIzC $81/CCF0 D9 4A 13 CMP $134A,y[$81:134A] A:0093 X:0024 Y:0 P:envmxdIzC $81/CCF3 F0 06 BEQ $06 ; [$CCFB] Set (Error?) Flag and exit $81/CCF5 88 DEY A:B19F X:0026 Y:0000 P:eNvmxdIzC $81/CCF6 88 DEY A:B19F X:0026 Y:FFFF P:eNvmxdIzC $81/CCF7 10 EB BPL $EB [$CCE4] A:B19F X:0026 Y:FFFE P:eNvmxdIzC $81/CCF9 18 CLC ; Clear (Error?) Flag $81/CCFA 60 RTS $81/CCFB 38 SEC ; Set (Error?) Flag $81/CCFC 60 RTS
$81/CCFD ?
$81/CCFD AC A6 12 LDY $12A6 [$81:12A6] A:AC95 X:0026 Y:0003 P:eNvmxdIzc $81/CD00 A5 23 LDA $23 [$00:0023] A:AC95 X:0026 Y:0000 P:envmxdIZc $81/CD02 D9 A8 12 CMP $12A8,y[$81:12A8] A:AC95 X:0026 Y:0000 P:eNvmxdIzc $81/CD05 D0 0A BNE $0A [$CD11] A:AC95 X:0026 Y:0000 P:eNvmxdIzC
code is missing here
$81/CD11 88 DEY A:AC95 X:0026 Y:0000 P:eNvmxdIzC $81/CD12 88 DEY A:AC95 X:0026 Y:FFFF P:eNvmxdIzC $81/CD13 10 EB BPL $EB [$CD00] A:AC95 X:0026 Y:FFFE P:eNvmxdIzC $81/CD15 18 CLC A:AC95 X:0026 Y:FFFE P:eNvmxdIzC $81/CD16 60 RTS A:AC95 X:0026 Y:FFFE P:eNvmxdIzc
$81/CD89 ?
$81/CD89 C2 30 REP #$30 A:1F87 X:0008 Y:0081 P:envmxdizc $81/CD8B A9 01 00 LDA #$0001 A:1F87 X:0008 Y:0081 P:envmxdizc $81/CD8E 8D A3 13 STA $13A3 [$80:13A3] A:0001 X:0008 Y:0081 P:envmxdizc $81/CD91 AD A9 13 LDA $13A9 [$80:13A9] A:0001 X:0008 Y:0081 P:envmxdizc $81/CD94 F0 59 BEQ $59 [$CDEF] A:0800 X:0008 Y:0081 P:envmxdizc $81/CD96 3A DEC A A:0800 X:0008 Y:0081 P:envmxdizc $81/CD97 29 00 FF AND #$FF00 A:07FF X:0008 Y:0081 P:envmxdizc $81/CD9A EB XBA A:0700 X:0008 Y:0081 P:envmxdizc $81/CD9B 4A LSR A A:0007 X:0008 Y:0081 P:envmxdizc $81/CD9C 4A LSR A A:0003 X:0008 Y:0081 P:envmxdizC $81/CD9D 1A INC A A:0001 X:0008 Y:0081 P:envmxdizC $81/CD9E 8D A7 13 STA $13A7 [$80:13A7] A:0002 X:0008 Y:0081 P:envmxdizC $81/CDA1 A9 02 00 LDA #$0002 A:0002 X:0008 Y:0081 P:envmxdizC $81/CDA4 8D 9A 13 STA $139A [$80:139A] A:0002 X:0008 Y:0081 P:envmxdizC $81/CDA7 AD AB 13 LDA $13AB [$80:13AB] A:0002 X:0008 Y:0081 P:envmxdizC $81/CDAA 8D 9B 13 STA $139B [$80:139B] A:C000 X:0008 Y:0081 P:eNvmxdizC $81/CDAD AD AC 13 LDA $13AC [$80:13AC] A:C000 X:0008 Y:0081 P:eNvmxdizC $81/CDB0 8D 9C 13 STA $139C [$80:139C] A:7FC0 X:0008 Y:0081 P:envmxdizC $81/CDB3 A9 00 04 LDA #$0400 A:7FC0 X:0008 Y:0081 P:envmxdizC $81/CDB6 8D 9E 13 STA $139E [$80:139E] A:0400 X:0008 Y:0081 P:envmxdizC $81/CDB9 A9 80 00 LDA #$0080 A:0400 X:0008 Y:0081 P:envmxdizC $81/CDBC 8D A0 13 STA $13A0 [$80:13A0] A:0080 X:0008 Y:0081 P:envmxdizC $81/CDBF AD AE 13 LDA $13AE [$80:13AE] A:0080 X:0008 Y:0081 P:envmxdizC $81/CDC2 8D A1 13 STA $13A1 [$80:13A1] A:6000 X:0008 Y:0081 P:envmxdizC $81/CDC5 A2 9A 13 LDX #$139A A:6000 X:0008 Y:0081 P:envmxdizC $81/CDC8 A9 00 00 LDA #$0000 A:6000 X:139A Y:0081 P:envmxdizC $81/CDCB 22 2A 8C 80 JSL $808C2A[$80:8C2A] A:0000 X:139A Y:0081 P:envmxdiZC $81/CDCF 22 38 92 80 JSL $809238[$80:9238] A:0000 X:139A Y:0081 P:envmxdiZC $81/CDD3 AD AB 13 LDA $13AB [$80:13AB] A:0000 X:139A Y:0081 P:envmxdiZC $81/CDD6 18 CLC A:C000 X:139A Y:0081 P:eNvmxdizC $81/CDD7 69 00 04 ADC #$0400 A:C000 X:139A Y:0081 P:eNvmxdizc $81/CDDA 8D AB 13 STA $13AB [$80:13AB] A:C400 X:139A Y:0081 P:eNvmxdizc $81/CDDD AD AE 13 LDA $13AE [$80:13AE] A:C400 X:139A Y:0081 P:eNvmxdizc $81/CDE0 18 CLC A:6000 X:139A Y:0081 P:envmxdizc $81/CDE1 69 00 02 ADC #$0200 A:6000 X:139A Y:0081 P:envmxdizc $81/CDE4 8D AE 13 STA $13AE [$80:13AE] A:6200 X:139A Y:0081 P:envmxdizc $81/CDE7 CE A7 13 DEC $13A7 [$80:13A7] A:6200 X:139A Y:0081 P:envmxdizc $81/CDEA F0 03 BEQ $03 [$CDEF] A:6200 X:139A Y:0081 P:envmxdizc $81/CDEC 4C A1 CD JMP $CDA1 [$81:CDA1] A:6200 X:139A Y:0081 P:envmxdizc $81/CDEF A9 02 00 LDA #$0002 A:6400 X:139A Y:0081 P:envmxdiZc $81/CDF2 8D A3 13 STA $13A3 [$80:13A3] A:0002 X:139A Y:0081 P:envmxdizc $81/CDF5 5C E9 91 80 JMP $8091E9[$80:91E9] A:0002 X:139A Y:0081 P:envmxdizc
Bank $83
$83/AFC8 ?
Executed during NMI.
$83/AFC8 08 PHP ; Buffer Flag Register value, Program Bank and Direct Page on stack $83/AFC9 8B PHB $83/AFCA 0B PHD $83/AFCB E2 20 SEP #$20 ; A = 8-bit $83/AFCD A9 81 LDA #$81 A:0 X:0001 Y:0 P:envMxdIzC $83/AFCF 8D 15 21 STA $2115 [$80:2115] A:0081 X:0001 Y:0 P:eNvMxdIzC $83/AFD2 A9 7E LDA #$7E ; Set Program Bank to $7E $83/AFD4 48 PHA $83/AFD5 AB PLB $83/AFD6 C2 30 REP #$30 ; A/X/Y = 16-bit $83/AFD8 A9 00 21 LDA #$2100 ; Set Direct Page to $2100 $83/AFDB 5B TCD $83/AFDC A2 00 00 LDX #$0000 A:2100 X:0001 Y:0 P:envmxdIzC $83/AFDF BC 15 87 LDY $8715,x[$7E:8715] A:2100 X:0 Y:0 P:envmxdIZC $83/AFE2 30 21 BMI $21 [$B005] A:2100 X:0 Y:FFFF P:eNvmxdIzC
code is missing here
$83/B005 8C 15 87 STY $8715 [$7E:8715] A:2100 X:0 Y:FFFF P:eNvmxdIzC $83/B008 2B PLD ; Restore Flag Register value, Program Bank and Direct Page $83/B009 AB PLB $83/B00A 28 PLP $83/B00B 6B RTL
$83/B0E1 ?
Executed during NMI.
$83/B0E1 DA PHX ; Buffer X on stack $83/B0E2 9C 84 0B STZ $0B84 [$80:0B84] A:1C00 X:00F0 Y:0001 P:envmxdIzc $83/B0E5 A0 00 00 LDY #$0000 A:1C00 X:00F0 Y:0001 P:envmxdIzc $83/B0E8 B9 13 0A LDA $0A13,y[$80:0A13] A:1C00 X:00F0 Y:0 P:envmxdIZc $83/B0EB C9 FF FF CMP #$FFFF A:FFFF X:00F0 Y:0 P:eNvmxdIzc $83/B0EE F0 3B BEQ $3B [$B12B] A:FFFF X:00F0 Y:0 P:envmxdIZC
code is missing here
$83/B12B FA PLX ; Restore X $83/B12C 6B RTL
$83/C346 ? (Executed when talking to the aerial building)
$83/C346 08 PHP ; Buffer Flag Register value and X on stack $83/C347 DA PHX $83/C348 AD B2 13 LDA $13B2 [$81:13B2] A:86B8 X:0026 Y:0004 P:eNvmxdIzc $83/C34B 29 FF 00 AND #$00FF A:0000 X:0026 Y:0004 P:envmxdIZc $83/C34E F0 0C BEQ $0C [$C35C] A:0000 X:0026 Y:0004 P:envmxdIZc
code is missing here
$83/C35C A9 00 83 LDA #$8300 ; Set up 24-bit address in $20-2: $83/C517 $83/C35F 85 21 STA $21 $83/C361 A9 17 C5 LDA #$C517 $83/C364 85 20 STA $20 $83/C366 AD 0F 0A LDA $0A0F [$81:0A0F] A:C517 X:0026 Y:0004 P:eNvmxdIzc $83/C369 D0 06 BNE $06 [$C371] A:0001 X:0026 Y:0004 P:envmxdIzc $83/C371 AE 5F 07 LDX $075F [$81:075F] A:0001 X:0026 Y:0004 P:envmxdIzc $83/C374 BD 50 16 LDA $1650,x[$81:1676] A:0001 X:0026 Y:0004 P:envmxdIzc $83/C377 8D 07 0A STA $0A07 [$81:0A07] A:0129 X:0026 Y:0004 P:envmxdIzc $83/C37A BD A0 16 LDA $16A0,x[$81:16C6] A:0129 X:0026 Y:0004 P:envmxdIzc $83/C37D 8D 09 0A STA $0A09 [$81:0A09] A:01A5 X:0026 Y:0004 P:envmxdIzc $83/C380 C9 98 02 CMP #$0298 A:01A5 X:0026 Y:0004 P:envmxdIzc $83/C383 B0 6A BCS $6A [$C3EF] A:01A5 X:0026 Y:0004 P:eNvmxdIzc $83/C385 AD 07 0A LDA $0A07 [$81:0A07] A:01A5 X:0026 Y:0004 P:eNvmxdIzc $83/C388 4A LSR A A:0129 X:0026 Y:0004 P:envmxdIzc $83/C389 4A LSR A A:0094 X:0026 Y:0004 P:envmxdIzC $83/C38A 4A LSR A A:004A X:0026 Y:0004 P:envmxdIzc $83/C38B 4A LSR A A:0025 X:0026 Y:0004 P:envmxdIzc $83/C38C 85 00 STA $00 [$00:0000] A:0012 X:0026 Y:0004 P:envmxdIzC $83/C38E AD 09 0A LDA $0A09 [$81:0A09] A:0012 X:0026 Y:0004 P:envmxdIzC $83/C391 4A LSR A A:01A5 X:0026 Y:0004 P:envmxdIzC $83/C392 4A LSR A A:00D2 X:0026 Y:0004 P:envmxdIzC $83/C393 4A LSR A A:0069 X:0026 Y:0004 P:envmxdIzc $83/C394 4A LSR A A:0034 X:0026 Y:0004 P:envmxdIzC $83/C395 EB XBA A:001A X:0026 Y:0004 P:envmxdIzc $83/C396 05 00 ORA $00 [$00:0000] A:1A00 X:0026 Y:0004 P:envmxdIZc $83/C398 8D 76 0B STA $0B76 [$81:0B76] A:1A12 X:0026 Y:0004 P:envmxdIzc $83/C39B A2 00 00 LDX #$0000 A:1A12 X:0026 Y:0004 P:envmxdIzc $83/C39E BF 7D C5 83 LDA $83C57D,x[$83:C57D] A:1A12 X:0000 Y:0004 P:envmxdIZc $83/C3A2 C9 FF FF CMP #$FFFF A:1F06 X:0000 Y:0004 P:envmxdIzc $83/C3A5 F0 3C BEQ $3C [$C3E3] A:1F06 X:0000 Y:0004 P:envmxdIzc $83/C3A7 CD 76 0B CMP $0B76 [$81:0B76] A:1F06 X:0000 Y:0004 P:envmxdIzc $83/C3AA F0 06 BEQ $06 [$C3B2] A:1F06 X:0000 Y:0004 P:envmxdIzC $83/C3AC E8 INX A:1F06 X:0000 Y:0004 P:envmxdIzC $83/C3AD E8 INX A:1F06 X:0001 Y:0004 P:envmxdIzC $83/C3AE E8 INX A:1F06 X:0002 Y:0004 P:envmxdIzC $83/C3AF E8 INX A:1F06 X:0003 Y:0004 P:envmxdIzC $83/C3B0 80 EC BRA $EC [$C39E] A:1F06 X:0004 Y:0004 P:envmxdIzC $83/C3B2 E8 INX A:1A12 X:0010 Y:0004 P:envmxdIZC $83/C3B3 E8 INX A:1A12 X:0011 Y:0004 P:envmxdIzC $83/C3B4 BF 7D C5 83 LDA $83C57D,x[$83:C58F] A:1A12 X:0012 Y:0004 P:envmxdIzC $83/C3B8 EB XBA A:0200 X:0012 Y:0004 P:envmxdIzC $83/C3B9 29 FF 00 AND #$00FF A:0002 X:0012 Y:0004 P:envmxdIzC $83/C3BC 8D 78 0B STA $0B78 [$81:0B78] A:0002 X:0012 Y:0004 P:envmxdIzC $83/C3BF C9 0F 00 CMP #$000F A:0002 X:0012 Y:0004 P:envmxdIzC $83/C3C2 D0 0A BNE $0A [$C3CE] A:0002 X:0012 Y:0004 P:eNvmxdIzc
code is missing here
$83/C3CE BF 7D C5 83 LDA $83C57D,x[$83:C58F] A:0002 X:0012 Y:0004 P:eNvmxdIzc $83/C3D2 89 01 00 BIT #$0001 A:0200 X:0012 Y:0004 P:envmxdIzc $83/C3D5 D0 06 BNE $06 [$C3DD] A:0200 X:0012 Y:0004 P:envmxdIZc $83/C3D7 22 61 C4 83 JSL $83C461[$83:C461] A:0200 X:0012 Y:0004 P:envmxdIZc $83/C3DB 80 1B BRA $1B [$C3F8] A:0002 X:0012 Y:0007 P:envmxdIZc
code is missing here
$83/C3F8 FA PLX ; Restore Flag Register value and X $83/C3F9 28 PLP $83/C3FA 6B RTL
$83/C461 ? (Executed when talking to the aerial building)
$83/C461 08 PHP ; Buffer Flag Register value and X on stack $83/C462 DA PHX $83/C463 AD B2 13 LDA $13B2 [$81:13B2] A:0200 X:0012 Y:0004 P:envmxdIZc $83/C466 29 FF 00 AND #$00FF A:0000 X:0012 Y:0004 P:envmxdIZc $83/C469 F0 0C BEQ $0C [$C477] A:0000 X:0012 Y:0004 P:envmxdIZc
code is missing here
$83/C477 A9 00 83 LDA #$8300 ; Set up 24-bit address in $20-2: $83/C517 $83/C47A 85 21 STA $21 $83/C47C A9 17 C5 LDA #$C517 $83/C47F 85 20 STA $20 $83/C481 AD 76 0B LDA $0B76 [$81:0B76] A:C517 X:0012 Y:0004 P:eNvmxdIzc $83/C484 29 FF 00 AND #$00FF A:1A12 X:0012 Y:0004 P:envmxdIzc $83/C487 0A ASL A A:0012 X:0012 Y:0004 P:envmxdIzc $83/C488 0A ASL A A:0024 X:0012 Y:0004 P:envmxdIzc $83/C489 0A ASL A A:0048 X:0012 Y:0004 P:envmxdIzc $83/C48A 0A ASL A A:0090 X:0012 Y:0004 P:envmxdIzc $83/C48B 18 CLC A:0120 X:0012 Y:0004 P:envmxdIzc $83/C48C 69 08 00 ADC #$0008 A:0120 X:0012 Y:0004 P:envmxdIzc $83/C48F 8D 82 0B STA $0B82 [$81:0B82] A:0128 X:0012 Y:0004 P:envmxdIzc $83/C492 AD 76 0B LDA $0B76 [$81:0B76] A:0128 X:0012 Y:0004 P:envmxdIzc $83/C495 EB XBA A:1A12 X:0012 Y:0004 P:envmxdIzc $83/C496 29 FF 00 AND #$00FF A:121A X:0012 Y:0004 P:envmxdIzc $83/C499 0A ASL A A:001A X:0012 Y:0004 P:envmxdIzc $83/C49A 0A ASL A A:0034 X:0012 Y:0004 P:envmxdIzc $83/C49B 0A ASL A A:0068 X:0012 Y:0004 P:envmxdIzc $83/C49C 0A ASL A A:00D0 X:0012 Y:0004 P:envmxdIzc $83/C49D 8D 84 0B STA $0B84 [$81:0B84] A:01A0 X:0012 Y:0004 P:envmxdIzc $83/C4A0 AD 78 0B LDA $0B78 [$81:0B78] A:01A0 X:0012 Y:0004 P:envmxdIzc $83/C4A3 29 3F 00 AND #$003F A:0002 X:0012 Y:0004 P:envmxdIzc $83/C4A6 0A ASL A A:0002 X:0012 Y:0004 P:envmxdIzc $83/C4A7 0A ASL A A:0004 X:0012 Y:0004 P:envmxdIzc $83/C4A8 AA TAX A:0008 X:0012 Y:0004 P:envmxdIzc $83/C4A9 AD 82 0B LDA $0B82 [$81:0B82] A:0008 X:0008 Y:0004 P:envmxdIzc $83/C4AC 3A DEC A A:0128 X:0008 Y:0004 P:envmxdIzc $83/C4AD 38 SEC A:0127 X:0008 Y:0004 P:envmxdIzc $83/C4AE FF 1B C6 83 SBC $83C61B,x[$83:C623] A:0127 X:0008 Y:0004 P:envmxdIzC $83/C4B2 CD 07 0A CMP $0A07 [$81:0A07] A:011F X:0008 Y:0004 P:envmxdIzC $83/C4B5 B0 54 BCS $54 [$C50B] A:011F X:0008 Y:0004 P:eNvmxdIzc $83/C4B7 AD 82 0B LDA $0B82 [$81:0B82] A:011F X:0008 Y:0004 P:eNvmxdIzc $83/C4BA 18 CLC A:0128 X:0008 Y:0004 P:envmxdIzc $83/C4BB 7F 1B C6 83 ADC $83C61B,x[$83:C623] A:0128 X:0008 Y:0004 P:envmxdIzc $83/C4BF CD 07 0A CMP $0A07 [$81:0A07] A:0130 X:0008 Y:0004 P:envmxdIzc $83/C4C2 90 47 BCC $47 [$C50B] A:0130 X:0008 Y:0004 P:envmxdIzC $83/C4C4 E8 INX A:0130 X:0008 Y:0004 P:envmxdIzC $83/C4C5 E8 INX A:0130 X:0009 Y:0004 P:envmxdIzC $83/C4C6 AD 84 0B LDA $0B84 [$81:0B84] A:0130 X:000A Y:0004 P:envmxdIzC $83/C4C9 3A DEC A A:01A0 X:000A Y:0004 P:envmxdIzC $83/C4CA CD 09 0A CMP $0A09 [$81:0A09] A:019F X:000A Y:0004 P:envmxdIzC $83/C4CD B0 3C BCS $3C [$C50B] A:019F X:000A Y:0004 P:eNvmxdIzc $83/C4CF AD 84 0B LDA $0B84 [$81:0B84] A:019F X:000A Y:0004 P:eNvmxdIzc $83/C4D2 18 CLC A:01A0 X:000A Y:0004 P:envmxdIzc $83/C4D3 7F 1B C6 83 ADC $83C61B,x[$83:C625] A:01A0 X:000A Y:0004 P:envmxdIzc $83/C4D7 CD 09 0A CMP $0A09 [$81:0A09] A:01AD X:000A Y:0004 P:envmxdIzc $83/C4DA 90 2F BCC $2F [$C50B] A:01AD X:000A Y:0004 P:envmxdIzC $83/C4DC AD 78 0B LDA $0B78 [$81:0B78] A:01AD X:000A Y:0004 P:envmxdIzC $83/C4DF 0A ASL A A:0002 X:000A Y:0004 P:envmxdIzC $83/C4E0 18 CLC A:0004 X:000A Y:0004 P:envmxdIzc $83/C4E1 6D 78 0B ADC $0B78 [$81:0B78] A:0004 X:000A Y:0004 P:envmxdIzc $83/C4E4 A8 TAY A:0006 X:000A Y:0004 P:envmxdIzc $83/C4E5 AD 78 0B LDA $0B78 [$81:0B78] A:0006 X:000A Y:0006 P:envmxdIzc $83/C4E8 29 3F 00 AND #$003F A:0002 X:000A Y:0006 P:envmxdIzc $83/C4EB C9 18 00 CMP #$0018 A:0002 X:000A Y:0006 P:envmxdIzc $83/C4EE B0 10 BCS $10 [$C500] A:0002 X:000A Y:0006 P:eNvmxdIzc $83/C4F0 B7 20 LDA [$20],y[$83:C51D] A:0002 X:000A Y:0006 P:eNvmxdIzc $83/C4F2 8D 80 07 STA $0780 [$81:0780] A:0000 X:000A Y:0006 P:envmxdIZc $83/C4F5 C8 INY A:0000 X:000A Y:0006 P:envmxdIZc $83/C4F6 B7 20 LDA [$20],y[$83:C51E] A:0000 X:000A Y:0007 P:envmxdIzc $83/C4F8 8D 81 07 STA $0781 [$81:0781] A:0000 X:000A Y:0007 P:envmxdIZc $83/C4FB AD 78 0B LDA $0B78 [$81:0B78] A:0000 X:000A Y:0007 P:envmxdIZc $83/C4FE 80 14 BRA $14 [$C514] A:0002 X:000A Y:0007 P:envmxdIzc
code is missing here
$83/C514 FA PLX ; Restore Flag Register value and X $83/C515 28 PLP $83/C516 6B RTL
$83/C517 Data for $83/C346
?
$83/C57D Data for $83/C346
?
Bank $84
$84/8000 Graphic Data
Should be the BS-X logo stuff at the very beginning. Get's decompressed at $94/8000
Bank $88
$88/904C ? (Aerial Building)
$88/904C 89 80 00 BIT #$0080 A:0080 X:0026 Y:0004 P:envmxdIzc $88/904F D0 0C BNE $0C [$905D] A:0080 X:0026 Y:0004 P:envmxdIzc
code is missing here
$88/905D A9 01 00 LDA #$0001 A:0080 X:0026 Y:0004 P:envmxdIzc $88/9060 80 0D BRA $0D [$906F] A:0001 X:0026 Y:0004 P:envmxdIzc
$88/9099 ? (Aerial Building)
$88/9099 22 46 C3 83 JSL $83C346[$83:C346] A:86B8 X:0026 Y:0004 P:eNvmxdIzc $88/909D 8D 7A 07 STA $077A [$81:077A] A:0002 X:0026 Y:0007 P:eNvmxdIzc $88/90A0 8D 98 19 STA $1998 [$81:1998] A:0002 X:0026 Y:0007 P:eNvmxdIzc $88/90A3 29 1F 00 AND #$001F A:0002 X:0026 Y:0007 P:eNvmxdIzc $88/90A6 C9 14 00 CMP #$0014 A:0002 X:0026 Y:0007 P:envmxdIzc $88/90A9 F0 0D BEQ $0D [$90B8] A:0002 X:0026 Y:0007 P:eNvmxdIzc $88/90AB C9 19 00 CMP #$0019 A:0002 X:0026 Y:0007 P:eNvmxdIzc $88/90AE F0 13 BEQ $13 [$90C3] A:0002 X:0026 Y:0007 P:eNvmxdIzc $88/90B0 BD 2A 1A LDA $1A2A,x[$81:1A50] A:0002 X:0026 Y:0007 P:eNvmxdIzc $88/90B3 C9 00 00 CMP #$0000 A:0000 X:0026 Y:0007 P:envmxdIZc $88/90B6 D0 01 BNE $01 [$90B9] A:0000 X:0026 Y:0007 P:envmxdIZC
code is missing here
$88/90B8 6B RTL A:0000 X:0026 Y:0007 P:envmxdIZC
$88/9F5C ? (Aerial Building)
$88/9F5C A9 01 00 LDA #$0001 A:9DB1 X:0024 Y:0004 P:eNvmxdIzc $88/9F5F 8D 5E 0B STA $0B5E [$81:0B5E] A:0001 X:0024 Y:0004 P:envmxdIzc $88/9F62 9E 2A 1A STZ $1A2A,x[$81:1A4E] A:0001 X:0024 Y:0004 P:envmxdIzc $88/9F65 AD 81 07 LDA $0781 [$81:0781] A:0001 X:0024 Y:0004 P:envmxdIzc $88/9F68 0D 80 07 ORA $0780 [$81:0780] A:0000 X:0024 Y:0004 P:envmxdIZc $88/9F6B F0 30 BEQ $30 [$9F9D] A:0000 X:0024 Y:0004 P:envmxdIZc
code is missing here
$88/9F9D 6B RTL A:0000 X:0024 Y:0004 P:envmxdIZc
$88/9F9E ? (Aerial Building)
$88/9F9E AD 7A 07 LDA $077A [$81:077A] A:9DC5 X:0024 Y:0004 P:eNvmxdIzc $88/9FA1 C9 0F 00 CMP #$000F A:0002 X:0024 Y:0004 P:envmxdIzc $88/9FA4 D0 0D BNE $0D [$9FB3] A:0002 X:0024 Y:0004 P:eNvmxdIzc
code is missing here
$88/9FB3 9C 98 19 STZ $1998 [$81:1998] A:0002 X:0024 Y:0004 P:eNvmxdIzc $88/9FB6 6B RTL A:0002 X:0024 Y:0004 P:eNvmxdIzc
$88/9FCA ? (Aerial Building)
$88/9FCA AD B6 0C LDA $0CB6 [$81:0CB6] A:9DD5 X:0024 Y:0004 P:eNvmxdIzc $88/9FCD 0A ASL A A:0000 X:0024 Y:0004 P:envmxdIZc $88/9FCE DA PHX A:0000 X:0024 Y:0004 P:envmxdIZc $88/9FCF AA TAX A:0000 X:0024 Y:0004 P:envmxdIZc $88/9FD0 BF E4 9F 88 LDA $889FE4,x[$88:9FE4] A:0000 X:0000 Y:0004 P:envmxdIZc $88/9FD4 FA PLX A:9FE8 X:0000 Y:0004 P:eNvmxdIzc $88/9FD5 3A DEC A A:9FE8 X:0024 Y:0004 P:envmxdIzc $88/9FD6 F4 DA 9F PEA $9FDA A:9FE7 X:0024 Y:0004 P:eNvmxdIzc $88/9FD9 48 PHA A:9FE7 X:0024 Y:0004 P:eNvmxdIzc $88/9FDA 60 RTS A:9FE7 X:0024 Y:0004 P:eNvmxdIzc
$88/9FE8 ? (Executed when talking to the aerial building)
$88/9FE8 A9 00 88 LDA #$8800 A:9FE7 X:0024 Y:0004 P:eNvmxdIzc $88/9FEB 85 24 STA $24 [$00:0024] A:8800 X:0024 Y:0004 P:eNvmxdIzc $88/9FED A9 47 A1 LDA #$A147 A:8800 X:0024 Y:0004 P:eNvmxdIzc $88/9FF0 85 23 STA $23 [$00:0023] A:A147 X:0024 Y:0004 P:eNvmxdIzc $88/9FF2 AD 7A 07 LDA $077A [$81:077A] A:A147 X:0024 Y:0004 P:eNvmxdIzc $88/9FF5 0A ASL A A:0002 X:0024 Y:0004 P:envmxdIzc $88/9FF6 18 CLC A:0004 X:0024 Y:0004 P:envmxdIzc $88/9FF7 6D 7A 07 ADC $077A [$81:077A] A:0004 X:0024 Y:0004 P:envmxdIzc $88/9FFA A8 TAY A:0006 X:0024 Y:0004 P:envmxdIzc $88/9FFB B7 23 LDA [$23],y[$88:A14D] A:0006 X:0024 Y:0006 P:envmxdIzc $88/9FFD 85 20 STA $20 [$00:0020] A:A1E1 X:0024 Y:0006 P:eNvmxdIzc $88/9FFF C8 INY A:A1E1 X:0024 Y:0006 P:eNvmxdIzc $88/A000 B7 23 LDA [$23],y[$88:A14E] A:A1E1 X:0024 Y:0007 P:envmxdIzc $88/A002 85 21 STA $21 [$00:0021] A:88A1 X:0024 Y:0007 P:eNvmxdIzc $88/A004 DA PHX A:88A1 X:0024 Y:0007 P:eNvmxdIzc $88/A005 A9 00 00 LDA #$0000 A:88A1 X:0024 Y:0007 P:eNvmxdIzc $88/A008 A2 00 00 LDX #$0000 A:0000 X:0024 Y:0007 P:envmxdIZc $88/A00B A0 00 00 LDY #$0000 A:0000 X:0000 Y:0007 P:envmxdIZc $88/A00E 22 0C AA 80 JSL $80AA0C[$80:AA0C] A:0000 X:0000 Y:0000 P:envmxdIZc $88/A012 B0 06 BCS $06 [$A01A] A:0000 X:0000 Y:0000 P:envmxdIZc $88/A014 A9 01 00 LDA #$0001 A:0000 X:0000 Y:0000 P:envmxdIZc $88/A017 8D B6 0C STA $0CB6 [$81:0CB6] A:0001 X:0000 Y:0000 P:envmxdIzc $88/A01A FA PLX A:0001 X:0000 Y:0000 P:envmxdIzc $88/A01B 60 RTS A:0001 X:0024 Y:0000 P:envmxdIzc
$88/A01C ? (Executed when talking to the aerial building)
$88/A01C 22 53 AA 80 JSL $80AA53[$80:AA53] A:A01B X:0024 Y:0004 P:eNvmxdIzc $88/A020 D0 0B BNE $0B ; [$A02D] Exit if not equal $88/A022 A9 04 00 LDA #$0004 A:0000 X:0024 Y:0004 P:envmxdIZc $88/A025 18 CLC A:0004 X:0024 Y:0004 P:envmxdIzc $88/A026 65 AC ADC $AC [$00:00AC] A:0004 X:0024 Y:0004 P:envmxdIzc $88/A028 85 AC STA $AC [$00:00AC] A:9DD9 X:0024 Y:0004 P:eNvmxdIzc $88/A02A 9C B6 0C STZ $0CB6 [$81:0CB6] A:9DD9 X:0024 Y:0004 P:eNvmxdIzc $88/A02D 60 RTS
Bank $93
$93/C299 ?
$93/C299 9B TXY A:C120 X:0022 Y:0004 P:eNvmxdIzc $93/C29A B9 B3 19 LDA $19B3,y[$81:19D5] A:C120 X:0022 Y:0022 P:envmxdIzc $93/C29D 29 FF 00 AND #$00FF A:0 X:0022 Y:0022 P:envmxdIZc $93/C2A0 0A ASL A A:0 X:0022 Y:0022 P:envmxdIZc $93/C2A1 AA TAX A:0 X:0022 Y:0022 P:envmxdIZc $93/C2A2 BF F0 9B 81 LDA $819BF0,x[$81:9BF0] A:0 X:0 Y:0022 P:envmxdIZc $93/C2A6 85 14 STA $14 [$00:0014] A:0 X:0 Y:0022 P:envmxdIZc $93/C2A8 B9 DA 19 LDA $19DA,y[$81:19FC] A:0 X:0 Y:0022 P:envmxdIZc $93/C2AB 0A ASL A A:0018 X:0 Y:0022 P:envmxdIzc $93/C2AC 85 16 STA $16 [$00:0016] A:0030 X:0 Y:0022 P:envmxdIzc $93/C2AE 22 F8 C2 93 JSL $93C2F8[$93:C2F8] A:0030 X:0 Y:0022 P:envmxdIzc $93/C2B2 A5 18 LDA $18 [$00:0018] A:0 X:0 Y:0022 P:envmxdIZc $93/C2B4 99 02 1A STA $1A02,y[$81:1A24] A:0 X:0 Y:0022 P:envmxdIZc $93/C2B7 A5 1A LDA $1A [$00:001A] A:0 X:0 Y:0022 P:envmxdIZc $93/C2B9 99 2A 1A STA $1A2A,y[$81:1A4C] A:0 X:0 Y:0022 P:envmxdIZc $93/C2BC B9 B3 19 LDA $19B3,y[$81:19D5] A:0 X:0 Y:0022 P:envmxdIZc $93/C2BF 18 CLC A:0 X:0 Y:0022 P:envmxdIZc $93/C2C0 69 40 00 ADC #$0040 A:0 X:0 Y:0022 P:envmxdIZc $93/C2C3 29 FF 00 AND #$00FF A:0040 X:0 Y:0022 P:envmxdIzc $93/C2C6 0A ASL A A:0040 X:0 Y:0022 P:envmxdIzc $93/C2C7 AA TAX A:0080 X:0 Y:0022 P:envmxdIzc $93/C2C8 BF F0 9B 81 LDA $819BF0,x[$81:9C70] A:0080 X:0080 Y:0022 P:envmxdIzc $93/C2CC 85 14 STA $14 [$00:0014] A:7FFF X:0080 Y:0022 P:envmxdIzc $93/C2CE B9 DA 19 LDA $19DA,y[$81:19FC] A:7FFF X:0080 Y:0022 P:envmxdIzc $93/C2D1 0A ASL A A:0018 X:0080 Y:0022 P:envmxdIzc $93/C2D2 85 16 STA $16 [$00:0016] A:0030 X:0080 Y:0022 P:envmxdIzc $93/C2D4 22 F8 C2 93 JSL $93C2F8[$93:C2F8] A:0030 X:0080 Y:0022 P:envmxdIzc $93/C2D8 A5 18 LDA $18 [$00:0018] A:0 X:0080 Y:0022 P:envmxdIZc $93/C2DA 99 52 1A STA $1A52,y[$81:1A74] A:FFD0 X:0080 Y:0022 P:eNvmxdIzc $93/C2DD A5 1A LDA $1A [$00:001A] A:FFD0 X:0080 Y:0022 P:eNvmxdIzc $93/C2DF 99 7A 1A STA $1A7A,y[$81:1A9C] A:0017 X:0080 Y:0022 P:envmxdIzc $93/C2E2 6B RTL A:0017 X:0080 Y:0022 P:envmxdIzc
$93/C2E3 ?
$93/C2E3 BD CA 1A LDA $1ACA,x[$81:1AEC] A:C124 X:0022 Y:0004 P:eNvmxdIzc $93/C2E6 18 CLC A:0074 X:0022 Y:0004 P:envmxdIzc $93/C2E7 7D 2A 1A ADC $1A2A,x[$81:1A4C] A:0074 X:0022 Y:0004 P:envmxdIzc $93/C2EA 9D 50 16 STA $1650,x[$81:1672] A:0074 X:0022 Y:0004 P:envmxdIzc $93/C2ED BD 1A 1B LDA $1B1A,x[$81:1B3C] A:0074 X:0022 Y:0004 P:envmxdIzc $93/C2F0 18 CLC A:0038 X:0022 Y:0004 P:envmxdIzc $93/C2F1 7D 7A 1A ADC $1A7A,x[$81:1A9C] A:0038 X:0022 Y:0004 P:envmxdIzc $93/C2F4 9D A0 16 STA $16A0,x[$81:16C2] A:004F X:0022 Y:0004 P:envmxdIzc $93/C2F7 6B RTL A:004F X:0022 Y:0004 P:envmxdIzc
$93/C2F8 ?
$93/C2F8 64 00 STZ $00 [$00:0000] A:0030 X:0 Y:0022 P:envmxdIzc $93/C2FA A5 14 LDA $14 [$00:0014] A:0030 X:0 Y:0022 P:envmxdIzc $93/C2FC 10 0D BPL $0D [$C30B] A:0 X:0 Y:0022 P:envmxdIZc $93/C2FE A9 FF FF LDA #$FFFF A:FCDC X:0102 Y:0022 P:eNvmxdIzc $93/C301 85 00 STA $00 [$00:0000] A:FFFF X:0102 Y:0022 P:eNvmxdIzc $93/C303 A5 14 LDA $14 [$00:0014] A:FFFF X:0102 Y:0022 P:eNvmxdIzc $93/C305 49 FF FF EOR #$FFFF A:FCDC X:0102 Y:0022 P:eNvmxdIzc $93/C308 1A INC A A:0323 X:0102 Y:0022 P:envmxdIzc $93/C309 85 14 STA $14 [$00:0014] A:0324 X:0102 Y:0022 P:envmxdIzc $93/C30B 22 75 8B 80 JSL $808B75[$80:8B75] A:0 X:0 Y:0022 P:envmxdIZc $93/C30F A5 00 LDA $00 [$00:0000] A:0 X:0 Y:0022 P:envmxdIZc $93/C311 10 0F BPL $0F [$C322] A:0 X:0 Y:0022 P:envmxdIZc $93/C313 A5 1A LDA $1A [$00:001A] A:FFFF X:0102 Y:0022 P:eNvmxdIzc $93/C315 49 FF FF EOR #$FFFF A:0 X:0102 Y:0022 P:envmxdIZc $93/C318 85 1A STA $1A [$00:001A] A:FFFF X:0102 Y:0022 P:eNvmxdIzc $93/C31A A5 18 LDA $18 [$00:0018] A:FFFF X:0102 Y:0022 P:eNvmxdIzc $93/C31C 49 FF FF EOR #$FFFF A:96C0 X:0102 Y:0022 P:eNvmxdIzc $93/C31F 1A INC A A:693F X:0102 Y:0022 P:envmxdIzc $93/C320 85 18 STA $18 [$00:0018] A:6940 X:0102 Y:0022 P:envmxdIzc $93/C322 6B RTL A:0 X:0 Y:0022 P:envmxdIZc
Bank $94
$94/8000 PROGRAM FLOW: TITLE SCREEN: Start of the program after Boot
$94/8000 E2 10 SEP #$10 ; A = 8-bit $94/8002 C2 20 REP #$20 ; X/Y = 16-bit $94/8004 22 11 84 80 JSL $808411 ; Transfer a chain of variables to $01xx
Arguments: $80/8FE1 CB 80 94 ; Data for $01xx registers is at $94/80CB
$94/800B 22 BD 83 80 JSL $8083BD ; Clear whole VRAM $94/800F A2 80 LDX #$80 ; VRAM transfer settings: 16-bit (for upcoming decompression Subroutine) $94/8011 8E 15 21 STX $2115 $94/8014 A9 00 80 LDA #$8000 ; Address of compressed Graphics Data: $84/8000 $94/8017 85 78 STA $78 $94/8019 A2 84 LDX #$84 $94/801B 86 7A STX $7A $94/801D 64 7D STZ $7D ; VRAM Destination: $0000 $94/801F 22 1E 95 80 JSL $80951E ; Graphics Decompression directly to VRAM $94/8023 A9 A7 A9 LDA #$A9A7 ; Address of Compressed Graphics Data: $84/A9A7 $94/8026 85 78 STA $78 $94/8028 A2 84 LDX #$84 $94/802A 86 7A STX $7A $94/802C A9 00 80 LDA #$8000 ; VRAM Destination: $4000 $94/802F 85 7D STA $7D $94/8031 22 1E 95 80 JSL $80951E ; Graphics Decompression directly to VRAM $94/8035 A9 1B AE LDA #$AE1B ; Address of Compressed Graphics Data: $84/AE1B $94/8038 85 78 STA $78 $94/803A A2 84 LDX #$84 $94/803C 86 7A STX $7A $94/803E A9 00 98 LDA #$9800 ; VRAM Destination: $4C00 $94/8041 85 7D STA $7D $94/8043 22 1E 95 80 JSL $80951E ; Graphics Decompression directly to VRAM $94/8047 A9 52 AD LDA #$AD52 ; Address of Compressed Graphics Data: $84/AD52 $94/804A 85 78 STA $78 $94/804C A2 84 LDX #$84 $94/804E 86 7A STX $7A $94/8050 A9 00 A0 LDA #$A000 ; VRAM Destination: $5000 $94/8053 85 7D STA $7D $94/8055 22 1E 95 80 JSL $80951E ; Graphics Decompression directly to VRAM $94/8059 A9 F7 F6 LDA #$F6F7 ; Address of Compressed Graphics Data: $95/F6F7 $94/805C 85 78 STA $78 $94/805E A2 95 LDX #$95 $94/8060 86 7A STX $7A $94/8062 A9 00 C0 LDA #$C000 ; VRAM Destination: $6000 $94/8065 85 7D STA $7D $94/8067 22 1E 95 80 JSL $80951E ; Graphics Decompression directly to VRAM $94/806B A9 BB A8 LDA #$A8BB A:0195 X:0 Y:0 P:eNvmXdIzC $94/806E 85 78 STA $78 [$00:0078] A:A8BB X:0 Y:0 P:eNvmXdIzC $94/8070 A2 84 LDX #$84 A:A8BB X:0 Y:0 P:eNvmXdIzC $94/8072 86 7A STX $7A [$00:007A] A:A8BB X:0084 Y:0 P:eNvmXdIzC $94/8074 22 9F 93 80 JSL $80939F[$80:939F] A:A8BB X:0084 Y:0 P:eNvmXdIzC
arguments: 00 20 7E
$94/807B A9 01 00 LDA #$0001 ; Set Flag for CGRAM Update $94/807E 8D 1C 02 STA $021C ; (this one and the one above could be combined as INC $021C - UNNECESSARY LINE) $94/8081 C2 30 REP #$30 ; A/X/Y = 16-bit $94/8083 22 10 C2 81 JSL $81C210[$81:C210] A:0001 X:0 Y:0 P:envmxdIzC $94/8087 22 9A C2 81 JSL $81C29A[$81:C29A] A:000A X:FFFE Y:0 P:envmxdIzC $94/808B 22 D0 C7 81 JSL $81C7D0[$81:C7D0] A:8000 X:FFFE Y:0 P:envmxdIzC $94/808F A9 03 00 LDA #$0003 ; Play Music #$03 $94/8092 A0 00 00 LDY #$0000 $94/8095 22 1C 5C 10 JSL $105C1C $94/8099 9C 6B 06 STZ $066B [$80:066B] A:0003 X:FFFE Y:0001 P:eNvmxdIzc $94/809C 9C 6D 06 STZ $066D [$80:066D] A:0003 X:FFFE Y:0001 P:eNvmxdIzc $94/809F 9C 71 06 STZ $0671 [$80:0671] A:0003 X:FFFE Y:0001 P:eNvmxdIzc $94/80A2 9C 73 06 STZ $0673 [$80:0673] A:0003 X:FFFE Y:0001 P:eNvmxdIzc $94/80A5 9C 6F 06 STZ $066F [$80:066F] A:0003 X:FFFE Y:0001 P:eNvmxdIzc $94/80A8 A9 06 00 LDA #$0006 A:0003 X:FFFE Y:0001 P:eNvmxdIzc $94/80AB 8D 77 06 STA $0677 [$80:0677] A:0006 X:FFFE Y:0001 P:envmxdIzc $94/80AE A9 00 94 LDA #$9400 A:0006 X:FFFE Y:0001 P:envmxdIzc $94/80B1 8D 5E 06 STA $065E [$80:065E] A:9400 X:FFFE Y:0001 P:eNvmxdIzc $94/80B4 A9 72 85 LDA #$8572 A:9400 X:FFFE Y:0001 P:eNvmxdIzc $94/80B7 8D 5D 06 STA $065D [$80:065D] A:8572 X:FFFE Y:0001 P:eNvmxdIzc $94/80BA 22 B6 91 80 JSL $8091B6[$80:91B6] A:8572 X:FFFE Y:0001 P:eNvmxdIzc $94/80BE A9 11 81 LDA #$8111 ; Next NMI, go to $94/8111 $94/80C1 8D 37 06 STA $0637 $94/80C4 A9 94 00 LDA #$0094 $94/80C7 8D 39 06 STA $0639 $94/80CA 6B RTL
$94/80CB Data for Graphics Settings
This data gets transfered to the $01xx Graphics Register buffer via $80/8411 at $94/8004.
This is executed while the start-up, these values serve to clear those Graphics Registers.
$94/80CB 00 00 - Value for $0100 = $2100 - 0% Brightness $94/80CD 01 03 - Value for $0101 = $2101 - $94/80CF 04 09 - Value for $0104 = $2105 - BG Mode 1, BG3 Priority Bit $94/80D1 06 43 - Value for $0106 = $2107 - BG1 Tilemap at $4000, V/H Mirroring $94/80D3 07 52 - Value for $0107 = $2108 - BG2 Tilemap at $5000, H Mirroring $94/80D5 08 70 - Value for $0108 = $2109 - BG3 Tilemap at $7000, no Mirroring $94/80D7 0A 00 - Value for $010A = $210B - BG1/2 Tileset at $0000 $94/80D9 0B 07 - Value for $010B = $210C - BG3 Tileset at $7000 $94/80DB 0F 00 - Value for $010F/10 = $210D - BG1 H-Scroll = #$0100 $94/80DD 10 01 $94/80DF 11 88 - Value for $0111/12 = $210E - BG1 V-Scroll = #$0188 $94/80E1 12 01 $94/80E3 13 00 - Value for $0113/14 = $210F - BG2 H-Scroll = #$0000 $94/80E5 14 00 $94/80E7 15 00 - Value for $0115/16 = $2110 - BG2 V-Scroll = #$0000 $94/80E9 16 00 $94/80EB 17 00 - Value for $0117/18 = $2111 - BG3 H-Scroll = #$0000 $94/80ED 18 00 $94/80EF 19 00 - Value for $0119/1A = $2112 - BG3 V-Scroll = #$0000 $94/80F1 1A 00 $94/80F3 26 03 - Value for $0126 = $212C - BG1/2 on Main Screen $94/80F5 27 10 - Value for $0127 = $212E - Disable Sprites on Main Screen in Window $94/80F7 28 01 - Value for $0128 = $212D - BG1 on Sub Screen $94/80F9 0D 03 - Value for $010D = $2123 - Window 1 on BG1, outside $94/80FB 20 80 - Value for $0120 = $2126 - Window 1 Left Position: $80 $94/80FD 21 7F - Value for $0121 = $2127 - Window 1 Right Position: $7F $94/80FF 2A 00 - Value for $012A = $212A - Mask Logic for BGs: OR $94/8101 2B 03 - Value for $012B = $212B - Mask Logic for Sprites: XNOR $94/8103 2C 00 - Value for $012C $94/8105 3A 00 - Value for $013A = $420C - Disable HDMAs $94/8107 FF
$94/8108 TOKEN DATA
65 8F AC 93 65 D4 B4 93 23
$94/8111 PROGRAM FLOW: TITLE SCREEN: Wait for the Nintendo Logo
When you start the BIOS, you see the city backdrop appearing, then a line that unfolds to the Nintendo logo. This subroutine is the waiting time AFTER the appearance of the city silhouette and BEFORE the line appears. $066D is the (frame?) counter for this. When it reaches #$20, it sets everything up so that the next step of the title screen (the appearance of the "line", which is some Mask Window stuff) gets setup and executed in the following NMI.
$94/8111 08 PHP ; Buffer Flag Register value on stack $94/8112 E2 30 SEP #$30 ; A/X/Y = 8-bit $94/8114 AD 6D 06 LDA $066D ; Increment Counter $94/8117 1A INC A $94/8118 8D 6D 06 STA $066D $94/811B C9 20 CMP #$20 ; Has counter reached #$20? $94/811D D0 10 BNE $10 ; [$812F] Exit if not $94/811F C2 20 REP #$20 ; A = 16-bit $94/8121 A9 31 81 LDA #$8131 ; Next NMI, go to $94/8131 $94/8124 8D 37 06 STA $0637 $94/8127 A9 94 00 LDA #$0094 $94/812A 8D 39 06 STA $0639 $94/812D E2 20 SEP #$20 ; A = 8-bit $94/812F 28 PLP ; Restore Flag Register value $94/8130 6B RTL
$94/8131 PROGRAM FLOW: TITLE SCREEN: ? (Title Screen Window stuff)
$94/8131 08 PHP ; Buffer Flag Register value and Data Bank on stack $94/8132 E2 30 SEP #$30 ; A/X/Y = 8-bit $94/8134 AD 20 01 LDA $0120 ; Check buffer for Window 1 Left position: is it smaller than #$10? $94/8137 C9 10 CMP #$10 $94/8139 90 11 BCC $11 ; [$814C] Branch if it is $94/813B 38 SEC ; If not, broaden the window: put left pos 4 px more to the left... $94/813C E9 04 SBC #$04 $94/813E 8D 20 01 STA $0120 $94/8141 AD 21 01 LDA $0121 ; ... and the right position 4 Pixel more to the right $94/8144 18 CLC $94/8145 69 04 ADC #$04 $94/8147 8D 21 01 STA $0121 $94/814A 80 52 BRA $52 ; [$819E] And Exit $94/814C C2 10 REP #$10 ; X/Y = 16-bit $94/814E A9 FF LDA #$FF ; Deactivate window $94/8150 8D 20 01 STA $0120 ; (Left pos: #$FF) $94/8153 9C 21 01 STZ $0121 ; (Right pos: #$00) $94/8156 9C 0D 01 STZ $010D ; (Clear Window settings) $94/8159 9C 28 01 STZ $0128 ; (Clear Subscreen designation) $94/815C A2 02 0E LDX #$0E02 ; SETUP HALF OF AN HDMA - BG1 Vertical Scroll register $94/815F 8E 20 43 STX $4320 $94/8162 A2 27 02 LDX #$0227 ; (HDMA Table Start Address: $000227) $94/8165 8E 22 43 STX $4322 $94/8168 A9 00 LDA #$00 $94/816A 8D 24 43 STA $4324 $94/816D A9 52 LDA #$52 ; (Begin to build the HDMA Table here) $94/816F 8D 27 02 STA $0227 $94/8172 A2 00 01 LDX #$0100 $94/8175 8E 28 02 STX $0228 $94/8178 A9 B1 LDA #$B1 $94/817A 8D 2A 02 STA $022A $94/817D A9 01 LDA #$01 A:80B1 X:0100 Y:0 P:eNVMxdIzc $94/817F 8D 8D 02 STA $028D [$80:028D] A:8001 X:0100 Y:0 P:enVMxdIzc $94/8182 8E 8E 02 STX $028E [$80:028E] A:8001 X:0100 Y:0 P:enVMxdIzc $94/8185 9C 90 02 STZ $0290 [$80:0290] A:8001 X:0100 Y:0 P:enVMxdIzc $94/8188 A2 00 00 LDX #$0000 ; Reset frame counter $94/818B 8E 6D 06 STX $066D $94/818E C2 20 REP #$20 ; A = 16-bit $94/8190 A9 A0 81 LDA #$81A0 ; Next NMI, go to $94/81A0 $94/8193 8D 37 06 STA $0637 $94/8196 A9 94 00 LDA #$0094 $94/8199 8D 39 06 STA $0639 $94/819C E2 20 SEP #$20 ; A = 8-bit $94/819E 28 PLP ; Restore Flag Register value $94/819F 6B RTL
$94/81A0 PROGRAM FLOW: TITLE SCREEN: ? (Intro)
The sound effect that gets triggered here is the one when the "reflection shine walks across the Nintendo logo" in the intro (you know exactly what I mean. Don't act as if you don't), so this whole part will take care of that part of the intro, I guess.
$94/81A0 08 PHP A:81A0 X:0 Y:0 P:eNVmxdIzC $94/81A1 C2 30 REP #$30 ; A/X/Y = 16-bits $94/81A3 A2 00 01 LDX #$0100 ; BG1 V-Scroll = #$0100 $94/81A6 8E 11 01 STX $0111 $94/81A9 A0 00 00 LDY #$0000 ; Setup Store Index $94/81AC AE 6D 06 LDX $066D [$80:066D] A:81A0 X:0100 Y:0 P:enVmxdIZC $94/81AF BF DB 8B 94 LDA $948BDB,x[$94:8BDB] A:81A0 X:0 Y:0 P:enVmxdIZC $94/81B3 30 21 BMI $21 [$81D6] A:01E0 X:0 Y:0 P:enVmxdIzC $94/81B5 BF DB 8B 94 LDA $948BDB,x[$94:8BDB] A:01E0 X:0 Y:0 P:enVmxdIzC $94/81B9 99 2B 02 STA $022B,y[$80:022B] A:01E0 X:0 Y:0 P:enVmxdIzC $94/81BC E8 INX A:01E0 X:0 Y:0 P:enVmxdIzC $94/81BD E8 INX A:01E0 X:0001 Y:0 P:enVmxdIzC $94/81BE C8 INY A:01E0 X:0002 Y:0 P:enVmxdIzC $94/81BF C8 INY A:01E0 X:0002 Y:0001 P:enVmxdIzC $94/81C0 C0 62 00 CPY #$0062 A:01E0 X:0002 Y:0002 P:enVmxdIzC $94/81C3 D0 F0 BNE $F0 [$81B5] A:01E0 X:0002 Y:0002 P:eNVmxdIzc $94/81C5 8E 6D 06 STX $066D [$80:066D] A:01E0 X:0062 Y:0062 P:enVmxdIZC $94/81C8 E2 20 SEP #$20 A:01E0 X:0062 Y:0062 P:enVmxdIZC $94/81CA AD 3A 01 LDA $013A ; Set flag for Channel 0 HDMA activation $94/81CD 09 04 ORA #$04 $94/81CF 8D 3A 01 STA $013A $94/81D2 C2 20 REP #$20 ; A = 16-bit $94/81D4 80 46 BRA $46 ; [$821C] Exit $94/81D6 E2 20 SEP #$20 ; A = 8-bit $94/81D8 AD 3A 01 LDA $013A ; Deactivate every HDMA but on channel 2 $94/81DB 29 FB AND #$FB $94/81DD 8D 3A 01 STA $013A $94/81E0 C2 20 REP #$20 ; A = 16-bit $94/81E2 A9 C1 03 LDA #$03C1 ; Play Sound Effect #$C1 ("Bling"-Sound for Nintendo Logo) $94/81E5 A0 01 00 LDY #$0001 $94/81E8 22 1C 5C 10 JSL $105C1C $94/81EC A9 02 01 LDA #$0102 ; Color Math Control Registers $94/81EF 8D 2A 01 STA $012A [$80:012A] A:0102 X:0B1A Y:0001 P:envmxdIzc $94/81F2 A9 01 00 LDA #$0001 A:0102 X:0B1A Y:0001 P:envmxdIzc $94/81F5 8D EE 0C STA $0CEE [$80:0CEE] A:0001 X:0B1A Y:0001 P:envmxdIzc $94/81F8 A2 00 00 LDX #$0000 A:0001 X:0B1A Y:0001 P:envmxdIzc $94/81FB A0 77 00 LDY #$0077 A:0001 X:0 Y:0001 P:envmxdIZc $94/81FE A9 95 00 LDA #$0095 A:0001 X:0 Y:0077 P:envmxdIzc $94/8201 85 BE STA $BE [$00:00BE] A:0095 X:0 Y:0077 P:envmxdIzc $94/8203 A9 F5 82 LDA #$82F5 A:0095 X:0 Y:0077 P:envmxdIzc $94/8206 22 B0 C2 81 JSL $81C2B0[$81:C2B0] A:82F5 X:0 Y:0077 P:eNvmxdIzc $94/820A A9 20 00 LDA #$0020 ; Set up Frame Counter for next Program Flow Subroutine $94/820D 8D 6D 06 STA $066D $94/8210 A9 1E 82 LDA #$821E ; Next NMI, go to $94/821E $94/8213 8D 37 06 STA $0637 $94/8216 A9 94 00 LDA #$0094 $94/8219 8D 39 06 STA $0639 $94/821C 28 PLP ; Restore Flag Register value $94/821D 6B RTL
$94/821E PROGRAM FLOW: TITLE SCREEN: Wait after Nintendo Logo Reflection, before turning gray
This subroutine is for the moment between the "Bling" sound and the reflection of the Nintendo Logo and the Logo turning gray.
Decrements the Frame Counter value in $066D (gets set at $94/820A), afterwards goes to $94/8237.
$94/821E 08 PHP ; Buffer Flag Register value on stack $94/821F C2 30 REP #$30 ; A/X/Y = 16-bit $94/8221 CE 6D 06 DEC $066D ; Decrement Frame Counter $94/8224 D0 0F BNE $0F ; [$8235] Exit if Counter hasn't run out $94/8226 9C 6B 06 STZ $066B ; Reset Frame Counter $94/8229 A9 37 82 LDA #$8237 ; Next NMI, go to $94/8237 $94/822C 8D 37 06 STA $0637 $94/822F A9 94 00 LDA #$0094 $94/8232 8D 39 06 STA $0639 $94/8235 28 PLP ; Restore Flag Register value $94/8236 6B RTL
$94/8237 PROGRAM FLOW: TITLE SCREEN: Turn Nintendo Logo gray
After the "Bling" sound and the reflection running over the Nintendo logo, its background color turns from dark blue to grey. This happens here
$94/8237 08 PHP ; Buffer Flag Register value and Program Bank on stack $94/8238 8B PHB $94/8239 4B PHK ; Set Program Bank to $94 $94/823A AB PLB $94/823B C2 30 REP #$30 ; A/X/Y = 16-bit $94/823D AD 6B 06 LDA $066B ; Increment Frame Counter $94/8240 1A INC A $94/8241 8D 6B 06 STA $066B $94/8244 C9 03 00 CMP #$0003 ; Check if Frame Counter has reached it's limit (for next palette) $94/8247 90 3E BCC $3E ; [$8287] Exit if not $94/8249 9C 6B 06 STZ $066B ; Reset Frame Counter $94/824C AC 6D 06 LDY $066D ; Load Palette Pointer in Y $94/824F B9 F7 96 LDA $96F7,y ; Load first color $94/8252 C9 FF FF CMP #$FFFF ; Is it $FFFF? (Perfect White; Turning Gray is done) $94/8255 F0 1E BEQ $1E ; [$8275] Branch if it is $94/8257 A2 00 00 LDX #$0000 ; If Turn to Gray isn't done yet: Set X as Store Index $94/825A B9 F7 96 LDA $96F7,y ; Load Color $94/825D 9F 62 20 7E STA $7E2062,x ; Store in CGRAM Buffer $94/8261 E8 INX ; Increment Store Index twice $94/8262 E8 INX $94/8263 C8 INY ; Increment Load Index twice $94/8264 C8 INY $94/8265 E0 10 00 CPX #$0010 ; Are #$10 colors done (one palette)? $94/8268 D0 F0 BNE $F0 ; [$825A] Loop if it is not $94/826A 8C 6D 06 STY $066D ; Store Palette Pointer back - next time load the next palette from $96F7,x $94/826D A9 01 00 LDA #$0001 ; Set Flag for CGRAM Update $94/8270 8D 1C 02 STA $021C ; UNNECESSARY LINE - This would be shorter with a "INC $021C" $94/8273 80 12 BRA $12 ; [$8287] Exit $94/8275 A9 01 00 LDA #$0001 A:FFFF X:0 Y:00E0 P:envmxdIZC $94/8278 8D 6D 06 STA $066D [$94:066D] A:0001 X:0 Y:00E0 P:envmxdIzC $94/827B A9 8A 82 LDA #$828A ; Next NMI, go to $94/828A $94/827E 8D 37 06 STA $0637 $94/8281 A9 94 00 LDA #$0094 $94/8284 8D 39 06 STA $0639 $94/8287 AB PLB ; Restore Flag Register value and Program Bank $94/8288 28 PLP $94/8289 6B RTL
$94/828A PROGRAM FLOW: TITLE SCREEN: City Backdrop Scroll and Color Cycle
$94/828A 08 PHP ; Buffer Flag Register value on stack $94/828B C2 30 REP #$30 ; A/X/Y = 16-bit $94/828D A9 13 00 LDA #$0013 ; Put BG1-3 and Sprites on Main Screen, no Window Area Disable $94/8290 8D 26 01 STA $0126 $94/8293 A9 00 3F LDA #$3F00 A:0013 X:0 Y:0 P:envmxdIzC $94/8296 8D 2A 01 STA $012A [$80:012A] A:3F00 X:0 Y:0 P:envmxdIzC $94/8299 9C 6B 06 STZ $066B ; Reset Frame Counter $94/829C A9 00 94 LDA #$9400 ; (Set Address for City Backdrop Scrolling and Color Cycle in $065D-F) $94/829F 8D 5E 06 STA $065E $94/82A2 A9 ED 85 LDA #$85ED $94/82A5 8D 5D 06 STA $065D $94/82A8 22 B6 91 80 JSL $8091B6[$80:91B6] A:85ED X:0 Y:0 P:eNvmxdIzC $94/82AC A9 00 94 LDA #$9400 A:0 X:0 Y:0 P:envmxdIZc $94/82AF 8D 5E 06 STA $065E [$80:065E] A:9400 X:0 Y:0 P:eNvmxdIzc $94/82B2 A9 9F 8A LDA #$8A9F A:9400 X:0 Y:0 P:eNvmxdIzc $94/82B5 8D 5D 06 STA $065D [$80:065D] A:8A9F X:0 Y:0 P:eNvmxdIzc $94/82B8 22 B6 91 80 JSL $8091B6[$80:91B6] A:8A9F X:0 Y:0 P:eNvmxdIzc $94/82BC A9 CA 82 LDA #$82CA ; Next NMI, go to $94/82CA $94/82BF 8D 37 06 STA $0637 $94/82C2 A9 94 00 LDA #$0094 $94/82C5 8D 39 06 STA $0639 $94/82C8 28 PLP ; Restore Flag Register value $94/82C9 6B RTL
$94/82CA PROGRAM FLOW: TITLE SCREEN: Fade to White (and other stuff?)
This subroutine uses $066B as frame counter. It counts to #$100. The counter value gets devided by 4 and used as load index for the Color Math stuff.
The division by 4 makes sure that the Color Math value only gets changed every fourth frame (#$40 values for Color Math * 4 frames = #$100 frames).
After #$80 frames, when the screen has turned perfectly white, the subroutine does the changing of the screen.
$94/82CA 08 PHP ; Buffer Flag Register value and Program Bank on stack $94/82CB 8B PHB $94/82CC 4B PHK ; Set Program Bank to $94 $94/82CD AB PLB $94/82CE C2 30 REP #$30 ; A/X/Y = 16-bit $94/82D0 AD 6B 06 LDA $066B ; Load Counter value $94/82D3 4A LSR A ; Div by 4 and set as load index for X $94/82D4 4A LSR A $94/82D5 AA TAX $94/82D6 E2 20 SEP #$20 ; A = 8-bit $94/82D8 BD 26 83 LDA $8326,x ; Load value from Table beneath and set it in Color Math Register $94/82DB 8D 32 21 STA $2132 ; (This makes the Fade to white effect) $94/82DE C2 20 REP #$20 ; A/X/Y = 16-bit $94/82E0 AD 6B 06 LDA $066B ; Increment Frame Counter $94/82E3 1A INC A $94/82E4 8D 6B 06 STA $066B $94/82E7 C9 00 01 CMP #$0100 ; Has the counter reached #$100? $94/82EA D0 0E BNE $0E ; [$82FA] Branch if not $94/82EC A9 66 83 LDA #$8366 ; Next NMI, go to $94/8366 $94/82EF 8D 37 06 STA $0637 $94/82F2 A9 94 00 LDA #$0094 $94/82F5 8D 39 06 STA $0639 $94/82F8 80 29 BRA $29 ; [$8323] Exit $94/82FA C9 80 00 CMP #$0080 ; Has Counter reached #$80? $94/82FD D0 24 BNE $24 ; [$8323] Exit if not $94/82FF E2 20 SEP #$20 A:0080 X:001F Y:0 P:enVmxdIZC $94/8301 A9 13 LDA #$13 A:0080 X:001F Y:0 P:enVMxdIZC $94/8303 8D 26 01 STA $0126 [$94:0126] A:0013 X:001F Y:0 P:enVMxdIzC $94/8306 9C 27 01 STZ $0127 [$94:0127] A:0013 X:001F Y:0 P:enVMxdIzC $94/8309 C2 20 REP #$20 A:0013 X:001F Y:0 P:enVMxdIzC $94/830B A9 00 00 LDA #$0000 A:0013 X:001F Y:0 P:enVmxdIzC $94/830E 8D 0F 01 STA $010F [$94:010F] A:0 X:001F Y:0 P:enVmxdIZC $94/8311 8D 11 01 STA $0111 [$94:0111] A:0 X:001F Y:0 P:enVmxdIZC $94/8314 9C EE 0C STZ $0CEE [$94:0CEE] A:0 X:001F Y:0 P:enVmxdIZC $94/8317 A9 94 00 LDA #$0094 A:0 X:001F Y:0 P:enVmxdIZC $94/831A 85 BE STA $BE [$00:00BE] A:0094 X:001F Y:0 P:enVmxdIzC $94/831C A9 08 81 LDA #$8108 A:0094 X:001F Y:0 P:enVmxdIzC $94/831F 22 B0 C2 81 JSL $81C2B0[$81:C2B0] A:8108 X:001F Y:0 P:eNVmxdIzC $94/8323 AB PLB ; Restore Flag Register value and Program Bank $94/8324 28 PLP $94/8325 6B RTL
$94/8326 Color Math Data for Title Screen Fade to White
These values get stored in $2132 at $94/82DB. This makes the screen turn white between the Nintendo Logo and the BS-X Logo.
E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF FF FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F2 F1 F0 EF EE ED EC EB EA E9 E8 E7 E6 E5 E4 E3 E2 E1 E0
$94/8366 PROGRAM FLOW: TITLE SCREEN: ?
$94/8366 08 PHP ; Buffer Flag Register value on stack $94/8367 E2 30 SEP #$30 ; A/X/Y = 8-bit $94/8369 A9 13 LDA #$13 ; Put BG1-3 and Sprites on Main Screen $94/836B 8D 26 01 STA $0126 $94/836E 9C 27 01 STZ $0127 ; No Window Area Main Screen Disable $94/8371 A9 E0 LDA #$E0 ; Turn Color Math off $94/8373 8D 32 21 STA $2132 $94/8376 C2 20 REP #$20 ; A = 16-bit $94/8378 A9 00 00 LDA #$0000 $94/837B 8D 0F 01 STA $010F ; BG1 H-Scroll: #$0000 $94/837E 8D 11 01 STA $0111 ; BG1 V-Scroll: #$0000 $94/8381 9C 6B 06 STZ $066B ; Reset Frame Counter $94/8384 9C 6D 06 STZ $066D ; Reset Frame Counter $94/8387 9C EE 0C STZ $0CEE [$80:0CEE] A:0 X:0 Y:0 P:envmXdIZC $94/838A A9 01 00 LDA #$0001 A:0 X:0 Y:0 P:envmXdIZC $94/838D 8D 6F 06 STA $066F [$80:066F] A:0001 X:0 Y:0 P:envmXdIzC $94/8390 A9 02 0D LDA #$0D02 ; HDMA Destination: $210D - BG1 H-Scroll $94/8393 8D 20 43 STA $4320 $94/8396 A9 27 02 LDA #$0227 ; HDMA Table at $00/0227 $94/8399 8D 22 43 STA $4322 $94/839C A2 00 LDX #$00 $94/839E 8E 24 43 STX $4324 $94/83A1 A2 77 LDX #$77 A:0227 X:0 Y:0 P:envmXdIZC $94/83A3 8E 27 02 STX $0227 [$80:0227] A:0227 X:0077 Y:0 P:envmXdIzC $94/83A6 A9 00 00 LDA #$0000 A:0227 X:0077 Y:0 P:envmXdIzC $94/83A9 8D 28 02 STA $0228 [$80:0228] A:0 X:0077 Y:0 P:envmXdIZC $94/83AC A2 10 LDX #$10 A:0 X:0077 Y:0 P:envmXdIZC $94/83AE 8E 2A 02 STX $022A [$80:022A] A:0 X:0010 Y:0 P:envmXdIzC $94/83B1 8D 2B 02 STA $022B [$80:022B] A:0 X:0010 Y:0 P:envmXdIzC $94/83B4 A2 7F LDX #$7F A:0 X:0010 Y:0 P:envmXdIzC $94/83B6 8E 2D 02 STX $022D [$80:022D] A:0 X:007F Y:0 P:envmXdIzC $94/83B9 8D 2E 02 STA $022E [$80:022E] A:0 X:007F Y:0 P:envmXdIzC $94/83BC E2 20 SEP #$20 A:0 X:007F Y:0 P:envmXdIzC $94/83BE AD 3A 01 LDA $013A ; Add HDMA-Flag for Channel 2 $94/83C1 09 04 ORA #$04 $94/83C3 8D 3A 01 STA $013A $94/83C6 C2 20 REP #$20 ; UNNECESSARY LINE $94/83C8 C2 30 REP #$30 A:0004 X:007F Y:0 P:envmXdIzC $94/83CA A9 94 00 LDA #$0094 A:0004 X:007F Y:0 P:envmxdIzC $94/83CD 85 BE STA $BE [$00:00BE] A:0094 X:007F Y:0 P:envmxdIzC $94/83CF A9 C8 8A LDA #$8AC8 A:0094 X:007F Y:0 P:envmxdIzC $94/83D2 22 B0 C2 81 JSL $81C2B0[$81:C2B0] A:8AC8 X:007F Y:0 P:eNvmxdIzC $94/83D6 A9 E4 83 LDA #$83E4 ; Next NMI, go to $94/83E4 $94/83D9 8D 37 06 STA $0637 $94/83DC A9 94 00 LDA #$0094 $94/83DF 8D 39 06 STA $0639 $94/83E2 28 PLP ; Restore Flag Register value $94/83E3 6B RTL
$94/83E4 ?
$94/83E4 08 PHP ; Buffer Flag Register value on stack $94/83E5 C2 30 REP #$30 ; A/X/Y = 16-bit $94/83E7 EE 6D 06 INC $066D [$80:066D] A:83E4 X:0 Y:0 P:eNvmxdIzC $94/83EA 22 63 83 80 JSL $808363[$80:8363] A:83E4 X:0 Y:0 P:envmxdIzC $94/83EE 18 CLC A:A4A2 X:0 Y:0 P:envmxdIzC $94/83EF 6D 6D 06 ADC $066D [$80:066D] A:A4A2 X:0 Y:0 P:envmxdIzc $94/83F2 E2 20 SEP #$20 A:A4A3 X:0 Y:0 P:eNvmxdIzc $94/83F4 8D 6F 12 STA $126F [$80:126F] A:A4A3 X:0 Y:0 P:eNvMxdIzc $94/83F7 C2 20 REP #$20 A:A4A3 X:0 Y:0 P:eNvMxdIzc $94/83F9 AD 54 01 LDA $0154 ; Check if Start or A Button on Joypad 1 was pushed $94/83FC 29 80 10 AND #$1080 $94/83FF F0 20 BEQ $20 ; [$8421] Branch if not
If Start or A Button on Title screen was pushed
$94/8401 A9 53 03 LDA #$0353 ; Play Sound Effect for leaving the title screen $94/8404 A0 01 00 LDY #$0001 $94/8407 22 1C 5C 10 JSL $105C1C $94/840B 22 6B 84 94 JSL $94846B[$94:846B] A:5303 X:0 Y:0001 P:envmxdIZc $94/840F 22 7F 93 80 JSL $80937F ; Next NMI-Jump: Nothing (RTL) $94/8413 A9 94 00 LDA #$0094 A:0080 X:0010 Y:0001 P:envmxdIZc $94/8416 85 BE STA $BE [$00:00BE] A:0094 X:0010 Y:0001 P:envmxdIzc $94/8418 A9 38 BD LDA #$BD38 A:0094 X:0010 Y:0001 P:envmxdIzc $94/841B 22 B0 C2 81 JSL $81C2B0[$81:C2B0] A:BD38 X:0010 Y:0001 P:eNvmxdIzc $94/841F 80 00 BRA $00 ; [$8421] UNNECESSARY LINE - Branch to where you already are $94/8421 AD 6B 06 LDA $066B ; Increment Frame Counter $94/8424 1A INC A $94/8425 8D 6B 06 STA $066B $94/8428 C9 10 0E CMP #$0E10 ; Is the point reached where the game loops from title to intro again? $94/842B D0 3C BNE $3C ; [$8469] Branch if not --- (#$0E10 = #3600 = 60 seconds, BTW)
Executed when Title Screen loops
$94/842D A9 81 00 LDA #$0081 ; Fade Music out $94/8430 A0 00 00 LDY #$0000 $94/8433 22 1C 5C 10 JSL $105C1C $94/8437 A9 00 80 LDA #$8000 ; Next NMI, go to $94/8000 $94/843A 8D 71 06 STA $0671 $94/843D A9 94 00 LDA #$0094 $94/8440 8D 73 06 STA $0673 $94/8443 A9 06 00 LDA #$0006 A:0094 X:0000 Y:0000 P:envmxdIzC $94/8446 8D 77 06 STA $0677 [$80:0677] A:0006 X:0000 Y:0000 P:envmxdIzC $94/8449 A9 00 94 LDA #$9400 A:0006 X:0000 Y:0000 P:envmxdIzC $94/844C 8D 5E 06 STA $065E [$80:065E] A:9400 X:0000 Y:0000 P:eNvmxdIzC $94/844F A9 34 85 LDA #$8534 A:9400 X:0000 Y:0000 P:eNvmxdIzC $94/8452 8D 5D 06 STA $065D [$80:065D] A:8534 X:0000 Y:0000 P:eNvmxdIzC $94/8455 22 B6 91 80 JSL $8091B6[$80:91B6] A:8534 X:0000 Y:0000 P:eNvmxdIzC $94/8459 A9 6B 84 LDA #$846B A:0004 X:0000 Y:0000 P:envmxdIZc $94/845C 8D 3B 06 STA $063B [$80:063B] A:846B X:0000 Y:0000 P:eNvmxdIzc $94/845F A9 94 00 LDA #$0094 A:846B X:0000 Y:0000 P:eNvmxdIzc $94/8462 8D 3D 06 STA $063D [$80:063D] A:0094 X:0000 Y:0000 P:envmxdIzc $94/8465 22 7F 93 80 JSL $80937F ; Next NMI-Jump: Nothing (RTL) $94/8469 28 PLP ; Restore Flag Register value $94/846A 6B RTL A:0001 X:0 Y:0 P:eNvmxdIzC
$94/846B Transfer NMI Jump Address from Buffer B to A
$94/846B 08 PHP ; Buffer Flag Register value on stack $94/846C E2 30 SEP #$30 ; A/X/Y = 8-bit $94/846E 9C 3A 01 STZ $013A ; Clear all HDMA flags $94/8471 C2 30 REP #$30 ; A/X/Y = 16-bit $94/8473 AD 71 06 LDA $0671 [$80:0671] A:5303 X:0 Y:0001 P:envmxdIZc $94/8476 8D 37 06 STA $0637 [$80:0637] A:0 X:0 Y:0001 P:envmxdIZc $94/8479 AD 73 06 LDA $0673 [$80:0673] A:0 X:0 Y:0001 P:envmxdIZc $94/847C 8D 39 06 STA $0639 [$80:0639] A:0 X:0 Y:0001 P:envmxdIZc $94/847F 22 25 92 80 JSL $809225[$80:9225] A:0 X:0 Y:0001 P:envmxdIZc $94/8483 28 PLP ; Restore Flag Register value $94/8484 6B RTL
$94/8534 ? (Screen Fade Out)
$94/8534 E2 30 SEP #$30 ; A/X/Y = 8-bit $94/8536 AD 00 01 LDA $0100 ; Is Screen Brightness zero? $94/8539 29 0F AND #$0F $94/853B F0 25 BEQ $25 ; [$8562] Branch if it is $94/853D 9C 75 06 STZ $0675 [$80:0675] A:1F0F X:0004 Y:0094 P:envMXdizc $94/8540 EE 75 06 INC $0675 [$80:0675] A:1F0F X:0004 Y:0094 P:envMXdizc $94/8543 AD 75 06 LDA $0675 [$80:0675] A:1F0F X:0004 Y:0094 P:envMXdizc $94/8546 CD 77 06 CMP $0677 [$80:0677] A:1F01 X:0004 Y:0094 P:envMXdizc $94/8549 D0 11 BNE $11 [$855C] A:1F01 X:0004 Y:0094 P:eNvMXdizc $94/854B 9C 75 06 STZ $0675 [$80:0675] A:1F06 X:0004 Y:0094 P:envMXdiZC $94/854E AD 00 01 LDA $0100 ; Load value for $2100 (FBLANK / Screen Brightness) $94/8551 3A DEC A ; Turn down Screen Brightness a notch $94/8552 8D 00 01 STA $0100 ; Set it in buffer to set in $2100 $94/8555 8D 1B 02 STA $021B ; Set it in buffer for the value currently in $2100 $94/8558 29 0F AND #$0F ; Check if Brightness has reached zero $94/855A F0 06 BEQ $06 ; [$8562] Branch if it has $94/855C 22 38 92 80 JSL $809238[$80:9238] A:1F01 X:0004 Y:0094 P:eNvMXdizc $94/8560 80 DE BRA $DE [$8540] A:1F01 X:0004 Y:0094 P:eNvMXdizc
$94/8572 E2 30 SEP #$30 ; A/X/Y = 8-bit $94/8574 AD 00 01 LDA $0100 ; Load $2100 buffer (FBLANK / Screen Brightness) $94/8577 29 0F AND #$0F ; Is Screen Brightness at its maximum? $94/8579 C9 0F CMP #$0F $94/857B F0 32 BEQ $32 ; [$85AF] Branch if it is $94/857D 9C 75 06 STZ $0675 [$80:0675] A:1E00 X:0 Y:0094 P:eNvMXdizc $94/8580 AD 00 01 LDA $0100 ; Remove any screen brightness from buffered value for $2100 $94/8583 29 F0 AND #$F0 $94/8585 8D 00 01 STA $0100 $94/8588 8D 1B 02 STA $021B ; Set as value that currently is in $2100 $94/858B EE 75 06 INC $0675 [$80:0675] A:1E00 X:0 Y:0094 P:envMXdiZc $94/858E AD 75 06 LDA $0675 [$80:0675] A:1E00 X:0 Y:0094 P:envMXdizc $94/8591 CD 77 06 CMP $0677 [$80:0677] A:1E01 X:0 Y:0094 P:envMXdizc $94/8594 D0 13 BNE $13 [$85A9] A:1E01 X:0 Y:0094 P:eNvMXdizc $94/8596 9C 75 06 STZ $0675 [$80:0675] A:1E06 X:0 Y:0094 P:envMXdiZC $94/8599 AD 00 01 LDA $0100 ; Load $2100 buffer value $94/859C 1A INC A ; Increment value (Brightness one step up) $94/859D 8D 00 01 STA $0100 $94/85A0 8D 1B 02 STA $021B $94/85A3 29 0F AND #$0F ; Was max. Brightness reached? $94/85A5 C9 0F CMP #$0F $94/85A7 F0 06 BEQ $06 ; [$85AF] Branch if it has $94/85A9 22 38 92 80 JSL $809238[$80:9238] A:1E01 X:0 Y:0094 P:eNvMXdizc $94/85AD 80 DC BRA $DC [$858B] A:1E01 X:0 Y:0094 P:eNvMXdizc $94/85AF 22 38 92 80 JSL $809238[$80:9238] A:1E0F X:0 Y:0094 P:envMXdiZC $94/85B3 5C E9 91 80 JMP $8091E9[$80:91E9] A:1E0F X:0 Y:0094 P:envMXdiZC
$94/85ED Title Screen City Backdrop Scroll and Color Cycle
This subroutine is important for the scrolling of the City Backdrop and it's Night/Day-Color changing on Title screen
$94/85ED C2 20 REP #$20 ; A = 16-bit $94/85EF 9C 67 06 STZ $0667 ; Reset Frame Counter $94/85F2 9C 69 06 STZ $0669 ; Reset Color Cycle Counter $94/85F5 C2 30 REP #$30 ; A/X/Y = 16-bit - necessary, other code jumps directly here $94/85F7 AD 67 06 LDA $0667 ; Is the Frame counter even? (Stuff to do for every second frame) $94/85FA 29 01 00 AND #$0001 $94/85FD D0 0A BNE $0A ; [$8609] Branch if not $94/85FF AD 13 01 LDA $0113 ; Scroll BG2 (City Backdrop) one pixel, reset to #$0000 after #$01FF $94/8602 1A INC A $94/8603 29 FF 01 AND #$01FF $94/8606 8D 13 01 STA $0113 $94/8609 AD 67 06 LDA $0667 ; Stuff to do for every eighth frame $94/860C 29 07 00 AND #$0007 $94/860F D0 40 BNE $40 ; [$8651] Branch on the seven other frames $94/8611 8B PHB ; Buffer Program Bank on stack $94/8612 4B PHK ; Set Program Bank to $94 $94/8613 AB PLB $94/8614 AD 69 06 LDA $0669 ; Load Color Cycle Counter and transfer to X $94/8617 AA TAX ; UNNECESSARY LINE - why not replace the prior one with "LDX $0669"? $94/8618 BD 5F 86 LDA $865F,x ; Load, according to Cycle Counter, a Pointer for the Palette table $94/861B 29 FF 00 AND #$00FF ; (Remove second byte that was accidentally loaded from that table) $94/861E 0A ASL A ; Multiply by #$20, transfer to X as Load Index $94/861F 0A ASL A $94/8620 0A ASL A $94/8621 0A ASL A $94/8622 0A ASL A $94/8623 AA TAX $94/8624 A0 00 00 LDY #$0000 ; Set Y as Store Index $94/8627 BD BF 86 LDA $86BF,x ; Load Color from Palette $94/862A DA PHX ; Buffer X on stack $94/862B BB TYX ; Transfer Store Index from Y to X $94/862C 9F 84 20 7E STA $7E2084,x ; Store loaded Color in CGRAM buffer $94/8630 FA PLX ; Restore X (Load Index) $94/8631 E8 INX ; Increment Load Index twice $94/8632 E8 INX $94/8633 C8 INY ; Increment Store Index twice $94/8634 C8 INY $94/8635 98 TYA ; Check if the store index has reached #$1A (after thirteen colors) $94/8636 C9 1A 00 CMP #$001A $94/8639 D0 EC BNE $EC ; [$8627] Loop until thirteen colors are done $94/863B AB PLB ; Restore Original Program Bank $94/863C A9 01 00 LDA #$0001 ; Set flag for CGRAM Update $94/863F 8D 1C 02 STA $021C ; UNNECESSARY LINE if the one before is replaced with "INC $021C" $94/8642 AD 69 06 LDA $0669 ; Increment Color Cycle Counter, reset at #$0060 $94/8645 1A INC A $94/8646 C9 60 00 CMP #$0060 $94/8649 D0 03 BNE $03 ; [$864E] $94/864B A9 00 00 LDA #$0000 $94/864E 8D 69 06 STA $0669 $94/8651 AD 67 06 LDA $0667 ; Increment Frame Counter $94/8654 1A INC A $94/8655 8D 67 06 STA $0667 $94/8658 22 38 92 80 JSL $809238[$80:9238] A:0001 X:001A Y:001A P:envmxdizc $94/865C 4C F5 85 JMP $85F5 ; Loop
$94/865F Title Screen City Backdrop Color Cycle Table (for $94/85ED)
These #$60 bytes are the pointers to the palettes at $94/68BF. In the Subroutine at $94/85ED, a counter is incremented and goes through every of these entries (and is reset at #$60), making the Day and Night cycle on the title screen.
$94/865F 00 01 02 03 04 05 06 07 $94/8667 08 09 0A 0B 0C 0D 0E 0F $94/866F 0F 0F 0F 0F 0F 0F 0F 0F $94/8677 0F 0F 0F 0F 0F 0E 0D 0C $94/867F 0B 0A 09 08 07 06 05 04 $94/8687 03 02 01 00 00 00 00 00 $94/868F 00 10 11 12 13 14 15 16 $94/8697 17 18 19 1A 1B 1C 1D 1E $94/869F 1E 1E 1E 1E 1E 1E 1E 1E $94/86A7 1E 1E 1E 1E 1E 1D 1C 1B $94/86AF 1A 19 18 17 16 15 14 13 $94/86B7 12 11 10 00 00 00 00 00
$94/86BF Title Screen City Backdrop Color Cycle Palettes (for $94/85ED)
Note that the Subroutine at $94/85ED starts at the third color and only transfers thirteen colors, so the first four bytes and the last two of these palettes are never used(?).
Here are $#1F palettes, these should be #$3E0 bytes (last byte at $94/8A9E).
$94/8A9F ?
$94/8A9F C2 30 REP #$30 ; A/X/Y = 16-bit $94/8AA1 AD 6F 06 LDA $066F [$80:066F] A:1F0F X:0004 Y:0094 P:envmxdizc $94/8AA4 D0 1A BNE $1A [$8AC0] A:0 X:0004 Y:0094 P:envmxdiZc $94/8AA6 AD 54 01 LDA $0154 ; Have the Start or A Button on Joypad 1 been pushed? $94/8AA9 29 80 10 AND #$1080 $94/8AAC D0 06 BNE $06 ; [$8AB4] Branch if not $94/8AAE 22 38 92 80 JSL $809238[$80:9238] A:0 X:0004 Y:0094 P:envmxdiZc $94/8AB2 80 ED BRA $ED [$8AA1] A:0 X:0004 Y:0094 P:envmxdiZc
code is missing here
$94/8AC0 22 38 92 80 JSL $809238[$80:9238] A:0001 X:0004 Y:0094 P:envmxdizc $94/8AC4 5C E9 91 80 JMP $8091E9[$80:91E9] A:0001 X:0004 Y:0094 P:envmxdizc
$94/8AC8 TOKEN DATA
$94/8AC8 26 ; TOKEN #$26 $94/8AC9 DA 19 01 00 00 00 ; Store #$0000 in $[X+19DA] $94/8ACF 25 ; TOKEN #$25 $94/8AD0 01 00 ; ??? $94/8AD2 27 ; TOKEN #$27 $94/8AD3 DA 19 01 01 00 00 ; Add #$0001 to $[X+19DA] $94/8AD9 2F ; TOKEN #$2F $94/8ADA DA 19 01 03 00 E0 01 00 CF 8A 94 25 01 00 60 93 A6 81 DA 19 01 2B 02 00 27 DA 19 01 01 00 00 29 DA 19 01 FF 01 00 60 B4 A6 81 DA 19 01 2B 02 00 2F DA 19 01 03 00 00 01 00 E5 8A 94 38 00 00 00 00 00 00 7D B4 93 38 00 00 00 00 00 00 CC C0 93 26 DA 19 01 00 00 00 25 01 00 27 DA 19 01 01 00 00 2F DA 19 01 03 00 C0 03 00 31 8B 94 25
$94/8BDB Intro: HDMA table for BG1 VScroll (for $94/81A0)
E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 C8 00 00 01 38 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 C3 00 D2 00 E2 00 F1 00 00 01 0F 01 1E 01 2E 01 3D 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 C5 00 CD 00 D6 00 DE 00 E7 00 EF 00 F8 00 00 01 08 01 11 01 19 01 22 01 2A 01 33 01 3B 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 C1 00 C7 00 CD 00 D2 00 D8 00 DE 00 E4 00 E9 00 EF 00 F5 00 FB 00 00 01 05 01 0B 01 11 01 17 01 1C 01 22 01 28 01 2E 01 33 01 39 01 3F 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 C1 00 C5 00 C9 00 CE 00 D2 00 D6 00 DA 00 DF 00 E3 00 E7 00 EB 00 F0 00 F4 00 F8 00 FC 00 00 01 04 01 08 01 0C 01 10 01 15 01 19 01 1D 01 21 01 26 01 2A 01 2E 01 32 01 37 01 3B 01 3F 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 E0 01 C2 00 C5 00 C9 00 CC 00 CF 00 D3 00 D6 00 D9 00 DC 00 E0 00 E3 00 E6 00 EA 00 ED 00 F0 00 F3 00 F7 00 FA 00 FD 00 00 01 03 01 06 01 09 01 0D 01 10 01 13 01 16 01 1A 01 1D 01 20 01 24 01 27 01 2A 01 2D 01 31 01 34 01 37 01 3B 01 3E 01 E0 01 E0 01 E0 01 E0 01 E0 01 C1 00 C4 00 C7 00 C9 00 CC 00 CF 00 D1 00 D4 00 D6 00 D9 00 DC 00 DE 00 E1 00 E4 00 E6 00 E9 00 EB 00 EE 00 F1 00 F3 00 F6 00 F9 00 FB 00 FE 00 00 01 02 01 05 01 07 01 0A 01 0D 01 0F 01 12 01 15 01 17 01 1A 01 1C 01 1F 01 22 01 24 01 27 01 2A 01 2C 01 2F 01 31 01 34 01 37 01 39 01 3C 01 3F 01 CD 00 CF 00 D1 00 D3 00 D5 00 D8 00 DA 00 DC 00 DE 00 E0 00 E2 00 E5 00 E7 00 E9 00 EB 00 ED 00 EF 00 F1 00 F4 00 F6 00 F8 00 FA 00 FC 00 FE 00 00 01 02 01 04 01 06 01 08 01 0A 01 0C 01 0F 01 11 01 13 01 15 01 17 01 19 01 1B 01 1E 01 20 01 22 01 24 01 26 01 28 01 2B 01 2D 01 2F 01 31 01 33 01 D6 00 D7 00 D9 00 DB 00 DD 00 DE 00 E0 00 E2 00 E4 00 E6 00 E7 00 E9 00 EB 00 ED 00 EF 00 F0 00 F2 00 F4 00 F6 00 F8 00 F9 00 FB 00 FD 00 FF 00 00 01 01 01 03 01 05 01 07 01 08 01 0A 01 0C 01 0E 01 10 01 11 01 13 01 15 01 17 01 19 01 1A 01 1C 01 1E 01 20 01 22 01 23 01 25 01 27 01 29 01 2A 01 DC 00 DE 00 DF 00 E1 00 E2 00 E4 00 E5 00 E7 00 E8 00 EA 00 EB 00 ED 00 EE 00 F0 00 F1 00 F3 00 F4 00 F6 00 F7 00 F9 00 FA 00 FC 00 FD 00 FF 00 00 01 01 01 03 01 04 01 06 01 07 01 09 01 0A 01 0C 01 0D 01 0F 01 10 01 12 01 13 01 15 01 16 01 18 01 19 01 1B 01 1C 01 1E 01 1F 01 21 01 22 01 24 01 E2 00 E3 00 E4 00 E6 00 E7 00 E8 00 E9 00 EB 00 EC 00 ED 00 EF 00 F0 00 F1 00 F2 00 F4 00 F5 00 F6 00 F8 00 F9 00 FA 00 FB 00 FD 00 FE 00 FF 00 00 01 01 01 02 01 03 01 05 01 06 01 07 01 08 01 0A 01 0B 01 0C 01 0E 01 0F 01 10 01 11 01 13 01 14 01 15 01 17 01 18 01 19 01 1A 01 1C 01 1D 01 1E 01 E6 00 E7 00 E8 00 E9 00 EB 00 EC 00 ED 00 EE 00 EF 00 F0 00 F1 00 F2 00 F3 00 F4 00 F6 00 F7 00 F8 00 F9 00 FA 00 FB 00 FC 00 FD 00 FE 00 FF 00 00 01 01 01 02 01 03 01 04 01 05 01 06 01 07 01 08 01 09 01 0A 01 0C 01 0D 01 0E 01 0F 01 10 01 11 01 12 01 13 01 14 01 15 01 17 01 18 01 19 01 1A 01 EA 00 EB 00 EC 00 ED 00 EE 00 EF 00 F0 00 F0 00 F1 00 F2 00 F3 00 F4 00 F5 00 F6 00 F7 00 F8 00 F9 00 FA 00 FB 00 FC 00 FD 00 FE 00 FF 00 00 01 00 01 00 01 01 01 02 01 03 01 04 01 05 01 06 01 07 01 08 01 09 01 0A 01 0B 01 0C 01 0D 01 0E 01 0F 01 10 01 10 01 11 01 12 01 13 01 14 01 15 01 16 01 ED 00 EE 00 EF 00 EF 00 F0 00 F1 00 F2 00 F3 00 F4 00 F4 00 F5 00 F6 00 F7 00 F8 00 F8 00 F9 00 FA 00 FB 00 FC 00 FC 00 FD 00 FE 00 FF 00 00 01 00 01 00 01 01 01 02 01 03 01 04 01 04 01 05 01 06 01 07 01 08 01 08 01 09 01 0A 01 0B 01 0C 01 0C 01 0D 01 0E 01 0F 01 10 01 11 01 11 01 12 01 13 01 F0 00 F0 00 F1 00 F2 00 F2 00 F3 00 F4 00 F5 00 F5 00 F6 00 F7 00 F7 00 F8 00 F9 00 F9 00 FA 00 FB 00 FC 00 FC 00 FD 00 FE 00 FE 00 FF 00 00 01 00 01 00 01 01 01 02 01 02 01 03 01 04 01 04 01 05 01 06 01 07 01 07 01 08 01 09 01 09 01 0A 01 0B 01 0B 01 0C 01 0D 01 0E 01 0E 01 0F 01 10 01 10 01 F2 00 F3 00 F3 00 F4 00 F4 00 F5 00 F6 00 F6 00 F7 00 F7 00 F8 00 F9 00 F9 00 FA 00 FA 00 FB 00 FC 00 FC 00 FD 00 FD 00 FE 00 FF 00 FF 00 00 01 00 01 00 01 01 01 01 01 02 01 03 01 03 01 04 01 04 01 05 01 06 01 06 01 07 01 07 01 08 01 09 01 09 01 0A 01 0A 01 0B 01 0C 01 0C 01 0D 01 0D 01 0E 01 F4 00 F4 00 F5 00 F5 00 F6 00 F7 00 F7 00 F8 00 F8 00 F9 00 F9 00 FA 00 FA 00 FB 00 FB 00 FC 00 FC 00 FD 00 FD 00 FE 00 FE 00 FF 00 FF 00 00 01 00 01 00 01 01 01 01 01 02 01 02 01 03 01 03 01 04 01 04 01 05 01 05 01 06 01 06 01 07 01 07 01 08 01 08 01 09 01 09 01 0A 01 0B 01 0B 01 0C 01 0C 01 F6 00 F6 00 F7 00 F7 00 F7 00 F8 00 F8 00 F9 00 F9 00 FA 00 FA 00 FB 00 FB 00 FC 00 FC 00 FC 00 FD 00 FD 00 FE 00 FE 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 01 01 01 01 02 01 02 01 03 01 03 01 04 01 04 01 04 01 05 01 05 01 06 01 06 01 07 01 07 01 08 01 08 01 09 01 09 01 09 01 0A 01 0A 01 F7 00 F8 00 F8 00 F8 00 F9 00 F9 00 F9 00 FA 00 FA 00 FB 00 FB 00 FB 00 FC 00 FC 00 FD 00 FD 00 FD 00 FE 00 FE 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 02 01 02 01 03 01 03 01 03 01 04 01 04 01 05 01 05 01 05 01 06 01 06 01 07 01 07 01 07 01 08 01 08 01 08 01 09 01 F8 00 F9 00 F9 00 F9 00 FA 00 FA 00 FA 00 FB 00 FB 00 FB 00 FC 00 FC 00 FC 00 FD 00 FD 00 FD 00 FE 00 FE 00 FE 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 02 01 02 01 02 01 03 01 03 01 03 01 04 01 04 01 04 01 05 01 05 01 05 01 06 01 06 01 06 01 07 01 07 01 07 01 08 01 FA 00 FA 00 FA 00 FA 00 FB 00 FB 00 FB 00 FC 00 FC 00 FC 00 FC 00 FD 00 FD 00 FD 00 FE 00 FE 00 FE 00 FE 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 02 01 02 01 02 01 02 01 03 01 03 01 03 01 04 01 04 01 04 01 04 01 05 01 05 01 05 01 06 01 06 01 06 01 06 01 FB 00 FB 00 FB 00 FB 00 FC 00 FC 00 FC 00 FC 00 FD 00 FD 00 FD 00 FD 00 FE 00 FE 00 FE 00 FE 00 FF 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 01 01 02 01 02 01 02 01 02 01 03 01 03 01 03 01 03 01 04 01 04 01 04 01 04 01 05 01 05 01 05 01 05 01 FC 00 FC 00 FC 00 FC 00 FC 00 FD 00 FD 00 FD 00 FD 00 FD 00 FE 00 FE 00 FE 00 FE 00 FE 00 FF 00 FF 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 01 01 01 01 02 01 02 01 02 01 02 01 02 01 03 01 03 01 03 01 03 01 03 01 04 01 04 01 04 01 04 01 04 01 FC 00 FD 00 FD 00 FD 00 FD 00 FD 00 FD 00 FE 00 FE 00 FE 00 FE 00 FE 00 FE 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 01 01 01 01 01 01 02 01 02 01 02 01 02 01 02 01 02 01 03 01 03 01 03 01 03 01 03 01 03 01 04 01 FD 00 FD 00 FD 00 FD 00 FE 00 FE 00 FE 00 FE 00 FE 00 FE 00 FE 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 02 01 02 01 02 01 02 01 02 01 02 01 02 01 03 01 03 01 03 01 03 01 FE 00 FE 00 FE 00 FE 00 FE 00 FE 00 FE 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 02 01 02 01 02 01 02 01 02 01 02 01 02 01 FE 00 FE 00 FE 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 02 01 02 01 02 01 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 data is missing here
$94/96F7 Palette Data for the Nintendo Logo turning gray ($94/8237)
When you start the program, you see the Nintendo Logo appear and then turn from blue to silver. These palettes are used for this color transition.
The $FFFF at $94/97D7 is the signal for the subroutine at $94/8237 to end this palette changing.
$94/96F7 E7 38 E7 38 08 3D 08 3D 29 3D 29 3D 4A 41 4A 41 $94/9707 E7 38 08 39 08 3D 29 3D 4A 41 6B 41 6B 45 8C 45 $94/9717 E7 38 08 3D 29 3D 4A 41 6B 45 8C 49 AD 49 CE 4D $94/9727 E7 38 08 3D 4A 41 6B 45 8C 45 AD 49 EF 4D 10 52 $94/9737 E7 38 29 3D 4A 41 8C 45 CE 4D 10 52 31 56 73 5A $94/9747 E7 38 29 3D 6B 45 AD 49 EF 4D 31 52 73 5A B5 5E $94/9757 E7 38 29 41 8C 45 CE 4D 10 52 52 5A B5 5E F7 66 $94/9767 4A 41 8C 45 CE 4D 10 52 31 56 73 5A B5 62 F7 66 $94/9777 8C 45 CE 49 EF 4D 31 52 52 5A 94 5E B5 62 F7 66 $94/9787 CE 4D EF 51 31 56 52 5A 73 5A 94 5E D6 62 F7 66 $94/9797 10 52 31 56 52 56 73 5A 94 5E B5 62 D6 62 F7 66 $94/97A7 73 5A 94 5A 94 5E B5 5E B5 62 D6 62 D6 66 F7 66 $94/97B7 B5 5E B5 5E D6 62 D6 62 D6 62 D6 62 F7 66 F7 66 $94/97C7 F7 66 F7 66 F7 66 F7 66 F7 66 F7 66 F7 66 F7 66 $94/97D7 FF FF
$94/BA1B ? (Change Screen settings and more)
$94/BA1B 9B TXY A:A99F X:001E Y:0004 P:eNvmxdIzc $94/BA1C E2 20 SEP #$20 A:A99F X:001E Y:001E P:envmxdIzc $94/BA1E C2 10 REP #$10 A:A99F X:001E Y:001E P:envMxdIzc $94/BA20 AD 04 01 LDA $0104 ; Keep BG mode, but reset Tile Size and remove BG3 Priority Bit $94/BA23 29 07 AND #$07 $94/BA25 8D 05 21 STA $2105 $94/BA28 8D 04 01 STA $0104 $94/BA2B A9 14 LDA #$14 ; Put BG3 and Sprites on Main Screen $94/BA2D 8D 2C 21 STA $212C $94/BA30 8D 26 01 STA $0126 ; Update Main Screen Designation Buffer $94/BA33 A9 03 LDA #$03 ; Put BG1 and BG2 on Sub Screen $94/BA35 8D 2D 21 STA $212D $94/BA38 8D 27 01 STA $0127 ; Update Sub Screen Designation Buffer $94/BA3B A9 02 LDA #$02 A:A903 X:001E Y:001E P:envMxdIzc $94/BA3D 8D 30 21 STA $2130 [$81:2130] A:A902 X:001E Y:001E P:envMxdIzc $94/BA40 8D 2A 01 STA $012A [$81:012A] A:A902 X:001E Y:001E P:envMxdIzc $94/BA43 A9 20 LDA #$20 A:A902 X:001E Y:001E P:envMxdIzc $94/BA45 8D 31 21 STA $2131 [$81:2131] A:A920 X:001E Y:001E P:envMxdIzc $94/BA48 8D 2B 01 STA $012B [$81:012B] A:A920 X:001E Y:001E P:envMxdIzc $94/BA4B A2 21 00 LDX #$0021 A:A920 X:001E Y:001E P:envMxdIzc $94/BA4E A9 00 LDA #$00 A:A920 X:0021 Y:001E P:envMxdIzc $94/BA50 9D 7D 06 STA $067D,x[$81:069E] A:A900 X:0021 Y:001E P:envMxdIZc $94/BA53 CA DEX A:A900 X:0021 Y:001E P:envMxdIZc $94/BA54 10 FA BPL $FA [$BA50] A:A900 X:0020 Y:001E P:envMxdIzc $94/BA56 A2 00 00 LDX #$0000 A:A900 X:FFFF Y:001E P:eNvMxdIzc $94/BA59 BF 06 50 10 LDA $105006,x[$10:5006] A:A900 X:0 Y:001E P:envMxdIZc $94/BA5D 9D 7D 06 STA $067D,x[$81:067D] A:A900 X:0 Y:001E P:envMxdIZc $94/BA60 F0 03 BEQ $03 [$BA65] A:A900 X:0 Y:001E P:envMxdIZc $94/BA65 8A TXA A:A900 X:0 Y:001E P:envMxdIZc $94/BA66 18 CLC A:A900 X:0 Y:001E P:envMxdIZc $94/BA67 69 06 ADC #$06 A:A900 X:0 Y:001E P:envMxdIZc $94/BA69 C9 1A CMP #$1A A:A906 X:0 Y:001E P:envMxdIzc $94/BA6B D0 02 BNE $02 [$BA6F] A:A906 X:0 Y:001E P:eNvMxdIzc $94/BA6F BB TYX A:A906 X:0 Y:001E P:eNvMxdIzc $94/BA70 9D F2 1A STA $1AF2,x[$81:1B10] A:A906 X:001E Y:001E P:envMxdIzc $94/BA73 C2 20 REP #$20 A:A906 X:001E Y:001E P:envMxdIzc $94/BA75 A9 10 00 LDA #$0010 A:A906 X:001E Y:001E P:envmxdIzc $94/BA78 8D 4C 01 STA $014C [$81:014C] A:0010 X:001E Y:001E P:envmxdIzc $94/BA7B A9 08 00 LDA #$0008 A:0010 X:001E Y:001E P:envmxdIzc $94/BA7E 8D 4E 01 STA $014E [$81:014E] A:0008 X:001E Y:001E P:envmxdIzc $94/BA81 6B RTL A:0008 X:001E Y:001E P:envmxdIzc
$94/BCFF Clear BS-X SRAM
$94/BCFF 08 PHP ; Buffer Flag Register value and Data Bank on stack $94/BD00 8B PHB $94/BD01 F4 00 10 PEA $1000 ; Set Data Bank to $10 $94/BD04 AB PLB $94/BD05 AB PLB $94/BD06 E2 20 SEP #$20 ; A = 8-bit $94/BD08 C2 10 REP #$10 ; X/Y = 16-bit $94/BD0A A2 6D 09 LDX #$096D ; Clear $10/5006 to $10/5973 $94/BD0D A9 00 LDA #$00 $94/BD0F 9D 06 50 STA $5006,x $94/BD12 CA DEX $94/BD13 10 FA BPL $FA ; [$BD0F] $94/BD15 A2 88 13 LDX #$1388 ; Set Money Start Value: 5000 (= #$1388) $94/BD18 8E 1E 50 STX $501E $94/BD1B A2 D9 98 LDX #$98D9 ; Set GUI Border Scheme to standard value (= $94/98D9) $94/BD1E 8E 6A 59 STX $596A $94/BD21 A9 94 LDA #$94 $94/BD23 8D 6C 59 STA $596C $94/BD26 A2 31 A4 LDX #$A431 ; Set GUI Color Scheme pointer (= $94/A431) $94/BD29 8E 6D 59 STX $596D $94/BD2C A9 94 LDA #$94 $94/BD2E 8D 6F 59 STA $596F $94/BD31 AB PLB ; Restore Data Bank $94/BD32 22 AA C9 80 JSL $80C9AA ; Calculate new SRAM Checksum $94/BD36 28 PLP ; Restore Flag Register value $94/BD37 6B RTL
$94/BD38 TOKEN DATA
$94/C065 ?
$94/C065 08 PHP A:C01B X:0026 Y:0004 P:eNvmxdIzc $94/C066 E2 10 SEP #$10 A:C01B X:0026 Y:0004 P:eNvmxdIzc $94/C068 C2 20 REP #$20 A:C01B X:0026 Y:0004 P:eNvmXdIzc $94/C06A A9 01 00 LDA #$0001 A:C01B X:0026 Y:0004 P:eNvmXdIzc $94/C06D 8D 5E 0B STA $0B5E [$81:0B5E] A:0001 X:0026 Y:0004 P:envmXdIzc $94/C070 22 11 84 80 JSL $808411[$80:8411] A:0001 X:0026 Y:0004 P:envmXdIzc
code/data is missing here
$94/C077 C2 30 REP #$30 A:94FF X:00FF Y:0032 P:envmXdIzc $94/C079 A9 04 00 LDA #$0004 A:94FF X:00FF Y:0032 P:envmxdIzc $94/C07C 8D A8 0B STA $0BA8 [$81:0BA8] A:0004 X:00FF Y:0032 P:envmxdIzc $94/C07F A9 00 20 LDA #$2000 A:0004 X:00FF Y:0032 P:envmxdIzc $94/C082 8D B2 0B STA $0BB2 [$81:0BB2] A:2000 X:00FF Y:0032 P:envmxdIzc $94/C085 A9 00 38 LDA #$3800 A:2000 X:00FF Y:0032 P:envmxdIzc $94/C088 8D B4 0B STA $0BB4 [$81:0BB4] A:3800 X:00FF Y:0032 P:envmxdIzc $94/C08B A9 20 00 LDA #$0020 A:3800 X:00FF Y:0032 P:envmxdIzc $94/C08E 8D AA 0B STA $0BAA [$81:0BAA] A:0020 X:00FF Y:0032 P:envmxdIzc $94/C091 A9 01 00 LDA #$0001 A:0020 X:00FF Y:0032 P:envmxdIzc $94/C094 8D AE 0B STA $0BAE [$81:0BAE] A:0001 X:00FF Y:0032 P:envmxdIzc $94/C097 A9 00 00 LDA #$0000 A:0001 X:00FF Y:0032 P:envmxdIzc $94/C09A 8D C2 0C STA $0CC2 [$81:0CC2] A:0 X:00FF Y:0032 P:envmxdIZc $94/C09D 8D C4 0C STA $0CC4 [$81:0CC4] A:0 X:00FF Y:0032 P:envmxdIZc $94/C0A0 22 BD 83 80 JSL $8083BD[$80:83BD] A:0 X:00FF Y:0032 P:envmxdIZc $94/C0A4 A2 80 00 LDX #$0080 A:0001 X:00FF Y:0032 P:envmxdIZc $94/C0A7 8E 15 21 STX $2115 [$81:2115] A:0001 X:0080 Y:0032 P:envmxdIzc $94/C0AA A9 F6 89 LDA #$89F6 A:0001 X:0080 Y:0032 P:envmxdIzc $94/C0AD 85 78 STA $78 [$00:0078] A:89F6 X:0080 Y:0032 P:eNvmxdIzc $94/C0AF A2 95 00 LDX #$0095 A:89F6 X:0080 Y:0032 P:eNvmxdIzc $94/C0B2 86 7A STX $7A [$00:007A] A:89F6 X:0095 Y:0032 P:envmxdIzc $94/C0B4 A9 00 20 LDA #$2000 A:89F6 X:0095 Y:0032 P:envmxdIzc $94/C0B7 85 7D STA $7D [$00:007D] A:2000 X:0095 Y:0032 P:envmxdIzc $94/C0B9 22 1E 95 80 JSL $80951E[$80:951E] A:2000 X:0095 Y:0032 P:envmxdIzc $94/C0BD A9 D1 8E LDA #$8ED1 A:0095 X:0 Y:2A00 P:envmxdIzc $94/C0C0 85 78 STA $78 [$00:0078] A:8ED1 X:0 Y:2A00 P:eNvmxdIzc $94/C0C2 A2 95 00 LDX #$0095 A:8ED1 X:0 Y:2A00 P:eNvmxdIzc $94/C0C5 86 7A STX $7A [$00:007A] A:8ED1 X:0095 Y:2A00 P:envmxdIzc $94/C0C7 A9 00 60 LDA #$6000 A:8ED1 X:0095 Y:2A00 P:envmxdIzc $94/C0CA 85 7D STA $7D [$00:007D] A:6000 X:0095 Y:2A00 P:envmxdIzc $94/C0CC 22 1E 95 80 JSL $80951E[$80:951E] A:6000 X:0095 Y:2A00 P:envmxdIzc $94/C0D0 A9 BB 8D LDA #$8DBB A:0195 X:0 Y:6800 P:envmxdIzc $94/C0D3 85 78 STA $78 [$00:0078] A:8DBB X:0 Y:6800 P:eNvmxdIzc $94/C0D5 A2 95 00 LDX #$0095 A:8DBB X:0 Y:6800 P:eNvmxdIzc $94/C0D8 86 7A STX $7A [$00:007A] A:8DBB X:0095 Y:6800 P:envmxdIzc $94/C0DA 22 9F 93 80 JSL $80939F[$80:939F] A:8DBB X:0095 Y:6800 P:envmxdIzc
code/data is missing here
$94/C0E1 A9 01 00 LDA #$0001 A:0095 X:0 Y:0200 P:envmxdIzc $94/C0E4 8D 1C 02 STA $021C [$81:021C] A:0001 X:0 Y:0200 P:envmxdIzc $94/C0E7 C2 20 REP #$20 A:0001 X:0 Y:0200 P:envmxdIzc $94/C0E9 A9 10 00 LDA #$0010 A:0001 X:0 Y:0200 P:envmxdIzc $94/C0EC 8D 4C 01 STA $014C [$81:014C] A:0010 X:0 Y:0200 P:envmxdIzc $94/C0EF A9 04 00 LDA #$0004 A:0010 X:0 Y:0200 P:envmxdIzc $94/C0F2 8D 4E 01 STA $014E [$81:014E] A:0004 X:0 Y:0200 P:envmxdIzc $94/C0F5 28 PLP A:0004 X:0 Y:0200 P:envmxdIzc $94/C0F6 6B RTL A:0004 X:0 Y:0200 P:eNvmxdIzc
Bank $9F
$9F/FFF0 Address of the SPC program
This gets used at $80/8FF7. This is an UNNECESSARY LINE: It makes no sense why this address isn't directly loaded there. This must be a remnant of the development that was left the few bytes it saves would make no difference.
$9F/FFF0 00 80 9D ; SPC program is at $9D/8000
Internal Data for BS-X BIOS
| |
---|---|