Sphere of Destiny disassembly ============================= Sphere of Destiny was written by Gary Partis, and was published by Audiogenic Software for the BBC Micro in 1987. The player must navigate a ball through a multicoloured freeway, avoiding delays by bouncing over holes. The following disassembly was created by reverse engineering binary images, without access to any source code. It is nevertheless reasonably complete, allowing the technical approaches used to be understood. The author of this disassembly imposes no additional copyright restrictions beyond those already present on the game itself. It is provided for educational purposes only, and it is hoped that the original authors will accept it in the good faith it was intended - as a tribute to their skills. Technical notes =============== A custom tape loader loads the main game binary from an encrypted stream. It uses almost identical code as for the author's 1986 game, Psycastria. The game uses MODE 5. An interrupt-driven routine changes a section of the screen to MODE 4, and also changes the palette eight times per v-sync. During the game, the screen is static except for the ball. There are 64 levels, which are procedurally generated from 64 pre-defined sections. Each section is 32 strips long, and each level uses 11 sections. A cheat mode may be activated by pressing "\" in the title screen, and entering the password "LAZONNOMORE" when prompted. This replaces all holes with white tiles, and allows levels to be skipped by pressing "J". When the game is completed, a 2-bit picture of a topless woman is displayed. Interesting pokes ================= &1564 = &a9 infinite lives &154f = &a5, &174c = &a5 infinite time &1864 = &00 infinite bounces &047f = &a9 disable strip colouring Loader disassembly ================== ; S.O.D. ; ffff6000 ffff6000 0e00 ; entry_point &6000 a9 0f LDA #&0f ; Flush all buffers &6002 a2 00 LDX #&00 &6004 20 f4 ff JSR &fff4 ; OSBYTE &6007 78 SEI &6008 a2 00 LDX #&00 ; write_wait_a_mo_loop &600a bd 15 60 LDA &6015,X ; wait_a_mo_string &600d f0 14 BEQ &6023 ; first_stage &600f 20 e3 ff JSR &ffe3 ; OSASCI &6012 e8 INX &6013 d0 f5 BNE &600a ; write_wait_a_mo_loop # Always branches ; wait_a_mo_string &6015 0d ; CR &6016 57 61 69 74 20 61 20 6d 6f 2e 2e 2e ; "Wait a mo..." &6021 00 ; first_stage &6023 a9 df LDA #&df &6025 2d 6b fe AND &fe6b ; User VIA auxiliary control register # Set User VIA timer 2 to one-shot &6028 8d 6b fe STA &fe6b ; User VIA auxiliary control register &602b a9 a0 LDA #&a0 # Enable User VIA timer 2 interrupts &602d 8d 6e fe STA &fe6e ; User VIA interrupt enable register &6030 a9 00 LDA #&00 &6032 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB &6035 8d 69 fe STA &fe69 ; User VIA timer 2 counter MSB &6038 38 SEC &6039 a2 00 LDX #&00 &603b a0 00 LDY #&00 ; first_stage_decryption_loop # Decrypt &6100 - &61ff &603d b9 00 61 LDA &6100,Y ; second_stage &6040 59 01 66 EOR &6601,Y &6043 4d 84 64 EOR &6484 # actually EOR &6400 + four_low &6046 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &6049 5d 01 62 EOR &6201,X &604c 48 PHA &604d a9 7f LDA #&7f # Disable all System VIA interrupts &604f 8d 4e fe STA &fe4e ; System VIA interrupt enable register &6052 68 PLA &6053 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &6056 4d a4 69 EOR &69a4 # actually EOR &6900 + nine_one_low &6059 5d 01 64 EOR &6401,X &605c 59 01 62 EOR &6201,Y &605f 49 38 EOR #&38 &6061 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &6064 5d 01 67 EOR &6701,X &6067 4d ea 66 EOR &66ea # actually EOR &6600 + six_low &606a 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &606d 59 01 65 EOR &6501,Y &6070 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &6073 4d 64 69 EOR &6964 # actually EOR &6900 + nine_two_low &6076 59 01 6a EOR &6a01,Y &6079 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &607c 4d 39 68 EOR &6839 # actually EOR &6800 + eight_low &607f 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &6082 4d 75 65 EOR &6575 # actually EOR &6500 + five_low &6085 59 01 64 EOR &6401,Y &6088 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &608b 5d 01 69 EOR &6901,X &608e 99 00 61 STA &6100,Y ; second_stage &6091 ad 74 60 LDA &6074 ; nine_two_low &6094 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &6097 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &609a 8d 74 60 STA &6074 ; nine_two_low &609d 4d 83 60 EOR &6083 ; five_low &60a0 49 38 EOR #&38 &60a2 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &60a5 8d 83 60 STA &6083 ; five_low &60a8 4d 57 60 EOR &6057 ; nine_one_low &60ab 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &60ae 4d 74 60 EOR &6074 ; nine_two_low &60b1 4d 7d 60 EOR &607d ; eight_low &60b4 8d 57 60 STA &6057 ; nine_one_low &60b7 4d 44 60 EOR &6044 ; four_low &60ba 4d 57 60 EOR &6057 ; nine_one_low &60bd 8d 44 60 STA &6044 ; four_low &60c0 4d 7d 60 EOR &607d ; eight_low &60c3 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &60c6 e9 c8 SBC #&c8 &60c8 4d 44 60 EOR &6044 ; four_low &60cb 8d 7d 60 STA &607d ; eight_low &60ce 4d 57 60 EOR &6057 ; nine_one_low &60d1 4d 68 60 EOR &6068 ; six_low &60d4 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &60d7 8d 68 60 STA &6068 ; six_low &60da c8 INY &60db f0 03 BEQ &60e0 ; next_round &60dd 4c 3d 60 JMP &603d ; first_stage_decryption_loop ; next_round &60e0 e8 INX &60e1 f0 03 BEQ &60e6 ; calculate_checksum &60e3 4c 3d 60 JMP &603d ; first_stage_decryption_loop ; calculate_checksum &60e6 a9 20 LDA #&20 &60e8 8d 6e fe STA &fe6e ; User VIA interrupt enable register # Disable User VIA timer 2 interrupts &60eb a2 00 LDX #&00 &60ed 8a TXA ; wipe_6000_to_60ea_loop &60ee 9d 00 60 STA &6000,X ; first_stage # Wipe &6000 - &60ea &60f1 e8 INX &60f2 e0 eb CPX #&eb &60f4 d0 f8 BNE &60ee ; wipe_6000_to_60ea_loop &60f6 a2 00 LDX #&00 &60f8 8a TXA ; calculate_checksum_loop # Checksum &6100 - &61ff &60f9 18 CLC &60fa 7d 00 61 ADC &6100,X ; second_stage &60fd e8 INX &60fe d0 f9 BNE &60f9 ; calculate_checksum_loop # &6100 - &61ff is decrypted by first stage ; second_stage &6100 cd 00 62 CMP &6200 ; expected_checksum &6103 f0 03 BEQ &6108 ; checksum_ok # Reset system if checksum is incorrect ; to_os_reset &6105 6c fc ff JMP (&fffc) ; os_reset_address_low ; checksum_ok &6108 2c e5 fe BIT &fee5 ; tube ULA data register 3 # Reset system if second processor present &610b 10 f8 BPL &6105 ; to_os_reset &610d ad b7 ff LDA &ffb7 ; os_rom_default_vector_table_address_low &6110 85 00 STA &00 ; default_vector_table_address_low &6112 ad b8 ff LDA &ffb8 ; os_rom_default_vector_table_address_high &6115 85 01 STA &01 ; default_vector_table_address_high &6117 ac b9 ff LDY &ffb9 ; OSRDRM # Bug: should be &ffb6, os_rom_vector_table_length ; reset_vector_table_loop &611a b1 00 LDA (&00),Y ; default_vector_table_address &611c 99 00 02 STA &0200,Y ; os_vector_table &611f 88 DEY &6120 10 f8 BPL &611a ; reset_vector_table_loop &6122 a2 00 LDX #&00 &6124 8e ff 02 STX &02ff ; os_block_length_high ; check_roms_loop # For each ROM, &6127 8e 30 fe STX &fe30 ; Paged ROM latch &612a ad 09 80 LDA &8009 ; rom_data + &09 &612d 29 df AND #&df &612f c9 52 CMP #&52 : "R" # Is this a Replay ROM? &6131 d0 12 BNE &6145 ; not_replay &6133 ad 0a 80 LDA &800a ; rom_data + &0a &6136 29 df AND #&df &6138 c9 45 CMP #&45 : "E" &613a d0 09 BNE &6145 ; not_replay &613c ad 0b 80 LDA &800b ; rom_data + &0b &613f 29 df AND #&df &6141 c9 50 CMP #&50 : "P" &6143 f0 c0 BEQ &6105 ; to_os_reset # If so, reset system ; not_replay &6145 ad 24 80 LDA &8024 ; rom_data + &24 &6148 29 df AND #&df &614a c9 57 CMP #&57 : "W" # Is this the Doctor Who and the Mines of Terror ROM? &614c d0 1a BNE &6168 ; consider_next_rom &614e ad 25 80 LDA &8025 ; rom_data + &25 &6151 29 df AND #&df &6153 c9 48 CMP #&48 : "H" &6155 d0 11 BNE &6168 ; consider_next_rom &6157 ad 26 80 LDA &8026 ; rom_data + &26 &615a 29 df AND #&df &615c c9 4f CMP #&4f : "O" &615e d0 08 BNE &6168 ; consider_next_rom &6160 ee 77 02 INC &0277 ; dr_who_rom_present # Unused variable &6163 a9 21 LDA #&21 ; "!" &6165 20 ee ff JSR &ffee ; OSWRCH ; consider_next_rom &6168 e8 INX &6169 d0 bc BNE &6127 ; check_rom_loop &616b a9 df LDA #&df &616d 2d 6b fe AND &fe6b ; User VIA auxiliary control register # Set User VIA timer 2 to one-shot &6170 8d 6b fe STA &fe6b ; User VIA auxiliary control register &6173 a9 a0 LDA #&a0 # Enable User VIA timer 2 interrupts &6175 8d 6e fe STA &fe6e ; User VIA interrupt enable register &6178 a9 00 LDA #&00 &617a 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB &617d 8d 69 fe STA &fe69 ; User VIA timer 2 counter MSB &6180 a2 00 LDX #&00 ; initialise_decryption_key_loop # Populate &0600 - &06ff with decryption key &6182 8a TXA &6183 49 ff EOR #&ff &6185 9d 00 06 STA &0600,X ; decryption_key &6188 e8 INX &6189 d0 f7 BNE &6182 ; initialise_decryption_key_loop &618b a2 00 LDX #&00 ; initialise_decryption_key_outer_loop &618d 86 70 STX &70 ; round &618f a0 00 LDY #&00 ; initialise_decryption_key_inner_loop &6191 84 71 STY &71 ; offset &6193 ae 68 fe LDX &fe68 ; User VIA timer 2 counter LSB &6196 bd 00 06 LDA &0600,X ; decryption_key &6199 85 72 STA &72 ; tmp &619b e8 INX &619c bd 00 06 LDA &0600,X ; decryption_key &619f ca DEX &61a0 9d 00 06 STA &0600,X ; decryption_key &61a3 e8 INX &61a4 a5 72 LDA &72 ; tmp &61a6 9d 00 06 STA &0600,X ; decryption_key &61a9 ac 68 fe LDY &fe68 ; User VIA timer 2 counter LSB &61ac ae 69 fe LDX &fe69 ; User VIA timer 2 counter MSB &61af bd 00 06 LDA &0600,X ; decryption_key &61b2 85 72 STA &72 ; tmp &61b4 b9 00 06 LDA &0600,Y ; decryption_key &61b7 9d 00 06 STA &0600,X ; decryption_key &61ba a5 72 LDA &72 ; tmp &61bc 99 00 06 STA &0600,Y ; decryption_key &61bf a4 71 LDY &71 ; offset &61c1 c8 INY &61c2 d0 cd BNE &6191 ; initialise_decryption_key_outer_loop &61c4 a6 70 LDX &70 ; round &61c6 e8 INX &61c7 d0 c4 BNE &618d ; initialise_decryption_key_inner_loop &61c9 a9 20 LDA #&20 # Disable User VIA timer 2 interrupts &61cb 8d 6e fe STA &fe6e ; User VIA interrupt enable register &61ce a0 00 LDY #&00 &61d0 84 00 STY &00 ; target_address_low &61d2 a9 20 LDA #&20 ; &2000 = third_stage &61d4 85 01 STA &01 ; target_address_high &61d6 a9 01 LDA #&01 &61d8 85 02 STA &02 ; source_address_low &61da a9 62 LDA #&62 ; &6201 = unrelocated_third_stage &61dc 85 03 STA &03 ; source_address_high ; second_stage_decryption_loop # Decrypt &6201 - &7fff to &2000 - &3dfe &61de b1 02 LDA (&02),Y ; source_address &61e0 59 00 06 EOR &0600,Y ; decryption_key &61e3 91 00 STA (&00),Y ; target_address &61e5 8a TXA &61e6 91 02 STA (&02),Y ; source_address &61e8 c8 INY &61e9 d0 f3 BNE &61de ; second_stage_decryption_loop &61eb e6 01 INC &01 ; target_address_high &61ed e6 03 INC &03 ; source_address_high &61ef 10 ed BPL &61de ; second_stage_decryption_loop &61f1 a9 c8 LDA #&c8 ; Read/Write BREAK/ESCAPE effect &61f3 a2 03 LDX #&03 ; Clear memory on next RESET &61f5 20 f4 ff JSR &fff4 ; OSBYTE &61f8 a9 ff LDA #&ff # Enable all System VIA interrupts &61fa 8d 4e fe STA &fe4e ; System VIA interrupt enable register &61fd 4c 00 20 JMP &2000 ; third_stage ; expected_checksum &6200 42 # &6201 - &6db5 is decrypted to &2000 - &2bb5 by second stage ; third_stage &2000 a9 72 LDA #&72 ; Specify video memory to use on next MODE change &2002 a2 01 LDX #&01 ; Only use shadow memory if MODE number is > 127 &2004 a0 00 LDY #&00 &2006 20 f4 ff JSR &fff4 ; OSBYTE ; initialise_font # Populate &0900 - &0bff with character definitions &2009 a9 14 LDA #&14 ; Implode user defined character font RAM &200b a2 00 LDX #&00 &200d 20 f4 ff JSR &fff4 ; OSBYTE &2010 a9 00 LDA #&00 &2012 85 00 STA &00 ; font_address_low &2014 a9 09 LDA #&09 ; &0900 = font_data &2016 85 01 STA &01 ; font_address_high &2018 a9 20 LDA #&20 ; " " &201a 85 02 STA &02 ; character_buffer ; initialise_font_character_loop &201c a2 02 LDX #&02 ; &0002 = character_buffer &201e a0 00 LDY #&00 &2020 a9 0a LDA #&0a ; Read character definition &2022 20 f1 ff JSR &fff1 ; OSWORD &2025 a0 07 LDY #&07 ; initialise_font_byte_loop &2027 b9 03 00 LDA &0003,Y ; character_buffer + 1 &202a 91 00 STA (&00),Y ; font_address &202c 88 DEY &202d 10 f8 BPL &2027 ; initialise_font_byte_loop &202f a5 00 LDA &00 ; font_address_low &2031 18 CLC &2032 69 08 ADC #&08 &2034 85 00 STA &00 ; font_address_low &2036 a5 01 LDA &01 ; font_address_high &2038 69 00 ADC #&00 &203a 85 01 STA &01 ; font_address_high &203c e6 02 INC &02 ; character_buffer &203e 10 dc BPL &201c ; initialise_font_character_loop ; initialise_screen &2040 a9 35 LDA #&35 ; &2535 = initialise_screen_string &2042 85 00 STA &00 ; string_address_low &2044 a9 25 LDA #&25 &2046 85 01 STA &01 ; string_address_high &2048 a0 00 LDY #&00 ; write_initialise_screen_loop &204a b1 00 LDA (&00),Y ; string_address &204c c9 fe CMP #&fe # &fe indicates end of string &204e f0 0a BEQ &205a ; end_of_string &2050 20 ee ff JSR &ffee ; OSWRCH &2053 c8 INY &2054 d0 f4 BNE &204a ; write_initialise_screen_loop &2056 e6 01 INC &01 ; string_address_high &2058 d0 f0 BNE &204a ; write_initialise_screen_loop ; end_of_string &205a 78 SEI &205b a2 ff LDX #&ff &205d 9a TXS ; move_20ae_to_24ad &205e a9 ae LDA #&ae ; &20ae = unrelocated_fourth_stage &2060 85 00 STA &00 ; source_address_low &2062 a9 20 LDA #&20 &2064 85 01 STA &01 ; source_address_high &2066 a9 04 LDA #&04 ; &0400 = fourth_stage &2068 85 03 STA &03 ; target_address_high &206a a0 00 LDY #&00 &206c 84 02 STY &02 ; target_address_low ; move_20ae_to_24ad_loop # Move &20ae - &24ad to &0400 - &08ff &206e b1 00 LDA (&00),Y ; source_address &2070 91 02 STA (&02),Y ; target_address &2072 c8 INY &2073 d0 f9 BNE &206e ; move_20ae_to_24ad_loop &2075 e6 01 INC &01 ; source_address_high &2077 e6 03 INC &03 ; target_address_high &2079 a5 03 LDA &03 ; target_address_high &207b c9 09 CMP #&09 &207d d0 ef BNE &206e ; move_20ae_to_24ad_loop ; move_6e80_to_7fff &207f a9 6e LDA #&6e ; &6e80 &2081 85 01 STA &01 ; source_address_high &2083 a9 0d LDA #&0d ; &0d00 &2085 85 03 STA &03 ; target_address_high &2087 84 02 STY &02 ; target_address_low &2089 a9 80 LDA #&80 &208b 85 00 STA &00 ; source_address_low ; move_6e80_to_7fff_loop # Move &6e80 - &7fff to &0d00 - &1e7f (screen memory) &208d b1 00 LDA (&00),Y ; source_address &208f 91 02 STA (&02),Y ; target_address &2091 c8 INY &2092 d0 f9 BNE &208d ; move_6e80_to_7fff_loop &2094 e6 03 INC &03 ; target_address_high &2096 e6 01 INC &01 ; source_address_high &2098 10 f3 BPL &208d ; move_6e80_to_7fff_loop &209a a9 c8 LDA #&c8 ; Read/Write BREAK/ESCAPE effect &209c a2 03 LDX #&03 ; Clear memory on next RESET &209e 20 f4 ff JSR &fff4 ; OSBYTE &20a1 a9 7f LDA #&7f # Disable all User VIA interrupts &20a3 8d 6e fe STA &fe6e ; User VIA interrupt enable register &20a6 a9 7d LDA #&7d # Disable all System VIA interrupts except v-sync &20a8 8d 4e fe STA &fe4e ; System VIA interrupt enable register &20ab 4c 00 04 JMP &0400 ; fourth_stage # &20ae - &2534 is moved to &0400 - &0886 at &206e ; fourth_stage &0400 a2 06 LDX #&06 ; R6: Vertical displayed register &0402 a9 07 LDA #&07 &0404 20 91 07 JSR &0791 ; set_video_register &0407 a2 07 LDX #&07 ; R7: Vertical sync position &0409 a9 16 LDA #&16 &040b 20 91 07 JSR &0791 ; set_video_register &040e a2 0c LDX #&0c ; R12: Displayed screen start address register (high) &0410 a9 01 LDA #&01 # Set screen start address to &0d00 &0412 20 91 07 JSR &0791 ; set_video_register &0415 a2 0d LDX #&0d ; R13: Displayed screen start address register (low) &0417 a9 a0 LDA #&a0 &0419 20 91 07 JSR &0791 ; set_video_register &041c a2 01 LDX #&01 ; R1: Number of characters per line &041e a9 50 LDA #&50 &0420 20 91 07 JSR &0791 ; set_video_register &0423 78 SEI &0424 a2 10 LDX #&10 &0426 a9 00 LDA #&00 ; wipe_osfile_control_block_loop &0428 9d ee 02 STA &02ee,X ; osfile_control_block # Wipe &02ee - &02fe &042b ca DEX &042c 10 fa BPL &0428 ; wipe_osfile_control_block_loop &042e a9 00 LDA #&00 ; &0800 = irq1_handler &0430 8d 04 02 STA &0204 ; irq1_vector_low &0433 a9 08 LDA #&08 &0435 8d 05 02 STA &0205 ; irq1_vector_high &0438 a0 00 LDY #&00 ; delay_loop &043a 98 TYA &043b 48 PHA ; count &043c a2 ff LDX #&ff &043e 86 60 STX &60 ; scrolltext_offset &0440 e8 INX ; 0 &0441 86 61 STX &61 ; scrolltext_nibble &0443 a2 08 LDX #&08 &0445 20 39 07 JSR &0739 ; calculate_screen_address &0448 a9 02 LDA #&02 &044a 8d 38 07 STA &0738 ; text_colour &044d 20 60 07 JSR &0760 ; plot_string &0450 53 65 61 72 63 68 69 6e 67 20 66 6f 72 20 67 61 ; "Searching for ga" &0460 6d 65 20 63 6f 64 65 21 00 ; "me code!" &0469 68 PLA ; count &046a a8 TAY &046b 88 DEY &046c d0 cc BNE &043a ; delay_loop &046e 58 CLI ; wait_for_start_of_data &046f a2 ff LDX #&ff &0471 9a TXS &0472 a2 0e LDX #&0e # Disable Cap Lock LED &0474 8e 40 fe STX &fe40 ; System VIA port B input/output register &0477 e8 INX ; &f # Disable Shift Lock LED &0478 8e 40 fe STX &fe40 ; System VIA port B input/output register &047b a9 85 LDA #&85 # Set to 2400 baud, switch on cassette motor &047d 8d 10 fe STA &fe10 ; Serial ULA control register &0480 a9 1f LDA #&1f ; 0001 1111 # Reset cassette system &0482 8d 08 fe STA &fe08 ; Cassette ACIA control register &0485 a9 1d LDA #&1d ; 0001 1101 # 8 bit word, 1 stop bit, even parity, 1200 baud &0487 8d 08 fe STA &fe08 ; Cassette ACIA control register &048a a0 00 LDY #&00 &048c 84 02 STY &02 ; suppress_errors # Set to zero to suppress errors &048e 84 00 STY &00 ; load_address_low &0490 a9 20 LDA #&20 ; &2000 = unrelocated_main_binary &0492 85 01 STA &01 ; load_address_high ; wait_for_start_of_data_loop &0494 20 98 07 JSR &0798 ; get_byte_from_tape &0497 c9 aa CMP #&aa &0499 d0 f9 BNE &0494 ; wait_for_start_of_data_loop &049b 20 98 07 JSR &0798 ; get_byte_from_tape &049e c9 54 CMP #&54 ; "T" &04a0 d0 f2 BNE &0494 ; wait_for_start_of_data_loop &04a2 20 98 07 JSR &0798 ; get_byte_from_tape &04a5 c9 44 CMP #&44 ; "D" &04a7 d0 eb BNE &0494 ; wait_for_start_of_data_loop &04a9 20 98 07 JSR &0798 ; get_byte_from_tape &04ac c9 4e CMP #&4e ; "N" &04ae d0 e4 BNE &0494 ; wait_for_start_of_data_loop &04b0 20 98 07 JSR &0798 ; get_byte_from_tape &04b3 c9 00 CMP #&00 &04b5 d0 dd BNE &0494 ; wait_for_start_of_data_loop &04b7 85 04 STA &04 ; fifth_stage_offset &04b9 a9 60 LDA #&60 &04bb 85 02 STA &02 ; suppress_errors # Set to non-zero to consider errors &04bd 85 05 STA &05 ; bytes_remaining &04bf a9 32 LDA #&32 ; "2" &04c1 85 1e STA &1e ; blocks_remaining # Start at 255 blocks remaining &04c3 a9 35 LDA #&35 ; "5" &04c5 85 1f STA &1f ; blocks_remaining + 1 &04c7 85 20 STA &20 ; blocks_remaining + 2 &04c9 20 81 07 JSR &0781 ; wipe_text_area &04cc 20 97 06 JSR &0697 ; write_blocks_remaining ; read_data_loop # Read &2000 - &7fff as 256 60 byte blocks &04cf 20 98 07 JSR &0798 ; get_byte_from_tape &04d2 84 03 STY &03 ; load_address_offset &04d4 45 03 EOR &03 ; load_address_offset &04d6 45 01 EOR &01 ; load_address_high &04d8 20 58 06 JSR &0658 ; shuffle_bits_in_byte &04db 91 00 STA (&00),Y ; load_address &04dd c6 05 DEC &05 ; bytes_remaining &04df d0 03 BNE &04e4 ; not_end_of_block &04e1 20 65 06 JSR &0665 ; next_block ; not_end_of_block &04e4 c8 INY &04e5 d0 e8 BNE &04cf ; read_data_loop &04e7 e6 01 INC &01 ; load_address_high &04e9 10 e4 BPL &04cf ; read_data_loop &04eb 8c 10 fe STY &fe10 ; Serial ULA control register # Switch off cassette motor &04ee 20 81 07 JSR &0781 ; wipe_text_area &04f1 a9 03 LDA #&03 &04f3 8d 38 07 STA &0738 ; text_colour &04f6 a2 00 LDX #&00 &04f8 20 39 07 JSR &0739 ; calculate_screen_address &04fb 20 60 07 JSR &0760 ; plot_string &04fe 50 6c 65 61 73 65 20 77 61 69 74 20 61 20 6d 6f ; "Please wait a mo" &050e 6d 65 6e 74 20 77 68 69 6c 73 74 20 49 20 64 65 ; "ment whilst I de" &051e 63 6f 64 65 2e 2e 2e 2e 00 ; "de...." &0527 20 00 0c JSR &0c00 ; fifth_stage &052a a9 ff LDA #&ff &052c 8d 4e fe STA &fe4e ; System VIA interrupt enable register # Enable all System VIA interrupts &052f a2 01 LDX #&01 ; R1: Number of characters per line &0531 a9 00 LDA #&00 &0533 20 91 07 JSR &0791 ; set_video_register # Blank screen &0536 a0 00 LDY #&00 &0538 84 00 STY &00 ; source_address_low &053a 84 02 STY &02 ; target_address_low &053c a9 20 LDA #&20 ; &2000 = unrelocated_main_binary &053e 85 01 STA &01 ; source_address_high &0540 a9 1f LDA #&1f ; &1f00 = main_binary &0542 85 03 STA &03 ; target_address_high ; relocate_main_binary_loop # Move &2000 - &7fff to &1f00 - &7eff &0544 b1 00 LDA (&00),Y ; source_address &0546 91 02 STA (&02),Y ; target_address &0548 a9 00 LDA #&00 &054a 91 00 STA (&00),Y ; source_address &054c c8 INY &054d d0 f5 BNE &0544 ; relocate_main_binary_loop &054f e6 03 INC &03 ; target_address_high &0551 e6 01 INC &01 ; source_address_high &0553 10 ef BPL &0544 ; relocate_main_binary_loop &0555 4c 00 6c JMP &6c00 ; main_binary_entry_point ; scrolltext_data &0558 53 70 68 65 72 65 20 6f 66 20 44 65 73 74 69 6e ; "Sphere of Destin" &0568 79 20 2d 20 28 63 29 20 41 75 64 69 6f 67 65 6e ; "y - (c) Audiogen" &0578 69 63 20 53 6f 66 74 77 61 72 65 20 4c 54 44 20 ; "ic Software LTD " &0588 31 39 38 37 2e 20 57 72 69 74 74 65 6e 20 62 79 ; "1987. Written by" &0598 20 47 61 72 79 20 50 61 72 74 69 73 2e 20 59 6f ; " Gary Partis. Yo" &05a8 75 2c 20 42 72 75 63 65 20 74 68 65 20 42 61 6c ; "u, Bruce the Bal" &05b8 6c 2c 20 6d 75 73 74 20 73 70 65 65 64 20 61 6c ; "l, must speed al" &05c8 6f 6e 67 20 74 68 65 20 68 69 67 68 20 73 70 65 ; "ong the high spe" &05d8 65 64 20 69 6e 74 65 72 20 73 74 61 72 69 6f 6e ; "ed inter starion" &05e8 20 66 72 65 65 77 61 79 20 74 6f 20 79 6f 75 72 ; " freeway to your" &05f8 20 6c 6f 76 65 72 2e 2e 2e 20 43 61 6e 20 79 6f ; " lover... Can yo" &0608 75 20 67 65 74 20 74 68 65 72 65 20 69 6e 20 74 ; "u get there in t" &0618 69 6d 65 3f 20 57 69 6c 6c 20 79 6f 75 20 65 76 ; "ime? Will you ev" &0628 65 72 20 67 65 74 20 74 68 65 72 65 20 61 74 20 ; "er get there at " &0638 61 6c 6c 3f 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ; "all?............" &0648 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ; "................" ; shuffle_bits_in_byte # 76543210 &0658 48 PHA ; byte &0659 29 55 AND #&55 ; .6.4.2.1 # .6.4.2.0 &065b 0a ASL A # 6.4.2.0. &065c 85 0a STA &0a ; tmp &065e 68 PLA ; byte &065f 29 aa AND #&aa # 7.5.3.1. &0661 4a LSR A # .7.5.3.1 &0662 05 0a ORA &0a ; tmp # 67452301 &0664 60 RTS ; next_block &0665 20 98 07 JSR &0798 ; get_byte_from_tape &0668 20 58 06 JSR &0658 ; shuffle_bits_in_byte &066b a6 04 LDX &04 ; fifth_stage_offset &066d 9d 00 0c STA &0c00,X ; fifth_stage # Read one byte of fifth stage per block &0670 e6 04 INC &04 ; fifth_stage_offset &0672 a9 60 LDA #&60 &0674 85 05 STA &05 ; bytes_remaining &0676 c6 20 DEC &20 ; blocks_remaining + 2 &0678 a5 20 LDA &20 ; blocks_remaining + 2 &067a c9 2f CMP #&2f ; "0" - 1 &067c d0 19 BNE &0697 ; write_blocks_remaining &067e a9 39 LDA #&39 ; "9" &0680 85 20 STA &20 ; blocks_remaining + 2 &0682 c6 1f DEC &1f ; blocks_remaining + 1 &0684 a5 1f LDA &1f ; blocks_remaining + 1 &0686 c9 2f CMP #&2f ; "0" - 1 &0688 d0 0d BNE &0697 ; write_blocks_remaining &068a a9 39 LDA #&39 ; "9" &068c 85 1f STA &1f ; blocks_remaining + 1 &068e c6 1e DEC &1e ; blocks_remaining &0690 a5 1e LDA &1e ; blocks_remaining &0692 c9 2f CMP #&2f ; "0" - 1 &0694 d0 01 BNE &0697 ; write_blocks_remaining &0696 60 RTS ; write_blocks_remaining &0697 98 TYA &0698 48 PHA ; tmp_y &0699 a2 08 LDX #&08 &069b 20 39 07 JSR &0739 ; calculate_screen_address &069e a9 03 LDA #&03 &06a0 8d 38 07 STA &0738 ; text_colour &06a3 20 60 07 JSR &0760 ; plot_string &06a6 42 6c 6f 63 6b 73 20 6c 65 66 74 20 74 6f 20 6c ; "Blocks left to l" &06b6 6f 61 64 20 3a 00 ; "oad :" &06bc a5 1e LDA &1e ; blocks_remaining &06be 20 ce 06 JSR &06ce ; plot_character &06c1 a5 1f LDA &1f ; blocks_remaining + 1 &06c3 20 ce 06 JSR &06ce ; plot_character &06c6 a5 20 LDA &20 ; blocks_remaining + 2 &06c8 20 ce 06 JSR &06ce ; plot_character &06cb 68 PLA ; tmp_y &06cc a8 TAY &06cd 60 RTS ; plot_character &06ce 38 SEC &06cf e9 20 SBC #&20 ; " " &06d1 85 28 STA &28 ; font_address_low &06d3 a9 00 LDA #&00 &06d5 06 28 ASL &28 ; font_address_low &06d7 2a ROL A &06d8 06 28 ASL &28 ; font_address_low &06da 2a ROL A &06db 06 28 ASL &28 ; font_address_low &06dd 2a ROL A &06de 69 09 ADC #&09 ; &0900 = font_data &06e0 85 29 STA &29 ; font_address_high &06e2 a5 2a LDA &2a ; screen_address_low &06e4 18 CLC &06e5 69 08 ADC #&08 &06e7 85 2c STA &2c ; right_screen_address_low &06e9 a5 2b LDA &2b ; screen_address_high &06eb 69 00 ADC #&00 &06ed 85 2d STA &2d ; right_screen_address_high &06ef 98 TYA &06f0 48 PHA ; tmp_y &06f1 a0 07 LDY #&07 ; plot_character_loop &06f3 b1 28 LDA (&28),Y ; font_address &06f5 4a LSR A &06f6 4a LSR A &06f7 4a LSR A &06f8 4a LSR A &06f9 20 1a 07 JSR &071a ; apply_text_colour &06fc 91 2a STA (&2a),Y ; screen_address &06fe b1 28 LDA (&28),Y ; font_address &0700 29 0f AND #&0f &0702 20 1a 07 JSR &071a ; apply_text_colour &0705 91 2c STA (&2c),Y ; right_screen_address &0707 88 DEY &0708 10 e9 BPL &06f3 ; plot_character_loop &070a a5 2a LDA &2a ; screen_address_low &070c 18 CLC &070d 69 10 ADC #&10 &070f 85 2a STA &2a ; screen_address_low &0711 a5 2b LDA &2b; screen_address_high &0713 69 00 ADC #&00 &0715 85 2b STA &2b; screen_address_high &0717 68 PLA ; tmp_y &0718 a8 TAY &0719 60 RTS ; apply_text_colour &071a ae 38 07 LDX &0738 ; text_colour &071d f0 17 BEQ &0736 ; leave_with_zero &071f e0 01 CPX #&01 &0721 d0 01 BNE &0724 ; not_colour_1 &0723 60 RTS ; not_colour_1 &0724 e0 02 CPX #&02 &0726 d0 05 BNE &072d ; not_colour_2 &0728 0a ASL A &0729 0a ASL A &072a 0a ASL A &072b 0a ASL A &072c 60 RTS ; not_colour_2 &072d 85 2e STA &2e ; tmp &072f 0a ASL A &0730 0a ASL A &0731 0a ASL A &0732 0a ASL A &0733 05 2e ORA &2e ; tmp &0735 60 RTS ; leave_with_zero &0736 8a TXA &0737 60 RTS ; text_colour &0738 00 ; calculate_screen_address &0739 86 2c STX &2c ; tmp_low &073b a9 00 LDA #&00 ; &1c00 &073d 85 2a STA &2a ; screen_address_low &073f a9 1c LDA #&1c &0741 85 2b STA &2b ; screen_address_high &0743 a9 00 LDA #&00 &0745 06 2c ASL &2c ; tmp_low &0747 2a ROL A &0748 06 2c ASL &2c ; tmp_low &074a 2a ROL A &074b 06 2c ASL &2c ; tmp_low &074d 2a ROL A &074e 85 2d STA &2d ; tmp_high &0750 06 2c ASL &2c ; tmp_low &0752 2a ROL A &0753 a5 2a LDA &2a ; screen_address_low &0755 65 2c ADC &2c ; tmp_low &0757 85 2a STA &2a ; screen_address_low &0759 a5 2b LDA &2b ; screen_address_high &075b 65 2d ADC &2d ; tmp_high &075d 85 2b STA &2b ; screen_address_high &075f 60 RTS ; plot_string &0760 68 PLA # String follows call &0761 85 32 STA &32 ; text_address_low &0763 68 PLA &0764 85 33 STA &33 ; text_address_high &0766 a0 00 LDY #&00 ; plot_string_loop &0768 e6 32 INC &32 ; text_address_low &076a d0 02 BNE &076e ; skip_page &076c e6 33 INC &33 ; text_address_high ; skip_page &076e b1 32 LDA (&32),Y ; text_address &0770 f0 06 BEQ &0778 ; end_of_string &0772 20 ce 06 JSR &06ce ; plot_character &0775 4c 68 07 JMP &0768 ; plot_string_loop ; end_of_string &0778 e6 32 INC &32 ; text_address_low &077a d0 02 BNE &077e ; skip_page &077c e6 33 INC &33 ; text_address_high ; skip_page &077e 6c 32 00 JMP (&0032) ; text_address # Continue execution after string ; wipe_text_area &0781 a2 00 LDX #&00 &0783 8a TXA ; wipe_text_area_loop &0784 9d 00 1c STA &1c00,X # Wipe &1c00 - &1e7f &0787 9d 00 1d STA &1d00,X &078a 9d 80 1d STA &1d80,X &078d e8 INX &078e d0 f4 BNE &0784 ; wipe_text_area_loop &0790 60 RTS ; set_video_register &0791 8e 00 fe STX &fe00 ; video register number &0794 8d 01 fe STA &fe01 ; video register value &0797 60 RTS ; get_byte_from_tape &0798 ad 08 fe LDA &fe08 ; Cassette ACIA status register # &70 clear if no error occurred &079b 29 70 AND #&70 &079d f0 04 BEQ &07a3 ; no_error &079f a5 02 LDA &02 ; suppress_errors # Non-zero after start of data &07a1 d0 0b BNE &07ae ; loading_error ; no_error &07a3 ad 08 fe LDA &fe08 ; Cassette ACIA status register # &01 set if receiver interrupt occurred &07a6 29 01 AND #&01 &07a8 f0 ee BEQ &0798 ; get_byte_from_tape &07aa ad 09 fe LDA &fe09 ; Cassette ACIA data register &07ad 60 RTS ; loading_error &07ae 20 81 07 JSR &0781 ; wipe_text_area &07b1 a9 00 LDA #&00 &07b3 8d 10 fe STA &fe10 ; Serial ULA control register # Switch off cassette motor &07b6 a9 01 LDA #&01 &07b8 8d 38 07 STA &0738 ; text_colour &07bb a2 02 LDX #&02 &07bd 20 39 07 JSR &0739 ; calculate_screen_address &07c0 20 60 07 JSR &0760 ; plot_string &07c3 4c 6f 61 64 69 6e 67 20 65 72 72 6f 72 20 2d 20 ; "Loading error - " &07d3 72 65 77 69 6e 64 20 74 61 70 65 20 74 6f 20 73 ; "rewind tape to s" &07e3 74 61 72 74 00 ; "tart" &07e8 a9 20 LDA #&20 ; &2000 &07ea 85 01 STA &01 ; wipe_address_high &07ec a9 00 LDA #&00 &07ee 85 00 STA &00 ; wipe_address_low &07f0 a8 TAY ; wipe_memory_loop &07f1 91 00 STA (&00),Y ; wipe_address # Wipe &2000 - &7fff &07f3 99 00 0c STA &0c00,Y ; fifth_stage # Wipe &0c00 - &0cff &07f6 c8 INY &07f7 d0 f8 BNE &07f1 ; wipe_memory_loop &07f9 e6 01 INC &01 ; wipe_address_high &07fb 10 f4 BPL &07f1 ; wipe_memory_loop &07fd 4c 6f 04 JMP &046f ; wait_for_start_of_data ; irq1_handler &0800 8a TXA &0801 48 PHA ; tmp_x &0802 98 TYA &0803 48 PHA ; tmp_y &0804 a9 08 LDA #&08 ; &1708 &0806 85 90 STA &90 ; source_address_low &0808 a9 00 LDA #&00 ; &1700 &080a 85 92 STA &92 ; target_address_low &080c a9 17 LDA #&17 &080e 85 91 STA &91 ; source_address_high &0810 85 93 STA &93 ; target_address_high &0812 a2 05 LDX #&05 ; scroll_text_outer_loop &0814 a0 00 LDY #&00 ; scroll_text_inner_loop &0816 b1 90 LDA (&90),Y ; source_address &0818 91 92 STA (&92),Y ; target_address &081a c8 INY &081b 10 f9 BPL &0816 ; scroll_text_inner_loop &081d a5 90 LDA &90 ; source_address_low &081f 18 CLC &0820 69 80 ADC #&80 &0822 85 90 STA &90 ; source_address_low &0824 a5 91 LDA &91 ; source_address_high &0826 69 00 ADC #&00 &0828 85 91 STA &91 ; source_address_high &082a a5 92 LDA &92 ; target_address_low &082c 18 CLC &082d 69 80 ADC #&80 &082f 85 92 STA &92 ; target_address_low &0831 a5 93 LDA &93 ; target_address_high &0833 69 00 ADC #&00 &0835 85 93 STA &93 ; target_address_high &0837 ca DEX &0838 d0 da BNE &0814 ; scroll_text_outer_loop &083a e6 61 INC &61 ; scrolltext_nibble &083c a5 61 LDA &61 ; scrolltext_nibble &083e 29 01 AND #&01 &0840 08 PHP ; nibble &0841 f0 02 BEQ &0845 ; not_next_character &0843 e6 60 INC &60 ; scrolltext_offset ; not_next_character &0845 a6 60 LDX &60 ; scrolltext_offset &0847 bd 58 05 LDA &0558,X ; scrolltext_data &084a 38 SEC &084b e9 20 SBC #&20 &084d 85 3c STA &3c ; font_address_low &084f a9 00 LDA #&00 &0851 06 3c ASL &3c ; font_address_low &0853 2a ROL A &0854 06 3c ASL &3c ; font_address_low &0856 2a ROL A &0857 06 3c ASL &3c ; font_address_low &0859 2a ROL A &085a 69 09 ADC #&09 ; &0900 = font_data &085c 85 3d STA &3d ; font_address_high &085e a9 0f LDA #&0f &0860 28 PLP ; nibble &0861 f0 02 BEQ &0865 ; set_nibble &0863 a9 f0 LDA #&f0 ; set_nibble &0865 85 3e STA &3e ; nibble &0867 a0 07 LDY #&07 ; add_column_to_scrolltext_loop &0869 b1 3c LDA (&3c),Y ; font_address &086b 25 3e AND &3e ; nibble &086d 24 3e BIT &3e ; nibble &086f 10 04 BPL &0875 ; skip_shift &0871 4a LSR A &0872 4a LSR A &0873 4a LSR A &0874 4a LSR A ; skip_shift &0875 99 78 19 STA &1978,Y &0878 88 DEY &0879 10 ee BPL &0869 ; add_column_to_scrolltext_loop &087b a9 ff LDA #&ff &087d 8d 4d fe STA &fe4d ; System VIA interrupt flag register # Clear all interrupts &0880 68 PLA ; tmp_y &0881 a8 TAY &0882 68 PLA ; tmp_x &0883 aa TAX &0884 a5 fc LDA &fc ; irq_accumulator &0886 40 RTI ; initialise_screen_string &2535 16 01 ; MODE 1 &2537 17 00 01 00 00 00 00 00 00 00 00 00 ; disable cursor &2543 13 02 04 00 00 00 ; set colour 2 to blue &2549 13 03 03 00 00 00 ; set colour 2 to yellow &254f 12 00 02 ; GCOL 0, 2 &2552 19 04 00 00 28 00 ; MOVE &0000, &0028 &2558 19 05 fc 04 28 00 ; DRAW &04fc, &0028 &255e 11 01 ; COLOUR 1 &2560 1f 00 1d ; TAB(&00, &1d) &2563 2e 2e 2e 2e 2e 2e 58 49 4c 54 44 4e 20 74 68 65 ; "......XILTDN the" &2573 20 6e 6f 74 20 73 6f 20 4d 65 67 61 20 42 65 69 ; " not so Mega Bei" &2583 6e 67 2e 2e 2e 2e 2e 2e ; "ng......" &258b 12 00 01 ; GCOL 0, 1 &258e 19 04 00 00 88 00 ; MOVE &0000, &0088 &2594 12 00 01 ; GCOL 0, 1 &2597 19 05 44 00 88 00 ; DRAW &0044, &0088 &259d 12 00 01 ; GCOL 0, 1 &25a0 19 05 44 00 b4 00 ; DRAW &0044, &00b4 &25a6 12 00 03 ; GCOL 0, 3 &25a9 19 05 0c 00 b4 00 ; DRAW &000c, &00b4 &25af 12 00 01 ; GCOL 0, 1 &25b2 19 05 0c 00 cc 00 ; DRAW &000c, &00cc &25b8 12 00 01 ; GCOL 0, 1 &25bb 19 05 a0 00 cc 00 ; DRAW &00a0, &00cc &25c1 12 00 03 ; GCOL 0, 3 &25c4 19 05 a0 00 88 00 ; DRAW &00a0, &0088 &25ca 12 00 01 ; GCOL 0, 1 &25cd 19 05 b0 00 88 00 ; DRAW &00b0, &0088 &25d3 12 00 01 ; GCOL 0, 1 &25d6 19 05 b0 00 a8 00 ; DRAW &00b0, &00a8 &25dc 12 00 01 ; GCOL 0, 1 &25df 19 05 d8 00 a8 00 ; DRAW &00d8, &00a8 &25e5 12 00 03 ; GCOL 0, 3 &25e8 19 05 d8 00 88 00 ; DRAW &00d8, &0088 &25ee 12 00 01 ; GCOL 0, 1 &25f1 19 05 e4 00 88 00 ; DRAW &00e4, &0088 &25f7 12 00 01 ; GCOL 0, 1 &25fa 19 05 e4 00 b4 00 ; DRAW &00e4, &00b4 &2600 12 00 03 ; GCOL 0, 3 &2603 19 05 b0 00 b4 00 ; DRAW &00b0, &00b4 &2609 12 00 01 ; GCOL 0, 1 &260c 19 05 b0 00 d8 00 ; DRAW &00b0, &00d8 &2612 12 00 03 ; GCOL 0, 3 &2615 19 05 00 00 d8 00 ; DRAW &0000, &00d8 &261b 12 00 03 ; GCOL 0, 3 &261e 19 05 00 00 a8 00 ; DRAW &0000, &00a8 &2624 12 00 01 ; GCOL 0, 1 &2627 19 05 34 00 a8 00 ; DRAW &0034, &00a8 &262d 12 00 03 ; GCOL 0, 3 &2630 19 05 34 00 94 00 ; DRAW &0034, &0094 &2636 12 00 03 ; GCOL 0, 3 &2639 19 05 00 00 94 00 ; DRAW &0000, &0094 &263f 12 00 03 ; GCOL 0, 3 &2642 19 05 00 00 88 00 ; DRAW &0000, &0088 &2648 12 00 01 ; GCOL 0, 1 &264b 19 04 50 00 68 00 ; MOVE &0050, &0068 &2651 12 00 03 ; GCOL 0, 3 &2654 19 05 50 00 b4 00 ; DRAW &0050, &00b4 &265a 12 00 03 ; GCOL 0, 3 &265d 19 05 94 00 b4 00 ; DRAW &0094, &00b4 &2663 12 00 01 ; GCOL 0, 1 &2666 19 05 94 00 88 00 ; DRAW &0094, &0088 &266c 12 00 01 ; GCOL 0, 1 &266f 19 05 5c 00 88 00 ; DRAW &005c, &0088 &2675 12 00 01 ; GCOL 0, 1 &2678 19 05 5c 00 68 00 ; DRAW &005c, &0068 &267e 12 00 01 ; GCOL 0, 1 &2681 19 05 50 00 68 00 ; DRAW &0050, &0068 &2687 12 00 01 ; GCOL 0, 1 &268a 19 04 5c 00 94 00 ; MOVE &005c, &0094 &2690 12 00 03 ; GCOL 0, 3 &2693 19 05 88 00 94 00 ; DRAW &0088, &0094 &2699 12 00 03 ; GCOL 0, 3 &269c 19 05 88 00 a8 00 ; DRAW &0088, &00a8 &26a2 12 00 01 ; GCOL 0, 1 &26a5 19 05 5c 00 a8 00 ; DRAW &005c, &00a8 &26ab 12 00 01 ; GCOL 0, 1 &26ae 19 05 5c 00 94 00 ; DRAW &005c, &0094 &26b4 12 00 01 ; GCOL 0, 1 &26b7 19 04 f4 00 88 00 ; MOVE &00f4, &0088 &26bd 12 00 01 ; GCOL 0, 1 &26c0 19 05 54 01 88 00 ; DRAW &0154, &0088 &26c6 12 00 01 ; GCOL 0, 1 &26c9 19 05 54 01 a8 00 ; DRAW &0154, &00a8 &26cf 12 00 01 ; GCOL 0, 1 &26d2 19 05 88 01 a8 00 ; DRAW &0188, &00a8 &26d8 12 00 01 ; GCOL 0, 1 &26db 19 05 88 01 b4 00 ; DRAW &0188, &00b4 &26e1 12 00 03 ; GCOL 0, 3 &26e4 19 05 44 01 b4 00 ; DRAW &0144, &00b4 &26ea 12 00 03 ; GCOL 0, 3 &26ed 19 05 44 01 94 00 ; DRAW &0144, &0094 &26f3 12 00 03 ; GCOL 0, 3 &26f6 19 05 00 01 94 00 ; DRAW &0100, &0094 &26fc 12 00 01 ; GCOL 0, 1 &26ff 19 05 00 01 98 00 ; DRAW &0100, &0098 &2705 12 00 01 ; GCOL 0, 1 &2708 19 05 28 01 98 00 ; DRAW &0128, &0098 &270e 12 00 01 ; GCOL 0, 1 &2711 19 05 28 01 a4 00 ; DRAW &0128, &00a4 &2717 12 00 03 ; GCOL 0, 3 &271a 19 05 00 01 a4 00 ; DRAW &0100, &00a4 &2720 12 00 01 ; GCOL 0, 1 &2723 19 05 00 01 a8 00 ; DRAW &0100, &00a8 &2729 12 00 01 ; GCOL 0, 1 &272c 19 05 38 01 a8 00 ; DRAW &0138, &00a8 &2732 12 00 01 ; GCOL 0, 1 &2735 19 05 38 01 b4 00 ; DRAW &0138, &00b4 &273b 12 00 03 ; GCOL 0, 3 &273e 19 05 f4 00 b4 00 ; DRAW &00f4, &00b4 &2744 12 00 03 ; GCOL 0, 3 &2747 19 05 f4 00 88 00 ; DRAW &00f4, &0088 &274d 12 00 01 ; GCOL 0, 1 &2750 19 04 98 01 88 00 ; MOVE &0198, &0088 &2756 12 00 01 ; GCOL 0, 1 &2759 19 05 dc 01 88 00 ; DRAW &01dc, &0088 &275f 12 00 01 ; GCOL 0, 1 &2762 19 05 dc 01 94 00 ; DRAW &01dc, &0094 &2768 12 00 03 ; GCOL 0, 3 &276b 19 05 a4 01 94 00 ; DRAW &01a4, &0094 &2771 12 00 01 ; GCOL 0, 1 &2774 19 05 a4 01 98 00 ; DRAW &01a4, &0098 &277a 12 00 01 ; GCOL 0, 1 &277d 19 05 cc 01 98 00 ; DRAW &01cc, &0098 &2783 12 00 01 ; GCOL 0, 1 &2786 19 05 cc 01 a4 00 ; DRAW &01cc, &00a4 &278c 12 00 03 ; GCOL 0, 3 &278f 19 05 a4 01 a4 00 ; DRAW &01a4, &00a4 &2795 12 00 01 ; GCOL 0, 1 &2798 19 05 a4 01 a8 00 ; DRAW &01a4, &00a8 &279e 12 00 01 ; GCOL 0, 1 &27a1 19 05 dc 01 a8 00 ; DRAW &01dc, &00a8 &27a7 12 00 01 ; GCOL 0, 1 &27aa 19 05 dc 01 b4 00 ; DRAW &01dc, &00b4 &27b0 12 00 03 ; GCOL 0, 3 &27b3 19 05 98 01 b4 00 ; DRAW &0198, &00b4 &27b9 12 00 03 ; GCOL 0, 3 &27bc 19 05 98 01 88 00 ; DRAW &0198, &0088 &27c2 12 00 01 ; GCOL 0, 1 &27c5 19 04 20 02 88 00 ; MOVE &0220, &0088 &27cb 12 00 01 ; GCOL 0, 1 &27ce 19 05 64 02 88 00 ; DRAW &0264, &0088 &27d4 12 00 01 ; GCOL 0, 1 &27d7 19 05 64 02 b4 00 ; DRAW &0264, &00b4 &27dd 12 00 03 ; GCOL 0, 3 &27e0 19 05 20 02 b4 00 ; DRAW &0220, &00b4 &27e6 12 00 03 ; GCOL 0, 3 &27e9 19 05 20 02 88 00 ; DRAW &0220, &0088 &27ef 12 00 01 ; GCOL 0, 1 &27f2 19 04 2c 02 94 00 ; MOVE &022c, &0094 &27f8 12 00 03 ; GCOL 0, 3 &27fb 19 05 54 02 94 00 ; DRAW &0254, &0094 &2801 12 00 03 ; GCOL 0, 3 &2804 19 05 54 02 a8 00 ; DRAW &0254, &00a8 &280a 12 00 01 ; GCOL 0, 1 &280d 19 05 2c 02 a8 00 ; DRAW &022c, &00a8 &2813 12 00 01 ; GCOL 0, 1 &2816 19 05 2c 02 94 00 ; DRAW &022c, &0094 &281c 12 00 01 ; GCOL 0, 1 &281f 19 04 6c 00 68 00 ; MOVE &006c, &0068 &2825 12 00 01 ; GCOL 0, 1 &2828 19 05 98 02 68 00 ; DRAW &0298, &0068 &282e 12 00 01 ; GCOL 0, 1 &2831 19 05 98 02 a8 00 ; DRAW &0298, &00a8 &2837 12 00 01 ; GCOL 0, 1 &283a 19 05 b4 02 a8 00 ; DRAW &02b4, &00a8 &2840 12 00 01 ; GCOL 0, 1 &2843 19 05 b4 02 b4 00 ; DRAW &02b4, &00b4 &2849 12 00 03 ; GCOL 0, 3 &284c 19 05 98 02 b4 00 ; DRAW &0298, &00b4 &2852 12 00 01 ; GCOL 0, 1 &2855 19 05 98 02 cc 00 ; DRAW &0298, &00cc &285b 12 00 01 ; GCOL 0, 1 &285e 19 05 b4 02 cc 00 ; DRAW &02b4, &00cc &2864 12 00 01 ; GCOL 0, 1 &2867 19 05 b4 02 d8 00 ; DRAW &02b4, &00d8 &286d 12 00 03 ; GCOL 0, 3 &2870 19 05 8c 02 d8 00 ; DRAW &028c, &00d8 &2876 12 00 03 ; GCOL 0, 3 &2879 19 05 8c 02 b4 00 ; DRAW &028c, &00b4 &287f 12 00 03 ; GCOL 0, 3 &2882 19 05 70 02 b4 00 ; DRAW &0270, &00b4 &2888 12 00 03 ; GCOL 0, 3 &288b 19 05 70 02 a8 00 ; DRAW &0270, &00a8 &2891 12 00 01 ; GCOL 0, 1 &2894 19 05 8c 02 a8 00 ; DRAW &028c, &00a8 &289a 12 00 03 ; GCOL 0, 3 &289d 19 05 8c 02 70 00 ; DRAW &028c, &0070 &28a3 12 00 03 ; GCOL 0, 3 &28a6 19 05 6c 00 70 00 ; DRAW &006c, &0070 &28ac 12 00 03 ; GCOL 0, 3 &28af 19 05 6c 00 68 00 ; DRAW &006c, &0068 &28b5 12 00 01 ; GCOL 0, 1 &28b8 19 04 00 00 68 00 ; MOVE &0000, &0068 &28be 12 00 01 ; GCOL 0, 1 &28c1 19 05 44 00 68 00 ; DRAW &0044, &0068 &28c7 12 00 01 ; GCOL 0, 1 &28ca 19 05 44 00 70 00 ; DRAW &0044, &0070 &28d0 12 00 03 ; GCOL 0, 3 &28d3 19 05 00 00 70 00 ; DRAW &0000, &0070 &28d9 12 00 03 ; GCOL 0, 3 &28dc 19 05 00 00 68 00 ; DRAW &0000, &0068 &28e2 12 00 01 ; GCOL 0, 1 &28e5 19 04 bc 00 cc 00 ; MOVE &00bc, &00cc &28eb 12 00 01 ; GCOL 0, 1 &28ee 19 05 7c 02 cc 00 ; DRAW &027c, &00cc &28f4 12 00 01 ; GCOL 0, 1 &28f7 19 05 7c 02 d8 00 ; DRAW &027c, &00d8 &28fd 12 00 03 ; GCOL 0, 3 &2900 19 05 bc 00 d8 00 ; DRAW &00bc, &00d8 &2906 12 00 03 ; GCOL 0, 3 &2909 19 05 bc 00 cc 00 ; DRAW &00bc, &00cc &290f 12 00 ff ; GCOL 0, -1 &2912 12 00 01 ; GCOL 0, 1 &2915 19 04 10 03 88 00 ; MOVE &0310, &0088 &291b 12 00 01 ; GCOL 0, 1 &291e 19 05 30 03 88 00 ; DRAW &0330, &0088 &2924 12 00 01 ; GCOL 0, 1 &2927 19 05 54 03 94 00 ; DRAW &0354, &0094 &292d 12 00 01 ; GCOL 0, 1 &2930 19 05 54 03 cc 00 ; DRAW &0354, &00cc &2936 12 00 03 ; GCOL 0, 3 &2939 19 05 30 03 d8 00 ; DRAW &0330, &00d8 &293f 12 00 03 ; GCOL 0, 3 &2942 19 05 10 03 d8 00 ; DRAW &0310, &00d8 &2948 12 00 03 ; GCOL 0, 3 &294b 19 05 10 03 88 00 ; DRAW &0310, &0088 &2951 12 00 01 ; GCOL 0, 1 &2954 19 04 1c 03 94 00 ; MOVE &031c, &0094 &295a 12 00 03 ; GCOL 0, 3 &295d 19 05 38 03 94 00 ; DRAW &0338, &0094 &2963 12 00 03 ; GCOL 0, 3 &2966 19 05 44 03 98 00 ; DRAW &0344, &0098 &296c 12 00 03 ; GCOL 0, 3 &296f 19 05 44 03 c4 00 ; DRAW &0344, &00c4 &2975 12 00 01 ; GCOL 0, 1 &2978 19 05 38 03 cc 00 ; DRAW &0338, &00cc &297e 12 00 01 ; GCOL 0, 1 &2981 19 05 1c 03 cc 00 ; DRAW &031c, &00cc &2987 12 00 01 ; GCOL 0, 1 &298a 19 05 1c 03 94 00 ; DRAW &031c, &0094 &2990 12 00 01 ; GCOL 0, 1 &2993 19 04 60 03 88 00 ; MOVE &0360, &0088 &2999 12 00 01 ; GCOL 0, 1 &299c 19 05 f4 03 88 00 ; DRAW &03f4, &0088 &29a2 12 00 01 ; GCOL 0, 1 &29a5 19 05 f4 03 a4 00 ; DRAW &03f4, &00a4 &29ab 12 00 03 ; GCOL 0, 3 &29ae 19 05 c0 03 a4 00 ; DRAW &03c0, &00a4 &29b4 12 00 01 ; GCOL 0, 1 &29b7 19 05 c0 03 a8 00 ; DRAW &03c0, &00a8 &29bd 12 00 01 ; GCOL 0, 1 &29c0 19 05 10 04 a8 00 ; DRAW &0410, &00a8 &29c6 12 00 03 ; GCOL 0, 3 &29c9 19 05 10 04 88 00 ; DRAW &0410, &0088 &29cf 12 00 01 ; GCOL 0, 1 &29d2 19 05 20 04 88 00 ; DRAW &0420, &0088 &29d8 12 00 01 ; GCOL 0, 1 &29db 19 05 20 04 a8 00 ; DRAW &0420, &00a8 &29e1 12 00 01 ; GCOL 0, 1 &29e4 19 05 38 04 a8 00 ; DRAW &0438, &00a8 &29ea 12 00 01 ; GCOL 0, 1 &29ed 19 05 38 04 b4 00 ; DRAW &0438, &00b4 &29f3 12 00 03 ; GCOL 0, 3 &29f6 19 05 20 04 b4 00 ; DRAW &0420, &00b4 &29fc 12 00 01 ; GCOL 0, 1 &29ff 19 05 20 04 d8 00 ; DRAW &0420, &00d8 &2a05 12 00 03 ; GCOL 0, 3 &2a08 19 05 10 04 d8 00 ; DRAW &0410, &00d8 &2a0e 12 00 03 ; GCOL 0, 3 &2a11 19 05 10 04 b4 00 ; DRAW &0410, &00b4 &2a17 12 00 03 ; GCOL 0, 3 &2a1a 19 05 b0 03 b4 00 ; DRAW &03b0, &00b4 &2a20 12 00 03 ; GCOL 0, 3 &2a23 19 05 b0 03 98 00 ; DRAW &03b0, &0098 &2a29 12 00 01 ; GCOL 0, 1 &2a2c 19 05 e8 03 98 00 ; DRAW &03e8, &0098 &2a32 12 00 03 ; GCOL 0, 3 &2a35 19 05 e8 03 94 00 ; DRAW &03e8, &0094 &2a3b 12 00 03 ; GCOL 0, 3 &2a3e 19 05 6c 03 94 00 ; DRAW &036c, &0094 &2a44 12 00 01 ; GCOL 0, 1 &2a47 19 05 6c 03 98 00 ; DRAW &036c, &0098 &2a4d 12 00 01 ; GCOL 0, 1 &2a50 19 05 98 03 98 00 ; DRAW &0398, &0098 &2a56 12 00 01 ; GCOL 0, 1 &2a59 19 05 98 03 a4 00 ; DRAW &0398, &00a4 &2a5f 12 00 03 ; GCOL 0, 3 &2a62 19 05 6c 03 a4 00 ; DRAW &036c, &00a4 &2a68 12 00 01 ; GCOL 0, 1 &2a6b 19 05 6c 03 a8 00 ; DRAW &036c, &00a8 &2a71 12 00 01 ; GCOL 0, 1 &2a74 19 05 a4 03 a8 00 ; DRAW &03a4, &00a8 &2a7a 12 00 01 ; GCOL 0, 1 &2a7d 19 05 a4 03 b4 00 ; DRAW &03a4, &00b4 &2a83 12 00 03 ; GCOL 0, 3 &2a86 19 05 60 03 b4 00 ; DRAW &0360, &00b4 &2a8c 12 00 03 ; GCOL 0, 3 &2a8f 19 05 60 03 88 00 ; DRAW &0360, &0088 &2a95 12 00 01 ; GCOL 0, 1 &2a98 19 04 48 04 88 00 ; MOVE &0448, &0088 &2a9e 12 00 01 ; GCOL 0, 1 &2aa1 19 05 54 04 88 00 ; DRAW &0454, &0088 &2aa7 12 00 01 ; GCOL 0, 1 &2aaa 19 05 54 04 b4 00 ; DRAW &0454, &00b4 &2ab0 12 00 03 ; GCOL 0, 3 &2ab3 19 05 48 04 b4 00 ; DRAW &0448, &00b4 &2ab9 12 00 03 ; GCOL 0, 3 &2abc 19 05 48 04 88 00 ; DRAW &0448, &0088 &2ac2 12 00 01 ; GCOL 0, 1 &2ac5 19 04 48 04 cc 00 ; MOVE &0448, &00cc &2acb 12 00 01 ; GCOL 0, 1 &2ace 19 05 54 04 cc 00 ; DRAW &0454, &00cc &2ad4 12 00 01 ; GCOL 0, 1 &2ad7 19 05 54 04 d8 00 ; DRAW &0454, &00d8 &2add 12 00 03 ; GCOL 0, 3 &2ae0 19 05 48 04 d8 00 ; DRAW &0448, &00d8 &2ae6 12 00 03 ; GCOL 0, 3 &2ae9 19 05 48 04 cc 00 ; DRAW &0448, &00cc &2aef 12 00 01 ; GCOL 0, 1 &2af2 19 04 64 04 88 00 ; MOVE &0464, &0088 &2af8 12 00 03 ; GCOL 0, 3 &2afb 19 05 64 04 b4 00 ; DRAW &0464, &00b4 &2b01 12 00 03 ; GCOL 0, 3 &2b04 19 05 a8 04 b4 00 ; DRAW &04a8, &00b4 &2b0a 12 00 01 ; GCOL 0, 1 &2b0d 19 05 a8 04 88 00 ; DRAW &04a8, &0088 &2b13 12 00 01 ; GCOL 0, 1 &2b16 19 05 98 04 88 00 ; DRAW &0498, &0088 &2b1c 12 00 03 ; GCOL 0, 3 &2b1f 19 05 98 04 a8 00 ; DRAW &0498, &00a8 &2b25 12 00 01 ; GCOL 0, 1 &2b28 19 05 70 04 a8 00 ; DRAW &0470, &00a8 &2b2e 12 00 01 ; GCOL 0, 1 &2b31 19 05 70 04 88 00 ; DRAW &0470, &0088 &2b37 12 00 01 ; GCOL 0, 1 &2b3a 19 05 64 04 88 00 ; DRAW &0464, &0088 &2b40 12 00 01 ; GCOL 0, 1 &2b43 19 04 10 03 68 00 ; MOVE &0310, &0068 &2b49 12 00 01 ; GCOL 0, 1 &2b4c 19 05 f8 04 68 00 ; DRAW &04f8, &0068 &2b52 12 00 01 ; GCOL 0, 1 &2b55 19 05 f8 04 b4 00 ; DRAW &04f8, &00b4 &2b5b 12 00 03 ; GCOL 0, 3 &2b5e 19 05 ec 04 b4 00 ; DRAW &04ec, &00b4 &2b64 12 00 03 ; GCOL 0, 3 &2b67 19 05 ec 04 94 00 ; DRAW &04ec, &0094 &2b6d 12 00 03 ; GCOL 0, 3 &2b70 19 05 c0 04 94 00 ; DRAW &04c0, &0094 &2b76 12 00 01 ; GCOL 0, 1 &2b79 19 05 c0 04 b4 00 ; DRAW &04c0, &00b4 &2b7f 12 00 03 ; GCOL 0, 3 &2b82 19 05 b4 04 b4 00 ; DRAW &04b4, &00b4 &2b88 12 00 03 ; GCOL 0, 3 &2b8b 19 05 b4 04 88 00 ; DRAW &04b4, &0088 &2b91 12 00 01 ; GCOL 0, 1 &2b94 19 05 ec 04 88 00 ; DRAW &04ec, &0088 &2b9a 12 00 03 ; GCOL 0, 3 &2b9d 19 05 ec 04 70 00 ; DRAW &04ec, &0070 &2ba3 12 00 03 ; GCOL 0, 3 &2ba6 19 05 10 03 70 00 ; DRAW &0310, &0070 &2bac 12 00 03 ; GCOL 0, 3 &2baf 19 05 10 03 68 00 ; DRAW &0310, &0068 &2bb5 fe ; end of string ; unused &6db7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &6dc7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &6dd7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &6de7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &6df7 00 00 00 00 00 00 00 00 00 # &0c00 - &0cff is read one byte per block ; fifth_stage &0c00 78 SEI &0c01 d8 CLD &0c02 a9 df LDA #&df &0c04 2d 6b fe AND &fe6b ; User VIA auxiliary control register # Set User VIA timer 2 to one-shot &0c07 8d 6b fe STA &fe6b ; User VIA auxiliary control register &0c0a a9 a0 LDA #&a0 # Enable User VIA timer 2 interrupts &0c0c 8d 6e fe STA &fe6e ; User VIA interrupt enable register &0c0f a9 00 LDA #&00 &0c11 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB &0c14 8d 69 fe STA &fe69 ; User VIA timer 2 counter MSB &0c17 a2 04 LDX #&04 ; fifth_stage_decryption_loop # Decrypt &2000 - &7fff &0c19 86 60 STX &60 ; round &0c1b ad 69 fe LDA &fe69 ; User VIA timer 2 counter MSB &0c1e 48 PHA ; tmp &0c1f ad 68 fe LDA &fe68 ; User VIA timer 2 counter LSB &0c22 8d 69 fe STA &fe69 ; User VIA timer 2 counter MSB &0c25 68 PLA ; tmp &0c26 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB &0c29 8a TXA &0c2a 18 CLC &0c2b 6d 68 fe ADC &fe68 ; User VIA timer 2 counter LSB &0c2e a8 TAY &0c2f ad 00 20 LDA &2000 # actually LDA decryption_source_address &0c32 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &0c35 5d 00 0c EOR &0c00,X ; fifth_stage &0c38 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &0c3b 49 ff EOR #&ff # actually EOR fifth_stage_eor_one &0c3d 45 60 EOR &60 ; round &0c3f 48 PHA ; tmp &0c40 ad 68 fe LDA &fe68 ; User VIA timer 2 counter LSB &0c43 38 SEC &0c44 6d 69 fe ADC &fe69 ; User VIA timer 2 counter MSB &0c47 49 55 EOR #&55 &0c49 8d 68 fe STA &fe68 ; User VIA timer 2 counter LSB &0c4c 68 PLA ; tmp &0c4d 59 00 0c EOR &0c00,Y ; fifth_stage &0c50 ac 30 0c LDY &0c30 ; decryption_source_address_low &0c53 59 00 0c EOR &0c00,Y ; fifth_stage &0c56 49 00 EOR #&00 # actually EOR fifth_stage_eor_two &0c58 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &0c5b 4d 80 0c EOR &0c80 # actually EOR &0c00 + fifth_stage_offset_one &0c5e ee 5c 0c INC &0c5c ; fifth_stage_offset_one &0c61 ac 68 fe LDY &fe68 ; User VIA timer 2 counter LSB &0c64 59 00 0c EOR &0c00,Y ; fifth_stage &0c67 49 ff EOR #&ff # actually EOR fifth_stage_eor_three &0c69 ac 69 fe LDY &fe69 ; User VIA timer 2 counter MSB &0c6c 59 00 0c EOR &0c00,Y ; fifth_stage &0c6f c8 INY &0c70 4d 00 0c EOR &0c00 # actually EOR &0c00 + fifth_stage_offset_two &0c73 48 PHA ; tmp &0c74 ad 71 0c LDA &0c71 ; fifth_stage_offset_two &0c77 6d 68 fe ADC &fe68 ; User VIA timer 2 counter LSB &0c7a 8d 71 0c STA &0c71 ; fifth_stage_offset_two &0c7d 68 PLA ; tmp &0c7e 48 PHA ; tmp &0c7f b9 00 0c LDA &0c00,Y ; fifth_stage &0c82 5d 00 0c EOR &0c00,X ; fifth_stage &0c85 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &0c88 4d 69 fe EOR &fe69 ; User VIA timer 2 counter MSB &0c8b 8d 90 0c STA &0c90 ; fifth_stage_eor_four &0c8e 68 PLA ; tmp &0c8f 49 00 EOR #&00 # actually EOR fifth_stage_eor_four &0c91 ee 95 0c INC &0c95 ; fifth_stage_eor_five &0c94 49 5d EOR #&5d # actually EOR fifth_stage_eor_five &0c96 5d 00 0c EOR &0c00,X ; fifth_stage &0c99 49 26 EOR #&26 # actually EOR fifth_stage_eor_six &0c9b 8d 00 20 STA &2000 # actually STA decryption_target_address &0c9e ad 68 0c LDA &0c68 ; fifth_stage_eor_three &0ca1 18 CLC &0ca2 6d 68 fe ADC &fe68 ; User VIA timer 2 counter LSB &0ca5 49 55 EOR #&55 &0ca7 8d 68 0c STA &0c68 ; fifth_stage_eor_three &0caa ad 3c 0c LDA &0c3c ; fifth_stage_eor_one &0cad ed 69 fe SBC &fe69 ; User VIA timer 2 counter MSB &0cb0 49 aa EOR #&aa &0cb2 8d 3c 0c STA &0c3c ; fifth_stage_eor_one &0cb5 ad 57 0c LDA &0c57 ; fifth_stage_eor_two &0cb8 ed 68 fe SBC &fe68 ; User VIA timer 2 counter LSB &0cbb 6d 69 fe ADC &fe69 ; User VIA timer 2 counter MSB &0cbe 4d 68 fe EOR &fe68 ; User VIA timer 2 counter LSB &0cc1 0d 69 fe ORA &fe69 ; User VIA timer 2 counter MSB &0cc4 8d 57 0c STA &0c57 ; fifth_stage_eor_two &0cc7 ad 9a 0c LDA &0c9a ; fifth_stage_eor_six &0cca 6d 68 fe ADC &fe68 ; User VIA timer 2 counter LSB &0ccd f9 00 0c SBC &0c00,Y ; fifth_stage &0cd0 5d 00 0c EOR &0c00,X ; fifth_stage &0cd3 8d 9a 0c STA &0c9a ; fifth_stage_eor_six &0cd6 ee 31 0c INC &0c31 ; decryption_source_address_high &0cd9 ee 9d 0c INC &0c9d ; decryption_target_address_high &0cdc 30 03 BMI &0ce1 ; next_byte_in_pages &0cde 4c 19 0c JMP &0c19 ; fifth_stage_decryption_loop ; next_byte_in_pages &0ce1 a9 20 LDA #&20 ; &2000 = main_binary &0ce3 8d 31 0c STA &0c31 ; decryption_source_address_high &0ce6 8d 9d 0c STA &0c9d ; decryption_target_address_high &0ce9 ee 30 0c INC &0c30 ; decryption_source_address_low &0cec ee 9c 0c INC &0c9c ; decryption_target_address_low &0cef f0 03 BEQ &0cf4 ; next_round &0cf1 4c 19 0c JMP &0c19 ; fifth_stage_decryption_loop ; next_round &0cf4 ca DEX &0cf5 f0 03 BEQ &0cfa ; end_of_decryption &0cf7 4c 19 0c JMP &0c19 ; fifth_stage_decryption_loop ; end_of_decryption &0cfa a9 20 LDA #&20 # Disable User VIA timer 2 interrupts &0cfc 8d 6e fe STA &fe6e ; User VIA interrupt enable register &0cff 60 RTS Game disassembly ================ ; (no filename) ; 00001f00 00006c00 6100 # &1f00 - &6bff is decrypted and moved to &0300 - &4fff at &6c36 ; plot_character &0300 08 PHP ; processor status &0301 48 PHA ; tmp_a &0302 8a TXA &0303 48 PHA ; tmp_x &0304 98 TYA &0305 48 PHA ; tmp_y &0306 ba TSX &0307 bd 03 01 LDA &0103,X ; stack + 3 # Get tmp_a from stack &030a 85 50 STA &50 ; character &030c 38 SEC &030d e9 20 SBC #&20 ; " " &030f 85 d8 STA &d8 ; font_address_low &0311 a9 00 LDA #&00 &0313 06 d8 ASL &d8 ; font_address_low # Four bytes per character &0315 2a ROL A &0316 06 d8 ASL &d8 ; font_address_low &0318 2a ROL A &0319 85 d9 STA &d9 ; font_address_high &031b a5 d8 LDA &d8 ; font_address_low &031d 69 d0 ADC #&d0 ; &28d0 = mode_5_font_data &031f 85 d8 STA &d8 ; font_address_low &0321 a5 d9 LDA &d9 ; font_address_high &0323 69 28 ADC #&28 &0325 85 d9 STA &d9 ; font_address_high &0327 a0 03 LDY #&03 ; unpack_character_data_loop &0329 b1 d8 LDA (&d8),Y ; font_address &032b 48 PHA ; font byte &032c 29 0f AND #&0f &032e 99 a0 00 STA &00a0,Y ; character_data &0331 68 PLA ; font byte &0332 4a LSR A &0333 4a LSR A &0334 4a LSR A &0335 4a LSR A &0336 99 a4 00 STA &00a4,Y ; character_data + 4 &0339 88 DEY &033a 10 ed BPL &0329 ; unpack_character_data_loop &033c c8 INY ; 0 &033d 84 af STY &af ; plot_mode # Zero to overwrite &033f a9 f0 LDA #&f0 # Non-zero to invert character &0341 a4 e1 LDY &e1 ; text_y &0343 c0 0e CPY #&0e &0345 90 11 BCC &0358 ; is_mode_5 &0347 84 af STY &af ; plot_mode # Non-zero to OR &0349 a9 00 LDA #&00 # Zero to skip inversion &034b c0 0e CPY #&0e &034d d0 09 BNE &0358 ; is_mode_5 ; is_mode_4 &034f a5 50 LDA &50 ; character &0351 20 f8 0e JSR &0ef8 ; use_mode_4_font_data &0354 a9 00 LDA #&00 # Zero to overwrite and skip inversion &0356 85 af STA &af ; plot_mode ; is_mode_5 &0358 85 ac STA &ac ; plot_colour_mode &035a a0 07 LDY #&07 ; plot_character_byte_loop &035c b9 a0 00 LDA &00a0,Y ; character_data &035f a6 af LDX &af ; plot_mode &0361 f0 08 BEQ &036b ; is_status_section ; not_status_section &0363 20 8f 03 JSR &038f ; apply_font_colour &0366 11 da ORA (&da),Y ; text_screen_address &0368 4c 74 03 JMP &0374 ; plot_character_byte ; is_status_section &036b a6 ac LDX &ac ; plot_colour_mode &036d f0 05 BEQ &0374 ; plot_character_byte &036f 20 8f 03 JSR &038f ; apply_font_colour &0372 49 f0 EOR #&f0 ; plot_character_byte &0374 91 da STA (&da),Y ; text_screen_address &0376 88 DEY &0377 10 e3 BPL &035c ; plot_character_byte_loop &0379 a5 da LDA &da ; text_screen_address_low &037b 18 CLC &037c 69 08 ADC #&08 # Move right one character &037e 85 da STA &da ; text_screen_address_low &0380 a5 db LDA &db ; text_screen_address_high &0382 69 00 ADC #&00 &0384 85 db STA &db ; text_screen_address_high &0386 e6 e0 INC &e0 ; text_x &0388 68 PLA ; tmp_y &0389 a8 TAY &038a 68 PLA ; tmp_x &038b aa TAX &038c 68 PLA ; tmp_a &038d 28 PLP ; processor status &038e 60 RTS ; apply_font_colour &038f a6 fd LDX &fd ; text_colour &0391 f0 17 BEQ &03aa ; leave_with_zero &0393 e0 01 CPX #&01 &0395 d0 01 BNE &0398 ; not_colour_1 &0397 60 RTS ; not_colour_1 &0398 e0 02 CPX #&02 &039a d0 05 BNE &03a1 ; not_colour_2 &039c 0a ASL A &039d 0a ASL A &039e 0a ASL A &039f 0a ASL A &03a0 60 RTS ; not_colour_2 &03a1 85 fe STA &fe ; tmp &03a3 0a ASL A &03a4 0a ASL A &03a5 0a ASL A &03a6 0a ASL A &03a7 05 fe ORA &fe ; tmp &03a9 60 RTS ; leave_with_zero &03aa 8a TXA &03ab 60 RTS ; group_addresses_low &03ac c0 00 40 80 c0 00 40 80 c0 00 40 ; group_addresses_high &03b7 6f 71 72 73 74 76 77 78 79 7b 7c ; column_offsets_low &03c2 00 08 10 18 20 28 30 38 40 48 50 58 60 68 70 78 &03d2 80 88 90 98 a0 a8 b0 b8 c0 c8 d0 d8 e0 e8 f0 f8 &03e2 00 08 10 18 20 28 30 38 ; column_offsets_high &03ea 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &03fa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &040a 01 01 01 01 01 01 01 01 ; top_mode_5_palette_data &0412 07 17 47 57 # Set colour 0 to black &0416 23 33 63 73 # Set colour 1 to blue &041a 82 92 c2 d2 # Set colour 2 to magenta &041e a4 b4 e4 f4 # Set colour 3 to yellow ; mode_5_palette_data &0422 07 17 47 57 # Set colour 0 to black &0426 a0 b0 e0 f0 # Set colour 3 to white ; mode_4_palette_data &042a 07 17 47 57 27 37 67 77 # Set colour 0 to black &0432 81 91 c1 d1 a1 b1 e1 f1 # Set colour 1 to cyan ; fixed_palette_data &043a 07 17 47 57 # Set colour 0 to black &043e 23 33 63 73 # Set colour 1 to blue &0442 82 92 c2 d2 # Set colour 2 to magenta &0446 a4 b4 e4 f4 # Set colour 3 to yellow ; write_fixed_palette_data &044a a2 0f LDX #&0f ; write_fixed_palette_data_loop &044c bd 3a 04 LDA &043a,X ; fixed_palette_data &044f 8d 21 fe STA &fe21 ; video ULA palette register &0452 ca DEX &0453 10 f7 BPL &044c ; write_fixed_palette_data_loop &0455 4c 01 05 JMP &0501 ; leave_irq1_handler ; change_to_mode_4 &0458 a2 0f LDX #&0f ; write_mode_4_palette_data_loop &045a bd 2a 04 LDA &042a,X ; mode_4_palette_data &045d 8d 21 fe STA &fe21 ; video ULA palette register &0460 ca DEX &0461 10 f7 BPL &045a ; write_mode_4_palette_data_loop &0463 a9 88 LDA #&88 # Change to MODE 4 &0465 8d 20 fe STA &fe20 ; video ULA control register &0468 a2 c8 LDX #&c8 ; delay_loop &046a ea NOP &046b ea NOP &046c ca DEX &046d d0 fb BNE &046a ; delay_loop ; change_to_mode_5 &046f a9 c4 LDA #&c4 # Change to MODE 5 &0471 8d 20 fe STA &fe20 ; video ULA control register &0474 a2 07 LDX #&07 ; write_mode_5_palette_data_loop &0476 bd 22 04 LDA &0422,X ; mode_5_palette_data &0479 8d 21 fe STA &fe21 ; video ULA palette register &047c ca DEX &047d 10 f7 BPL &0476 ; write_mode_5_palette_data_loop &047f a5 e7 LDA &e7 ; use_fixed_palette # Non-zero to use fixed palette &0481 d0 c7 BNE &044a ; write_fixed_palette_data &0483 a5 57 LDA &57 ; strip_fraction &0485 0a ASL A &0486 0a ASL A &0487 0a ASL A &0488 85 56 STA &56 ; delay_table_offset &048a a2 00 LDX #&00 ; set_strip_colours_loop &048c a4 56 LDY &56 ; delay_table_offset &048e e6 56 INC &56 ; delay_table_offset &0490 b9 50 2f LDA &2f50,Y ; row_delays_table &0493 a8 TAY ; wait_for_row_loop &0494 98 TYA &0495 48 PHA ; delay &0496 a0 06 LDY #&06 ; delay_loop &0498 88 DEY &0499 d0 fd BNE &0498 ; delay_loop &049b 68 PLA ; delay &049c a8 TAY &049d 88 DEY &049e 10 f4 BPL &0494 ; wait_for_row_loop &04a0 bc 40 01 LDY &0140,X ; strip_colours &04a3 b9 50 2d LDA &2d50,Y ; colour_1_palette_data_one &04a6 8d 21 fe STA &fe21 ; video ULA palette register &04a9 b9 90 2d LDA &2d90,Y ; colour_1_palette_data_two &04ac 8d 21 fe STA &fe21 ; video ULA palette register &04af b9 d0 2d LDA &2dd0,Y ; colour_1_palette_data_three &04b2 8d 21 fe STA &fe21 ; video ULA palette register &04b5 b9 10 2e LDA &2e10,Y ; colour_1_palette_data_four &04b8 8d 21 fe STA &fe21 ; video ULA palette register &04bb b9 50 2e LDA &2e50,Y ; colour_2_palette_data_one &04be 8d 21 fe STA &fe21 ; video ULA palette register &04c1 b9 90 2e LDA &2e90,Y ; colour_2_palette_data_two &04c4 8d 21 fe STA &fe21 ; video ULA palette register &04c7 b9 d0 2e LDA &2ed0,Y ; colour_2_palette_data_three &04ca 8d 21 fe STA &fe21 ; video ULA palette register &04cd b9 10 2f LDA &2f10,Y ; colour_2_palette_data_four &04d0 8d 21 fe STA &fe21 ; video ULA palette register &04d3 e8 INX &04d4 e0 08 CPX #&08 &04d6 d0 b4 BNE &048c ; set_strip_colours_loop &04d8 a5 57 LDA &57 ; strip_fraction &04da 18 CLC &04db 65 55 ADC &55 ; player_speed &04dd c9 20 CMP #&20 &04df 90 1c BCC &04fd ; not_next_strip &04e1 48 PHA ; strip_fraction &04e2 a2 07 LDX #&07 ; shuffle_strip_colours_loop &04e4 bd 3f 01 LDA &013f,X ; strip_colours - 1 &04e7 9d 40 01 STA &0140,X ; strip_colours &04ea ca DEX &04eb d0 f7 BNE &04e4 ; shuffle_strip_colours_loop &04ed a0 00 LDY #&00 &04ef 84 b5 STY &b5 ; tile_checked # Set to zero to check tile &04f1 b1 b0 LDA (&b0),Y ; strip_data_address &04f3 8d 40 01 STA &0140 ; strip_colours &04f6 e6 b0 INC &b0 ; strip_data_address_low &04f8 d0 02 BNE &04fc ; skip_page &04fa e6 b1 INC &b1 ; strip_data_address_high ; skip_page &04fc 68 PLA ; strip_fraction ; not_next_strip &04fd 29 1f AND #&1f &04ff 85 57 STA &57 ; strip_fraction ; leave_irq1_handler &0501 a9 ff LDA #&ff &0503 8d 4d fe STA &fe4d ; System VIA interrupt flag register # Clear all interrupts &0506 e6 ff INC &ff ; frame_counter &0508 a6 8d LDX &8d ; tmp_x &050a a4 8e LDY &8e ; tmp_y &050c a5 fc LDA &fc ; irq_accumulator &050e 40 RTI ; irq1_handler &050f d8 CLD &0510 86 8d STX &8d ; tmp_x &0512 84 8e STY &8e ; tmp_y &0514 ad 4d fe LDA &fe4d ; System VIA interrupt flag register &0517 29 02 AND #&02 &0519 d0 03 BNE &051e ; is_vsync_interrupt &051b 4c 58 04 JMP &0458 ; change_to_mode_4 ; is_vsync_interrupt &051e a9 a0 LDA #&a0 &0520 8d 44 fe STA &fe44 ; System VIA timer 1 counter LSB &0523 a9 24 LDA #&24 &0525 8d 45 fe STA &fe45 ; System VIA timer 1 counter MSB &0528 a9 c4 LDA #&c4 # Change to MODE 5 at top of screen &052a 8d 20 fe STA &fe20 ; video ULA control register &052d a2 0f LDX #&0f ; write_top_mode_5_palette_data_loop &052f bd 12 04 LDA &0412,X ; top_mode_5_palette_data &0532 8d 21 fe STA &fe21 ; video ULA palette register # Set palette for status section &0535 ca DEX &0536 10 f7 BPL &052f ; write_top_mode_5_palette_data_loop &0538 20 fc 05 JSR &05fc ; update_sounds &053b a9 ff LDA #&ff # Set all bits to output &053d 8d 43 fe STA &fe43 ; System VIA data direction register A &0540 a9 0b LDA #&0b # Enable keyboard auto scan &0542 8d 40 fe STA &fe40 ; System VIA port B input/output register &0545 24 e2 BIT &e2 ; sound_muted &0547 30 3f BMI &0588 ; skip_updating_sound &0549 a5 1d LDA &1d ; channels_volume_byte_to_write &054b f0 08 BEQ &0555 ; skip_channel_zero &054d 20 9e 05 JSR &059e ; write_byte_to_sound_chip &0550 a5 1e LDA &1e ; channels_frequency_low_byte_to_write &0552 20 9e 05 JSR &059e ; write_byte_to_sound_chip ; skip_channel_zero &0555 a5 2d LDA &2d ; channels_volume_byte_to_write + &10 &0557 f0 0d BEQ &0566 ; skip_channel_one &0559 20 9e 05 JSR &059e ; write_byte_to_sound_chip &055c a5 2e LDA &2e ; channels_frequency_low_byte_to_write + &10 &055e 20 9e 05 JSR &059e ; write_byte_to_sound_chip &0561 a5 2f LDA &2f ; channels_frequency_high_byte_to_write + &10 &0563 20 9e 05 JSR &059e ; write_byte_to_sound_chip ; skip_channel_one &0566 a5 3d LDA &3d ; channels_volume_byte_to_write + &20 &0568 f0 0d BEQ &0577 ; skip_channel_two &056a 20 9e 05 JSR &059e ; write_byte_to_sound_chip &056d a5 3e LDA &3e ; channels_frequency_low_byte_to_write + &20 &056f 20 9e 05 JSR &059e ; write_byte_to_sound_chip &0572 a5 3f LDA &3f ; channels_frequency_high_byte_to_write + &20 &0574 20 9e 05 JSR &059e ; write_byte_to_sound_chip ; skip_channel_two &0577 a5 4d LDA &4d ; channels_volume_byte_to_write + &30 &0579 f0 0d BEQ &0588 ; skip_channel_three &057b 20 9e 05 JSR &059e ; write_byte_to_sound_chip &057e a5 4e LDA &4e ; channels_frequency_low_byte_to_write + &30 &0580 20 9e 05 JSR &059e ; write_byte_to_sound_chip &0583 a5 4f LDA &4f ; channels_frequency_high_byte_to_write + &30 &0585 20 9e 05 JSR &059e ; write_byte_to_sound_chip ; skip_channel_three ; skip_updating_sound &0588 a9 03 LDA #&03 # Disable keyboard auto scan &058a 8d 40 fe STA &fe40 ; System VIA port B input/output register &058d a9 7f LDA #&7f # Set top bit as input, low seven bits as output &058f 8d 43 fe STA &fe43 ; System VIA data direction register A &0592 a9 ff LDA #&ff &0594 8d 4d fe STA &fe4d ; System VIA interrupt flag register # Clear all interrupts &0597 a6 8d LDX &8d ; tmp_x &0599 a4 8e LDY &8e ; tmp_y &059b a5 fc LDA &fc ; irq_accumulator &059d 40 RTI ; write_byte_to_sound_chip &059e 8d 4f fe STA &fe4f ; System VIA input/output register A &05a1 a9 00 LDA #&00 # Set sound chip write pin low &05a3 8d 40 fe STA &fe40 ; System VIA port B input/output register &05a6 a2 03 LDX #&03 ; delay_loop &05a8 ca DEX &05a9 d0 fd BNE &05a8 ; delay_loop &05ab a9 08 LDA #&08 # Set sound chip write pin high &05ad 8d 40 fe STA &fe40 ; System VIA port B input/output register &05b0 60 RTS ; play_sound # Called with A = channel, XY = frequency &05b1 85 62 STA &62 ; channel &05b3 68 PLA # Parameters for sound follow call &05b4 85 60 STA &60 ; parameters_address_low &05b6 68 PLA &05b7 85 61 STA &61 ; parameters_address_high &05b9 08 PHP ; processor status &05ba 86 63 STX &63 ; frequency_low &05bc 84 64 STY &64 ; frequency_high &05be a5 62 LDA &62 ; channel &05c0 0a ASL A &05c1 0a ASL A &05c2 0a ASL A &05c3 0a ASL A &05c4 48 PHA ; channel * 16 &05c5 aa TAX &05c6 a0 01 LDY #&01 &05c8 78 SEI ; copy_sound_parameters_loop &05c9 b1 60 LDA (&60),Y ; parameters_address &05cb 95 12 STA &12,X ; channels_parameters &05cd c8 INY &05ce e8 INX &05cf c0 09 CPY #&09 &05d1 d0 f6 BNE &05c9 ; copy_sound_parameters_loop &05d3 68 PLA ; channel * 16 &05d4 aa TAX &05d5 a5 63 LDA &63 ; frequency_low &05d7 95 10 STA &10,X ; channels_frequency_low &05d9 a5 64 LDA &64 ; frequency_high &05db 95 11 STA &11,X ; channels_frequency_high &05dd 94 1a STY &1a,X ; channels_active # Set to non-zero to indicate channel active &05df b5 14 LDA &14,X ; channels_volume_cooldown &05e1 95 1b STA &1b,X ; channels_volume_maximum_cooldown &05e3 b5 18 LDA &18,X ; channels_frequency_cooldown &05e5 95 1c STA &1c,X ; channels_frequency_maximum_cooldown &05e7 a5 60 LDA &60 ; parameters_address_low &05e9 18 CLC &05ea 69 09 ADC #&09 # Return after eight bytes of parameters &05ec 85 60 STA &60 ; parameters_address_low &05ee a5 61 LDA &61 ; parameters_address_high &05f0 69 00 ADC #&00 &05f2 85 61 STA &61 ; parameters_address_high &05f4 a9 01 LDA #&01 &05f6 95 14 STA &14,X ; channels_volume_cooldown &05f8 28 PLP ; processor status &05f9 6c 60 00 JMP (&0060) ; parameters_address # Continue execution after parameters ; update_sounds &05fc a2 00 LDX #&00 &05fe 86 16 STX &16 ; channels_updated # Set to zero to indicate channel not updated &0600 a9 e0 LDA #&e0 ; channel 0 control &0602 20 1d 06 JSR &061d ; update_channel &0605 a5 16 LDA &16 ; channels_updated # Non-zero if channel was updated &0607 d0 02 BNE &060b ; still_active &0609 85 1d STA &1d ; channels_volume_byte_to_write # Set to zero to suppress sending bytes for channel zero ; still_active &060b a2 10 LDX #&10 &060d a9 c0 LDA #&c0 ; channel 1 frequency &060f 20 1d 06 JSR &061d ; update_channel &0612 a2 20 LDX #&20 &0614 a9 a0 LDA #&a0 ; channel 2 frequency &0616 20 1d 06 JSR &061d ; update_channel &0619 a2 30 LDX #&30 &061b a9 80 LDA #&80 ; channel 3 frequency ; update_channel &061d 85 9f STA &9f ; channel_register &061f b5 1a LDA &1a,X ; channels_active # Zero if channel not active &0621 f0 6a BEQ &068d ; leave &0623 b5 15 LDA &15,X ; channels_volume_steps_remaining &0625 15 19 ORA &19,X ; channels_frequency_steps_remaining &0627 d0 0a BNE &0633 ; not_end_of_sound &0629 95 1a STA &1a,X ; channels_active # Set to zero to indicate channel no longer active &062b a9 0f LDA #&0f # Silence channel &062d 95 12 STA &12,X ; channels_volume &062f 85 16 STA &16 ; channels_updated # Set to non-zero to indicate channel updated &0631 d0 36 BNE &0669 ; skip_changing_frequency # Always branches ; not_end_of_sound &0633 b5 15 LDA &15,X ; channels_volume_steps_remaining &0635 f0 15 BEQ &064c ; skip_changing_volume &0637 d6 14 DEC &14,X ; channels_volume_cooldown &0639 d0 11 BNE &064c ; skip_changing_volume &063b e6 16 INC &16 ; channels_updated # Set to non-zero to indicate channel updated &063d b5 1b LDA &1b,X ; channels_volume_maximum_cooldown &063f 95 14 STA &14,X ; channels_volume_cooldown &0641 d6 15 DEC &15,X ; channels_volume_steps_remaining &0643 b5 12 LDA &12,X ; channels_volume &0645 18 CLC &0646 75 13 ADC &13,X ; channels_volume_delta &0648 29 0f AND #&0f &064a 95 12 STA &12,X ; channels_volume ; skip_changing_volume &064c b5 19 LDA &19,X ; channels_frequency_steps_remaining &064e f0 19 BEQ &0669 ; skip_changing_frequency &0650 d6 18 DEC &18,X ; channels_frequency_cooldown &0652 d0 15 BNE &0669 ; skip_changing_frequency &0654 b5 1c LDA &1c,X ; channels_frequency_maximum_cooldown &0656 95 18 STA &18,X ; channels_frequency_cooldown &0658 d6 19 DEC &19,X ; channels_frequency_steps_remaining &065a b5 10 LDA &10,X ; channels_frequency_low &065c 18 CLC &065d 75 16 ADC &16,X ; channels_pitch_delta_low &065f 95 10 STA &10,X ; channels_frequency_low &0661 b5 11 LDA &11,X ; channels_frequency_high &0663 75 17 ADC &17,X ; channels_pitch_delta_high &0665 29 03 AND #&03 &0667 95 11 STA &11,X ; channels_frequency_high ; skip_changing_frequency &0669 a5 9f LDA &9f ; channel_register &066b 09 10 ORA #&10 # Use channel volume &066d 15 12 ORA &12,X ; channels_volume &066f 95 1d STA &1d,X ; channels_volume_byte_to_write &0671 b5 10 LDA &10,X ; channels_frequency_low &0673 29 0f AND #&0f &0675 05 9f ORA &9f ; channel_register &0677 95 1e STA &1e,X ; channels_frequency_low_byte_to_write &0679 b5 10 LDA &10,X ; channels_frequency_low &067b 85 e4 STA &e4 ; frequency_low &067d b5 11 LDA &11,X ; channels_frequency_high &067f 06 e4 ASL &e4 ; frequency_low &0681 2a ROL A &0682 06 e4 ASL &e4 ; frequency_low &0684 2a ROL A &0685 06 e4 ASL &e4 ; frequency_low &0687 2a ROL A &0688 06 e4 ASL &e4 ; frequency_low &068a 2a ROL A &068b 95 1f STA &1f,X ; channels_frequency_high_byte_to_write ; leave &068d 60 RTS ; check_for_pause_and_wait_for_vsync &068e 20 e9 06 JSR &06e9 ; check_for_escape &0691 a9 29 LDA #&29 ; CURSOR DOWN &0693 20 cc 11 JSR &11cc ; check_for_keypress &0696 10 1c BPL &06b4 ; not_pause &0698 20 d3 06 JSR &06d3 ; set_leds_and_motor_state # Enable LEDs and motor &069b a5 55 LDA &55 ; player_speed &069d 48 PHA ; previous_player_speed &069e a9 00 LDA #&00 &06a0 85 55 STA &55 ; player_speed ; wait_for_unpause &06a2 20 e9 06 JSR &06e9 ; check_for_escape &06a5 a9 39 LDA #&39 ; CURSOR UP &06a7 20 cc 11 JSR &11cc ; check_for_keypress &06aa 10 f6 BPL &06a2 ; wait_for_unpause &06ac a9 00 LDA #&00 &06ae 20 d3 06 JSR &06d3 ; set_leds_and_motor_state # Disable LEDs and motor &06b1 68 PLA ; previous_player_speed &06b2 85 55 STA &55 ; player_speed ; not_pause &06b4 20 c0 06 JSR &06c0 ; check_for_level_jump # Returns carry set if level jump &06b7 b0 06 BCS &06bf ; leave &06b9 a5 ff LDA &ff ; frame_counter ; wait_for_vsync &06bb c5 ff CMP &ff ; frame_counter &06bd f0 fc BEQ &06bb ; wait_for_vsync ; leave &06bf 60 RTS ; check_for_level_jump &06c0 a5 b2 LDA &b2 ; playing_game # Positive if playing game, negative in title screen &06c2 30 0d BMI &06d1 ; leave_with_carry_clear &06c4 a5 e8 LDA &e8 ; cheat_enabled # Zero if cheat enabled &06c6 d0 09 BNE &06d1 ; leave_with_carry_clear &06c8 a9 45 LDA #&45 ; J &06ca 20 cc 11 JSR &11cc ; check_for_keypress &06cd 10 02 BPL &06d1 ; leave_with_carry_clear &06cf 38 SEC # Leave with carry set to indicate level jump &06d0 60 RTS ; leave_with_carry_clear &06d1 18 CLC # Leave with carry clear to indicate no level jump &06d2 60 RTS ; set_leds_and_motor_state # Enable LEDs and motor if top bit set &06d3 29 80 AND #&80 &06d5 8d 10 fe STA &fe10 ; Serial ULA control register # Enable or disable cassette motor &06d8 49 80 EOR #&80 &06da 4a LSR A &06db 4a LSR A &06dc 4a LSR A &06dd 4a LSR A &06de 09 06 ORA #&06 # Set Caps Lock LED &06e0 8d 40 fe STA &fe40 ; System VIA port B input/output register &06e3 09 01 ORA #&01 # Set Shift Lock LED &06e5 8d 40 fe STA &fe40 ; System VIA port B input/output register &06e8 60 RTS ; check_for_escape &06e9 a9 0e LDA #&0e &06eb 85 14 STA &14 ; channels_volume_cooldown &06ed a9 70 LDA #&70 ; ESCAPE &06ef 20 cc 11 JSR &11cc ; check_for_keypress &06f2 10 0e BPL &0702 ; leave &06f4 24 b2 BIT &b2 ; playing_game # Positive if playing game, negative in title screen &06f6 30 0a BMI &0702 ; leave &06f8 a5 c2 LDA &c2 ; player_is_plotted # Zero if player is plotted &06fa d0 03 BNE &06ff ; skip_unplotting_player &06fc 20 81 19 JSR &1981 ; unplot_player ; skip_unplotting_player &06ff 4c 93 0f JMP &0f93 ; title_screen_after_reset ; leave &0702 60 RTS ; plot_string &0703 68 PLA # String follows call to function &0704 85 00 STA &00 ; string_address_low &0706 68 PLA &0707 85 01 STA &01 ; string_address_high &0709 a0 00 LDY #&00 ; plot_string_loop &070b e6 00 INC &00 ; string_address_low &070d d0 02 BNE &0711 ; skip_page &070f e6 01 INC &01 ; string_address_high ; skip_page &0711 b1 00 LDA (&00),Y ; string_address # &00 indicates end of string &0713 f0 27 BEQ &073c ; end_of_string &0715 c9 40 CMP #&40 ; "@" &0717 f0 0a BEQ &0723 ; set_position # &40 sets text position; two bytes for x and y &0719 c9 23 CMP #&23 ; "#" &071b f0 28 BEQ &0745 ; set_colour # &23 sets text colour; one byte for colour &071d 20 00 03 JSR &0300 ; plot_character &0720 4c 0b 07 JMP &070b ; plot_string_loop ; set_position &0723 20 33 07 JSR &0733 ; get_byte &0726 85 e0 STA &e0 ; text_x &0728 20 33 07 JSR &0733 ; get_byte &072b 85 e1 STA &e1 ; text_y &072d 20 51 07 JSR &0751 ; calculate_text_screen_address &0730 4c 0b 07 JMP &070b ; plot_string_loop ; get_byte &0733 e6 00 INC &00 ; string_address_low &0735 d0 02 BNE &0739 ; skip_page &0737 e6 01 INC &01 ; string_address_low ; skip_page &0739 b1 00 LDA (&00),Y ; string_address &073b 60 RTS ; end_of_string &073c e6 00 INC &00 ; string_address_low &073e d0 02 BNE &0742 ; skip_page &0740 e6 01 INC &01 ; string_address_high ; skip_page &0742 6c 00 00 JMP (&0000) ; string_address # Continue execution after string ; set_colour &0745 20 33 07 JSR &0733 ; get_byte &0748 85 fd STA &fd ; text_colour &074a 4c 0b 07 JMP &070b ; plot_string_loop ; calculate_text_screen_address_from_X_and_Y &074d 86 e0 STX &e0 ; text_x &074f 84 e1 STY &e1 ; text_y ; calculate_text_screen_address &0751 a9 00 LDA #&00 ; &5800 = screen_memory &0753 85 da STA &da ; text_screen_address_low &0755 a9 58 LDA #&58 &0757 85 db STA &db ; text_screen_address_high &0759 a6 e1 LDX &e1 ; y &075b f0 10 BEQ &076d ; skip_multiplication ; multiplication_loop &075d a5 da LDA &da ; text_screen_address_low &075f 18 CLC &0760 69 40 ADC #&40 # Move down one group &0762 85 da STA &da ; text_screen_address_low &0764 a5 db LDA &db ; text_screen_address_high &0766 69 01 ADC #&01 &0768 85 db STA &db ; text_screen_address_high &076a ca DEX &076b d0 f0 BNE &075d ; multiplication_loop ; skip_multiplication &076d a9 00 LDA #&00 &076f 85 50 STA &50 ; tmp &0771 a5 e0 LDA &e0 ; text_x &0773 0a ASL A &0774 26 50 ROL &50 ; tmp &0776 0a ASL A &0777 26 50 ROL &50 ; tmp &0779 0a ASL A &077a 26 50 ROL &50 ; tmp &077c 65 da ADC &da ; text_screen_address_low &077e 85 da STA &da ; text_screen_address_low &0780 a5 db LDA &db ; text_screen_address_high &0782 65 50 ADC &50 ; tmp &0784 85 db STA &db ; text_screen_address_high &0786 60 RTS ; convert_number_to_digits &0787 86 fa STX &fa ; number_low &0789 84 fb STY &fb ; number_high &078b a9 30 LDA #&30 ; "0" &078d a2 04 LDX #&04 ; initialise_digits_loop &078f 95 f5 STA &f5,X ; digits &0791 ca DEX &0792 10 fb BPL &078f ; initialise_digits_loop &0794 e8 INX ; 0 ; convert_number_to_digits_digit_loop &0795 a0 10 LDY #&10 &0797 a9 00 LDA #&00 ; convert_number_to_digits_count_loop &0799 06 fa ASL &fa ; number_low &079b 26 fb ROL &fb ; number_high &079d 2a ROL A &079e c9 0a CMP #&0a &07a0 90 04 BCC &07a6 ; skip_overflow &07a2 e9 0a SBC #&0a &07a4 e6 fa INC &fa ; number_low ; skip_overflow &07a6 88 DEY &07a7 d0 f0 BNE &0799 ; convert_number_to_digits_count_loop &07a9 18 CLC &07aa 69 30 ADC #&30 ; "0" &07ac 95 f5 STA &f5,X ; digits &07ae e8 INX &07af a5 fa LDA &fa ; number_low &07b1 05 fb ORA &fb ; number_high &07b3 d0 e0 BNE &0795 ; convert_number_to_digits_digit_loop &07b5 60 RTS ; plot_number # Called with A = number of digits &07b6 48 PHA ; number of digits &07b7 20 87 07 JSR &0787 ; convert_number_to_digits &07ba 68 PLA ; number of digits &07bb aa TAX ; plot_number_loop &07bc b5 f5 LDA &f5,X ; digits &07be 20 00 03 JSR &0300 ; plot_character &07c1 ca DEX &07c2 10 f8 BPL &07bc ; plot_number_loop &07c4 60 RTS ; title_screen_scrolltext &07c5 57 65 6c 63 6f 6d 65 20 74 6f 20 74 68 65 20 67 ; "Welcome to the g" &07d5 61 6d 65 20 6f 66 20 27 53 50 48 45 52 45 20 4f ; "ame of 'SPHERE O" &07e5 46 20 44 45 53 54 49 4e 59 27 20 62 79 20 47 61 ; "F DESTINY' by Ga" &07f5 72 79 20 50 61 72 74 69 73 2e 2e 2e 20 20 20 47 ; "ry Partis... G" &0805 61 6d 65 20 64 65 73 69 67 6e 2c 20 67 72 61 70 ; "ame design, grap" &0815 68 69 63 73 2c 20 73 6f 75 6e 64 20 65 66 66 65 ; "hics, sound effe" &0825 63 74 73 2c 20 6d 75 73 69 63 20 61 6e 64 20 70 ; "cts, music and p" &0835 72 6f 67 72 61 6d 6d 69 6e 67 20 62 79 20 47 61 ; "rogramming by Ga" &0845 72 79 2e 2e 2e 20 20 20 59 6f 75 2c 20 42 72 75 ; "ry... You, Bru" &0855 63 65 20 74 68 65 20 42 61 6c 6c 2c 20 6d 75 73 ; "ce the Ball, mus" &0865 74 20 73 70 65 65 64 20 61 6c 6f 6e 67 20 61 20 ; "t speed along a " &0875 74 65 63 68 6e 69 2d 63 6f 6c 6f 75 72 65 64 20 ; "techni-coloured " &0885 69 6e 74 65 72 2d 73 74 61 72 69 6f 6e 20 66 72 ; "inter-starion fr" &0895 65 65 77 61 79 20 61 73 20 71 75 69 63 6b 20 61 ; "eeway as quick a" &08a5 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 61 74 ; "s possible to at" &08b5 74 61 69 6e 20 61 20 66 61 6e 74 61 73 74 69 63 ; "tain a fantastic" &08c5 20 73 63 6f 72 65 21 20 41 76 6f 69 64 20 74 68 ; " score! Avoid th" &08d5 65 20 62 6c 61 63 6b 20 68 6f 6c 65 73 20 66 6f ; "e black holes fo" &08e5 72 20 79 6f 75 72 20 6f 77 6e 20 73 61 6b 65 2c ; "r your own sake," &08f5 20 74 68 65 20 67 72 65 65 6e 20 73 71 75 61 72 ; " the green squar" &0905 65 73 20 67 69 76 65 20 79 6f 75 20 61 6e 20 65 ; "es give you an e" &0915 78 74 72 61 20 62 6f 6f 73 74 20 6f 66 20 73 70 ; "xtra boost of sp" &0925 65 65 64 2c 20 62 75 74 20 74 68 65 20 72 65 64 ; "eed, but the red" &0935 20 73 71 75 61 72 65 73 20 73 6c 6f 77 20 79 6f ; " squares slow yo" &0945 75 20 72 69 67 68 74 20 64 6f 77 6e 2e 20 55 73 ; "u right down. Us" &0955 65 20 74 68 65 20 6d 61 67 65 6e 74 61 20 73 71 ; "e the magenta sq" &0965 75 61 72 65 73 20 74 6f 20 62 6f 75 6e 63 65 20 ; "uares to bounce " &0975 79 6f 75 72 20 62 61 6c 6c 20 75 70 2c 20 62 75 ; "your ball up, bu" &0985 74 20 62 65 77 61 72 65 20 6f 66 20 74 68 65 20 ; "t beware of the " &0995 63 79 61 6e 20 73 71 75 61 72 65 73 20 77 68 69 ; "cyan squares whi" &09a5 63 68 20 72 65 76 65 72 73 65 20 79 6f 75 72 20 ; "ch reverse your " &09b5 63 6f 6e 74 72 6f 6c 73 2e 20 46 69 6e 61 6c 6c ; "controls. Finall" &09c5 79 20 74 68 65 20 77 68 69 74 65 20 73 71 75 61 ; "y the white squa" &09d5 72 65 73 20 61 72 65 20 66 6f 72 20 61 20 73 6d ; "res are for a sm" &09e5 61 6c 6c 20 62 6f 6e 75 73 2e 2e 2e 20 20 20 59 ; "all bonus... Y" &09f5 6f 75 20 61 72 65 20 65 76 65 6e 20 67 69 76 65 ; "ou are even give" &0a05 6e 20 61 6e 20 65 78 74 72 61 20 62 61 6c 6c 20 ; "n an extra ball " &0a15 65 76 65 72 79 20 74 77 6f 20 6c 65 76 65 6c 73 ; "every two levels" &0a25 2e 2e 2e 20 20 20 54 6f 20 63 6f 6e 74 72 6f 6c ; "... To control" &0a35 20 79 6f 75 72 20 62 61 6c 6c 2c 20 75 73 65 20 ; " your ball, use " &0a45 27 5a 2f 58 27 20 66 6f 72 20 6c 65 66 74 2f 72 ; "'Z/X' for left/r" &0a55 69 67 68 74 2c 20 27 2a 27 20 74 6f 20 73 70 65 ; "ight, '*' to spe" &0a65 65 64 20 75 70 2c 20 27 3f 27 20 74 6f 20 73 6c ; "ed up, '?' to sl" &0a75 6f 77 20 64 6f 77 6e 2c 20 61 6e 64 20 3c 52 45 ; "ow down, and to bounce." &0a95 20 45 76 65 72 79 20 73 65 6c 66 20 66 6f 72 63 ; " Every self forc" &0aa5 65 64 20 62 6f 75 6e 63 65 20 77 69 6c 6c 20 63 ; "ed bounce will c" &0ab5 61 75 73 65 20 74 68 65 20 64 75 72 61 74 69 6f ; "ause the duratio" &0ac5 6e 20 63 6f 75 6e 74 65 72 20 74 6f 20 64 65 63 ; "n counter to dec" &0ad5 72 65 6d 65 6e 74 20 61 74 20 61 20 6d 75 63 68 ; "rement at a much" &0ae5 20 66 61 73 74 65 72 20 72 61 74 65 2e 2e 2e 20 ; " faster rate... " &0af5 20 20 54 6f 64 61 79 27 73 20 68 69 67 68 20 73 ; " Today's high s" &0b05 63 6f 72 65 20 69 73 20 30 40 40 40 40 40 30 2e ; "core is 0@@@@@0." &0b15 20 43 6f 75 6c 64 20 79 6f 75 20 64 6f 20 61 6e ; " Could you do an" &0b25 79 20 62 65 74 74 65 72 3f 3f 3f 20 4a 75 73 74 ; "y better??? Just" &0b35 20 70 72 65 73 73 20 61 20 6e 75 6d 62 65 72 20 ; " press a number " &0b45 66 72 6f 6d 20 31 20 74 6f 20 34 20 74 6f 20 63 ; "from 1 to 4 to c" &0b55 68 6f 6f 73 65 20 74 68 65 20 6e 75 6d 62 65 72 ; "hoose the number" &0b65 20 6f 66 20 70 6c 61 79 65 72 73 20 61 6e 64 20 ; " of players and " &0b75 74 68 65 6e 20 66 69 6e 64 20 6f 75 74 2e 2e 2e ; "then find out..." &0b85 20 20 20 54 68 61 6e 6b 73 20 74 6f 20 44 61 76 ; " Thanks to Dav" &0b95 65 20 52 65 65 64 65 72 20 66 6f 72 20 61 64 76 ; "e Reeder for adv" &0ba5 69 63 65 20 6f 6e 20 6d 61 6b 69 6e 67 20 74 68 ; "ice on making th" &0bb5 65 20 67 61 6d 65 20 6d 6f 72 65 20 70 6c 61 79 ; "e game more play" &0bc5 61 62 6c 65 20 66 6f 72 20 74 68 65 20 61 76 65 ; "able for the ave" &0bd5 72 61 67 65 20 67 61 6d 65 73 20 70 6c 61 79 65 ; "rage games playe" &0be5 72 21 21 21 20 20 20 48 69 20 74 6f 20 50 65 74 ; "r!!! Hi to Pet" &0bf5 65 72 20 27 54 68 75 6e 64 65 72 73 74 72 75 63 ; "er 'Thunderstruc" &0c05 6b 27 20 53 63 6f 74 74 2c 20 4e 65 7a 7a 79 20 ; "k' Scott, Nezzy " &0c15 27 42 43 54 27 20 4e 65 73 62 69 74 2c 20 41 72 ; "'BCT' Nesbit, Ar" &0c25 74 20 27 68 61 68 61 27 20 43 72 65 77 2c 20 53 ; "t 'haha' Crew, S" &0c35 70 69 6b 65 2c 20 61 6c 6c 20 53 68 6f 74 6f 6b ; "pike, all Shotok" &0c45 61 6e 20 73 74 79 6c 69 73 74 73 20 61 74 20 43 ; "an stylists at C" &0c55 72 61 6d 6c 69 6e 67 74 6f 6e 20 4b 61 72 61 74 ; "ramlington Karat" &0c65 65 20 43 6c 75 62 20 61 6e 64 20 61 6e 79 6f 6e ; "e Club and anyon" &0c75 65 20 77 68 6f 20 6d 61 79 20 62 65 20 69 6e 20 ; "e who may be in " &0c85 74 68 65 20 66 6f 72 74 75 6e 61 74 65 20 28 6a ; "the fortunate (j" &0c95 6f 6b 65 21 29 20 70 6f 73 69 74 69 6f 6e 20 74 ; "oke!) position t" &0ca5 6f 20 6b 6e 6f 77 20 6d 65 2e 2e 2e 20 20 20 49 ; "o know me... I" &0cb5 73 6e 27 74 20 69 74 20 61 6d 61 7a 69 6e 67 20 ; "sn't it amazing " &0cc5 68 6f 77 20 6d 61 6e 79 20 70 65 6f 70 6c 65 20 ; "how many people " &0cd5 73 69 74 20 61 6e 64 20 72 65 61 64 20 74 68 65 ; "sit and read the" &0ce5 20 73 63 72 6f 6c 6c 69 6e 67 20 74 65 78 74 20 ; " scrolling text " &0cf5 69 6e 20 67 61 6d 65 73 20 6c 69 6b 65 20 74 68 ; "in games like th" &0d05 69 73 2e 20 54 68 65 79 20 6d 75 73 74 20 68 61 ; "is. They must ha" &0d15 76 65 20 62 65 74 74 65 72 20 74 68 69 6e 67 73 ; "ve better things" &0d25 20 74 6f 20 64 6f 2c 20 6c 69 6b 65 20 70 6c 61 ; " to do, like pla" &0d35 79 69 6e 67 20 74 68 65 20 62 6c 6f 6f 64 79 20 ; "ying the bloody " &0d45 67 61 6d 65 73 20 69 6e 73 74 65 61 64 2e 2e 2e ; "games instead..." &0d55 20 20 20 42 79 20 74 68 65 20 77 61 79 2c 20 69 ; " By the way, i" &0d65 66 20 79 6f 75 20 68 61 76 65 20 61 20 52 45 50 ; "f you have a REP" &0d75 4c 41 59 20 73 79 73 74 65 6d 20 66 69 74 74 65 ; "LAY system fitte" &0d85 64 20 74 68 69 73 20 67 61 6d 65 20 73 68 6f 75 ; "d this game shou" &0d95 6c 64 20 6e 6f 74 20 6c 6f 61 64 2e 20 49 66 20 ; "ld not load. If " &0da5 69 74 20 68 61 73 20 6c 6f 61 64 65 64 20 74 68 ; "it has loaded th" &0db5 65 6e 20 79 6f 75 20 28 6f 72 20 73 6f 6d 65 6f ; "en you (or someo" &0dc5 6e 65 20 65 6c 73 65 29 20 68 61 73 20 62 65 65 ; "ne else) has bee" &0dd5 6e 20 70 6c 61 79 69 6e 67 20 73 69 6c 6c 79 20 ; "n playing silly " &0de5 62 75 67 67 65 72 73 2e 2e 2e 20 20 20 54 68 69 ; "buggers... Thi" &0df5 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 72 ; "s program was cr" &0e05 65 61 74 65 64 20 6f 6e 20 61 20 42 42 43 2b 20 ; "eated on a BBC+ " &0e15 36 34 4b 20 6d 69 63 72 6f 2c 20 77 69 74 68 20 ; "64K micro, with " &0e25 74 77 69 6e 20 38 30 30 4b 20 64 69 73 63 20 73 ; "twin 800K disc s" &0e35 79 73 74 65 6d 2c 20 41 63 6f 72 6e 20 31 37 37 ; "ystem, Acorn 177" &0e45 30 20 44 46 53 2c 20 36 35 30 32 20 32 6e 64 20 ; "0 DFS, 6502 2nd " &0e55 70 72 6f 63 65 73 73 6f 72 2c 20 61 6e 64 20 63 ; "processor, and c" &0e65 68 65 61 70 6f 20 75 6e 62 72 61 6e 64 65 64 20 ; "heapo unbranded " &0e75 64 69 73 63 73 2e 2e 2e 20 20 20 5c 20 41 75 64 ; "discs... \ Aud" &0e85 69 6f 67 65 6e 69 63 20 53 6f 66 74 77 61 72 65 ; "iogenic Software" &0e95 20 4c 54 44 20 61 6e 64 20 47 61 72 79 20 50 61 ; " LTD and Gary Pa" &0ea5 72 74 69 73 20 31 39 38 36 2e 20 41 6c 6c 20 72 ; "rtis 1986. All r" &0eb5 69 67 68 74 73 20 72 65 73 65 72 76 65 64 2e 2e ; "ights reserved.." &0ec5 2e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ; ". " &0ed5 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ; " " &0ee5 20 20 20 20 20 20 20 20 20 20 20 20 00 ; " " ; initialise_scrolltext &0ef2 86 5a STX &5a ; scrolltext_address_low &0ef4 84 5b STY &5b ; scrolltext_address_high &0ef6 a9 20 LDA #&20 ; " " ; use_mode_4_font_data &0ef8 38 SEC &0ef9 e9 20 SBC #&20 ; " " &0efb 85 50 STA &50 ; font_address_low &0efd a9 00 LDA #&00 &0eff 85 51 STA &51 ; font_address_high &0f01 06 50 ASL &50 ; font_address_low &0f03 26 51 ROL &51 ; font_address_high &0f05 06 50 ASL &50 ; font_address_low &0f07 26 51 ROL &51 ; font_address_high &0f09 06 50 ASL &50 ; font_address_low &0f0b 26 51 ROL &51 ; font_address_high &0f0d a5 50 LDA &50 ; font_address_low &0f0f 18 CLC &0f10 69 50 ADC #&50 ; &2a50 = mode_4_font_data &0f12 85 50 STA &50 ; font_address_low &0f14 a5 51 LDA &51 ; font_address_high &0f16 69 2a ADC #&2a &0f18 85 51 STA &51 ; font_address_high &0f1a a0 07 LDY #&07 ; use_mode_4_font_data_loop &0f1c b1 50 LDA (&50),Y ; font_address &0f1e 99 a0 00 STA &00a0,Y ; character_data &0f21 88 DEY &0f22 10 f8 BPL &0f1c ; use_mode_4_font_data_loop &0f24 a9 08 LDA #&08 &0f26 85 5c STA &5c ; scrolltext_pixels &0f28 60 RTS ; update_scrolltext &0f29 a2 07 LDX #&07 ; write_shifted_character_loop &0f2b b5 a0 LDA &a0,X ; character_data &0f2d 9d c0 6a STA &6ac0,X ; screen_memory + &140 * 15 # Bottom right of scrolltext + 1 &0f30 0a ASL A &0f31 95 a0 STA &a0,X ; character_data &0f33 ca DEX &0f34 10 f5 BPL &0f2b ; write_shifted_character_loop &0f36 a9 80 LDA #&80 ; &6980 = screen_memory + &140 * 14 # Top left of scrolltext &0f38 85 00 STA &00 ; left_screen_address_low &0f3a a9 88 LDA #&88 ; &6988 = screen_memory + &140 * 14 + 8 &0f3c 85 02 STA &02 ; right_screen_address_low &0f3e a9 69 LDA #&69 &0f40 85 01 STA &01 ; left_screen_address_high &0f42 85 03 STA &03 ; right_screen_address_high &0f44 a2 05 LDX #&05 ; update_scrolltext_section_loop &0f46 a0 00 LDY #&00 ; update_scrolltext_byte_loop &0f48 b1 02 LDA (&02),Y ; right_screen_address &0f4a 0a ASL A &0f4b b1 00 LDA (&00),Y ; left_screen_address &0f4d 2a ROL A &0f4e 91 00 STA (&00),Y ; left_screen_address &0f50 c8 INY &0f51 c0 40 CPY #&40 &0f53 d0 f3 BNE &0f48 ; update_scrolltext_byte_loop &0f55 a5 00 LDA &00 ; left_screen_address_low &0f57 18 CLC &0f58 69 40 ADC #&40 &0f5a 85 00 STA &00 ; left_screen_address_low &0f5c a5 01 LDA &01 ; left_screen_address_high &0f5e 69 00 ADC #&00 &0f60 85 01 STA &01 ; left_screen_address_high &0f62 a5 02 LDA &02 ; right_screen_address_low &0f64 18 CLC &0f65 69 40 ADC #&40 &0f67 85 02 STA &02 ; right_screen_address_low &0f69 a5 03 LDA &03 ; right_screen_address_high &0f6b 69 00 ADC #&00 &0f6d 85 03 STA &03 ; right_screen_address_high &0f6f ca DEX &0f70 d0 d4 BNE &0f46 ; update_scrolltext_section_loop &0f72 a9 00 LDA #&00 &0f74 a2 07 LDX #&07 ; remove_shifted_character_loop &0f76 9d c0 6a STA &6ac0,X ; screen_memory + &140 * 15 # Bottom right of scrolltext + 1 &0f79 ca DEX &0f7a 10 fa BPL &0f76 ; remove_shifted_character_loop &0f7c c6 5c DEC &5c ; scrolltext_pixels &0f7e d0 11 BNE &0f91 ; leave_with_carry_clear &0f80 a0 00 LDY #&00 &0f82 b1 5a LDA (&5a),Y ; scrolltext_address &0f84 f0 09 BEQ &0f8f ; leave_with_carry_set &0f86 e6 5a INC &5a ; scrolltext_address_low &0f88 d0 02 BNE &0f8c ; leave_with_carry_clear &0f8a e6 5b INC &5b ; scrolltext_address_high &0f8c 4c f8 0e JMP &0ef8 ; use_mode_4_font_data ; leave_with_carry_set &0f8f 38 SEC # Leave with carry set to indicate end of scrolltext &0f90 60 RTS ; leave_with_carry_clear &0f91 18 CLC # Leave with carry clear to indicate not end of scrolltext &0f92 60 RTS ; title_screen_after_reset &0f93 a2 ff LDX #&ff &0f95 9a TXS &0f96 86 b2 STX &b2 ; playing_game # Set to non-zero to prevent level jumping and quitting &0f98 86 e8 STX &e8 ; cheat_enabled # Set to non-zero to indicate cheat not enabled ; title_screen &0f9a 20 0f 14 JSR &140f ; initialise_strip_colours &0f9d a9 05 LDA #&05 &0f9f 85 55 STA &55 ; player_speed &0fa1 85 c2 STA &c2 ; player_is_plotted # Set to non-zero to indicate player is not plotted &0fa3 20 d3 06 JSR &06d3 ; set_leds_and_motor_state &0fa6 58 CLI &0fa7 20 4f 12 JSR &124f ; initialise_sound_after_two_vyncs &0faa ae 29 1b LDX &1b29 ; high_scores + 16 # Take the highest score &0fad ac 2a 1b LDY &1b2a ; high_scores + 17 &0fb0 20 87 07 JSR &0787 ; convert_number_to_digits &0fb3 a2 04 LDX #&04 ; poke_high_score_into_scrolltext_loop &0fb5 b5 f5 LDA &f5,X ; digits &0fb7 99 0e 0b STA &0b0e,Y ; title_screen_scrolltext + &349 # and poke it into the title screen scrolltext &0fba c8 INY &0fbb ca DEX &0fbc 10 f7 BPL &0fb5 ; poke_high_score_into_scrolltext_loop &0fbe 20 b1 1b JSR &1bb1 ; plot_high_scores &0fc1 20 03 07 JSR &0703 ; plot_string &0fc4 40 04 0e ; at (&0d, &13) &0fc7 58 49 4c 54 44 4e 20 54 68 65 20 4e 6f 74 20 53 ; "XILTDN The Not So Mega Being..." &0fd7 6f 20 4d 65 67 61 20 42 65 69 6e 67 2e 2e 2e &0fe6 00 ; end of string &0fe7 20 76 11 JSR &1176 ; initialise_tune &0fea a9 01 LDA #&01 &0fec 85 0e STA &0e ; tune_channel_cooldowns &0fee 85 0f STA &0f ; tune_channel_cooldowns + 1 &0ff0 85 90 STA &90 ; scrolltext_initial_delay ; reset_title_screen_scrolltext &0ff2 a2 c5 LDX #&c5 ; &07c5 = title_screen_scrolltext &0ff4 a0 07 LDY #&07 &0ff6 20 f2 0e JSR &0ef2 ; initialise_scrolltext ; title_screen_loop &0ff9 a9 47 LDA #&47 ; \ &0ffb 20 cc 11 JSR &11cc ; check_for_keypress &0ffe 30 3c BMI &103c ; ask_for_cheat_password &1000 a9 00 LDA #&00 ; &5600 = title_screen_strip &1002 85 b0 STA &b0 ; strip_data_address_low &1004 a9 56 LDA #&56 &1006 85 b1 STA &b1 ; strip_data_address_high &1008 20 89 12 JSR &1289 ; rnd &100b 29 3f AND #&3f &100d 8d 00 56 STA &5600 ; title_screen_strip &1010 20 24 11 JSR &1124 ; update_tune &1013 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &1016 e6 90 INC &90 ; title_screen_scrolltext &1018 10 07 BPL &1021 ; skip_updating_scrolltext &101a a9 80 LDA #&80 &101c 85 90 STA &90 ; title_screen_scrolltext &101e 20 29 0f JSR &0f29 ; update_scrolltext # Returns carry set at end of scrolltext ; skip_updating_scrolltext &1021 b0 cf BCS &0ff2 ; reset_title_screen_scrolltext &1023 a2 03 LDX #&03 ; check_for_number_keys_loop &1025 bd 20 11 LDA &1120,X ; number_keycodes &1028 20 cc 11 JSR &11cc ; check_for_keypress &102b 30 05 BMI &1032 ; set_number_of_players &102d ca DEX &102e 10 f5 BPL &1025 ; check_for_number_keys_loop &1030 30 c7 BMI &0ff9 ; title_screen_loop ; set_number_of_players &1032 86 a9 STX &a9 ; number_of_players &1034 e6 b2 INC &b2 ; playing_game # Set to positive to permit level jumping and quitting &1036 20 ab 13 JSR &13ab ; start_game &1039 4c 93 0f JMP &0f93 ; title_screen_after_reset ; ask_for_cheat_password &103c 20 62 1c JSR &1c62 ; plot_strips_and_player &103f 20 03 07 JSR &0703 ; plot_string &1042 40 05 11 ; at (&05, &11) &1045 50 6c 65 61 73 65 20 65 6e 74 65 72 20 74 68 65 ; "Please enter the password for" &1055 20 70 61 73 73 77 6f 72 64 20 66 6f 72 &1065 40 0d 13 ; at (&0d, &13) &1068 74 68 65 20 63 68 65 61 74 20 6d 6f 64 65 ; "the cheat mode" &1073 00 ; end of string &1074 20 78 1c JSR &1c78 ; get_string &1077 a2 0f LDX #&0f ; check_cheat_password_loop &1079 bd ee 02 LDA &02ee,X ; input_buffer &107c dd 10 11 CMP &1110,X ; cheat_password &107f f0 03 BEQ &1084 ; consider_next_byte &1081 4c 0d 11 JMP &110d ; to_title_screen ; consider_next_byte &1084 ca DEX &1085 10 f2 BPL &1079 ; check_cheat_password_loop ; enable_cheat_mode &1087 e6 e8 INC &e8 ; cheat_enabled # Set to zero to indicate cheat enabled &1089 20 62 1c JSR &1c62 ; plot_strips_and_player &108c 20 03 07 JSR &0703 ; plot_string &108f 40 03 11 ; at (&03, &11) &1092 43 68 65 61 74 20 6d 6f 64 65 20 6e 6f 77 20 69 ; "Cheat mode now initialized - this" &10a2 6e 69 74 69 61 6c 69 7a 65 64 20 2d 20 74 68 69 &10b2 73 &10b3 40 01 13 ; at (&01, &13) &10b6 6d 65 61 6e 73 20 74 68 61 74 20 61 6c 6c 20 68 ; "means that all holes have been removed" &10c6 6f 6c 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 &10d6 65 6d 6f 76 65 64 &10dc 40 00 15 ; at (&00, &15) &10df 61 6e 64 20 61 72 65 20 6e 6f 77 20 77 68 69 74 ; "and are now white squares giving points." &10ef 65 20 73 71 75 61 72 65 73 20 67 69 76 69 6e 67 &10ff 20 70 6f 69 6e 74 73 2e &1107 00 ; end of string &1107 a2 ff LDX #&ff &110a 20 c5 11 JSR &11c5 ; delay_for_Y ; to_title_screen &110d 4c 9a 0f JMP &0f9a ; title_screen ; cheat_password &1110 4c 41 5a 4f 4e 4e 4f 4d 4f 52 45 20 20 20 20 20 ; "LAZONNOMORE " ; number_keycodes &1120 30 ; 1 &1121 31 ; 2 &1122 11 ; 3 &1123 12 ; 4 ; update_tune &1124 a5 0a LDA &0a ; tune_address_low &1126 c9 b5 CMP #&b5 ; &27b5 = tune_channel_1_data &1128 d0 0e BNE &1138 ; not_end_of_tune &112a a5 0b LDA &0b ; tune_address_high &112c c9 27 CMP #&27 &112e d0 08 BNE &1138 ; not_end_of_tune &1130 a9 00 LDA #&00 &1132 85 0e STA &0e ; tune_channel_cooldowns &1134 85 0f STA &0f ; tune_channel_cooldowns + 1 &1136 f0 3e BEQ &1176 ; initialise_tune ; not_end_of_tune &1138 a2 00 LDX #&00 &113a 20 3f 11 JSR &113f ; update_tune_channel &113d a2 01 LDX #&01 ; update_tune_channel &113f d6 0e DEC &0e,X ; tune_channel_cooldowns &1141 d0 32 BNE &1175 ; leave &1143 8a TXA &1144 e8 INX &1145 86 02 STX &02 ; channel &1147 0a ASL A &1148 aa TAX &1149 b5 0a LDA &0a,X ; tune_address_low &114b 85 00 STA &00 ; note_address_low &114d 18 CLC &114e 69 02 ADC #&02 &1150 95 0a STA &0a,X ; tune_address_low &1152 b5 0b LDA &0b,X ; tune_address_high &1154 85 01 STA &01 ; note_address_high &1156 69 00 ADC #&00 &1158 95 0b STA &0b,X ; tune_address_high &115a a0 01 LDY #&01 &115c b1 00 LDA (&00),Y ; note_address # Second byte of tune data sets duration &115e a6 02 LDX &02 ; channel &1160 95 0d STA &0d,X ; tune_channel_cooldowns - 1 # channel was incremented at &1145 &1162 88 DEY ; 0 &1163 b1 00 LDA (&00),Y ; note_address # First byte of tune data sets pitch &1165 20 9f 11 JSR &119f ; convert_pitch_to_frequency &1168 a5 02 LDA &02 ; channel &116a 20 b1 05 JSR &05b1 ; play_sound ; v vd vc vs pd pc ps &116d 04 01 02 0b 00 00 00 00 ; leave &1175 60 RTS ; initialise_tune &1176 a9 07 LDA #&07 ; &2607 = tune_channel_1_data &1178 85 0a STA &0a ; tune_address_low &117a a9 26 LDA #&26 &117c 85 0b STA &0b ; tune_address_high &117e a9 b5 LDA #&b5 ; &27b5 = tune_channel_2_data &1180 85 0c STA &0c ; tune_address_low + 2 &1182 a9 27 LDA #&27 &1184 85 0d STA &0d ; tune_address_high + 2 &1186 60 RTS ; frequencies_low_table &1187 f0 b7 82 4f 20 f3 c8 a0 7b 57 35 16 ; frequencies_high_table &1193 03 03 03 03 03 02 02 02 02 02 02 02 ; convert_pitch_to_frequency # Called with A = pitch &119f a2 00 LDX #&00 ; divide_by_forty_eight_loop &11a1 c9 30 CMP #&30 &11a3 90 06 BCC &11ab ; finished_division &11a5 e8 INX # X = pitch DIV 48 &11a6 e9 30 SBC #&30 &11a8 4c a1 11 JMP &11a1 ; divide_by_forty_eight_loop ; finished_division &11ab 4a LSR A &11ac 4a LSR A &11ad a8 TAY # Y = (pitch MOD 48) / 4 &11ae b9 87 11 LDA &1187,Y ; frequencies_low_table &11b1 85 fb STA &fb ; frequency_low &11b3 b9 93 11 LDA &1193,Y ; frequencies_high_table # Use Y to lookup frequency in table ; divide_by_power_of_two_loop &11b6 ca DEX &11b7 30 06 BMI &11bf ; leave_with_frequency &11b9 4a LSR A &11ba 66 fb ROR &fb ; frequency_low # frequency = frequency / 2 ^ (pitch DIV 48) &11bc 4c b6 11 JMP &11b6 ; divide_by_power_of_two_loop ; leave_with_frequency &11bf a6 fb LDX &fb ; frequency_low &11c1 a8 TAY # Leave with XY = frequency &11c2 60 RTS ; delay_for_100 &11c3 a0 64 LDY #&64 ; delay_for_Y &11c5 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &11c8 88 DEY &11c9 d0 fa BNE &11c5 ; delay_for_Y &11cb 60 RTS ; check_for_keypress &11cc 8d 4f fe STA &fe4f ; System VIA input/output register A &11cf ad 4f fe LDA &fe4f ; System VIA input/output register A &11d2 60 RTS ; play_duration_sound &11d3 a9 00 LDA #&00 &11d5 85 00 STA &00 ; frequency_high &11d7 a9 58 LDA #&58 &11d9 38 SEC &11da e5 b3 SBC &b3 ; duration &11dc 0a ASL A &11dd 26 00 ROL &00 ; frequency_high &11df 0a ASL A &11e0 26 00 ROL &00 ; frequency_high &11e2 0a ASL A &11e3 26 00 ROL &00 ; frequency_high &11e5 aa TAX &11e6 a4 00 LDY &00 ; frequency_high &11e8 a9 01 LDA #&01 # Use channel 1 &11ea 20 b1 05 JSR &05b1 ; play_sound ; v vd vc vs pd pc ps &11ed 04 00 00 00 00 00 01 01 &11f5 60 RTS ; backup_player_state &11f6 8a TXA &11f7 48 PHA ; tmp_x &11f8 0a ASL A &11f9 0a ASL A &11fa 0a ASL A &11fb 0a ASL A &11fc a8 TAY &11fd a2 00 LDX #&00 ; backup_player_state_loop &11ff b5 90 LDA &90,X ; player_state &1201 99 00 01 STA &0100,Y ; players_state &1204 e8 INX &1205 c8 INY &1206 e0 10 CPX #&10 &1208 d0 f5 BNE &11ff ; backup_player_state_loop &120a 68 PLA ; tmp_X &120b aa TAX &120c 60 RTS ; restore_player_state &120d 8a TXA &120e 48 PHA ; tmp_x &120f 0a ASL A &1210 0a ASL A &1211 0a ASL A &1212 0a ASL A &1213 a8 TAY &1214 a2 00 LDX #&00 ; restore_player_state_loop &1216 b9 00 01 LDA &0100,Y ; players_state &1219 95 90 STA &90,X ; player_state &121b e8 INX &121c c8 INY &121d e0 10 CPX #&10 &121f d0 f5 BNE &1216 ; restore_player_state_loop &1221 68 PLA ; tmp_x &1222 aa TAX &1223 60 RTS ; initialise_players_state &1224 a9 00 LDA #&00 &1226 85 90 STA &90 ; score &1228 85 91 STA &91 ; score + 1 &122a 85 93 STA &93 ; level &122c a9 03 LDA #&03 # Players start with three lives &122e 85 92 STA &92 ; player_lives &1230 a2 03 LDX #&03 ; initialise_players_state_loop &1232 86 9a STX &9a ; active_player &1234 20 f6 11 JSR &11f6 ; backup_player_state &1237 ca DEX &1238 10 f8 BPL &1232 ; initialise_players_state_loop &123a 60 RTS ; plot_player_and_number &123b 20 03 07 JSR &0703 ; plot_string &123e 20 70 6c 61 79 65 72 20 ; " player " &1246 00 ; end of string &1247 a5 a8 LDA &a8 ; current_player &1249 18 CLC &124a 69 31 ADC #&31 ; "1" &124c 4c 00 03 JMP &0300 ; plot_character ; initialise_sound_after_two_vyncs &124f 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync ; initialise_sound_after_one_vsync &1252 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &1255 78 SEI &1256 a9 00 LDA #&00 &1258 a2 3f LDX #&3f ; initialise_channels_loop &125a 95 10 STA &10,X ; channels_data # Wipe &0010 - &004f &125c ca DEX &125d 10 fb BPL &125a ; initialise_channels_loop &125f a9 0b LDA #&0b # Enable keyboard auto scan &1261 8d 40 fe STA &fe40 ; System VIA port B input/output register &1264 a9 ff LDA #&ff # Set all bits to to output &1266 8d 43 fe STA &fe43 ; System VIA data direction register A &1269 a9 9f LDA #&9f # Silence channel 3 &126b 20 9e 05 JSR &059e ; write_byte_to_sound_chip &126e a9 bf LDA #&bf # Silence channel 1 &1270 20 9e 05 JSR &059e ; write_byte_to_sound_chip &1273 a9 df LDA #&df # Silence channel 2 &1275 20 9e 05 JSR &059e ; write_byte_to_sound_chip &1278 a9 ff LDA #&ff # Silence channel 0 &127a 20 9e 05 JSR &059e ; write_byte_to_sound_chip &127d a9 7f LDA #&7f # Set top bit as input, low seven bits as output &127f 8d 43 fe STA &fe43 ; System VIA data direction register A &1282 a9 03 LDA #&03 # Disable keyboard auto scan &1284 8d 40 fe STA &fe40 ; System VIA port B input/output register &1287 58 CLI &1288 60 RTS ; rnd &1289 4d 44 fe EOR &fe44 ; System VIA timer 1 counter LSB &128c 4d 45 fe EOR &fe45 ; System VIA timer 1 counter MSB &128f 45 fc EOR &fc ; irq_accumulator &1291 45 ff EOR &ff ; frame_counter &1293 60 RTS ; clear_scrolltext_and_duration_bar &1294 a2 00 LDX #&00 &1296 86 e7 STX &e7 ; use_fixed_palette # Set to zero to use strips &1298 8a TXA ; clear_scrolltext_loop &1299 9d 80 69 STA &6980,X ; screen_memory + &140 * 14 &129c 9d c0 69 STA &69c0,X ; screen_memory + &140 * 14 + &40 # Clear &140 byte group &129f e8 INX &12a0 d0 f7 BNE &1299 ; clear_scrolltext_loop &12a2 a9 f0 LDA #&f0 &12a4 a2 00 LDX #&00 ; clear_duration_bar_loop &12a6 9d 28 66 STA &6628,X ; screen_memory + &140 * 11 + 8 * 13 &12a9 e8 INX &12aa e0 c0 CPX #&c0 &12ac d0 f8 BNE &12a6 ; clear_duration_bar_loop &12ae 60 RTS ; initialise_player_after_delay &12af 20 c3 11 JSR &11c3 ; delay_for_100 ; initialise_player &12b2 20 52 12 JSR &1252 ; initialise_sound_after_one_vsync &12b5 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &12b8 20 94 12 JSR &1294 ; clear_scrolltext_and_duration_bar &12bb a9 80 LDA #&80 ; &6980 = screen_memory + &140 * 14 &12bd 85 00 STA &00 ; screen_address_low &12bf a9 69 LDA #&69 &12c1 85 01 STA &01 ; screen_address_high &12c3 a9 b0 LDA #&b0 ; &3eb0 = level_screen_data &12c5 85 02 STA &02 ; packed_data_address_low &12c7 a9 3e LDA #&3e &12c9 85 03 STA &03 ; packed_data_address_high &12cb 20 f1 1a JSR &1af1 ; unpack_screen_data # Unpack level screen (coloured strips) &12ce 20 03 07 JSR &0703 ; plot_string &12d1 23 02 ; use colour 2 &12d3 40 02 0b ; at (&02, &0b) &12d6 44 75 72 61 74 69 6f 6e ; "Duration" &12dd 00 ; end of string &12de a6 a8 LDX &a8 ; current_player &12e1 20 f6 11 JSR &11f6 ; backup_player_state &12e4 a2 03 LDX #&03 # For each of four players, ; plot_players_status_loop &12e6 86 0f STX &0f ; player &12e8 a0 02 LDY #&02 # Use colour 2 for active player &12ea e4 a8 CPX &a8 ; current_player &12ec f0 01 BEQ &12ef ; set_text_colour &12ee c8 INY ; 3 # and colour 3 for other players ; set_text_colour &12ef 84 fd STY &fd ; text_colour &12f1 20 0d 12 JSR &120d ; restore_player_state &12f4 a6 9a LDX &9a ; active_player &12f6 bd a7 13 LDA &13a7,X ; players_status_x_positions &12f9 aa TAX &12fa ca DEX &12fb ca DEX &12fc a0 07 LDY #&07 &12fe 20 4d 07 JSR &074d ; calculate_text_screen_address_from_X_and_Y &1301 a5 9a LDA &9a ; active_player &1303 18 CLC &1304 69 31 ADC #&31 ; "1" &1306 20 00 03 JSR &0300 ; plot_character # Plot player number &1309 a9 2d LDA #&2d ; "-" &130b 20 00 03 JSR &0300 ; plot_character &130e a6 9a LDX &9a ; active_player &1310 bd a7 13 LDA &13a7,X ; players_status_x_positions &1313 38 SEC &1314 e9 02 SBC #&02 &1316 8d 1d 13 STA &131d ; level_string + 1 # Set x position of string &1319 20 03 07 JSR &0703 ; plot_string ; level_string &131c 40 20 09 ; at (&20, &09) &121f 4c 65 76 65 6c 2d ; "Level-" &1213 00 ; end of string &1326 a6 93 LDX &93 ; level &1328 e8 INX &1329 a0 00 LDY #&00 &132b a9 01 LDA #&01 &132d 20 b6 07 JSR &07b6 ; plot_number # Plot player's level &1330 a6 0f LDX &0f ; player &1332 bd a7 13 LDA &13a7,X ; players_status_x_positions &1335 aa TAX &1336 ca DEX &1337 ca DEX &1338 a0 08 LDY #&08 &133a 20 4d 07 JSR &074d ; calculate_text_screen_address_from_X_and_Y &133d a5 92 LDA &92 ; player_lives &133f c9 04 CMP #&04 &1341 90 02 BCC &1345 ; skip_ceiling &1343 a9 04 LDA #&04 ; skip_ceiling &1345 0a ASL A &1346 0a ASL A &1347 0a ASL A &1348 aa TAX ; plot_player_lives_loop &1349 a0 07 LDY #&07 &134b bd 62 13 LDA &1362,X ; lives_text &134e 20 00 03 JSR &0300 ; plot_character # Plot player's lives &1351 e8 INX &1352 88 DEY &1353 10 f6 BPL &134b ; plot_player_lives_loop &1355 20 8e 13 JSR &138e ; plot_player_score # Plot player's score &1358 a6 0f LDX &0f ; player &135a ca DEX &135b 10 89 BPL &12e6 ; plot_players_status_loop &135d a6 a8 LDX &a8 ; current_player &135f 4c 0d 12 JMP &120d ; restore_player_state ; lives_text &1362 20 20 20 20 20 20 20 20 ; &00 : " " &136a 20 20 20 7b 7d 20 20 20 ; &01 : " {} " &1372 20 20 7b 7d 7b 7d 20 20 ; &02 : " {}{} " &137a 20 7b 7d 7b 7d 7b 7d 20 ; &03 : " {}{}{} " &1382 7b 7d 7b 7d 7b 7d 5b 5d ; &04 : "{}{}{}[]" ; plot_score &138a a9 02 LDA #&02 &138c 85 fd STA &fd ; text_colour ; plot_player_score &138e a6 9a LDX &9a ; active_player &1390 bd a7 13 LDA &13a7,X ; players_status_x_positions &1393 aa TAX &1394 a0 07 LDY #&07 &1396 20 4d 07 JSR &074d ; calculate_text_screen_address_from_X_and_Y &1399 a6 90 LDX &90 ; score &139b a4 91 LDY &91 ; score + 1 &139d a9 04 LDA #&04 &139f 20 b6 07 JSR &07b6 ; plot_number # Plot score &13a2 a9 30 LDA #&30 ; "0" &13a4 4c 00 03 JMP &0300 ; plot_character # Plot trailing zero ; players_status_x_positions &13a7 04 0d 16 1f ; start_game &13ab 20 24 12 JSR &1224 ; initialise_players_state &13ae a5 a9 LDA &a9 ; number_of_players &13b0 85 aa STA &aa ; number_of_players_still_alive ; first_player &13b2 a2 00 LDX #&00 ; next_player &13b4 86 a8 STX &a8 ; current_player &13b6 20 0d 12 JSR &120d ; restore_player_state &13b9 a5 92 LDA &92 ; player_lives &13bb f0 41 BEQ &13fe ; not_out_of_lives &13bd 20 55 14 JSR &1455 ; play_level &13c0 a5 92 LDA &92 ; player_lives &13c2 d0 3a BNE &13fe ; not_out_of_lives &13c4 c6 aa DEC &aa ; number_of_players_still_alive &13c6 20 03 07 JSR &0703 ; plot_string &13c9 40 0b 0e ; at (&0b, &0e) &12cc 47 61 6d 65 20 6f 76 65 72 ; "Game over" &13d5 00 ; end of string &13d6 20 3b 12 JSR &123b ; plot_player_and_number &13d9 a2 03 LDX #&03 ; end_of_game_sound_loop &13db 8a TXA # Use channels 3 - 1 &13dc 48 PHA ; channel &13dd a2 00 LDX #&00 &13df a0 00 LDY #&00 &13e1 20 b1 05 JSR &05b1 ; play_sound # Play sound for end of game ; v vd vc vs pd pc ps &13e4 04 00 00 00 06 00 01 ff &13ec a0 14 LDY #&14 &13ee 20 c5 11 JSR &11c5 ; delay_for_Y &13f1 68 PLA ; channel &13f2 aa TAX &13f3 ca DEX &13f4 d0 e5 BNE &13db ; end_of_game_sound_loop &13f6 a0 3c LDY #&3c &13f8 20 c5 11 JSR &11c5 ; delay_for_Y &13fb 20 39 1d JSR &1d39 ; check_for_high_score ; not_out_of_lives &13fe a6 a8 LDX &a8 ; current_player &1400 20 f6 11 JSR &11f6 ; backup_player_state &1403 e8 INX &1404 e4 a9 CPX &a9 ; number_of_players &1406 90 ac BCC &13b4 ; next_player &1408 f0 aa BEQ &13b4 ; next_player &140a a5 aa LDA &aa ; number_of_players_still_alive &140c 10 a4 BPL &13b2 ; first_player &140e 60 RTS ; initialise_strip_colours &140f a9 00 LDA #&00 &1411 85 53 STA &53 ; player_speed_fraction &1413 85 55 STA &55 ; player_speed &1415 a2 07 LDX #&07 ; initialise_strip_colours_loop &1417 9d 40 01 STA &0140,X ; strip_colours &141a ca DEX &141b 10 fa BPL &1417 ; initialise_strip_colours_loop &141d a9 e0 LDA #&e0 ; &55e0 = strip_data &141f 85 b0 STA &b0 ; strip_data_address_low &1421 a9 55 LDA #&55 &1423 85 b1 STA &b1 ; strip_data_address_high &1425 60 RTS ; duration_pixel_values &1426 78 ; 1222 &1427 3c ; 1122 &1428 1e ; 1112 &1429 0f ; 1111 ; update_duration &142a a5 b3 LDA &b3 ; duration &142c 48 PHA ; duration &142d 29 7c AND #&7c &142f 0a ASL A &1430 69 02 ADC #&02 &1432 a8 TAY &1433 68 PLA ; duration &1434 29 03 AND #&03 &1436 aa TAX &1437 bd 26 14 LDA &1426,X ; duration_pixel_values &143a a2 03 LDX #&03 ; update_duration_loop &143c 99 30 66 STA &6630,Y ; screen_memory + &140 * 11 + 8 * 15 &143f c8 INY &1440 ca DEX &1441 10 f9 BPL &143c ; update_duration_loop &1443 c9 0f CMP #&0f &1445 d0 0d BNE &1454 ; leave &1447 c8 INY &1448 c8 INY &1449 a2 07 LDX #&07 &144b a9 f0 LDA #&f0 ; wipe_duration_loop &144d 99 30 66 STA &6630,Y ; screen_memory + &140 * 11 + 8 * 15 &1450 c8 INY &1451 ca DEX &1452 10 f9 BPL &144d ; wipe_duration_loop ; leave &1454 60 RTS ; play_level &1455 20 0f 14 JSR &140f ; initialise_strip_colours &1458 20 94 12 JSR &1294 ; clear_scrolltext_and_duration_bar &145b a9 80 LDA #&80 ; &6980 = screen_memory + &140 * 14 &145d 85 00 STA &00 ; screen_address_low &145f a9 69 LDA #&69 &1461 85 01 STA &01 ; screen_address_high &1463 a9 ba LDA #&ba &1465 85 02 STA &02 ; packed_data_address_low &1467 a9 4b LDA #&4b ; &4bba = start_screen_data &1469 85 03 STA &03 ; packed_data_address_high &146b 20 f1 1a JSR &1af1 ; unpack_screen_data # Unpack start screen ("START") &146e e6 e7 INC &e7 ; use_fixed_palette # Set to non-zero to use fixed palette &1470 20 03 07 JSR &0703 ; plot_string &1473 40 06 0e ; at (&06, &0e) &1476 50 72 65 70 61 72 65 20 66 6f 72 20 6c 65 76 65 ; "Prepare for level " &1486 6c 20 &1488 00 ; end of string &1489 a6 93 LDX &93 ; level &148b e8 INX &148c a0 00 LDY #&00 &148e a9 01 LDA #&01 # Plot one digit, also use channel 1 &1490 20 b6 07 JSR &07b6 ; plot_number &1493 20 3b 12 JSR &123b ; plot_player_and_number &1496 a2 01 LDX #&01 &1498 a0 00 LDY #&00 &149a 8a TXA &149b 20 b1 05 JSR &05b1 ; play_sound # Play sound for starting level ; v vd vc vs pd pc ps &149e 04 00 00 00 6a ff 01 c8 &14a6 20 c3 11 JSR &11c3 ; delay_for_100 ; next_level &14a9 20 b2 12 JSR &12b2 ; initialise_player &14ac 20 0f 14 JSR &140f ; initialise_strip_colours &14af a9 50 LDA #&50 ; &1e50 = title_data &14b1 85 00 STA &00 ; title_data_address_low &14b3 a9 1e LDA #&1e &14b5 85 01 STA &01 ; title_data_address_high &14b7 a0 00 LDY #&00 &14b9 a6 93 LDX &93 ; level ; skip_title_loop &14bb b1 00 LDA (&00),Y ; title_data_address # First byte of title data sets x position &14bd c9 20 CMP #&20 ; " " &14bf b0 03 BCS &14c4 ; next_byte &14c1 ca DEX &14c2 30 08 BMI &14cc ; found_title_data ; next_byte &14c4 e6 00 INC &00 ; title_data_address_low &14c6 d0 f3 BNE &14bb ; skip_title_loop &14c8 e6 01 INC &01 ; title_data_address_high &14ca d0 ef BNE &14bb ; skip_title_loop ; found_title_data &14cc aa TAX &14cd a0 0e LDY #&0e &14cf 20 4d 07 JSR &074d ; calculate_text_screen_address_from_X_and_Y &14d2 a0 01 LDY #&01 ; plot_level_title_loop &14d4 b1 00 LDA (&00),Y ; title_data_address &14d6 c9 20 CMP #&20 ; " " &14d8 90 06 BCC &14e0 ; end_of_title &14da 20 00 03 JSR &0300 ; plot_character # Plot level title &14dd c8 INY &14de d0 f4 BNE &14d4 ; plot_level_title_loop ; end_of_title &14e0 20 10 1a JSR &1a10 ; generate_level &14e3 a0 12 LDY #&12 ; accelerate_onto_level_loop &14e5 98 TYA &14e6 48 PHA ; count &14e7 a0 05 LDY #&05 &14e9 20 c5 11 JSR &11c5 ; delay_for_Y &14ec e6 55 INC &55 ; player_speed &14ee 68 PLA ; count &14ef a8 TAY &14f0 88 DEY &14f1 d0 f2 BNE &14e5 ; accelerate_onto_level_loop &14f3 a9 01 LDA #&01 &14f5 85 55 STA &55 ; player_speed &14f7 a2 00 LDX #&00 ; add_duration_loop &14f9 8a TXA &14fa 48 PHA ; count &14fb 85 b3 STA &b3 ; duration &14fd 20 2a 14 JSR &142a ; update_duration &1500 20 d3 11 JSR &11d3 ; play_duration_sound &1503 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &1506 68 PLA ; count &1507 aa TAX &1508 e8 INX &1509 e0 58 CPX #&58 &150b d0 ec BNE &14f9 ; add_duration_loop &150d 20 cf 17 JSR &17cf ; play_sound_for_start_of_level &1510 a9 12 LDA #&12 # Player starts in centre &1512 85 c0 STA &c0 ; player_x &1514 20 59 17 JSR &1759 ; position_player_for_new_life &1517 20 72 18 JSR &1872 ; buffer_player &151a a9 6c LDA #&6c ; &14 * 5 + 8 # Player can bounce five times &151c 85 b7 STA &b7 ; duration_maximum_cooldown &151e a9 00 LDA #&00 &1520 85 54 STA &54 ; level_complete # Set to zero to indicate level not complete &1522 85 b4 STA &b4 ; duration_cooldown &1524 85 b6 STA &b6 ; player_keys_inverted # Set to zero to indicate keys not inverted ; main_game_loop &1526 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &1529 20 f2 17 JSR &17f2 ; update_player &152c 20 c0 06 JSR &06c0 ; check_for_level_jump # Returns carry set if level jump &152f 90 02 BCC &1533 ; not_jumping_level &1531 e6 54 INC &54 ; level_complete # Set to positive to indicate level complete ; not_jumping_level &1533 a5 b0 LDA &b0 ; strip_data_address_low &1535 c9 80 CMP #&80 ; &5780 = strip_data + &20 * 14 # One start section, eleven sections, two end sections &1537 90 0b BCC &1544 ; not_end_of_level &1539 a5 b1 LDA &b1 ; strip_data_address_high &153b c9 57 CMP #&57 &153d 90 05 BCC &1544 ; not_end_of_level &153f e6 54 INC &54 ; level_complete # Set to positive to indicate level complete &1541 4c 58 15 JMP &1558 ; consider_ending_level ; not_end_of_level &1544 c6 b4 DEC &b4 ; duration_cooldown &1546 10 0d BPL &1555 ; skip_reducing_duration &1548 a5 b7 LDA &b7 ; duration_maximum_cooldown &154a 85 b4 STA &b4 ; duration_cooldown &154c 20 2a 14 JSR &142a ; update_duration &154f c6 b3 DEC &b3 ; duration &1551 10 02 BPL &1555 ; not_out_of_time &1553 c6 54 DEC &54 ; level_complete # Set to negative to indicate out of time ; skip_reducing_duration ; not_out_of_time &1555 20 a9 17 JSR &17a9 ; play_sound_for_movement ; consider_ending_level &1558 a5 54 LDA &54 ; level_complete &155a f0 ca BEQ &1526 ; main_game_loop &155c 30 06 BMI &1564 ; kill_player &155e 20 a6 15 JSR &15a6 ; end_of_level_bonus &1561 4c a9 14 JMP &14a9 ; next_level ; kill_player &1564 c6 92 DEC &92 ; player_lives &1566 20 b2 12 JSR &12b2 ; initialise_player &1569 20 03 07 JSR &0703 ; plot_string &156c 40 05 0e ; at (&05, &0e) &156f 4f 68 20 64 65 61 72 20 2d 20 74 69 6d 65 20 69 ; "Oh dear - time is too short!!!" &157f 73 20 74 6f 6f 20 73 68 6f 72 74 21 21 21 &158d 00 ; end of string &158e a2 01 LDX #&01 &1590 a0 00 LDY #&00 &1592 84 55 STY &55 ; player_speed &1594 8a TXA ; 1 # Use channel 1 &1595 20 b1 05 JSR &05b1 ; play_sound # Play sound for running out of time ; v vd vc vs pd pc ps &1598 04 00 00 00 c2 01 01 c8 &15a0 20 81 19 JSR &1981 ; unbuffer_player &15a3 4c af 12 JMP &12af ; initialise_player_after_delay ; end_of_level_bonus ; decelerate_player_loop &15a6 a9 07 LDA #&07 &15a8 85 53 STA &53 ; player_speed_fraction ; decelerate_player_fraction_loop &15aa 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &15ad 20 81 19 JSR &1981 ; unbuffer_player &15b0 20 d9 16 JSR &16d9 ; update_bounce &15b3 20 72 18 JSR &1872 ; buffer_player &15b6 20 a9 17 JSR &17a9 ; play_sound_for_movement &15b9 c6 53 DEC &53 ; player_speed_fraction &15bb d0 ed BNE &15aa ; decelerate_player_fraction_loop &15bd a5 55 LDA &55 ; player_speed &15bf f0 04 BEQ &15c5 &15c1 c6 55 DEC &55 ; player_speed &15c3 10 e1 BPL &15a6 ; decelerate_player_loop &15c5 20 4f 12 JSR &124f ; initialise_sound_after_two_vyncs ; increase_score_for_remaining_duration_loop &15c8 a2 01 LDX #&01 # Score 10 for each remaining point of duration &15ca a0 00 LDY #&00 &15cc 20 94 17 JSR &1794 ; add_to_score &15cf 20 2a 14 JSR &142a ; update_duration &15d2 20 d3 11 JSR &11d3 ; play_duration_sound &15d5 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &15d8 c6 b3 DEC &b3 ; duration &15da 10 ec BPL &15c8 ; increase_score_for_remaining_duration_loop &15dc 20 81 19 JSR &1981 ; unbuffer_player &15df 20 4f 12 JSR &124f ; initialise_sound_after_two_vyncs &15e2 e6 93 INC &93 ; level &15e4 a5 93 LDA &93 ; level &15e6 29 3f AND #&3f &15e8 85 93 STA &93 ; level &15ea 08 PHP ; level overflow &15eb 29 01 AND #&01 &15ed d0 02 BNE &15f1 ; skip_extra_life &15ef e6 92 INC &92 ; player_lives # Gain extra life every two levels ; skip_extra_life &15f1 28 PLP ; level overflow &15f2 f0 01 BEQ &15f5 ; completion_screen # Completion screen after sixty-four levels &15f4 60 RTS ; completion_screen &15f5 20 0f 14 JSR &140f ; initialise_strip_colours &15f8 e6 e7 INC &e7 ; use_fixed_palette # Set to non-zero to use fixed palette &15fa a9 80 LDA #&80 ; &6980 = screen_memory + &140 * 14 &15fc 85 00 STA &00 ; screen_address_low &15fe a9 69 LDA #&69 &1600 85 01 STA &01 ; screen_address_high &1602 a9 af LDA #&af &1604 85 02 STA &02 ; packed_data_address_low &1606 a9 43 LDA #&43 ; &43af = completion_screen_data &1608 85 03 STA &03 ; packed_data_address_high &160a 20 f1 1a JSR &1af1 ; unpack_screen_data # Unpack completion screen (topless woman) &160d a2 24 LDX #&24 ; &1624 = completion_scrolltext &160f a0 16 LDY #&16 &1611 20 f2 0e JSR &0ef2 ; initialise_scrolltext ; completion_screen_loop &1614 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &1617 20 29 0f JSR &0f29 ; update_scrolltext # Returns carry set at end of scrolltext &161a 90 f8 BCC &1614 ; completion_screen_loop &161c a0 c8 LDY #&c8 &161e 20 c5 11 JSR &11c5 ; delay_for_Y &1621 4c 0f 14 JMP &140f ; initialise_strip_colours ; completion_scrolltext &1624 54 72 75 65 20 6c 6f 76 65 20 2d 20 42 72 75 63 ; "True love - Bruc" &1634 65 20 74 68 65 20 42 61 6c 6c 20 68 61 73 20 72 ; "e the Ball has r" &1644 65 61 63 68 65 64 20 68 69 73 20 6c 6f 76 65 64 ; "eached his loved" &1654 20 6f 6e 65 2e 2e 2e 20 20 20 54 68 69 73 20 77 ; " one... This w" &1664 61 73 20 74 68 65 20 61 69 6d 20 6f 66 20 74 68 ; "as the aim of th" &1674 65 20 67 61 6d 65 2c 20 6c 65 74 20 75 73 20 68 ; "e game, let us h" &1684 6f 70 65 20 74 68 61 74 20 74 68 65 79 20 6c 69 ; "ope that they li" &1694 76 65 20 68 61 70 70 69 6c 79 20 65 76 65 72 20 ; "ve happily ever " &16a4 61 66 74 65 72 21 21 21 20 20 20 20 20 20 20 20 ; "after!!! " &16b4 20 4e 6f 77 20 63 61 6e 20 79 6f 75 20 64 6f 20 ; " Now can you do " &16c4 69 74 20 61 6c 6c 20 61 67 61 69 6e 3f 3f 3f 20 ; "it all again??? " &16d4 20 20 20 20 00 ; " " ; update_bounce &16d9 a5 c1 LDA &c1 ; player_bounce_state &16db f0 07 BEQ &16e4 ; leave &16dd 18 CLC &16de 69 01 ADC #&01 &16e0 29 1f AND #&1f &16e2 85 c1 STA &c1 ; player_bounce_state ; leave &16e4 60 RTS ; check_tile &16e5 a5 b5 LDA &b5 ; tile_checked # Non-zero if tile already checked &16e7 d0 fb BNE &16e4 ; leave &16e9 e6 b5 INC &b5 ; tile_checked # Set to non-zero to indicate tile checked &16eb a2 00 LDX #&00 &16ed a5 c0 LDA &c0 ; player_x &16ef c9 1f CMP #&1f &16f1 b0 01 BCS &16f4 ; not_tile_five &16f3 e8 INX # X = 1 for tiles 2 and 4 of strip ; not_tile_five &16f4 c9 17 CMP #&17 &16f6 b0 01 BCS &16f9 ; not_tile_four &16f8 ca DEX # X = 0 for tiles 1, 3 and 5 of strip ; not_tile_four &16f9 c9 0f CMP #&0f &16fb b0 01 BCS &16fe ; not_tile_three &16fd e8 INX ; not_tile_three &16fe c9 07 CMP #&07 &1700 b0 01 BCS &1703 ; not_tile_two &1702 ca DEX ; not_tile_two &1703 ad 46 01 LDA &0146 ; strip_colours + 6 # Use the player's strip &1706 e0 00 CPX #&00 &1708 f0 03 BEQ &170d ; use_low_three_bits # Use low three bits for tiles 1, 3 and 5 &170a 4a LSR A # Use next three bits for tiles 2 and 4 &170b 4a LSR A &170c 4a LSR A ; use_low_three_bits &170d 29 07 AND #&07 &170f 0a ASL A &1710 aa TAX &1711 bd 1e 17 LDA &171e,X ; tile_handler_addresses &1714 85 00 STA &00 ; tile_handler_address_low &1716 bd 1f 17 LDA &171f,X ; tile_handler_addresses + 1 &1719 85 01 STA &01 ; tile_handler_address_high &171b 6c 00 00 JMP (&0000) ; tile_handler_address ; tile_handler_addresses &171e 2e 17 ; &172e = tile_0_handler # Black tile kills player &1720 93 17 ; &1793 = tile_1_handler # Yellow tile has no effect &1722 93 17 ; &1793 = tile_2_handler # Blue tile has no effect &1724 62 17 ; &1762 = tile_3_handler # White tile increases score &1726 69 17 ; &1769 = tile_4_handler # Magenta tile starts bounce &1728 7d 17 ; &177d = tile_5_handler # Red tile decreases speed &172a a2 17 ; &17a2 = tile_6_handler # Cyan tile inverts keys &172c 8b 17 ; &178b = tile_7_handler # Green tile increases speed ; tile_0_handler # Black tile kills player &172e a9 02 LDA #&02 # Use channel 2 &1730 a2 00 LDX #&00 &1732 a0 00 LDY #&00 &1734 20 b1 05 JSR &05b1 ; play_sound # Play sound for falling into hole ; v vd vc vs pd pc ps &1737 04 00 00 00 0a 00 01 0f &173f 20 2a 14 JSR &142a ; update_duration &1742 a2 08 LDX #&08 # Reduce duration by 8 for falling into hole &1744 86 b4 STX &b4 ; duration_cooldown ; reduce_duration_loop &1746 a5 b3 LDA &b3 ; duration &1748 f0 0f BEQ &1759 ; position_player_for_new_life &174a 8a TXA &174b 48 PHA ; count &174c c6 b3 DEC &b3 ; duration &174e 20 2a 14 JSR &142a ; update_duration &1751 20 8e 06 JSR &068e ; check_for_pause_and_wait_for_vsync &1754 68 PLA ; count &1755 aa TAX &1756 ca DEX &1757 10 ed BPL &1746 ; reduce_duration_loop ; position_player_for_new_life &1759 a9 01 LDA #&01 &175b 85 55 STA &55 ; player_speed &175d a9 10 LDA #&10 &175f 85 c1 STA &c1 ; player_bounce_state &1761 60 RTS ; tile_3_handler # White tile increases score &1762 a2 03 LDX #&03 # Score 30 for moving over white tile &1764 a0 00 LDY #&00 &1766 4c 94 17 JMP &1794 ; add_to_score ; start_bounce ; tile_4_handler # Magenta tile starts bounce &1769 e6 c1 INC &c1 ; player_bounce_state &176b a9 02 LDA #&02 # Use channel 2 &176d a2 ff LDX #&ff &176f a0 03 LDY #&03 &1771 20 b1 05 JSR &05b1 ; play_sound # Play sound for bouncing ; v vd vc vs pd pc ps &1774 04 00 00 00 f6 ff 01 14 &177c 60 RTS ; tile_5_handler # Red tile decreases speed &177d a5 55 LDA &55 ; player_speed &177f 38 SEC &1780 e9 03 SBC #&03 # Reduce speed by 3 &1782 f0 02 BEQ &1786 ; use_floor &1784 10 02 BPL &1788 ; skip_floor ; use_floor &1786 a9 01 LDA #&01 ; skip_floor &1788 85 55 STA &55 ; player_speed &178a 60 RTS ; tile_7_handler # Green tile increases speed &178b a5 55 LDA &55 ; player_speed &178d c9 1e CMP #&1e &178f f0 02 BEQ &1793 ; skip_increasing_speed &1791 e6 55 INC &55 ; player_speed # Increase speed by 1 ; skip_increasing_speed ; tile_1_handler # Yellow tile has no effect ; tile_2_handler # Blue tile has no effect &1793 60 RTS ; add_to_score # Called with XY = score to add &1794 8a TXA &1795 18 CLC &1796 65 90 ADC &90 ; score &1798 85 90 STA &90 ; score &179a 98 TYA &179b 65 91 ADC &91 ; score + 1 &179d 85 91 STA &91 ; score + 1 &179f 4c 8a 13 JMP &138a ; plot_score ; tile_6_handler # Cyan tile inverts keys &17a2 a5 b6 LDA &b6 ; player_keys_inverted &17a4 49 01 EOR #&01 &17a6 85 b6 STA &b6 ; player_keys_inverted &17a8 60 RTS ; play_sound_for_movement &17a9 a9 0e LDA #&0e &17ab 85 14 STA &14 ; channels_volume_cooldown &17ad a5 55 LDA &55 ; player_speed &17af 0a ASL A &17b0 0a ASL A &17b1 0a ASL A &17b2 08 PHP ; processor status # Set carry if player_speed >= 32 (never occurs) &17b3 05 53 ORA &53 ; player_speed_fraction &17b5 49 ff EOR #&ff &17b7 aa TAX # Use player_speed to set frequency_low &17b8 68 PLA ; processor status # &01 set if carry was set &17b9 29 01 AND #&01 &17bb 49 01 EOR #&01 &17bd 38 SEC &17be e9 01 SBC #&01 &17c0 a8 TAY # frequency_high is always zero &17c1 a9 01 LDA #&01 # Use channel 1 &17c3 20 b1 05 JSR &05b1 ; play_sound # Play silence on channel 1, and so update channel 0 ; v vd vc vs pd pc ps &17c6 0f 00 00 00 00 00 01 64 &17ce 60 RTS ; play_sound_for_start_of_level &17cf a2 07 LDX #&07 &17d1 a0 00 LDY #&00 &17d3 98 TYA ; 0 # Use channel 0 &17d4 20 b1 05 JSR &05b1 ; play_sound ; v vd vc vs pd pc ps &17d7 07 01 01 0f 00 00 00 00 ; wait_for_sound &17df a5 15 LDA &15 ; channels_volume_steps_remaining &17e1 c9 0e CMP #&0e &17e3 d0 fa BNE &17df ; wait_for_sound &17e5 a9 ff LDA #&ff &17e7 85 14 STA &14 ; channels_volume_cooldown &17e9 60 RTS ; acceleration_keys &17ea 48 ; ' &17eb 68 ; / ; deceleration_keys &17ec 68 ; / &17ed 48 ; ' ; left_keys &17ee 61 ; Z &17ef 42 ; X ; right_keys &17f0 42 ; X &17f1 61 ; Z ; update_player &17f2 20 81 19 JSR &1981 ; unbuffer_player &17f5 a6 b6 LDX &b6 ; player_keys_inverted &17f7 bd ea 17 LDA &17ea,X ; acceleration_keys &17fa 20 cc 11 JSR &11cc ; check_for_keypress &17fd 10 14 BPL &1813 ; not_accelerating &17ff e6 53 INC &53 ; player_speed_fraction &1801 a5 53 LDA &53 ; player_speed_fraction &1803 c9 08 CMP #&08 &1805 d0 0c BNE &1813 ; not_accelerating &1807 a9 00 LDA #&00 &1809 85 53 STA &53 ; player_speed_fraction &180b a5 55 LDA &55 ; player_speed &180d c9 1e CMP #&1e &180f f0 02 BEQ &1813 ; not_accelerating &1811 e6 55 INC &55 ; player_speed ; not_accelerating &1813 a6 b6 LDX &b6 ; player_keys_inverted &1815 bd ec 17 LDA &17ec,X ; deceleration_keys &1818 20 cc 11 JSR &11cc ; check_for_keypress &181b 10 10 BPL &182d ; not_decelerating &181d c6 53 DEC &53 ; player_speed_fraction &181f 10 0c BPL &182d ; not_decelerating &1821 a9 07 LDA #&07 &1823 85 53 STA &53 ; player_speed_fraction &1825 a5 55 LDA &55 ; player_speed &1827 c9 01 CMP #&01 &1829 f0 02 BEQ &182d ; not_decelerating &182b c6 55 DEC &55 ; player_speed ; not_decelerating &182d a6 b6 LDX &b6 ; player_keys_inverted &182f bd ee 17 LDA &17ee,X ; left_keys &1832 20 cc 11 JSR &11cc ; check_for_keypress &1835 10 06 BPL &183d ; not_moving_left &1837 a5 c0 LDA &c0 ; player_x &1839 f0 02 BEQ &183d ; not_moving_left &183b c6 c0 DEC &c0 ; player_x ; not_moving_left &183d a6 b6 LDX &b6 ; player_keys_inverted &183f bd f0 17 LDA &17f0,X ; right_keys &1842 20 cc 11 JSR &11cc ; check_for_keypress &1845 10 08 BPL &184f ; not_moving_right &1847 a5 c0 LDA &c0 ; player_x &1849 c9 24 CMP #&24 &184b f0 02 BEQ &184f ; not_moving_right &184d e6 c0 INC &c0 ; player_x ; not_moving_right &184f a5 c1 LDA &c1 ; player_bounce_state &1851 d0 1c BNE &186f ; skip_checking_tile &1853 a9 49 LDA #&49 ; RETURN &1855 20 cc 11 JSR &11cc ; check_for_keypress &1858 10 12 BPL &186c ; not_starting_bounce &185a a5 b4 LDA &b4 ; duration_cooldown &185c c9 0a CMP #&0a &185e 90 0c BCC &186c ; not_starting_bounce &1860 a5 b7 LDA &b7 ; duration_maximum_cooldown &1862 38 SEC &1863 e9 14 SBC #&14 # Each voluntary bounce makes duration reduce quicker &1865 85 b7 STA &b7 ; duration_maximum_cooldown &1867 85 b4 STA &b4 ; duration_cooldown &1869 20 69 17 JSR &1769 ; start_bounce ; not_starting_bounce &186c 20 e5 16 JSR &16e5 ; check_tile ; skip_checking_tile &186f 20 d9 16 JSR &16d9 ; update_bounce ; buffer_player &1872 20 c9 19 JSR &19c9 ; calculate_player_screen_address &1875 a5 00 LDA &00 ; screen_address_low &1877 85 03 STA &03 ; player_screen_address_low &1879 a5 01 LDA &01 ; screen_address_high &187b 85 04 STA &04 ; player_screen_address_high &187d a9 03 LDA #&03 &187f 85 02 STA &02 ; groups &1881 a2 00 LDX #&00 ; buffer_player_group_loop &1883 a0 1f LDY #&1f ; buffer_player_byte_loop &1885 b1 03 LDA (&03),Y ; player_screen_address &1887 9d 4c 01 STA &014c,X ; player_buffer # Copy screen beneath player to buffer &188a e8 INX &188b 88 DEY &188c 10 f7 BPL &1885 ; buffer_player_byte_loop &188e a5 03 LDA &03 ; player_screen_address_low &1890 18 CLC &1891 69 40 ADC #&40 # Move down a group &1893 85 03 STA &03 ; player_screen_address_low &1895 a5 04 LDA &04 ; player_screen_address_high &1897 69 01 ADC #&01 &1899 85 04 STA &04 ; player_screen_address_high &189b c6 02 DEC &02 ; groups &189d 10 e4 BPL &1883 ; buffer_player_group_loop &189f a5 57 LDA &57 ; strip_fraction &18a1 4a LSR A &18a2 4a LSR A &18a3 4a LSR A &18a4 29 03 AND #&03 &18a6 85 02 STA &02 ; sprite_address_low # (fraction / 8) & 3 &18a8 a5 c0 LDA &c0 ; player_x &18aa 4a LSR A &18ab 29 03 AND #&03 # ((x / 2) & 3) * 4 &18ad 0a ASL A &18ae 0a ASL A &18af 05 02 ORA &02 ; sprite_address_low &18b1 49 0f EOR #&0f &18b3 85 02 STA &02 ; sprite_address_low # Use sprite ((fraction / 8) & 3) + ((x / 2) & 3) * 4) &18b5 a9 00 LDA #&00 &18b7 85 03 STA &03 ; sprite_address_high &18b9 85 c2 STA &c2 ; player_is_plotted # Set to zero to indicate player is plotted &18bb 06 02 ASL &02 ; sprite_address_low &18bd 26 03 ROL &03 ; sprite_address_high &18bf 06 02 ASL &02 ; sprite_address_low &18c1 26 03 ROL &03 ; sprite_address_high &18c3 06 02 ASL &02 ; sprite_address_low &18c5 26 03 ROL &03 ; sprite_address_high &18c7 06 02 ASL &02 ; sprite_address_low &18c9 26 03 ROL &03 ; sprite_address_high &18cb 06 02 ASL &02 ; sprite_address_low &18cd 26 03 ROL &03 ; sprite_address_high &18cf a5 02 LDA &02 ; sprite_address_low &18d1 85 04 STA &04 ; sprite_offset_low &18d3 a5 03 LDA &03 ; sprite_address_high &18d5 85 05 STA &05 ; sprite_offset_high &18d7 06 02 ASL &02 ; sprite_address_low &18d9 26 03 ROL &03 ; sprite_address_high # 96 bytes per sprite &18db a5 02 LDA &02 ; sprite_address_low &18dd 18 CLC &18de 65 04 ADC &04 ; sprite_offset_low &18e0 85 02 STA &02 ; sprite_address_low &18e2 a5 03 LDA &03 ; sprite_address_high &18e4 65 05 ADC &05 ; sprite_offset_high &18e6 85 03 STA &03 ; sprite_address_high &18e8 a5 02 LDA &02 ; sprite_address_low &18ea 18 CLC &18eb 69 50 ADC #&50 ; &3050 = player_sprites &18ed 85 02 STA &02 ; sprite_address_low &18ef a5 03 LDA &03 ; sprite_address_high &18f1 69 30 ADC #&30 &18f3 85 03 STA &03 ; sprite_address_high &18f5 a9 50 LDA #&50 ; &3650 = player_mask # Use single mask &18f7 85 04 STA &04 ; mask_address_low &18f9 a9 36 LDA #&36 &18fb 85 05 STA &05 ; mask_address_high &18fd a9 02 LDA #&02 &18ff 85 0f STA &0f ; groups ; plot_player_group_loop &1901 a9 03 LDA #&03 &1903 85 0e STA &0e ; columns ; plot_player_column_loop &1905 a5 00 LDA &00 ; screen_address_low &1907 8d 1a 19 STA &191a ; source_address_low &190a 8d 21 19 STA &1921 ; target_address_low &190d a5 01 LDA &01 ; screen_address_high &190f 8d 1b 19 STA &191b ; source_address_high &1912 8d 22 19 STA &1922 ; target_address_high &1915 a6 0d LDX &0d ; player_row_in_group &1917 a0 00 LDY #&00 ; plot_player_row_loop &1919 bd ff 0f LDA &0fff,X # Read screen memory # actually LDA source_address,X &191c 31 04 AND (&04),Y ; mask_address # Apply mask &191e 11 02 ORA (&02),Y ; sprite_address # Add sprite &1920 9d ff 0f STA &0fff,X # Write screen memory # actually STA target_address,X &1923 e8 INX &1924 e0 08 CPX #&08 &1926 d0 17 BNE &193f ; not_group &1928 a5 00 LDA &00 ; screen_address_low &192a 18 CLC &192b 69 40 ADC #&40 # Move down a group &192d 8d 1a 19 STA &191a ; source_address_low &1930 8d 21 19 STA &1921 ; target_address_low &1933 a5 01 LDA &01 ; screen_address_high &1935 69 01 ADC #&01 &1937 8d 1b 19 STA &191b ; source_address_high &193a 8d 22 19 STA &1922 ; target_address_high &193d a2 00 LDX #&00 ; not_group &193f c8 INY &1940 c0 08 CPY #&08 &1942 d0 d5 BNE &1919 ; plot_player_row_loop &1944 a5 02 LDA &02 ; sprite_address_low &1946 18 CLC &1947 69 08 ADC #&08 &1949 85 02 STA &02 ; sprite_address_low &194b a5 03 LDA &03 ; sprite_address_high &194d 69 00 ADC #&00 &194f 85 03 STA &03 ; sprite_address_high &1951 a5 04 LDA &04 ; mask_address_low &1953 18 CLC &1954 69 08 ADC #&08 &1956 85 04 STA &04 ; mask_address_low &1958 a5 05 LDA &05 ; mask_address_high &195a 69 00 ADC #&00 &195c 85 05 STA &05 ; mask_address_high &195e a5 00 LDA &00 ; screen_address_low &1960 18 CLC &1961 69 08 ADC #&08 # Move right four pixels &1963 85 00 STA &00 ; screen_address_low &1965 a5 01 LDA &01 ; screen_address_high &1967 69 00 ADC #&00 &1969 85 01 STA &01 ; screen_address_high &196b c6 0e DEC &0e ; columns &196d 10 96 BPL &1905 ; plot_player_column_loop &196f a5 00 LDA &00 ; screen_address_low &1971 18 CLC &1972 69 20 ADC #&20 # Move down a group &1974 85 00 STA &00 ; screen_address_low &1976 a5 01 LDA &01 ; screen_address_high &1978 69 01 ADC #&01 &197a 85 01 STA &01 ; screen_address_high &197c c6 0f DEC &0f ; groups &197e 10 81 BPL &1901 ; plot_player_group_loop &1980 60 RTS ; unplot_player &1981 20 c9 19 JSR &19c9 ; calculate_player_screen_address &1984 a9 03 LDA #&03 &1986 85 02 STA &02 ; groups &1988 a2 00 LDX #&00 ; unplot_player_group_loop &198a a0 1f LDY #&1f ; unplot_player_byte_loop &198c bd 4c 01 LDA &014c,X ; player_buffer &198f 91 00 STA (&00),Y ; screen_address # Unplot player from buffer &1991 e8 INX &1992 88 DEY &1993 10 f7 BPL &198c ; unplot_player_byte_loop &1995 a5 00 LDA &00 ; screen_address_low &1997 18 CLC &1998 69 40 ADC #&40 # Move down a group &199a 85 00 STA &00 ; screen_address_low &199c a5 01 LDA &01 ; screen_address_high &199e 69 01 ADC #&01 &19a0 85 01 STA &01 ; screen_address_high &19a2 c6 02 DEC &02 ; groups &19a4 10 e4 BPL &198a ; unplot_player_group_loop &19a6 85 c2 STA &c2 ; player_is_plotted # Set to non-zero to indicate player is not plotted &19a8 60 RTS ; bounce_state_to_y_table ; 0 1 2 3 4 5 6 7 8 9 a b c d e f &19a9 32 2d 28 23 1e 1a 16 12 0e 0b 08 05 03 02 00 00 ; &00 &19b9 00 00 00 02 03 05 08 0b 0e 12 16 1a 1e 23 28 2d ; &10 ; calculate_player_screen_address &19c9 a6 c1 LDX &c1 ; player_bounce_state &19cb bd a9 19 LDA &19a9,X ; bounce_state_to_y_table &19ce 48 PHA ; player_y &19cf 4a LSR A &19d0 4a LSR A &19d1 4a LSR A &19d2 aa TAX # X = group &19d3 68 PLA ; player_y &19d4 29 07 AND #&07 &19d6 85 0d STA &0d ; player_row_in_group &19d8 bd ac 03 LDA &03ac,X ; group_addresses_low &19db 85 00 STA &00 ; screen_address_low &19dd bd b7 03 LDA &03b7,X ; group_addresses_high &19e0 85 01 STA &01 ; screen_address_high &19e2 a6 c0 LDX &c0 ; player_x &19e4 18 CLC &19e5 a5 00 LDA &00 ; screen_address_low &19e7 7d c2 03 ADC &03c2,X ; column_offsets_low &19ea 85 00 STA &00 ; screen_address_low &19ec a5 01 LDA &01 ; screen_address_high &19ee 7d ea 03 ADC &03ea,X ; column_offsets_high &19f1 85 01 STA &01 ; screen_address_high &19f3 60 RTS ; consider_applying_cheat_to_strip &19f4 85 e9 STA &e9 ; strip_type &19f6 a4 e8 LDY &e8 ; cheat_enabled # Zero if cheat enabled &19f8 d0 15 BNE &1a0f ; leave # If the cheat is enabled, &19fa a2 00 LDX #&00 ; TILE_BLACK &19fc 29 07 AND #&07 &19fe d0 02 BNE &1a02 ; skip_fixing_odd_tiles # Are the odd tiles black? &1a00 a2 03 LDX #&03 ; TILE_WHITE # If so, make them white ; skip_fixing_odd_tiles &1a02 a5 e9 LDA &e9 ; strip_type &1a04 29 38 AND #&38 ; 8 * 7 &1a06 d0 04 BNE &1a0c ; skip_fixing_even_tiles # Are the even tiles black? &1a08 8a TXA &1a09 09 18 ORA #&18 ; TILE_WHITE * 8 # If so, make them white &1a0b aa TAX ; skip_fixing_even_tiles &1a0c 8a TXA &1a0d 05 e9 ORA &e9 ; strip_type ; leave &1a0f 60 RTS ; generate_level &1a10 a2 1f LDX #&1f # Start of level is 32 strips of blue/yellow checkerboard &1a12 a9 11 LDA #&11 ; TILE_YELLOW | TILE_BLUE * 8 ; generate_start_of_level_loop &1a14 9d e0 55 STA &55e0,X ; strip_data &1a17 49 1b EOR #&1b ; (TILE_YELLOW | TILE_BLUE * 8) ^ (TILE_BLUE | TILE_YELLOW * 8) &1a19 48 PHA ; strip_type &1a1a a9 00 LDA #&00 # Default to blue/yellow checkerboard for level one &1a1c 9d 8f 1a STA &1a8f,X ; section_types &1a1f 68 PLA ; strip_type &1a20 ca DEX &1a21 10 f1 BPL &1a14 ; generate_start_of_level_loop &1a23 a5 93 LDA &93 ; level &1a25 f0 13 BEQ &1a3a ; is_level_one &1a27 a2 0a LDX #&0a &1a29 38 SEC ; generate_section_types_loop &1a2a 2a ROL A &1a2b 2a ROL A &1a2c 69 7b ADC #&7b &1a2e 45 93 EOR &93 ; level # Use level number &1a30 48 PHA ; prnd &1a31 29 3f AND #&3f # to choose one of 64 patterns for each of 11 sections &1a33 9d 8f 1a STA &1a8f,X ; section_types &1a36 68 PLA ; prnd &1a37 ca DEX &1a38 10 f0 BPL &1a2a ; generate_section_types_loop ; is_level_one &1a3a a9 56 LDA #&56 ; &5600 = strip_data + &20 &1a3c 85 05 STA &05 ; strip_data_address_high &1a3e a0 00 LDY #&00 &1a40 84 04 STY &04 ; strip_data_address_low ; generation_level_section_loop &1a42 98 TYA &1a43 48 PHA ; section &1a44 b9 8f 1a LDA &1a8f,Y ; section_types &1a47 85 02 STA &02 ; pattern_address_low &1a49 a9 00 LDA #&00 &1a4b 85 03 STA &03 ; pattern_address_high &1a4d 06 02 ASL &02 ; pattern_address_low &1a4f 26 03 ROL &03 ; pattern_address_high &1a51 06 02 ASL &02 ; pattern_address_low &1a53 26 03 ROL &03 ; pattern_address_high &1a55 06 02 ASL &02 ; pattern_address_low &1a57 26 03 ROL &03 ; pattern_address_high &1a59 06 02 ASL &02 ; pattern_address_low &1a5b 26 03 ROL &03 ; pattern_address_high &1a5d 06 02 ASL &02 ; pattern_address_low &1a5f 26 03 ROL &03 ; pattern_address_high &1a61 a5 02 LDA &02 ; pattern_address_low &1a63 69 b0 ADC #&b0 ; &36b0 = pattern_data &1a65 85 02 STA &02 ; pattern_address_low &1a67 a5 03 LDA &03 ; pattern_address_high &1a69 69 36 ADC #&36 &1a6b 85 03 STA &03 ; pattern_address_high &1a6d a0 00 LDY #&00 ; generation_level_strip_loop &1a6f 84 0f STY &0f ; strip_in_section &1a71 b1 02 LDA (&02),Y ; pattern_address &1a73 20 f4 19 JSR &19f4 ; consider_applying_cheat_to_strip # Change black tiles to white tiles if cheat enabled &1a76 a0 00 LDY #&00 &1a78 91 04 STA (&04),Y ; strip_data_address &1a7a e6 04 INC &04 ; strip_data_address_low &1a7c d0 02 BNE &1a80 ; skip_page &1a7e e6 05 INC &05 ; strip_data_address_high ; skip_page &1a80 a4 0f LDY &0f ; strip_in_section &1a82 c8 INY &1a83 c0 20 CPY #&20 # Patterns are 32 strips long &1a85 d0 e8 BNE &1a6f ; generation_level_strip_loop &1a87 68 PLA ; section &1a88 a8 TAY &1a89 c8 INY &1a8a c0 10 CPY #&10 # Level has 16 sections; last 5 are blue/yellow checkerboard &1a8c d0 b4 BNE &1a42 ; generation_level_section_loop &1a8e 60 RTS ; section_types &1a8f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # Values are overwritten &1a9f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; get_next_byte_of_packed_data &1aaf b1 02 LDA (&02),Y ; packed_data_address &1ab1 48 PHA ; byte &1ab2 e6 02 INC &02 ; packed_data_address_low &1ab4 d0 02 BNE &1ab8 ; skip_page &1ab6 e6 03 INC &03 ; packed_data_address_high ; skip_page &1ab8 68 PLA ; byte &1ab9 60 RTS ; write_byte_of_screen_data &1aba 91 00 STA (&00),Y ; screen_address &1abc e6 00 INC &00 ; screen_address_low &1abe d0 02 BNE &1ac2 ; skip_page &1ac0 e6 01 INC &01 ; screen_address_high ; skip_page &1ac2 24 01 BIT &01 ; screen_address_high &1ac4 30 10 BMI &1ad6 ; leave_with_zero # Negative at end of screen memory &1ac6 a5 04 LDA &04 ; run_length_low &1ac8 38 SEC &1ac9 e9 01 SBC #&01 &1acb 85 04 STA &04 ; run_length_low &1acd a5 05 LDA &05 ; run_length_high &1acf e9 00 SBC #&00 &1ad1 85 05 STA &05 ; run_length_high &1ad3 05 04 ORA &04 ; run_length_low # Leave with zero at end of run, non-zero otherwise &1ad5 60 RTS ; leave_with_zero &1ad6 a9 00 LDA #&00 # Leave with zero to indicate end of run &1ad8 60 RTS ; write_run_of_identical_bytes &1ad9 20 af 1a JSR &1aaf ; get_next_byte_of_packed_data &1adc 85 06 STA &06 ; value ; write_run_of_identical_bytes_loop &1ade a5 06 LDA &06 ; value &1ae0 20 ba 1a JSR &1aba ; write_byte_of_screen_data # Returns zero at end of run or screen &1ae3 d0 f9 BNE &1ade ; write_run_of_identical_bytes_loop &1ae5 f0 1e BEQ &1b05 ; consider_next_run # Always branches ; write_run_of_different_bytes &1ae7 20 af 1a JSR &1aaf ; get_next_byte_of_packed_data &1aea 20 ba 1a JSR &1aba ; write_byte_of_screen_data # Returns zero at end of run or screen &1aed d0 f8 BNE &1ae7 ; write_run_of_different_bytes &1aef f0 14 BEQ &1b05 ; consider_next_run # Always branches ; unpack_screen_data &1af1 a0 00 LDY #&00 ; unpack_screen_data_loop &1af3 20 af 1a JSR &1aaf ; get_next_byte_of_packed_data # Get two bytes of packed data for length of run &1af6 85 04 STA &04 ; run_length_low &1af8 20 af 1a JSR &1aaf ; get_next_byte_of_packed_data &1afb 48 PHA ; run type &1afc 29 7f AND #&7f # Lowest fifteen bits of two bytes set length of run &1afe 85 05 STA &05 ; run_length_high &1b00 68 PLA ; run type &1b01 30 d6 BMI &1ad9 ; write_run_of_identical_bytes # Top bit of second byte sets type of run &1b03 10 e2 BPL &1ae7 ; write_run_of_different_bytes ; consider_next_run &1b05 a5 01 LDA &01 ; screen_address_high &1b07 10 ea BPL &1af3 ; unpack_screen_data_loop # Negative at end of screen memory &1b09 20 03 07 JSR &0703 ; plot_string &1b0c 23 03 ; use colour 3 &1b0e 40 00 1f ; at (&00, &1f) &1b11 58 49 4c 54 44 4e ; "XILTDN" &1b17 00 ; end of string &1b18 60 RTS ; high_scores &1b19 47 61 72 79 20 44 61 20 47 72 61 74 65 21 21 21 ; "Gary Da Grate!!!" &1b29 67 5e ; 24167(0) &1b2b 41 20 66 65 6d 61 6c 65 3f 20 20 20 20 20 20 20 ; "A female? " &1b3b bc 02 ; 700(0) &1b3d 44 61 78 20 56 6f 6e 20 44 72 61 63 20 20 20 20 ; "Dax Von Drac " &1b4d 58 02 ; 600(0) &1b4f 54 68 75 6e 64 65 72 20 50 65 74 65 72 20 20 20 ; "Thunder Peter " &1b5f f4 01 ; 500(0) &1b61 55 6c 74 72 61 76 6f 78 20 4f 6b 61 79 21 21 21 ; "Ultravox Okay!!!" &1b71 90 01 ; 400(0) &1b73 4c 69 74 74 6c 65 20 4c 65 61 6e 6e 65 20 20 20 ; "Little Leanne " &1b83 2c 01 ; 300(0) &1b85 53 68 6f 74 6f 6b 61 6e 20 4b 61 72 61 74 65 20 ; "Shotokan Karate " &1b95 c8 00 ; 200(0) &1b97 41 75 64 69 6f 67 65 6e 69 63 20 20 20 20 20 20 ; "Audiogenic " &1ba7 64 00 ; 100(0) ; rank_suffixes &1ba9 73 74 ; "st" &1bab 6e 64 ; "nd" &1bad 72 64 ; "rd" &1baf 74 68 ; "th" ; plot_high_scores &1bb1 20 b2 12 JSR &12b2 ; initialise_player &1bb4 20 03 07 JSR &0703 ; plot_string &1bb7 23 03 ; use colour 3 &1bb9 40 07 12 ; at (&07, &12) &1bbc 54 6f 64 61 79 27 73 20 53 70 68 65 72 69 63 61 ; "Today's Spherical Experts!" &1bcc 6c 20 45 78 70 65 72 74 73 21 &1bd6 40 0a 1d ; at (&0a, &1d) &1bd9 50 72 65 73 73 20 31 20 74 6f 20 34 20 74 6f 20 ; "Press 1 to 4 to play!" &1be9 70 6c 61 79 21 &1bee 00 ; end of string &1bef a2 07 LDX #&07 ; plot_high_scores_loop &1bf1 8a TXA &1bf2 85 0a STA &0a ; rank &1bf4 18 CLC &1bf5 69 14 ADC #&14 &1bf7 a8 TAY &1bf8 a2 04 LDX #&04 # TAB(&04, &14 + rank) &1bfa 20 4d 07 JSR &074d ; calculate_text_screen_address_from_X_and_Y &1bfd a5 0a LDA &0a ; rank &1bff 18 CLC &1c00 69 31 ADC #&31 ; "1" &1c02 20 00 03 JSR &0300 ; plot_character # Plot rank &1c05 a5 0a LDA &0a ; rank &1c07 c9 04 CMP #&04 &1c09 90 02 BCC &1c0d ; skip_ceiling &1c0b a9 03 LDA #&03 ; skip_ceiling &1c0d 0a ASL A &1c0e aa TAX &1c0f bd a9 1b LDA &1ba9,X ; rank_suffixes &1c12 20 00 03 JSR &0300 ; plot_character # Plot rank suffix &1c15 bd aa 1b LDA &1baa,X ; rank_suffixes + 1 &1c18 20 00 03 JSR &0300 ; plot_character &1c1b 20 5a 1c JSR &1c5a ; plot_dash # Plot " - " &1c1e a5 0a LDA &0a ; rank &1c20 0a ASL A &1c21 85 00 STA &00 ; tmp &1c23 0a ASL A &1c24 0a ASL A &1c25 0a ASL A &1c26 65 00 ADC &00 ; tmp &1c28 85 0b STA &0b ; offset &1c2a a8 TAY &1c2b a2 00 LDX #&00 ; plot_name_loop &1c2d b9 19 1b LDA &1b19,Y ; high_scores &1c30 20 00 03 JSR &0300 ; plot_character # Plot name &1c33 c8 INY &1c34 e8 INX &1c35 e0 10 CPX #&10 &1c37 d0 f4 BNE &1c2d ; plot_name_loop &1c39 20 5a 1c JSR &1c5a ; plot_dash # Plot " - " &1c3c a9 30 LDA #&30 ; "0" &1c3e 20 00 03 JSR &0300 ; plot_character # Plot leading zero &1c41 a6 0b LDX &0b ; offset &1c43 bc 2a 1b LDY &1b2a,X ; high_scores + 17 &1c46 bd 29 1b LDA &1b29,X ; high_scores + 16 &1c49 aa TAX &1c4a a9 04 LDA #&04 &1c4c 20 b6 07 JSR &07b6 ; plot_number # Plot score &1c4f a9 30 LDA #&30 ; "0" &1c51 20 00 03 JSR &0300 ; plot_character # Plot trailing zero &1c54 a6 0a LDX &0a ; rank &1c56 ca DEX &1c57 10 98 BPL &1bf1 ; plot_high_scores_loop &1c59 60 RTS ; plot_dash &1c5a 20 03 07 JSR &0703 ; plot_string &1c5d 20 2d 20 ; " - " &1c60 00 ; end of string &1c61 60 RTS ; plot_strips_and_player &1c62 20 0f 14 JSR &140f ; initialise_strip_colours &1c65 20 b2 12 JSR &12b2 ; initialise_player &1c68 a9 03 LDA #&03 &1c6a 85 fd STA &fd ; text_colour &1c6c 60 RTS ; animate_leds_and_motor &1c6d a5 ff LDA &ff ; frame_counter &1c6f 4a LSR A &1c70 4a LSR A &1c71 4a LSR A &1c72 a9 00 LDA #&00 &1c74 6a ROR A # Alternate every eight frames &1c75 4c d3 06 JMP &06d3 ; set_leds_and_motor_state ; get_string &1c78 20 03 07 JSR &0703 ; plot_string &1c7b 40 0c 1b ; at (&0c, &1b) &1c7e 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ; "________________" &1c8e 40 0c 1a ; at (&0c, &1a) &1c91 00 ; end of string &1c92 a9 1b LDA #&1b ; RETURN &1c94 85 e5 STA &e5 ; previous_key &1c96 a2 00 LDX #&00 ; wait_for_keypress &1c98 86 e6 STX &e6 ; string_offset &1c9a 20 6d 1c JSR &1c6d ; animate_leds_and_motor &1c9d 20 0e 1d JSR &1d0e ; check_for_high_score_keys # Returns A = key offset, or &ff if no key pressed &1ca0 c5 e5 CMP &e5 ; previous_key &1ca2 f0 f4 BEQ &1c98 ; wait_for_keypress # Suppress auto-repeat &1ca4 85 e5 STA &e5 ; previous_key &1ca6 c9 1a CMP #&1a ; DELETE &1ca8 f0 18 BEQ &1cc2 ; delete_pressed &1caa c9 1b CMP #&1b ; RETURN &1cac f0 30 BEQ &1cde ; return_pressed &1cae c9 ff CMP #&ff &1cb0 f0 e6 BEQ &1c98 ; wait_for_keypress &1cb2 e0 10 CPX #&10 &1cb4 f0 e2 BEQ &1c98 ; wait_for_keypress # Don't add character if string is at maximum length &1cb6 18 CLC &1cb7 69 41 ADC #&41 ; "A" &1cb9 20 00 03 JSR &0300 ; plot_character &1cbc 9d ee 02 STA &02ee,X ; input_buffer &1cbf e8 INX &1cc0 d0 d6 BNE &1c98 ; wait_for_keypress # Always branches ; delete_pressed &1cc2 e0 00 CPX #&00 &1cc4 f0 d2 BEQ &1c98 ; wait_for_keypress # Don't delete if string is empty &1cc6 c6 e0 DEC &e0 ; text_x &1cc8 20 51 07 JSR &0751 ; calculate_text_screen_address &1ccb a0 07 LDY #&07 &1ccd a9 00 LDA #&00 ; wipe_character_loop &1ccf 91 da STA (&da),Y ; text_screen_address &1cd1 88 DEY &1cd2 10 fb BPL &1ccf ; wipe_character_loop &1cd4 a6 e6 LDX &e6 ; string_offset &1cd6 ca DEX &1cd7 a9 20 LDA #&20 ; " " &1cd9 9d ee 02 STA &02ee,X ; input_buffer &1cdc d0 ba BNE &1c98 ; wait_for_keypress # Always branches ; return_pressed &1cde a9 00 LDA #&00 &1ce0 20 d3 06 JSR &06d3 ; set_leds_and_motor_state # Disable LEDs and motor &1ce3 e0 00 CPX #&00 &1ce5 f0 0b BEQ &1cf2 ; use_xiltdn_woz_ere &1ce7 a9 20 LDA #&20 ; " " ; pad_input_buffer_loop &1ce9 9d ee 02 STA &02ee,X ; input_buffer &1cec e8 INX &1ced e0 11 CPX #&11 &1cef d0 f8 BNE &1ce9 ; pad_input_buffer_loop &1cf1 60 RTS ; use_xiltdn_woz_ere &1cf2 a2 0f LDX #&0f ; use_xiltdn_woz_ere_loop &1cf4 bd fe 1c LDA &1cfe,X ; xiltdn_woz_ere_string &1cf7 9d ee 02 STA &02ee,X ; input_buffer &1cfa ca DEX &1cfb 10 f7 BPL &1cf4 ; use_xiltdn_woz_ere_loop &1cfd 60 RTS ; xiltdn_woz_ere_string &1cfe 58 49 4c 54 44 4e 20 77 6f 7a 20 27 65 72 65 21 ; "XILTDN woz 'ere!" ; check_for_high_score_keys &1d0e a0 1b LDY #&1b ; RETURN ; check_for_high_score_keys_loop &1d10 b9 1d 1d LDA &1d1d,Y ; high_score_key_codes &1d13 20 cc 11 JSR &11cc ; check_for_keypress &1d16 30 03 BMI &1d1b ; leave_with_Y &1d18 88 DEY &1d19 10 f5 BPL &1d10 ; check_for_high_score_keys_loop ; leave_with_Y &1d1b 98 TYA &1d1c 60 RTS # Leave with A = key offset, or &ff if no key pressed ; high_score_key_codes &1d1d 41 ; &00 : A &1d1e 64 ; &01 : B &1d1f 52 ; &02 : C &1d20 32 ; &03 : D &1d21 22 ; &04 : E &1d22 43 ; &05 : F &1d23 53 ; &06 : G &1d24 54 ; &07 : H &1d25 25 ; &08 : I &1d26 45 ; &09 : J &1d27 46 ; &0a : K &1d28 56 ; &0b : L &1d29 65 ; &0c : M &1d2a 55 ; &0d : N &1d2b 36 ; &0e : O &1d2c 37 ; &0f : P &1d2d 10 ; &10 : Q &1d2e 33 ; &11 : R &1d2f 51 ; &12 : S &1d30 23 ; &13 : T &1d31 35 ; &14 : U &1d32 63 ; &15 : V &1d33 21 ; &16 : W &1d34 42 ; &17 : X &1d35 44 ; &18 : Y &1d36 61 ; &19 : Z &1d37 59 ; &1a : DELETE &1d38 49 ; &1b : RETURN ; check_for_high_score &1d39 38 SEC &1d3a a5 90 LDA &90 ; score &1d3c ed a7 1b SBC &1ba7 ; high_scores + 7 * 18 + 16 &1d3f a5 91 LDA &91 ; score + 1 &1d41 ed a8 1b SBC &1ba8 ; high_scores + 7 * 18 + 17 &1d44 b0 01 BCS &1d47 ; new_high_score # Is the score greater than the lowest high score? &1d46 60 RTS ; new_high_score &1d47 20 62 1c JSR &1c62 ; plot_strips_and_player &1d4a 20 03 07 JSR &0703 ; plot_string &1d4d 40 02 11 ; at (&02, &11) &1d50 46 61 6e 74 61 73 74 69 63 ; "Fantastic" &1d59 00 ; end of string &1d5a 20 3b 12 JSR &123b ; plot_player_and_number &1d5d 20 03 07 JSR &0703 ; plot_string &1d60 20 2d 20 79 6f 75 20 68 61 76 65 20 61 20 73 63 ; " - you have a score" &1d70 6f 72 65 &1d73 40 05 13 ; at (&05, &13) &1d76 77 6f 72 74 68 79 20 6f 66 20 69 6e 63 6c 75 73 ; "worthy of inclusion in today's" &1d86 69 6f 6e 20 69 6e 20 74 6f 64 61 79 27 73 &1d94 40 06 15 ; at (&06, &15) &1d97 6c 69 73 74 20 6f 66 20 73 70 68 65 72 69 63 61 ; "list of spherical supremos!!" &1da7 6c 20 73 75 70 72 65 6d 6f 73 21 21 &1db3 40 02 17 ; at (&02, &17) &1db6 50 6c 65 61 73 65 20 6e 6f 77 20 65 6e 74 65 72 ; "Please now enter your name below...." &1dc6 20 79 6f 75 72 20 6e 61 6d 65 20 62 65 6c 6f 77 &1dd6 2e 2e 2e 2e &1dda 00 ; end of string &1ddb 20 78 1c JSR &1c78 ; get_string &1dde a2 0f LDX #&0f ; copy_name_into_high_scores_loop &1de0 bd ee 02 LDA &02ee,X ; input_buffer &1de3 9d 97 1b STA &1b97,X ; high_scores + 7 * 18 # Copy name into lowest high score &1de6 ca DEX &1de7 10 f7 BPL &1de0 ; copy_name_into_high_scores_loop &1de9 a2 01 LDX #&01 ; copy_score_into_high_scores_loop &1deb b5 90 LDA &90,X ; score &1ded 9d a7 1b STA &1ba7,X ; high_scores + 7 * 18 + 16 # Copy score into lowest high score &1df0 ca DEX &1df1 10 f8 BPL &1deb ; copy_score_into_high_scores_loop &1df3 a2 00 LDX #&00 &1df5 86 00 STX &00 ; count ; sort_high_scores_rank_loop &1df7 86 01 STX &01 ; rank &1df9 8a TXA &1dfa 0a ASL A &1dfb 85 02 STA &02 ; offset &1dfd 0a ASL A &1dfe 0a ASL A &1dff 0a ASL A &1e00 65 02 ADC &02 ; offset # offset = rank * 18 &1e02 85 02 STA &02 ; offset &1e04 aa TAX &1e05 38 SEC &1e06 bd 29 1b LDA &1b29,X ; high_scores + 16 # Is this rank's score &1e09 fd 3b 1b SBC &1b3b,X ; high_scores + 18 + 16 # lower than the next rank's? &1e0c bd 2a 1b LDA &1b2a,X ; high_scores + 17 &1e0f fd 3c 1b SBC &1b3c,X ; high_scores + 18 + 17 &1e12 b0 30 BCS &1e44 ; skip_swapping_ranks &1e14 a0 00 LDY #&00 # If so, swap them ; copy_name_and_score_for_swap_loop &1e16 bd 19 1b LDA &1b19,X ; high_scores &1e19 99 ee 02 STA &02ee,Y ; input_buffer # Copy this rank's name and score into a buffer &1e1c e8 INX &1e1d c8 INY &1e1e c0 12 CPY #&12 &1e20 d0 f4 BNE &1e16 ; copy_name_and_score_for_swap_loop &1e22 a0 00 LDY #&00 &1e24 a6 02 LDX &02 ; offset ; swap_name_and_score_loop &1e26 bd 2b 1b LDA &1b2b,X ; high_scores + 18 &1e29 9d 19 1b STA &1b19,X ; high_scores # Replace this rank's name and score with next rank's &1e2c e8 INX &1e2d c8 INY &1e2e c0 12 CPY #&12 &1e30 d0 f4 BNE &1e26 ; swap_name_and_score_loop &1e32 a0 00 LDY #&00 &1e34 a6 02 LDX &02 ; offset ; replace_name_and_score_for_swap_loop &1e36 b9 ee 02 LDA &02ee,Y ; input_buffer &1e39 9d 2b 1b STA &1b2b,X ; high_scores + 18 # Replace next rank's name and score with this rank's &1e3c e8 INX &1e3d c8 INY &1e3e c0 12 CPY #&12 &1e40 d0 f4 BNE &1e36 ; replace_name_and_score_for_swap_loop &1e42 e6 00 INC &00 ; count ; skip_swapping_ranks &1e44 a6 01 LDX &01 ; rank &1e46 e8 INX &1e47 e0 07 CPX #&07 &1e49 d0 ac BNE &1df7 ; sort_high_scores_rank_loop &1e4b a5 00 LDA &00 ; count &1e4d d0 a4 BNE &1df3 ; sort_high_scores_loop &1e4f 60 RTS ; title_data ; level_00_title # Level 1 &1e50 02 # at (&02) &1e51 53 75 70 65 72 20 53 69 6d 70 6c 65 78 20 2d 20 ; "Super Simplex - straight through..." &1e61 73 74 72 61 69 67 68 74 20 74 68 72 6f 75 67 68 &1e71 2e 2e 2e ; level_01_title # Level 2 &1e74 09 # at (&09) &1e75 57 4f 57 20 2d 20 6f 6e 20 73 65 63 6f 6e 64 20 ; "WOW - on second sheet!" &1e85 73 68 65 65 74 21 ; level_02_title # Level 3 &1e8b 0d # at (&0d) &1e8c 47 65 74 74 69 6e 67 20 62 65 74 74 65 72 ; "Getting better" ; level_03_title # Level 4 &1e9a 07 # at (&07) &1e9b 45 76 65 72 20 74 72 69 65 64 20 53 70 61 63 65 ; "Ever tried Space Surfing?" &1eab 20 53 75 72 66 69 6e 67 3f ; level_04_title # Level 5 &1eb4 09 # at (&09) &1eb5 4a 75 73 74 20 61 6e 6f 74 68 65 72 20 36 30 20 ; "Just another 60 levels" &1ec5 6c 65 76 65 6c 73 ; level_05_title # Level 6 &1ecb 09 # at (&09) &1ecc 49 27 76 65 20 67 6f 74 74 61 20 42 69 67 20 50 ; "I've gotta Big Panda!" &1edc 61 6e 64 61 21 ; level_06_title # Level 7 &1ee1 08 # at (&08) &1ee2 43 72 75 69 73 69 6e 67 20 62 79 20 42 65 65 74 ; "Cruising by Beetle Juice" &1ef2 6c 65 20 4a 75 69 63 65 ; level_07_title # Level 8 &1efa 0a # at (&0a) &1efb 50 73 79 63 61 73 74 72 69 61 6e 20 70 61 72 61 ; "Psycastrian paradox" &1f0b 64 6f 78 ; level_08_title # Level 9 &1f0e 0a # at (&0a) &1f0f 27 52 65 7a 61 6c 62 6c 69 61 72 74 27 20 2d 20 ; "'Rezalbliart' - Huh?" &1f1f 48 75 68 3f ; level_09_title # Level 10 &1f23 09 # at (&09) &1f24 53 75 70 65 72 20 52 61 73 74 65 72 20 49 6e 74 ; "Super Raster Interupts" &1f34 65 72 75 70 74 73 ; level_0a_title # Level 11 &1f3a 08 # at (&08) &1f3b 49 2e 4c 2e 54 2e 44 2e 4e 2e 20 61 64 20 69 6e ; "I.L.T.D.N. ad infinitum" &1f4b 66 69 6e 69 74 75 6d ; level_0b_title # Level 12 &1f52 0a # at (&0a) &1f53 59 6f 75 27 72 65 20 67 65 74 74 69 6e 67 20 67 ; "You're getting good!" &1f63 6f 6f 64 21 ; level_0c_title # Level 13 &1f67 0c # at (&0c) &1f68 43 61 6e 20 79 6f 75 20 70 72 6f 67 72 61 6d 3f ; "Can you program?" ; level_0d_title # Level 14 &1f78 04 # at (&04) &1f79 53 65 74 20 63 6f 2d 6f 72 64 69 6e 61 74 65 73 ; "Set co-ordinates for next level!" &1f89 20 66 6f 72 20 6e 65 78 74 20 6c 65 76 65 6c 21 ; level_0e_title # Level 15 &1f99 07 # at (&07) &1f9a 53 68 6f 74 6f 6b 61 6e 20 4b 61 72 61 74 65 20 ; "Shotokan Karate rules okay" &1faa 72 75 6c 65 73 20 6f 6b 61 79 ; level_0f_title # Level 16 &1fb4 06 # at (&06) &1fb5 54 72 79 20 63 68 65 61 74 69 6e 67 20 2d 20 69 ; "Try cheating - it's easier!" &1fc5 74 27 73 20 65 61 73 69 65 72 21 ; level_10_title # Level 17 &1fd0 05 # at (&05) &1fd1 4d 79 20 41 63 6f 72 6e 20 41 74 6f 6d 20 69 73 ; "My Acorn Atom is broken (sob!)" &1fe1 20 62 72 6f 6b 65 6e 20 28 73 6f 62 21 29 ; level_11_title # Level 18 &1fef 02 # at (&02) &1ff0 57 68 61 74 27 73 20 74 68 69 73 20 62 6f 74 74 ; "What's this bottle of white fluid..." &2000 6c 65 20 6f 66 20 77 68 69 74 65 20 66 6c 75 69 &2010 64 2e 2e 2e ; level_12_title # Level 19 &2014 0c # at (&0c) &2015 49 20 68 61 74 65 20 6c 6c 61 6d 61 73 21 21 21 ; "I hate llamas!!!" ; level_13_title # Level 20 &2025 04 # at (&04) &2026 41 75 64 69 6f 67 65 6e 69 63 20 2d 20 74 68 65 ; "Audiogenic - the games merchants" &2036 20 67 61 6d 65 73 20 6d 65 72 63 68 61 6e 74 73 ; level_14_title # Level 21 &2046 02 # at (&02) &2047 49 27 76 65 20 67 6f 74 74 61 20 6e 65 77 20 63 ; "I've gotta new car (brag, swell)!!!" &2057 61 72 20 28 62 72 61 67 2c 20 73 77 65 6c 6c 29 &2067 21 21 21 ; level_15_title # Level 22 &206a 08 # at (&08) &206b 57 68 61 74 27 73 20 70 69 6e 6b 20 61 6e 64 20 ; "What's pink and hard???" &207b 68 61 72 64 3f 3f 3f ; level_16_title # Level 23 &2082 09 # at (&09) &2083 54 68 69 73 20 69 73 6e 27 74 20 74 68 65 20 61 ; "This isn't the answer!" &2093 6e 73 77 65 72 21 ; level_17_title # Level 24 &2099 02 # at (&02) &209a 41 6e 73 77 65 72 20 2d 20 61 20 70 69 67 20 77 ; "Answer - a pig with a flick knife!!!" &20aa 69 74 68 20 61 20 66 6c 69 63 6b 20 6b 6e 69 66 &20ba 65 21 21 21 ; level_18_title # Level 25 &20be 07 # at (&07) &20bf 4a 75 73 74 20 34 32 20 6c 69 67 68 74 73 20 79 ; "Just 42 lights years home!" &20cf 65 61 72 73 20 68 6f 6d 65 21 ; level_19_title # Level 26 &20d9 06 # at (&06) &20da 57 61 6e 74 20 74 6f 20 62 75 79 20 61 20 64 6f ; "Want to buy a dodgy 'pooter?" &20ea 64 67 79 20 27 70 6f 6f 74 65 72 3f ; level_1a_title # Level 27 &20f6 01 # at (&01) &20f7 49 74 27 73 20 68 61 72 64 20 74 6f 20 74 68 69 ; "It's hard to think of these captions!" &2107 6e 6b 20 6f 66 20 74 68 65 73 65 20 63 61 70 74 &2117 69 6f 6e 73 21 ; level_1b_title # Level 28 &211c 00 # at (&00) &211d 41 6c 6d 6f 73 74 20 62 65 64 20 74 69 6d 65 2c ; "Almost bed time, go to work in 3 hours!" &212d 20 67 6f 20 74 6f 20 77 6f 72 6b 20 69 6e 20 33 &213d 20 68 6f 75 72 73 21 ; level_1c_title # Level 29 &2144 01 # at (&01) &2145 41 6c 6c 20 74 68 69 73 20 6d 6f 6e 65 79 2c 20 ; "All this money, no one to spend in on!" &2155 6e 6f 20 6f 6e 65 20 74 6f 20 73 70 65 6e 64 20 &2165 69 6e 20 6f 6e 21 ; level_1d_title # Level 30 &216b 07 # at (&07) &216c 57 68 61 74 20 61 20 2a 2a 2a 2a 69 6e 67 20 73 ; "What a ****ing shambles..." &217c 68 61 6d 62 6c 65 73 2e 2e 2e ; level_1e_title # Level 31 &2186 07 # at (&07) &2187 54 68 69 6e 6b 20 49 27 6c 6c 20 67 65 74 20 73 ; "Think I'll get sozzled..." &2197 6f 7a 7a 6c 65 64 2e 2e 2e ; level_1f_title # Level 32 &21a0 04 # at (&04) &21a1 41 6e 79 6f 6e 65 20 67 6f 74 20 61 20 62 6f 74 ; "Anyone got a bottle of whiskey?" &21b1 74 6c 65 20 6f 66 20 77 68 69 73 6b 65 79 3f ; level_20_title # Level 33 &21c0 04 # at (&04) &21c1 48 61 76 65 6e 27 74 20 79 6f 75 20 66 6f 75 6e ; "Haven't you found how to cheat?" &21d1 64 20 68 6f 77 20 74 6f 20 63 68 65 61 74 3f ; level_21_title # Level 34 &21e0 06 # at (&06) &21e1 53 75 69 63 69 64 65 20 63 61 6e 27 74 20 62 65 ; "Suicide can't be that bad..." &21f1 20 74 68 61 74 20 62 61 64 2e 2e 2e ; level_22_title # Level 35 &21fd 07 # at (&07) &21fe 59 6f 75 27 72 65 20 64 6f 69 6e 67 20 76 65 72 ; "You're doing very well..." &220e 79 20 77 65 6c 6c 2e 2e 2e ; level_23_title # Level 36 &2217 01 # at (&01) &2218 59 61 77 6e 2c 20 70 69 63 6b 20 75 70 20 64 72 ; "Yawn, pick up drink, knock back, yawn" &2228 69 6e 6b 2c 20 6b 6e 6f 63 6b 20 62 61 63 6b 2c &2238 20 79 61 77 6e ; level_24_title # Level 37 &223d 02 # at (&02) &223e 42 69 67 20 50 61 6e 64 61 20 64 6f 65 73 6e 27 ; "Big Panda doesn't look too stable..." &224e 74 20 6c 6f 6f 6b 20 74 6f 6f 20 73 74 61 62 6c &225e 65 2e 2e 2e ; level_25_title # Level 38 &2262 04 # at (&04) &2263 57 61 73 6e 27 74 20 74 68 69 73 20 67 61 6d 65 ; "Wasn't this game easy to write!" &2273 20 65 61 73 79 20 74 6f 20 77 72 69 74 65 21 ; level_26_title # Level 39 &2282 03 # at (&03) &2283 49 27 76 65 20 6e 65 76 65 72 20 74 72 69 65 64 ; "I've never tried drugs, have you?" &2293 20 64 72 75 67 73 2c 20 68 61 76 65 20 79 6f 75 &22a3 3f ; level_27_title # Level 40 &22a4 00 # at (&00) &22a5 49 73 6e 27 74 20 69 74 20 6c 6f 6e 65 6c 79 20 ; "Isn't it lonely when you're on your own!" &22b5 77 68 65 6e 20 79 6f 75 27 72 65 20 6f 6e 20 79 &22c5 6f 75 72 20 6f 77 6e 21 ; level_28_title # Level 41 &22cd 01 # at (&01) &22ce 54 68 69 6e 6b 20 49 27 6c 6c 20 70 75 74 20 74 ; "Think I'll put the central heating on!" &22de 68 65 20 63 65 6e 74 72 61 6c 20 68 65 61 74 69 &22ee 6e 67 20 6f 6e 21 ; level_29_title # Level 42 &22f4 00 # at (&00) &22f5 49 20 73 68 6f 75 6c 64 20 68 61 76 65 20 62 65 ; "I should have been training last night!" &2305 65 6e 20 74 72 61 69 6e 69 6e 67 20 6c 61 73 74 &2315 20 6e 69 67 68 74 21 ; level_2a_title # Level 43 &231c 01 # at (&01) &231d 49 20 68 6f 70 65 20 79 6f 75 20 62 6f 75 67 68 ; "I hope you bought this game or else..." &232d 74 20 74 68 69 73 20 67 61 6d 65 20 6f 72 20 65 &233d 6c 73 65 2e 2e 2e ; level_2b_title # Level 44 &2343 05 # at (&05) &2344 44 6f 6e 27 74 20 67 65 74 20 65 6e 67 61 67 65 ; "Don't get engaged too young..." &2354 64 20 74 6f 6f 20 79 6f 75 6e 67 2e 2e 2e ; level_2c_title # Level 45 &2362 08 # at (&08) &2363 43 61 6e 20 79 6f 75 20 72 65 61 64 20 6d 79 20 ; "Can you read my accent?" &2373 61 63 63 65 6e 74 3f ; level_2d_title # Level 46 &237a 09 # at (&09) &237b 4c 69 66 65 20 69 73 20 62 75 74 20 61 6e 20 6f ; "Life is but an orange" &238b 72 61 6e 67 65 ; level_2e_title # Level 47 &2390 02 # at (&02) &2391 48 69 2d 6c 65 76 65 6c 20 6c 61 6e 67 75 61 67 ; "Hi-level languages are damn boring!" &23a1 65 73 20 61 72 65 20 64 61 6d 6e 20 62 6f 72 69 &23b1 6e 67 21 ; level_2f_title # Level 48 &23b4 03 # at (&03) &23b5 53 49 44 20 61 6e 64 20 56 49 43 20 61 72 65 20 ; "SID and VIC are damned powerful!!!" &23c5 64 61 6d 6e 65 64 20 70 6f 77 65 72 66 75 6c 21 &23d5 21 21 ; level_30_title # Level 49 &23d7 02 # at (&02) &23d8 41 6e 79 20 27 49 64 65 61 73 20 43 72 65 61 74 ; "Any 'Ideas Creation' programs about?" &23e8 69 6f 6e 27 20 70 72 6f 67 72 61 6d 73 20 61 62 &23f8 6f 75 74 3f ; level_31_title # Level 50 &23fc 05 # at (&05) &23fd 53 65 78 20 69 73 20 74 68 65 20 63 72 65 61 74 ; "Sex is the creation of life..." &240d 69 6f 6e 20 6f 66 20 6c 69 66 65 2e 2e 2e ; level_32_title # Level 51 &241b 04 # at (&04) &241c 2e 2e 2e 62 75 74 20 6c 6f 76 65 20 69 73 20 6c ; "...but love is life's essence!!!" &242c 69 66 65 27 73 20 65 73 73 65 6e 63 65 21 21 21 ; level_33_title # Level 52 &243c 0a # at (&0a) &243d 57 68 79 2c 20 54 72 61 63 65 79 2c 20 77 68 79 ; "Why, Tracey, why???" &244d 3f 3f 3f ; level_34_title # Level 53 &2450 05 # at (&05) &2451 41 72 65 6e 27 74 20 79 6f 75 20 67 65 74 74 69 ; "Aren't you getting bored yet?" &2461 6e 67 20 62 6f 72 65 64 20 79 65 74 3f ; level_35_title # Level 54 &246e 09 # at (&09) &246f 57 68 6f 27 73 20 74 68 69 73 2c 20 42 2e 43 2e ; "Who's this, B.C.T.???" &247f 54 2e 3f 3f 3f ; level_36_title # Level 55 &2484 01 # at (&01) &2485 45 6c 65 63 74 72 6f 6e 20 76 65 72 73 69 6f 6e ; "Electron version is better than BBC..." &2495 20 69 73 20 62 65 74 74 65 72 20 74 68 61 6e 20 &24a5 42 42 43 2e 2e 2e ; level_37_title # Level 56 &24ab 01 # at (&01) &24ac 57 68 61 74 20 68 61 70 70 65 6e 65 64 20 74 6f ; "What happened to the BBC programmers?" &24bc 20 74 68 65 20 42 42 43 20 70 72 6f 67 72 61 6d &24cc 6d 65 72 73 3f ; level_38_title # Level 57 &24d1 01 # at (&01) &24d2 57 68 79 20 63 61 6e 27 74 20 74 68 65 20 41 72 ; "Why can't the Art Crew program games?" &24e2 74 20 43 72 65 77 20 70 72 6f 67 72 61 6d 20 67 &24f2 61 6d 65 73 3f ; level_39_title # Level 58 &24f7 01 # at (&01) &24f8 50 69 72 61 74 65 73 20 73 68 6f 75 6c 64 20 62 ; "Pirates should be hung by the ****s!!!" &2508 65 20 68 75 6e 67 20 62 79 20 74 68 65 20 2a 2a &2518 2a 2a 73 21 21 21 ; level_3a_title # Level 59 &251e 05 # at (&05) &251f 44 61 72 72 79 6c 20 26 20 53 61 72 61 68 20 2d ; "Darryl & Sarah - how sweet..." &252f 20 68 6f 77 20 73 77 65 65 74 2e 2e 2e ; level_3b_title # Level 60 &253c 06 # at (&06) &253d 4d 79 20 42 69 67 20 50 61 6e 64 61 20 68 61 73 ; "My Big Panda has fallen over" &254d 20 66 61 6c 6c 65 6e 20 6f 76 65 72 ; level_3c_title # Level 61 &2559 07 # at (&07) &255a 4e 6f 74 20 6d 75 63 68 20 66 75 72 74 68 65 72 ; "Not much further to go..." &256a 20 74 6f 20 67 6f 2e 2e 2e ; level_3d_title # Level 62 &2573 0c # at (&0c) &2574 41 6c 6d 6f 73 74 20 74 68 65 72 65 2e 2e 2e ; "Almost there..." ; level_3e_title # Level 63 &2583 07 # at (&07) &2584 54 68 65 20 70 65 6e 75 6c 74 69 6d 61 74 65 20 ; "The penultimate experience" &2594 65 78 70 65 72 69 65 6e 63 65 ; level_3f_title # Level 64 &259e 07 # at (&07) &259f 42 6c 6f 6f 64 79 20 68 65 6c 6c 20 2d 20 6c 61 ; "Bloody hell - last wave!!!" &25af 73 74 20 77 61 76 65 21 21 21 ; unused &25b9 01 &25ba 54 68 69 73 20 6c 65 76 65 6c 20 64 6f 65 73 6e ; "This level doesn't exist - pillock..." &25ca 27 74 20 65 78 69 73 74 20 2d 20 70 69 6c 6c 6f &25da 63 6b 2e 2e 2e ; unused &25df 01 &25e0 54 68 69 73 20 66 75 63 6b 69 6e 67 20 6c 65 76 ; "This fucking level doesn't exitst too!" &25f0 65 6c 20 64 6f 65 73 6e 27 74 20 65 78 69 74 73 &2600 74 20 74 6f 6f 21 ; unused &2606 00 ; tune_channel_1_data &2607 a9 0c &2609 a5 06 &260b 9d 06 &260d 95 06 &260f 8d 06 &2611 89 06 &2613 81 06 &2615 79 0c &2617 a9 0c &2619 a5 0c &261b b1 0c &261d 95 0c &261f a5 0c &2621 a9 0c &2623 89 0c &2625 8d 0c &2627 9d 0c &2629 75 0c &262b 81 0c &262d 65 0c &262f 8d 0c &2631 89 0c &2633 81 0c &2635 79 30 &2637 79 0c &2639 81 06 &263b 89 06 &263d 8d 06 &263f 95 06 &2641 9d 06 &2643 a5 06 &2645 a9 0c &2647 89 0c &2649 91 0c &264b 9d 0c &264d 81 0c &264f 75 0c &2651 79 0c &2653 6d 0c &2655 75 0c &2657 95 0c &2659 6d 0c &265b 95 0c &265d 81 0c &265f 91 0c &2661 95 48 &2663 a9 0c &2665 a5 06 &2667 9d 06 &2669 95 06 &266b 8d 06 &266d 89 06 &266f 81 06 &2671 79 0c &2673 a9 0c &2675 a5 0c &2677 b1 0c &2679 95 0c &267b a5 0c &267d a9 0c &267f 89 0c &2681 8d 0c &2683 9d 0c &2685 75 0c &2687 81 0c &2689 65 0c &268b 8d 0c &268d 89 0c &268f 81 0c &2691 79 30 &2693 79 0c &2695 81 06 &2697 89 06 &2699 8d 06 &269b 95 06 &269d 9d 06 &269f a5 06 &26a1 a9 0c &26a3 89 0c &26a5 91 0c &26a7 9d 0c &26a9 81 0c &26ab 75 0c &26ad 79 0c &26af 6d 0c &26b1 75 0c &26b3 95 0c &26b5 6d 0c &26b7 95 0c &26b9 81 0c &26bb 91 0c &26bd 95 54 &26bf 79 0c &26c1 89 0c &26c3 95 0c &26c5 a9 0c &26c7 95 0c &26c9 9d 18 &26cb 95 06 &26cd 8d 06 &26cf 89 06 &26d1 81 06 &26d3 79 06 &26d5 75 06 &26d7 6d 06 &26d9 65 0c &26db 81 06 &26dd 89 06 &26df 91 06 &26e1 95 06 &26e3 9d 06 &26e5 a5 06 &26e7 a9 06 &26e9 b1 0c &26eb 9d 0c &26ed a5 18 &26ef 9d 06 &26f1 95 06 &26f3 91 06 &26f5 89 06 &26f7 81 06 &26f9 79 06 &26fb 75 06 &26fd 6d 0c &26ff 89 06 &2701 91 06 &2703 99 06 &2705 9d 06 &2707 a5 06 &2709 a9 06 &270b b1 06 &270d b9 0c &270f a5 0c &2711 a9 0c &2713 b9 0c &2715 9d 0c &2717 89 0c &2719 8d 0c &271b 81 0c &271d 79 0c &271f 9d 0c &2721 75 0c &2723 9d 0c &2725 89 0c &2727 99 0c &2729 9d 4e &272b 81 06 &272d 89 06 &272f 91 06 &2731 95 06 &2733 9d 06 &2735 a5 06 &2737 a9 06 &2739 b1 0c &273b 9d 0c &273d a5 4e &273f 79 06 &2741 81 06 &2743 89 06 &2745 8d 06 &2747 95 06 &2749 9d 06 &274b a5 06 &274d a9 0c &274f 95 0c &2751 9d 06 &2753 81 06 &2755 89 06 &2757 8d 06 &2759 95 06 &275b 9d 06 &275d a5 06 &275f a9 06 &2761 b1 0c &2763 9d 0c &2765 a5 06 &2767 95 06 &2769 9d 06 &276b a5 06 &276d a9 06 &276f b1 06 &2771 b9 06 &2773 bd 06 &2775 c5 0c &2777 b1 0c &2779 b9 0c &277b c5 0c &277d a9 0c &277f b9 0c &2781 95 0c &2783 a1 0c &2785 9d 0c &2787 a9 06 &2789 a1 06 &278b 9d 06 &278d 95 06 &278f 8d 06 &2791 89 06 &2793 81 06 &2795 79 06 &2797 75 06 &2799 6d 06 &279b 75 0c &279d 81 0c &279f 65 0c &27a1 59 0c &27a3 5d 0c &27a5 51 0c &27a7 59 0c &27a9 79 0c &27ab 51 0c &27ad 79 0c &27af 65 0c &27b1 75 0c &27b3 79 b4 ; tune_channel_2_data &27b5 59 18 &27b7 59 0c &27b9 5d 0c &27bb 65 0c &27bd 6d 0c &27bf 65 18 &27c1 59 18 &27c3 49 18 &27c5 51 18 &27c7 35 18 &27c9 45 18 &27cb 19 0c &27cd 21 06 &27cf 29 06 &27d1 2d 06 &27d3 35 06 &27d5 3d 06 &27d7 45 06 &27d9 49 0c &27db 35 0c &27dd 59 18 &27df 49 18 &27e1 3d 18 &27e3 51 18 &27e5 21 0c &27e7 51 0c &27e9 59 0c &27eb 61 0c &27ed 65 0c &27ef 59 0c &27f1 49 18 &27f3 51 18 &27f5 35 0c &27f7 3d 06 &27f9 45 06 &27fb 49 06 &27fd 51 06 &27ff 59 06 &2801 61 06 &2803 65 0c &2805 45 0c &2807 59 18 &2809 59 0c &280b 5d 0c &280d 65 0c &280f 6d 0c &2811 65 18 &2813 59 18 &2815 49 18 &2817 51 18 &2819 35 18 &281b 45 18 &281d 19 0c &281f 21 06 &2821 29 06 &2823 2d 06 &2825 35 06 &2827 3d 06 &2829 45 06 &282b 49 0c &282d 35 0c &282f 59 18 &2831 49 18 &2833 3d 18 &2835 51 18 &2837 21 0c &2839 51 0c &283b 59 0c &283d 61 0c &283f 65 0c &2841 59 0c &2843 49 18 &2845 51 18 &2847 35 0c &2849 3d 06 &284b 45 06 &284d 49 06 &284f 51 06 &2851 59 06 &2853 61 06 &2855 65 0c &2857 45 0c &2859 59 30 &285b 29 18 &285d 49 30 &285f 5d 18 &2861 61 30 &2863 31 18 &2865 51 30 &2867 65 18 &2869 69 30 &286b 39 18 &286d 6d 18 &286f 49 18 &2871 51 18 &2873 59 0c &2875 5d 0c &2877 51 18 &2879 59 18 &287b 3d 0c &287d 45 06 &287f 49 06 &2881 51 06 &2883 59 06 &2885 61 06 &2887 69 06 &2889 6d 0c &288b 59 0c &288d 6d 30 &288f 51 1e &2891 65 06 &2893 61 06 &2895 59 06 &2897 51 06 &2899 49 06 &289b 45 06 &289d 3d 06 &289f 35 0c &28a1 61 0c &28a3 65 30 &28a5 49 18 &28a7 5d 30 &28a9 61 18 &28ab 65 18 &28ad 35 18 &28af 45 18 &28b1 49 18 &28b3 59 18 &28b5 29 18 &28b7 31 18 &28b9 49 18 &28bb 5d 30 &28bd 59 0c &28bf 49 0c &28c1 51 0c &28c3 45 0c &28c5 49 0c &28c7 3d 0c &28c9 31 18 &28cb 35 18 &28cd 19 58 ; unused &28cf 38 ; mode_5_font_data &28d0 00 00 00 00 ; " " &28d4 04 44 44 04 ; "!" &28d8 0a 0a 00 00 ; """ &28dc e0 aa 0e 00 ; "#" &28e0 64 ee 4c 04 ; "$" &28e4 4a 82 a4 04 ; "%" &28e8 40 a4 0a 00 ; "&" &28ec 02 04 00 00 ; "'" &28f0 42 44 24 04 ; "(" &28f4 48 44 84 04 ; ")" &28f8 e0 44 0e 04 ; "*" &28fc 40 44 04 0e ; "+" &2900 00 00 40 80 ; "," &2904 00 00 00 0e ; "-" &2908 00 00 40 00 ; "." &290c 42 82 84 04 ; "/" &2910 ae aa ea 0a ; "0" &2914 44 4c e4 04 ; "1" &2918 8e aa e2 04 ; "2" &291c 2e aa e2 06 ; "3" &2920 e8 28 28 0a ; "4" &2924 2e aa e8 0e ; "5" &2928 ae aa e8 0e ; "6" &292c 4e 4a 42 02 ; "7" &2930 ae aa ea 0e ; "8" &2934 2e aa ea 0e ; "9" &2938 40 00 04 00 ; ":" &293c 40 80 04 00 ; ";" &2940 40 22 04 08 ; "<" &2944 e0 00 0e 00 ; "=" &2948 40 88 04 02 ; ">" &294c 4e 0a 42 06 ; "?" &2950 00 00 00 00 ; "@" &2954 ae aa aa 0e ; "A" &2958 ac aa ca 0c ; "B" &295c 8e aa e8 08 ; "C" &2960 ac aa ca 0a ; "D" &2964 8e aa e8 0c ; "E" &2968 8e 8a 88 0c ; "F" &296c ae aa e8 0a ; "G" &2970 aa aa aa 0e ; "H" &2974 4e 44 e4 04 ; "I" &2978 2e a2 e2 02 ; "J" &297c aa aa aa 0c ; "K" &2980 88 a8 e8 08 ; "L" &2984 aa ae aa 0a ; "M" &2988 ea aa ae 0e ; "N" &298c ae aa ea 0a ; "O" &2990 8e 8a 8a 0e ; "P" &2994 ae ea 4a 2a ; "Q" &2998 ce aa aa 0e ; "R" &299c 2e aa e8 04 ; "S" &29a0 4e 44 44 04 ; "T" &29a4 aa aa ea 0a ; "U" &29a8 aa ea 4a 0a ; "V" &29ac aa ea aa 0a ; "W" &29b0 4a aa a4 04 ; "X" &29b4 4a 4a 4a 04 ; "Y" &29b8 8e 82 e2 04 ; "Z" &29bc 00 00 03 03 ; "[" &29c0 48 28 24 04 ; "\" &29c4 88 88 0e 0e ; "]" &29c8 44 4e 44 44 ; "^" &29cc 00 00 f0 00 ; "_" &29d0 44 44 e4 44 ; "`" &29d4 e0 a0 ee 02 ; "a" &29d8 a8 a8 ee 0a ; "b" &29dc 80 a0 ee 0a ; "c" &29e0 a2 a2 ee 0a ; "d" &29e4 e0 80 ee 0a ; "e" &29e8 84 8a 88 0c ; "f" &29ec a0 e0 2e ea ; "g" &29f0 a8 a8 ae 0a ; "h" &29f4 44 40 ec 04 ; "i" &29f8 44 40 44 c4 ; "j" &29fc c8 c8 aa 0a ; "k" &2a00 4c 44 e4 04 ; "l" &2a04 a0 a0 aa 0e ; "m" &2a08 a0 a0 ae 0a ; "n" &2a0c a0 a0 ee 0a ; "o" &2a10 a0 e0 8e 8a ; "p" &2a14 a0 e0 2e 3a ; "q" &2a18 80 80 8e 08 ; "r" &2a1c e0 20 ee 08 ; "s" &2a20 44 44 6e 04 ; "t" &2a24 a0 a0 ea 0a ; "u" &2a28 a0 e0 4a 0a ; "v" &2a2c a0 e0 aa 0a ; "w" &2a30 40 a0 aa 0a ; "x" &2a34 a0 e0 2a ea ; "y" &2a38 40 80 ee 02 ; "z" &2a3c 31 33 13 07 ; "{" &2a40 44 44 44 00 ; "|" &2a44 c8 cc 8c 0e ; "}" &2a48 0a 0e 08 00 ; "~" &2a4c ff ff ff ff ; (unused) ; mode_4_font_data &2a50 00 00 00 00 00 00 00 00 ; " " &2a58 18 18 18 18 18 00 18 00 ; "!" &2a60 6c 6c 6c 00 00 00 00 00 ; """ &2a68 36 36 7f 36 7f 36 36 00 ; "#" &2a70 0c 3f 68 3e 0b 7e 18 00 ; "$" &2a78 60 66 0c 18 30 66 06 00 ; "%" &2a80 38 6c 6c 38 6d 66 3b 00 ; "&" &2a88 0c 18 30 00 00 00 00 00 ; "'" &2a90 0c 18 30 30 30 18 0c 00 ; "(" &2a98 30 18 0c 0c 0c 18 30 00 ; ")" &2aa0 00 66 3c ff 3c 66 00 00 ; "*" &2aa8 00 18 18 7e 18 18 00 00 ; "+" &2ab0 00 00 00 00 00 18 18 30 ; "," &2ab8 00 00 00 7e 00 00 00 00 ; "-" &2ac0 00 00 00 00 00 18 18 00 ; "." &2ac8 06 0c 18 30 60 c0 80 00 ; "/" &2ad0 7c c6 ce d6 e6 c6 7c 00 ; "0" &2ad8 18 38 18 18 18 18 7e 00 ; "1" &2ae0 3c 66 06 3c 60 66 7e 00 ; "2" &2ae8 3c 46 06 1c 06 66 3c 00 ; "3" &2af0 18 38 58 98 fe 18 3c 00 ; "4" &2af8 7e 62 60 3c 06 66 3c 00 ; "5" &2b00 3c 66 60 7c 66 66 3c 00 ; "6" &2b08 7e 46 06 0c 18 18 18 00 ; "7" &2b10 3c 66 66 3c 66 66 3c 00 ; "8" &2b18 3c 66 66 3e 06 66 3c 00 ; "9" &2b20 00 00 18 18 00 18 18 00 ; ":" &2b28 00 00 18 18 00 18 18 30 ; ";" &2b30 0c 18 30 60 30 18 0c 00 ; "<" &2b38 00 00 7e 00 00 7e 00 00 ; "=" &2b40 60 30 18 0c 18 30 60 00 ; ">" &2b48 3c 66 06 0c 18 00 18 00 ; "?" &2b50 7c c6 de de de c0 7c 00 ; "@" &2b58 18 3c 66 66 7e 66 66 00 ; "A" &2b60 fc 66 66 7c 66 66 fc 00 ; "B" &2b68 3c 66 c0 c0 c0 66 3c 00 ; "C" &2b70 f8 6c 66 66 66 6c f8 00 ; "D" &2b78 fe 62 68 78 68 62 fe 00 ; "E" &2b80 fe 62 68 78 68 60 f0 00 ; "F" &2b88 3c 66 c0 c0 ce c6 7e 00 ; "G" &2b90 66 66 66 7e 66 66 66 00 ; "H" &2b98 7e 18 18 18 18 18 7e 00 ; "I" &2ba0 1e 0c 0c 0c cc cc 78 00 ; "J" &2ba8 e6 66 6c 78 6c 66 e6 00 ; "K" &2bb0 f0 60 60 60 62 66 7e 00 ; "L" &2bb8 c6 ee fe fe d6 c6 c6 00 ; "M" &2bc0 c6 e6 f6 de ce c6 c6 00 ; "N" &2bc8 38 6c c6 c6 c6 6c 38 00 ; "O" &2bd0 fc 66 66 78 60 60 f0 00 ; "P" &2bd8 38 6c c6 c6 da cc 76 00 ; "Q" &2be0 fc 66 66 7c 6c 66 e2 00 ; "R" &2be8 3c 66 60 3c 06 66 3c 00 ; "S" &2bf0 7e 5a 18 18 18 18 3c 00 ; "T" &2bf8 66 66 66 66 66 66 3c 00 ; "U" &2c00 66 66 66 66 66 3c 18 00 ; "V" &2c08 c6 c6 c6 d6 fe ee c6 00 ; "W" &2c10 c6 6c 38 38 6c c6 c6 00 ; "X" &2c18 66 66 66 3c 18 18 3c 00 ; "Y" &2c20 fe c6 8c 18 32 66 fe 00 ; "Z" &2c28 3c 30 30 30 30 30 3c 00 ; "[" &2c30 3c 42 bd a1 bd 42 3c 00 ; "\" &2c38 3c 0c 0c 0c 0c 0c 3c 00 ; "]" &2c40 18 3c 7e 18 18 18 18 00 ; "^" &2c48 00 00 00 00 00 00 00 ff ; "_" &2c50 00 30 18 0c 00 00 00 00 ; "`" &2c58 00 00 78 0c 7c cc 76 00 ; "a" &2c60 e0 e0 7c 66 66 66 bc 00 ; "b" &2c68 00 00 3c 66 60 66 3c 00 ; "c" &2c70 1c 0c 7c cc cc cc 76 00 ; "d" &2c78 00 00 3c 66 7e 60 3c 00 ; "e" &2c80 1c 36 30 78 30 30 78 00 ; "f" &2c88 00 00 3e 66 66 3e 06 7c ; "g" &2c90 e0 60 6c 76 66 66 e6 00 ; "h" &2c98 18 00 38 18 18 18 3c 00 ; "i" &2ca0 02 00 0e 06 06 66 66 3c ; "j" &2ca8 e0 60 66 6c 78 6c e6 00 ; "k" &2cb0 38 18 18 18 18 18 3c 00 ; "l" &2cb8 00 00 6c fe d6 d6 c6 00 ; "m" &2cc0 00 00 d8 66 66 66 66 00 ; "n" &2cc8 00 00 3c 66 66 66 3c 00 ; "o" &2cd0 00 00 dc 66 66 7c 60 f0 ; "p" &2cd8 00 00 76 cc cc 7c 0c 1e ; "q" &2ce0 00 00 d8 6c 60 60 f0 00 ; "r" &2ce8 00 00 3c 60 3c 06 7c 00 ; "s" &2cf0 30 30 7c 30 30 36 1c 00 ; "t" &2cf8 00 00 66 66 66 66 3e 00 ; "u" &2d00 00 00 66 66 66 3c 18 00 ; "v" &2d08 00 00 c6 d6 d6 fe 6c 00 ; "w" &2d10 00 00 c6 6c 38 6c c6 00 ; "x" &2d18 00 00 66 66 66 3e 06 7c ; "y" &2d20 00 00 7e 4c 18 32 7e 00 ; "z" &2d28 0e 18 18 70 18 18 0e 00 ; "{" &2d30 18 18 18 18 18 18 18 00 ; "|" &2d38 70 18 18 0e 18 18 70 00 ; "}" &2d40 76 d8 00 00 00 00 00 00 ; "~" &2d48 00 00 00 00 00 00 00 00 ; (unused) ; colour_1_palette_data_one ; 0 1 2 3 4 5 6 7 &2d50 27 24 23 20 22 26 21 25 ; K Y B W M R C G ; &00 &2d58 27 24 23 20 22 26 21 25 ; K Y B W M R C G ; &08 &2d60 27 24 23 20 22 26 21 25 ; K Y B W M R C G ; &10 &2d68 27 24 23 20 22 26 21 25 ; K Y B W M R C G ; &18 &2d70 27 24 23 20 22 26 21 25 ; K Y B W M R C G ; &20 &2d78 27 24 23 20 22 26 21 25 ; K Y B W M R C G ; &28 &2d80 27 24 23 20 22 26 21 25 ; K Y B W M R C G ; &30 &2d88 27 24 23 20 22 26 21 25 ; K Y B W M R C G ; &38 ; colour_1_palette_data_two ; 0 1 2 3 4 5 6 7 &2d90 37 34 33 30 32 36 31 35 ; K Y B W M R C G ; &00 &2d98 37 34 33 30 32 36 31 35 ; K Y B W M R C G ; &08 &2da0 37 34 33 30 32 36 31 35 ; K Y B W M R C G ; &10 &2da8 37 34 33 30 32 36 31 35 ; K Y B W M R C G ; &18 &2db0 37 34 33 30 32 36 31 35 ; K Y B W M R C G ; &20 &2db8 37 34 33 30 32 36 31 35 ; K Y B W M R C G ; &28 &2dc0 37 34 33 30 32 36 31 35 ; K Y B W M R C G ; &30 &2dc8 37 34 33 30 32 36 31 35 ; K Y B W M R C G ; &38 ; colour_1_palette_data_three ; 0 1 2 3 4 5 6 7 &2dd0 67 64 63 60 62 66 61 65 ; K Y B W M R C G ; &00 &2dd8 67 64 63 60 62 66 61 65 ; K Y B W M R C G ; &08 &2de0 67 64 63 60 62 66 61 65 ; K Y B W M R C G ; &10 &2de8 67 64 63 60 62 66 61 65 ; K Y B W M R C G ; &18 &2df0 67 64 63 60 62 66 61 65 ; K Y B W M R C G ; &20 &2df8 67 64 63 60 62 66 61 65 ; K Y B W M R C G ; &28 &2e00 67 64 63 60 62 66 61 65 ; K Y B W M R C G ; &30 &2e08 67 64 63 60 62 66 61 65 ; K Y B W M R C G ; &38 ; colour_1_palette_data_four ; 0 1 2 3 4 5 6 7 &2e10 77 74 73 70 72 76 71 75 ; K Y B W M R C G ; &00 &2e18 77 74 73 70 72 76 71 75 ; K Y B W M R C G ; &08 &2e20 77 74 73 70 72 76 71 75 ; K Y B W M R C G ; &10 &2e28 77 74 73 70 72 76 71 75 ; K Y B W M R C G ; &18 &2e30 77 74 73 70 72 76 71 75 ; K Y B W M R C G ; &20 &2e38 77 74 73 70 72 76 71 75 ; K Y B W M R C G ; &28 &2e40 77 74 73 70 72 76 71 75 ; K Y B W M R C G ; &30 &2e48 77 74 73 70 72 76 71 75 ; K Y B W M R C G ; &38 ; colour_2_palette_data_one ; 0 1 2 3 4 5 6 7 &2e50 87 87 87 87 87 87 87 87 ; K K K K K K K K ; &00 &2e58 84 84 84 84 84 84 84 84 ; Y Y Y Y Y Y Y Y ; &08 &2e60 83 83 83 83 83 83 83 83 ; B B B B B B B B ; &10 &2e68 80 80 80 80 80 80 80 80 ; W W W W W W W W ; &18 &2e70 82 82 82 82 82 82 82 82 ; M M M M M M M M ; &20 &2e78 86 86 86 86 86 86 86 86 ; R R R R R R R R ; &28 &2e80 81 81 81 81 81 81 81 81 ; C C C C C C C C ; &30 &2e88 85 85 85 85 85 85 85 85 ; G G G G G G G G ; &38 ; colour_2_palette_data_two ; 0 1 2 3 4 5 6 7 &2e90 97 97 97 97 97 97 97 97 ; K K K K K K K K ; &00 &2e98 94 94 94 94 94 94 94 94 ; Y Y Y Y Y Y Y Y ; &08 &2ea0 93 93 93 93 93 93 93 93 ; B B B B B B B B ; &10 &2ea8 90 90 90 90 90 90 90 90 ; W W W W W W W W ; &18 &2eb0 92 92 92 92 92 92 92 92 ; M M M M M M M M ; &20 &2eb8 96 96 96 96 96 96 96 96 ; R R R R R R R R ; &28 &2ec0 91 91 91 91 91 91 91 91 ; C C C C C C C C ; &30 &2ec8 95 95 95 95 95 95 95 95 ; G G G G G G G G ; &38 ; colour_2_palette_data_three ; 0 1 2 3 4 5 6 7 &2ed0 c7 c7 c7 c7 c7 c7 c7 c7 ; K K K K K K K K ; &00 &2ed8 c4 c4 c4 c4 c4 c4 c4 c4 ; Y Y Y Y Y Y Y Y ; &08 &2ee0 c3 c3 c3 c3 c3 c3 c3 c3 ; B B B B B B B B ; &10 &2ee8 c0 c0 c0 c0 c0 c0 c0 c0 ; W W W W W W W W ; &18 &2ef0 c2 c2 c2 c2 c2 c2 c2 c2 ; M M M M M M M M ; &20 &2ef8 c6 c6 c6 c6 c6 c6 c6 c6 ; R R R R R R R R ; &28 &2f00 c1 c1 c1 c1 c1 c1 c1 c1 ; C C C C C C C C ; &30 &2f08 c5 c5 c5 c5 c5 c5 c5 c5 ; G G G G G G G G ; &38 ; colour_2_palette_data_four ; 0 1 2 3 4 5 6 7 &2f10 d7 d7 d7 d7 d7 d7 d7 d7 ; K K K K K K K K ; &00 &2f18 d4 d4 d4 d4 d4 d4 d4 d4 ; Y Y Y Y Y Y Y Y ; &08 &2f20 d3 d3 d3 d3 d3 d3 d3 d3 ; B B B B B B B B ; &10 &2f28 d0 d0 d0 d0 d0 d0 d0 d0 ; W W W W W W W W ; &18 &2f30 d2 d2 d2 d2 d2 d2 d2 d2 ; M M M M M M M M ; &20 &2f38 d6 d6 d6 d6 d6 d6 d6 d6 ; R R R R R R R R ; &28 &2f40 d1 d1 d1 d1 d1 d1 d1 d1 ; C C C C C C C C ; &30 &2f48 d5 d5 d5 d5 d5 d5 d5 d5 ; G G G G G G G G ; &38 ; row_delays_table &2f50 00 00 05 0e 1b 2d 42 5c ; &00 &2f58 00 00 06 0e 1b 2d 43 5e ; &01 &2f60 00 00 06 0e 1c 2e 44 5e ; &02 &2f68 00 00 06 0f 1c 2f 44 5f ; &03 &2f70 00 01 05 10 1d 2f 45 60 ; &04 &2f78 00 01 06 0f 1e 2f 46 61 ; &05 &2f80 00 01 06 10 1e 30 47 62 ; &06 &2f88 00 01 06 11 1e 31 48 62 ; &07 &2f90 00 01 07 10 1f 32 48 64 ; &08 &2f98 00 01 07 11 20 32 49 65 ; &09 &2fa0 00 01 08 11 20 33 4a 65 ; &0a &2fa8 00 01 08 12 20 34 4a 67 ; &0b &2fb0 00 01 08 12 21 35 4b 68 ; &0c &2fb8 00 02 08 12 22 35 4c 68 ; &0d &2fc0 00 02 08 13 22 36 4d 69 ; &0e &2fc8 00 02 08 14 22 37 4e 6a ; &0f &2fd0 00 02 09 14 23 37 4e 6c ; &10 &2fd8 00 02 09 15 23 38 4f 6d ; &11 &2fe0 00 02 0a 14 25 38 50 6d ; &12 &2fe8 00 02 0a 15 25 39 51 6e ; &13 &2ff0 00 03 0a 15 26 39 52 6f ; &14 &2ff8 00 03 0a 16 26 3a 53 70 ; &15 &3000 00 03 0b 16 27 3a 54 71 ; &16 &3008 00 03 0b 17 27 3c 54 72 ; &17 &3010 00 03 0c 17 28 3c 55 73 ; &18 &3018 00 04 0b 18 28 3d 57 74 ; &19 &3020 00 04 0c 18 29 3d 58 75 ; &1a &3028 00 04 0c 19 29 3f 58 76 ; &1b &3030 00 04 0d 19 2a 3f 59 77 ; &1c &3038 00 05 0c 1a 2a 41 59 78 ; &1d &3040 00 05 0d 1a 2b 41 5b 79 ; &1e &3048 00 05 0e 1a 2c 41 5c 7a ; &1f ; player_sprites ; player_sprite_one_frame_one &3050 00 11 33 33 33 11 bb ff bb 11 bb ff bb 11 bb ff &3060 88 00 bb ff bb 11 bb ff 00 00 00 00 88 00 88 cc &3070 bb 11 bb ff bb 11 bb ff bb 11 bb ff bb 11 bb ff &3080 bb 11 bb ff bb 11 bb ff 88 00 88 cc 88 00 88 cc &3090 bb 11 33 77 33 11 11 00 bb 11 bb ff bb 11 bb ff &30a0 bb 11 bb ff bb 11 aa cc 88 00 88 88 00 00 00 00 ; player_sprite_one_frame_two &3050 00 11 33 33 33 11 bb ff bb 11 bb ff bb 11 bb ff &3060 00 11 11 33 77 33 11 bb ff bb 11 bb ff bb 11 bb &3070 cc aa 11 bb ff bb 11 bb 00 00 00 00 88 88 00 88 &3080 ff bb 11 bb ff bb 11 bb ff bb 11 bb ff bb 11 bb &3090 ff bb 11 bb ff bb 11 bb cc 88 00 88 cc 88 00 88 &30a0 ff bb 11 33 33 33 11 00 ff bb 11 bb ff bb 11 bb &30b0 ff bb 11 bb ff bb 00 88 cc 88 00 88 00 00 00 00 ; player_sprite_one_frame_three &30c0 00 11 33 11 33 77 bb 11 bb ff bb 11 bb ff bb 11 &30d0 88 ee bb 11 bb ff bb 11 00 00 00 00 88 88 88 00 &30e0 bb ff bb 11 bb ff bb 11 bb ff bb 11 bb ff bb 11 &30f0 bb ff bb 11 bb ff bb 11 88 cc 88 00 88 cc 88 00 &3100 bb ff 33 11 33 33 11 00 bb ff bb 11 bb ff bb 11 &3110 bb ff bb 11 bb ff aa 00 88 88 88 00 00 00 00 00 ; player_sprite_one_frame_four &3120 00 11 33 33 11 33 ff bb 11 bb ff bb 11 bb ff bb &3130 00 aa ff bb 11 bb ff bb 00 00 00 00 00 88 88 88 &3140 11 bb ff bb 11 bb ff bb 11 bb ff bb 11 bb ff bb &3150 11 bb ff bb 11 bb ff bb 00 88 cc 88 00 88 cc 88 &3160 11 bb 77 33 11 33 11 00 11 bb ff bb 11 bb ff bb &3170 11 bb ff bb 11 bb ee 88 00 88 88 88 00 00 00 00 ; player_sprite_two_frame_one &3180 00 00 11 33 55 00 dd ff dd 88 dd ff dd 88 dd ff &3190 cc 88 dd ff dd 88 dd ff 00 00 00 00 88 88 88 cc &31a0 dd 88 dd ff dd 88 dd ff dd 88 dd ff dd 88 dd ff &31b0 dd 88 dd ff dd 88 dd ff cc 88 cc cc cc 88 cc cc &31c0 dd 88 55 77 11 00 11 00 dd 88 dd ff dd 88 dd ff &31d0 dd 88 dd ff dd 88 cc cc cc 88 88 88 00 00 00 00 ; player_sprite_two_frame_two &31e0 00 11 00 11 77 55 88 dd ff dd 88 dd ff dd 88 dd &31f0 cc cc 88 dd ff dd 88 dd 00 00 00 00 88 88 88 cc &3200 ff dd 88 dd ff dd 88 dd ff dd 88 dd ff dd 88 dd &3210 ff dd 88 dd ff dd 88 dd cc cc 88 cc cc cc 88 cc &3220 ff dd 00 55 33 11 00 00 ff dd 88 dd ff dd 88 dd &3230 ff dd 88 dd ff dd 88 cc cc 88 88 88 00 00 00 00 ; player_sprite_two_frame_three &3240 00 11 11 00 55 77 dd 88 dd ff dd 88 dd ff dd 88 &3250 cc ee dd 88 dd ff dd 88 00 00 00 00 88 88 88 88 &3260 dd ff dd 88 dd ff dd 88 dd ff dd 88 dd ff dd 88 &3270 dd ff dd 88 dd ff dd 88 cc cc cc 88 cc cc cc 88 &3280 dd ff 55 00 11 33 11 00 dd ff dd 88 dd ff dd 88 &3290 dd ff dd 88 dd ff cc 88 cc 88 88 88 00 00 00 00 ; player_sprite_two_frame_four &32a0 00 11 33 11 00 55 ff dd 88 dd ff dd 88 dd ff dd &32b0 88 cc ff dd 88 dd ff dd 00 00 00 00 88 88 88 cc &32c0 88 dd ff dd 88 dd ff dd 88 dd ff dd 88 dd ff dd &32d0 88 dd ff dd 88 dd ff dd 88 cc cc cc 88 cc cc cc &32e0 88 dd 77 55 00 11 11 00 88 dd ff dd 88 dd ff dd &32f0 88 dd ff dd 88 dd ee cc 88 88 88 88 00 00 00 00 ; player_sprite_three_frame_one &3300 00 00 22 33 66 44 ee ff ee 44 ee ff ee 44 ee ff &3310 cc 44 ee ff ee 44 ee ff 00 00 00 00 88 00 88 cc &3320 ee 44 ee ff ee 44 ee ff ee 44 ee ff ee 44 ee ff &3330 ee 44 ee ff ee 44 ee ff cc 44 cc cc cc 44 cc cc &3340 ee 44 66 77 22 00 00 00 ee 44 ee ff ee 44 ee ff &3350 ee 44 ee ff ee 44 ee cc cc 00 88 88 00 00 00 00 ; player_sprite_three_frame_two &3360 00 00 00 22 77 66 44 ee ff ee 44 ee ff ee 44 ee &3370 cc ee 44 ee ff ee 44 ee 00 00 00 00 88 88 00 cc &3380 ff ee 44 ee ff ee 44 ee ff ee 44 ee ff ee 44 ee &3390 ff ee 44 ee ff ee 44 ee cc cc 44 cc cc cc 44 cc &33a0 ff ee 44 66 33 22 00 00 ff ee 44 ee ff ee 44 ee &33b0 ff ee 44 ee ff ee 44 cc cc 88 00 88 00 00 00 00 ; player_sprite_three_frame_three &33c0 00 11 22 00 66 77 ee 44 ee ff ee 44 ee ff ee 44 &33d0 cc ee ee 44 ee ff ee 44 00 00 00 00 88 88 88 44 &33e0 ee ff ee 44 ee ff ee 44 ee ff ee 44 ee ff ee 44 &33f0 ee ff ee 44 ee ff ee 44 cc cc cc 44 cc cc cc 44 &3400 ee ff 66 44 22 33 00 00 ee ff ee 44 ee ff ee 44 &3410 ee ff ee 44 ee ff ee 44 cc 88 88 00 00 00 00 00 ; player_sprite_three_frame_four &3420 00 00 33 22 44 66 ff ee 44 ee ff ee 44 ee ff ee &3430 44 ee ff ee 44 ee ff ee 00 00 00 00 00 88 88 cc &3440 44 ee ff ee 44 ee ff ee 44 ee ff ee 44 ee ff ee &3450 44 ee ff ee 44 ee ff ee 44 cc cc cc 44 cc cc cc &3460 44 ee 77 66 00 22 11 00 44 ee ff ee 44 ee ff ee &3470 44 ee ff ee 44 ee ee cc 44 88 88 88 00 00 00 00 ; player_sprite_four_frame_one &3480 00 00 33 33 77 22 77 ff 77 22 77 ff 77 22 77 ff &3490 44 22 77 ff 77 22 77 ff 00 00 00 00 00 00 00 cc &34a0 77 22 77 ff 77 22 77 ff 77 22 77 ff 77 22 77 ff &34b0 77 22 77 ff 77 22 77 ff 44 00 44 cc 44 00 44 cc &34c0 77 22 77 77 33 22 11 00 77 22 77 ff 77 22 77 ff &34d0 77 22 77 ff 77 22 66 cc 44 00 00 88 00 00 00 00 ; player_sprite_four_frame_two &34e0 00 11 22 33 77 77 22 77 ff 77 22 77 ff 77 22 77 &34f0 cc 66 22 77 ff 77 22 77 00 00 00 00 88 00 00 44 &3500 ff 77 22 77 ff 77 22 77 ff 77 22 77 ff 77 22 77 &3510 ff 77 22 77 ff 77 22 77 cc 44 00 44 cc 44 00 44 &3520 ff 77 22 77 33 33 00 00 ff 77 22 77 ff 77 22 77 &3530 ff 77 22 77 ff 77 22 44 cc 00 00 00 00 00 00 00 ; player_sprite_four_frame_three &3540 00 11 33 22 77 77 77 22 77 ff 77 22 77 ff 77 22 &3550 44 ee 77 22 77 ff 77 22 00 00 00 00 00 88 00 00 &3560 77 ff 77 22 77 ff 77 22 77 ff 77 22 77 ff 77 22 &3570 77 ff 77 22 77 ff 77 22 44 cc 44 00 44 cc 44 00 &3580 77 ff 77 22 33 33 11 00 77 ff 77 22 77 ff 77 22 &3590 77 ff 77 22 77 ff 66 00 44 88 00 00 00 00 00 00 ; player_sprite_four_frame_four &35a0 00 11 33 33 22 77 ff 77 22 77 ff 77 22 77 ff 77 &35b0 00 66 ff 77 22 77 ff 77 00 00 00 00 00 00 88 44 &35c0 22 77 ff 77 22 77 ff 77 22 77 ff 77 22 77 ff 77 &35d0 22 77 ff 77 22 77 ff 77 00 44 cc 44 00 44 cc 44 &35e0 22 77 77 77 22 33 11 00 22 77 ff 77 22 77 ff 77 &35f0 22 77 ff 77 22 77 ee 44 00 00 88 00 00 00 00 00 ; player_mask &3650 ff ee cc cc 88 88 00 00 00 00 00 00 00 00 00 00 &3660 33 11 00 00 00 00 00 00 ff ff ff ff 77 77 77 33 &3670 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &3680 00 00 00 00 00 00 00 00 33 33 33 33 33 33 33 33 &3690 00 00 88 88 cc cc ee ff 00 00 00 00 00 00 00 00 &36a0 00 00 00 00 00 00 11 33 33 77 77 77 ff ff ff ff ; pattern_data ; pattern_00_data &36b0 0a ; BYBYB &36b1 11 ; YBYBY &36b2 0a ; BYBYB &36b3 11 ; YBYBY &36b4 0a ; BYBYB &36b5 11 ; YBYBY &36b6 0a ; BYBYB &36b7 11 ; YBYBY &36b8 0a ; BYBYB &36b9 11 ; YBYBY &36ba 0a ; BYBYB &36bb 11 ; YBYBY &36bc 0a ; BYBYB &36bd 11 ; YBYBY &36be 0a ; BYBYB &36bf 11 ; YBYBY &36c0 0a ; BYBYB &36c1 11 ; YBYBY &36c2 0a ; BYBYB &36c3 11 ; YBYBY &36c4 0a ; BYBYB &36c5 11 ; YBYBY &36c6 0a ; BYBYB &36c7 11 ; YBYBY &36c8 0a ; BYBYB &36c9 11 ; YBYBY &36ca 0a ; BYBYB &36cb 11 ; YBYBY &36cc 0a ; BYBYB &36cd 11 ; YBYBY &36ce 0a ; BYBYB &36cf 11 ; YBYBY ; pattern_01_data &36d0 0a ; BYBYB &36d1 10 ; B B &36d2 0a ; BYBYB &36d3 01 ; Y Y Y &36d4 0a ; BYBYB &36d5 10 ; B B &36d6 0a ; BYBYB &36d7 01 ; Y Y Y &36d8 0a ; BYBYB &36d9 17 ; GBGBG &36da 0a ; BYBYB &36db 01 ; Y Y Y &36dc 02 ; B B B &36dd 01 ; Y Y Y &36de 02 ; B B B &36df 01 ; Y Y Y &36e0 02 ; B B B &36e1 01 ; Y Y Y &36e2 02 ; B B B &36e3 01 ; Y Y Y &36e4 02 ; B B B &36e5 01 ; Y Y Y &36e6 02 ; B B B &36e7 01 ; Y Y Y &36e8 0a ; BYBYB &36e9 11 ; YBYBY &36ea 0c ; MYMYM &36eb 19 ; YWYWY &36ec 22 ; BMBMB &36ed 19 ; YWYWY &36ee 0c ; MYMYM &36ef 11 ; YBYBY ; pattern_02_data &36f0 0a ; BYBYB &36f1 11 ; YBYBY &36f2 24 ; MMMMM &36f3 00 ; &36f4 0a ; BYBYB &36f5 11 ; YBYBY &36f6 0a ; BYBYB &36f7 24 ; MMMMM &36f8 00 ; &36f9 11 ; YBYBY &36fa 0a ; BYBYB &36fb 11 ; YBYBY &36fc 24 ; MMMMM &36fd 00 ; &36fe 0a ; BYBYB &36ff 11 ; YBYBY &3700 0a ; BYBYB &3701 24 ; MMMMM &3702 00 ; &3703 11 ; YBYBY &3704 0a ; BYBYB &3705 11 ; YBYBY &3706 0d ; RYRYR &3707 11 ; YBYBY &3708 24 ; MMMMM &3709 11 ; YBYBY &370a 0d ; RYRYR &370b 11 ; YBYBY &370c 0a ; BYBYB &370d 15 ; RBRBR &370e 0a ; BYBYB &370f 29 ; YRYRY ; pattern_03_data &3710 0a ; BYBYB &3711 24 ; MMMMM &3712 0a ; BYBYB &3713 15 ; RBRBR &3714 0a ; BYBYB &3715 24 ; MMMMM &3716 0a ; BYBYB &3717 15 ; RBRBR &3718 0a ; BYBYB &3719 24 ; MMMMM &371a 0a ; BYBYB &371b 11 ; YBYBY &371c 08 ; Y Y &371d 10 ; B B &371e 08 ; Y Y &371f 10 ; B B &3720 08 ; Y Y &3721 10 ; B B &3722 08 ; Y Y &3723 10 ; B B &3724 08 ; Y Y &3725 10 ; B B &3726 08 ; Y Y &3727 11 ; YBYBY &3728 0a ; BYBYB &3729 29 ; YRYRY &372a 0a ; BYBYB &372b 1b ; WWWWW &372c 1b ; WWWWW &372d 11 ; YBYBY &372e 0a ; BYBYB &372f 11 ; YBYBY ; pattern_04_data &3730 0a ; BYBYB &3731 11 ; YBYBY &3732 0a ; BYBYB &3733 20 ; M M &3734 00 ; &3735 38 ; G G &3736 0a ; BYBYB &3737 11 ; YBYBY &3738 0a ; BYBYB &3739 01 ; Y Y Y &373a 02 ; B B B &373b 01 ; Y Y Y &373c 02 ; B B B &373d 01 ; Y Y Y &373e 02 ; B B B &373f 01 ; Y Y Y &3740 02 ; B B B &3741 01 ; Y Y Y &3742 02 ; B B B &3743 01 ; Y Y Y &3744 02 ; B B B &3745 11 ; YBYBY &3746 0a ; BYBYB &3747 11 ; YBYBY &3748 08 ; Y Y &3749 10 ; B B &374a 08 ; Y Y &374b 10 ; B B &374c 08 ; Y Y &374d 11 ; YBYBY &374e 0a ; BYBYB &374f 11 ; YBYBY ; pattern_05_data &3750 3a ; BGBGB &3751 17 ; GBGBG &3752 3a ; BGBGB &3753 17 ; GBGBG &3754 3a ; BGBGB &3755 17 ; GBGBG &3756 3a ; BGBGB &3757 17 ; GBGBG &3758 3a ; BGBGB &3759 17 ; GBGBG &375a 3a ; BGBGB &375b 17 ; GBGBG &375c 3a ; BGBGB &375d 17 ; GBGBG &375e 3a ; BGBGB &375f 17 ; GBGBG &3760 3a ; BGBGB &3761 17 ; GBGBG &3762 3a ; BGBGB &3763 17 ; GBGBG &3764 3a ; BGBGB &3765 17 ; GBGBG &3766 3a ; BGBGB &3767 17 ; GBGBG &3768 3a ; BGBGB &3769 17 ; GBGBG &376a 3a ; BGBGB &376b 17 ; GBGBG &376c 3a ; BGBGB &376d 17 ; GBGBG &376e 3a ; BGBGB &376f 17 ; GBGBG ; pattern_06_data &3770 0a ; BYBYB &3771 11 ; YBYBY &3772 38 ; G G &3773 38 ; G G &3774 38 ; G G &3775 38 ; G G &3776 38 ; G G &3777 38 ; G G &3778 38 ; G G &3779 38 ; G G &377a 38 ; G G &377b 38 ; G G &377c 38 ; G G &377d 11 ; YBYBY &377e 23 ; WMWMW &377f 01 ; Y Y Y &3780 07 ; G G G &3781 07 ; G G G &3782 02 ; B B B &3783 11 ; YBYBY &3784 0a ; BYBYB &3785 11 ; YBYBY &3786 0a ; BYBYB &3787 11 ; YBYBY &3788 0a ; BYBYB &3789 11 ; YBYBY &378a 0a ; BYBYB &378b 11 ; YBYBY &378c 0a ; BYBYB &378d 11 ; YBYBY &378e 0a ; BYBYB &378f 11 ; YBYBY ; pattern_07_data &3790 0a ; BYBYB &3791 11 ; YBYBY &3792 0a ; BYBYB &3793 11 ; YBYBY &3794 3f ; GGGGG &3795 24 ; MMMMM &3796 00 ; &3797 00 ; &3798 3f ; GGGGG &3799 3f ; GGGGG &379a 2d ; RRRRR &379b 24 ; MMMMM &379c 00 ; &379d 00 ; &379e 3f ; GGGGG &379f 3f ; GGGGG &37a0 24 ; MMMMM &37a1 00 ; &37a2 38 ; G G &37a3 38 ; G G &37a4 3a ; BGBGB &37a5 11 ; YBYBY &37a6 08 ; Y Y &37a7 11 ; YBYBY &37a8 02 ; B B B &37a9 11 ; YBYBY &37aa 08 ; Y Y &37ab 11 ; YBYBY &37ac 02 ; B B B &37ad 11 ; YBYBY &37ae 08 ; Y Y &37af 11 ; YBYBY ; pattern_08_data &37b0 3a ; BGBGB &37b1 39 ; YGYGY &37b2 3a ; BGBGB &37b3 39 ; YGYGY &37b4 3a ; BGBGB &37b5 39 ; YGYGY &37b6 3a ; BGBGB &37b7 39 ; YGYGY &37b8 3a ; BGBGB &37b9 39 ; YGYGY &37ba 0d ; RYRYR &37bb 29 ; YRYRY &37bc 0d ; RYRYR &37bd 11 ; YBYBY &37be 08 ; Y Y &37bf 10 ; B B &37c0 22 ; BMBMB &37c1 01 ; Y Y Y &37c2 02 ; B B B &37c3 11 ; YBYBY &37c4 08 ; Y Y &37c5 10 ; B B &37c6 22 ; BMBMB &37c7 01 ; Y Y Y &37c8 02 ; B B B &37c9 11 ; YBYBY &37ca 0f ; GYGYG &37cb 17 ; GBGBG &37cc 0f ; GYGYG &37cd 15 ; RBRBR &37ce 0a ; BYBYB &37cf 11 ; YBYBY ; pattern_09_data &37d0 39 ; YGYGY &37d1 08 ; Y Y &37d2 38 ; G G &37d3 10 ; B B &37d4 38 ; G G &37d5 08 ; Y Y &37d6 38 ; G G &37d7 10 ; B B &37d8 38 ; G G &37d9 08 ; Y Y &37da 38 ; G G &37db 10 ; B B &37dc 38 ; G G &37dd 08 ; Y Y &37de 38 ; G G &37df 10 ; B B &37e0 38 ; G G &37e1 08 ; Y Y &37e2 38 ; G G &37e3 10 ; B B &37e4 38 ; G G &37e5 08 ; Y Y &37e6 38 ; G G &37e7 10 ; B B &37e8 38 ; G G &37e9 08 ; Y Y &37ea 38 ; G G &37eb 10 ; B B &37ec 38 ; G G &37ed 28 ; R R &37ee 2a ; BRBRB &37ef 29 ; YRYRY ; pattern_0a_data &37f0 0a ; BYBYB &37f1 10 ; B B &37f2 0a ; BYBYB &37f3 01 ; Y Y Y &37f4 0a ; BYBYB &37f5 10 ; B B &37f6 0a ; BYBYB &37f7 01 ; Y Y Y &37f8 0a ; BYBYB &37f9 10 ; B B &37fa 0a ; BYBYB &37fb 01 ; Y Y Y &37fc 0a ; BYBYB &37fd 10 ; B B &37fe 0a ; BYBYB &37ff 01 ; Y Y Y &3800 0a ; BYBYB &3801 17 ; GBGBG &3802 0f ; GYGYG &3803 17 ; GBGBG &3804 0f ; GYGYG &3805 17 ; GBGBG &3806 3a ; BGBGB &3807 39 ; YGYGY &3808 3a ; BGBGB &3809 39 ; YGYGY &380a 2d ; RRRRR &380b 11 ; YBYBY &380c 18 ; W W &380d 11 ; YBYBY &380e 02 ; B B B &380f 11 ; YBYBY ; pattern_0b_data &3810 2f ; GRGRG &3811 3d ; RGRGR &3812 2f ; GRGRG &3813 3d ; RGRGR &3814 2f ; GRGRG &3815 3d ; RGRGR &3816 2f ; GRGRG &3817 3d ; RGRGR &3818 2f ; GRGRG &3819 3d ; RGRGR &381a 2f ; GRGRG &381b 3d ; RGRGR &381c 2f ; GRGRG &381d 3d ; RGRGR &381e 2f ; GRGRG &381f 3d ; RGRGR &3820 2f ; GRGRG &3821 3d ; RGRGR &3822 2f ; GRGRG &3823 3d ; RGRGR &3824 2f ; GRGRG &3825 3d ; RGRGR &3826 2f ; GRGRG &3827 3d ; RGRGR &3828 2f ; GRGRG &3829 3d ; RGRGR &382a 2f ; GRGRG &382b 3d ; RGRGR &382c 2f ; GRGRG &382d 3d ; RGRGR &382e 2f ; GRGRG &382f 3d ; RGRGR ; pattern_0c_data &3830 3a ; BGBGB &3831 10 ; B B &3832 08 ; Y Y &3833 39 ; YGYGY &3834 08 ; Y Y &3835 10 ; B B &3836 3a ; BGBGB &3837 10 ; B B &3838 08 ; Y Y &3839 39 ; YGYGY &383a 08 ; Y Y &383b 10 ; B B &383c 3a ; BGBGB &383d 10 ; B B &383e 08 ; Y Y &383f 39 ; YGYGY &3840 08 ; Y Y &3841 10 ; B B &3842 0a ; BYBYB &3843 11 ; YBYBY &3844 0a ; BYBYB &3845 24 ; MMMMM &3846 08 ; Y Y &3847 01 ; Y Y Y &3848 08 ; Y Y &3849 11 ; YBYBY &384a 0a ; BYBYB &384b 11 ; YBYBY &384c 0a ; BYBYB &384d 11 ; YBYBY &384e 0a ; BYBYB &384f 11 ; YBYBY ; pattern_0d_data &3850 3f ; GGGGG &3851 3f ; GGGGG &3852 3f ; GGGGG &3853 3f ; GGGGG &3854 3f ; GGGGG &3855 24 ; MMMMM &3856 00 ; &3857 00 ; &3858 00 ; &3859 10 ; B B &385a 08 ; Y Y &385b 10 ; B B &385c 08 ; Y Y &385d 10 ; B B &385e 08 ; Y Y &385f 10 ; B B &3860 08 ; Y Y &3861 10 ; B B &3862 08 ; Y Y &3863 10 ; B B &3864 0a ; BYBYB &3865 39 ; YGYGY &3866 3a ; BGBGB &3867 17 ; GBGBG &3868 0a ; BYBYB &3869 01 ; Y Y Y &386a 02 ; B B B &386b 01 ; Y Y Y &386c 02 ; B B B &386d 01 ; Y Y Y &386e 0a ; BYBYB &386f 11 ; YBYBY ; pattern_0e_data &3870 0a ; BYBYB &3871 11 ; YBYBY &3872 0a ; BYBYB &3873 17 ; GBGBG &3874 0f ; GYGYG &3875 10 ; B B &3876 20 ; M M &3877 00 ; &3878 08 ; Y Y &3879 11 ; YBYBY &387a 3a ; BGBGB &387b 39 ; YGYGY &387c 3a ; BGBGB &387d 38 ; G G &387e 38 ; G G &387f 20 ; M M &3880 00 ; &3881 00 ; &3882 00 ; &3883 00 ; &3884 0a ; BYBYB &3885 2d ; RRRRR &3886 2d ; RRRRR &3887 2d ; RRRRR &3888 0a ; BYBYB &3889 10 ; B B &388a 08 ; Y Y &388b 10 ; B B &388c 0a ; BYBYB &388d 01 ; Y Y Y &388e 02 ; B B B &388f 11 ; YBYBY ; pattern_0f_data &3890 0a ; BYBYB &3891 11 ; YBYBY &3892 3a ; BGBGB &3893 11 ; YBYBY &3894 0f ; GYGYG &3895 11 ; YBYBY &3896 3a ; BGBGB &3897 11 ; YBYBY &3898 0f ; GYGYG &3899 11 ; YBYBY &389a 3a ; BGBGB &389b 11 ; YBYBY &389c 0f ; GYGYG &389d 11 ; YBYBY &389e 24 ; MMMMM &389f 11 ; YBYBY &38a0 0a ; BYBYB &38a1 24 ; MMMMM &38a2 0a ; BYBYB &38a3 11 ; YBYBY &38a4 24 ; MMMMM &38a5 11 ; YBYBY &38a6 0a ; BYBYB &38a7 2d ; RRRRR &38a8 2d ; RRRRR &38a9 2d ; RRRRR &38aa 24 ; MMMMM &38ab 00 ; &38ac 08 ; Y Y &38ad 18 ; W W &38ae 0a ; BYBYB &38af 11 ; YBYBY ; pattern_10_data &38b0 3f ; GGGGG &38b1 3f ; GGGGG &38b2 3f ; GGGGG &38b3 3f ; GGGGG &38b4 3f ; GGGGG &38b5 3f ; GGGGG &38b6 3f ; GGGGG &38b7 3f ; GGGGG &38b8 3f ; GGGGG &38b9 24 ; MMMMM &38ba 00 ; &38bb 00 ; &38bc 00 ; &38bd 00 ; &38be 00 ; &38bf 00 ; &38c0 00 ; &38c1 00 ; &38c2 00 ; &38c3 00 ; &38c4 00 ; &38c5 00 ; &38c6 2d ; RRRRR &38c7 2d ; RRRRR &38c8 2d ; RRRRR &38c9 2d ; RRRRR &38ca 2d ; RRRRR &38cb 11 ; YBYBY &38cc 02 ; B B B &38cd 01 ; Y Y Y &38ce 02 ; B B B &38cf 11 ; YBYBY ; pattern_11_data &38d0 0a ; BYBYB &38d1 10 ; B B &38d2 08 ; Y Y &38d3 10 ; B B &38d4 3a ; BGBGB &38d5 01 ; Y Y Y &38d6 02 ; B B B &38d7 01 ; Y Y Y &38d8 02 ; B B B &38d9 17 ; GBGBG &38da 08 ; Y Y &38db 10 ; B B &38dc 08 ; Y Y &38dd 10 ; B B &38de 3a ; BGBGB &38df 11 ; YBYBY &38e0 24 ; MMMMM &38e1 00 ; &38e2 00 ; &38e3 00 ; &38e4 0a ; BYBYB &38e5 10 ; B B &38e6 0a ; BYBYB &38e7 01 ; Y Y Y &38e8 0a ; BYBYB &38e9 10 ; B B &38ea 0a ; BYBYB &38eb 01 ; Y Y Y &38ec 0a ; BYBYB &38ed 10 ; B B &38ee 0a ; BYBYB &38ef 11 ; YBYBY ; pattern_12_data &38f0 3f ; GGGGG &38f1 3f ; GGGGG &38f2 0f ; GYGYG &38f3 39 ; YGYGY &38f4 0f ; GYGYG &38f5 39 ; YGYGY &38f6 22 ; BMBMB &38f7 00 ; &38f8 00 ; &38f9 10 ; B B &38fa 08 ; Y Y &38fb 2d ; RRRRR &38fc 2d ; RRRRR &38fd 01 ; Y Y Y &38fe 02 ; B B B &38ff 01 ; Y Y Y &3900 3a ; BGBGB &3901 38 ; G G &3902 38 ; G G &3903 38 ; G G &3904 08 ; Y Y &3905 10 ; B B &3906 08 ; Y Y &3907 11 ; YBYBY &3908 0a ; BYBYB &3909 39 ; YGYGY &390a 0f ; GYGYG &390b 11 ; YBYBY &390c 0d ; RYRYR &390d 29 ; YRYRY &390e 1d ; RWRWR &390f 29 ; YRYRY ; pattern_13_data &3910 0b ; WYWYW &3911 11 ; YBYBY &3912 1a ; BWBWB &3913 11 ; YBYBY &3914 0b ; WYWYW &3915 11 ; YBYBY &3916 1a ; BWBWB &3917 11 ; YBYBY &3918 0b ; WYWYW &3919 11 ; YBYBY &391a 1a ; BWBWB &391b 11 ; YBYBY &391c 0a ; BYBYB &391d 10 ; B B &391e 08 ; Y Y &391f 10 ; B B &3920 08 ; Y Y &3921 10 ; B B &3922 08 ; Y Y &3923 10 ; B B &3924 08 ; Y Y &3925 39 ; YGYGY &3926 3a ; BGBGB &3927 39 ; YGYGY &3928 22 ; BMBMB &3929 01 ; Y Y Y &392a 02 ; B B B &392b 01 ; Y Y Y &392c 02 ; B B B &392d 01 ; Y Y Y &392e 2a ; BRBRB &392f 11 ; YBYBY ; pattern_14_data &3930 0a ; BYBYB &3931 38 ; G G &3932 20 ; M M &3933 00 ; &3934 00 ; &3935 00 ; &3936 00 ; &3937 00 ; &3938 08 ; Y Y &3939 38 ; G G &393a 20 ; M M &393b 00 ; &393c 00 ; &393d 00 ; &393e 00 ; &393f 00 ; &3940 08 ; Y Y &3941 38 ; G G &3942 20 ; M M &3943 00 ; &3944 00 ; &3945 00 ; &3946 00 ; &3947 00 ; &3948 08 ; Y Y &3949 38 ; G G &394a 20 ; M M &394b 00 ; &394c 00 ; &394d 10 ; B B &394e 08 ; Y Y &394f 11 ; YBYBY ; pattern_15_data &3950 0f ; GYGYG &3951 39 ; YGYGY &3952 0f ; GYGYG &3953 39 ; YGYGY &3954 0f ; GYGYG &3955 39 ; YGYGY &3956 0f ; GYGYG &3957 10 ; B B &3958 08 ; Y Y &3959 11 ; YBYBY &395a 02 ; B B B &395b 01 ; Y Y Y &395c 02 ; B B B &395d 11 ; YBYBY &395e 38 ; G G &395f 38 ; G G &3960 20 ; M M &3961 00 ; &3962 00 ; &3963 01 ; Y Y Y &3964 0a ; BYBYB &3965 13 ; WBWBW &3966 1a ; BWBWB &3967 13 ; WBWBW &3968 1a ; BWBWB &3969 13 ; WBWBW &396a 3f ; GGGGG &396b 24 ; MMMMM &396c 00 ; &396d 00 ; &396e 03 ; W W W &396f 11 ; YBYBY ; pattern_16_data &3970 0a ; BYBYB &3971 11 ; YBYBY &3972 0a ; BYBYB &3973 17 ; GBGBG &3974 3a ; BGBGB &3975 17 ; GBGBG &3976 0c ; MYMYM &3977 20 ; M M &3978 00 ; &3979 00 ; &397a 02 ; B B B &397b 11 ; YBYBY &397c 0a ; BYBYB &397d 13 ; WBWBW &397e 1a ; BWBWB &397f 11 ; YBYBY &3980 36 ; CCCCC &3981 34 ; MCMCM &3982 00 ; &3983 00 ; &3984 0a ; BYBYB &3985 11 ; YBYBY &3986 2d ; RRRRR &3987 2d ; RRRRR &3988 0a ; BYBYB &3989 11 ; YBYBY &398a 0a ; BYBYB &398b 17 ; GBGBG &398c 0a ; BYBYB &398d 39 ; YGYGY &398e 0a ; BYBYB &398f 11 ; YBYBY ; pattern_17_data &3990 0b ; WYWYW &3991 19 ; YWYWY &3992 0b ; WYWYW &3993 19 ; YWYWY &3994 0b ; WYWYW &3995 19 ; YWYWY &3996 0a ; BYBYB &3997 11 ; YBYBY &3998 3f ; GGGGG &3999 24 ; MMMMM &399a 00 ; &399b 00 ; &399c 08 ; Y Y &399d 10 ; B B &399e 08 ; Y Y &399f 38 ; G G &39a0 08 ; Y Y &39a1 10 ; B B &39a2 38 ; G G &39a3 10 ; B B &39a4 08 ; Y Y &39a5 38 ; G G &39a6 08 ; Y Y &39a7 10 ; B B &39a8 38 ; G G &39a9 10 ; B B &39aa 08 ; Y Y &39ab 38 ; G G &39ac 08 ; Y Y &39ad 11 ; YBYBY &39ae 0a ; BYBYB &39af 11 ; YBYBY ; pattern_18_data &39b0 3a ; BGBGB &39b1 38 ; G G &39b2 38 ; G G &39b3 38 ; G G &39b4 38 ; G G &39b5 20 ; M M &39b6 00 ; &39b7 00 ; &39b8 18 ; W W &39b9 18 ; W W &39ba 18 ; W W &39bb 11 ; YBYBY &39bc 0a ; BYBYB &39bd 11 ; YBYBY &39be 24 ; MMMMM &39bf 00 ; &39c0 00 ; &39c1 08 ; Y Y &39c2 08 ; Y Y &39c3 08 ; Y Y &39c4 08 ; Y Y &39c5 08 ; Y Y &39c6 0a ; BYBYB &39c7 11 ; YBYBY &39c8 02 ; B B B &39c9 01 ; Y Y Y &39ca 02 ; B B B &39cb 01 ; Y Y Y &39cc 02 ; B B B &39cd 01 ; Y Y Y &39ce 02 ; B B B &39cf 11 ; YBYBY ; pattern_19_data &39d0 0a ; BYBYB &39d1 11 ; YBYBY &39d2 2f ; GRGRG &39d3 2f ; GRGRG &39d4 2f ; GRGRG &39d5 2f ; GRGRG &39d6 2f ; GRGRG &39d7 2f ; GRGRG &39d8 2f ; GRGRG &39d9 2f ; GRGRG &39da 2f ; GRGRG &39db 2f ; GRGRG &39dc 2f ; GRGRG &39dd 2f ; GRGRG &39de 2f ; GRGRG &39df 2f ; GRGRG &39e0 0a ; BYBYB &39e1 11 ; YBYBY &39e2 24 ; MMMMM &39e3 00 ; &39e4 00 ; &39e5 00 ; &39e6 00 ; &39e7 00 ; &39e8 0a ; BYBYB &39e9 11 ; YBYBY &39ea 2d ; RRRRR &39eb 2d ; RRRRR &39ec 2d ; RRRRR &39ed 11 ; YBYBY &39ee 0a ; BYBYB &39ef 11 ; YBYBY ; pattern_1a_data &39f0 0a ; BYBYB &39f1 39 ; YGYGY &39f2 0a ; BYBYB &39f3 29 ; YRYRY &39f4 0a ; BYBYB &39f5 11 ; YBYBY &39f6 0a ; BYBYB &39f7 16 ; CBCBC &39f8 32 ; BCBCB &39f9 16 ; CBCBC &39fa 32 ; BCBCB &39fb 16 ; CBCBC &39fc 32 ; BCBCB &39fd 16 ; CBCBC &39fe 32 ; BCBCB &39ff 01 ; Y Y Y &3a00 02 ; B B B &3a01 01 ; Y Y Y &3a02 02 ; B B B &3a03 01 ; Y Y Y &3a04 02 ; B B B &3a05 11 ; YBYBY &3a06 0b ; WYWYW &3a07 19 ; YWYWY &3a08 0a ; BYBYB &3a09 19 ; YWYWY &3a0a 0b ; WYWYW &3a0b 11 ; YBYBY &3a0c 0b ; WYWYW &3a0d 19 ; YWYWY &3a0e 0a ; BYBYB &3a0f 11 ; YBYBY ; pattern_1b_data &3a10 0a ; BYBYB &3a11 11 ; YBYBY &3a12 0a ; BYBYB &3a13 11 ; YBYBY &3a14 02 ; B B B &3a15 01 ; Y Y Y &3a16 02 ; B B B &3a17 17 ; GBGBG &3a18 0f ; GYGYG &3a19 01 ; Y Y Y &3a1a 02 ; B B B &3a1b 01 ; Y Y Y &3a1c 0f ; GYGYG &3a1d 17 ; GBGBG &3a1e 02 ; B B B &3a1f 01 ; Y Y Y &3a20 02 ; B B B &3a21 17 ; GBGBG &3a22 0f ; GYGYG &3a23 10 ; B B &3a24 08 ; Y Y &3a25 10 ; B B &3a26 0a ; BYBYB &3a27 11 ; YBYBY &3a28 0b ; WYWYW &3a29 19 ; YWYWY &3a2a 0b ; WYWYW &3a2b 19 ; YWYWY &3a2c 0a ; BYBYB &3a2d 19 ; YWYWY &3a2e 1a ; BWBWB &3a2f 13 ; WBWBW ; pattern_1c_data &3a30 0a ; BYBYB &3a31 13 ; WBWBW &3a32 0f ; GYGYG &3a33 13 ; WBWBW &3a34 0f ; GYGYG &3a35 13 ; WBWBW &3a36 0f ; GYGYG &3a37 13 ; WBWBW &3a38 08 ; Y Y &3a39 10 ; B B &3a3a 08 ; Y Y &3a3b 10 ; B B &3a3c 08 ; Y Y &3a3d 10 ; B B &3a3e 08 ; Y Y &3a3f 10 ; B B &3a40 08 ; Y Y &3a41 11 ; YBYBY &3a42 02 ; B B B &3a43 01 ; Y Y Y &3a44 02 ; B B B &3a45 01 ; Y Y Y &3a46 1a ; BWBWB &3a47 19 ; YWYWY &3a48 1a ; BWBWB &3a49 39 ; YGYGY &3a4a 3a ; BGBGB &3a4b 19 ; YWYWY &3a4c 0b ; WYWYW &3a4d 13 ; WBWBW &3a4e 02 ; B B B &3a4f 11 ; YBYBY ; pattern_1d_data &3a50 0a ; BYBYB &3a51 39 ; YGYGY &3a52 3a ; BGBGB &3a53 39 ; YGYGY &3a54 3a ; BGBGB &3a55 39 ; YGYGY &3a56 1a ; BWBWB &3a57 01 ; Y Y Y &3a58 02 ; B B B &3a59 01 ; Y Y Y &3a5a 02 ; B B B &3a5b 19 ; YWYWY &3a5c 1a ; BWBWB &3a5d 19 ; YWYWY &3a5e 1a ; BWBWB &3a5f 19 ; YWYWY &3a60 0b ; WYWYW &3a61 13 ; WBWBW &3a62 0c ; MYMYM &3a63 14 ; MBMBM &3a64 0c ; MYMYM &3a65 14 ; MBMBM &3a66 0c ; MYMYM &3a67 14 ; MBMBM &3a68 0c ; MYMYM &3a69 19 ; YWYWY &3a6a 1a ; BWBWB &3a6b 19 ; YWYWY &3a6c 0b ; WYWYW &3a6d 19 ; YWYWY &3a6e 0a ; BYBYB &3a6f 11 ; YBYBY ; pattern_1e_data &3a70 0a ; BYBYB &3a71 19 ; YWYWY &3a72 3b ; WGWGW &3a73 19 ; YWYWY &3a74 1a ; BWBWB &3a75 19 ; YWYWY &3a76 1a ; BWBWB &3a77 10 ; B B &3a78 08 ; Y Y &3a79 10 ; B B &3a7a 08 ; Y Y &3a7b 11 ; YBYBY &3a7c 02 ; B B B &3a7d 11 ; YBYBY &3a7e 08 ; Y Y &3a7f 11 ; YBYBY &3a80 02 ; B B B &3a81 11 ; YBYBY &3a82 08 ; Y Y &3a83 11 ; YBYBY &3a84 02 ; B B B &3a85 11 ; YBYBY &3a86 08 ; Y Y &3a87 11 ; YBYBY &3a88 1f ; GWGWG &3a89 1f ; GWGWG &3a8a 3b ; WGWGW &3a8b 3b ; WGWGW &3a8c 1f ; GWGWG &3a8d 1f ; GWGWG &3a8e 0a ; BYBYB &3a8f 11 ; YBYBY ; pattern_1f_data &3a90 0a ; BYBYB &3a91 17 ; GBGBG &3a92 0f ; GYGYG &3a93 17 ; GBGBG &3a94 3a ; BGBGB &3a95 39 ; YGYGY &3a96 0c ; MYMYM &3a97 00 ; &3a98 00 ; &3a99 00 ; &3a9a 0a ; BYBYB &3a9b 11 ; YBYBY &3a9c 0a ; BYBYB &3a9d 11 ; YBYBY &3a9e 2d ; RRRRR &3a9f 2d ; RRRRR &3aa0 2d ; RRRRR &3aa1 2d ; RRRRR &3aa2 3f ; GGGGG &3aa3 2d ; RRRRR &3aa4 3f ; GGGGG &3aa5 2d ; RRRRR &3aa6 3f ; GGGGG &3aa7 2d ; RRRRR &3aa8 3f ; GGGGG &3aa9 2d ; RRRRR &3aaa 3f ; GGGGG &3aab 2d ; RRRRR &3aac 3f ; GGGGG &3aad 2d ; RRRRR &3aae 0a ; BYBYB &3aaf 11 ; YBYBY ; pattern_20_data &3ab0 24 ; MMMMM &3ab1 10 ; B B &3ab2 02 ; B B B &3ab3 20 ; M M &3ab4 02 ; B B B &3ab5 10 ; B B &3ab6 02 ; B B B &3ab7 11 ; YBYBY &3ab8 3f ; GGGGG &3ab9 3f ; GGGGG &3aba 2d ; RRRRR &3abb 3d ; RGRGR &3abc 2f ; GRGRG &3abd 19 ; YWYWY &3abe 0b ; WYWYW &3abf 11 ; YBYBY &3ac0 1a ; BWBWB &3ac1 13 ; WBWBW &3ac2 1a ; BWBWB &3ac3 11 ; YBYBY &3ac4 0a ; BYBYB &3ac5 01 ; Y Y Y &3ac6 0a ; BYBYB &3ac7 11 ; YBYBY &3ac8 02 ; B B B &3ac9 11 ; YBYBY &3aca 02 ; B B B &3acb 11 ; YBYBY &3acc 08 ; Y Y &3acd 11 ; YBYBY &3ace 3f ; GGGGG &3acf 11 ; YBYBY ; pattern_21_data &3ad0 0a ; BYBYB &3ad1 13 ; WBWBW &3ad2 1a ; BWBWB &3ad3 13 ; WBWBW &3ad4 38 ; G G &3ad5 10 ; B B &3ad6 38 ; G G &3ad7 10 ; B B &3ad8 38 ; G G &3ad9 10 ; B B &3ada 38 ; G G &3adb 10 ; B B &3adc 3f ; GGGGG &3add 01 ; Y Y Y &3ade 02 ; B B B &3adf 05 ; R R R &3ae0 02 ; B B B &3ae1 01 ; Y Y Y &3ae2 02 ; B B B &3ae3 01 ; Y Y Y &3ae4 05 ; R R R &3ae5 01 ; Y Y Y &3ae6 02 ; B B B &3ae7 01 ; Y Y Y &3ae8 02 ; B B B &3ae9 05 ; R R R &3aea 02 ; B B B &3aeb 01 ; Y Y Y &3aec 02 ; B B B &3aed 01 ; Y Y Y &3aee 0a ; BYBYB &3aef 11 ; YBYBY ; pattern_22_data &3af0 0a ; BYBYB &3af1 39 ; YGYGY &3af2 0a ; BYBYB &3af3 17 ; GBGBG &3af4 0a ; BYBYB &3af5 39 ; YGYGY &3af6 0a ; BYBYB &3af7 17 ; GBGBG &3af8 0a ; BYBYB &3af9 39 ; YGYGY &3afa 0a ; BYBYB &3afb 17 ; GBGBG &3afc 0a ; BYBYB &3afd 39 ; YGYGY &3afe 0a ; BYBYB &3aff 17 ; GBGBG &3b00 0a ; BYBYB &3b01 39 ; YGYGY &3b02 0a ; BYBYB &3b03 17 ; GBGBG &3b04 0a ; BYBYB &3b05 24 ; MMMMM &3b06 1b ; WWWWW &3b07 1b ; WWWWW &3b08 1b ; WWWWW &3b09 1b ; WWWWW &3b0a 1b ; WWWWW &3b0b 1b ; WWWWW &3b0c 1b ; WWWWW &3b0d 11 ; YBYBY &3b0e 18 ; W W &3b0f 11 ; YBYBY ; pattern_23_data &3b10 0a ; BYBYB &3b11 10 ; B B &3b12 08 ; Y Y &3b13 10 ; B B &3b14 0a ; BYBYB &3b15 01 ; Y Y Y &3b16 0a ; BYBYB &3b17 10 ; B B &3b18 08 ; Y Y &3b19 10 ; B B &3b1a 0a ; BYBYB &3b1b 01 ; Y Y Y &3b1c 0a ; BYBYB &3b1d 10 ; B B &3b1e 08 ; Y Y &3b1f 10 ; B B &3b20 0a ; BYBYB &3b21 01 ; Y Y Y &3b22 0a ; BYBYB &3b23 10 ; B B &3b24 08 ; Y Y &3b25 10 ; B B &3b26 0a ; BYBYB &3b27 13 ; WBWBW &3b28 0a ; BYBYB &3b29 19 ; YWYWY &3b2a 0a ; BYBYB &3b2b 13 ; WBWBW &3b2c 0a ; BYBYB &3b2d 15 ; RBRBR &3b2e 2a ; BRBRB &3b2f 11 ; YBYBY ; pattern_24_data &3b30 0a ; BYBYB &3b31 11 ; YBYBY &3b32 02 ; B B B &3b33 11 ; YBYBY &3b34 3f ; GGGGG &3b35 2d ; RRRRR &3b36 3f ; GGGGG &3b37 2d ; RRRRR &3b38 3f ; GGGGG &3b39 2d ; RRRRR &3b3a 0a ; BYBYB &3b3b 01 ; Y Y Y &3b3c 02 ; B B B &3b3d 01 ; Y Y Y &3b3e 02 ; B B B &3b3f 11 ; YBYBY &3b40 1c ; MWMWM &3b41 23 ; WMWMW &3b42 1c ; MWMWM &3b43 23 ; WMWMW &3b44 1c ; MWMWM &3b45 23 ; WMWMW &3b46 1c ; MWMWM &3b47 23 ; WMWMW &3b48 0a ; BYBYB &3b49 13 ; WBWBW &3b4a 0a ; BYBYB &3b4b 19 ; YWYWY &3b4c 1a ; BWBWB &3b4d 19 ; YWYWY &3b4e 0a ; BYBYB &3b4f 11 ; YBYBY ; pattern_25_data &3b50 0a ; BYBYB &3b51 38 ; G G &3b52 38 ; G G &3b53 39 ; YGYGY &3b54 3a ; BGBGB &3b55 01 ; Y Y Y &3b56 02 ; B B B &3b57 01 ; Y Y Y &3b58 02 ; B B B &3b59 01 ; Y Y Y &3b5a 02 ; B B B &3b5b 11 ; YBYBY &3b5c 0f ; GYGYG &3b5d 1c ; MWMWM &3b5e 0f ; GYGYG &3b5f 1c ; MWMWM &3b60 0f ; GYGYG &3b61 1c ; MWMWM &3b62 0a ; BYBYB &3b63 11 ; YBYBY &3b64 2d ; RRRRR &3b65 2d ; RRRRR &3b66 0a ; BYBYB &3b67 2d ; RRRRR &3b68 0a ; BYBYB &3b69 2d ; RRRRR &3b6a 0a ; BYBYB &3b6b 2d ; RRRRR &3b6c 0a ; BYBYB &3b6d 2d ; RRRRR &3b6e 0a ; BYBYB &3b6f 11 ; YBYBY ; pattern_26_data &3b70 0f ; GYGYG &3b71 17 ; GBGBG &3b72 1f ; GWGWG &3b73 17 ; GBGBG &3b74 0f ; GYGYG &3b75 17 ; GBGBG &3b76 1f ; GWGWG &3b77 17 ; GBGBG &3b78 0f ; GYGYG &3b79 17 ; GBGBG &3b7a 1f ; GWGWG &3b7b 17 ; GBGBG &3b7c 0f ; GYGYG &3b7d 17 ; GBGBG &3b7e 1f ; GWGWG &3b7f 17 ; GBGBG &3b80 0f ; GYGYG &3b81 17 ; GBGBG &3b82 1f ; GWGWG &3b83 17 ; GBGBG &3b84 0f ; GYGYG &3b85 17 ; GBGBG &3b86 1f ; GWGWG &3b87 17 ; GBGBG &3b88 0f ; GYGYG &3b89 17 ; GBGBG &3b8a 1f ; GWGWG &3b8b 17 ; GBGBG &3b8c 0f ; GYGYG &3b8d 17 ; GBGBG &3b8e 1f ; GWGWG &3b8f 17 ; GBGBG ; pattern_27_data &3b90 0a ; BYBYB &3b91 19 ; YWYWY &3b92 08 ; Y Y &3b93 39 ; YGYGY &3b94 08 ; Y Y &3b95 19 ; YWYWY &3b96 08 ; Y Y &3b97 39 ; YGYGY &3b98 08 ; Y Y &3b99 19 ; YWYWY &3b9a 08 ; Y Y &3b9b 39 ; YGYGY &3b9c 08 ; Y Y &3b9d 19 ; YWYWY &3b9e 08 ; Y Y &3b9f 39 ; YGYGY &3ba0 08 ; Y Y &3ba1 19 ; YWYWY &3ba2 08 ; Y Y &3ba3 39 ; YGYGY &3ba4 08 ; Y Y &3ba5 19 ; YWYWY &3ba6 08 ; Y Y &3ba7 39 ; YGYGY &3ba8 08 ; Y Y &3ba9 19 ; YWYWY &3baa 08 ; Y Y &3bab 39 ; YGYGY &3bac 08 ; Y Y &3bad 19 ; YWYWY &3bae 08 ; Y Y &3baf 39 ; YGYGY ; pattern_28_data &3bb0 1f ; GWGWG &3bb1 3b ; WGWGW &3bb2 1f ; GWGWG &3bb3 3b ; WGWGW &3bb4 1f ; GWGWG &3bb5 3b ; WGWGW &3bb6 1f ; GWGWG &3bb7 3b ; WGWGW &3bb8 1f ; GWGWG &3bb9 3b ; WGWGW &3bba 1f ; GWGWG &3bbb 3b ; WGWGW &3bbc 1f ; GWGWG &3bbd 3b ; WGWGW &3bbe 1f ; GWGWG &3bbf 3b ; WGWGW &3bc0 1f ; GWGWG &3bc1 3b ; WGWGW &3bc2 1f ; GWGWG &3bc3 3b ; WGWGW &3bc4 1f ; GWGWG &3bc5 3b ; WGWGW &3bc6 1f ; GWGWG &3bc7 3b ; WGWGW &3bc8 1f ; GWGWG &3bc9 3b ; WGWGW &3bca 1f ; GWGWG &3bcb 3b ; WGWGW &3bcc 1f ; GWGWG &3bcd 3b ; WGWGW &3bce 1f ; GWGWG &3bcf 3b ; WGWGW ; pattern_29_data &3bd0 0e ; CYCYC &3bd1 31 ; YCYCY &3bd2 0e ; CYCYC &3bd3 31 ; YCYCY &3bd4 0e ; CYCYC &3bd5 31 ; YCYCY &3bd6 0e ; CYCYC &3bd7 31 ; YCYCY &3bd8 0e ; CYCYC &3bd9 31 ; YCYCY &3bda 0e ; CYCYC &3bdb 31 ; YCYCY &3bdc 0e ; CYCYC &3bdd 31 ; YCYCY &3bde 0e ; CYCYC &3bdf 31 ; YCYCY &3be0 0e ; CYCYC &3be1 31 ; YCYCY &3be2 0e ; CYCYC &3be3 31 ; YCYCY &3be4 0e ; CYCYC &3be5 31 ; YCYCY &3be6 0e ; CYCYC &3be7 31 ; YCYCY &3be8 0e ; CYCYC &3be9 31 ; YCYCY &3bea 0e ; CYCYC &3beb 31 ; YCYCY &3bec 0e ; CYCYC &3bed 31 ; YCYCY &3bee 0e ; CYCYC &3bef 31 ; YCYCY ; pattern_2a_data &3bf0 3a ; BGBGB &3bf1 39 ; YGYGY &3bf2 3a ; BGBGB &3bf3 39 ; YGYGY &3bf4 3a ; BGBGB &3bf5 01 ; Y Y Y &3bf6 02 ; B B B &3bf7 07 ; G G G &3bf8 07 ; G G G &3bf9 01 ; Y Y Y &3bfa 24 ; MMMMM &3bfb 00 ; &3bfc 00 ; &3bfd 2d ; RRRRR &3bfe 2d ; RRRRR &3bff 2d ; RRRRR &3c00 08 ; Y Y &3c01 10 ; B B &3c02 08 ; Y Y &3c03 10 ; B B &3c04 08 ; Y Y &3c05 31 ; YCYCY &3c06 0e ; CYCYC &3c07 31 ; YCYCY &3c08 0e ; CYCYC &3c09 31 ; YCYCY &3c0a 0a ; BYBYB &3c0b 14 ; MBMBM &3c0c 20 ; M M &3c0d 00 ; &3c0e 02 ; B B B &3c0f 11 ; YBYBY ; pattern_2b_data &3c10 0a ; BYBYB &3c11 31 ; YCYCY &3c12 0a ; BYBYB &3c13 13 ; WBWBW &3c14 1a ; BWBWB &3c15 13 ; WBWBW &3c16 1a ; BWBWB &3c17 13 ; WBWBW &3c18 1a ; BWBWB &3c19 14 ; MBMBM &3c1a 08 ; Y Y &3c1b 00 ; &3c1c 00 ; &3c1d 00 ; &3c1e 0a ; BYBYB &3c1f 13 ; WBWBW &3c20 2a ; BRBRB &3c21 13 ; WBWBW &3c22 2a ; BRBRB &3c23 13 ; WBWBW &3c24 0a ; BYBYB &3c25 24 ; MMMMM &3c26 00 ; &3c27 00 ; &3c28 08 ; Y Y &3c29 10 ; B B &3c2a 08 ; Y Y &3c2b 10 ; B B &3c2c 08 ; Y Y &3c2d 10 ; B B &3c2e 08 ; Y Y &3c2f 11 ; YBYBY ; pattern_2c_data &3c30 0a ; BYBYB &3c31 10 ; B B &3c32 08 ; Y Y &3c33 10 ; B B &3c34 0a ; BYBYB &3c35 01 ; Y Y Y &3c36 0a ; BYBYB &3c37 10 ; B B &3c38 0a ; BYBYB &3c39 01 ; Y Y Y &3c3a 0a ; BYBYB &3c3b 17 ; GBGBG &3c3c 0a ; BYBYB &3c3d 39 ; YGYGY &3c3e 0a ; BYBYB &3c3f 39 ; YGYGY &3c40 0a ; BYBYB &3c41 17 ; GBGBG &3c42 0a ; BYBYB &3c43 13 ; WBWBW &3c44 1a ; BWBWB &3c45 19 ; YWYWY &3c46 0b ; WYWYW &3c47 11 ; YBYBY &3c48 0d ; RYRYR &3c49 29 ; YRYRY &3c4a 0d ; RYRYR &3c4b 31 ; YCYCY &3c4c 0e ; CYCYC &3c4d 31 ; YCYCY &3c4e 0e ; CYCYC &3c4f 31 ; YCYCY ; pattern_2d_data &3c50 0b ; WYWYW &3c51 10 ; B B &3c52 0b ; WYWYW &3c53 19 ; YWYWY &3c54 02 ; B B B &3c55 19 ; YWYWY &3c56 0b ; WYWYW &3c57 10 ; B B &3c58 0b ; WYWYW &3c59 19 ; YWYWY &3c5a 02 ; B B B &3c5b 19 ; YWYWY &3c5c 0b ; WYWYW &3c5d 10 ; B B &3c5e 0b ; WYWYW &3c5f 11 ; YBYBY &3c60 3a ; BGBGB &3c61 39 ; YGYGY &3c62 38 ; G G &3c63 38 ; G G &3c64 20 ; M M &3c65 00 ; &3c66 00 ; &3c67 01 ; Y Y Y &3c68 02 ; B B B &3c69 10 ; B B &3c6a 0a ; BYBYB &3c6b 13 ; WBWBW &3c6c 0b ; WYWYW &3c6d 19 ; YWYWY &3c6e 1e ; CWCWC &3c6f 31 ; YCYCY ; pattern_2e_data &3c70 0a ; BYBYB &3c71 16 ; CBCBC &3c72 32 ; BCBCB &3c73 26 ; CMCMC &3c74 32 ; BCBCB &3c75 06 ; C C C &3c76 00 ; &3c77 01 ; Y Y Y &3c78 02 ; B B B &3c79 39 ; YGYGY &3c7a 3b ; WGWGW &3c7b 38 ; G G &3c7c 3b ; WGWGW &3c7d 38 ; G G &3c7e 3b ; WGWGW &3c7f 38 ; G G &3c80 3b ; WGWGW &3c81 38 ; G G &3c82 3b ; WGWGW &3c83 38 ; G G &3c84 3a ; BGBGB &3c85 39 ; YGYGY &3c86 3a ; BGBGB &3c87 39 ; YGYGY &3c88 22 ; BMBMB &3c89 01 ; Y Y Y &3c8a 02 ; B B B &3c8b 01 ; Y Y Y &3c8c 0a ; BYBYB &3c8d 12 ; BBBBB &3c8e 12 ; BBBBB &3c8f 11 ; YBYBY ; pattern_2f_data &3c90 1a ; BWBWB &3c91 0e ; CYCYC &3c92 32 ; BCBCB &3c93 0e ; CYCYC &3c94 0b ; WYWYW &3c95 0e ; CYCYC &3c96 32 ; BCBCB &3c97 0e ; CYCYC &3c98 0b ; WYWYW &3c99 0e ; CYCYC &3c9a 32 ; BCBCB &3c9b 11 ; YBYBY &3c9c 08 ; Y Y &3c9d 10 ; B B &3c9e 08 ; Y Y &3c9f 10 ; B B &3ca0 20 ; M M &3ca1 00 ; &3ca2 00 ; &3ca3 10 ; B B &3ca4 08 ; Y Y &3ca5 11 ; YBYBY &3ca6 02 ; B B B &3ca7 01 ; Y Y Y &3ca8 02 ; B B B &3ca9 01 ; Y Y Y &3caa 02 ; B B B &3cab 11 ; YBYBY &3cac 0c ; MYMYM &3cad 21 ; YMYMY &3cae 0c ; MYMYM &3caf 21 ; YMYMY ; pattern_30_data &3cb0 0f ; GYGYG &3cb1 19 ; YWYWY &3cb2 0e ; CYCYC &3cb3 21 ; YMYMY &3cb4 0f ; GYGYG &3cb5 19 ; YWYWY &3cb6 0e ; CYCYC &3cb7 21 ; YMYMY &3cb8 0f ; GYGYG &3cb9 19 ; YWYWY &3cba 0e ; CYCYC &3cbb 21 ; YMYMY &3cbc 0f ; GYGYG &3cbd 19 ; YWYWY &3cbe 0e ; CYCYC &3cbf 21 ; YMYMY &3cc0 0f ; GYGYG &3cc1 19 ; YWYWY &3cc2 0e ; CYCYC &3cc3 21 ; YMYMY &3cc4 0f ; GYGYG &3cc5 19 ; YWYWY &3cc6 0e ; CYCYC &3cc7 21 ; YMYMY &3cc8 0f ; GYGYG &3cc9 19 ; YWYWY &3cca 0e ; CYCYC &3ccb 21 ; YMYMY &3ccc 0f ; GYGYG &3ccd 19 ; YWYWY &3cce 0e ; CYCYC &3ccf 21 ; YMYMY ; pattern_31_data &3cd0 0a ; BYBYB &3cd1 10 ; B B &3cd2 08 ; Y Y &3cd3 19 ; YWYWY &3cd4 02 ; B B B &3cd5 21 ; YMYMY &3cd6 08 ; Y Y &3cd7 21 ; YMYMY &3cd8 02 ; B B B &3cd9 19 ; YWYWY &3cda 08 ; Y Y &3cdb 11 ; YBYBY &3cdc 0f ; GYGYG &3cdd 16 ; CBCBC &3cde 0e ; CYCYC &3cdf 16 ; CBCBC &3ce0 0e ; CYCYC &3ce1 16 ; CBCBC &3ce2 0f ; GYGYG &3ce3 17 ; GBGBG &3ce4 0e ; CYCYC &3ce5 16 ; CBCBC &3ce6 3a ; BGBGB &3ce7 17 ; GBGBG &3ce8 32 ; BCBCB &3ce9 31 ; YCYCY &3cea 32 ; BCBCB &3ceb 04 ; M M M &3cec 08 ; Y Y &3ced 10 ; B B &3cee 0a ; BYBYB &3cef 11 ; YBYBY ; pattern_32_data &3cf0 0a ; BYBYB &3cf1 17 ; GBGBG &3cf2 22 ; BMBMB &3cf3 13 ; WBWBW &3cf4 3a ; BGBGB &3cf5 14 ; MBMBM &3cf6 1a ; BWBWB &3cf7 17 ; GBGBG &3cf8 22 ; BMBMB &3cf9 13 ; WBWBW &3cfa 3a ; BGBGB &3cfb 14 ; MBMBM &3cfc 1a ; BWBWB &3cfd 17 ; GBGBG &3cfe 22 ; BMBMB &3cff 13 ; WBWBW &3d00 3a ; BGBGB &3d01 14 ; MBMBM &3d02 1a ; BWBWB &3d03 11 ; YBYBY &3d04 24 ; MMMMM &3d05 00 ; &3d06 00 ; &3d07 00 ; &3d08 08 ; Y Y &3d09 10 ; B B &3d0a 08 ; Y Y &3d0b 10 ; B B &3d0c 08 ; Y Y &3d0d 10 ; B B &3d0e 08 ; Y Y &3d0f 11 ; YBYBY ; pattern_33_data &3d10 0c ; MYMYM &3d11 04 ; M M M &3d12 04 ; M M M &3d13 04 ; M M M &3d14 04 ; M M M &3d15 04 ; M M M &3d16 04 ; M M M &3d17 04 ; M M M &3d18 04 ; M M M &3d19 04 ; M M M &3d1a 04 ; M M M &3d1b 04 ; M M M &3d1c 04 ; M M M &3d1d 3c ; MGMGM &3d1e 3c ; MGMGM &3d1f 3c ; MGMGM &3d20 3a ; BGBGB &3d21 39 ; YGYGY &3d22 3a ; BGBGB &3d23 21 ; YMYMY &3d24 08 ; Y Y &3d25 00 ; &3d26 00 ; &3d27 00 ; &3d28 2b ; WRWRW &3d29 29 ; YRYRY &3d2a 2a ; BRBRB &3d2b 13 ; WBWBW &3d2c 1a ; BWBWB &3d2d 13 ; WBWBW &3d2e 0a ; BYBYB &3d2f 11 ; YBYBY ; pattern_34_data &3d30 0f ; GYGYG &3d31 16 ; CBCBC &3d32 32 ; BCBCB &3d33 16 ; CBCBC &3d34 32 ; BCBCB &3d35 13 ; WBWBW &3d36 32 ; BCBCB &3d37 16 ; CBCBC &3d38 32 ; BCBCB &3d39 16 ; CBCBC &3d3a 1a ; BWBWB &3d3b 16 ; CBCBC &3d3c 32 ; BCBCB &3d3d 14 ; MBMBM &3d3e 00 ; &3d3f 01 ; Y Y Y &3d40 02 ; B B B &3d41 01 ; Y Y Y &3d42 0a ; BYBYB &3d43 10 ; B B &3d44 20 ; M M &3d45 00 ; &3d46 02 ; B B B &3d47 11 ; YBYBY &3d48 0e ; CYCYC &3d49 31 ; YCYCY &3d4a 0e ; CYCYC &3d4b 21 ; YMYMY &3d4c 02 ; B B B &3d4d 01 ; Y Y Y &3d4e 08 ; Y Y &3d4f 11 ; YBYBY ; pattern_35_data &3d50 0a ; BYBYB &3d51 11 ; YBYBY &3d52 08 ; Y Y &3d53 11 ; YBYBY &3d54 0a ; BYBYB &3d55 07 ; G G G &3d56 0a ; BYBYB &3d57 10 ; B B &3d58 0a ; BYBYB &3d59 11 ; YBYBY &3d5a 08 ; Y Y &3d5b 11 ; YBYBY &3d5c 0a ; BYBYB &3d5d 01 ; Y Y Y &3d5e 02 ; B B B &3d5f 11 ; YBYBY &3d60 0a ; BYBYB &3d61 10 ; B B &3d62 38 ; G G &3d63 10 ; B B &3d64 08 ; Y Y &3d65 11 ; YBYBY &3d66 0a ; BYBYB &3d67 01 ; Y Y Y &3d68 0a ; BYBYB &3d69 10 ; B B &3d6a 0a ; BYBYB &3d6b 01 ; Y Y Y &3d6c 07 ; G G G &3d6d 01 ; Y Y Y &3d6e 02 ; B B B &3d6f 11 ; YBYBY ; pattern_36_data &3d70 0e ; CYCYC &3d71 33 ; WCWCW &3d72 0e ; CYCYC &3d73 31 ; YCYCY &3d74 26 ; CMCMC &3d75 29 ; YRYRY &3d76 1e ; CWCWC &3d77 31 ; YCYCY &3d78 0e ; CYCYC &3d79 35 ; RCRCR &3d7a 0e ; CYCYC &3d7b 33 ; WCWCW &3d7c 1e ; CWCWC &3d7d 34 ; MCMCM &3d7e 0e ; CYCYC &3d7f 31 ; YCYCY &3d80 0e ; CYCYC &3d81 33 ; WCWCW &3d82 0e ; CYCYC &3d83 21 ; YMYMY &3d84 0e ; CYCYC &3d85 19 ; YWYWY &3d86 0e ; CYCYC &3d87 35 ; RCRCR &3d88 0e ; CYCYC &3d89 33 ; WCWCW &3d8a 0e ; CYCYC &3d8b 34 ; MCMCM &3d8c 0e ; CYCYC &3d8d 31 ; YCYCY &3d8e 2e ; CRCRC &3d8f 33 ; WCWCW ; pattern_37_data &3d90 3f ; GGGGG &3d91 11 ; YBYBY &3d92 3f ; GGGGG &3d93 11 ; YBYBY &3d94 3f ; GGGGG &3d95 11 ; YBYBY &3d96 3f ; GGGGG &3d97 11 ; YBYBY &3d98 3f ; GGGGG &3d99 11 ; YBYBY &3d9a 24 ; MMMMM &3d9b 00 ; &3d9c 00 ; &3d9d 00 ; &3d9e 00 ; &3d9f 00 ; &3da0 00 ; &3da1 00 ; &3da2 00 ; &3da3 11 ; YBYBY &3da4 2d ; RRRRR &3da5 2d ; RRRRR &3da6 0d ; RYRYR &3da7 29 ; YRYRY &3da8 0d ; RYRYR &3da9 29 ; YRYRY &3daa 0d ; RYRYR &3dab 29 ; YRYRY &3dac 0a ; BYBYB &3dad 13 ; WBWBW &3dae 1a ; BWBWB &3daf 13 ; WBWBW ; pattern_38_data &3db0 0a ; BYBYB &3db1 14 ; MBMBM &3db2 20 ; M M &3db3 00 ; &3db4 2d ; RRRRR &3db5 3d ; RGRGR &3db6 2f ; GRGRG &3db7 3d ; RGRGR &3db8 2f ; GRGRG &3db9 3d ; RGRGR &3dba 08 ; Y Y &3dbb 10 ; B B &3dbc 0b ; WYWYW &3dbd 10 ; B B &3dbe 0b ; WYWYW &3dbf 10 ; B B &3dc0 0a ; BYBYB &3dc1 01 ; Y Y Y &3dc2 03 ; W W W &3dc3 01 ; Y Y Y &3dc4 0b ; WYWYW &3dc5 01 ; Y Y Y &3dc6 04 ; M M M &3dc7 00 ; &3dc8 00 ; &3dc9 00 ; &3dca 02 ; B B B &3dcb 01 ; Y Y Y &3dcc 0a ; BYBYB &3dcd 15 ; RBRBR &3dce 2a ; BRBRB &3dcf 11 ; YBYBY ; pattern_39_data &3dd0 0f ; GYGYG &3dd1 39 ; YGYGY &3dd2 0f ; GYGYG &3dd3 39 ; YGYGY &3dd4 0a ; BYBYB &3dd5 13 ; WBWBW &3dd6 1a ; BWBWB &3dd7 13 ; WBWBW &3dd8 0a ; BYBYB &3dd9 20 ; M M &3dda 00 ; &3ddb 01 ; Y Y Y &3ddc 0a ; BYBYB &3ddd 10 ; B B &3dde 08 ; Y Y &3ddf 10 ; B B &3de0 0a ; BYBYB &3de1 01 ; Y Y Y &3de2 02 ; B B B &3de3 11 ; YBYBY &3de4 24 ; MMMMM &3de5 00 ; &3de6 00 ; &3de7 10 ; B B &3de8 08 ; Y Y &3de9 10 ; B B &3dea 08 ; Y Y &3deb 11 ; YBYBY &3dec 02 ; B B B &3ded 11 ; YBYBY &3dee 08 ; Y Y &3def 11 ; YBYBY ; pattern_3a_data &3df0 0f ; GYGYG &3df1 39 ; YGYGY &3df2 0f ; GYGYG &3df3 10 ; B B &3df4 08 ; Y Y &3df5 11 ; YBYBY &3df6 07 ; G G G &3df7 11 ; YBYBY &3df8 28 ; R R &3df9 11 ; YBYBY &3dfa 07 ; G G G &3dfb 11 ; YBYBY &3dfc 28 ; R R &3dfd 11 ; YBYBY &3dfe 07 ; G G G &3dff 11 ; YBYBY &3e00 28 ; R R &3e01 11 ; YBYBY &3e02 0c ; MYMYM &3e03 00 ; &3e04 08 ; Y Y &3e05 11 ; YBYBY &3e06 0e ; CYCYC &3e07 31 ; YCYCY &3e08 0a ; BYBYB &3e09 31 ; YCYCY &3e0a 0e ; CYCYC &3e0b 11 ; YBYBY &3e0c 32 ; BCBCB &3e0d 16 ; CBCBC &3e0e 0a ; BYBYB &3e0f 16 ; CBCBC ; pattern_3b_data &3e10 0a ; BYBYB &3e11 01 ; Y Y Y &3e12 1a ; BWBWB &3e13 01 ; Y Y Y &3e14 1a ; BWBWB &3e15 01 ; Y Y Y &3e16 1a ; BWBWB &3e17 01 ; Y Y Y &3e18 1a ; BWBWB &3e19 01 ; Y Y Y &3e1a 1a ; BWBWB &3e1b 04 ; M M M &3e1c 00 ; &3e1d 04 ; M M M &3e1e 0e ; CYCYC &3e1f 31 ; YCYCY &3e20 02 ; B B B &3e21 04 ; M M M &3e22 00 ; &3e23 01 ; Y Y Y &3e24 02 ; B B B &3e25 01 ; Y Y Y &3e26 02 ; B B B &3e27 11 ; YBYBY &3e28 0b ; WYWYW &3e29 19 ; YWYWY &3e2a 1a ; BWBWB &3e2b 13 ; WBWBW &3e2c 1a ; BWBWB &3e2d 19 ; YWYWY &3e2e 0b ; WYWYW &3e2f 19 ; YWYWY ; pattern_3c_data &3e30 09 ; YYYYY &3e31 04 ; M M M &3e32 00 ; &3e33 01 ; Y Y Y &3e34 02 ; B B B &3e35 01 ; Y Y Y &3e36 04 ; M M M &3e37 00 ; &3e38 02 ; B B B &3e39 01 ; Y Y Y &3e3a 02 ; B B B &3e3b 14 ; MBMBM &3e3c 08 ; Y Y &3e3d 00 ; &3e3e 08 ; Y Y &3e3f 10 ; B B &3e40 0a ; BYBYB &3e41 1b ; WWWWW &3e42 1a ; BWBWB &3e43 13 ; WBWBW &3e44 1a ; BWBWB &3e45 11 ; YBYBY &3e46 3d ; RGRGR &3e47 2f ; GRGRG &3e48 3d ; RGRGR &3e49 2f ; GRGRG &3e4a 3d ; RGRGR &3e4b 11 ; YBYBY &3e4c 02 ; B B B &3e4d 01 ; Y Y Y &3e4e 0a ; BYBYB &3e4f 11 ; YBYBY ; pattern_3d_data &3e50 0a ; BYBYB &3e51 17 ; GBGBG &3e52 05 ; R R R &3e53 17 ; GBGBG &3e54 30 ; C C &3e55 17 ; GBGBG &3e56 0a ; BYBYB &3e57 13 ; WBWBW &3e58 18 ; W W &3e59 18 ; W W &3e5a 18 ; W W &3e5b 18 ; W W &3e5c 18 ; W W &3e5d 18 ; W W &3e5e 18 ; W W &3e5f 18 ; W W &3e60 18 ; W W &3e61 18 ; W W &3e62 1a ; BWBWB &3e63 1f ; GWGWG &3e64 3a ; BGBGB &3e65 38 ; G G &3e66 20 ; M M &3e67 00 ; &3e68 00 ; &3e69 29 ; YRYRY &3e6a 3d ; RGRGR &3e6b 29 ; YRYRY &3e6c 0a ; BYBYB &3e6d 01 ; Y Y Y &3e6e 0a ; BYBYB &3e6f 11 ; YBYBY ; pattern_3e_data &3e70 2f ; GRGRG &3e71 01 ; Y Y Y &3e72 3d ; RGRGR &3e73 10 ; B B &3e74 2f ; GRGRG &3e75 11 ; YBYBY &3e76 05 ; R R R &3e77 11 ; YBYBY &3e78 28 ; R R &3e79 11 ; YBYBY &3e7a 0f ; GYGYG &3e7b 11 ; YBYBY &3e7c 3a ; BGBGB &3e7d 11 ; YBYBY &3e7e 02 ; B B B &3e7f 07 ; G G G &3e80 0a ; BYBYB &3e81 10 ; B B &3e82 38 ; G G &3e83 11 ; YBYBY &3e84 02 ; B B B &3e85 07 ; G G G &3e86 0a ; BYBYB &3e87 15 ; RBRBR &3e88 2a ; BRBRB &3e89 15 ; RBRBR &3e8a 0a ; BYBYB &3e8b 39 ; YGYGY &3e8c 3a ; BGBGB &3e8d 17 ; GBGBG &3e8e 27 ; GMGMG &3e8f 11 ; YBYBY ; pattern_3f_data &3e90 0a ; BYBYB &3e91 30 ; C C &3e92 08 ; Y Y &3e93 38 ; G G &3e94 08 ; Y Y &3e95 16 ; CBCBC &3e96 08 ; Y Y &3e97 19 ; YWYWY &3e98 0a ; BYBYB &3e99 01 ; Y Y Y &3e9a 02 ; B B B &3e9b 19 ; YWYWY &3e9c 02 ; B B B &3e9d 01 ; Y Y Y &3e9e 0a ; BYBYB &3e9f 10 ; B B &3ea0 08 ; Y Y &3ea1 18 ; W W &3ea2 08 ; Y Y &3ea3 10 ; B B &3ea4 08 ; Y Y &3ea5 10 ; B B &3ea6 0b ; WYWYW &3ea7 01 ; Y Y Y &3ea8 02 ; B B B &3ea9 01 ; Y Y Y &3eaa 03 ; W W W &3eab 01 ; Y Y Y &3eac 02 ; B B B &3ead 11 ; YBYBY &3eae 08 ; Y Y &3eaf 11 ; YBYBY ; level_screen_data &3eb0 81 82 00 01 00 22 1b 80 00 03 00 88 00 22 60 80 &3ec0 00 01 00 88 13 80 00 10 00 01 03 03 07 12 16 34 &3ed0 3c 69 69 e1 e1 4a 4b 69 69 04 80 3c 03 80 00 05 &3ee0 00 08 0c 0e 86 87 3e 80 00 01 00 88 17 80 00 05 &3ef0 00 88 00 00 22 11 4b 80 00 02 00 22 88 6f 80 00 &3f00 07 00 01 00 01 01 03 07 07 03 80 0f 04 00 1e 1e &3f10 3c 3c 03 80 78 03 80 e1 05 80 c3 03 80 3c 05 80 &3f20 1e 05 00 87 c3 c3 e1 e1 03 80 f0 04 00 08 08 0c &3f30 0e 04 80 0f 01 00 88 05 80 00 02 00 08 0c 64 80 &3f40 00 01 00 22 0a 80 00 01 00 88 09 80 00 01 00 11 &3f50 20 80 00 01 00 44 0a 80 00 01 00 88 1c 80 00 01 &3f60 00 22 0e 80 00 01 00 22 2b 80 00 06 00 01 03 07 &3f70 03 03 07 07 80 0f 06 00 1e 1e 3c 3c 78 78 08 80 &3f80 f0 02 00 c3 c3 06 80 87 02 00 1e 1e 06 80 0f 08 &3f90 80 f0 0a 00 87 87 c3 c3 e1 e1 f0 f0 0c 0e 06 80 &3fa0 0f 03 80 00 05 00 08 08 0c 0e 0e 1b 80 00 01 00 &3fb0 44 2b 80 00 01 00 22 14 80 00 01 00 88 24 80 00 &3fc0 01 00 11 06 80 00 01 00 22 61 80 00 07 00 01 03 &3fd0 03 07 0f 0f 07 0a 80 0f 02 00 1e 1e 03 80 3c 01 &3fe0 00 78 0f 80 f0 01 00 87 0f 80 0f 01 00 f0 07 80 &3ff0 78 08 80 f0 05 00 0f 87 87 c3 c3 03 80 e1 08 80 &4000 0f 05 00 00 08 0c 0c 0e 03 80 0f 07 80 00 01 00 &4010 08 07 80 00 01 00 88 0e 80 00 01 00 44 b6 80 00 &4020 07 00 01 03 03 01 03 07 07 10 80 0f 03 80 1e 03 &4030 00 3c 78 78 0e 80 f0 07 80 e1 01 00 c3 10 80 0f &4040 07 80 3c 01 00 1e 10 80 f0 04 00 0f 0f 87 87 03 &4050 80 c3 01 00 e1 08 80 0f 03 00 0c 0e 0e 05 80 0f &4060 04 80 00 04 00 08 0c 0c 0e 33 80 00 01 00 44 34 &4070 80 00 01 00 88 3f 80 00 01 00 44 12 80 00 06 00 &4080 01 03 07 07 0f 07 15 80 0f 05 00 1e 1e 3c 78 78 &4090 15 80 f0 06 80 c3 02 00 87 87 10 80 0f 06 80 1e &40a0 02 00 0f 0f 10 80 f0 01 00 e1 07 80 f0 03 80 0f &40b0 03 80 87 02 00 c3 c3 10 80 0f 08 00 00 00 08 0c &40c0 0e 0e 0f 0f 07 80 00 01 00 08 07 80 00 01 00 11 &40d0 1d 80 00 01 00 88 55 80 00 01 00 88 22 80 00 06 &40e0 00 01 03 01 01 03 07 1b 80 0f 05 00 1e 3c 3c 78 &40f0 78 1c 80 f0 05 80 87 1b 80 0f 05 80 f0 03 80 78 &4100 10 80 f0 02 00 e1 e1 06 80 f0 04 80 0f 03 80 87 &4110 01 00 c3 10 80 0f 03 00 08 2e 0e 05 80 0f 05 80 &4120 00 05 00 08 0c 0c 00 88 5a 80 00 01 00 11 15 80 &4130 00 01 00 88 18 80 00 07 00 01 01 03 07 0f 07 07 &4140 1e 80 0f 03 00 1e 3c 3c 03 80 78 1e 80 f0 04 80 &4150 e1 20 80 0f 04 80 78 04 80 3c 18 80 f0 03 00 c3 &4160 e1 e1 05 80 f0 06 80 0f 02 00 87 87 10 80 0f 01 &4170 00 0e 07 80 0f 08 00 00 00 08 08 0c 0e 0e 0f 76 &4180 80 00 07 00 01 01 00 01 03 07 07 23 80 0f 02 00 &4190 1e 1e 03 80 3c 02 00 78 78 21 80 f0 04 80 e1 04 &41a0 80 c3 20 80 0f 04 80 3c 04 80 1e 20 80 f0 02 00 &41b0 c3 c3 03 80 e1 03 80 f0 07 80 0f 01 00 87 18 80 &41c0 0f 04 00 08 0c 0c 0e 04 80 0f 06 80 00 02 00 08 &41d0 0c 14 80 00 01 00 44 29 80 00 01 00 22 06 80 00 &41e0 01 00 88 16 80 00 06 00 01 03 07 07 03 07 27 80 &41f0 0f 03 80 1e 04 00 3c 3c 78 78 28 80 f0 03 80 c3 &4200 05 80 87 20 80 0f 03 80 1e 05 80 0f 28 80 f0 01 &4210 00 87 03 80 c3 04 00 e1 e1 f0 f0 20 80 0f 02 00 &4220 0e 0e 06 80 0f 03 80 00 05 00 08 08 0c 0e 0f 0e &4230 80 00 01 00 22 27 80 00 01 00 11 10 80 00 06 00 &4240 01 00 01 01 03 07 2d 80 0f 03 80 1e 03 00 3c 3c &4250 78 30 80 f0 02 00 87 87 2e 80 0f 02 00 f0 f0 06 &4260 80 78 28 80 f0 02 00 87 87 03 80 c3 03 00 e1 e1 &4270 f0 28 80 0f 05 00 00 08 0c 0c 0e 03 80 0f 06 80 &4280 00 02 00 08 08 2c 80 00 07 00 01 01 03 07 03 03 &4290 07 31 80 0f 05 00 1e 1e 3c 3c 78 30 80 f0 07 80 &42a0 e1 30 80 0f 01 00 78 07 80 3c 30 80 f0 01 00 0f &42b0 03 80 87 04 00 c3 c3 e1 e1 28 80 0f 03 00 0c 0e &42c0 0e 05 80 0f 04 80 00 04 00 08 0c 0c 0e 17 80 00 &42d0 07 00 01 00 00 01 03 03 07 37 80 0f 03 00 1e 1e &42e0 3c 03 80 78 35 80 f0 07 80 c3 01 00 87 30 80 0f &42f0 07 80 1e 01 00 0f 38 80 f0 03 80 0f 05 00 87 87 &4300 c3 c3 e1 30 80 0f 08 00 00 08 08 0c 0e 0e 0f 0f &4310 07 80 00 04 00 08 01 03 07 3b 80 0f 06 00 1e 1e &4320 3c 3c 78 78 3c 80 f0 06 80 87 3a 80 0f 06 80 f0 &4330 02 00 78 78 30 80 f0 02 00 e1 e1 06 80 f0 04 80 &4340 0f 04 00 87 87 c3 c3 30 80 0f 03 00 0c 0c 0e 3c &4350 80 0f 01 00 1e 03 80 3c 02 00 78 78 40 80 f0 03 &4360 80 e1 40 80 0f 05 80 78 03 80 3c 38 80 f0 03 80 &4370 e1 05 80 f0 05 80 0f 03 00 87 87 c3 60 80 0f 06 &4380 00 1e 1e 3c 3c 78 78 42 80 f0 04 80 e1 04 80 c3 &4390 40 80 0f 04 80 3c 04 80 1e 40 80 f0 04 00 c3 c3 &43a0 e1 e1 04 80 f0 06 80 0f 02 00 87 87 28 80 0f ; completion_screen_data &43af d6 82 00 03 80 10 04 00 30 70 61 e1 03 80 f0 0d &43bf 00 f3 f7 7f ff ff 6e 0c 80 88 cc ee ff 89 03 80 &43cf 01 04 80 00 04 00 08 0c 0e 78 0f 80 00 01 00 11 &43df 05 80 00 03 00 47 cf cf 06 80 00 02 00 4c 4c d7 &43ef 80 00 01 00 11 07 80 00 01 00 cc 18 80 00 01 00 &43ff 10 03 80 30 0c 00 21 61 43 16 f0 f0 87 0f 3c 3c &440f b4 f0 03 80 80 05 00 08 48 4c 44 44 05 80 01 03 &441f 80 10 08 80 f0 01 00 c0 04 80 f0 03 80 f1 03 00 &442f 33 77 f7 05 80 ff 03 80 cf 05 80 ff 03 80 2c 01 &443f 00 3f 04 80 ff 06 80 00 02 00 88 8e c8 80 00 02 &444f 00 f3 f7 0e 80 ff 01 00 ee 07 80 ff 02 00 00 cc &445f 06 80 ff 03 00 00 00 88 05 80 ff 02 00 34 70 09 &446f 80 f0 07 00 e1 e1 97 1f 1f 66 66 06 80 ff 0a 00 &447f 10 12 00 8c 88 88 8f 8f f0 f0 04 80 00 05 00 0f &448f 0f f1 f1 70 03 80 00 02 00 08 0e 05 80 ff 03 80 &449f 77 09 80 ff 02 00 fe fe 05 80 ff 11 00 8f cd e6 &44af e6 f3 fb db e9 e0 78 3c 0f 07 8b cd ee 22 03 80 &44bf f3 03 80 ff 09 00 77 00 00 22 ee ee df ef ff 05 &44cf 80 00 03 00 cc 4c 6e 06 80 00 02 00 44 44 a0 80 &44df 00 1b 80 ff 01 00 f0 06 80 ff 10 00 fc f3 ef df &44ef d3 d1 da 8d 80 ff 33 99 fd fe 33 77 0e 80 ff 04 &44ff 80 f8 03 80 fb 02 00 f9 c3 03 80 f0 01 00 fc 03 &450f 80 ff 02 00 0f c3 03 80 f0 07 00 fc ff ff 3b 39 &451f 3d d2 03 80 f0 01 00 f8 10 80 ff 05 00 e9 f8 f8 &452f fc fe 03 80 ff 09 00 7f 1f 97 e1 f0 f0 ff ff 77 &453f 04 80 f7 03 00 ff ff fb 08 80 ff 02 00 1f ef 06 &454f 80 ff 03 00 cc ff 7f 05 80 ff 03 00 00 00 cc 05 &455f 80 ff 03 80 00 01 00 bb 04 80 ff 03 00 11 33 77 &456f 04 80 ff 04 00 bf 00 ee ee 05 80 ff 03 00 00 11 &457f 77 05 80 ff 05 00 00 00 22 66 ee 03 80 ff 04 80 &458f 00 01 00 22 03 80 ff 06 80 00 02 00 88 cc 60 80 &459f 00 0d 80 ff 01 00 fe 04 80 ff 10 00 fc 8f ff f3 &45af f8 fc ff ff f0 0f ff e9 f0 f1 c5 7e 03 80 7f 02 &45bf 00 fb f9 03 80 ff 02 00 f7 fb 05 80 ff 1f 00 f7 &45cf ff fb fc ff fd f5 ff ee cd cd 03 16 34 79 78 16 &45df 0f e1 f0 ff ff fc f7 f3 78 1e c3 c3 96 b4 03 80 &45ef ff 0d 00 f7 f1 3c 1e c3 f8 fd fd ff ff f1 f0 78 &45ff 06 80 ff 02 00 f7 f0 1a 80 ff 03 00 fd fd ff 03 &460f 80 fe 03 00 f7 fb fb 03 80 ff 01 00 fe 08 80 ff &461f 01 00 fb 13 80 ff 01 00 fe 04 80 ff 06 00 df ef &462f ff ff f3 fc 03 80 ff 0f 00 6f 9f ff ff f7 ff ef &463f ff 7f bf ff ff ef ef 3f 03 80 ff 04 00 f7 f3 fd &464f fe 09 80 ff 01 00 ee 05 80 ff 02 00 7f ff 03 80 &465f 00 02 00 88 cc 03 80 ee 58 80 00 10 80 ff 01 00 &466f fc 07 80 ff 03 00 f1 db bd 03 80 f3 02 00 b7 bf &467f 10 80 ff 03 80 fb 05 80 ff 03 80 7b 12 00 7a 78 &468f 2d 0f 1e f8 e9 c3 96 b4 78 f1 f1 78 f0 f0 f1 f7 &469f 03 80 ff 04 00 e1 f0 f0 fc 04 80 fe 18 00 0f 87 &46af c3 e1 f0 f0 e1 e1 78 3c 16 03 09 0c 08 01 f7 f3 &46bf f1 78 3c 16 03 1e 04 80 ff 04 00 f7 f7 f3 f1 08 &46cf 80 ff 01 00 fe 09 80 ff 04 00 f7 fb fd fe 08 80 &46df ff 01 00 f7 0f 80 ff 02 00 ee cc 05 80 ff 2e 00 &46ef 33 00 00 ff cf 8f 0f ff cf 77 00 ff 1f ef df 3f &46ff ff cc 11 ff ff 7f ff df 07 0f 0f 7f ff af ff df &470f ff ef 7f ff df df ef 7f af ff ff bf df ef 03 80 &471f ff 02 00 ef 7f 04 80 ff 04 00 7f bf df 7f 03 80 &472f 00 03 80 88 02 00 cc cc 50 80 00 07 80 ff 01 00 &473f 7f 10 80 ff 07 00 fb db df df ed ef fe 06 80 ff &474f 03 00 7f 7f b7 10 80 ff 04 00 3c 78 79 7b 04 80 &475f 7f 01 00 f7 0f 80 ff 01 00 fe 07 80 fc 14 00 c2 &476f c2 c1 c1 92 92 34 34 1e 3c f0 f0 f1 f3 f7 ff f0 &477f f0 f1 f7 04 80 ff 02 00 f0 f7 1e 80 ff 03 00 88 &478f 87 00 05 80 ff 04 00 7f 08 07 98 04 80 ff 05 00 &479f 8b 07 3c f0 fc 03 80 fe 03 80 0c 01 00 0d 03 80 &47af 87 03 00 96 06 07 04 80 0f 07 00 97 db 11 19 1f &47bf 3f 7f 03 80 ff 05 00 8f cf ef ff dd 03 80 ef 03 &47cf 00 2f 3f 7f 04 80 ff 1a 00 ef df 6f bf ff ff bf &47df df ef bf df 6f bf ff df ff 7f ff bf ff 5f ff af &47ef df ff cc 04 80 ee 03 80 ff 50 80 00 10 00 1d 0c &47ff 84 86 87 0f 3c 7b ff ff 77 77 33 19 97 c2 10 80 &480f ff 05 00 f3 db fd fc ed 03 80 ef 04 80 ff 05 00 &481f f7 f0 f1 f1 ff 03 80 fe 04 00 f8 f7 ff ff 08 80 &482f f7 10 80 ff 0d 00 ec ec ed ed cd dc de de 78 79 &483f f1 f3 f3 03 80 f7 0f 00 ff ff cf cf 9e 3c 79 7b &484f ff ff 7f 3f b7 f9 fd 24 80 ff 04 00 fb f9 fc fe &485f 05 80 ff 04 00 fd f1 f1 fd 08 80 fe 06 00 b5 b5 &486f 7b 7f 7f f7 08 80 ff 02 00 7f 3f 06 80 ff 02 00 &487f bf 3f 03 80 ed 24 00 ef ff df ef cd ef df ff ef &488f 7f 7d fe fd ff 7f bf ff 0f ff ff ee 8f ff df ef &489f 7f 8f ff 33 ff 3f ff 7f ff ff 7f 09 80 ff 50 80 &48af 00 03 00 7f 7f f7 05 80 ff 03 00 cb fc fe 05 80 &48bf ff 03 00 7f 7f f7 03 80 fb 02 00 ff fd 08 80 ff &48cf 06 80 ef 02 00 ed ed 03 80 f1 05 80 f3 08 80 ff &48df 08 80 f7 10 80 ff 03 80 fc 05 80 bc 08 80 ff 02 &48ef 00 7b 7b 06 80 f7 03 00 7b 7f 7b 3e 80 ff 07 80 &48ff fe 03 00 3b f7 b7 05 80 f7 05 00 95 c2 c3 f3 b7 &490f 03 80 ff 03 00 9b 37 7f 05 80 ff 06 00 fe fe ff &491f ff fd fe 03 80 ff 14 00 f3 ff ff ee ef e3 ff 88 &492f ff ee ff 00 00 08 08 77 ff ff 77 ff 03 80 77 08 &493f 80 ff 50 80 00 10 80 ff 04 80 fd 04 00 ff ff fd &494f fd 08 80 ff 05 80 fd 03 80 df 08 80 f3 08 80 ff &495f 03 80 f7 05 80 7f 10 80 ff 01 00 bc 03 80 fc 03 &496f 80 de 01 00 fe 08 80 ff 03 00 f7 fb fd 3e 80 ff &497f 03 80 fe 03 80 ff 01 00 ee 04 80 ff 08 00 f7 f7 &498f fb 73 ff f7 bb bb 0d 80 ff 20 00 cf df de ce de &499f df ff fd fe bf bf bd be bf fd ff ff f1 ff ff fe &49af f1 ff 0d 13 cf cc ff f7 ff ff 7f 0a 80 ff 05 80 &49bf ee 50 80 00 10 80 ff 04 00 fd fd ff ff 03 80 fb &49cf 01 00 f7 08 80 ff 09 00 db da fa fa ba ba 32 32 &49df f3 07 80 f1 08 80 ff 05 00 7f 7f 73 33 11 03 80 &49ef 88 06 80 ff 02 00 77 33 08 80 ff 02 00 fe fe 07 &49ff 80 ff 03 80 f7 04 00 fb fb fd fd 3d 80 ff 0d 00 &4a0f ee ef ff cd 8b 9f 37 7f 7f ff ff 31 ff 03 80 ef &4a1f 06 80 ff 05 00 77 11 08 08 9f 03 80 ff 07 00 f9 &4a2f f8 74 8f ff ee ee 03 80 ff 08 00 e7 1f ff fc ff &4a3f fe f9 7f 03 80 ff 03 00 f7 ff f7 15 80 ff 03 80 &4a4f cc 04 80 88 51 80 00 0a 80 ff 07 00 fe fe fd fd &4a5f fb fb f7 04 80 ff 07 00 ee cc 88 ee cc cc 88 04 &4a6f 80 00 08 80 32 08 80 f1 08 80 ff 08 80 88 02 00 &4a7f 33 11 06 80 00 03 80 ff 05 00 77 33 11 00 00 07 &4a8f 80 ff 03 00 f3 fe fe 07 80 ff 02 00 f7 f1 31 80 &4a9f ff 06 00 fe fd ff fb f9 fb 1f 80 ff 08 00 cf ff &4aaf 3f 5f ff bf 7f 7f 1a 80 ff 08 00 ee cc 88 00 00 &4abf ff cc 88 5d 80 00 0d 00 ff ff fe fe fd f9 ea cc &4acf f7 f7 ee cc 88 03 80 00 01 00 88 0f 80 00 01 00 &4adf 76 07 80 74 05 80 f1 03 80 f3 08 80 ff 07 80 cc &4aef 01 00 ee 10 80 00 04 00 70 30 30 01 04 80 00 20 &4aff 00 ff f7 f1 f0 78 1e 07 07 ff ff fe f0 e1 87 0e &4b0f 08 ff ff f0 e1 0e 0c 00 30 ff ff f1 1f 31 12 f1 &4b1f f1 14 80 ff 09 00 fe fe fc fc fb ff ff f7 f7 12 &4b2f 80 ff 01 00 ee 07 80 ff 01 00 77 07 80 ff 01 00 &4b3f ee 06 80 ff 02 00 77 11 05 80 ff 03 00 cc 88 00 &4b4f 03 80 ff 02 00 ee 88 03 80 00 02 00 ee 88 6e 80 &4b5f 00 01 00 88 1f 80 00 08 80 74 08 80 f3 08 80 ff &4b6f 04 80 ee 04 80 ff 15 80 00 10 00 10 30 70 00 00 &4b7f 10 70 f0 f1 f3 ff 10 70 f0 f0 f7 03 80 ff 03 00 &4b8f f0 f0 f3 05 80 ff 01 00 f3 17 80 ff 01 00 fc 03 &4b9f 80 fe 0f 80 ff 04 80 ee 02 00 cc bb 07 80 00 01 &4baf 00 22 07 80 00 01 00 66 e7 82 00 ; start_screen_data &4bba 97 87 00 02 00 11 00 06 80 33 02 00 ff 00 07 80 &4bca ff 01 00 00 07 80 ff 01 00 00 06 80 ee 01 00 ff &4bda 07 80 00 02 00 cc 00 07 80 ff 01 00 00 07 80 ff &4bea 01 00 00 07 80 ff 01 00 00 07 80 ff 01 00 00 07 &4bfa 80 ee 07 80 00 02 00 77 00 07 80 ff 01 00 00 07 &4c0a 80 ff 01 00 00 07 80 ff 01 00 00 06 80 88 02 00 &4c1a ff 00 07 80 33 01 00 00 07 80 ff 01 00 00 07 80 &4c2a ff 01 00 00 07 80 ff 01 00 00 06 80 cc 02 00 ff &4c3a 00 06 80 11 02 00 99 00 07 80 ff 01 00 00 07 80 &4c4a ff 01 00 00 07 80 ff 01 00 00 07 80 ff 01 00 00 &4c5a 07 80 cc 09 80 00 07 80 33 01 00 00 07 80 ff 01 &4c6a 00 00 07 80 88 11 80 00 07 80 11 01 00 00 07 80 &4c7a ff 01 00 00 07 80 cc 20 80 00 08 80 11 08 80 ff &4c8a 08 80 cc 06 80 11 02 00 00 00 06 80 ff 02 00 00 &4c9a 00 06 80 cc 0a 80 00 08 80 33 08 80 ff 08 80 88 &4caa 08 80 00 08 80 77 08 80 ff 08 80 00 08 80 77 08 &4cba 80 ff 08 80 33 08 80 ff 08 80 88 08 80 33 08 80 &4cca ff 08 80 88 08 80 00 08 80 77 08 80 ff 18 80 00 &4cda 08 80 33 08 80 ff 08 80 88 10 80 00 08 80 11 08 &4cea 80 ff 08 80 cc 20 80 00 04 80 11 04 80 00 04 80 &4cfa ff 04 80 33 03 80 cc 05 80 ff 03 80 00 05 80 ff &4d0a 03 80 00 05 80 ee 10 80 00 08 80 33 08 80 ff 08 &4d1a 80 88 08 80 00 08 80 77 08 80 ff 03 80 00 05 80 &4d2a ff 03 80 77 0d 80 ff 08 80 33 08 80 ff 03 80 88 &4d3a 05 80 ff 03 80 33 09 80 ff 04 80 cc 04 80 88 0c &4d4a 80 00 08 80 77 08 80 ff 18 80 00 08 80 33 08 80 &4d5a ff 08 80 88 10 80 00 08 80 11 08 80 ff 08 80 cc &4d6a 27 80 00 03 00 11 33 33 05 80 00 03 80 ff 05 80 &4d7a 00 03 00 cc ff ff 06 80 11 01 00 ee 07 80 ff 01 &4d8a 00 00 07 80 cc 08 80 00 08 80 33 08 80 ff 08 80 &4d9a 88 08 80 00 08 80 77 0a 80 ff 06 80 00 02 00 ff &4daa ff 06 80 77 08 80 ff 08 80 33 0a 80 ff 06 80 99 &4dba 08 80 ff 07 80 cc 01 00 ff 07 80 00 01 00 88 08 &4dca 80 00 08 80 77 08 80 ff 18 80 00 08 80 33 08 80 &4dda ff 08 80 88 10 80 00 08 80 11 08 80 ff 08 80 cc &4dea 20 80 00 06 80 11 02 00 00 00 06 80 ff 02 00 33 &4dfa 33 05 80 cc 03 80 ff 05 80 11 09 80 ff 02 00 ee &4e0a ee 06 80 cc 0a 80 00 08 80 33 08 80 ff 08 80 88 &4e1a 08 80 00 08 80 77 08 80 ff 08 80 00 08 80 77 08 &4e2a 80 ff 08 80 33 08 80 ff 08 80 88 08 80 33 08 80 &4e3a ff 08 80 88 08 80 00 08 80 77 08 80 ff 1d 80 00 &4e4a 03 80 33 05 80 00 03 80 ff 05 80 00 03 80 88 15 &4e5a 80 00 03 80 11 05 80 00 03 80 ff 05 80 00 03 80 &4e6a cc 28 80 00 04 80 33 04 80 00 04 80 ff 04 80 00 &4e7a 04 80 ff 04 80 00 04 80 ee 14 80 00 04 80 33 04 &4e8a 80 00 04 80 ff 04 80 00 04 80 88 0c 80 00 04 80 &4e9a 77 04 80 00 04 80 ff 0c 80 00 04 80 77 04 80 00 &4eaa 04 80 ff 04 80 00 04 80 33 04 80 00 04 80 ff 04 &4eba 80 00 04 80 88 04 80 00 04 80 33 04 80 00 04 80 &4eca ff 04 80 00 04 80 88 0c 80 00 04 80 77 04 80 00 &4eda 04 80 ff 1c 80 00 04 80 33 04 80 00 04 80 ff 04 &4eea 80 00 04 80 88 14 80 00 04 80 11 04 80 00 04 80 &4efa ff 04 80 00 04 80 cc 94 87 00 ; unused &4f04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4f14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4f24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4f34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4f44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4f54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4f64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4f74 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4f84 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4f94 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4fa4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4fb4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4fc4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4fd4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4fe4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &4ff4 00 00 00 00 00 00 00 00 00 00 00 00 ; entry_point &6c00 a9 c8 LDA #&c8 ; Read/Write BREAK/ESCAPE effect &6c02 a2 03 LDX #&03 ; Clear memory on next RESET &6c04 a0 00 LDY #&00 &6c06 20 f4 ff JSR &fff4 ; OSBYTE &6c09 78 SEI &6c0a a2 ff LDX #&ff &6c0c 9a TXS &6c0d a2 24 LDX #&24 ; set_all_vectors_to_reset_loop &6c0f ad fc ff LDA &fffc ; os_reset_address_low &6c12 9d 00 02 STA &0200,X ; os_vector_table &6c15 ad fd ff LDA &fffd ; os_reset_address_high &6c18 9d 01 02 STA &0201,X ; os_vector_table + 1 &6c1b ca DEX &6c1c ca DEX &6c1d 10 f0 BPL &6c0f ; set_all_vectors_to_reset_loop &6c1f ad 44 fe LDA &fe44 ; System VIA timer 1 counter LSB &6c22 cd 44 fe CMP &fe44 ; System VIA timer 1 counter LSB &6c25 d0 01 BNE &6c28 ; skip_break &6c27 00 BRK # Reset system if system not as expected ; skip_break &6c28 a0 00 LDY #&00 &6c2a 84 00 STY &00 ; target_address_low &6c2c 84 02 STY &02 ; source_address_low &6c2e a9 03 LDA #&03 ; &0300 &6c30 85 01 STA &01 ; target_address_high &6c32 a9 1f LDA #&1f ; &1f00 &6c34 85 03 STA &03 ; source_address_high ; decrypt_and_move_1f00_to_6bff_loop # Decrypt and move &1f00 - &6bff to &0300 - &4fff &6c36 b1 02 LDA (&02),Y ; source_address &6c38 20 16 6d JSR &6d16 ; decrypt_byte &6c3b 91 00 STA (&00),Y ; target_address &6c3d a9 00 LDA #&00 &6c3f 91 02 STA (&02),Y ; source_address &6c41 c8 INY &6c42 d0 f2 BNE &6c36 ; decrypt_and_move_1f00_to_6bff_loop &6c44 e6 01 INC &01 ; target_address_high &6c46 e6 03 INC &03 ; source_address_high &6c48 a5 03 LDA &03 ; source_address_high &6c4a c9 6c CMP #&6c &6c4c d0 e8 BNE &6c36 ; decrypt_and_move_1f00_to_6bff_loop &6c4e a2 0d LDX #&0d ; write_video_registers_loop &6c50 bd 20 6d LDA &6d20,X ; video_register_data &6c53 8e 00 fe STX &fe00 ; video register number &6c56 8d 01 fe STA &fe01 ; video register value &6c59 ca DEX &6c5a 10 f4 BPL &6c50 ; write_video_registers_loop &6c5c a9 c4 LDA #&c4 # Change to MODE 5 &6c5e 8d 20 fe STA &fe20 ; video ULA control register &6c61 a2 0f LDX #&0f # Set PB0-3 as outputs, PB4-7 as input (OS defaults) &6c63 8e 42 fe STX &fe42 ; System VIA data direction register B &6c66 8e 40 fe STX &fe40 ; System VIA port B input/output register # Disable Shift Lock LED &6c69 ca DEX ; &0e &6c6a 8e 40 fe STX &fe40 ; System VIA port B input/output register # Disable Caps Lock LED &6c6d a9 03 LDA #&03 &6c6f 8d 40 fe STA &fe40 ; System VIA port B input/output register # Disable keyboard auto-scan &6c72 a9 0c LDA #&0c &6c74 8d 40 fe STA &fe40 ; System VIA port B input/output register # Set addressable latch B4 to 1 &6c77 a9 0d LDA #&0d &6c79 8d 40 fe STA &fe40 ; System VIA port B input/output register # Set addressable latch B5 to 1, i.e. scroll from &5800 &6c7c a9 0f LDA #&0f ; &050f = irq1_handler &6c7e 8d 04 02 STA &0204 ; irq1_vector_low &6c81 a9 05 LDA #&05 &6c83 8d 05 02 STA &0205 ; irq1_vector_high &6c86 a9 3d LDA #&3d &6c88 8d 4e fe STA &fe4e ; System VIA interrupt enable register # Disable all interrupts except Timer 1 and CA1 (v-sync) &6c8b a9 7f LDA #&7f &6c8d 8d 6e fe STA &fe6e ; User VIA interrupt enable register # Disable all interrupts &6c90 8d 43 fe STA &fe43 ; System VIA data direction register A # Set top bit as input, low seven bits as output &6c93 a9 00 LDA #&00 &6c95 8d 4b fe STA &fe4b ; System VIA auxiliary control register # Set timers to generate interrupts &6c98 8d 08 fe STA &fe08 ; Cassette ACIA control register # Disable interrupts &6c9b 2c 18 fe BIT &fe18 ; ADC conversion status on Master &6c9e aa TAX ; 0 ; move_6cf4_to_6df3_loop # Move &6cf4 - &6df3 to &0100 - &01ff &6c9f a9 00 LDA #&00 &6ca1 95 00 STA &00,X &6ca3 bd f4 6c LDA &6cf4,X ; unrelocated_initialisation &6ca6 9d 00 01 STA &0100,X ; initialisation &6ca9 e8 INX &6caa d0 f3 BNE &6c9f ; move_6cf4_to_6df3_loop &6cac ad 62 02 LDA &0262 ; os_sound_suppression &6caf 85 e2 STA &e2 ; sound_muted &6cb1 a9 80 LDA #&80 ; &8000 = relocated_status_screen_data - &a57 &6cb3 85 03 STA &03 ; target_address_high &6cb5 a9 d9 LDA #&d9 ; &7ad9 = status_screen_data - &a57 &6cb7 85 07 STA &07 ; source_address_low &6cb9 a9 7a LDA #&7a &6cbb 85 08 STA &08 ; source_address_high &6cbd a0 00 LDY #&00 &6cbf 84 02 STY &02 ; target_address_low ; move_7082_to_7ad9_loop # Move &7082 - &7ad9 to &75a8 - &7fff &6cc1 a5 02 LDA &02 ; target_address_low &6cc3 38 SEC &6cc4 e9 01 SBC #&01 &6cc6 85 02 STA &02 ; target_address_low &6cc8 a5 03 LDA &03 ; target_address_high &6cca e9 00 SBC #&00 &6ccc 85 03 STA &03 ; target_address_high &6cce b1 07 LDA (&07),Y ; source_address_low &6cd0 91 02 STA (&02),Y ; target_address_low &6cd2 a5 07 LDA &07 ; source_address_low &6cd4 38 SEC &6cd5 e9 01 SBC #&01 &6cd7 85 07 STA &07 ; source_address_low &6cd9 a5 08 LDA &08 ; source_address_high &6cdb e9 00 SBC #&00 &6cdd 85 08 STA &08 ; source_address_high &6cdf c9 70 CMP #&70 &6ce1 d0 de BNE &6cc1 ; move_7082_to_7fff_loop &6ce3 a5 07 LDA &07 ; source_address_low &6ce5 c9 81 CMP #&81 &6ce7 d0 d8 BNE &6cc1 ; move_7082_to_7fff_loop &6ce9 a9 00 LDA #&00 ; &5800 = screen_memory # Unpack relocated_status_screen_data to top of screen &6ceb 85 00 STA &00 ; screen_address_low &6ced a9 58 LDA #&58 &6cef 85 01 STA &01 ; screen_address_high &6cf1 4c 00 01 JMP &0100 ; initialisation # &6cf4 - &6d15 is moved to &0100 - &1021 at &6ca6 ; initialisation &0100 20 f1 1a JSR &1af1 ; unpack_screen_data # Unpack status screen &0103 a9 ff LDA #&ff &0105 8d 4d fe STA &fe4d ; System VIA interrupt flag register # Clear all interrupts &0108 a9 02 LDA #&02 ; wait_for_vsync &010a 2c 4d fe BIT &fe4d ; System VIA interrupt flag register # &02 set if v-sync interrupt has occurred &010d f0 fb BEQ &010a ; wait_for_vsync &010f a9 01 LDA #&01 &0111 8d 00 fe STA &fe00 ; video register number &0114 a9 28 LDA #&28 # Display screen &0116 8d 01 fe STA &fe01 ; video register value &0119 a9 0f LDA #&0f ; &0f92 = title_screen_after_reset - 1 &011b 48 PHA &011c a9 92 LDA #&92 &011e 48 PHA &011f 4c 24 12 JMP &1224 ; initialise_players_state # Leave initialise_players_state to title_screen_after_reset ; decrypt_byte &6d16 84 82 STY &82 ; y &6d18 59 30 6d EOR &6d30,Y ; decryption_key &6d1b 49 ff EOR #&ff &6d1d 45 82 EOR &82 ; y &6d1f 60 RTS ; video_register_data &6d20 3f ; R0: Horizontal total register &6d21 00 ; R1: Number of characters per line # Hide screen &6d22 31 ; R2: Horizontal sync position register &6d23 24 ; R3: Sync width register &6d24 26 ; R4: Vertical total register &6d25 00 ; R5: Vertical total adjust register &6d26 20 ; R6: Vertical displayed register &6d27 22 ; R7: Vertical sync position &6d28 01 ; R8: Interlace and delay register &6d29 07 ; R9: Scan lines per character register &6d2a 20 ; R10: Cursor start register &6d2b 00 ; R11: Cursor end register &6d2c 0b ; R12: Displayed screen start address register (high) # Set screen start address to &5800 &6d2d 00 ; R13: Displayed screen start address register (low) ; unused &6d2e 0b 00 ; decryption_key &6d30 57 65 6c 6c 20 74 68 69 73 20 67 61 6d 65 20 6d ; "Well this game m" &6d40 6f 73 74 20 62 65 20 6d 79 20 66 69 72 73 74 20 ; "ost be my first " &6d50 65 76 65 72 20 67 61 6d 65 20 28 6f 76 65 72 20 ; "ever game (over " &6d60 34 5c 20 79 65 61 72 73 29 20 77 68 69 63 68 20 ; "4\ years) which " &6d70 69 73 20 6e 6f 74 20 64 65 64 69 63 61 74 65 64 ; "is not dedicated" &6d80 20 74 6f 20 54 72 61 63 65 79 20 44 69 61 6e 6e ; " to Tracey Diann" &6d90 65 20 4e 69 63 68 6f 6c 73 6f 6e 2e 20 46 6f 72 ; "e Nicholson. For" &6da0 20 74 68 6f 73 65 20 77 68 6f 20 64 6f 6e 27 74 ; " those who don't" &6db0 20 6b 6e 6f 77 2c 20 54 72 61 63 65 79 20 61 6e ; " know, Tracey an" &6dc0 64 20 49 20 68 61 76 65 20 62 72 6f 6b 65 6e 20 ; "d I have broken " &6dd0 6f 66 66 20 6f 75 72 20 65 6e 67 61 67 65 6d 65 ; "off our engageme" &6de0 6e 74 20 2d 20 6f 72 20 72 61 74 68 65 72 2c 20 ; "nt - or rather, " &6df0 73 68 65 20 62 72 6f 6b 65 20 6f 66 66 20 74 68 ; "she broke off th" &6e00 65 20 65 6e 67 61 67 65 6d 65 6e 74 2e 20 49 6e ; "e engagement. In" &6e10 73 74 65 61 64 2c 20 74 68 69 73 20 67 61 6d 65 ; "stead, this game" &6e20 20 69 73 20 64 65 64 69 63 61 74 65 64 20 74 6f ; " is dedicated to" ; unused &6e30 20 74 68 65 20 67 6f 6f 64 20 74 69 6d 65 73 20 ; " the good times " &6e40 6f 66 20 74 68 65 20 70 61 73 74 20 77 68 65 6e ; "of the past when" &6e50 20 65 76 65 72 79 74 68 69 6e 67 20 77 61 73 20 ; " everything was " &6e60 27 68 75 6e 6b 79 64 6f 72 79 27 20 61 6e 64 20 ; "'hunkydory' and " &6e70 6e 6f 74 68 69 6e 67 20 63 6f 75 6c 64 20 67 6f ; "nothing could go" &6e80 20 77 72 6f 6e 67 2e 2e 2e 20 4d 61 79 62 65 73 ; " wrong... Maybes" &6e90 20 6f 6e 65 20 64 61 79 20 77 65 27 6c 6c 20 67 ; " one day we'll g" &6ea0 65 74 20 62 61 63 6b 20 74 6f 67 65 74 68 65 72 ; "et back together" &6eb0 20 2d 20 62 75 74 20 49 20 77 69 6c 6c 20 61 6c ; " - but I will al" &6ec0 77 61 79 73 20 6c 69 76 65 20 69 6e 20 68 6f 70 ; "ways live in hop" &6ed0 65 2e 2e 2e 20 37 74 68 20 4e 6f 76 65 6d 62 65 ; "e... 7th Novembe" &6ee0 72 20 31 39 38 36 2e 20 4f 72 20 64 69 65 20 69 ; "r 1986. Or die i" &6ef0 6e 20 76 61 69 6e 2e 2e 2e 20 31 73 74 20 44 65 ; "n vain... 1st De" &6f00 63 65 6d 62 65 72 20 31 39 38 36 2e 20 4f 72 20 ; "cember 1986. Or " &6f10 6c 69 76 65 20 61 20 6c 69 66 65 20 6f 66 20 63 ; "live a life of c" &6f20 6f 6e 73 74 61 6e 74 20 74 6f 72 6d 65 6e 74 2e ; "onstant torment." &6f30 2e 2e 20 37 74 68 20 44 65 63 65 6d 62 65 72 20 ; ".. 7th December " &6f40 31 39 38 36 2e 20 49 20 77 69 6c 6c 20 67 65 74 ; "1986. I will get" &6f50 20 68 65 72 20 62 61 63 6b 20 73 6f 6d 65 20 68 ; " her back some h" &6f60 6f 77 2e 2e 2e 20 32 39 74 68 20 44 65 63 65 6d ; "ow... 29th Decem" &6f70 62 65 72 20 31 39 38 36 2e 20 4f 72 20 73 74 61 ; "ber 1986. Or sta" &6f80 72 74 20 61 66 72 65 73 68 20 69 6e 20 31 39 38 ; "rt afresh in 198" &6f90 37 2e 2e 2e 20 36 74 68 20 4a 61 6e 75 61 72 79 ; "7... 6th January" &6fa0 20 31 39 38 37 2e 20 41 6c 6c 20 74 68 65 20 73 ; " 1987. All the s" &6fb0 61 6d 65 2c 20 49 20 77 61 6e 74 20 68 65 72 2c ; "ame, I want her," &6fc0 20 6e 65 65 64 20 68 65 72 2c 20 6c 6f 76 65 20 ; " need her, love " &6fd0 68 65 72 20 62 65 79 6f 6e 64 20 61 6c 6c 20 63 ; "her beyond all c" &6fe0 6f 6d 70 72 65 68 65 6e 73 69 6f 6e 2e 2e 2e 20 ; "omprehension... " &6ff0 31 39 74 68 20 4a 61 6e 75 61 72 79 20 31 39 38 ; "19th January 198" &7000 37 2e 20 57 68 79 20 64 6f 65 73 6e 27 74 20 73 ; "7. Why doesn't s" &7010 68 65 20 6a 75 73 74 20 77 61 6c 6b 20 62 61 63 ; "he just walk bac" &7020 6b 20 74 68 72 6f 75 67 68 20 74 68 65 20 64 6f ; "k through the do" &7030 6f 72 20 62 61 63 6b 20 69 6e 74 6f 20 6d 79 20 ; "or back into my " &7040 6c 69 66 65 3f 3f 3f 20 31 73 74 20 46 65 62 75 ; "life??? 1st Febu" &7050 61 72 79 20 31 39 38 37 2e 20 41 61 61 61 61 72 ; "ary 1987. Aaaaar" &7060 72 72 72 67 67 67 67 68 68 68 68 21 21 21 21 20 ; "rrrgggghhhh!!!! " &7070 31 30 74 68 20 46 65 62 75 61 72 79 20 31 39 38 ; "10th Febuary 198" &7080 37 2e ; "7." # &7082 - &7ad9 is moved to &75a8 - &7fff at &6cc1, then unpacked to screen memory ; status_screen_data &7082 02 00 ff ff 06 80 f8 02 00 ff ff 06 80 f0 02 00 &7092 ff ff 06 80 f0 02 00 ff ff 06 80 f0 02 00 ff ff &70a2 06 80 f0 02 00 ff ff 06 80 f0 02 00 ff ff 04 80 &70b2 f0 04 00 f1 f1 ff ff 04 80 f0 04 00 ff f0 ff ff &70c2 04 80 f0 04 00 ff f0 ff ff 04 80 f0 04 00 ff f0 &70d2 ff ff 04 80 f0 04 00 ff f0 ff ff 04 80 f0 04 00 &70e2 ff f0 ff ff 04 80 f0 04 00 ff f0 ff ff 04 80 f0 &70f2 04 00 fd b5 ff ff 04 80 f0 04 00 ff f0 ff ff 04 &7102 80 f0 04 00 ff f0 ff ff 04 80 f0 04 00 ff f0 ff &7112 ff 04 80 f0 04 00 ff f0 ff ff 04 80 f0 04 00 ff &7122 f0 ff ff 04 80 f0 04 00 ff f0 ff ff 04 80 f0 04 &7132 00 ff f0 ff ff 04 80 f0 04 00 ff f0 ff ff 04 80 &7142 f0 04 00 ff f0 ff ff 04 80 f0 04 00 ff f0 ff ff &7152 04 80 f0 04 00 ff f0 ff ff 04 80 f0 04 00 ff f0 &7162 ff ff 04 80 f0 04 00 ff f0 ff ff 04 80 f0 04 00 &7172 ff f0 ff ff 04 80 f0 04 00 ff f0 ff ff 04 80 f0 &7182 04 00 ff f0 ff ff 04 80 f0 04 00 fd b5 ff ff 04 &7192 80 f0 04 00 ff f0 ff ff 04 80 f0 04 00 fc b4 ff &71a2 ff 06 80 f0 02 00 ff ff 06 80 f0 02 00 ff ff 06 &71b2 80 f0 02 00 ff ff 06 80 f0 02 00 ff ff 06 80 f0 &71c2 02 00 ff ff 06 80 f0 02 00 ff ef 06 80 e1 08 80 &71d2 f8 28 80 f0 04 80 f1 01 00 e1 03 80 f0 05 00 87 &71e2 b4 b7 f0 0f 03 80 f0 05 00 0f f0 ff f0 1f 03 80 &71f2 f1 03 00 0f f0 fd 05 80 b5 05 00 0f f0 ff f0 87 &7202 03 80 b4 05 00 0f f0 ff f0 0f 03 80 f1 03 00 1f &7212 f1 bd 06 80 b5 04 00 b4 b7 f0 87 03 80 b4 05 00 &7222 0f f0 ff f0 1f 03 80 f1 03 00 0f f0 fd 05 80 b5 &7232 15 00 0f f0 ff f0 87 b7 f0 87 0f f0 ff f0 0f ff &7242 e1 0f 0f f0 fd b5 3d 03 80 f1 05 00 0f f0 ff f0 &7252 87 03 80 b4 05 00 0f f0 ff f0 0f 03 80 f0 05 00 &7262 0f f0 fd b5 3d 03 80 f1 15 00 0f f0 ff f0 87 b7 &7272 f0 87 0f f0 ff f0 0f ff e1 0f 0f f0 fc b4 3c 03 &7282 80 f0 01 00 0f 07 80 f0 02 00 0f f0 06 80 f1 05 &7292 00 0f f0 ff f0 87 03 80 b4 05 00 0f f0 ff f0 0f &72a2 03 80 f1 05 00 0f f0 fd b5 a5 03 80 b4 05 00 3d &72b2 f1 ff f0 1f 03 80 f1 05 00 87 b4 b7 f0 87 03 80 &72c2 b4 05 00 3c f0 fc b4 3c 33 80 f0 08 80 e1 08 80 &72d2 f8 28 80 f0 03 80 f1 01 00 f0 03 80 f1 68 00 f0 &72e2 ff f0 0f f0 ff f0 0f f0 ff f0 0f f0 ff f0 0f f0 &72f2 b5 b5 3d f1 fd b5 2d f0 b7 f0 87 b4 b5 b5 3d f0 &7302 ff f0 0f f0 ff f0 0f f0 b5 b5 2d f0 ff f0 0f f0 &7312 b4 b4 3c f0 ff f0 0f f0 f1 f1 e1 f0 ff f0 0f f0 &7322 b5 b5 3d f0 ff f0 0f f0 b7 f0 0f f0 ff f0 0f f0 &7332 ff f0 0f f0 ff f0 0f f0 ff f0 0f f0 ff f0 0f f0 &7342 b4 b4 3c f0 ff f0 0f 05 80 f0 04 00 ff f0 0f f0 &7352 03 80 f1 1c 00 f0 ff f0 0f f0 b7 f0 0f f0 ff f0 &7362 0f f0 ff f0 0f f0 ff f0 0f f0 fc b4 3c f0 ff f0 &7372 0f 05 80 f0 04 00 ff f0 0f f0 03 80 f1 1d 00 f0 &7382 ff f0 0f f0 b7 f0 0f f0 ff f0 0f f0 ff f0 0f f0 &7392 ff f0 0f f0 b4 b4 3c f0 ff f0 0f f0 04 80 f1 04 &73a2 00 ff f0 0f f0 06 80 b4 01 00 3c 39 80 f0 08 80 &73b2 e1 08 80 f8 01 00 f3 07 80 f2 04 00 ff f0 f0 c3 &73c2 04 80 d2 04 00 ff f0 f0 0f 04 80 f0 04 00 fc f3 &73d2 f0 0f 05 80 f0 04 00 fc f3 78 96 03 80 f2 04 00 &73e2 f0 f0 f8 f6 04 80 d2 06 80 f0 02 00 f3 f2 06 80 &73f2 f0 01 00 ff 07 80 f0 01 00 ff 07 80 f0 01 00 ff &7402 07 80 f0 01 00 ff 07 80 f0 02 00 fe d2 06 80 f0 &7412 02 00 f3 f2 06 80 f0 01 00 ff 07 80 f0 01 00 ff &7422 07 80 f0 01 00 ff 07 80 f0 01 00 ff 07 80 f0 01 &7432 00 ff 07 80 f0 03 00 ff f0 f3 05 80 f2 03 00 fe &7442 f0 fe 05 80 d2 01 00 d3 07 80 f0 01 00 ff 07 80 &7452 f0 12 00 fe d2 f3 f2 f2 e3 f0 f0 f3 f2 fe d2 d2 &7462 1e f0 f0 fe d2 06 80 f0 02 00 f3 f2 06 80 f0 01 &7472 00 ff 07 80 f0 01 00 ff 07 80 f0 01 00 ff 07 80 &7482 f0 01 00 ff 07 80 f0 02 00 de d2 06 80 f0 02 00 &7492 f3 f2 06 80 f0 02 00 fe d2 16 80 f0 02 00 f3 f2 &74a2 06 80 f0 02 00 fe d2 08 80 f0 08 80 e1 08 80 f8 &74b2 08 80 f2 07 80 d2 01 00 d3 07 80 f0 01 00 ff 07 &74c2 80 f0 01 00 ff 06 80 f2 02 00 fc f0 07 80 d2 01 &74d2 00 96 08 80 f2 22 00 f0 c3 d3 f0 f0 c3 d2 d3 f0 &74e2 0f ff f0 f0 0f f0 ff f0 0f ff f0 f0 0f f0 ff f0 &74f2 0f fe d2 d2 1e f0 ff d2 1e 05 80 f0 01 00 ff 05 &7502 80 f2 26 00 c3 f0 ff f0 c3 d3 f0 f0 0f f0 ff f0 &7512 0f ff f0 f0 0f f0 ff f0 0f ff f0 f0 0f f0 ff f0 &7522 0f ff f0 f0 3e f2 fe f0 0f fe 05 80 d2 02 00 f0 &7532 0f 07 80 f0 01 00 3e 06 80 f2 02 00 f0 c3 06 80 &7542 d2 02 00 f0 0f 06 80 f0 02 00 d2 1e 06 80 f0 08 &7552 80 f2 08 80 d2 08 80 f2 02 00 f0 c3 06 80 d2 02 &7562 00 f0 0f 07 80 f0 01 00 0f 07 80 f0 01 00 1e 06 &7572 80 f2 08 80 d2 08 80 f2 07 80 d2 01 00 d3 07 80 &7582 f0 01 00 ff 07 80 f0 01 00 ff 07 80 f2 01 00 fe &7592 08 80 d2 08 80 f0 08 80 e1 08 80 f8 0e 00 f2 f2 &75a2 e3 f0 f0 f3 f2 f2 f0 f0 0f f0 f0 ff 04 80 f0 04 &75b2 00 0f f0 f0 ff 03 80 f0 09 00 c3 3c f0 f0 ff f0 &75c2 f0 c3 3c 03 80 f0 04 00 ff f0 f0 78 04 80 f0 09 &75d2 00 ff f0 f0 f2 f2 e3 f0 f0 ff 04 80 f0 04 00 0f &75e2 f0 f0 ff 04 80 f0 04 00 0f f0 f0 ff 04 80 f0 04 &75f2 00 0f f0 f0 ff 04 80 f0 04 00 0f f0 f0 ff 04 80 &7602 f0 04 00 0f f0 f0 ff 04 80 f0 04 00 0f f0 f0 ff &7612 04 80 f0 04 00 0f f0 f0 ff 04 80 f0 04 00 0f f0 &7622 f0 ff 04 80 f0 04 00 0f f0 f0 ff 04 80 f0 0c 00 &7632 0f f0 f0 ff f0 f0 d2 d2 1e f0 f0 ff 07 80 f0 11 &7642 00 ff f0 f0 f2 f2 c3 f0 f0 ff f0 f0 d2 d2 1e f0 &7652 f0 ff 07 80 f0 01 00 ff 07 80 f0 21 00 ff f0 f0 &7662 f2 f2 e3 f0 f0 ff f0 f0 d2 d2 1e f0 f0 ff f0 f0 &7672 f2 f2 c3 f0 f0 ff f0 f0 d2 d2 1e f0 f0 ff 07 80 &7682 f0 01 00 ff 07 80 f0 19 00 ff f0 f0 f2 f2 e3 f0 &7692 f0 ff f0 f0 d2 d2 1e f0 f0 ff f0 f0 f2 f2 c3 f0 &76a2 f0 ff 04 80 f0 04 00 0f f0 f0 ff 04 80 f0 04 00 &76b2 0f f0 f0 ff 04 80 f0 04 00 0f f0 f0 ff 04 80 f0 &76c2 06 00 3e f2 f2 fe f0 f0 08 80 d2 08 80 f0 08 80 &76d2 e1 08 80 f8 01 00 e3 05 80 f0 03 00 e1 e1 0f 05 &76e2 80 f0 03 80 0f 05 80 f0 03 80 0f 05 80 f0 03 80 &76f2 0f 05 80 f0 03 80 0f 05 80 f0 03 80 0f 05 80 f0 &7702 03 80 0f 05 80 f0 03 80 0f 05 80 f0 03 80 0f 05 &7712 80 f0 03 00 69 e9 0f 05 80 f0 03 80 0f 05 80 f0 &7722 03 80 0f 05 80 f0 03 80 0f 05 80 f0 03 80 0f 05 &7732 80 f0 03 80 0f 05 80 f0 03 80 0f 05 80 f0 03 80 &7742 0f 05 80 f0 03 80 0f 05 80 f0 03 00 69 e9 0f 05 &7752 80 f0 03 80 0f 05 80 f0 03 80 0f 05 80 f0 03 80 &7762 0f 05 80 f0 03 80 0f 05 80 f0 03 80 0f 05 80 f0 &7772 03 80 0f 05 80 f0 03 80 0f 05 80 f0 03 80 0f 05 &7782 80 f0 03 00 69 e9 0f 05 80 f0 03 80 0f 05 80 f0 &7792 03 80 0f 05 80 f0 03 80 0f 05 80 f0 03 80 0f 05 &77a2 80 f0 03 80 0f 05 80 f0 03 80 0f 05 80 f0 03 80 &77b2 0f 05 80 f0 03 00 0f 0f 1e 05 80 f0 02 00 78 f8 &77c2 08 80 f0 08 80 e1 08 80 f8 08 80 e1 40 80 f0 08 &77d2 80 e9 40 80 f0 08 80 e9 40 80 f0 08 80 e9 40 80 &77e2 f0 08 80 f8 08 80 f0 08 80 e1 08 80 f8 08 80 e1 &77f2 40 80 f0 08 80 e9 40 80 f0 08 80 e9 40 80 f0 08 &7802 80 e9 40 80 f0 08 80 f8 08 80 f0 08 80 e1 08 80 &7812 f8 08 80 e1 40 80 f0 08 80 e9 40 80 f0 08 80 e9 &7822 40 80 f0 08 80 e9 40 80 f0 08 80 f8 08 80 f0 08 &7832 80 e1 08 80 f8 02 00 e1 f1 06 80 f0 02 00 ff ff &7842 06 80 f0 02 00 ff ff 06 80 f0 02 00 ff ff 06 80 &7852 f0 02 00 ff ff 06 80 f0 02 00 ff ff 06 80 f0 02 &7862 00 ff ff 06 80 f0 02 00 ff ff 06 80 f0 02 00 ff &7872 ff 06 80 f0 02 00 e9 f9 06 80 f0 02 00 ff ff 06 &7882 80 f0 02 00 ff ff 04 80 f0 04 00 e1 e1 ff ff 04 &7892 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff &78a2 ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f &78b2 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 &78c2 00 0f 0f e9 f9 04 80 f0 04 00 0f 0f ff ff 04 80 &78d2 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff ff &78e2 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f &78f2 ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 &7902 0f 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 &7912 04 00 0f 0f e9 f9 04 80 f0 04 00 0f 0f ff ff 04 &7922 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff &7932 ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f &7942 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 &7952 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 &7962 f0 04 00 0f 0f f8 f8 04 80 f0 02 00 78 f8 08 80 &7972 f0 08 80 e1 08 80 f8 58 80 f0 08 80 e1 c0 80 f0 &7982 08 80 f8 08 80 f0 08 80 e1 06 80 f8 02 00 8f 0f &7992 06 80 f0 02 00 0f 0f 06 80 f0 02 00 0f 0f 06 80 &79a2 f0 02 00 0f 0f 06 80 f0 02 00 0f 0f 06 80 f0 02 &79b2 00 0f 0f 06 80 f0 02 00 0f 0f 06 80 f0 02 00 0f &79c2 0f 06 80 f0 02 00 0f 0f 06 80 f0 02 00 0f 0f 06 &79d2 80 f0 02 00 0f 0f 06 80 f0 04 00 0f 0f e1 f1 04 &79e2 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff &79f2 ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f &7a02 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 &7a12 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 &7a22 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff ff &7a32 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f &7a42 ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 &7a52 0f 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 &7a62 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 &7a72 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff &7a82 ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f &7a92 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 f0 04 &7aa2 00 0f 0f ff ff 04 80 f0 04 00 0f 0f ff ff 04 80 &7ab2 f0 04 00 0f 0f ff ff 04 80 f0 04 00 0f 0f f8 f8 &7ac2 04 80 f0 02 00 0f 0f 06 80 f0 02 00 0f 0f 06 80 &7ad2 e1 02 00 0f 0f c0 97 00 ; unused &7ada 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7aea 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7afa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b2a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b4a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b6a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b7a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b8a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7b9a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7baa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7bba 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7bca 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7bda 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7bea 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7bfa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c2a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c4a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c6a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c7a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c8a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7c9a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7caa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7cba 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7cca 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7cda 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7cea 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7cfa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d2a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d4a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d6a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d7a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d8a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7d9a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7daa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7dba 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7dca 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7dda 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7dea 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7dfa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e2a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e4a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e6a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e7a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e8a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7e9a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7eaa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7eba 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7eca 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7eda 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7eea 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7efa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f2a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f4a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f5a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f6a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f7a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f8a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7f9a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7faa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7fba 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7fca 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7fda 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7fea 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 &7ffa 00 00 00 00 00 00