From 97720008e51db15dd281a2a1e64d4c65cf1bca4c Mon Sep 17 00:00:00 2001 From: Christopher Pow Date: Sat, 6 Aug 2011 18:22:49 -0500 Subject: [PATCH] Adding test ROMs. --- MMC1_A12/MMC1.asm | 66 + MMC1_A12/alphabet.chr | Bin 0 -> 1024 bytes MMC1_A12/joypad.asm | 68 + MMC1_A12/joypad.lib | Bin 0 -> 840 bytes MMC1_A12/linkfile.txt | 9 + MMC1_A12/maping.asm | 23 + MMC1_A12/mmc1.lib | Bin 0 -> 348 bytes MMC1_A12/mmc1_a12.asm | 552 + MMC1_A12/mmc1_a12.nes | Bin 0 -> 131088 bytes MMC1_A12/snrom.bin | Bin 0 -> 16 bytes PaddleTest3/Info.txt | 3 + PaddleTest3/KaboomASM.bat | 2 + PaddleTest3/PaddleTest.asm | 287 + PaddleTest3/PaddleTest.nes | Bin 0 -> 24592 bytes PaddleTest3/PaddleTestGraphics.chr | Bin 0 -> 8192 bytes PaddleTest3/PaddleTestScreen.bin | Bin 0 -> 1024 bytes PaddleTest3/Palette.bin | 1 + apu_mixer/dmc.nes | Bin 0 -> 40976 bytes apu_mixer/noise.nes | Bin 0 -> 40976 bytes apu_mixer/readme.txt | 94 + apu_mixer/source/common/ascii.chr | Bin 0 -> 1536 bytes apu_mixer/source/common/build_rom.s | 92 + apu_mixer/source/common/console.s | 328 + apu_mixer/source/common/crc.s | 118 + apu_mixer/source/common/delay.s | 190 + apu_mixer/source/common/devcart.bin | Bin 0 -> 256 bytes apu_mixer/source/common/macros.inc | 188 + apu_mixer/source/common/neshw.inc | 56 + apu_mixer/source/common/ppu.s | 203 + apu_mixer/source/common/print.s | 247 + apu_mixer/source/common/shell.inc | 32 + apu_mixer/source/common/shell.s | 180 + apu_mixer/source/common/shell_misc.s | 211 + apu_mixer/source/common/testing.s | 105 + apu_mixer/source/common/text_out.s | 61 + apu_mixer/source/common/vol_shell.inc | 126 + apu_mixer/source/dmc.s | 43 + apu_mixer/source/nes.cfg | 36 + apu_mixer/source/noise.s | 88 + apu_mixer/source/readme.txt | 121 + apu_mixer/source/square.s | 88 + apu_mixer/source/triangle.s | 54 + apu_mixer/square.nes | Bin 0 -> 40976 bytes apu_mixer/triangle.nes | Bin 0 -> 40976 bytes apu_mixer_recordings/dmc.mp3 | Bin 0 -> 82808 bytes apu_mixer_recordings/noise.mp3 | Bin 0 -> 155951 bytes apu_mixer_recordings/square.mp3 | Bin 0 -> 124604 bytes apu_mixer_recordings/triangle.mp3 | Bin 0 -> 64784 bytes apu_reset/4015_cleared.nes | Bin 0 -> 40976 bytes apu_reset/4017_timing.nes | Bin 0 -> 40976 bytes apu_reset/4017_written.nes | Bin 0 -> 40976 bytes apu_reset/irq_flag_cleared.nes | Bin 0 -> 40976 bytes apu_reset/len_ctrs_enabled.nes | Bin 0 -> 40976 bytes apu_reset/readme.txt | 129 + apu_reset/source/4015_cleared.s | 60 + apu_reset/source/4017_timing.s | 49 + apu_reset/source/4017_written.s | 73 + apu_reset/source/common/ascii.chr | Bin 0 -> 1536 bytes apu_reset/source/common/build_rom.s | 92 + apu_reset/source/common/console.s | 328 + apu_reset/source/common/crc.s | 118 + apu_reset/source/common/delay.s | 190 + apu_reset/source/common/devcart.bin | Bin 0 -> 256 bytes apu_reset/source/common/macros.inc | 188 + apu_reset/source/common/neshw.inc | 56 + apu_reset/source/common/ppu.s | 203 + apu_reset/source/common/print.s | 247 + apu_reset/source/common/run_at_reset.s | 64 + apu_reset/source/common/shell.inc | 32 + apu_reset/source/common/shell.s | 180 + apu_reset/source/common/shell_misc.s | 211 + apu_reset/source/common/testing.s | 105 + apu_reset/source/common/text_out.s | 61 + apu_reset/source/irq_flag_cleared.s | 33 + apu_reset/source/len_ctrs_enabled.s | 62 + apu_reset/source/nes.cfg | 36 + apu_reset/source/readme.txt | 121 + apu_reset/source/works_immediately.s | 90 + apu_reset/works_immediately.nes | Bin 0 -> 40976 bytes apu_test/apu_test.nes | Bin 0 -> 131088 bytes apu_test/readme.txt | 169 + apu_test/rom_singles/1-len_ctr.nes | Bin 0 -> 40976 bytes apu_test/rom_singles/2-len_table.nes | Bin 0 -> 40976 bytes apu_test/rom_singles/3-irq_flag.nes | Bin 0 -> 40976 bytes apu_test/rom_singles/4-jitter.nes | Bin 0 -> 40976 bytes apu_test/rom_singles/5-len_timing.nes | Bin 0 -> 40976 bytes apu_test/rom_singles/6-irq_flag_timing.nes | Bin 0 -> 40976 bytes apu_test/rom_singles/7-dmc_basics.nes | Bin 0 -> 40976 bytes apu_test/rom_singles/8-dmc_rates.nes | Bin 0 -> 40976 bytes apu_test/source/1-len_ctr.s | 52 + apu_test/source/2-len_table.s | 36 + apu_test/source/3-irq_flag.s | 53 + apu_test/source/4-jitter.s | 47 + apu_test/source/5-len_timing.s | 70 + apu_test/source/6-irq_flag_timing.s | 45 + apu_test/source/7-dmc_basics.s | 193 + apu_test/source/8-dmc_rates.s | 51 + apu_test/source/common/apu_shell.inc | 32 + apu_test/source/common/ascii.chr | Bin 0 -> 1536 bytes apu_test/source/common/build_rom.s | 92 + apu_test/source/common/console.s | 328 + apu_test/source/common/crc.s | 118 + apu_test/source/common/delay.s | 190 + apu_test/source/common/devcart.bin | Bin 0 -> 256 bytes apu_test/source/common/macros.inc | 188 + apu_test/source/common/neshw.inc | 56 + apu_test/source/common/ppu.s | 203 + apu_test/source/common/print.s | 247 + apu_test/source/common/shell.inc | 32 + apu_test/source/common/shell.s | 180 + apu_test/source/common/shell_misc.s | 211 + apu_test/source/common/sync_apu.s | 28 + apu_test/source/common/sync_dmc.s | 61 + apu_test/source/common/test_main_chans.s | 34 + apu_test/source/common/testing.s | 105 + apu_test/source/common/text_out.s | 61 + apu_test/source/nes.cfg | 36 + apu_test/source/readme.txt | 121 + blargg_apu_2005.07.30/01.len_ctr.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/02.len_table.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/03.irq_flag.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/04.clock_jitter.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/05.len_timing_mode0.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/06.len_timing_mode1.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/07.irq_flag_timing.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/08.irq_timing.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/09.reset_timing.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/10.len_halt_timing.nes | Bin 0 -> 16400 bytes .../11.len_reload_timing.nes | Bin 0 -> 16400 bytes blargg_apu_2005.07.30/readme.txt | 187 + blargg_apu_2005.07.30/source/01.len_ctr.asm | 90 + blargg_apu_2005.07.30/source/02.len_table.asm | 57 + blargg_apu_2005.07.30/source/03.irq_flag.asm | 82 + .../source/04.clock_jitter.asm | 71 + .../source/05.len_timing_mode0.asm | 107 + .../source/06.len_timing_mode1.asm | 103 + .../source/07.irq_flag_timing.asm | 65 + .../source/08.irq_timing.asm | 64 + .../source/09.reset_timing.asm | 53 + .../source/10.len_halt_timing.asm | 86 + .../source/11.len_reload_timing.asm | 86 + blargg_apu_2005.07.30/source/apu_util.asm | 57 + blargg_apu_2005.07.30/source/prefix_apu.asm | 40 + blargg_apu_2005.07.30/tests.txt | 160 + blargg_nes_cpu_test5/cpu.nes | Bin 0 -> 270352 bytes blargg_nes_cpu_test5/official.nes | Bin 0 -> 270352 bytes blargg_nes_cpu_test5/readme.txt | 278 + blargg_nes_cpu_test5/source/01-implied.a | 81 + blargg_nes_cpu_test5/source/02-immediate.a | 75 + blargg_nes_cpu_test5/source/03-zero_page.a | 94 + blargg_nes_cpu_test5/source/04-zp_xy.a | 119 + blargg_nes_cpu_test5/source/05-absolute.a | 90 + blargg_nes_cpu_test5/source/06-abs_xy.a | 144 + blargg_nes_cpu_test5/source/07-ind_x.a | 95 + blargg_nes_cpu_test5/source/08-ind_y.a | 88 + blargg_nes_cpu_test5/source/09-branches.a | 48 + blargg_nes_cpu_test5/source/10-stack.a | 118 + blargg_nes_cpu_test5/source/11-special.a | 68 + blargg_nes_cpu_test5/source/common/ascii.chr | Bin 0 -> 8192 bytes blargg_nes_cpu_test5/source/common/common.a | 205 + blargg_nes_cpu_test5/source/common/console.a | 1 + blargg_nes_cpu_test5/source/common/crc.a | 1 + blargg_nes_cpu_test5/source/common/crc_fast.a | 64 + blargg_nes_cpu_test5/source/common/delay.a | 1 + .../source/common/instr_test.a | 50 + .../source/common/instr_test_end.a | 178 + blargg_nes_cpu_test5/source/common/macros.a | 1 + blargg_nes_cpu_test5/source/common/nes.a | 1 + blargg_nes_cpu_test5/source/common/ppu.a | 1 + blargg_nes_cpu_test5/source/common/print.a | 1 + blargg_nes_cpu_test5/source/common/serial.a | 1 + blargg_nes_cpu_test5/source/common/shell.a | 82 + blargg_nes_cpu_test5/source/common/testing.a | 158 + blargg_nes_cpu_test5/source/nes.cfg | 28 + blargg_nes_cpu_test5/source/readme.txt | 60 + blargg_ppu_tests_2005.09.15b/palette_ram.nes | Bin 0 -> 16400 bytes .../power_up_palette.nes | Bin 0 -> 16400 bytes blargg_ppu_tests_2005.09.15b/readme.txt | 74 + .../source/palette_ram.asm | 106 + .../source/power_up_palette.asm | 35 + .../source/prefix_ppu.asm | 48 + .../source/sprite_ram.asm | 131 + .../source/vbl_clear_time.asm | 48 + .../source/vram_access.asm | 143 + blargg_ppu_tests_2005.09.15b/sprite_ram.nes | Bin 0 -> 16400 bytes .../vbl_clear_time.nes | Bin 0 -> 16400 bytes blargg_ppu_tests_2005.09.15b/vram_access.nes | Bin 0 -> 16400 bytes branch_timing_tests/1.Branch_Basics.nes | Bin 0 -> 16400 bytes branch_timing_tests/2.Backward_Branch.nes | Bin 0 -> 16400 bytes branch_timing_tests/3.Forward_Branch.nes | Bin 0 -> 16400 bytes branch_timing_tests/readme.txt | 74 + branch_timing_tests/source/1.Branch_Basics.a | 78 + .../source/2.Backward_Branch.a | 76 + branch_timing_tests/source/3.Forward_Branch.a | 82 + branch_timing_tests/source/console.a | 107 + branch_timing_tests/source/debug.a | 154 + branch_timing_tests/source/delays.a | 118 + branch_timing_tests/source/ppu_util.a | 123 + branch_timing_tests/source/prefix.a | 40 + branch_timing_tests/source/runtime_rom.a | 13 + .../source/runtime_rom_common.a | 45 + branch_timing_tests/source/validation.a | 124 + cpu_dummy_reads/cpu_dummy_reads.nes | Bin 0 -> 40976 bytes cpu_dummy_reads/source/common/ascii.chr | Bin 0 -> 2048 bytes cpu_dummy_reads/source/common/console.s | 196 + cpu_dummy_reads/source/common/crc.s | 83 + cpu_dummy_reads/source/common/delay.s | 144 + cpu_dummy_reads/source/common/macros.inc | 65 + cpu_dummy_reads/source/common/nes.inc | 34 + cpu_dummy_reads/source/common/print.s | 194 + cpu_dummy_reads/source/common/serial.s | 41 + cpu_dummy_reads/source/common/shell.inc | 434 + cpu_dummy_reads/source/common/testing.s | 162 + cpu_dummy_reads/source/cpu_dummy_reads.s | 148 + cpu_dummy_reads/source/nes.cfg | 43 + cpu_dummy_reads/source/readme.txt | 100 + cpu_interrupts_v2/cpu_interrupts.nes | Bin 0 -> 81936 bytes cpu_interrupts_v2/readme.txt | 251 + .../rom_singles/1-cli_latency.nes | Bin 0 -> 40976 bytes .../rom_singles/2-nmi_and_brk.nes | Bin 0 -> 40976 bytes .../rom_singles/3-nmi_and_irq.nes | Bin 0 -> 40976 bytes .../rom_singles/4-irq_and_dma.nes | Bin 0 -> 40976 bytes .../rom_singles/5-branch_delays_irq.nes | Bin 0 -> 40976 bytes cpu_interrupts_v2/source/1-cli_latency.s | 214 + cpu_interrupts_v2/source/2-nmi_and_brk.s | 107 + cpu_interrupts_v2/source/3-nmi_and_irq.s | 109 + cpu_interrupts_v2/source/4-irq_and_dma.s | 91 + cpu_interrupts_v2/source/4-nmi_and_dma.s | 71 + .../source/5-branch_delays_irq.s | 220 + cpu_interrupts_v2/source/common/ascii.chr | Bin 0 -> 1536 bytes cpu_interrupts_v2/source/common/build_rom.s | 92 + cpu_interrupts_v2/source/common/console.s | 328 + cpu_interrupts_v2/source/common/crc.s | 118 + cpu_interrupts_v2/source/common/delay.s | 190 + cpu_interrupts_v2/source/common/devcart.bin | Bin 0 -> 256 bytes cpu_interrupts_v2/source/common/macros.inc | 188 + cpu_interrupts_v2/source/common/neshw.inc | 56 + cpu_interrupts_v2/source/common/ppu.s | 203 + cpu_interrupts_v2/source/common/print.s | 277 + cpu_interrupts_v2/source/common/shell.inc | 32 + cpu_interrupts_v2/source/common/shell.s | 182 + cpu_interrupts_v2/source/common/shell_misc.s | 212 + cpu_interrupts_v2/source/common/sync_apu.s | 28 + cpu_interrupts_v2/source/common/sync_vbl.s | 169 + cpu_interrupts_v2/source/common/testing.s | 105 + cpu_interrupts_v2/source/common/text_out.s | 61 + cpu_interrupts_v2/source/nes.cfg | 36 + cpu_interrupts_v2/source/readme.txt | 121 + cpu_reset/ram_after_reset.nes | Bin 0 -> 40976 bytes cpu_reset/readme.txt | 93 + cpu_reset/registers.nes | Bin 0 -> 40976 bytes cpu_reset/source/common/ascii.chr | Bin 0 -> 1536 bytes cpu_reset/source/common/build_rom.s | 93 + cpu_reset/source/common/console.s | 331 + cpu_reset/source/common/crc.s | 118 + cpu_reset/source/common/delay.s | 190 + cpu_reset/source/common/devcart.bin | Bin 0 -> 256 bytes cpu_reset/source/common/macros.inc | 169 + cpu_reset/source/common/neshw.inc | 43 + cpu_reset/source/common/ppu.s | 142 + cpu_reset/source/common/print.s | 235 + cpu_reset/source/common/run_at_reset.s | 64 + cpu_reset/source/common/shell.inc | 32 + cpu_reset/source/common/shell.s | 382 + cpu_reset/source/common/testing.s | 106 + cpu_reset/source/common/text_out.s | 61 + cpu_reset/source/nes.cfg | 36 + cpu_reset/source/ram_after_reset.s | 86 + cpu_reset/source/readme.txt | 121 + cpu_reset/source/registers.s | 85 + cpu_timing_test6/cpu_timing_test.nes | Bin 0 -> 16400 bytes cpu_timing_test6/readme.txt | 147 + cpu_timing_test6/source/console.a | 108 + cpu_timing_test6/source/cpu_timing_test.asm | 471 + cpu_timing_test6/source/debug.a | 156 + cpu_timing_test6/source/delays.a | 122 + cpu_timing_test6/source/ppu_util.a | 123 + cpu_timing_test6/source/runtime_rom.a | 13 + cpu_timing_test6/source/runtime_rom_common.a | 45 + dmc_dma_during_read4/dma_2007_read.nes | Bin 0 -> 32784 bytes dmc_dma_during_read4/dma_2007_write.nes | Bin 0 -> 32784 bytes dmc_dma_during_read4/dma_4016_read.nes | Bin 0 -> 32784 bytes dmc_dma_during_read4/double_2007_read.nes | Bin 0 -> 32784 bytes dmc_dma_during_read4/read_write_2007.nes | Bin 0 -> 32784 bytes dmc_dma_during_read4/source/common/ascii.chr | Bin 0 -> 2048 bytes dmc_dma_during_read4/source/common/common.inc | 54 + dmc_dma_during_read4/source/common/console.s | 196 + dmc_dma_during_read4/source/common/crc.s | 83 + dmc_dma_during_read4/source/common/delay.s | 144 + dmc_dma_during_read4/source/common/macros.inc | 65 + dmc_dma_during_read4/source/common/nes.inc | 35 + dmc_dma_during_read4/source/common/print.s | 194 + dmc_dma_during_read4/source/common/serial.s | 43 + dmc_dma_during_read4/source/common/shell.inc | 434 + dmc_dma_during_read4/source/common/sync_dmc.s | 159 + dmc_dma_during_read4/source/common/testing.s | 162 + dmc_dma_during_read4/source/dma_2007_read.s | 67 + dmc_dma_during_read4/source/dma_2007_write.s | 69 + dmc_dma_during_read4/source/dma_4016_read.s | 46 + .../source/double_2007_read.s | 64 + dmc_dma_during_read4/source/nes.cfg | 43 + dmc_dma_during_read4/source/read_write_2007.s | 65 + dmc_dma_during_read4/source/readme.txt | 77 + dmc_tests/buffer_retained.nes | Bin 0 -> 16400 bytes dmc_tests/latency.nes | Bin 0 -> 16400 bytes dmc_tests/status.nes | Bin 0 -> 16400 bytes dmc_tests/status_irq.nes | Bin 0 -> 16400 bytes dpcmletterbox/CHANGES.txt | 16 + dpcmletterbox/NROM.ini | 31 + dpcmletterbox/README.txt | 66 + dpcmletterbox/dpcmletterbox.nes | Bin 0 -> 24592 bytes dpcmletterbox/makefile | 52 + dpcmletterbox/obj/nes/index.txt | 1 + dpcmletterbox/src/nes.h | 38 + dpcmletterbox/src/reset.s | 539 + dpcmletterbox/tilesets/ac16.png | Bin 0 -> 1646 bytes dpcmletterbox/tools/pilbmp2nes.py | 107 + exram/mmc5exram.asm | 379 + exram/mmc5exram.chr | Bin 0 -> 8192 bytes exram/mmc5exram.imk | 6 + exram/mmc5exram.nes | Bin 0 -> 24592 bytes full_palette/flowing_palette.nes | Bin 0 -> 40976 bytes full_palette/full_palette.nes | Bin 0 -> 40976 bytes full_palette/full_palette.s | 1 + full_palette/full_palette_smooth.nes | Bin 0 -> 40976 bytes full_palette/full_palette_smooth.s | 1 + instr_misc/instr_misc.nes | Bin 0 -> 65552 bytes instr_misc/readme.txt | 107 + instr_misc/rom_singles/01-abs_x_wrap.nes | Bin 0 -> 40976 bytes instr_misc/rom_singles/02-branch_wrap.nes | Bin 0 -> 40976 bytes instr_misc/rom_singles/03-dummy_reads.nes | Bin 0 -> 40976 bytes instr_misc/rom_singles/04-dummy_reads_apu.nes | Bin 0 -> 40976 bytes instr_misc/source/01-abs_x_wrap.s | 40 + instr_misc/source/02-branch_wrap.s | 37 + instr_misc/source/03-dummy_reads.s | 104 + instr_misc/source/04-dummy_reads_apu.s | 124 + instr_misc/source/common/ascii.chr | Bin 0 -> 1536 bytes instr_misc/source/common/build_rom.s | 92 + instr_misc/source/common/console.s | 331 + instr_misc/source/common/crc.s | 118 + instr_misc/source/common/delay.s | 190 + instr_misc/source/common/devcart.bin | Bin 0 -> 256 bytes instr_misc/source/common/macros.inc | 169 + instr_misc/source/common/neshw.inc | 43 + instr_misc/source/common/ppu.s | 142 + instr_misc/source/common/print.s | 235 + instr_misc/source/common/shell.inc | 32 + instr_misc/source/common/shell.s | 331 + instr_misc/source/common/testing.s | 106 + instr_misc/source/common/text_out.s | 61 + instr_misc/source/nes.cfg | 36 + instr_misc/source/readme.txt | 121 + instr_test-v3/all_instrs.nes | Bin 0 -> 262160 bytes instr_test-v3/official_only.nes | Bin 0 -> 262160 bytes instr_test-v3/readme.txt | 387 + instr_test-v3/rom_singles/01-implied.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/02-immediate.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/03-zero_page.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/04-zp_xy.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/05-absolute.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/06-abs_xy.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/07-ind_x.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/08-ind_y.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/09-branches.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/10-stack.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/11-jmp_jsr.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/12-rts.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/13-rti.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/14-brk.nes | Bin 0 -> 40976 bytes instr_test-v3/rom_singles/15-special.nes | Bin 0 -> 40976 bytes instr_test-v3/source/01-implied.s | 80 + instr_test-v3/source/02-immediate.s | 74 + instr_test-v3/source/03-zero_page.s | 93 + instr_test-v3/source/04-zp_xy.s | 118 + instr_test-v3/source/05-absolute.s | 89 + instr_test-v3/source/06-abs_xy.s | 143 + instr_test-v3/source/07-ind_x.s | 100 + instr_test-v3/source/08-ind_y.s | 87 + instr_test-v3/source/09-branches.s | 47 + instr_test-v3/source/10-stack.s | 117 + instr_test-v3/source/11-jmp_jsr.s | 28 + instr_test-v3/source/12-rts.s | 38 + instr_test-v3/source/13-rti.s | 41 + instr_test-v3/source/14-brk.s | 47 + instr_test-v3/source/15-special.s | 90 + instr_test-v3/source/common/ascii.chr | Bin 0 -> 1536 bytes instr_test-v3/source/common/bootloader.bin | Bin 0 -> 256 bytes instr_test-v3/source/common/build_rom.s | 131 + instr_test-v3/source/common/console.s | 331 + instr_test-v3/source/common/crc.s | 115 + instr_test-v3/source/common/crc_fast.s | 110 + instr_test-v3/source/common/delay.s | 202 + instr_test-v3/source/common/instr_test.inc | 99 + instr_test-v3/source/common/instr_test_end.s | 199 + instr_test-v3/source/common/macros.inc | 321 + instr_test-v3/source/common/neshw.inc | 56 + instr_test-v3/source/common/ppu.s | 205 + instr_test-v3/source/common/print.s | 278 + instr_test-v3/source/common/shell.inc | 32 + instr_test-v3/source/common/shell.s | 184 + instr_test-v3/source/common/shell_misc.s | 226 + instr_test-v3/source/common/testing.s | 106 + instr_test-v3/source/common/text_out.s | 61 + instr_test-v3/source/nes.cfg | 38 + instr_test-v3/source/readme.txt | 121 + instr_timing/instr_timing.nes | Bin 0 -> 32784 bytes instr_timing/readme.txt | 101 + instr_timing/rom_singles/1-instr_timing.nes | Bin 0 -> 40976 bytes instr_timing/rom_singles/2-branch_timing.nes | Bin 0 -> 40976 bytes instr_timing/source/1-instr_timing.s | 331 + instr_timing/source/2-branch_timing.s | 186 + instr_timing/source/common/ascii.chr | Bin 0 -> 1536 bytes instr_timing/source/common/build_rom.s | 93 + instr_timing/source/common/console.s | 331 + instr_timing/source/common/crc.s | 118 + instr_timing/source/common/delay.s | 190 + instr_timing/source/common/devcart.bin | Bin 0 -> 256 bytes instr_timing/source/common/macros.inc | 169 + instr_timing/source/common/neshw.inc | 43 + instr_timing/source/common/ppu.s | 142 + instr_timing/source/common/print.s | 235 + instr_timing/source/common/shell.inc | 32 + instr_timing/source/common/shell.s | 382 + instr_timing/source/common/testing.s | 106 + instr_timing/source/common/text_out.s | 61 + instr_timing/source/nes.cfg | 36 + instr_timing/source/readme.txt | 121 + mmc3_irq_tests/1.Clocking.nes | Bin 0 -> 16400 bytes mmc3_irq_tests/2.Details.nes | Bin 0 -> 16400 bytes mmc3_irq_tests/3.A12_clocking.nes | Bin 0 -> 16400 bytes mmc3_irq_tests/4.Scanline_timing.nes | Bin 0 -> 16400 bytes mmc3_irq_tests/5.MMC3_rev_A.nes | Bin 0 -> 16400 bytes mmc3_irq_tests/5.MMC3_rev_A.sav | 19 + mmc3_irq_tests/6.MMC3_rev_B.nes | Bin 0 -> 16400 bytes mmc3_irq_tests/readme.txt | 128 + mmc3_irq_tests/source/1.Clocking.asm | 85 + mmc3_irq_tests/source/2.Details.asm | 88 + mmc3_irq_tests/source/3.A12_clocking.asm | 88 + mmc3_irq_tests/source/4.Scanline_timing.asm | 77 + mmc3_irq_tests/source/5.MMC3_rev_A.asm | 30 + mmc3_irq_tests/source/6.MMC3_rev_B.asm | 34 + mmc3_irq_tests/source/console.asm | 101 + mmc3_irq_tests/source/debug.asm | 149 + mmc3_irq_tests/source/delays.asm | 118 + mmc3_irq_tests/source/ppu_sync.asm | 124 + mmc3_irq_tests/source/ppu_util.asm | 112 + mmc3_irq_tests/source/prefix_cpu.asm | 18 + mmc3_irq_tests/source/prefix_mmc3.asm | 162 + .../source/prefix_mmc3_validation.asm | 27 + mmc3_irq_tests/source/prefix_swap.asm | 3 + mmc3_irq_tests/source/runtime_swapcart.asm | 26 + mmc3_irq_tests/source/validation.asm | 120 + mmc3_test/1-clocking.nes | Bin 0 -> 40976 bytes mmc3_test/2-details.nes | Bin 0 -> 40976 bytes mmc3_test/3-A12_clocking.nes | Bin 0 -> 40976 bytes mmc3_test/4-scanline_timing.nes | Bin 0 -> 40976 bytes mmc3_test/5-MMC3.nes | Bin 0 -> 40976 bytes mmc3_test/6-MMC6.nes | Bin 0 -> 40976 bytes mmc3_test/readme.txt | 80 + mmc3_test/source/1-clocking.s | 79 + mmc3_test/source/2-details.s | 79 + mmc3_test/source/3-A12_clocking.s | 77 + mmc3_test/source/4-scanline_timing.s | 123 + mmc3_test/source/5-MMC3.s | 31 + mmc3_test/source/6-MMC6.s | 31 + mmc3_test/source/common/ascii.chr | Bin 0 -> 1536 bytes mmc3_test/source/common/build_rom.s | 93 + mmc3_test/source/common/console.s | 331 + mmc3_test/source/common/crc.s | 118 + mmc3_test/source/common/delay.s | 190 + mmc3_test/source/common/devcart.bin | Bin 0 -> 256 bytes mmc3_test/source/common/macros.inc | 169 + mmc3_test/source/common/neshw.inc | 43 + mmc3_test/source/common/ppu.s | 142 + mmc3_test/source/common/print.s | 235 + mmc3_test/source/common/shell.inc | 32 + mmc3_test/source/common/shell.s | 388 + mmc3_test/source/common/sync_vbl.s | 163 + mmc3_test/source/common/test_mmc3.inc | 125 + mmc3_test/source/common/testing.s | 106 + mmc3_test/source/common/text_out.s | 61 + mmc3_test/source/nes.cfg | 36 + mmc3_test/source/readme.txt | 121 + mmc3_test_2/readme.txt | 121 + mmc3_test_2/rom_singles/1-clocking.nes | Bin 0 -> 40976 bytes mmc3_test_2/rom_singles/2-details.nes | Bin 0 -> 40976 bytes mmc3_test_2/rom_singles/3-A12_clocking.nes | Bin 0 -> 40976 bytes mmc3_test_2/rom_singles/4-scanline_timing.nes | Bin 0 -> 40976 bytes mmc3_test_2/rom_singles/5-MMC3.nes | Bin 0 -> 40976 bytes mmc3_test_2/rom_singles/6-MMC3_alt.nes | Bin 0 -> 40976 bytes mmc3_test_2/source/1-clocking.s | 88 + mmc3_test_2/source/2-details.s | 88 + mmc3_test_2/source/3-A12_clocking.s | 77 + mmc3_test_2/source/4-scanline_timing.s | 123 + mmc3_test_2/source/5-MMC3.s | 31 + mmc3_test_2/source/6-MMC3_alt.s | 52 + mmc3_test_2/source/common/ascii.chr | Bin 0 -> 1536 bytes mmc3_test_2/source/common/build_rom.s | 92 + mmc3_test_2/source/common/console.s | 328 + mmc3_test_2/source/common/crc.s | 118 + mmc3_test_2/source/common/delay.s | 190 + mmc3_test_2/source/common/devcart.bin | Bin 0 -> 256 bytes mmc3_test_2/source/common/macros.inc | 188 + mmc3_test_2/source/common/neshw.inc | 56 + mmc3_test_2/source/common/ppu.s | 203 + mmc3_test_2/source/common/print.s | 247 + mmc3_test_2/source/common/shell.inc | 32 + mmc3_test_2/source/common/shell.s | 180 + mmc3_test_2/source/common/shell_misc.s | 211 + mmc3_test_2/source/common/sync_vbl.s | 163 + mmc3_test_2/source/common/test_mmc3.inc | 128 + mmc3_test_2/source/common/testing.s | 105 + mmc3_test_2/source/common/text_out.s | 61 + mmc3_test_2/source/nes.cfg | 36 + mmc3_test_2/source/readme.txt | 121 + nes15-1.0.0/LICENSE | 23 + nes15-1.0.0/Makefile | 114 + nes15-1.0.0/README | 118 + nes15-1.0.0/bin2pkb/Makefile | 36 + nes15-1.0.0/bin2pkb/bin2pkb.c | 85 + nes15-1.0.0/clib/binio.c | 429 + nes15-1.0.0/clib/binio.h | 185 + nes15-1.0.0/clib/img8.c | 53 + nes15-1.0.0/clib/img8.h | 87 + nes15-1.0.0/clib/img8_pcx.c | 197 + nes15-1.0.0/clib/neschr.c | 221 + nes15-1.0.0/clib/neschr.h | 140 + nes15-1.0.0/clib/packbits.c | 208 + nes15-1.0.0/clib/packbits.h | 112 + nes15-1.0.0/fifteen/Makefile | 35 + nes15-1.0.0/fifteen/fifteen.inc | 104 + nes15-1.0.0/fifteen/fifteen.s | 1152 ++ nes15-1.0.0/fifteen/test.cfg | 19 + nes15-1.0.0/fifteen/test.s | 98 + nes15-1.0.0/game.cfg | 35 + nes15-1.0.0/gfx/bgd.pal | 1 + nes15-1.0.0/gfx/cursor.pcx | Bin 0 -> 1049 bytes nes15-1.0.0/gfx/edges.pcx | Bin 0 -> 1097 bytes nes15-1.0.0/gfx/font.pcx | Bin 0 -> 2990 bytes nes15-1.0.0/gfx/nums.pcx | Bin 0 -> 2287 bytes nes15-1.0.0/gfx/play.nam | Bin 0 -> 1024 bytes nes15-1.0.0/gfx/spr.pal | Bin 0 -> 16 bytes nes15-1.0.0/gfx/tile.pcx | Bin 0 -> 939 bytes nes15-1.0.0/gfx/title.nam | Bin 0 -> 1024 bytes nes15-1.0.0/nes-lib/apu.inc | 37 + nes15-1.0.0/nes-lib/bcd.inc | 109 + nes15-1.0.0/nes-lib/bcd16.s | 35 + nes15-1.0.0/nes-lib/bcd16_from_bin.s | 57 + nes15-1.0.0/nes-lib/bcd16_to_vrub.s | 80 + nes15-1.0.0/nes-lib/joy.inc | 116 + nes15-1.0.0/nes-lib/joy_read1.s | 40 + nes15-1.0.0/nes-lib/joy_repeat1.s | 51 + nes15-1.0.0/nes-lib/joy_update1.s | 42 + nes15-1.0.0/nes-lib/lfsr32.inc | 33 + nes15-1.0.0/nes-lib/lfsr32.s | 41 + nes15-1.0.0/nes-lib/muse.inc | 470 + nes15-1.0.0/nes-lib/muse.s | 932 + nes15-1.0.0/nes-lib/oam.inc | 66 + nes15-1.0.0/nes-lib/oam_clear.s | 30 + nes15-1.0.0/nes-lib/pkb.inc | 46 + nes15-1.0.0/nes-lib/pkb.s | 16 + nes15-1.0.0/nes-lib/pkb_to_vram.s | 72 + nes15-1.0.0/nes-lib/ppu.inc | 66 + nes15-1.0.0/nes-lib/vrub.inc | 152 + nes15-1.0.0/nes-lib/vrub.s | 16 + nes15-1.0.0/nes-lib/vrub_from_mem.s | 75 + nes15-1.0.0/nes15-NTSC.nes | Bin 0 -> 28688 bytes nes15-1.0.0/nes15-PAL.nes | Bin 0 -> 28688 bytes nes15-1.0.0/pcx2chr/Makefile | 38 + nes15-1.0.0/pcx2chr/pcx2chr.c | 171 + nes15-1.0.0/snd/mus0.s | 600 + nes15-1.0.0/snd/mus1.s | 75 + nes15-1.0.0/snd/sfx0.s | 35 + nes15-1.0.0/snd/sfx1.s | 38 + nes15-1.0.0/snd/snd.inc | 39 + nes15-1.0.0/snd/snd.s | 71 + nes15-1.0.0/src/game.inc | 59 + nes15-1.0.0/src/game.s | 150 + nes15-1.0.0/src/gfx.inc | 191 + nes15-1.0.0/src/gfx.s | 666 + nes15-1.0.0/src/header.s | 16 + nes15-1.0.0/src/nmi.inc | 69 + nes15-1.0.0/src/nmi.s | 66 + nes15-1.0.0/src/play.inc | 29 + nes15-1.0.0/src/play.s | 571 + nes15-1.0.0/src/title.inc | 29 + nes15-1.0.0/src/title.s | 70 + nes_instr_test/nsf_singles/01-implied.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/02-immediate.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/03-zero_page.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/04-zp_xy.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/05-absolute.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/06-abs_xy.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/07-ind_x.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/08-ind_y.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/09-branches.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/10-stack.nsf | Bin 0 -> 32896 bytes nes_instr_test/nsf_singles/11-special.nsf | Bin 0 -> 32896 bytes nes_instr_test/readme.txt | 364 + nes_instr_test/rom_singles/01-implied.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/02-immediate.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/03-zero_page.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/04-zp_xy.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/05-absolute.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/06-abs_xy.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/07-ind_x.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/08-ind_y.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/09-branches.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/10-stack.nes | Bin 0 -> 40976 bytes nes_instr_test/rom_singles/11-special.nes | Bin 0 -> 40976 bytes nes_instr_test/source/01-implied.s | 81 + nes_instr_test/source/02-immediate.s | 75 + nes_instr_test/source/03-zero_page.s | 94 + nes_instr_test/source/04-zp_xy.s | 119 + nes_instr_test/source/05-absolute.s | 90 + nes_instr_test/source/06-abs_xy.s | 144 + nes_instr_test/source/07-ind_x.s | 95 + nes_instr_test/source/08-ind_y.s | 88 + nes_instr_test/source/09-branches.s | 48 + nes_instr_test/source/10-stack.s | 118 + nes_instr_test/source/11-special.s | 90 + nes_instr_test/source/common/ascii.chr | Bin 0 -> 2048 bytes nes_instr_test/source/common/build_nsf.s | 135 + nes_instr_test/source/common/build_rom.s | 87 + nes_instr_test/source/common/console.s | 222 + nes_instr_test/source/common/crc.s | 87 + nes_instr_test/source/common/crc_fast.s | 65 + nes_instr_test/source/common/delay.s | 191 + nes_instr_test/source/common/instr_test.inc | 51 + nes_instr_test/source/common/instr_test_end.s | 180 + nes_instr_test/source/common/macros.inc | 135 + nes_instr_test/source/common/neshw.inc | 37 + nes_instr_test/source/common/ppu.s | 141 + nes_instr_test/source/common/print.s | 207 + nes_instr_test/source/common/shell.inc | 23 + nes_instr_test/source/common/shell.s | 352 + nes_instr_test/source/common/testing.s | 124 + nes_instr_test/source/common/text_out.s | 82 + nes_instr_test/source/nes.cfg | 51 + nes_instr_test/source/nsf.cfg | 31 + nes_instr_test/source/readme.txt | 88 + nmi_sync/demo_ntsc.nes | Bin 0 -> 40976 bytes nmi_sync/demo_ntsc.s | 153 + nmi_sync/demo_pal.nes | Bin 0 -> 40976 bytes nmi_sync/demo_pal.s | 153 + nmi_sync/nmi_sync.s | 185 + nmi_sync/readme.txt | 268 + nmi_sync/unrom.cfg | 27 + ny2011/ny2011.nes | Bin 0 -> 40976 bytes oam_read/oam_read.nes | Bin 0 -> 40976 bytes oam_read/readme.txt | 161 + oam_read/source/common/ascii.chr | Bin 0 -> 1536 bytes oam_read/source/common/build_rom.s | 91 + oam_read/source/common/console.s | 224 + oam_read/source/common/crc.s | 118 + oam_read/source/common/delay.s | 190 + oam_read/source/common/devcart.bin | Bin 0 -> 256 bytes oam_read/source/common/macros.inc | 169 + oam_read/source/common/neshw.inc | 37 + oam_read/source/common/ppu.s | 129 + oam_read/source/common/print.s | 225 + oam_read/source/common/shell.inc | 32 + oam_read/source/common/shell.s | 330 + oam_read/source/common/testing.s | 106 + oam_read/source/common/text_out.s | 61 + oam_read/source/nes.cfg | 33 + oam_read/source/oam_read.s | 60 + oam_read/source/readme.txt | 88 + oam_stress/oam_stress.nes | Bin 0 -> 40976 bytes oam_stress/readme.txt | 81 + oam_stress/source/common/ascii.chr | Bin 0 -> 1536 bytes oam_stress/source/common/build_multi.s | 116 + oam_stress/source/common/build_nsf.s | 162 + oam_stress/source/common/build_rom.s | 91 + oam_stress/source/common/console.s | 224 + oam_stress/source/common/crc.s | 118 + oam_stress/source/common/crc_fast.s | 65 + oam_stress/source/common/delay.s | 190 + oam_stress/source/common/devcart.bin | Bin 0 -> 256 bytes oam_stress/source/common/macros.inc | 169 + oam_stress/source/common/neshw.inc | 37 + oam_stress/source/common/ppu.s | 129 + oam_stress/source/common/print.s | 225 + oam_stress/source/common/shell.inc | 32 + oam_stress/source/common/shell.s | 330 + oam_stress/source/common/testing.s | 106 + oam_stress/source/common/text_out.s | 61 + oam_stress/source/nes.cfg | 33 + oam_stress/source/oam_stress.s | 118 + oam_stress/source/readme.txt | 88 + other/2003-test.nes | Bin 0 -> 40976 bytes ...8bitpeoples_-_deadline_console_invitro.nes | Bin 0 -> 32784 bytes other/BLOCKS.NES | Bin 0 -> 40976 bytes other/BladeBuster.nes | Bin 0 -> 393232 bytes other/CMC80s.NES | Bin 0 -> 49168 bytes other/DROPOFF7.NES | Bin 0 -> 532496 bytes "other/Duelito - L\351eme.txt" | 36 + other/Duelito.nes | Bin 0 -> 32784 bytes other/FLAME.NES | Bin 0 -> 40976 bytes other/GENIE.NES | Bin 0 -> 24592 bytes other/GREYS.NES | Bin 0 -> 24592 bytes other/HelloWorldDemo.nes | Bin 0 -> 24592 bytes other/LINUS.ASM | 124 + other/LINUS.NSF | Bin 0 -> 16512 bytes other/LINUSMUS.NES | Bin 0 -> 32784 bytes other/MOTION.NES | Bin 0 -> 40976 bytes other/NESMPROP.TXT | 108 + other/PCM.demo.wgraphics.nes | Bin 0 -> 262160 bytes other/RasterChromaLuma.NES | Bin 0 -> 24592 bytes other/RasterDemo.NES | Bin 0 -> 32784 bytes other/RasterTest1.NES | Bin 0 -> 24592 bytes other/RasterTest2.NES | Bin 0 -> 24592 bytes other/RasterTest3.NES | Bin 0 -> 24592 bytes other/RasterTest3a.NES | Bin 0 -> 24592 bytes other/RasterTest3b.NES | Bin 0 -> 24592 bytes other/RasterTest3c.NES | Bin 0 -> 24592 bytes other/RasterTest3d.NES | Bin 0 -> 24592 bytes other/RasterTest3e.NES | Bin 0 -> 24592 bytes other/ReadmeCMC80s.TXT | 31 + other/ReadmeSayoonara!.txt | 41 + other/Retrocoders - Years behind.NES | Bin 0 -> 65552 bytes other/S0.NES | Bin 0 -> 24592 bytes other/SPRITE.NES | Bin 0 -> 24592 bytes other/Sayoonara!.NES | Bin 0 -> 40976 bytes other/SimpleParallaxDemo.nes | Bin 0 -> 24592 bytes other/TANESPOT.NES | Bin 0 -> 65552 bytes other/TEST.NES | Bin 0 -> 32784 bytes other/The Duel - Readme.txt | 34 + other/apocalypse.nes | Bin 0 -> 24592 bytes other/apocalypse.src | 811 + other/blargg_litewall-2.nes | Bin 0 -> 40976 bytes other/blargg_litewall-9.nes | Bin 0 -> 40976 bytes other/demo jitter.nes | Bin 0 -> 24592 bytes other/demo.nes | Bin 0 -> 24592 bytes other/dnsf2_enginetest3.nsf | Bin 0 -> 28801 bytes other/fceuxd.nes | Bin 0 -> 131088 bytes other/firefly.asm | 379 + other/firefly.nes | Bin 0 -> 24592 bytes other/fun-n-games.nes | Bin 0 -> 24592 bytes other/litewall2.nes | Bin 0 -> 45072 bytes other/litewall3.nes | Bin 0 -> 45072 bytes other/litewall5.nes | Bin 0 -> 45072 bytes other/logo (E).nes | Bin 0 -> 32784 bytes other/manhole.nes | Bin 0 -> 24592 bytes other/max-300.nes | Bin 0 -> 532496 bytes other/midscanline.nes | Bin 0 -> 49168 bytes other/minipack.nes | Bin 0 -> 16400 bytes other/minipack.txt | 376 + other/nes1.wav | Bin 0 -> 44 bytes other/nescafe.nes | Bin 0 -> 24592 bytes other/nestest.log | 8991 +++++++++ other/nestest.nes | Bin 0 -> 24592 bytes other/nestest.txt | 724 + other/nestopia.nes | Bin 0 -> 131088 bytes other/new-game.nes | Bin 0 -> 24592 bytes other/nintendulator.nes | Bin 0 -> 131088 bytes other/physics.0.1.nes | Bin 0 -> 24592 bytes other/pulsar.nes | Bin 0 -> 131088 bytes other/rastesam4.nes | Bin 0 -> 270352 bytes other/read2004.nes | Bin 0 -> 24592 bytes other/readme.txt | 15 + other/smbdis.asm | 16352 ++++++++++++++++ other/snow.nes | Bin 0 -> 40976 bytes other/snow.txt | 72 + other/test001.nes | Bin 0 -> 131088 bytes other/window2_ntsc.nes | Bin 0 -> 24592 bytes other/window2_pal.nes | Bin 0 -> 24592 bytes other/window_old_ntsc.nes | Bin 0 -> 24592 bytes other/window_old_pal.nes | Bin 0 -> 24592 bytes pal_apu_tests/01.len_ctr.nes | Bin 0 -> 16400 bytes pal_apu_tests/02.len_table.nes | Bin 0 -> 16400 bytes pal_apu_tests/03.irq_flag.nes | Bin 0 -> 16400 bytes pal_apu_tests/04.clock_jitter.nes | Bin 0 -> 16400 bytes pal_apu_tests/05.len_timing_mode0.nes | Bin 0 -> 16400 bytes pal_apu_tests/06.len_timing_mode1.nes | Bin 0 -> 16400 bytes pal_apu_tests/07.irq_flag_timing.nes | Bin 0 -> 16400 bytes pal_apu_tests/08.irq_timing.nes | Bin 0 -> 16400 bytes pal_apu_tests/10.len_halt_timing.nes | Bin 0 -> 16400 bytes pal_apu_tests/11.len_reload_timing.nes | Bin 0 -> 16400 bytes pal_apu_tests/readme.txt | 173 + pal_apu_tests/source/01.len_ctr.a | 87 + pal_apu_tests/source/02.len_table.a | 49 + pal_apu_tests/source/03.irq_flag.a | 80 + pal_apu_tests/source/04.clock_jitter.a | 81 + pal_apu_tests/source/05.len_timing_mode0.a | 103 + pal_apu_tests/source/06.len_timing_mode1.a | 99 + pal_apu_tests/source/07.irq_flag_timing.a | 66 + pal_apu_tests/source/08.irq_timing.a | 64 + pal_apu_tests/source/10.len_halt_timing.a | 84 + pal_apu_tests/source/11.len_reload_timing.a | 86 + pal_apu_tests/source/console.a | 108 + pal_apu_tests/source/debug.a | 156 + pal_apu_tests/source/delays.a | 122 + pal_apu_tests/source/prefix_apu.a | 52 + pal_apu_tests/source/runtime_rom.a | 13 + pal_apu_tests/source/runtime_rom_common.a | 45 + pal_apu_tests/source/sync_apu.a | 19 + pal_apu_tests/source/validation.a | 128 + ppu_open_bus/ppu_open_bus.nes | Bin 0 -> 40976 bytes ppu_open_bus/readme.txt | 90 + ppu_open_bus/source/common/ascii.chr | Bin 0 -> 1536 bytes ppu_open_bus/source/common/build_rom.s | 92 + ppu_open_bus/source/common/console.s | 224 + ppu_open_bus/source/common/crc.s | 118 + ppu_open_bus/source/common/delay.s | 190 + ppu_open_bus/source/common/devcart.bin | Bin 0 -> 256 bytes ppu_open_bus/source/common/macros.inc | 169 + ppu_open_bus/source/common/neshw.inc | 37 + ppu_open_bus/source/common/ppu.s | 142 + ppu_open_bus/source/common/print.s | 225 + ppu_open_bus/source/common/shell.inc | 32 + ppu_open_bus/source/common/shell.s | 331 + ppu_open_bus/source/common/testing.s | 106 + ppu_open_bus/source/common/text_out.s | 61 + ppu_open_bus/source/nes.cfg | 33 + ppu_open_bus/source/ppu_open_bus.s | 112 + ppu_open_bus/source/readme.txt | 88 + ppu_vbl_nmi/ppu_vbl_nmi.nes | Bin 0 -> 262160 bytes ppu_vbl_nmi/readme.txt | 255 + ppu_vbl_nmi/rom_singles/01-vbl_basics.nes | Bin 0 -> 40976 bytes ppu_vbl_nmi/rom_singles/02-vbl_set_time.nes | Bin 0 -> 40976 bytes ppu_vbl_nmi/rom_singles/03-vbl_clear_time.nes | Bin 0 -> 40976 bytes ppu_vbl_nmi/rom_singles/04-nmi_control.nes | Bin 0 -> 40976 bytes ppu_vbl_nmi/rom_singles/05-nmi_timing.nes | Bin 0 -> 40976 bytes ppu_vbl_nmi/rom_singles/06-suppression.nes | Bin 0 -> 40976 bytes ppu_vbl_nmi/rom_singles/07-nmi_on_timing.nes | Bin 0 -> 40976 bytes ppu_vbl_nmi/rom_singles/08-nmi_off_timing.nes | Bin 0 -> 40976 bytes .../rom_singles/09-even_odd_frames.nes | Bin 0 -> 40976 bytes .../rom_singles/10-even_odd_timing.nes | Bin 0 -> 40976 bytes ppu_vbl_nmi/source/01-vbl_basics.s | 58 + ppu_vbl_nmi/source/02-vbl_set_time.s | Bin 0 -> 687 bytes ppu_vbl_nmi/source/03-vbl_clear_time.s | 33 + ppu_vbl_nmi/source/04-nmi_control.s | 111 + ppu_vbl_nmi/source/05-nmi_timing.s | 55 + ppu_vbl_nmi/source/06-suppression.s | 63 + ppu_vbl_nmi/source/07-nmi_on_timing.s | 49 + ppu_vbl_nmi/source/08-nmi_off_timing.s | 52 + ppu_vbl_nmi/source/09-even_odd_frames.s | 56 + ppu_vbl_nmi/source/10-even_odd_timing.s | 86 + ppu_vbl_nmi/source/common/ascii.chr | Bin 0 -> 1536 bytes ppu_vbl_nmi/source/common/bootloader.bin | Bin 0 -> 256 bytes ppu_vbl_nmi/source/common/build_rom.s | 94 + ppu_vbl_nmi/source/common/console.s | 328 + ppu_vbl_nmi/source/common/crc.s | 115 + ppu_vbl_nmi/source/common/delay.s | 202 + ppu_vbl_nmi/source/common/macros.inc | 321 + ppu_vbl_nmi/source/common/neshw.inc | 56 + ppu_vbl_nmi/source/common/ppu.s | 203 + ppu_vbl_nmi/source/common/print.s | 278 + ppu_vbl_nmi/source/common/shell.inc | 32 + ppu_vbl_nmi/source/common/shell.s | 182 + ppu_vbl_nmi/source/common/shell_misc.s | 226 + ppu_vbl_nmi/source/common/sync_vbl.s | 169 + ppu_vbl_nmi/source/common/testing.s | 105 + ppu_vbl_nmi/source/common/text_out.s | 61 + ppu_vbl_nmi/source/nes.cfg | 38 + ppu_vbl_nmi/source/readme.txt | 121 + read_joy3/count_errors.nes | Bin 0 -> 40976 bytes read_joy3/count_errors_fast.nes | Bin 0 -> 40976 bytes read_joy3/source/common/ascii.chr | Bin 0 -> 2048 bytes read_joy3/source/common/console.s | 196 + read_joy3/source/common/crc.s | 85 + read_joy3/source/common/delay.s | 144 + read_joy3/source/common/macros.inc | 96 + read_joy3/source/common/nes.inc | 35 + read_joy3/source/common/print.s | 191 + read_joy3/source/common/serial.s | 43 + read_joy3/source/common/shell.inc | 434 + read_joy3/source/common/sync_dmc.s | 49 + read_joy3/source/common/testing.s | 162 + read_joy3/source/count_errors.s | 73 + read_joy3/source/count_errors_fast.s | 48 + read_joy3/source/nes.cfg | 43 + read_joy3/source/read_joy.inc | 62 + read_joy3/source/readme.txt | 77 + read_joy3/source/test_buttons.s | 62 + read_joy3/source/thorough_test.s | 67 + read_joy3/test_buttons.nes | Bin 0 -> 40976 bytes read_joy3/thorough_test.nes | Bin 0 -> 40976 bytes scanline/scanline.asm | 297 + scanline/scanline.chr | Bin 0 -> 8192 bytes scanline/scanline.imk | 6 + scanline/scanline.nes | Bin 0 -> 24592 bytes scanline/scanline.umk | 8 + scanline/scanline.unif | Bin 0 -> 24685 bytes scrolltest/makefile | 10 + scrolltest/nesedit.cfg | Bin 0 -> 240 bytes scrolltest/scroll.bin | Bin 0 -> 16384 bytes scrolltest/scroll.nes | Bin 0 -> 16400 bytes scrolltest/scroll.s | 1226 ++ scrolltest/scrollhd.bin | Bin 0 -> 16 bytes scrolltest/scrollhd.s | 11 + scrolltest/scrtest.blk | Bin 0 -> 576 bytes scrolltest/scrtest.chr | Bin 0 -> 4096 bytes scrolltest/scrtest.map | Bin 0 -> 404 bytes scrolltest/scrtest.pal | Bin 0 -> 16 bytes soundtest/README.TXT | 1 + soundtest/SNDTEST.ASM | 515 + soundtest/SNDTEST.CHR | Bin 0 -> 8192 bytes soundtest/SNDTEST.NES | Bin 0 -> 24592 bytes sprdma_and_dmc_dma/sprdma_and_dmc_dma.nes | Bin 0 -> 40976 bytes sprdma_and_dmc_dma/sprdma_and_dmc_dma_512.nes | Bin 0 -> 40976 bytes sprite_hit_tests_2005.10.05/01.basics.nes | Bin 0 -> 16400 bytes sprite_hit_tests_2005.10.05/02.alignment.nes | Bin 0 -> 16400 bytes sprite_hit_tests_2005.10.05/03.corners.nes | Bin 0 -> 16400 bytes sprite_hit_tests_2005.10.05/04.flip.nes | Bin 0 -> 16400 bytes sprite_hit_tests_2005.10.05/05.left_clip.nes | Bin 0 -> 16400 bytes sprite_hit_tests_2005.10.05/06.right_edge.nes | Bin 0 -> 16400 bytes .../07.screen_bottom.nes | Bin 0 -> 16400 bytes .../08.double_height.nes | Bin 0 -> 16400 bytes .../09.timing_basics.nes | Bin 0 -> 16400 bytes .../10.timing_order.nes | Bin 0 -> 16400 bytes .../11.edge_timing.nes | Bin 0 -> 16400 bytes sprite_hit_tests_2005.10.05/readme.txt | 162 + .../source/01.basics.asm | 90 + .../source/02.alignment.asm | 98 + .../source/03.corners.asm | 61 + .../source/04.flip.asm | 52 + .../source/05.left_clip.asm | 72 + .../source/06.right_edge.asm | 60 + .../source/07.screen_bottom.asm | 65 + .../source/08.double_height.asm | 55 + .../source/09.timing_basics.asm | 83 + .../source/10.timing_order.asm | 61 + .../source/11.edge_timing.asm | 62 + .../source/prefix_sprite_hit.a | 178 + .../source/runtime/console.a | 101 + .../source/runtime/debug.a | 77 + .../source/runtime/delays.a | 105 + .../source/runtime/ppu_sync.a | 124 + .../source/runtime/ppu_util.a | 112 + .../source/runtime/prefix_ppu.a | 130 + .../source/runtime/runtime_rom.a | 13 + .../source/runtime/runtime_rom_common.a | 45 + .../source/runtime/validation.a | 102 + sprite_overflow_tests/1.Basics.nes | Bin 0 -> 16400 bytes sprite_overflow_tests/2.Details.nes | Bin 0 -> 16400 bytes sprite_overflow_tests/3.Timing.nes | Bin 0 -> 16400 bytes sprite_overflow_tests/4.Obscure.nes | Bin 0 -> 16400 bytes sprite_overflow_tests/5.Emulator.nes | Bin 0 -> 16400 bytes sprite_overflow_tests/readme.txt | 96 + sprite_overflow_tests/source/1.Basics.a | 67 + sprite_overflow_tests/source/2.Details.a | 108 + sprite_overflow_tests/source/3.Timing.a | 142 + sprite_overflow_tests/source/4.Obscure.a | 144 + sprite_overflow_tests/source/5.Emulator.a | 126 + sprite_overflow_tests/source/console.a | 107 + sprite_overflow_tests/source/debug.a | 154 + sprite_overflow_tests/source/delays.a | 118 + sprite_overflow_tests/source/ppu_sync.a | 124 + sprite_overflow_tests/source/ppu_util.a | 123 + sprite_overflow_tests/source/prefix.a | 145 + sprite_overflow_tests/source/prefix_ppu.a | 186 + sprite_overflow_tests/source/runtime_rom.a | 13 + .../source/runtime_rom_common.a | 45 + sprite_overflow_tests/source/validation.a | 124 + spritecans-2011/README.txt | 24 + spritecans-2011/makefile | 66 + spritecans-2011/nes.ini | 31 + spritecans-2011/obj/nes/index.txt | 1 + spritecans-2011/spritecans.nes | Bin 0 -> 24592 bytes spritecans-2011/src/music.s | 381 + spritecans-2011/src/musicseq.h | 104 + spritecans-2011/src/musicseq.s | 191 + spritecans-2011/src/nes.h | 51 + spritecans-2011/src/paldetect.s | 68 + spritecans-2011/src/sound.s | 354 + spritecans-2011/src/sprite.nam | Bin 0 -> 1024 bytes spritecans-2011/src/sprite.s | 511 + spritecans-2011/tilesets/main.png | Bin 0 -> 1240 bytes spritecans-2011/tools/8name.py | 559 + spritecans-2011/tools/mktables.py | 64 + spritecans-2011/tools/pilbmp2nes.py | 116 + spritecans-2011/zip.in | 18 + stars_se/Header_32k | Bin 0 -> 16 bytes stars_se/Make_StarsSE | 2 + stars_se/ReadmeStarsSE.TXT | 21 + stars_se/StarsSE.CHR | Bin 0 -> 8192 bytes stars_se/StarsSE.NES | Bin 0 -> 40976 bytes stars_se/StarsSE.SPR | Bin 0 -> 512 bytes stars_se/StarsSE.asm | 533 + stars_se/scrolltext.bin | 239 + stars_se/starsnam.asm | 66 + status.txt | 178 + stomper/smwnsf.dat | 1024 + stomper/smwstomp.asm | 450 + stomper/smwstomp.chr | Bin 0 -> 8192 bytes stomper/smwstomp.imk | 5 + stomper/smwstomp.nes | Bin 0 -> 40976 bytes stomper/smwstomp.umk | 7 + stomper/smwstomp.unif | Bin 0 -> 41076 bytes stress/FIREWAVE.ASM | 64 + stress/Header_Mapper0 | Bin 0 -> 16 bytes stress/Make_NEStress | 2 + stress/NEStress.NES | Bin 0 -> 40976 bytes stress/NEStress.asm | 4861 +++++ stress/NEStress.txt | 196 + stress/SolarTitleNAM.asm | 66 + stress/Tanks.chr | Bin 0 -> 8192 bytes stress/TanksFadePal.ASM | 6 + stress/TanksPal.ASM | 46 + test_roms.xml | 723 + tutor/make.bat | 1 + tutor/tutor.asm | 23 + tutor/tutor.nes | Bin 0 -> 24592 bytes tutor/tutorchr.asm | 90 + tutor/tutorprg.asm | 331 + tvpassfail/README.txt | 51 + tvpassfail/health.nam | Bin 0 -> 1024 bytes tvpassfail/mk.bat | 7 + tvpassfail/nes.ini | 23 + tvpassfail/palsquare.nam | Bin 0 -> 1024 bytes tvpassfail/square.nam | Bin 0 -> 1024 bytes tvpassfail/square.pal | Bin 0 -> 16 bytes tvpassfail/tiled.pal | Bin 0 -> 768 bytes tvpassfail/tv.chr | Bin 0 -> 8192 bytes tvpassfail/tv.nam | Bin 0 -> 1024 bytes tvpassfail/tv.nes | Bin 0 -> 24592 bytes tvpassfail/tv.pal | Bin 0 -> 16 bytes tvpassfail/tv.s | 361 + tvpassfail/tvpassfail.zip | Bin 0 -> 5821 bytes vbl_nmi_timing/1.frame_basics.nes | Bin 0 -> 16400 bytes vbl_nmi_timing/2.vbl_timing.nes | Bin 0 -> 16400 bytes vbl_nmi_timing/3.even_odd_frames.nes | Bin 0 -> 16400 bytes vbl_nmi_timing/4.vbl_clear_timing.nes | Bin 0 -> 16400 bytes vbl_nmi_timing/5.nmi_suppression.nes | Bin 0 -> 16400 bytes vbl_nmi_timing/6.nmi_disable.nes | Bin 0 -> 16400 bytes vbl_nmi_timing/7.nmi_timing.nes | Bin 0 -> 16400 bytes vbl_nmi_timing/readme.txt | 121 + vbl_nmi_timing/source/1.frame_basics.a | 104 + vbl_nmi_timing/source/2.vbl_timing.a | 74 + vbl_nmi_timing/source/3.even_odd_frames.a | 136 + vbl_nmi_timing/source/4.vbl_clear_timing.a | 69 + vbl_nmi_timing/source/5.nmi_suppression.a | 89 + vbl_nmi_timing/source/6.nmi_disable.a | 69 + vbl_nmi_timing/source/7.nmi_timing.a | 127 + vbl_nmi_timing/source/support/chr.bin | Bin 0 -> 472 bytes vbl_nmi_timing/source/support/console.a | 107 + vbl_nmi_timing/source/support/debug.a | 154 + vbl_nmi_timing/source/support/delays.a | 118 + vbl_nmi_timing/source/support/ppu_sync.a | 124 + vbl_nmi_timing/source/support/ppu_util.a | 112 + vbl_nmi_timing/source/support/prefix_ppu.a | 143 + vbl_nmi_timing/source/support/runtime_rom.a | 13 + .../source/support/runtime_rom_common.a | 45 + vbl_nmi_timing/source/support/validation.a | 120 + volume_tests/README.txt | 97 + volume_tests/empty.chr | Bin 0 -> 8192 bytes volume_tests/makefile | 31 + volume_tests/nes.ini | 22 + volume_tests/obj/nes/khan | 0 volume_tests/recordings/fceux.ogg | Bin 0 -> 596578 bytes volume_tests/recordings/nes-001.ogg | Bin 0 -> 639753 bytes volume_tests/recordings/nestopia.ogg | Bin 0 -> 611153 bytes volume_tests/recordings/nintendulator.ogg | Bin 0 -> 627567 bytes volume_tests/src/hello.s | 126 + volume_tests/src/pads.s | 81 + volume_tests/src/sound.s | 285 + volume_tests/volumes.nes | Bin 0 -> 24592 bytes volume_tests/zip.in | 14 + window5/colorwin.asm | 488 + window5/colorwin.chr | Bin 0 -> 8192 bytes window5/colorwin_ntsc.nes | Bin 0 -> 24592 bytes window5/colorwin_pal.nes | Bin 0 -> 24592 bytes window5/header | Bin 0 -> 16 bytes window5/linkfile | 5 + window5/maping.asm | 25 + window5/win_timing.asm | 169 + 1068 files changed, 118991 insertions(+) create mode 100644 MMC1_A12/MMC1.asm create mode 100644 MMC1_A12/alphabet.chr create mode 100644 MMC1_A12/joypad.asm create mode 100644 MMC1_A12/joypad.lib create mode 100644 MMC1_A12/linkfile.txt create mode 100644 MMC1_A12/maping.asm create mode 100644 MMC1_A12/mmc1.lib create mode 100644 MMC1_A12/mmc1_a12.asm create mode 100644 MMC1_A12/mmc1_a12.nes create mode 100644 MMC1_A12/snrom.bin create mode 100644 PaddleTest3/Info.txt create mode 100644 PaddleTest3/KaboomASM.bat create mode 100644 PaddleTest3/PaddleTest.asm create mode 100644 PaddleTest3/PaddleTest.nes create mode 100644 PaddleTest3/PaddleTestGraphics.chr create mode 100644 PaddleTest3/PaddleTestScreen.bin create mode 100644 PaddleTest3/Palette.bin create mode 100644 apu_mixer/dmc.nes create mode 100644 apu_mixer/noise.nes create mode 100644 apu_mixer/readme.txt create mode 100644 apu_mixer/source/common/ascii.chr create mode 100644 apu_mixer/source/common/build_rom.s create mode 100644 apu_mixer/source/common/console.s create mode 100644 apu_mixer/source/common/crc.s create mode 100644 apu_mixer/source/common/delay.s create mode 100644 apu_mixer/source/common/devcart.bin create mode 100644 apu_mixer/source/common/macros.inc create mode 100644 apu_mixer/source/common/neshw.inc create mode 100644 apu_mixer/source/common/ppu.s create mode 100644 apu_mixer/source/common/print.s create mode 100644 apu_mixer/source/common/shell.inc create mode 100644 apu_mixer/source/common/shell.s create mode 100644 apu_mixer/source/common/shell_misc.s create mode 100644 apu_mixer/source/common/testing.s create mode 100644 apu_mixer/source/common/text_out.s create mode 100644 apu_mixer/source/common/vol_shell.inc create mode 100644 apu_mixer/source/dmc.s create mode 100644 apu_mixer/source/nes.cfg create mode 100644 apu_mixer/source/noise.s create mode 100644 apu_mixer/source/readme.txt create mode 100644 apu_mixer/source/square.s create mode 100644 apu_mixer/source/triangle.s create mode 100644 apu_mixer/square.nes create mode 100644 apu_mixer/triangle.nes create mode 100644 apu_mixer_recordings/dmc.mp3 create mode 100644 apu_mixer_recordings/noise.mp3 create mode 100644 apu_mixer_recordings/square.mp3 create mode 100644 apu_mixer_recordings/triangle.mp3 create mode 100644 apu_reset/4015_cleared.nes create mode 100644 apu_reset/4017_timing.nes create mode 100644 apu_reset/4017_written.nes create mode 100644 apu_reset/irq_flag_cleared.nes create mode 100644 apu_reset/len_ctrs_enabled.nes create mode 100644 apu_reset/readme.txt create mode 100644 apu_reset/source/4015_cleared.s create mode 100644 apu_reset/source/4017_timing.s create mode 100644 apu_reset/source/4017_written.s create mode 100644 apu_reset/source/common/ascii.chr create mode 100644 apu_reset/source/common/build_rom.s create mode 100644 apu_reset/source/common/console.s create mode 100644 apu_reset/source/common/crc.s create mode 100644 apu_reset/source/common/delay.s create mode 100644 apu_reset/source/common/devcart.bin create mode 100644 apu_reset/source/common/macros.inc create mode 100644 apu_reset/source/common/neshw.inc create mode 100644 apu_reset/source/common/ppu.s create mode 100644 apu_reset/source/common/print.s create mode 100644 apu_reset/source/common/run_at_reset.s create mode 100644 apu_reset/source/common/shell.inc create mode 100644 apu_reset/source/common/shell.s create mode 100644 apu_reset/source/common/shell_misc.s create mode 100644 apu_reset/source/common/testing.s create mode 100644 apu_reset/source/common/text_out.s create mode 100644 apu_reset/source/irq_flag_cleared.s create mode 100644 apu_reset/source/len_ctrs_enabled.s create mode 100644 apu_reset/source/nes.cfg create mode 100644 apu_reset/source/readme.txt create mode 100644 apu_reset/source/works_immediately.s create mode 100644 apu_reset/works_immediately.nes create mode 100644 apu_test/apu_test.nes create mode 100644 apu_test/readme.txt create mode 100644 apu_test/rom_singles/1-len_ctr.nes create mode 100644 apu_test/rom_singles/2-len_table.nes create mode 100644 apu_test/rom_singles/3-irq_flag.nes create mode 100644 apu_test/rom_singles/4-jitter.nes create mode 100644 apu_test/rom_singles/5-len_timing.nes create mode 100644 apu_test/rom_singles/6-irq_flag_timing.nes create mode 100644 apu_test/rom_singles/7-dmc_basics.nes create mode 100644 apu_test/rom_singles/8-dmc_rates.nes create mode 100644 apu_test/source/1-len_ctr.s create mode 100644 apu_test/source/2-len_table.s create mode 100644 apu_test/source/3-irq_flag.s create mode 100644 apu_test/source/4-jitter.s create mode 100644 apu_test/source/5-len_timing.s create mode 100644 apu_test/source/6-irq_flag_timing.s create mode 100644 apu_test/source/7-dmc_basics.s create mode 100644 apu_test/source/8-dmc_rates.s create mode 100644 apu_test/source/common/apu_shell.inc create mode 100644 apu_test/source/common/ascii.chr create mode 100644 apu_test/source/common/build_rom.s create mode 100644 apu_test/source/common/console.s create mode 100644 apu_test/source/common/crc.s create mode 100644 apu_test/source/common/delay.s create mode 100644 apu_test/source/common/devcart.bin create mode 100644 apu_test/source/common/macros.inc create mode 100644 apu_test/source/common/neshw.inc create mode 100644 apu_test/source/common/ppu.s create mode 100644 apu_test/source/common/print.s create mode 100644 apu_test/source/common/shell.inc create mode 100644 apu_test/source/common/shell.s create mode 100644 apu_test/source/common/shell_misc.s create mode 100644 apu_test/source/common/sync_apu.s create mode 100644 apu_test/source/common/sync_dmc.s create mode 100644 apu_test/source/common/test_main_chans.s create mode 100644 apu_test/source/common/testing.s create mode 100644 apu_test/source/common/text_out.s create mode 100644 apu_test/source/nes.cfg create mode 100644 apu_test/source/readme.txt create mode 100644 blargg_apu_2005.07.30/01.len_ctr.nes create mode 100644 blargg_apu_2005.07.30/02.len_table.nes create mode 100644 blargg_apu_2005.07.30/03.irq_flag.nes create mode 100644 blargg_apu_2005.07.30/04.clock_jitter.nes create mode 100644 blargg_apu_2005.07.30/05.len_timing_mode0.nes create mode 100644 blargg_apu_2005.07.30/06.len_timing_mode1.nes create mode 100644 blargg_apu_2005.07.30/07.irq_flag_timing.nes create mode 100644 blargg_apu_2005.07.30/08.irq_timing.nes create mode 100644 blargg_apu_2005.07.30/09.reset_timing.nes create mode 100644 blargg_apu_2005.07.30/10.len_halt_timing.nes create mode 100644 blargg_apu_2005.07.30/11.len_reload_timing.nes create mode 100644 blargg_apu_2005.07.30/readme.txt create mode 100644 blargg_apu_2005.07.30/source/01.len_ctr.asm create mode 100644 blargg_apu_2005.07.30/source/02.len_table.asm create mode 100644 blargg_apu_2005.07.30/source/03.irq_flag.asm create mode 100644 blargg_apu_2005.07.30/source/04.clock_jitter.asm create mode 100644 blargg_apu_2005.07.30/source/05.len_timing_mode0.asm create mode 100644 blargg_apu_2005.07.30/source/06.len_timing_mode1.asm create mode 100644 blargg_apu_2005.07.30/source/07.irq_flag_timing.asm create mode 100644 blargg_apu_2005.07.30/source/08.irq_timing.asm create mode 100644 blargg_apu_2005.07.30/source/09.reset_timing.asm create mode 100644 blargg_apu_2005.07.30/source/10.len_halt_timing.asm create mode 100644 blargg_apu_2005.07.30/source/11.len_reload_timing.asm create mode 100644 blargg_apu_2005.07.30/source/apu_util.asm create mode 100644 blargg_apu_2005.07.30/source/prefix_apu.asm create mode 100644 blargg_apu_2005.07.30/tests.txt create mode 100644 blargg_nes_cpu_test5/cpu.nes create mode 100644 blargg_nes_cpu_test5/official.nes create mode 100644 blargg_nes_cpu_test5/readme.txt create mode 100644 blargg_nes_cpu_test5/source/01-implied.a create mode 100644 blargg_nes_cpu_test5/source/02-immediate.a create mode 100644 blargg_nes_cpu_test5/source/03-zero_page.a create mode 100644 blargg_nes_cpu_test5/source/04-zp_xy.a create mode 100644 blargg_nes_cpu_test5/source/05-absolute.a create mode 100644 blargg_nes_cpu_test5/source/06-abs_xy.a create mode 100644 blargg_nes_cpu_test5/source/07-ind_x.a create mode 100644 blargg_nes_cpu_test5/source/08-ind_y.a create mode 100644 blargg_nes_cpu_test5/source/09-branches.a create mode 100644 blargg_nes_cpu_test5/source/10-stack.a create mode 100644 blargg_nes_cpu_test5/source/11-special.a create mode 100644 blargg_nes_cpu_test5/source/common/ascii.chr create mode 100644 blargg_nes_cpu_test5/source/common/common.a create mode 100644 blargg_nes_cpu_test5/source/common/console.a create mode 100644 blargg_nes_cpu_test5/source/common/crc.a create mode 100644 blargg_nes_cpu_test5/source/common/crc_fast.a create mode 100644 blargg_nes_cpu_test5/source/common/delay.a create mode 100644 blargg_nes_cpu_test5/source/common/instr_test.a create mode 100644 blargg_nes_cpu_test5/source/common/instr_test_end.a create mode 100644 blargg_nes_cpu_test5/source/common/macros.a create mode 100644 blargg_nes_cpu_test5/source/common/nes.a create mode 100644 blargg_nes_cpu_test5/source/common/ppu.a create mode 100644 blargg_nes_cpu_test5/source/common/print.a create mode 100644 blargg_nes_cpu_test5/source/common/serial.a create mode 100644 blargg_nes_cpu_test5/source/common/shell.a create mode 100644 blargg_nes_cpu_test5/source/common/testing.a create mode 100644 blargg_nes_cpu_test5/source/nes.cfg create mode 100644 blargg_nes_cpu_test5/source/readme.txt create mode 100644 blargg_ppu_tests_2005.09.15b/palette_ram.nes create mode 100644 blargg_ppu_tests_2005.09.15b/power_up_palette.nes create mode 100644 blargg_ppu_tests_2005.09.15b/readme.txt create mode 100644 blargg_ppu_tests_2005.09.15b/source/palette_ram.asm create mode 100644 blargg_ppu_tests_2005.09.15b/source/power_up_palette.asm create mode 100644 blargg_ppu_tests_2005.09.15b/source/prefix_ppu.asm create mode 100644 blargg_ppu_tests_2005.09.15b/source/sprite_ram.asm create mode 100644 blargg_ppu_tests_2005.09.15b/source/vbl_clear_time.asm create mode 100644 blargg_ppu_tests_2005.09.15b/source/vram_access.asm create mode 100644 blargg_ppu_tests_2005.09.15b/sprite_ram.nes create mode 100644 blargg_ppu_tests_2005.09.15b/vbl_clear_time.nes create mode 100644 blargg_ppu_tests_2005.09.15b/vram_access.nes create mode 100644 branch_timing_tests/1.Branch_Basics.nes create mode 100644 branch_timing_tests/2.Backward_Branch.nes create mode 100644 branch_timing_tests/3.Forward_Branch.nes create mode 100644 branch_timing_tests/readme.txt create mode 100644 branch_timing_tests/source/1.Branch_Basics.a create mode 100644 branch_timing_tests/source/2.Backward_Branch.a create mode 100644 branch_timing_tests/source/3.Forward_Branch.a create mode 100644 branch_timing_tests/source/console.a create mode 100644 branch_timing_tests/source/debug.a create mode 100644 branch_timing_tests/source/delays.a create mode 100644 branch_timing_tests/source/ppu_util.a create mode 100644 branch_timing_tests/source/prefix.a create mode 100644 branch_timing_tests/source/runtime_rom.a create mode 100644 branch_timing_tests/source/runtime_rom_common.a create mode 100644 branch_timing_tests/source/validation.a create mode 100644 cpu_dummy_reads/cpu_dummy_reads.nes create mode 100644 cpu_dummy_reads/source/common/ascii.chr create mode 100644 cpu_dummy_reads/source/common/console.s create mode 100644 cpu_dummy_reads/source/common/crc.s create mode 100644 cpu_dummy_reads/source/common/delay.s create mode 100644 cpu_dummy_reads/source/common/macros.inc create mode 100644 cpu_dummy_reads/source/common/nes.inc create mode 100644 cpu_dummy_reads/source/common/print.s create mode 100644 cpu_dummy_reads/source/common/serial.s create mode 100644 cpu_dummy_reads/source/common/shell.inc create mode 100644 cpu_dummy_reads/source/common/testing.s create mode 100644 cpu_dummy_reads/source/cpu_dummy_reads.s create mode 100644 cpu_dummy_reads/source/nes.cfg create mode 100644 cpu_dummy_reads/source/readme.txt create mode 100644 cpu_interrupts_v2/cpu_interrupts.nes create mode 100644 cpu_interrupts_v2/readme.txt create mode 100644 cpu_interrupts_v2/rom_singles/1-cli_latency.nes create mode 100644 cpu_interrupts_v2/rom_singles/2-nmi_and_brk.nes create mode 100644 cpu_interrupts_v2/rom_singles/3-nmi_and_irq.nes create mode 100644 cpu_interrupts_v2/rom_singles/4-irq_and_dma.nes create mode 100644 cpu_interrupts_v2/rom_singles/5-branch_delays_irq.nes create mode 100644 cpu_interrupts_v2/source/1-cli_latency.s create mode 100644 cpu_interrupts_v2/source/2-nmi_and_brk.s create mode 100644 cpu_interrupts_v2/source/3-nmi_and_irq.s create mode 100644 cpu_interrupts_v2/source/4-irq_and_dma.s create mode 100644 cpu_interrupts_v2/source/4-nmi_and_dma.s create mode 100644 cpu_interrupts_v2/source/5-branch_delays_irq.s create mode 100644 cpu_interrupts_v2/source/common/ascii.chr create mode 100644 cpu_interrupts_v2/source/common/build_rom.s create mode 100644 cpu_interrupts_v2/source/common/console.s create mode 100644 cpu_interrupts_v2/source/common/crc.s create mode 100644 cpu_interrupts_v2/source/common/delay.s create mode 100644 cpu_interrupts_v2/source/common/devcart.bin create mode 100644 cpu_interrupts_v2/source/common/macros.inc create mode 100644 cpu_interrupts_v2/source/common/neshw.inc create mode 100644 cpu_interrupts_v2/source/common/ppu.s create mode 100644 cpu_interrupts_v2/source/common/print.s create mode 100644 cpu_interrupts_v2/source/common/shell.inc create mode 100644 cpu_interrupts_v2/source/common/shell.s create mode 100644 cpu_interrupts_v2/source/common/shell_misc.s create mode 100644 cpu_interrupts_v2/source/common/sync_apu.s create mode 100644 cpu_interrupts_v2/source/common/sync_vbl.s create mode 100644 cpu_interrupts_v2/source/common/testing.s create mode 100644 cpu_interrupts_v2/source/common/text_out.s create mode 100644 cpu_interrupts_v2/source/nes.cfg create mode 100644 cpu_interrupts_v2/source/readme.txt create mode 100644 cpu_reset/ram_after_reset.nes create mode 100644 cpu_reset/readme.txt create mode 100644 cpu_reset/registers.nes create mode 100644 cpu_reset/source/common/ascii.chr create mode 100644 cpu_reset/source/common/build_rom.s create mode 100644 cpu_reset/source/common/console.s create mode 100644 cpu_reset/source/common/crc.s create mode 100644 cpu_reset/source/common/delay.s create mode 100644 cpu_reset/source/common/devcart.bin create mode 100644 cpu_reset/source/common/macros.inc create mode 100644 cpu_reset/source/common/neshw.inc create mode 100644 cpu_reset/source/common/ppu.s create mode 100644 cpu_reset/source/common/print.s create mode 100644 cpu_reset/source/common/run_at_reset.s create mode 100644 cpu_reset/source/common/shell.inc create mode 100644 cpu_reset/source/common/shell.s create mode 100644 cpu_reset/source/common/testing.s create mode 100644 cpu_reset/source/common/text_out.s create mode 100644 cpu_reset/source/nes.cfg create mode 100644 cpu_reset/source/ram_after_reset.s create mode 100644 cpu_reset/source/readme.txt create mode 100644 cpu_reset/source/registers.s create mode 100644 cpu_timing_test6/cpu_timing_test.nes create mode 100644 cpu_timing_test6/readme.txt create mode 100644 cpu_timing_test6/source/console.a create mode 100644 cpu_timing_test6/source/cpu_timing_test.asm create mode 100644 cpu_timing_test6/source/debug.a create mode 100644 cpu_timing_test6/source/delays.a create mode 100644 cpu_timing_test6/source/ppu_util.a create mode 100644 cpu_timing_test6/source/runtime_rom.a create mode 100644 cpu_timing_test6/source/runtime_rom_common.a create mode 100644 dmc_dma_during_read4/dma_2007_read.nes create mode 100644 dmc_dma_during_read4/dma_2007_write.nes create mode 100644 dmc_dma_during_read4/dma_4016_read.nes create mode 100644 dmc_dma_during_read4/double_2007_read.nes create mode 100644 dmc_dma_during_read4/read_write_2007.nes create mode 100644 dmc_dma_during_read4/source/common/ascii.chr create mode 100644 dmc_dma_during_read4/source/common/common.inc create mode 100644 dmc_dma_during_read4/source/common/console.s create mode 100644 dmc_dma_during_read4/source/common/crc.s create mode 100644 dmc_dma_during_read4/source/common/delay.s create mode 100644 dmc_dma_during_read4/source/common/macros.inc create mode 100644 dmc_dma_during_read4/source/common/nes.inc create mode 100644 dmc_dma_during_read4/source/common/print.s create mode 100644 dmc_dma_during_read4/source/common/serial.s create mode 100644 dmc_dma_during_read4/source/common/shell.inc create mode 100644 dmc_dma_during_read4/source/common/sync_dmc.s create mode 100644 dmc_dma_during_read4/source/common/testing.s create mode 100644 dmc_dma_during_read4/source/dma_2007_read.s create mode 100644 dmc_dma_during_read4/source/dma_2007_write.s create mode 100644 dmc_dma_during_read4/source/dma_4016_read.s create mode 100644 dmc_dma_during_read4/source/double_2007_read.s create mode 100644 dmc_dma_during_read4/source/nes.cfg create mode 100644 dmc_dma_during_read4/source/read_write_2007.s create mode 100644 dmc_dma_during_read4/source/readme.txt create mode 100644 dmc_tests/buffer_retained.nes create mode 100644 dmc_tests/latency.nes create mode 100644 dmc_tests/status.nes create mode 100644 dmc_tests/status_irq.nes create mode 100644 dpcmletterbox/CHANGES.txt create mode 100644 dpcmletterbox/NROM.ini create mode 100644 dpcmletterbox/README.txt create mode 100644 dpcmletterbox/dpcmletterbox.nes create mode 100644 dpcmletterbox/makefile create mode 100644 dpcmletterbox/obj/nes/index.txt create mode 100644 dpcmletterbox/src/nes.h create mode 100644 dpcmletterbox/src/reset.s create mode 100644 dpcmletterbox/tilesets/ac16.png create mode 100644 dpcmletterbox/tools/pilbmp2nes.py create mode 100644 exram/mmc5exram.asm create mode 100644 exram/mmc5exram.chr create mode 100644 exram/mmc5exram.imk create mode 100644 exram/mmc5exram.nes create mode 100644 full_palette/flowing_palette.nes create mode 100644 full_palette/full_palette.nes create mode 100644 full_palette/full_palette.s create mode 100644 full_palette/full_palette_smooth.nes create mode 100644 full_palette/full_palette_smooth.s create mode 100644 instr_misc/instr_misc.nes create mode 100644 instr_misc/readme.txt create mode 100644 instr_misc/rom_singles/01-abs_x_wrap.nes create mode 100644 instr_misc/rom_singles/02-branch_wrap.nes create mode 100644 instr_misc/rom_singles/03-dummy_reads.nes create mode 100644 instr_misc/rom_singles/04-dummy_reads_apu.nes create mode 100644 instr_misc/source/01-abs_x_wrap.s create mode 100644 instr_misc/source/02-branch_wrap.s create mode 100644 instr_misc/source/03-dummy_reads.s create mode 100644 instr_misc/source/04-dummy_reads_apu.s create mode 100644 instr_misc/source/common/ascii.chr create mode 100644 instr_misc/source/common/build_rom.s create mode 100644 instr_misc/source/common/console.s create mode 100644 instr_misc/source/common/crc.s create mode 100644 instr_misc/source/common/delay.s create mode 100644 instr_misc/source/common/devcart.bin create mode 100644 instr_misc/source/common/macros.inc create mode 100644 instr_misc/source/common/neshw.inc create mode 100644 instr_misc/source/common/ppu.s create mode 100644 instr_misc/source/common/print.s create mode 100644 instr_misc/source/common/shell.inc create mode 100644 instr_misc/source/common/shell.s create mode 100644 instr_misc/source/common/testing.s create mode 100644 instr_misc/source/common/text_out.s create mode 100644 instr_misc/source/nes.cfg create mode 100644 instr_misc/source/readme.txt create mode 100644 instr_test-v3/all_instrs.nes create mode 100644 instr_test-v3/official_only.nes create mode 100644 instr_test-v3/readme.txt create mode 100644 instr_test-v3/rom_singles/01-implied.nes create mode 100644 instr_test-v3/rom_singles/02-immediate.nes create mode 100644 instr_test-v3/rom_singles/03-zero_page.nes create mode 100644 instr_test-v3/rom_singles/04-zp_xy.nes create mode 100644 instr_test-v3/rom_singles/05-absolute.nes create mode 100644 instr_test-v3/rom_singles/06-abs_xy.nes create mode 100644 instr_test-v3/rom_singles/07-ind_x.nes create mode 100644 instr_test-v3/rom_singles/08-ind_y.nes create mode 100644 instr_test-v3/rom_singles/09-branches.nes create mode 100644 instr_test-v3/rom_singles/10-stack.nes create mode 100644 instr_test-v3/rom_singles/11-jmp_jsr.nes create mode 100644 instr_test-v3/rom_singles/12-rts.nes create mode 100644 instr_test-v3/rom_singles/13-rti.nes create mode 100644 instr_test-v3/rom_singles/14-brk.nes create mode 100644 instr_test-v3/rom_singles/15-special.nes create mode 100644 instr_test-v3/source/01-implied.s create mode 100644 instr_test-v3/source/02-immediate.s create mode 100644 instr_test-v3/source/03-zero_page.s create mode 100644 instr_test-v3/source/04-zp_xy.s create mode 100644 instr_test-v3/source/05-absolute.s create mode 100644 instr_test-v3/source/06-abs_xy.s create mode 100644 instr_test-v3/source/07-ind_x.s create mode 100644 instr_test-v3/source/08-ind_y.s create mode 100644 instr_test-v3/source/09-branches.s create mode 100644 instr_test-v3/source/10-stack.s create mode 100644 instr_test-v3/source/11-jmp_jsr.s create mode 100644 instr_test-v3/source/12-rts.s create mode 100644 instr_test-v3/source/13-rti.s create mode 100644 instr_test-v3/source/14-brk.s create mode 100644 instr_test-v3/source/15-special.s create mode 100644 instr_test-v3/source/common/ascii.chr create mode 100644 instr_test-v3/source/common/bootloader.bin create mode 100644 instr_test-v3/source/common/build_rom.s create mode 100644 instr_test-v3/source/common/console.s create mode 100644 instr_test-v3/source/common/crc.s create mode 100644 instr_test-v3/source/common/crc_fast.s create mode 100644 instr_test-v3/source/common/delay.s create mode 100644 instr_test-v3/source/common/instr_test.inc create mode 100644 instr_test-v3/source/common/instr_test_end.s create mode 100644 instr_test-v3/source/common/macros.inc create mode 100644 instr_test-v3/source/common/neshw.inc create mode 100644 instr_test-v3/source/common/ppu.s create mode 100644 instr_test-v3/source/common/print.s create mode 100644 instr_test-v3/source/common/shell.inc create mode 100644 instr_test-v3/source/common/shell.s create mode 100644 instr_test-v3/source/common/shell_misc.s create mode 100644 instr_test-v3/source/common/testing.s create mode 100644 instr_test-v3/source/common/text_out.s create mode 100644 instr_test-v3/source/nes.cfg create mode 100644 instr_test-v3/source/readme.txt create mode 100644 instr_timing/instr_timing.nes create mode 100644 instr_timing/readme.txt create mode 100644 instr_timing/rom_singles/1-instr_timing.nes create mode 100644 instr_timing/rom_singles/2-branch_timing.nes create mode 100644 instr_timing/source/1-instr_timing.s create mode 100644 instr_timing/source/2-branch_timing.s create mode 100644 instr_timing/source/common/ascii.chr create mode 100644 instr_timing/source/common/build_rom.s create mode 100644 instr_timing/source/common/console.s create mode 100644 instr_timing/source/common/crc.s create mode 100644 instr_timing/source/common/delay.s create mode 100644 instr_timing/source/common/devcart.bin create mode 100644 instr_timing/source/common/macros.inc create mode 100644 instr_timing/source/common/neshw.inc create mode 100644 instr_timing/source/common/ppu.s create mode 100644 instr_timing/source/common/print.s create mode 100644 instr_timing/source/common/shell.inc create mode 100644 instr_timing/source/common/shell.s create mode 100644 instr_timing/source/common/testing.s create mode 100644 instr_timing/source/common/text_out.s create mode 100644 instr_timing/source/nes.cfg create mode 100644 instr_timing/source/readme.txt create mode 100644 mmc3_irq_tests/1.Clocking.nes create mode 100644 mmc3_irq_tests/2.Details.nes create mode 100644 mmc3_irq_tests/3.A12_clocking.nes create mode 100644 mmc3_irq_tests/4.Scanline_timing.nes create mode 100644 mmc3_irq_tests/5.MMC3_rev_A.nes create mode 100644 mmc3_irq_tests/5.MMC3_rev_A.sav create mode 100644 mmc3_irq_tests/6.MMC3_rev_B.nes create mode 100644 mmc3_irq_tests/readme.txt create mode 100644 mmc3_irq_tests/source/1.Clocking.asm create mode 100644 mmc3_irq_tests/source/2.Details.asm create mode 100644 mmc3_irq_tests/source/3.A12_clocking.asm create mode 100644 mmc3_irq_tests/source/4.Scanline_timing.asm create mode 100644 mmc3_irq_tests/source/5.MMC3_rev_A.asm create mode 100644 mmc3_irq_tests/source/6.MMC3_rev_B.asm create mode 100644 mmc3_irq_tests/source/console.asm create mode 100644 mmc3_irq_tests/source/debug.asm create mode 100644 mmc3_irq_tests/source/delays.asm create mode 100644 mmc3_irq_tests/source/ppu_sync.asm create mode 100644 mmc3_irq_tests/source/ppu_util.asm create mode 100644 mmc3_irq_tests/source/prefix_cpu.asm create mode 100644 mmc3_irq_tests/source/prefix_mmc3.asm create mode 100644 mmc3_irq_tests/source/prefix_mmc3_validation.asm create mode 100644 mmc3_irq_tests/source/prefix_swap.asm create mode 100644 mmc3_irq_tests/source/runtime_swapcart.asm create mode 100644 mmc3_irq_tests/source/validation.asm create mode 100644 mmc3_test/1-clocking.nes create mode 100644 mmc3_test/2-details.nes create mode 100644 mmc3_test/3-A12_clocking.nes create mode 100644 mmc3_test/4-scanline_timing.nes create mode 100644 mmc3_test/5-MMC3.nes create mode 100644 mmc3_test/6-MMC6.nes create mode 100644 mmc3_test/readme.txt create mode 100644 mmc3_test/source/1-clocking.s create mode 100644 mmc3_test/source/2-details.s create mode 100644 mmc3_test/source/3-A12_clocking.s create mode 100644 mmc3_test/source/4-scanline_timing.s create mode 100644 mmc3_test/source/5-MMC3.s create mode 100644 mmc3_test/source/6-MMC6.s create mode 100644 mmc3_test/source/common/ascii.chr create mode 100644 mmc3_test/source/common/build_rom.s create mode 100644 mmc3_test/source/common/console.s create mode 100644 mmc3_test/source/common/crc.s create mode 100644 mmc3_test/source/common/delay.s create mode 100644 mmc3_test/source/common/devcart.bin create mode 100644 mmc3_test/source/common/macros.inc create mode 100644 mmc3_test/source/common/neshw.inc create mode 100644 mmc3_test/source/common/ppu.s create mode 100644 mmc3_test/source/common/print.s create mode 100644 mmc3_test/source/common/shell.inc create mode 100644 mmc3_test/source/common/shell.s create mode 100644 mmc3_test/source/common/sync_vbl.s create mode 100644 mmc3_test/source/common/test_mmc3.inc create mode 100644 mmc3_test/source/common/testing.s create mode 100644 mmc3_test/source/common/text_out.s create mode 100644 mmc3_test/source/nes.cfg create mode 100644 mmc3_test/source/readme.txt create mode 100644 mmc3_test_2/readme.txt create mode 100644 mmc3_test_2/rom_singles/1-clocking.nes create mode 100644 mmc3_test_2/rom_singles/2-details.nes create mode 100644 mmc3_test_2/rom_singles/3-A12_clocking.nes create mode 100644 mmc3_test_2/rom_singles/4-scanline_timing.nes create mode 100644 mmc3_test_2/rom_singles/5-MMC3.nes create mode 100644 mmc3_test_2/rom_singles/6-MMC3_alt.nes create mode 100644 mmc3_test_2/source/1-clocking.s create mode 100644 mmc3_test_2/source/2-details.s create mode 100644 mmc3_test_2/source/3-A12_clocking.s create mode 100644 mmc3_test_2/source/4-scanline_timing.s create mode 100644 mmc3_test_2/source/5-MMC3.s create mode 100644 mmc3_test_2/source/6-MMC3_alt.s create mode 100644 mmc3_test_2/source/common/ascii.chr create mode 100644 mmc3_test_2/source/common/build_rom.s create mode 100644 mmc3_test_2/source/common/console.s create mode 100644 mmc3_test_2/source/common/crc.s create mode 100644 mmc3_test_2/source/common/delay.s create mode 100644 mmc3_test_2/source/common/devcart.bin create mode 100644 mmc3_test_2/source/common/macros.inc create mode 100644 mmc3_test_2/source/common/neshw.inc create mode 100644 mmc3_test_2/source/common/ppu.s create mode 100644 mmc3_test_2/source/common/print.s create mode 100644 mmc3_test_2/source/common/shell.inc create mode 100644 mmc3_test_2/source/common/shell.s create mode 100644 mmc3_test_2/source/common/shell_misc.s create mode 100644 mmc3_test_2/source/common/sync_vbl.s create mode 100644 mmc3_test_2/source/common/test_mmc3.inc create mode 100644 mmc3_test_2/source/common/testing.s create mode 100644 mmc3_test_2/source/common/text_out.s create mode 100644 mmc3_test_2/source/nes.cfg create mode 100644 mmc3_test_2/source/readme.txt create mode 100644 nes15-1.0.0/LICENSE create mode 100644 nes15-1.0.0/Makefile create mode 100644 nes15-1.0.0/README create mode 100644 nes15-1.0.0/bin2pkb/Makefile create mode 100644 nes15-1.0.0/bin2pkb/bin2pkb.c create mode 100644 nes15-1.0.0/clib/binio.c create mode 100644 nes15-1.0.0/clib/binio.h create mode 100644 nes15-1.0.0/clib/img8.c create mode 100644 nes15-1.0.0/clib/img8.h create mode 100644 nes15-1.0.0/clib/img8_pcx.c create mode 100644 nes15-1.0.0/clib/neschr.c create mode 100644 nes15-1.0.0/clib/neschr.h create mode 100644 nes15-1.0.0/clib/packbits.c create mode 100644 nes15-1.0.0/clib/packbits.h create mode 100644 nes15-1.0.0/fifteen/Makefile create mode 100644 nes15-1.0.0/fifteen/fifteen.inc create mode 100644 nes15-1.0.0/fifteen/fifteen.s create mode 100644 nes15-1.0.0/fifteen/test.cfg create mode 100644 nes15-1.0.0/fifteen/test.s create mode 100644 nes15-1.0.0/game.cfg create mode 100644 nes15-1.0.0/gfx/bgd.pal create mode 100644 nes15-1.0.0/gfx/cursor.pcx create mode 100644 nes15-1.0.0/gfx/edges.pcx create mode 100644 nes15-1.0.0/gfx/font.pcx create mode 100644 nes15-1.0.0/gfx/nums.pcx create mode 100644 nes15-1.0.0/gfx/play.nam create mode 100644 nes15-1.0.0/gfx/spr.pal create mode 100644 nes15-1.0.0/gfx/tile.pcx create mode 100644 nes15-1.0.0/gfx/title.nam create mode 100644 nes15-1.0.0/nes-lib/apu.inc create mode 100644 nes15-1.0.0/nes-lib/bcd.inc create mode 100644 nes15-1.0.0/nes-lib/bcd16.s create mode 100644 nes15-1.0.0/nes-lib/bcd16_from_bin.s create mode 100644 nes15-1.0.0/nes-lib/bcd16_to_vrub.s create mode 100644 nes15-1.0.0/nes-lib/joy.inc create mode 100644 nes15-1.0.0/nes-lib/joy_read1.s create mode 100644 nes15-1.0.0/nes-lib/joy_repeat1.s create mode 100644 nes15-1.0.0/nes-lib/joy_update1.s create mode 100644 nes15-1.0.0/nes-lib/lfsr32.inc create mode 100644 nes15-1.0.0/nes-lib/lfsr32.s create mode 100644 nes15-1.0.0/nes-lib/muse.inc create mode 100644 nes15-1.0.0/nes-lib/muse.s create mode 100644 nes15-1.0.0/nes-lib/oam.inc create mode 100644 nes15-1.0.0/nes-lib/oam_clear.s create mode 100644 nes15-1.0.0/nes-lib/pkb.inc create mode 100644 nes15-1.0.0/nes-lib/pkb.s create mode 100644 nes15-1.0.0/nes-lib/pkb_to_vram.s create mode 100644 nes15-1.0.0/nes-lib/ppu.inc create mode 100644 nes15-1.0.0/nes-lib/vrub.inc create mode 100644 nes15-1.0.0/nes-lib/vrub.s create mode 100644 nes15-1.0.0/nes-lib/vrub_from_mem.s create mode 100644 nes15-1.0.0/nes15-NTSC.nes create mode 100644 nes15-1.0.0/nes15-PAL.nes create mode 100644 nes15-1.0.0/pcx2chr/Makefile create mode 100644 nes15-1.0.0/pcx2chr/pcx2chr.c create mode 100644 nes15-1.0.0/snd/mus0.s create mode 100644 nes15-1.0.0/snd/mus1.s create mode 100644 nes15-1.0.0/snd/sfx0.s create mode 100644 nes15-1.0.0/snd/sfx1.s create mode 100644 nes15-1.0.0/snd/snd.inc create mode 100644 nes15-1.0.0/snd/snd.s create mode 100644 nes15-1.0.0/src/game.inc create mode 100644 nes15-1.0.0/src/game.s create mode 100644 nes15-1.0.0/src/gfx.inc create mode 100644 nes15-1.0.0/src/gfx.s create mode 100644 nes15-1.0.0/src/header.s create mode 100644 nes15-1.0.0/src/nmi.inc create mode 100644 nes15-1.0.0/src/nmi.s create mode 100644 nes15-1.0.0/src/play.inc create mode 100644 nes15-1.0.0/src/play.s create mode 100644 nes15-1.0.0/src/title.inc create mode 100644 nes15-1.0.0/src/title.s create mode 100644 nes_instr_test/nsf_singles/01-implied.nsf create mode 100644 nes_instr_test/nsf_singles/02-immediate.nsf create mode 100644 nes_instr_test/nsf_singles/03-zero_page.nsf create mode 100644 nes_instr_test/nsf_singles/04-zp_xy.nsf create mode 100644 nes_instr_test/nsf_singles/05-absolute.nsf create mode 100644 nes_instr_test/nsf_singles/06-abs_xy.nsf create mode 100644 nes_instr_test/nsf_singles/07-ind_x.nsf create mode 100644 nes_instr_test/nsf_singles/08-ind_y.nsf create mode 100644 nes_instr_test/nsf_singles/09-branches.nsf create mode 100644 nes_instr_test/nsf_singles/10-stack.nsf create mode 100644 nes_instr_test/nsf_singles/11-special.nsf create mode 100644 nes_instr_test/readme.txt create mode 100644 nes_instr_test/rom_singles/01-implied.nes create mode 100644 nes_instr_test/rom_singles/02-immediate.nes create mode 100644 nes_instr_test/rom_singles/03-zero_page.nes create mode 100644 nes_instr_test/rom_singles/04-zp_xy.nes create mode 100644 nes_instr_test/rom_singles/05-absolute.nes create mode 100644 nes_instr_test/rom_singles/06-abs_xy.nes create mode 100644 nes_instr_test/rom_singles/07-ind_x.nes create mode 100644 nes_instr_test/rom_singles/08-ind_y.nes create mode 100644 nes_instr_test/rom_singles/09-branches.nes create mode 100644 nes_instr_test/rom_singles/10-stack.nes create mode 100644 nes_instr_test/rom_singles/11-special.nes create mode 100644 nes_instr_test/source/01-implied.s create mode 100644 nes_instr_test/source/02-immediate.s create mode 100644 nes_instr_test/source/03-zero_page.s create mode 100644 nes_instr_test/source/04-zp_xy.s create mode 100644 nes_instr_test/source/05-absolute.s create mode 100644 nes_instr_test/source/06-abs_xy.s create mode 100644 nes_instr_test/source/07-ind_x.s create mode 100644 nes_instr_test/source/08-ind_y.s create mode 100644 nes_instr_test/source/09-branches.s create mode 100644 nes_instr_test/source/10-stack.s create mode 100644 nes_instr_test/source/11-special.s create mode 100644 nes_instr_test/source/common/ascii.chr create mode 100644 nes_instr_test/source/common/build_nsf.s create mode 100644 nes_instr_test/source/common/build_rom.s create mode 100644 nes_instr_test/source/common/console.s create mode 100644 nes_instr_test/source/common/crc.s create mode 100644 nes_instr_test/source/common/crc_fast.s create mode 100644 nes_instr_test/source/common/delay.s create mode 100644 nes_instr_test/source/common/instr_test.inc create mode 100644 nes_instr_test/source/common/instr_test_end.s create mode 100644 nes_instr_test/source/common/macros.inc create mode 100644 nes_instr_test/source/common/neshw.inc create mode 100644 nes_instr_test/source/common/ppu.s create mode 100644 nes_instr_test/source/common/print.s create mode 100644 nes_instr_test/source/common/shell.inc create mode 100644 nes_instr_test/source/common/shell.s create mode 100644 nes_instr_test/source/common/testing.s create mode 100644 nes_instr_test/source/common/text_out.s create mode 100644 nes_instr_test/source/nes.cfg create mode 100644 nes_instr_test/source/nsf.cfg create mode 100644 nes_instr_test/source/readme.txt create mode 100644 nmi_sync/demo_ntsc.nes create mode 100644 nmi_sync/demo_ntsc.s create mode 100644 nmi_sync/demo_pal.nes create mode 100644 nmi_sync/demo_pal.s create mode 100644 nmi_sync/nmi_sync.s create mode 100644 nmi_sync/readme.txt create mode 100644 nmi_sync/unrom.cfg create mode 100644 ny2011/ny2011.nes create mode 100644 oam_read/oam_read.nes create mode 100644 oam_read/readme.txt create mode 100644 oam_read/source/common/ascii.chr create mode 100644 oam_read/source/common/build_rom.s create mode 100644 oam_read/source/common/console.s create mode 100644 oam_read/source/common/crc.s create mode 100644 oam_read/source/common/delay.s create mode 100644 oam_read/source/common/devcart.bin create mode 100644 oam_read/source/common/macros.inc create mode 100644 oam_read/source/common/neshw.inc create mode 100644 oam_read/source/common/ppu.s create mode 100644 oam_read/source/common/print.s create mode 100644 oam_read/source/common/shell.inc create mode 100644 oam_read/source/common/shell.s create mode 100644 oam_read/source/common/testing.s create mode 100644 oam_read/source/common/text_out.s create mode 100644 oam_read/source/nes.cfg create mode 100644 oam_read/source/oam_read.s create mode 100644 oam_read/source/readme.txt create mode 100644 oam_stress/oam_stress.nes create mode 100644 oam_stress/readme.txt create mode 100644 oam_stress/source/common/ascii.chr create mode 100644 oam_stress/source/common/build_multi.s create mode 100644 oam_stress/source/common/build_nsf.s create mode 100644 oam_stress/source/common/build_rom.s create mode 100644 oam_stress/source/common/console.s create mode 100644 oam_stress/source/common/crc.s create mode 100644 oam_stress/source/common/crc_fast.s create mode 100644 oam_stress/source/common/delay.s create mode 100644 oam_stress/source/common/devcart.bin create mode 100644 oam_stress/source/common/macros.inc create mode 100644 oam_stress/source/common/neshw.inc create mode 100644 oam_stress/source/common/ppu.s create mode 100644 oam_stress/source/common/print.s create mode 100644 oam_stress/source/common/shell.inc create mode 100644 oam_stress/source/common/shell.s create mode 100644 oam_stress/source/common/testing.s create mode 100644 oam_stress/source/common/text_out.s create mode 100644 oam_stress/source/nes.cfg create mode 100644 oam_stress/source/oam_stress.s create mode 100644 oam_stress/source/readme.txt create mode 100644 other/2003-test.nes create mode 100644 other/8bitpeoples_-_deadline_console_invitro.nes create mode 100644 other/BLOCKS.NES create mode 100644 other/BladeBuster.nes create mode 100644 other/CMC80s.NES create mode 100644 other/DROPOFF7.NES create mode 100644 "other/Duelito - L\351eme.txt" create mode 100644 other/Duelito.nes create mode 100644 other/FLAME.NES create mode 100644 other/GENIE.NES create mode 100644 other/GREYS.NES create mode 100644 other/HelloWorldDemo.nes create mode 100644 other/LINUS.ASM create mode 100644 other/LINUS.NSF create mode 100644 other/LINUSMUS.NES create mode 100644 other/MOTION.NES create mode 100644 other/NESMPROP.TXT create mode 100644 other/PCM.demo.wgraphics.nes create mode 100644 other/RasterChromaLuma.NES create mode 100644 other/RasterDemo.NES create mode 100644 other/RasterTest1.NES create mode 100644 other/RasterTest2.NES create mode 100644 other/RasterTest3.NES create mode 100644 other/RasterTest3a.NES create mode 100644 other/RasterTest3b.NES create mode 100644 other/RasterTest3c.NES create mode 100644 other/RasterTest3d.NES create mode 100644 other/RasterTest3e.NES create mode 100644 other/ReadmeCMC80s.TXT create mode 100644 other/ReadmeSayoonara!.txt create mode 100644 other/Retrocoders - Years behind.NES create mode 100644 other/S0.NES create mode 100644 other/SPRITE.NES create mode 100644 other/Sayoonara!.NES create mode 100644 other/SimpleParallaxDemo.nes create mode 100644 other/TANESPOT.NES create mode 100644 other/TEST.NES create mode 100644 other/The Duel - Readme.txt create mode 100644 other/apocalypse.nes create mode 100644 other/apocalypse.src create mode 100644 other/blargg_litewall-2.nes create mode 100644 other/blargg_litewall-9.nes create mode 100644 other/demo jitter.nes create mode 100644 other/demo.nes create mode 100644 other/dnsf2_enginetest3.nsf create mode 100644 other/fceuxd.nes create mode 100644 other/firefly.asm create mode 100644 other/firefly.nes create mode 100644 other/fun-n-games.nes create mode 100644 other/litewall2.nes create mode 100644 other/litewall3.nes create mode 100644 other/litewall5.nes create mode 100644 other/logo (E).nes create mode 100644 other/manhole.nes create mode 100644 other/max-300.nes create mode 100644 other/midscanline.nes create mode 100644 other/minipack.nes create mode 100644 other/minipack.txt create mode 100644 other/nes1.wav create mode 100644 other/nescafe.nes create mode 100644 other/nestest.log create mode 100644 other/nestest.nes create mode 100644 other/nestest.txt create mode 100644 other/nestopia.nes create mode 100644 other/new-game.nes create mode 100644 other/nintendulator.nes create mode 100644 other/physics.0.1.nes create mode 100644 other/pulsar.nes create mode 100644 other/rastesam4.nes create mode 100644 other/read2004.nes create mode 100644 other/readme.txt create mode 100644 other/smbdis.asm create mode 100644 other/snow.nes create mode 100644 other/snow.txt create mode 100644 other/test001.nes create mode 100644 other/window2_ntsc.nes create mode 100644 other/window2_pal.nes create mode 100644 other/window_old_ntsc.nes create mode 100644 other/window_old_pal.nes create mode 100644 pal_apu_tests/01.len_ctr.nes create mode 100644 pal_apu_tests/02.len_table.nes create mode 100644 pal_apu_tests/03.irq_flag.nes create mode 100644 pal_apu_tests/04.clock_jitter.nes create mode 100644 pal_apu_tests/05.len_timing_mode0.nes create mode 100644 pal_apu_tests/06.len_timing_mode1.nes create mode 100644 pal_apu_tests/07.irq_flag_timing.nes create mode 100644 pal_apu_tests/08.irq_timing.nes create mode 100644 pal_apu_tests/10.len_halt_timing.nes create mode 100644 pal_apu_tests/11.len_reload_timing.nes create mode 100644 pal_apu_tests/readme.txt create mode 100644 pal_apu_tests/source/01.len_ctr.a create mode 100644 pal_apu_tests/source/02.len_table.a create mode 100644 pal_apu_tests/source/03.irq_flag.a create mode 100644 pal_apu_tests/source/04.clock_jitter.a create mode 100644 pal_apu_tests/source/05.len_timing_mode0.a create mode 100644 pal_apu_tests/source/06.len_timing_mode1.a create mode 100644 pal_apu_tests/source/07.irq_flag_timing.a create mode 100644 pal_apu_tests/source/08.irq_timing.a create mode 100644 pal_apu_tests/source/10.len_halt_timing.a create mode 100644 pal_apu_tests/source/11.len_reload_timing.a create mode 100644 pal_apu_tests/source/console.a create mode 100644 pal_apu_tests/source/debug.a create mode 100644 pal_apu_tests/source/delays.a create mode 100644 pal_apu_tests/source/prefix_apu.a create mode 100644 pal_apu_tests/source/runtime_rom.a create mode 100644 pal_apu_tests/source/runtime_rom_common.a create mode 100644 pal_apu_tests/source/sync_apu.a create mode 100644 pal_apu_tests/source/validation.a create mode 100644 ppu_open_bus/ppu_open_bus.nes create mode 100644 ppu_open_bus/readme.txt create mode 100644 ppu_open_bus/source/common/ascii.chr create mode 100644 ppu_open_bus/source/common/build_rom.s create mode 100644 ppu_open_bus/source/common/console.s create mode 100644 ppu_open_bus/source/common/crc.s create mode 100644 ppu_open_bus/source/common/delay.s create mode 100644 ppu_open_bus/source/common/devcart.bin create mode 100644 ppu_open_bus/source/common/macros.inc create mode 100644 ppu_open_bus/source/common/neshw.inc create mode 100644 ppu_open_bus/source/common/ppu.s create mode 100644 ppu_open_bus/source/common/print.s create mode 100644 ppu_open_bus/source/common/shell.inc create mode 100644 ppu_open_bus/source/common/shell.s create mode 100644 ppu_open_bus/source/common/testing.s create mode 100644 ppu_open_bus/source/common/text_out.s create mode 100644 ppu_open_bus/source/nes.cfg create mode 100644 ppu_open_bus/source/ppu_open_bus.s create mode 100644 ppu_open_bus/source/readme.txt create mode 100644 ppu_vbl_nmi/ppu_vbl_nmi.nes create mode 100644 ppu_vbl_nmi/readme.txt create mode 100644 ppu_vbl_nmi/rom_singles/01-vbl_basics.nes create mode 100644 ppu_vbl_nmi/rom_singles/02-vbl_set_time.nes create mode 100644 ppu_vbl_nmi/rom_singles/03-vbl_clear_time.nes create mode 100644 ppu_vbl_nmi/rom_singles/04-nmi_control.nes create mode 100644 ppu_vbl_nmi/rom_singles/05-nmi_timing.nes create mode 100644 ppu_vbl_nmi/rom_singles/06-suppression.nes create mode 100644 ppu_vbl_nmi/rom_singles/07-nmi_on_timing.nes create mode 100644 ppu_vbl_nmi/rom_singles/08-nmi_off_timing.nes create mode 100644 ppu_vbl_nmi/rom_singles/09-even_odd_frames.nes create mode 100644 ppu_vbl_nmi/rom_singles/10-even_odd_timing.nes create mode 100644 ppu_vbl_nmi/source/01-vbl_basics.s create mode 100644 ppu_vbl_nmi/source/02-vbl_set_time.s create mode 100644 ppu_vbl_nmi/source/03-vbl_clear_time.s create mode 100644 ppu_vbl_nmi/source/04-nmi_control.s create mode 100644 ppu_vbl_nmi/source/05-nmi_timing.s create mode 100644 ppu_vbl_nmi/source/06-suppression.s create mode 100644 ppu_vbl_nmi/source/07-nmi_on_timing.s create mode 100644 ppu_vbl_nmi/source/08-nmi_off_timing.s create mode 100644 ppu_vbl_nmi/source/09-even_odd_frames.s create mode 100644 ppu_vbl_nmi/source/10-even_odd_timing.s create mode 100644 ppu_vbl_nmi/source/common/ascii.chr create mode 100644 ppu_vbl_nmi/source/common/bootloader.bin create mode 100644 ppu_vbl_nmi/source/common/build_rom.s create mode 100644 ppu_vbl_nmi/source/common/console.s create mode 100644 ppu_vbl_nmi/source/common/crc.s create mode 100644 ppu_vbl_nmi/source/common/delay.s create mode 100644 ppu_vbl_nmi/source/common/macros.inc create mode 100644 ppu_vbl_nmi/source/common/neshw.inc create mode 100644 ppu_vbl_nmi/source/common/ppu.s create mode 100644 ppu_vbl_nmi/source/common/print.s create mode 100644 ppu_vbl_nmi/source/common/shell.inc create mode 100644 ppu_vbl_nmi/source/common/shell.s create mode 100644 ppu_vbl_nmi/source/common/shell_misc.s create mode 100644 ppu_vbl_nmi/source/common/sync_vbl.s create mode 100644 ppu_vbl_nmi/source/common/testing.s create mode 100644 ppu_vbl_nmi/source/common/text_out.s create mode 100644 ppu_vbl_nmi/source/nes.cfg create mode 100644 ppu_vbl_nmi/source/readme.txt create mode 100644 read_joy3/count_errors.nes create mode 100644 read_joy3/count_errors_fast.nes create mode 100644 read_joy3/source/common/ascii.chr create mode 100644 read_joy3/source/common/console.s create mode 100644 read_joy3/source/common/crc.s create mode 100644 read_joy3/source/common/delay.s create mode 100644 read_joy3/source/common/macros.inc create mode 100644 read_joy3/source/common/nes.inc create mode 100644 read_joy3/source/common/print.s create mode 100644 read_joy3/source/common/serial.s create mode 100644 read_joy3/source/common/shell.inc create mode 100644 read_joy3/source/common/sync_dmc.s create mode 100644 read_joy3/source/common/testing.s create mode 100644 read_joy3/source/count_errors.s create mode 100644 read_joy3/source/count_errors_fast.s create mode 100644 read_joy3/source/nes.cfg create mode 100644 read_joy3/source/read_joy.inc create mode 100644 read_joy3/source/readme.txt create mode 100644 read_joy3/source/test_buttons.s create mode 100644 read_joy3/source/thorough_test.s create mode 100644 read_joy3/test_buttons.nes create mode 100644 read_joy3/thorough_test.nes create mode 100644 scanline/scanline.asm create mode 100644 scanline/scanline.chr create mode 100644 scanline/scanline.imk create mode 100644 scanline/scanline.nes create mode 100644 scanline/scanline.umk create mode 100644 scanline/scanline.unif create mode 100644 scrolltest/makefile create mode 100644 scrolltest/nesedit.cfg create mode 100644 scrolltest/scroll.bin create mode 100644 scrolltest/scroll.nes create mode 100644 scrolltest/scroll.s create mode 100644 scrolltest/scrollhd.bin create mode 100644 scrolltest/scrollhd.s create mode 100644 scrolltest/scrtest.blk create mode 100644 scrolltest/scrtest.chr create mode 100644 scrolltest/scrtest.map create mode 100644 scrolltest/scrtest.pal create mode 100644 soundtest/README.TXT create mode 100644 soundtest/SNDTEST.ASM create mode 100644 soundtest/SNDTEST.CHR create mode 100644 soundtest/SNDTEST.NES create mode 100644 sprdma_and_dmc_dma/sprdma_and_dmc_dma.nes create mode 100644 sprdma_and_dmc_dma/sprdma_and_dmc_dma_512.nes create mode 100644 sprite_hit_tests_2005.10.05/01.basics.nes create mode 100644 sprite_hit_tests_2005.10.05/02.alignment.nes create mode 100644 sprite_hit_tests_2005.10.05/03.corners.nes create mode 100644 sprite_hit_tests_2005.10.05/04.flip.nes create mode 100644 sprite_hit_tests_2005.10.05/05.left_clip.nes create mode 100644 sprite_hit_tests_2005.10.05/06.right_edge.nes create mode 100644 sprite_hit_tests_2005.10.05/07.screen_bottom.nes create mode 100644 sprite_hit_tests_2005.10.05/08.double_height.nes create mode 100644 sprite_hit_tests_2005.10.05/09.timing_basics.nes create mode 100644 sprite_hit_tests_2005.10.05/10.timing_order.nes create mode 100644 sprite_hit_tests_2005.10.05/11.edge_timing.nes create mode 100644 sprite_hit_tests_2005.10.05/readme.txt create mode 100644 sprite_hit_tests_2005.10.05/source/01.basics.asm create mode 100644 sprite_hit_tests_2005.10.05/source/02.alignment.asm create mode 100644 sprite_hit_tests_2005.10.05/source/03.corners.asm create mode 100644 sprite_hit_tests_2005.10.05/source/04.flip.asm create mode 100644 sprite_hit_tests_2005.10.05/source/05.left_clip.asm create mode 100644 sprite_hit_tests_2005.10.05/source/06.right_edge.asm create mode 100644 sprite_hit_tests_2005.10.05/source/07.screen_bottom.asm create mode 100644 sprite_hit_tests_2005.10.05/source/08.double_height.asm create mode 100644 sprite_hit_tests_2005.10.05/source/09.timing_basics.asm create mode 100644 sprite_hit_tests_2005.10.05/source/10.timing_order.asm create mode 100644 sprite_hit_tests_2005.10.05/source/11.edge_timing.asm create mode 100644 sprite_hit_tests_2005.10.05/source/prefix_sprite_hit.a create mode 100644 sprite_hit_tests_2005.10.05/source/runtime/console.a create mode 100644 sprite_hit_tests_2005.10.05/source/runtime/debug.a create mode 100644 sprite_hit_tests_2005.10.05/source/runtime/delays.a create mode 100644 sprite_hit_tests_2005.10.05/source/runtime/ppu_sync.a create mode 100644 sprite_hit_tests_2005.10.05/source/runtime/ppu_util.a create mode 100644 sprite_hit_tests_2005.10.05/source/runtime/prefix_ppu.a create mode 100644 sprite_hit_tests_2005.10.05/source/runtime/runtime_rom.a create mode 100644 sprite_hit_tests_2005.10.05/source/runtime/runtime_rom_common.a create mode 100644 sprite_hit_tests_2005.10.05/source/runtime/validation.a create mode 100644 sprite_overflow_tests/1.Basics.nes create mode 100644 sprite_overflow_tests/2.Details.nes create mode 100644 sprite_overflow_tests/3.Timing.nes create mode 100644 sprite_overflow_tests/4.Obscure.nes create mode 100644 sprite_overflow_tests/5.Emulator.nes create mode 100644 sprite_overflow_tests/readme.txt create mode 100644 sprite_overflow_tests/source/1.Basics.a create mode 100644 sprite_overflow_tests/source/2.Details.a create mode 100644 sprite_overflow_tests/source/3.Timing.a create mode 100644 sprite_overflow_tests/source/4.Obscure.a create mode 100644 sprite_overflow_tests/source/5.Emulator.a create mode 100644 sprite_overflow_tests/source/console.a create mode 100644 sprite_overflow_tests/source/debug.a create mode 100644 sprite_overflow_tests/source/delays.a create mode 100644 sprite_overflow_tests/source/ppu_sync.a create mode 100644 sprite_overflow_tests/source/ppu_util.a create mode 100644 sprite_overflow_tests/source/prefix.a create mode 100644 sprite_overflow_tests/source/prefix_ppu.a create mode 100644 sprite_overflow_tests/source/runtime_rom.a create mode 100644 sprite_overflow_tests/source/runtime_rom_common.a create mode 100644 sprite_overflow_tests/source/validation.a create mode 100644 spritecans-2011/README.txt create mode 100644 spritecans-2011/makefile create mode 100644 spritecans-2011/nes.ini create mode 100644 spritecans-2011/obj/nes/index.txt create mode 100644 spritecans-2011/spritecans.nes create mode 100644 spritecans-2011/src/music.s create mode 100644 spritecans-2011/src/musicseq.h create mode 100644 spritecans-2011/src/musicseq.s create mode 100644 spritecans-2011/src/nes.h create mode 100644 spritecans-2011/src/paldetect.s create mode 100644 spritecans-2011/src/sound.s create mode 100644 spritecans-2011/src/sprite.nam create mode 100644 spritecans-2011/src/sprite.s create mode 100644 spritecans-2011/tilesets/main.png create mode 100644 spritecans-2011/tools/8name.py create mode 100644 spritecans-2011/tools/mktables.py create mode 100644 spritecans-2011/tools/pilbmp2nes.py create mode 100644 spritecans-2011/zip.in create mode 100644 stars_se/Header_32k create mode 100644 stars_se/Make_StarsSE create mode 100644 stars_se/ReadmeStarsSE.TXT create mode 100644 stars_se/StarsSE.CHR create mode 100644 stars_se/StarsSE.NES create mode 100644 stars_se/StarsSE.SPR create mode 100644 stars_se/StarsSE.asm create mode 100644 stars_se/scrolltext.bin create mode 100644 stars_se/starsnam.asm create mode 100644 status.txt create mode 100644 stomper/smwnsf.dat create mode 100644 stomper/smwstomp.asm create mode 100644 stomper/smwstomp.chr create mode 100644 stomper/smwstomp.imk create mode 100644 stomper/smwstomp.nes create mode 100644 stomper/smwstomp.umk create mode 100644 stomper/smwstomp.unif create mode 100644 stress/FIREWAVE.ASM create mode 100644 stress/Header_Mapper0 create mode 100644 stress/Make_NEStress create mode 100644 stress/NEStress.NES create mode 100644 stress/NEStress.asm create mode 100644 stress/NEStress.txt create mode 100644 stress/SolarTitleNAM.asm create mode 100644 stress/Tanks.chr create mode 100644 stress/TanksFadePal.ASM create mode 100644 stress/TanksPal.ASM create mode 100644 test_roms.xml create mode 100644 tutor/make.bat create mode 100644 tutor/tutor.asm create mode 100644 tutor/tutor.nes create mode 100644 tutor/tutorchr.asm create mode 100644 tutor/tutorprg.asm create mode 100644 tvpassfail/README.txt create mode 100644 tvpassfail/health.nam create mode 100644 tvpassfail/mk.bat create mode 100644 tvpassfail/nes.ini create mode 100644 tvpassfail/palsquare.nam create mode 100644 tvpassfail/square.nam create mode 100644 tvpassfail/square.pal create mode 100644 tvpassfail/tiled.pal create mode 100644 tvpassfail/tv.chr create mode 100644 tvpassfail/tv.nam create mode 100644 tvpassfail/tv.nes create mode 100644 tvpassfail/tv.pal create mode 100644 tvpassfail/tv.s create mode 100644 tvpassfail/tvpassfail.zip create mode 100644 vbl_nmi_timing/1.frame_basics.nes create mode 100644 vbl_nmi_timing/2.vbl_timing.nes create mode 100644 vbl_nmi_timing/3.even_odd_frames.nes create mode 100644 vbl_nmi_timing/4.vbl_clear_timing.nes create mode 100644 vbl_nmi_timing/5.nmi_suppression.nes create mode 100644 vbl_nmi_timing/6.nmi_disable.nes create mode 100644 vbl_nmi_timing/7.nmi_timing.nes create mode 100644 vbl_nmi_timing/readme.txt create mode 100644 vbl_nmi_timing/source/1.frame_basics.a create mode 100644 vbl_nmi_timing/source/2.vbl_timing.a create mode 100644 vbl_nmi_timing/source/3.even_odd_frames.a create mode 100644 vbl_nmi_timing/source/4.vbl_clear_timing.a create mode 100644 vbl_nmi_timing/source/5.nmi_suppression.a create mode 100644 vbl_nmi_timing/source/6.nmi_disable.a create mode 100644 vbl_nmi_timing/source/7.nmi_timing.a create mode 100644 vbl_nmi_timing/source/support/chr.bin create mode 100644 vbl_nmi_timing/source/support/console.a create mode 100644 vbl_nmi_timing/source/support/debug.a create mode 100644 vbl_nmi_timing/source/support/delays.a create mode 100644 vbl_nmi_timing/source/support/ppu_sync.a create mode 100644 vbl_nmi_timing/source/support/ppu_util.a create mode 100644 vbl_nmi_timing/source/support/prefix_ppu.a create mode 100644 vbl_nmi_timing/source/support/runtime_rom.a create mode 100644 vbl_nmi_timing/source/support/runtime_rom_common.a create mode 100644 vbl_nmi_timing/source/support/validation.a create mode 100644 volume_tests/README.txt create mode 100644 volume_tests/empty.chr create mode 100644 volume_tests/makefile create mode 100644 volume_tests/nes.ini create mode 100644 volume_tests/obj/nes/khan create mode 100644 volume_tests/recordings/fceux.ogg create mode 100644 volume_tests/recordings/nes-001.ogg create mode 100644 volume_tests/recordings/nestopia.ogg create mode 100644 volume_tests/recordings/nintendulator.ogg create mode 100644 volume_tests/src/hello.s create mode 100644 volume_tests/src/pads.s create mode 100644 volume_tests/src/sound.s create mode 100644 volume_tests/volumes.nes create mode 100644 volume_tests/zip.in create mode 100644 window5/colorwin.asm create mode 100644 window5/colorwin.chr create mode 100644 window5/colorwin_ntsc.nes create mode 100644 window5/colorwin_pal.nes create mode 100644 window5/header create mode 100644 window5/linkfile create mode 100644 window5/maping.asm create mode 100644 window5/win_timing.asm diff --git a/MMC1_A12/MMC1.asm b/MMC1_A12/MMC1.asm new file mode 100644 index 0000000..5759b41 --- /dev/null +++ b/MMC1_A12/MMC1.asm @@ -0,0 +1,66 @@ +;MMC1 write handler +.define R0 $9fff +.define R1 $bfff +.define R2 $dfff +.define R3 $f000 + +.section "MMC1" FREE +WriteR0 + sta R0 + lsr A + sta R0 + lsr A + sta R0 + lsr A + sta R0 + lsr A + sta R0 + rts + +WriteR1 + sta R1 + lsr A + sta R1 + lsr A + sta R1 + lsr A + sta R1 + lsr A + sta R1 + rts + +WriteR2 + sta R2 + lsr A + sta R2 + lsr A + sta R2 + lsr A + sta R2 + lsr A + sta R2 + rts + +ProgramSwitch1 + sta BankLatch1 +ProgramSwitch2 + sta BankLatch2 +WriteR3 + tax + lda M2000 + and #$7f + sta $2000 + txa + sta R3 + lsr A + sta R3 + lsr A + sta R3 + lsr A + sta R3 + lsr A + sta R3 + lda M2000 + sta $2000 + rts +.ends \ No newline at end of file diff --git a/MMC1_A12/alphabet.chr b/MMC1_A12/alphabet.chr new file mode 100644 index 0000000000000000000000000000000000000000..dc27ce9fc67aedcaa5b66b19f075fc7b82a04148 GIT binary patch literal 1024 zcmd5(J!>055FHffBEo@$NwERpIN`u44lGnDW;xJdFRl`E2IF$8t%NWxf)0*_J=~-* zlDY+bd284ypN?;`|#8CWk%F`(>;n~dLkVB z&{O?cH}`(_9)Yiag%5F@Z7SYWc6o7q+-^}EA0OdE+2eliTXT*6$Aeg7&3{%ew)BYT zG>W2BlIRN|B*}D@rweCEsz7Q>MVY4`^0J^JkU>yT=Uq0Nx!aIB@o;EEN(T2ep4?Qp zOy{Nd*e7*ij3n#weGmw;K?nlu_i2qA$vApH=$-ZnT@v=U)cw7+&ha6#md{Sf^y^te zfM2GK4v9bD-aGFN^IK!!*F!)1HPBzc-(oUZ3=&E-DxvY+%vbn$Xc)KdzMOMj_NLIt z%eqB5pG-7ajb8Ko6b^ZQ1cziQI`CC=piPku=P!{C@;`X{I_}LvOaep`l zC3VkHAF;2?m5^Fa-Ey^5q(=5iDKgV94urV>*@Cdjcat~tO7`a=P{W^rzzTQ%EUEpU z)Hu&Gj`{8Pwa&0$yeI1w><0z?*k0@97I@VPQmfU{Oh2qCnK%Kf$Nr0v@)p@He?J1p7GUgiAK z!SeZ70@>bq6AGE$?J!zlT>v1(}H;j7zJ9t!Nv8(<2 z9cdX&U$I_xo-O_G;AgkF{grQ?A^qm{*vyt2)w=y1yp!o@BmcQs%6iitq8l}NBLf2isDKerzzJEv9w-nC#0Alphabet + sta PointerH +- lda [Pointer],Y + sta $2007 + iny + bne - + inc PointerH + dex + bne - + rts +.ends + +.section "Alphabet" ALIGN $100 + +Alphabet +.incbin "alphabet.chr" + +.ends + +.section "PrintMsg" FREE +PrintMsg + lda #$21 + sta $2006 + lda #$a0 + sta $2006 + ldy #$00 +- lda Msg.w,Y + sta $2007 + iny + bpl - + rts + +Msg +.asc " MMC1 WRAM DISABLE SCANLINE " +.asc " COUNTER TEST " +.asc " C 2O1O BREGALAD " +.asc " USE U/D L/R TO ADJUST DELAY= " + +.ends + +.section "DisplayTestBar" FREE +.define TestConst = $60~$ff ;Use the value oposite as the open bus value. + +DisplayTestBar + lda #TestConst + sta $6000 ;Write a test constant in PRG RAM + + lda #$10 + jsr WriteR2 ;WRAM disabled when fecthing sprites, but enabled when fetchin BG (!) + ;Now we can read $6000 as if we were reading PPU A12 directly... + ;We can detect +- bit $2002 + bvs - +- bit $2002 ;Wait for sprite zero hit + bvc - + + lda #$1f + sta $2001 ;Turn on grayscale mode + ldx Delay +_delayLoop +- lda $6000 + cmp #TestConst ;Wait until PRG RAM is disabled (emulators will freeze here) + beq - + + ldy #$05 +- dey ;Delay while sprites are being fetched + bne - + + dex + bne _delayLoop ;Loop until the delay is expired + + + lda #$1e + sta $2001 + lda #$00 + jsr WriteR2 ;WRAM always enabled + sta $6000 + rts +.ends + +************************* +**** INTERUPTS VECTORS **** +************************* + +.orga $fffa +.section "vectors" FORCE +.dw NMI +.dw RESET ;Thoose are the actual interupts vectors +.dw IRQ +.ends diff --git a/MMC1_A12/mmc1_a12.nes b/MMC1_A12/mmc1_a12.nes new file mode 100644 index 0000000000000000000000000000000000000000..ff3de91095fa3967248470e06851f21b413abefc GIT binary patch literal 131088 zcmeIyUuav`9l-IUYe#Wp1*;**x2W8pUYJ&zw)`#yw_uPBV@7{BM=X37W<42C&)23pIf&c;tAbq>r7sr8LhqpkIm{x>Dw_#%2OogTYg z(znalvC-oX#5zNF4o|2=_t^RKg=eEGkv@6SkE+4L(;M-@)6IA$ zdttItk?}I#L_VKUeqnrvOyDX%9F+-V{7QBsp3m60v@3`EA01HA8jKEX%I<$R{X)V1 zl=6N1yQ5^XmybBE%%90R3FUrIyizGtDtSA|E)u1P3 zP@Oq@zS4}JIhnU{zc4*{!Fu_pCp_`;3$v3K%4JXap0qvt{EV#7K7UG9sPfI}WWMHf zGHq6Ltbayy#J_9T-Q!K4u5j4;&r`m&3K`5WN>5sKi`Pk=WSe`-@Lzm zA#W3w{j~YIc0E!ge;IuvU)z*;v+1hb!h$Kx*!*%&_@{E}0}0BOOMV$QBjd~SR>0nG z1;p>!)Ns=?>h2fMJBl~DcV}cvi&8q)*6Q35{-GUbs_TEcF|G7;NSmQj=g_%gbiTUv z`R!9P(csof?6b6^W4D^sNB1x4UoPv{>!wS;v1F8f-&S8PnXtaAZd6I>Qb_Bk>-zOY z{min76%)F;Y>Fl2n2u7&R*qxdF10wTN?%*nuPxW&BjvVQ;_B$D&T7IqKaDqRE7Wl6 z3DYXA?X|?f%}Ch^91|)gOxs46`&8uWXxTBNGXBB((I*$pu2NW=IjQEgWq(1d(oY| zt1s4<+;t$eTleaoZv%(=Q^`XQ_au8CmS_8ty63(_GC)tNR}UoQuHkdTFAj@aEg~v4 z)rcBZRHYVeoYKyrTBxyA+9CbBWz%i5|A|ypC998=!#5*0j!rMlpL2s&^GM)4)gdc- zQLg)LU)Q#kw&+@$t=a{>*78`W*dn7jC+1JQa$=~oesN^e;g#0^E`8rQr0*T+`_ADN z?1a;qnTsXmnV4+7tnajaIYw`pq%8C0#3kijz1aA2Zp&2g z@0H+V(M9)VXolSzhx@YjMY1azV8W+>FKKeXXdLsaQkysJcbJwOrp3 zyyxi;>MzIt(kZ9w@nCJSGx)d~`dfVdSMG!HKgR#yuEaj^YVF&8TeKUa+n1YPg$Wn! zJD~quKRR1)eo1Dkd4ud(TX9=0vaPFmgJ&N3?_%dA37h>DffBYxYfT01rty+;Zb%6} zUsX1fJEoS;#Hl&K*PeV|R_2HP7jQoU2q1s}0tg_000IagfB*srAb>1UUA9^iKJ z&PM7aBQeGviQ6ObvEUHmM1h{jeSyw)lLCG84w7mY=%?<^3+>3xx%L2~aaThPr~x&g2GoEWPy=c}4X6P%pa#@{8c+jjKn|az0aP4 z(!0|$GtGwijAv&SXD=-`XUv6$89Vvf#7RtV>WulcF+IO%mS!7fW^TG^E^?FkSC_bz zF$<09nG;VijrSUuPV>^mPt29MX45P!FU*^d7aEQEe9SAexV@a^aAA3A>C(KJTQrv! z8jFkg<})Ai-#-79eFui#ssS~i2GoEWPy=c}4X6P%pa#@{8c+jjKn$@e@3Fg=S#sLz9uA7Etk0)OKB%0Dn?PsL$%PV%B`|>@91yKeW%u6RU?I{A8?! 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 literal 0 HcmV?d00001 diff --git a/apu_mixer/readme.txt b/apu_mixer/readme.txt new file mode 100644 index 0000000..74c8f2a --- /dev/null +++ b/apu_mixer/readme.txt @@ -0,0 +1,94 @@ +NES APU Mixer Tests +------------------- +These tests verify proper operation of the NES APU's sound channel +mixer, including relative volumes of channels and non-linear mixing. +Tests MUST be run from a freshly-powered NES, as this is the only way to +ensure that the triangle wave doesn't interfere. + +All tests beep, play a test sound, then beep again. For all but the +noise test, there should be near silence between the beeps. For the +noise test, noise will fade in and out. There shouldn't be any +noticeable tone when heard through a speaker (through headphones, faint +tones might be audible). + + +Internal operation +------------------ +The tests have the channel under test generate a tone, then generate the +inverse waveform using the DMC DAC, canceling to (near) silence if +everything is correct. + +The DMC test verifies that non-linearity of the DMC DAC. The noise and +triangle tests verify relative volume of the noise and triangle to the +DMC, and that the DMC DAC affects attenuation of them properly. Finally, +the square test verifies relative volume of the squares to the DMC, +non-linearity of the square DACs, how one square affects the other +(slightly), and that the square DAC non-linearity is separate from the +DMC. + + +Flashes, clicks, other glitches +------------------------------- +If a test prints "passed", it passed, even if there were some flashes or +odd sounds. Only a test which prints "done" at the end requires that you +watch/listen while it runs in order to determine whether it passed. Such +tests involve things which the CPU cannot directly test. + + +Alternate output +---------------- +Tests generally print information on screen, but also report the final +result audibly, and output text to memory, in case the PPU doesn't work +or there isn't one, as in an NSF or a NES emulator early in development. + +After the tests are done, the final result is reported as a series of +beeps (see below). For NSF builds, any important diagnostic bytes are +also reported as beeps, before the final result. + + +Output at $6000 +--------------- +All text output is written starting at $6004, with a zero-byte +terminator at the end. As more text is written, the terminator is moved +forward, so an emulator can print the current text at any time. + +The test status is written to $6000. $80 means the test is running, $81 +means the test needs the reset button pressed, but delayed by at least +100 msec from now. $00-$7F means the test has completed and given that +result code. + +To allow an emulator to know when one of these tests is running and the +data at $6000+ is valid, as opposed to some other NES program, $DE $B0 +$G1 is written to $6001-$6003. + + +Audible output +-------------- +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason. See the source +code of the test for more information about the meaning of a test code. +They are found after the set_test macro. For example, the cause of test +code 3 would be found in a line containing set_test 3. Examples: + + Tones Binary Decimal Meaning + - - - - - - - - - - - - - - - - - - - - + low 0 0 passed + low high 01 1 failed + low high low 010 2 error 2 + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to prevent the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +-- +Shay Green diff --git a/apu_mixer/source/common/ascii.chr b/apu_mixer/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/apu_mixer/source/common/build_rom.s b/apu_mixer/source/common/build_rom.s new file mode 100644 index 0000000..38eab29 --- /dev/null +++ b/apu_mixer/source/common/build_rom.s @@ -0,0 +1,92 @@ +; Builds program as iNES ROM + +; Default is 32K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +.segment "CODE" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_chr_ram + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/apu_mixer/source/common/console.s b/apu_mixer/source/common/console.s new file mode 100644 index 0000000..508898b --- /dev/null +++ b/apu_mixer/source/common/console.s @@ -0,0 +1,328 @@ +; Scrolling text console with word wrapping, 30x29 characters. +; +; * Defers PPU initialization until first flush/ newline. +; * Works even if PPU doesn't support scrolling. +; * Keeps border around edge of screen for TV overscan. +; * Requires vertical or single-screen mirroring. +; * Requires ASCII font in CHR. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: A, X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/apu_mixer/source/common/crc.s b/apu_mixer/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/apu_mixer/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/apu_mixer/source/common/delay.s b/apu_mixer/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/apu_mixer/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/apu_mixer/source/common/devcart.bin b/apu_mixer/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..7180661c2aac6357745f288c286041c66e8bf4f1 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1Wo+nWSim*mmrujL|HOg?Yi3APUimxIh2g}7?>-ES zViwD1s88?d&`L_3nrz?Y_Hu!*1^3nCUj;RLs^xgDCeN9i`}BqK7Imqn$^TbGXua0h dz`ZoJ(L?v`)}&`CCp2EACg;v4)^1OrGXY=%o8ABb literal 0 HcmV?d00001 diff --git a/apu_mixer/source/common/macros.inc b/apu_mixer/source/common/macros.inc new file mode 100644 index 0000000..4307c66 --- /dev/null +++ b/apu_mixer/source/common/macros.inc @@ -0,0 +1,188 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro + +; Negates A and adds it to operand +.macro subaf Operand + eor #$FF + sec + adc Operand +.endmacro + +; Initializes CPU registers to reasonable values +.macro init_cpu_regs + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + .ifndef BUILD_NSF + inx + stx PPUCTRL + .endif +.endmacro diff --git a/apu_mixer/source/common/neshw.inc b/apu_mixer/source/common/neshw.inc new file mode 100644 index 0000000..d636a97 --- /dev/null +++ b/apu_mixer/source/common/neshw.inc @@ -0,0 +1,56 @@ +; NES I/O locations and masks + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.ifndef REGION_FREE + .ifndef PAL_ONLY + .ifndef NTSC_ONLY + NTSC_ONLY = 1 + .endif + .endif +.else + .ifdef NTSC_ONLY + .error "NTSC_ONLY and REGION_FREE defined" + .endif + .ifdef PAL_ONLY + .error "PAL_ONLY and REGION_FREE defined" + .endif +.endif + +.ifdef NTSC_ONLY + CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.endif + +.ifdef PAL_ONLY + CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/apu_mixer/source/common/ppu.s b/apu_mixer/source/common/ppu.s new file mode 100644 index 0000000..4827b3e --- /dev/null +++ b/apu_mixer/source/common/ppu.s @@ -0,0 +1,203 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts + + +.macro check_ppu_region_ Len + ; Delays since VBL began + jsr wait_vbl_optional ; 10 average + delay Len - 18 - 200 + lda PPUSTATUS ; 4 + bmi @ok ; 2 + delay 200 + ; Next VBL should roughly begin here if it's the + ; one we are detecting + delay 200 + lda PPUSTATUS ; 2 + bpl @ok +.endmacro + +check_ppu_region: + +.ifndef REGION_FREE +.ifdef PAL_ONLY + check_ppu_region_ 29781 + print_str {newline,"Note: This test is meant for PAL NES only.",newline,newline} +.endif + +.ifdef NTSC_ONLY + check_ppu_region_ 33248 + print_str {newline,"Note: This test is meant for NTSC NES only.",newline,newline} +.endif +.endif +@ok: rts + + +; Loads ASCII font into CHR RAM and fills rest with $FF +.macro load_chr_ram + bit PPUSTATUS + setb PPUADDR,0 + setb PPUADDR,0 + + ; Copy ascii_chr to 0 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page + + ; Fill rest + lda #$FF +: sta PPUDATA + iny + bne :- + inx + cpx #$20 + bne :- +.endmacro diff --git a/apu_mixer/source/common/print.s b/apu_mixer/source/common/print.s new file mode 100644 index 0000000..ab8a308 --- /dev/null +++ b/apu_mixer/source/common/print.s @@ -0,0 +1,247 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr print_nibble_ + pla + + pha + and #$0F + jsr print_nibble_ + pla + rts + +print_nibble_: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints low 4 bits of A as single hex character +; Preserved: A, X, Y +print_nibble: + pha + and #$0F + jsr update_crc + jsr print_nibble_ + pla + rts + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: A, X, Y +print_dec: + pha + sta print_temp_ + jsr update_crc + txa + pha + lda print_temp_ + + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jsr print_char + pla + tax + pla + rts + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/apu_mixer/source/common/shell.inc b/apu_mixer/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/apu_mixer/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/apu_mixer/source/common/shell.s b/apu_mixer/source/common/shell.s new file mode 100644 index 0000000..d458c9b --- /dev/null +++ b/apu_mixer/source/common/shell.s @@ -0,0 +1,180 @@ +; Shell that sets up testing framework and calls main + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +; Move code from $C000 to $E200, to accommodate my devcarts +.segment "CODE" + .res $2200 + +; Put shell code after user code, so user code is in more +; consistent environment +.segment "CODE2" + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + init_cpu_regs + + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell without affecting current set_test values +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + ; Clear APU registers + lda #0 + sta $4015 + ldx #$13 +: sta $4000,x + dex + bpl :- + + ; CPU registers + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sta temp + init_cpu_regs + setb SNDCHN,0 + lda temp + + jsr report_result + pha + jsr check_ppu_region + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +.include "shell_misc.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts +.endif diff --git a/apu_mixer/source/common/shell_misc.s b/apu_mixer/source/common/shell_misc.s new file mode 100644 index 0000000..7e7d4e9 --- /dev/null +++ b/apu_mixer/source/common/shell_misc.s @@ -0,0 +1,211 @@ +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +.macro fill_ram_ Begin, End + ; Simpler to count from negative size up to 0, + ; and adjust address downward to compensate + ; for initial low byte in Y index + .local Neg_size + Neg_size = (Begin) - (End) + ldxy #(Begin) - = 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/apu_mixer/source/common/text_out.s b/apu_mixer/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/apu_mixer/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/apu_mixer/source/square.s b/apu_mixer/source/square.s new file mode 100644 index 0000000..9e8c24a --- /dev/null +++ b/apu_mixer/source/square.s @@ -0,0 +1,88 @@ +; Verifies square DACs and non-linear mixing +; +; Plays two square waves in all totals from 0 to 31. +; Cancels this to silence with inverse wave generated +; using DMC DAC. + +.include "vol_shell.inc" + +test_main: + setb $4001,$7F ; disable sweep + setb $4005,$7F + setb $4002,0 ; period = 0 + setb $4003,0 + setb $4006,0 + setb $4007,0 + delay 5000 ; allow period to settle in + setb $4015,$03 + + ldx #$6F ; period = 896*2 + ldy #$00 + stx $4002 + stx $4006 + sty $4003 + sty $4007 + delay 175 + + extra = 27-1 + ldx #-1 + ldy #0 + jmp @first + +@1: delay extra +@2: lda dmc,x + sta $4011 + delay 896-4-2 + lda #127 + sta $4011 + delay 896-4-5-extra-4 + dey + bne @1 +@first: inx + lda sq1,x ; update square volumes + sta $4000 + lda sq2,x + sta $4004 + ldy #80 + lda dmc,x + bne @2 + + rts + +.align 256 +dmc: +.byte $7F,$7B,$77,$77,$74,$74,$70,$70,$70,$6D,$6D,$6D,$6A,$6A,$6A,$6A +.byte $67,$67,$67,$67,$64,$64,$64,$64,$64,$61,$61,$61,$61,$61,$5E,$5E +.byte $5E,$5E,$5E,$5E,$5C,$5C,$5C,$5C,$5C,$5C,$59,$59,$59,$59,$59,$59 +.byte $59,$57,$57,$57,$57,$57,$57,$57,$54,$54,$54,$54,$54,$54,$54,$54 +.byte $52,$52,$52,$52,$52,$52,$52,$52,$50,$50,$50,$50,$50,$50,$50,$50 +.byte $4E,$4E,$4E,$4E,$4E,$4E,$4E,$4C,$4C,$4C,$4C,$4C,$4C,$4C,$4A,$4A +.byte $4A,$4A,$4A,$4A,$48,$48,$48,$48,$48,$48,$46,$46,$46,$46,$46,$44 +.byte $44,$44,$44,$44,$42,$42,$42,$42,$41,$41,$41,$41,$3F,$3F,$3F,$3E +.byte $3E,$3E,$3C,$3C,$3B,$3B,$39,$38,$00 + +.align 256 +sq1: +.byte $B0,$B0,$B0,$B1,$B0,$B1,$B0,$B1,$B2,$B0,$B1,$B2,$B0,$B1,$B2,$B3 +.byte $B0,$B1,$B2,$B3,$B0,$B1,$B2,$B3,$B4,$B0,$B1,$B2,$B3,$B4,$B0,$B1 +.byte $B2,$B3,$B4,$B5,$B0,$B1,$B2,$B3,$B4,$B5,$B0,$B1,$B2,$B3,$B4,$B5 +.byte $B6,$B0,$B1,$B2,$B3,$B4,$B5,$B6,$B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7 +.byte $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B1,$B2,$B3,$B4,$B5,$B6,$B7,$B8 +.byte $B2,$B3,$B4,$B5,$B6,$B7,$B8,$B3,$B4,$B5,$B6,$B7,$B8,$B9,$B4,$B5 +.byte $B6,$B7,$B8,$B9,$B5,$B6,$B7,$B8,$B9,$BA,$B6,$B7,$B8,$B9,$BA,$B7 +.byte $B8,$B9,$BA,$BB,$B8,$B9,$BA,$BB,$B9,$BA,$BB,$BC,$BA,$BB,$BC,$BB +.byte $BC,$BD,$BC,$BD,$BD,$BE,$BE,$BF + +.align 256 +sq2: +.byte $B0,$B1,$B2,$B1,$B3,$B2,$B4,$B3,$B2,$B5,$B4,$B3,$B6,$B5,$B4,$B3 +.byte $B7,$B6,$B5,$B4,$B8,$B7,$B6,$B5,$B4,$B9,$B8,$B7,$B6,$B5,$BA,$B9 +.byte $B8,$B7,$B6,$B5,$BB,$BA,$B9,$B8,$B7,$B6,$BC,$BB,$BA,$B9,$B8,$B7 +.byte $B6,$BD,$BC,$BB,$BA,$B9,$B8,$B7,$BE,$BD,$BC,$BB,$BA,$B9,$B8,$B7 +.byte $BF,$BE,$BD,$BC,$BB,$BA,$B9,$B8,$BF,$BE,$BD,$BC,$BB,$BA,$B9,$B8 +.byte $BF,$BE,$BD,$BC,$BB,$BA,$B9,$BF,$BE,$BD,$BC,$BB,$BA,$B9,$BF,$BE +.byte $BD,$BC,$BB,$BA,$BF,$BE,$BD,$BC,$BB,$BA,$BF,$BE,$BD,$BC,$BB,$BF +.byte $BE,$BD,$BC,$BB,$BF,$BE,$BD,$BC,$BF,$BE,$BD,$BC,$BF,$BE,$BD,$BF +.byte $BE,$BD,$BF,$BE,$BF,$BE,$BF,$BF + + diff --git a/apu_mixer/source/triangle.s b/apu_mixer/source/triangle.s new file mode 100644 index 0000000..8a54232 --- /dev/null +++ b/apu_mixer/source/triangle.s @@ -0,0 +1,54 @@ +; Verifies triangle DAC and non-linear mixing +; +; Plays triangle wave. Cancels this to silence with inverse +; wave generated using DMC DAC. Scans over range of DMC DAC +; to test non-linearity. + +.include "vol_shell.inc" + +test_main: + setb $4008,$FF + setb $400A,0 + setb $400B,0 + delay_msec 20 + setb $4015,$04 + setb $4009,0 + + wait = 8 + + lda #wait + sta temp + sta temp+1 + ldy #127-41 + + extra = 13-1 + + setb $400A,$37 + setb $400B,0 + delay 28-extra + + ldx #16 +@1: delay extra +@2: inx + txa + and #$1F + tax + tya + clc + adc table,x + sta $4011 + delay 3 + dec_tempw + bne @1 + lda #wait + sta temp + sta temp+1 + dey + bne @2 + + rts + +.align 32 +table: + .byte 0,3,6,8,11,14,17,19,22,25,28,30,33,35,38,41 + .byte 41,38,35,33,30,28,25,22,19,17,14,11,8,6,3,0 diff --git a/apu_mixer/square.nes b/apu_mixer/square.nes new file mode 100644 index 0000000000000000000000000000000000000000..08a514a50f7dd1f02adb4da1678cc30f212c0977 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/apu_mixer_recordings/dmc.mp3 b/apu_mixer_recordings/dmc.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8a28e2aa1b0944c3d4b26bf65af1851f42e1c785 GIT binary patch literal 82808 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≧3nE!nYm!J~imuWfp# zfBX+O!AmO@4ka8wI;jW{bA4O=6a2+QD#%g;vGh+`xtA?IMcm@dW0Rn=u|Q+TA_8g( zvLeM4d+>~pML0qm&n7a|4g;R02(m`+5t+&>JQM{lQ#8dcP{ts5h9qqeg#M&Zzi5TN z0bN$)(HL|C#8_Ius=4L#E~in6YQAjts3nt!?3Z78t|vx!KUF7rr0~KgsSSW{*GTGB zz=Pn2GMrtLADGlMqnjclx*UD%(EhA+{ckN%1Ql&}E)P4@}m7%pBU9&3bA0K+!3E6Jrj z_ul0*L9P+ICSkg7qwL6Ggx%gW9F^){)DAP7*4{*6=Dqrf zk6I}Ut`o4phKb}TCJn*Ae?&Zti6@DrYMUVZVh-3;J+Rlp4((#YW053cwG+H@o{}GXSricM&xCo8F zusMRW8z7kAz?|#>f?$`YrYQ6@ek^4qn@~5Bju^1Q_oNmess#X(^EzcK*K`EE%p~=% zA|l3dSVt$`76=X^I6W+0R2nnD0uVQDyR)=mz?X1Zegb&cKpgL+btgDqFccUbE`&ey z3wmutw>ht8fY2o#GaoeD!h8|7d9RgSaNdCtuJ*+5+yQ_&Z~=vK_Ae{n_JWC>VXufaCLs&TM*?+!cGz$M7fj>*p3b<<=*eWzhU#pZO3xXx;s?mDh(C&_qjJ^{D zjWY@G1xxI~8qf;MNo=j402whfTVuAWcR8uGraj{1%ULGkuwV|BB~tnKvz@bdbGTeH z%jnR-_yC7Bp8${J1bE>Rxta+x&iCsj&nkd^`YwGeQ6PbC8qNX)OI?9+KmbDZFDw}c zjaOMqti#0N2HhU)h{ODxZpuMkb7f0L?Mumh=q+M8WpY(HJJV@Zg)WufmUE&f5dC>& z=kv)x;$Sif{3QY>ib+%_2r-d}QeW*9dax9U@rGCKP!EAnKb8Llp-+MB?y=K`Oi6+- z81==gi}L3L2>x&li{^s<3!dV0abL|lhU}Sij_f(Omub!S9+{8~5J0ZO$Ka7#quW7G z%rg{XmF;?rmw7Go)3=H@CuB5PVg_^;Jd50%M>Itw6g-q=7;rZ0F}@!MF>EsaPAe67 z*+f^g^(5a5MmYl&7F~$n!=sHhgXRq+UCnzGOALe8f4{hK;f#$Ly1fhl(g1*$_bK6` znUO88K#Z0Ifv_<)0g|82c3+A+FX)BfXfL=E7z{~R+{&<`8Y6>{5B{`T}FdE*)s%Uz{S7A)sfiVCy6G4VV|;a)d5}tw<{ZV1Vqa z@_v?Q$OnxNWb$7rP%0&#utfb`D;#(Hp@~vWNvZOPLQRB$5db0*uLLj7TnPj}G^=If zUcnJ}peyQfXz@+LMXA4IU=ue~#DK?raC`!X)(j9ll(>sb|DBpiYl?sS^dfkJNhn{nc1ywLE`ZePjJMA$k)-C zoS;eVI1oZgR1RS*&l7Ds!P0FuJ4Pcqa{;aD2@urp3c#`=g+OS<9H!%ho(eq-u=u?| zltQ%=XR$_+BdCv+(3J-OP~Svnhukr*{`MiOh_zAIDw)6x@dfeKDFbKryB>#<`Xr%% ztD^zFQ1eGniwix@1CL2p-~G5wKm{8Y;a58&0l{fjZZ48*`0$tjeH;kxD2O5iEunT% z$jMD#Q9|pN=2c|e#6o#@2!z<~SqOwAW8!44(D%b*m(iE~U5nk)IyqQ?!O08|Dq(P5{5SYAUFPk;g0vT(?~85xoKWe76t=|5(pQQ77$1xKy>*+VR%@II znL%wau^}=6W}dMvj%e_Vm=+%=1#PCz@Fd(;KoBLq1xJb1 zS4_PAy|Nto%ZwR#{H?!F4h zRuuAjKB?ps?#@3ubdZ{{pgLKUq9Z-2^;*@d=_X=P|Bdbf8fVKS6IR+bSC%Okt=m&{ z5)pHJn(Pf=pzM%9Of9}C* z#n_!nPJB=M!)wj$@RSdGFs}5<*74iv%ITutZ}(dLp4E8}I_X-<$;sT*yAgZ$Ri2C1 zcT%Lj`0=-mKqcqcNffU&37ln|BYVamduhEXzhq{6zLog)GDAsGQoctHJWfBGGFw-b z!1VPM2v8YYUHqMiJ5^KWa3T3LhEh$pR-dTXld9=?ogPsou-^=*^u@A#QOR|ba8K_9 z|3*Vy`NspZ3bC(CPSWsaOtf6|_@a*f8MmlW~8T7=GxN+gV|6I6VqA+CB}Xf$Bj{m_mY?bc}6%IeE^I5wnP zz8T^?%d6iw1l%teF|Hr4(soJRag1#ugy)pO=QQ<#3PN`l35DT|O{`3&ZAEX&+=Y`k z8qKdjfHV}Rd=+=v*;JvFbI_}%)1k#A`PRj(tX(8)Z1*p5Jt_-Ur()LeTJn)7g4+o< z;H&)b$&f{D)NEEoLDcY+SxOaQaT~{orlg4zIej*1AbpBZam}rw&rK~U-%;obWUEbE z6$?uT^Bs{2rAE`#h0xoY5|y9tCA(}hmc)&18GSx*i9UY!e(NM)RFT0mfG+VITz4Qy zcw-^i^BHMl++Ux7XWQv>uR0~6;d2`1-HfT5#5*Y;z2h}h94Uv}oiA$g*9Q&KFQ49d zmF_w_77HK3AFzC@8{-$q5mv_Q6;d=GB&*&YWWGDHttk9#CXj59*DLN>y^b^vNjk0S z^BTH*xM~Wc;(=0Zi8bA;)x7>tip|5hWFN(7`?7QQ9~*T+BAvAuj3lRaA>-D!z(b{r zjtg6hP1(?3II9=qD}8QWuD7*L8d4>_knp=v9*+@Hr9vnsT7RveXg(WR`b9UpAO%?_ zKsk)^i6}YPMG}fuN#Qh!Oy54X-mx~_nJakte70#OguIAPQt`6*tu0mc&)U(}!vlBt za*!!~ToQXxqD7(-eY*HMrsCOGYVj_$r^a_H9cqL8R~jI=w7-5k9{=A7>D6o~=J*VKQaC zj4XpfWr00#KIs0RJATdh9PK6l=G>#>=1f>D_(Ak_UPXh^W6tkJ zX-4U>1FAeJWcMlhmX^tgv`0rx{mAj;oZ(Rl@x{yD`lx%`SZ)>w3l0>lN*la&=DjpMaIQG%q6Y>pw^wZ*|G-qFvR`Zj(aDZcO zEp8}b2~AIp4?f+iv>Zpd_`Y*HPAI^H&0M*kL*BupUWc z!AhsJSj9&0v3Yt%*HroIbv1=Q3vGUt*Bx6DO+?-Zya4G?g|M8-8~<)EE6&G;GzrhI z9TkDc>pvQo#5$%9`=KEubPSnjR9BZJbxnB%M|#~%Yb*-MSkaX^TH8lDUM9>W5yr}D zkj)eVH0Edk@{jE>I^xkO#VS!>H&jU25c|_=m ztg9xj-@#0ZpKNhI5g@VI$zG=pMYz5-fR#V$*~-b(Oqi})P>opX>~n2%l@+rHS?k<-#IfLk zUEOxsmorgwRw^FZhNoeYDYo)A>#6IM&QM<)ahOpMxng8C;8r)<{`p4cLeJO`DJ5@IfE!qSpxhPVF zU+l6@55~w#)YHwCU94w_8F<*wDHi3?Youfn_HwL@fwu~lmO8pj=M^y<{;(EPz+KMM z51731$Qv`vq#hvfAP6kHC90Df2Z9=p-d)xH;(?c(CzBf(rqpIJQ(As#?w9{*hQzQCC3q;t*j(%#v&mP9tXp{bvidY5rt%>} zaHH_GZc{^2PsP4KaIvPoQ>dn2eeG8THJanXqS0!ZFMkaPgLXXv|7{yVZ6m3OSmbLs zG8;Y9TX}A$@}E^VAtV^6xVb^sUU_G@kf#92@NwvDqe38 zdP`!#>MCLA7ZT*j8?94%^Tm7Pm#4hNpErD8yKheJo$sBV{M&fLq27E}TR3q!!a*7z z6yspRo1=toz;O`m3GTlfouf5pf>x#Ev@K{EkM>YQiw802`a6iEKwaHa~t$3uWQJ4xu z#Fv}L4t3HyiHkfG=et}horN&xe<#JF!`wJYjZO*|Bp1015h$^t(w@h#9atY6+s48W zEGy@vux};)v`zdV1$_iwzBl})6M&)#*0M>o0H(1v$Um42m~wI$gC&(!h!Q6yhk=hz zzrGj*@TaptmMsYsEzy(wm90!aR`i}Djg67cn8Q#sfwXpWVJHjYG!Xk!=51wi1@pv!tWQ(!V0_! zCfOEysPy_NfkfV~KDNDw@T*8Sn7m}-{WBVWDundaE!kzw4(XgR*kI%$fdByT=p7^K z6ZOJmB-cn`*ShgztN75lNcdj=nYQ@OR~pRq1j*Yo>lh5R7CFS%Am;(AFsu3{XM#Bz zje_W00?-2lCIBp*ZM9YlpjEWGAvt$U5z6-*QGbxyodn1|LA&3uoL}9EU-H2pC|sHk?Rg=-2mlQc_YL51fAcy=g;jT( ze~-||MLpshpr>azOU?Xue!(Plsnrcnm6Ev43V9|1sg85TVZuraCxJgk-crVa-y}ge zwefdbdeWc0szf3ii7Azl$Xh6*FZ2TvnRp-+hWtmuX~xVj4*+QZ;N@ZWUzf$x5l|q&gAOc6@GPD4gsM6ROetvw9=W-t1 zC?MK_&XtA!C7G%DmVw{(T0dQ(0ByM6p=4gv33=avPZ1=yZ8o>@-kW4yL`&G8Tl5(xbGM4bl+ zsRFJNZSy6v`|$wUq9hYdzv<=^POo1Gj%m`_gpqG_>{y?ZBLl*a*TeCxD$pm`SnRc7 z$h+wbNPj}m4T|eA_!&SLi$wmyz-C81Se+Z%l>ZuuY}keXX38n)05Ast+Ku-DEAG}3 zIgjuVrcU-;0Id@S&4<6dv|He~{XAy}0KYjZxaC6;)(rqQNmjYe$z&S3};v$bFE4CaP0-pb!&Yh@ya!f(!7Bw(pXmn4`3Js%}L@h}Xd%d?RciWz zyvCiJ3M`vFg28EgQh{+3UwpnA>0%G#4&ION=NAaLUU2dvY6gj{dA~=6HV4P{LTS}^5RC&x5%DbIH4=F8vw|V zYzMiPFdQm&n>U)1S7-z(JPD6mUp?O6*)wyjWr`ODfe|L*>+Y$@yX47pKN5VbI9#v> z5%QnIZjdgFs12Hk;%E=Uw?|3jFGdcky!&T3Y4aGUKPzZTq9xSR0IW0s&?|Z)@mBWb z7=qp*+kcz*`T>GBfbWv1GZXOu;Xw)Cii|;`5TEDsvN#Rh^TtgCOQ7dUXg|V`XQFJ$ z@H9CHL7u>{YcBGBKb#mp3qzS2Wr}~!r2S;W9Y~Z)*-KH+yrl;*%@>OO2|MFQhv2&J z_W%HSKY*qgXzF_$7d4t}=D^wW3;Z|VnM_?)Z#AK<^qY?)@wQGs?REut280Sjbnj`P zMjQQHY6g{RjSA~y{8&w?gkO;NZNd}*hF&N|(wUc{N*zZB$a5@^^+=sKay(OM^%em1 zP-d~Tb`s8Q5nHB@9~T)^$ekfRHyLjC7Q@uUwBq5uMk zM6H>eWVBM05>TOF>rBFcg^1n*hY9=iZl{;#*rTC^Fk} zqVFS|sNT@@h9PwwZfRpcXgbW+Td$G#`C!i27lhB=qwKcF3-q{uK_NAme2hdcV$EhR z3L)Rzw<8J}jND5A%n|_LqF4XA>817;z$2oXG5CRJ8-DaS(>`p;v0xEpii3ViLG-Se z{4x*ZztsN{8j1yV5l;AkJk!x2F{Y1-l0gy8n+C3?Pjw2plw+j8C`Jb_J{q3nbYxGFcfDPQv&!m81RT z8t>7}vh8A-?Nbb6YX^DoHD*2XZppfRFc4FXpndiW@<#dDE~p=SBh6kHi9CbFhqoM} zp0h2|hDy3qNdm*}A1Dv1^V~$Mg|__XK^+G9U^wGEZWJjmaYK%6KaLvuUU)?4>%SpF zs!rLu3O(`p_kIvwjc64||L{HcPZ1|FTwV}-mK57&RX9VjbJKMIYlC<+>H0bvAy9_>J$Hjri}W2pU> zpsbHgE+RwCk*6(e#mF9P*~vrF;!|>u0siw8dCNV*Y$F*_i8X<8%xz7X1>GDEBKU!G z=?$oW+zK^Ykcb*1k@s;VSZWXlq#Ck}?(Ju_qyYf4g&5GG^XhJqe;1_%sL5DeYI^HC5|bZ}-VQnPXXc1=(drNuzd?$|I4Nf(VGsLvsOAntF_y5&JC3^C>N5EZorE9g+`bvoUFWz{ z-DR`^g2ThH@rqsIXIcuE!b_H;&jhA&PFS(OsiS)n^AxZ~q{E9rOC1)OvLa0Bt;Are z#5^9>Kv`Fd;;c@dwNJ;(r19;NxV2&Tm9;Jq?u9Z}E9AdSSe2Ao(?=xIG-oeEUl!$t z2MF&G1QV#~LDwt1Uclwo%v=d;_><3(X#Fb<8g!+&AUuQ7Nk@HsefiF!n)*Iubq2%o+}3*%zpYK*3E|I79jd0(z2W}RY=R6cV^Q-R< zp)d)M-6mRn^u$g3m+N+tNk*pqsOnS2^L}3UtZN&C z)^i$9dKhfUe7Pe0&{65Em#;}ntW5SB`6r!7Is6GD6LEz{*B&NT&PG{+%5Ljv=o!Jz zYk~JJEd@&MKb(~qd3hE$x47t1msR=JN#f!hYm|`muQKvZi-k&eNHJ@RGn9&_7iEi; z4MZQL@DU(P_7-bQZXW1qV!bVG{2gE!+2+jSB!nfKA*$Cl=fLCH$q09;sL->}jLvi@ zQfgjl5~tf+OnT%zqhVpNqfig)r^2T|lNI(d9T-IOxx-J)&A)1+PqDZE`z>ld-K>)~ z3&HIODfZsxL(HN)xo1bxqGI`g3Ia;-g z4;+8~4CJ1t-1yS`iXT*EwG!F+hSZ}H&z(#%#!h?aCtIs6lFOt$`Ne7MRn&Ufo@5oS zCD>+U!!$WZ*2Tqn^1b6Pd$d?~9cIaz_rV1owQ`RRFSoqOU)EPjq=ax zrTGcycNmv7oc<4&{oHkG!}Aw|QUVJW5fWA>WBE#Pf)8e*N$rHBj%HUqY%I*PF=g>dA@s}`XMK9}et#C-g-zs#CHXIBUJAFklX75jOUyNRT zGB5W+C+9K-f4lb8ilx`HWcjJO_m%QZuz+UzS&KS9Z!4PQI9HoM*0Vl|VkX~nO8i;tx=3VLl#JajF1LY9`3kDgqAbtCbi zcxm}t!Z!DHh{pXb1bc(w^ zc`vL8A2hx6oiMw!KA5?%7)GGkS@GD63CUs$1Z=Tq%&VEJ-zCaiW|ei+IvLiRO)oOP zkxnIS(6MUK=zW#FDvWdCyK3amVO{);k!A_%3Z%4J# z@5;sD$Y7-1boBY4k<*(cMhV-TCY*Hm48#F)Y%83I!~D7%-ClfJ-6?~I{fY;^=*B*n z_p~DZwpiD_z=i47LU=XgZh8wdPkOv^;>hbx7>!Pgf$5P2#kPwkw#9{E5a zocAfQv^2!80!Sr$cW1Pj!dY+VUAzi3d*8d&2YTfxN-NzQURsE4HRC&RA0UmucfWNm z3zR%5PaXaTfrtPV3Ir|#yG^X9PzY*${L|nqI7fqnft>JaoH@hVB*YU zhXycM63(hl7UmA-?pY>47WPO~yMJ`P;I(R&;uQTni1Usy3RJQlGbKx1hbWOOTfupF`Gg-`H|zHa@p~ZN*kq z$E>sqd4O<)AY$|qNFrz+80KXaKqceO{l;~dsI`xv!ACX~Lc>kCh@Pz0>jP%nR&7OL z3c0xLV3w}S6S>*}3|>pg&{7xdo>xyin3(cvg+F3YR5|Qk&U#k35jnwij}y4DsCkWJ z?tW!3iq~v?X8Wf!)mt@G7I0@Cp~{-0Tl}3yd00_)&+msl{KI=bBW-*~!muuwL^=zL zfflAr*5vDg>&w4~O`n%N55n$aBxQd(9({FT=Zw~JNL z{@_a+96zI2;KMjO z>01=4KiS^c+B$B(R`{%6w;!=HOj79-CbR8K zL9>rwiI&BJful%nR3O&E+xKA-=Qs8ynS#!v1-l5w@Cmu_^yL7EkB`mAG2Q@~B9^^G z0n7&}oC1U<-h4>{KmtZf2}DMr6?1cd7y^2>b(RnohIKm4VzfpuCu zeps=A7=w6PT$ZI%`0G3YmEalQ*PoF`$Ko?|9bRg0u2!o8>D!PI;oMxKc)XGO{UF(; zLbFf{FVs1hiwd+Y(X$wxIXKT_QcN6>_#&|TF5Id#Ypx z+{Dhn1%Pr4al-!)VW^><&$=(0T0 z`(G&F<$K9?EFwS}f;D17B>)9p^&n;>h^aOlHucFe{-+j2EA0ylh2n_s_r^7cEZ=l! zXEW(sVm_W3WW6J5GQGy0$`5aTI&@p@qP?DA`2NhDQbg`)zQgFh6^4or?k7b)9p1Tx zZu)%6f1Z(|0oIG8fuP@axNW0ibaqO!44qw46~1t)fNdYyAhV5d#gaC*YWR=#Z~NE` z*rHK#F5Lq@E@O+-apjmB(vr^qx~C0tg)^w~F0`Bn_scT{2_pRLgwD?mODQoRi;rK- zh_;F04&oy;6Qb~Syb=&T-NFVb>O-+Q{KE^1oac>%Q!EjB8ZLePaX>$#>GhQlEk45o zga&|$G20~X2Y}Abf5!L98d&J`+TCy5BhkTUCvM=NpHCy93W|2!;v>5d!fol{XSPU5 z&ej`fc~}37x7xI;UD>}i=5UaaJcn4~_|CC67lT;uWzC)nr3}rd2Avf(b3YMme%ZJo zoS_$g?D@e8fJ3VB7yhZURGqiKSTQ$NKkqEt$g-eEav#Hzu-qqA?TaAc66y-!_|x&8 z!+tI;N{PnH8bgEG7KfD(Q8xz4u~hK1JT!uVT=_?cLW)A`#-qT^l+)qU3csE7v1$h|oO*!p z5`jPOZRH4Zhj;Rwo&UhMDJdnUYFNY{%I0@X-yww^`p+0=YqCpG6l2xaW+RBNf0J`h z{}E3uKv%*a9kh?k}sd^1N=Z)dVKnVm)E)X%I7@Br|6*FU(83>)|;35+E3Kg zx_&j;+cDx~L6lN%oB~bzF(XHL5-qG!*c(4#Z$OBtXys-elD0kG@+1W_ULhEhw9kbt zH`|H$YntAqTz&0^r2QdwY}kbNE*x{J(8y10w}aJGEt5=8+{G6z6yh1uUcvY3AsLep z1pX#=(G}JcHO=lpKkx;hFjfltqac5-r0h>gH>PE#s7cTV+?H0_3euyX8`Bkz%>UEg z4^9J0&;&G%@jDGNM{%6E+J!J|x$-h~mkDd^r(w(zn)Ip)_&e^|pE0iEYsx2@8noC? zL(*mA?*uDY} zInENy+KKLNcmWN(^Q^_vhn!Yvk>4b{-DE4o|E&8hr%8i+Q$zVX{$~kFOmqkFSwSyL zexy_C)Xp7t>v3yV;|X}~a~Q8@5G`G8a#$Sv#Jv5`d(d&iZ?{+J%Q_dhYiUum(|N=T7nl4*f^@WpYXt20{mI5D zL(4EWYfDB6`#62p8KcT10cB`v4HOo%r&u9af)K`w*v!YqadBjVkPriogtfokg^(!E za|@E$Xc&TX`G409;myvo1{*{bW%A5?ebH5z7nlBz=HNA9eqZqsJo|!|$hf%8?ovV& za6NL%mvLU=wL#;;xE0KgBXE-z(r7n%+v0>VqURXIQX}MMuRkqFj7BV+F!unV3Lwx3 zwQ+>n!3SF!_^%0UxKhhJRrQpaT4CgtEj>w`1%i|wIQ{B6F1p@{Sre{r8+7?)ZA=m# zb1i~#dvf>1<0zcSs#<4-hVF%ZO=12`j;b2?mUCSqR0muIdDV8zpq(-PA=i>~On|&* zjvB-)h-)UM>NrpgUR?r1Yk;}8O!zoVI^ux>fsA>SZ4+tkS^2|6i#Ago@2Fe(x#*I! zYa9HQevy6Zo(N?BNt?~N@M7T&|fp-na2P2-CGa@A5+pV^hm84kK?6yuS6P4y|*XLkENXXXZoW#(Z_cOq19c5->5QzA3r@ z6MwlNp-}n+l|XD@(@?J%nIy%tMW~{KwSwP`k&}VljNCh$5dreLWsG6z(1uU1=%m&% zB;=RXH$G9ng}8RMB;4c^#4!$wbQMY@^GwEVGEw+tVAm$-tsLQ2xKi|Y<<;2AY^19I z2{Zlr5&Nau_)k>YmMeAkt-Cy@40|!IrC>O%AdiZ$Aebxc%Aj zG_i%mSRSDjc2eSkvq$+=&Oay6e$vIDGdZ=1@m#OEbhDW7p}90JR^b{k(vAShGWmI@ z`vx)mt#C|DU>03qpHae$sA$2=q2ouyMB!NQ>qqy93b1!;EQvq8NQZ$i5XTxld1e*d{@Iqt^Qp>@!A+Fmlhs(Aq>TbB(3ZDUOxC?6d>phw;OwB z9X})B{w%%VEkUe%*D$eEI2bWcmq?#(PFyDKPgg}2P8?6aIZ;4PJRFWwo@Em)q)$@k zST;y|=n?O|-KLN`Uup@7i1im@Vq#4Xq2xcoH;7~ucYnFp0!UMR+l@2sgi;)*syhWp z4(xKsy1SqEFSxsYEy#k--f5O|m1>sbuMew1E8Isi2RYQHnvUhrlq8!x%cCAu;j30E zF%Xo;IHV-E=j%l&IN19sOz+{acgM0=(kCH6N(xv?y;S(ru>sD|D4qi%qRZ5G0YV(J zPYMj0#$WaEq>8cm3N;p*@J47!i{`p-yzyEbwpiu9+bYZa()Kmb>;b|If-pbcDhA>h zJ|WE_%InDSsq3F7qLxR${EHIhTI=*&{TegP&fteT<@}YKN3J=Tk2yYU&r*L{II47(W6*l14^6KPWw9~$`jPFLZq-1$wFxVq&EhjwDRqf5O*m_Bd*WFD7mrCYFmF zLWEp*r!|RedG7A!KnSo20UK#?G`dx??*1d%R>7inohlNU@9n4_#o=R;g136ZR(Re5 zqdW!QELjihVVhn|G*q9popEi@FI!zYAdnH$0djNTsCsI<_uuMa6(EdGw3>!G4t!|k zI`2;!-`Y>a(TVb7=cW#SD~cs9LKTY*PCK_@rZ;fuIhuy`tl$9XJKu3qLSCp4rK~%= zf?S%!lVX(CagUQf!tRXKA;$F?UVu3X;DaL#Y*co@4cP&7NPdt@7?-@X=iXJGU(s?wVj$deWSG?<3{~UYwfr?mr>1XI+K@|eTEj(Nn;didEU%156QR%5b->B7)x55=;Lwc zzsBEzT9+l~H?UREmU?Id5ejD&yl+>SU;tt?gIhi28UhV*kez3`e1Z9%ZkAKDq&-<` zNwP2}Go(nb9EaMGHxNjbXca9EqvX!;zTc2(eG{wc#!-#G@WHM%^-6g7nk4Xw74G?| z+(~O>_x!qIZ)((NxhhSu)sG%ap$-= zWd(6##?M3+%it4v%uh5V?Z>c9rhNMyew&lqxJCkh=S{VPmR9c5Q&mS{5$>5pf_Zq7 zZTKalBDM`Cd!`>q2}3hO4`XReM9h;N^x^~`=TU{!2NeSn0QDkg=Hz@QP2TU#QQ!AS z3)NPKt@QnkkvRhkCmmEIoq%{i8BoS{LN9HDs?dt@rK$jRUawv=qcZa~8^0$K$5C8` z?946U2O=}%r=1NA%`~P=lVhdyW-Ao;{+Nw$Pvs4_ETTrl~F7VC?_4U-2FGkIOa# zO5Ajk6YT9Wuf*CEuCB!sWS;dtK88_=DNMeT#6+?L{+!i6m&07n;qk{i6V=3Z+dukU z`+bzJrD+v9(lsM3gE@5ygtT*3I56f4&1c&*$mH(WBp)CgA_#5#t(@{4;-^~Nehm}^ zXJ$-RM}7AarMmN~TbUlWO=}&Nh2WgFPMhMTK*v=}pQ-#4HE4DckqG9C7Nri%^b#NG zlUt0sUX}~;@o8Y}DhQNH-%@c@kUkf=TMz2hlapw)$cXDn3cl9r(Dki89Psd<6xBKC zaWsD%KT|NH;-J`NMzXGoJ+0ENaM+gaU4rN z>gqlgZLJu-cCU3s-&B8B|IbmROc(uBc=&Ojdr(hc$X&NbOiaRN1pfrZyDY3o0h06I zF(O7P>Fm;On@S~Y4l5st%r?86YJaw(}z!N&< zlPU$Z#2WL#xkTNI-mFTmRPSB44=c_)FHB-CrA_CP)(=G%>3_}^ zC$|SHP|{Za+0?~^ik6c$#78ek)I!T$!oFtB#g2{IPRBh+0k!3Pl4#}B(jUHo>J+Z2 z5W0e!A8{a6ua?^QRQ!iT-SrNF{iuCN*~wk$_h|&?1)G?g9V;O(>oR;7X((7boD`g~ z8z`TcN#^GsiRf5Qi6?>sr?=L|k35up1Wa#34^rPozHmam?>Jezx}4IWtP=fuIqVxjWELl zY6;^0&^$iEObDb~8epUXJ906`O%~!2%F>_35x2PWpl)wk51#-;29ah?75(7{jc3|F zsE9Q%A-X&J#PQji>GHMxdpqml5wyMfIQSr#dPKzbTSW?rOo4PJS*_ZY_G9CI^}rnU z3s^(L_>P87jl~S3vr5oR$!MJ;lv*MKgu$ue@NB<`32)QKjU^W3Ki$}<3*vMq7^rt& zS@Py=Ak%w?m~nVRu|1HVv4=hdRTf`0lpIvl_!fA5!3$;6nB~L z&~(~3nvkazC-d^M8Ev$)!AYE-ykpMHRTlCqJJOJ6_4s{fsYr7xvj=v+f4(%}d=&LO zWGnVhURE2M&Z8AiJvBn6PyziBX5o+6mux*b&!?3ChN}H9842T^?8cHlPW%*b4~`_r zGuz8eNSfB05Bitsq2v_p#0U_BU>pRcnqnFx{Z_=FofV}HCDy{8@JM+Afg4AJleS8) zfrO537^FMm!+6t+Cu`{kKdH;v2%mE17Fz6l`@596Ig^vaD8(00@NKNTrHz57D zjF*_n;%lLG-gU|4o8$YfwU3750{Kan;S!QJp0zjYJZ1kSBS6R!iV6j%iM^KdpaE($ z|4OKx@K*f7^EwtPS2xX;x|;3CL=mDEP@4Xeuhe*)Tfh?p`BuJsj-NNiO_* z>pFlgIedsZ_MJ?2N~p^l@Ko&gwS*T_ItK#1eVBvP83uVU1rV`8El9SIPK^=v#FVw& zt& zq0IP#6&A%LUNi^^3CFR?LEY6J7=vh-V_KEIv#*0-5P+ z+aYZkW4noZk9A3=gG5rY9l&UUEC4y-U-K3=UXm}kEPAuA#Mp^RtU>f}-U-985emn$ zqv~hBA5#m?_}sp%6dSh_m|Hy2Jdesbe|sUcZp)lancp@U)@kYG|5LB4+i8i!bFrcO zo+dD>_-nJ$i!JuZ<__(z z2km^0`>WQZeXJl$XS*FLKcGScH;;LU6o03BpYF&&Cq9WbM@k$fOL0CtINrS~RJ9$y zVqhObuC64ZXeb(4skQtBR>LtA$*-<#m&7DZy@WcK{jXh;PPB?m8Vg@)I{S4^(491} zjF)EZ$lfp%n?#T9h)43-J`RLq&wWiiAROSG=V6fsXr_u!ESX+v5gXxQTd+|h!o?kruqBBS6k}OZ<1=6IJ?CU zt)m2t3|h2ns!7%d(!c2A;PCIhOcExqeuQ76Zk#nva)xW+X0Y+`Q@NuhSDzgBT;WZV zH=XgWthZTM40x!7Kc#8+nSH=qW3tfnYwnw;+6JL46jQ$PcsLxkn{eiMequRNvQcMp zhSKe;&phGL(kEp`RN721b9RMGvjknxhksYlvS`4VMgf{xwl;PAOSa^^1lm#F(Dn#+ zQOzKm6tEfG=l<047W!C45WDzU{)R`cx3Ec&JJ;dgPaMUQeMNES3x0>^E0*ojYW8m$ zZmD%RD*X9)l&216d+YHc?Od!J=1&&1?x`-lA41^>K{$i5L!QgTY0KHK8~nH5YywHO zUA0|ETRm!}#}*b9UH{0dDgtOK-2!mU^p5zj21&TM97Zz+MKhBwW2!z>Q= z&K&hn0;fC<hshE-b36cL3 zPLMLkjJ0G>A{mt@*C77R8CJw|ATP|4?uUM^SJaxNdd(_A?KB=E#GQOe(@g zR!4VtW5Qli)2aYhRJMU#(n$xNImb^;2`*-Tf|BrCVO?5A%mh?--$J$EUs=~$?f7}~-Itcbs%%&P$$=q_80n}R~BVwo-TD?+&_h`tt$Di@~KbXC05Ip zjMw!kwHn6IZP<%hJr&*+!_D)Vtk7anTK|6tF1|Lg6?XCKE$8A_1;P2DWOpp9Z{W9m zt{Z9^du{};72+VUJ?0&VFkM6>da2rADt!*36v8Co?uSya_^F^^MtUo&qXNF1C<{Dp zCj3!I$dE8NxQEC;hghX78XGiRK((NPWBMf|Px6}~fBFKA^8&5x0*6O|c%|Mje^)3v zrjoRGsm}JHy)Iq|5d+7LJ`4sz11hY*C9&h)^<(r?L1l|Fp2mk&m2&ko^m9p#OIl$y z3rVWqHLn+zT$sOZvRUQQ7E0dyeBPe)*1v1%gW;Ox%*W5*ywLoKBgt&GX@+E5_ypO7 z7g(hYG+U>boH-5d>MU_P+)D4Ye1L#DoOVdGiESB>J!|C_zs~zq>b5S?otmyJ`P1yg zU!nazO%`>b-#w0W=tz9unKL22kIJ~zY0F}m*Fbwze&WWQJYU3xUf|LG^2u7ZvQoZ7 zPGXfJ*SvS(R2_ekBeTy{3~#~WS2I>cht|8xgS&Gp{+Zue(XW2nEx9gKvEEdSAjPoI3g;*uw0d&^#7qi9f@j}9OG{V+2Xs?HaijdZzol8|vGI3tCLbEXwm5~mxXuaVW?g3FAM2SOR=HOSG=$`Bpd?9NLm6Awfv9h(%dJ9v^9zQ)J%Ay2wk6PY&73W z)eW|-3&Gu=NWuM8{48Btp^gqeNpG78+7fMXsJ`w|XZ~sN?{TvlKGBdaidhl#VOUV8 zw%g*IfCteWB#1ocuhCqb?0%5K34n@53rGC1i7WoIhM#%337w8Q(9i108q>u*RQ|gZ z8UrDBhvA^@-J}-MVHWmyysI>-q@}uDt#6*g8`QKFJbaa`k9-5EVsx9<^~VHjSp@#R z%3~9g0e{~rj$VpSy!D-s28{6BXUdS0z{51BiVmdC z#*T{n{x)6Cf}-_Fq+s_z;=dQLG#tVVE|sTJMSC*GyT1IKiyJ{ zN+D)P+9w=?U`kQ2J-fb&p~5VogaaOpx~)>&)MZ(W{@g@Cx&U6Iu}Zo3^b-aV7|ZeT zk4Q+&tn^R|I~`0t3Ma-9=YOF2xopAK6<}B z0WbmMzC}PcCn-KQYxOaNgD!3jAqI|6TcSWWgbS?U7&D zlMdc@Tm-Id0pU=)%UQ$r2MDN*l~&YhI?rifo&TXz&{^~P`BE{r@2h%Xh0ezN!=2c| z7y~eX4hG06x`a^|j>NV&YUckIe1_<4h)2_WrQ(&@E|Sv+wR_YGm#dJ#?Nr1onqn?- zU2p{-$60g|4R=C({un*0`tih<)fbeYTcstz2Aah3Y4TlV+huj(Jw z^!q~Y+;iV%n_CDb)M?Hl|D{7R5Ra5}3J|Pp-E;nvzdwH^*0TtTh6FZNUfNw>@8ZLWGg0%k4=mol4CUaTPF&%I=n<<%_njaZ2u?c%SS^fgMF{Vy2-!r$?zHPqt30YBHbs{)DQI)nPbxzmMrTO5Z+Etv^|J_m~>^FHs?!5L(B+&1&i&%F?m}d zRz_5Ef+VA&QjG#EFtmen!m*lTh63Fw63Q0xk=*;rByT$mrF%rl* zb?$C8N&6LP5|pGlTH3H8hH_n62Zm7F^Yhse>7Q+(Q2Q9w??R9l@Ro4GIU7Ph*|}}! zs9JN8n9;bm#x zx;Zj#tUh%KjvP(_Fs2Wvnw#MsQ98t z`BcQ9U=80TSTy@_cSj?~YHiq?JFo801-{d@&#arhe9vWyovWQ>Q>BFMMS~74mz~3m zS`155$*bVSRb>Z4EdR&TSFlCdb#2ofGr%A%Lw9#5-8FPe4vo^O(lB&OcXu~PHz?g8 z-5r7$-{^C{-%q&qvG&^MT4!9(pKS{wM^)qbgVXwrU)ml4mJjcS47UbGipgm-MKvxi z)ToMx*E?{w=M@q_I3!0dtYyPMiV6egeTQ7|i`im~>PR;}JR~njx=t*4dQR1${jGYg zXGFd4+>J;*XztwKW3L1M;eVYG?+M-+)2#cpxgFwfalMb@-(9$qFUZVl?VwPOuA=o# zz@T6-H=>*&au%Vi2#8A_Z5pyET}25QK-kGDY<&9GPyifW34pr<@AP1f4ORRAdbLt1li51_~i{GuHf&kSHW`6$U05OE1zQkqhd3 zNf~yPGamizK$2v}XK8LsjEDfNa>2I*C}t8}^!R*ozQ`F|jgjffUJ5%Mynd=pvrYM8 zovSPFWp?q?|9~H^_shFmY`#RQJE+_(RSQUgP$>bM zgzHi37pBGQdlaYN82s-L@VUb+L+W}JH{rDGb%yuIk4AG^x)xo^+k}bL(mDRneOssu zkOl>Tl*)1uBd_cgzT2ovM_4#O3WY&A%5blt@1z4D|22?i`?&KH8!IaQUFCMEHAeKg za>_KIq^Pd-K{!qSHHGG2%aJ;ZzT?`{NBCkTSc-?A?VX@&O&_X+I3m|OVTQ#!OllPK zNuxwLJ0C+`X07GsQu8l`dv&)QX0si@sg;h=MsZV+GwhAQ%?qDI-QOtFi3puFu!XT4 znwi-Kk%BIVsJ`?(U9ljEwL}^pumCj`4cYVssqCEL^v?VysOG>zs*o4f=*vglmglEx zUC__a$f*jW&}7`%-3D4gb9q-d z4xXzeZDeE@|0@N`DD#mt`@Z$sGp+|5VV!+dr3>G;pxZTwjFW5K>Ww6V#5W;D&L|uN zWiy3(p-(N!g66UBuL_sDtNi4wUuZh1J?TYRtbD6FGy+i^oX(P`;3c26SSEd1-wJ;y z&GtCpH)_(0;J?+=9ue>vPG%9CF#bep!K%jMK5J9GLaul>mY&;;#rRt+lPLGFX=jBC zVCK}siVzWxfq@l8IEw+Y={MWvLrLAy7oxXkQecc~L`Yw%l5w;c^)y_VPG^ZhF9<3O zrNO@^cm(swod9KFnA9-c^ums#=R)CYzNUUa7*<|i=&}{jHp$lD&>MJ1%hU? zwLJB=&$m1nsM@-c^NM+ftXBGt$wn5%3%u2&DGT*#HKWYCa~sUaWw$d-%{RbvrX>Fv z^hqhf)f2bRr>~5hXuZgJ51d6QLw7wn(}Ev^t5wGLS@+k-f_dE6B64oDkDr^PeR1_m z*?s?30vss}`MrUP4Pst!o<725JKVy_9)6WpY(cOgeQyen!nlV61&R3W#aul6aPw6# zd@EFG$5p|TluIe2$$3|QQ&a7Q3p+7Nk^{Q=n(At)^9%AHEotR!VEaYTS?xc)za~|2 zdZ?{EsAyc#*lOk;1Lo13-x|>^(xW?zs#UYqzQjCBFf@Xle`e^^`yCS zoZat!u=tb|`lr0PvukhSj5&9H;pAqGnUk<-u3~8kn%=6l`z1 z|KD}shnd4y3X&^Tj$H7jU}e-=#Ft(jcYo@ott}|{$(tX{D<1lhRLa}9Fav)XMo4b= zQ}F{cuPW_kIWld-w@Cg2>N3Zq-%Ckk7j~N;9oL-(avk(*^{w_6enpPOrTw^0{*7U! zC2rNSaQua8<5PIS$Q*q!>GeCbd0r>5IdVDL?{)A0ktY1Xv zHlY}vqgtfwz(n3;tb;qvNq@ISKaNtfi}`MJ6Mz@zNMWyx3PCivz%Z7XBHB0WZz;eR z@1arFBk&mt&OZDt1rJLb(u#hLMC^hj`mGPyE|1Al5oruSps=Jp>0Uq(rNcf#Zd4)( zwSiJZnWI{aZwTGl$d-xty&oy;ax_z2&rb^&^O8N6>;BYxVmYi_-O^sHpE&i!Lt~@A zRzoJqubyXMngm9&Q=avn?q%`Vk^)_ZZ)1CP*!K^Pa(Vt4r<)s?l{%aAmGeKoxR>jj z(@KKr(e`HK0u@V0ruL)G?_yNyc>Vkhop$xP@Ab>oGL&3ow5iQT>)&E>0i6VJT_WYW zgd#{AcUQ&d!m&l(#vWk9>NO@wuGEKrp)m~ME~*g8i!xZ8n`{-&omSwBqk z3MxgQxGf>YcFhT&~9R*jh z^#(3-J9@+6(n7|KbqYvu%Au08?2VeI2@Y>5lmK2MVhgv1t4D|sNOARZV(1c58(xtG^=_vZ1j}NK z*E@vtEfzXr2ZuLeAz1H{#golFWSAzA2dVZ6>2OYEbanZpy^3P~CQlkLKSaYd07_WI` z>W0IuUZ`BjLHSy1aE{`Mh_qZ2USij7(PZq4aT9*}dMGNmp3~Y8HTCdgNY=H-TJVdi z+OzwJ=_~Iz&(-VpyHT#QQial1r@b+6HB}KTriAkC%IMiz6QBX(fA53hM{{^7z*ae{ zxcV|&X2u1%LM5|W<2B!{O481Mmw^ivEXoP^V=cIjmfZ`YWtzIR_=_Q8p;J{;x_&+y zo-D-W&+V-olT#aoK7z8x%$HR6`bo)(zm4Qn=uE!6XB&pzXgz&!^)_m0nc%(jTgpuV z{7}rq5?FX+B)fQQ%6$6125P+T#rpBf+cCy=@n*H?kNpJz_@WU3D+t3$1SLM;=o?5v zH-#c)hG&0HD9cOk7MeFDC#oVidm(5x6&JaY9o5K8>YGc*%-8+)6Fh04X(XaU-iDQl zW6sO%mYjLWO-d-8p_-i`%WrKbgWI+%pWvj9q4dJ9Um+ z*XhF0sksBJC~uDC7OPecFqrf^oR55WAjvPdWQ)9zPUXZ;6cWqFOQ1x@Y$34{D9UBQ z;0bJN;l)xQf+QA%NdRv=v?SFal3Aq?!w`Sim|g6!+*_UTssRFmAz9=#v^sy9*&2z_ z5GJHNwz7a|Mv7=4s}MmmhyWoeslC(CEEI!2qKeEee?2@? zKBkNZZ&KhaO_)5hGm}hrz8s6s($l9NHFiogzDCGhmKY^fMcPOjsDKl%CI|{1HqARJ zy2mG7l9ACtVR7ayj@}vaL6rfA2#W?4Pl5BR^+$2z)SJC7o-_Jtk@zt~|L)tRDUJN2j|c!}?3 zdQ;lsa?X+3rGyr(z2a#@yl7^_={2UVj5yRWB}4%B7H3?78eR`9oT2W$0d229BXLnD zc!Yy!11sUwGGcb3nUvh&C{nQ_g?EE^X?ndMc`D>TH z7boBSP@5|%*{{KP`h5M_CoQOXTuzhcdLd6~sA%usAt2z5eSBjR0#)4Pba)EJIi~1| zQRAHJQb}`UxPv&Zh8J0_4v)$(fg#48F?YUK7))Z?3K~}iZWsHYZ4C4)9bR5JJCKg zQu)W2A_7SquvI~izaifltD8$+@*7Vnkr$EWTkAjh`oEt~1}S2WVb0$bQ&Dr#EY)Ye zON<($U((qCp-Y_rSgVy-l+CorP@$lgeW7$_h3vJN!M-~QRJNIu*`puDig%!N3auMP7aM5QkeaPOK_m@{(q{SZ*Vg1I^D-p%ggNaE}Xo;7Qi0{o>w1Dj^ydVy2&Z;u*IaW_p z`)FpnTPkR8p>zK|W{MEKr`iwT3$&yzRU!4R!{TXnz8x|zX1|Kikwr-ctsd!h`A91= zvg1L4=Ldh;vrX{Xbf&hqLO<#!H#}E7$*6)@%%rQfctnIWUd-VNHCVdPtLk-Lxh5ii zDQ`>F9T&B6sY_l1A>+IF_unUC+v75>psB--uNGz!pmxUm^CRxMh( zDa~<^#(GkIS&<7d2m~}`^^$EU<9JF=`-Zsczs@NBmxAdJ{94b(b{Flf={i)*KB;7} z>*+p+XdZ-}rY!+R0-%BbG@gFwhPF@qyfSCK3(&l>4YL<`>^!oBDG`WrAu&v~gec8| znPHhY%*bb{Jv=z$z^yZD`!U4&`!U?i0nPl$g!w33rQm7{>UlyN)P^=W;xG8UXYwdQ zKgm{f0W^}!Wg?)mZt8TPALxx`@ zAWfifpN-xUJ-vZ75nB@nI-J>9BUMDFoY}?itCXZRCr|@ilsL@GP)1GSD@~+D3mij} zBNWRZHhL40rM6E8X&fDbu6%nx)13Ifrhsn;U$I3`jV*DUo-L&*GPqdRDA^2tUnkL1 zO7f5uyq14!s{@968Ho&>QU(}_i=`94a_4IXr(+H-fcS?005Tn|it8FGYe|__yr5g| zJ}8QA8?7(BGzxz-8?AYormikj3(fjj7iML3#2sjB@Ar+Yjp2;)fa`uv7${pb*VBEH zStS(5I1<$z$*YBMy_JakEycv4aQ(E*IxOVvS^#Whh6oxQ0kIcu7FoG(I48>|rZ(>JQF zn+bBy{EFA6mt2<~jXn0w&zmAbi>^Gs_*K=9-j1g-*Su2QUX5iIoc5$yOdR#^6yVR< zRD&(P?lUO1lH&m$o~fXFimDk&F~Qp+LI87YCZmjxY@lrcaTl+MK+>gdwnu}9 z(#rhgV!E%|SDS|YIg6@98@4E$bGA*!)f6Km_FbptpIf9K8p)f$X;TRh5mdr+^r`j5 ziSu`%tN6$B+7wEwzgK6M4Ws@x1vqf7jxwL*>X#g@t73b=Vdh`bu@&e*AB!`b>Sk#; z)LHul&pV?;T4ZK~U|7j3&`adEMaXDk6Xgj&VuF_pE#?OhXOOYtG5YnnxZD+yHCJRy z@O1RNu!`iQqQgUC63M%S(Ar&7U(%aZ?8U~C#`Lqf`v)P>xf=zCqmY%!Q@Ek25QJEu z#KvNX1TjeUZ}e7}OAk=6exwh9`)DU+>T!DA!DVpQ?v>Q3wTm*;Z7xXva8q|D#aZs_ z5NQwLD+Q-IE{lE)NNxz&3LpitFxIbEi&u@rH1n=cF-eY=!f_mcfSNIgEHVp)8&Q!u zX|sxTkyLa+gYtrl*ZJ$QJkzAU%OOz1 zE_%t-1v6}Y#|6R^JgG{rU8k2T)@eeR&Z5#R4Ws;u&F>#_6*_0Nt-QD!ZgdV=x;NJa zGj?qzdZ>)(W{V8mXAd84Ge!5&xtYTxcL`TY{09{Ws_t&H5*&TbmLdcaM#@Dun-<1y zQM(PCAWus(KEm|oIw}$&vH&!RK@cTg*!J$T6=7F)IG=K5V=-4lgoST(1AOa_)AE5XnlpbSiDyXAoYYUGBcQL7<}v z82#{y4io{Pq&Mfes}}MslbHQjYB@m9V9>4feiX)%STq+v&wgUw*w z^K9G`d0ncb$?$;=$K6uL>1z7a!IL|PQAM`-(Oo;LzK2XJB;8y=BW%l8=-&&EaY_WpWj+`aJfcssaVy%FUeq}{~Z{4QpU zSqu7fRr1A8k^Ju=90%ZIMw#1046#DOlFKh0R(JfErMlZ!Y<72eOWXNID5yo<|w{rfq(`#N+fAEX~}9)GD2Y%fPvNoU6b%=tYK+F?WJ3 z^#^{>?`(Z!)Xd7%+YvEKnmWL6@ahpB>9K-)nB6>qD$yh)er>=&mnLgG-9Jo@NEDah zF3lCeg8-87zw7XqfeAwy#a!ibfRk}RgT9#9g6R2>q*$OSs>@f>5X_!I1UPPtR#EJo zq$ddRhDp=NoSbm8+`1F_u1|zK=zdsa-t=Tn-}x=uGxNizc`|xYvcY7_YB|H5zY<6M zzQy&>a!OixVoPnSGtDP<-1TAxGGDY4*IGuWmFMK#MajXczxqL261S#8w@CHu!KPAp zCLV>3Nz=$$0s#RHivelpTiWF4{sL(5Y&4>_ZDgnsyBcj192GR~Y-$e41V)Z_O`pGpc-et!-OHnV+X_{<3wYGy?6;6LN(P$6I>2wC~Y=Q)A(4h=13t( zmu@<*XK$}$7r{0u8zB_tBX;y41_kHMfRFhEcZ!|;a#P;OR-T)FWAMsYO?gdLcR`u#;q4#GrTEq0_GllB*mq4|-Nt(v ziq8Kl1)$r%@nI3ZW9v&VV8g7zIPuCkJUFWLLGgrllpxClOKnOe_36&KZr4go9Bghhs*)T}q{uBr8 zz!E#Q!rq8`d!NZs*!M$<(}w;gtDFaasp)91^z**f3kRli*2j$%nCsI-8~0U9_k}&z zFkzj@5S8}Mcrd{3h(Ws`+&5ROzGZpH>=xU}LwJF(kb1NGqmWm+xMPKVmo1@IwQ2@YkJ4%gnzz3%)F`@plFPC#hPKW& z@@Rx-^s|{GKkVNxC3iQzAG;RjNpWbT7=*8!5SzOau zR|D-a1xcnvE;)^`F`rl`3-=UyTfri(=6(CCCyBG*3monyJnCYV_yOj!GtVscHv>Eo zff&ftSWyNIZLH{nW+axHa@;Xk@{ow{W1wXShROO@1ZG4~(^Mb0rOji^SPa?Z|+u|D2=}vtG3-+!3DWzjmmGB(cIuQEICr`V&03Zg`Ql^o^A z^{p~%rm+C)zV);F7e{i1$PS|n0(;S98+vW4M)OCBeF|UUP;h4>+YSC?$%}wr3WT!y zC|Kf-R~e)#Oa;;hqHoEKQI&W7d1pe#R8J?0^1&>l z=O_eMtVqRT(!?h?;fNmBvdRy@#!bMyl^n~7VMmZxgT1|-wVf7h`TYRCJ zBs;3A=FjeG?}JLHcIW%$hNz!Ot5qiY3sy3H|1A29wl2N*a$FKu{q$#&cYd0%D$-vO zDuVm8ro$Eav{=BcpdOw~Qka*kZQE#=X-Zx51pAmg)_Tt|HYw2hVFrMOH~bU zlhaF-_8}S`e(GeF(r}i!a5V9RrFA*?WI&h&1n$W?B`@nESudpzAAV%uJ?e09Y<0@* zpBC$OO}3Vn#?@_X0nS5_IE@{{7b~|o zkIBY!U`*~=Pu8hE&+`hqP`mV0OBxzP00Jra2;v+PPIY|XJ?9-W9VT z$xWxKIkX>C=QD#dKC(s5>130^&R|gL@>VL(G&4RhvUYTdIw*`SrvaIBRuXeZ;XP z@m!1Bx(Yc_CB$9!BD6i2M9Bg~Rn{>-zIwwKU5iD7EFf?c3STtJxH^->tI-8&8@xNI zqFxl|H-ieW@hp9vfHl(HXff#HY@oZEtzm0XTvNZ~n3h7Kqo(bk9%!Yni5qp& zdZ`+H3$Q4U^zB*`?CvwFkeXnMR&-#iy82;aFvXGl?>ZphEd-kXb&9TY!lkY0?KG=) z5Rb#Xs#Z=={92qKQ$2gQCoduoi=iL*x^K3vw?&sqG#WchC?c59kt_hR`~by9I1D$C28`JSG~963!h#ni;@91GXJ zZ>Qw1A>QwA?Ua3tWJ;kV(I2f2ixaaIaodAi9v)usiJxF!iJ zSU8^Cp|gZ@x{>S)CSg!CEM%Y*Qj9E$i!Ctg-*yS^3Ht@JoFsARJF1714{2X(7~KHu zSdtQHT#dz)v8^HWsGXWpW(d|~L0Y5jWcJCw$;4k+K_tO;FN7hjlbn;!oIKFExYv^o zoa_k#DeQtU;iBV60mDKlHs=@1()|O)H>-}{^^+P1tAZhM&C4e}U+SkmeD9dl(n>Qf z8mrN2Of@C~lSt+iJXWfrkG7f?LJd!@vJFg4>_4Ug5D}2cM6QU~u*Z%p88f?6yX&^< z@qgC`jVXu}(#WJr&budr|R0$d=`D^kpawF$fsQw(ANa%kX3d|LcsPaJYTE7q(H))^>~YE$D2*3hP@k zJ?IBEvvk}87X|{t{;^6m1>+A7m@HzuBG}d1>W%Q#&vMx=u%6$5O=O7giF#5?j%sMb zSChve*C^gj1~h_VeDo=XDntTBWNd zk6d~mvuwkfPWa&SxR_9}x2?0#>SIkHeP14rNisy;Pl@87(m#e=fQtxTC{FP!N-4b( z?w5IOFQ>ZT^>FT;Gb137A1jQ^KMz@bv{vlePefUNe*NxX?y@tNR~+3psYA2ayk=!y zXMe!Ih~x6hn)_ux_v+zl$o-^R(dQbs%AWs!2yfss)YweD!+98v5Xsk)T8}N8#Z_%h z0{7trEO;gc{P!>*dnt4nueAtlhFTzaR-*XQ1i3rJ+0Yu`-jvS&;wAgnDW|IFsmRof z7+X`G92T{Wj|Z#Fk)sg@dcnn)oqt+Ooi4}5ZFCDGysCuD-=%xCHmx_t{_??~YoupZ zIWRJjLa0opWJp@c(Xl^u(quLyHNt=NaYN;zMgheOQ{%gP2cY%u-5v2PTanqdLS(hA z=|Z#IW1;i2NA@`MLwNxoY*bUWk(*Mdiox`fz?hw}$(cM^QzWiP$%=BALMVV~C_v2q z+t zimh*5v9(vYg(i?m)`5BEQkyB!zk^4AzenTo+{RAmroE0|3Ijvm&7I9_tdO8I=Q;oM zbVAs}^{Lv3`+@|325!6N25Yzq%}-0YMdO~9+Du=Pc#6(~iaT76-gnU}YW2qp&Q+h?x}G^N zARnR2BdmXY9asSDgHFH{~Nsp34V$B>((Mbt>hS0YN8l0_I~hfG+*1(wD4xTg#5 z3fYqj?ZX=_k=Icf7xIxIOkwT}Rtlp@O`O|KXXhn|7seY01`%R1JqDRYPeS{~2^8}Z zb@67f$`lxNdX+Htq&4T&`&r`y0wWP3v+{tnv*@>2)rLP}%AiEOswt!-3N%ehkidja zVct_5VBtVT6rrUQ{(uA#!wuJAV_GQ=$*88rG#ir*j*N09$xb6TQ4T?0EFK260?-{5 zV=#(30wd=>FF_Kx&@U>pB7N~M%Ng#1>4P)$aB}*L>#RMD#5~lK=d*|TfLNz zBfzrflTWe*cC{6i_j=(&qOW`M;DB-DmUowUUMNKy!i_V6qZw+@R3gx^s5@WRznaY= zz|5PDETB=C%PD@&!Bf5Y;=%eU`!dlq}TOs#%R>xfAiWGvNbYEQ<FD>m7xzVh}?0_D_vo8x!AriP}8CLpg%C!2oaEH? z$No?Fd|IL>R9H$zx4-I9un@g*0_us-WVnh^=o4qqkWuhg^H+V%kvqv24IrDhXY5#w zD_%ySuZqK0fr1O~T>Qb=qTd3WUIz*jZD3!RPI-f!9Tftbb0% z?U-2~Z(jqM-Zk(ejP^BcPGmrkjQcv#Y=a_5Wd}ExYmvSg^BD!fC4)GFK03&WsDq!UGh9U;zQJ4zHVhRx%%;5#5SfCI^pbbz;N=8

fM&_x9a3$>+gRNdoYS~!$b_HDtnwI{(8f{(WFb+u)4hUT!-zWU;U&I^7!>z+;jy96hX zaB|(DFX|+ZF`8KaW~cys*!#Z>jN&P`BO5$oWnp2xRlO@+mb=#0W*+9Q+LzY6v^lFG zfnesCTJ#b{x+ULH0JNha$8#62Jnd}J__}zYzGBHH&FyLr)6R2wI>7|PDT)5lv!(lH zN`4cV`^UffOS#=^oc4XGmg3?IqebKCO%wn1kL(?1rH6STeB(Grs{5Nn&gqJFGVC)U zijucP+VYD{dCfUns|A>d2q-~4NC_(DIn1(r@)d!cUvN^DojCML-I?>s@9`X8= z%&wB1^Emtz)~J8U1KDt2a#Xye+^`WH`EXvdYNFfRJngVnl0MYu*yB^3CS_`d&$k1K z(@VCSJ7)F@W`*k%%>IUTa!1*~iO0adt?@dY^q@;CXVTpLYo&eKjIP2FA}3dbH7yW` z0RTbf6g5&~cgx=8*@Mebz$HZ50*lVYT_so7-(cbw4u{Zl2D#yTEw!l}E$Qi9r>0fT z%(q0{nUNn37uDoj93sbT$A`b;y1D)+bxz*Seo0Z9mEjvN*mS$=EJ7jUG@x8*vC?qL z>+kFZ|942wTh`x;aMB}hv^}~=>Csn_hFDWTVcd14$W5(6sgtjLF?!rc?^UL=n|X%# zTcMhh*J>Wj4Rf=XdkNj9V)YJ9~DJ!V9hCe*&$m%Bw(Qf4j2l4y%Q?wG^Ss4QPv|C5K%q z?=!gP_tQiD`Qt-wSjM{tv{e^A9555DK$REey*8$#gzFDICRQmvNy=wmu)a#1n-9&^ z>Mk$|nIbv+m*otXDQv@$Gn|51hpU_)NEB`v?t*+o=k057WQleUjkyBI@lwKQ!SG^m zMw6JA7vVvINh-gtX?!`<15F)&Beu-gluL zE}I}8Sdp%1d1xp_!fM8)Vb#&mabxD?E3XF8)p!|9H2!hUlKs*GOfyT{{$Ta!esMUN zRKBz%Q8x3(Z-$N_Aea_cQ!2USM^^hMmiqqK*gmlWB1?Ddse|;oYu6l()kC+}wfx@K zH&aVC1F^2J*(T;oarQPh-?AIs=V$)9aCM2-vM1T^VD^0*C!V!v(^_3x)Do=ls!&cu z2m-!GQ=$BO9pFd-273d=84Fy4Gm--&k_Jp0nMU}oPGgJD=so12%@cS%Pze;Qk@zdX z&9d4YOpiA^8l!Pt?5%FPJ~0AYMW$_A79H2A5+#aUY4bwo=`dT0dKqKLx!nu$ZBFL7~O#3DmTkSij zFTaT1nQSG>3_!pLLZ~|x96t$?vO5;1I5V@ZF8P+U8imPxHEP2g%KVZ>++V<)9n|`wH?{~(e1^kLn>?L zW0=$m$5j|&OAZ`Bu4FxN6|nwAVo^lZEYZ$hvk-E^l5k=`%@ouJWB>Y`I2sg4{*p&f zxP$wSgLcGhn@HsbO2HaJz?_RhilE_>;zh6%9-~4N$1IXcrr}Ng4wARC@8$$sh;TEL zHH@!=FZ*ezu_f!2Y+99b3LXGhRIK_+7jz1l1dbx zQrkAF|F1LR-M@z;1v}U=94Wxxhp;k7J3m?8aav4p_>{qYO^{+`7?cNqgepUdO#=eV z=(T~_zGUt<2^XB6KiD`}-xoG)Df<4#3TMIcsg7V;FE6BAbMMY-bDws44WV3ku`M#r z4SbQA-viq$pU<1{xyw3{VYJhO*Uz#5OL=VJD~K8kp*r)(BIC`OcIflrs= zaSH!TVXAQUAq@(9fFAz7SbL zO-nr*PN}AS#yDK!9%2;%`G(W4q7dwUQzBm5?Ah3?a= zwpdRWz&0_t_GPzA*z_QVQ7i)qbjt0SI(#u$1meQwi_q7WoV;dsO?+@(x|h_5Ii&l)5LK8fqg4pGB-x%eti`c*$E(%+sq7z>^6M+^46u9(}k*%MG6T4Baa2x zbIph1hbu-jfY^uI*l2v;?!9-uqeI?pJu`()c~CCAP$_a>L49}cH7;woCJag(GVr<2 zAa}MW%Qg8jI}?Z5+1=^Tqf+^_F0J(*-0)~;3rV+DojSFyE%80n>>l%9`|o`)fNNXf zGt>rGl{dU8WZqu>wmPM?Hcv~~f3~e&fIT0KG0jH3BT}GdK+9j=(Xi$(i8Wfb!KUHj z+L9GIKr)xs>mv$SC57l0VY(JY3)LACQVNp|ie8*-{yycb<+b!0dB^bu&&~J#K~S&F zQ0KLlo`3%~bI)7h^}IuBo5s6RgD>TDcVm6Wo6n9X{>-=R#|@hfi5n{Y0L=JX<#*=G zY>E+W3F!-|B*I0a6ideRRVI8-8t%BtE=yEJ$~-yFCM`QmL-p65seDu89@riZwY2`0 zD>JViR%yuW{|vg;l^!>UAG~;;Q5#?NONZ^R-?1!VVlLeoPI^H~CjWIt1ibgbe@kKP z4DO+yBmw3GB1JGLKYsK!`Qe_ORaw$rvZjeZSB9)HtQ+s4MDUS_@tw~we$4 zGcT{84;76Sa7bby)G;sl?fO`Fbu?A0ZheNusGT|4u|SY4(%e$C%(FxR#xC?6VfGHl z5)DF}=gQB*jpk`+lGDgHE$`Eb=f!eK@&pAD69;)X0!H20OLznPMeE^47%YU*W}@Bn zh_*T)`fsl+cfe6lY>=x>YBx!YN;Fv!f-(m~v^o%j$bU)>9kG4B>W_Yn&9+LIw3G*n zZl4Wpl*t=@h6n`~K0RNYsVqpceJUazX0i=lzCLRx013yXto8q%hbZeXoG*R*wT|t9 zX)}(7Xn-Q;38XYiUM04jG;OjiO$m6qNLTJBLNI}9%=dz;AWZ2=SEqf{q!Iq;Cc#JH zRTgE(Kb^;w<9UPY$%8*xekNA9t8vSz4>i=xvLQX42cp+c@;uozGh8yvgUX zuV2=5?aLn4ynof&S;kV5-Sh;X>HkRH+srmooY(J=-qihX#fE@)53>x9fFf?x{mpVF z-N-cjE(V6$O_n+?hZx`6Ji97Tk7Mdr8}npKc;D04 z?0fd#?QNr|epLT3(_a3TVCkNO`T4?kB1cUCYCq#Nwmem`kybUfWk*u+V2@(aG~s9M zlNfg}d-X%f@zP`A0k?d0ndUq3LGv*t#7bRdQJC<85GjE8(bJronqW{j{*;*RT3jA{ z%=fF{i{tRLW#4`GvC_*b?6K)+#dKZU1S?BZH*Yl{Km~X6Gozt zIShEl(ot{sGPbmOEX0F3#64?cq2yUS{$8z@h+>L67FdQzDHxe0q+OtKjWdMX7ldQ0 z@ZpSbW0fP(g+py4q-YWqaaA=SK{TLU@&(VP!AGrx8Oyw^d?D_^Gm9_gR(JV%1Fc+x z3+Na)mO8rLZGkJH1|d^f67?q3?}XDA7~?vyM?921dt*FVpG-P&r28wbQLmVpp*`)|&UKBMt#xX|V{krs$Q74J>t}hM zLBa8nNYN+NjQe-lr z!;`2iZ852ad-$r4(jU$QcuIr87$nZ(8%8g@%}zMl$xd5Iic6_ABxVL%b!0yQsi`-- z`dU=t+8=g*R<}jjuRcabPiK1Sls8!CuaSIyYw$^@bh`L$XSb@b*L1SB)AsXh)||^z z_%NtiGt1%lm_YaV4sEn5ifx>!{YSOkQgybZuJnaXtR}|ui3|b1L3)uwRt(*C7+-Hf zXyK|{pnb1S;VZ6fVBZcVSwu)oeK=L{Y0Gp3%L+{9SfsTJu7{$O5lLASD&erst2S9* z(GlPo{^LPW4U*$JCGz0FRUFcdVi^|6sZo_?r)z}=&HSCF@!&Exn-E*X12|l2O#`s% z=&ES%<`>1JX!!ixYD}8AQ?zJ2BZ=){(!SE?ark1yD{11X$r;q%q~(!ISjzvQ-6}@Y@S)4Wr!#DAkYS1M zgX|tFgvX&k}LbCcZbhV*5PpL!$jX!-C5mrUOTD1 z#{5_9UP{@SMIwBRcjGjSzh@CKEcOCYb9r=WiI58>7L#8lHxcA6dPrOKV>~Gp#c`{{ zN@AEUqGX5jZXv2Qw}6?X*e{KYFEcsUE3yk44Q*>o_~pkJQ!|1! z4Y|oo_ScHy=C$OUXg1G%O>@ugW<8&aTlaWKJhg_{IR7lnBeGEAVBMxYw6FRw5?gSy z@Z+*}IOyL#F4tH*UFrfvMOvm&3bDmntwcasQsgrWUkNG-Sjc)3dAsR+FCLoRC451( zs)cQOsWKt68+>H}VIouCwK-uI9x%vR))FyjNPA&bTWINQQOk9Y9GQA=%kX8q+89*^(bm*7 z$zt15*GA5!4!z=a+ot7U_HwJ^a^%!xs~d+?sQ}HhvB$vWZS3S06%Uy7(Qk7cNS3W8 z+Tq(dK)Cc)hagb_M~+@LyX96Op`A&%X8iMV_rr9$($CJecp#9eS%Y-UsJGXaEw-?& z32@Lnj1g*)SNcvyjvsB<14aqY1QgqwrFkp8ccF?AOUiLjSk8~yhD~RV0?LydB~loS z#+mvtR^{c1qAe9q3$z39V$o{@ba~TUu}J=RAMlyqn*UY(uW`ez4;gLmP2YimQx%jV zdxuGvXRrtb>%&w%Uf^F#3gd1!z!jr|9x$bCH|(fVqw>ZksnIAq(x)fsM+K{AdBbzp z){0ekd_yHc_iDs)n}a(oxKm8vZR+aeyr0~h)|#JmuO z%XaRF{1}zRq?5duIiLQMji2zlxq?c}x{n%Au1lAm({MDdsXLczNp>!8;Pt z;XxtDfM5W<*NW;)wh9o#mr`vep76gzXpXX(H0wj0sXcpqzyS(P(!^5Aw|2_DaA7I# zkMD1cj4#usCg4U5tRS9+kc7m9Duoop*MJQ_Mu2pd4Nc|3X)Ye%K>i$tvZ9zySyh(DdR>+cz3#Rq;btsf&=1Lc$2Z(&9kSV6S4xjvF-yLn8Kx$!VdxF`Uu! z`((%HI{ax%z~_7ceRef+#9z?=%n}SlGir4x*olUftiFD)tSzfLIO6!)?OATx$!`&w znT!4B`&3J!0D8RDr`VN{r-=N&hX5D&Qij9r6xC_QG^>wL2LKn>(13ZWn?Zx!Mtje*#vzb?a2bl;z zN-8rT#7Po35 z_9ZW&{rDQcraiPs^Z1`}`mapE&l(=a2K!dW2A`&ZV)U5u43L9J&*VwJd(p+vU32lp zgI;=zpwZTbh#(~RKbbTULVeW$txiEC52JM<^m<rofvTf ze(*fi@zV`)o~DtjBRly19H=URs8L*12E^d40er*zcD<-1@UtpFJS(v%WMH^#jFz^;X4(CIkd45*PiGV~k1mg{JD)FdQVCK7$>8qP_ zr6lp|(8N+&W7{j|Z+fuMA8dX!MMm?pmbaEeEd(kNnxP78?+A3g(BW>M<{%KEIozdC zbT_$3OK%zB5!4d7BWM4InYdl;;TU;o2uON{q|6=ao_X+(>^~pONWB{@y^$hS zC+|x>p8ZT&c{cc3iot$SYOC+rlKo#$0H&?JK)LiG_JF6(?FKnMUWd@e86sk<-fPDc zs=^v>GQ;$TGoYbSq$21TZxBzyDjl?9Fk3ytZdGNLjcv)}2|HyCcx)>}^+J7CnpaFH zL~S#7>-BVQ*_TzQ(`$s| zJn%oJD-xakz}3Z<9%W(B(09b#PiGFwD8PJ#R~&uK5}Azc;)sVq%{~{VK$#omrh$oT zU!tWI>d31OxHNLkdGhM;wBR-VcLrNy*9| z<-(D?Xb^H~3T#>2q=f>30Wh_U0;ZewUUj1%t#{ay-vqHsn_;4T4z7B>S8xYx z5g|(JQ%4(%Oh{$QZB8wC_1uP@HdEQhP*5b~JK4ZMf?nY~<`~MMVZzF=Yt_w#;yL+c z4TwhzEixjNARmN;ez6JSM-``}ph|f5UMZ0|-gqP)AQb(6`>l?+sJ`p{7_!J@kOV96 z5bGCQjxDzJ3;F!z1bq>$k({86l@4~EQ%L>!K=IHosfjdg$O|U3FMfnmo3WPQ;Kb~k zRiCr7Q~z_Gf1k0hU}Ncj$Vhk|3ve~8(Y70%J8u$VT3oh7=peD`ml^p1KDvddhbTKb zdJ5Kgj91LcQWU?k4 zs%?A|%1)ZB4G(AAO2{D{izc-m<&-9#+j|F{-m0g7O9mGq!KS3 zV8>=m9h4CS!Ck;sn0hZ}7;YO5FCo3HHCy~OV>_yOHPK2*8)h&?OI1nd z(ys{+yJqmDu37!KS}pW`D+P~MBug+N48rID0Vz_iY3C1RjXJeIF&p>jE}6(+-;Xy1NWvDy(_G|EJm*x z4g`yaePnGHR{nDpfXbN*@K}i$!`Wn(Tk+tB*`x^9MWkg-lA4E6_4Cg778SDS<9*h;Ks;8B59>A8zT3T!j$BrmtiZw4W@@=!;2O`O&D^*TABb7SqFuIxv)9h$yX z@d-J>4G%iI_q4yo?F?tWsmLL3?kFoK7C1*M$~E_q<@mfNBITs^<72jWhIte&Li^`j zU#YX~*fu-2sXJ_+i=EfI5!=Pk)tD7YF(#X*M zWqcW#|B$gS)(Q^1htB}D72xvepxWtJeA1|6@vv--M#-OqMS0N!yjE=lTXuSagO${V zWTgt`a51Ken&;cS5ys#CT~y}$Un~Skuf4I`rk?R$Rp&G}z0ToAK-hYQyaxEoOg@n}0#y9vi$_UI6A3k&57%EV#@D(d~col0yIHKtYON}wGYOK+uaIsMT z-2|6-n=!z}_?ufT%t1K=J-JXj2DOiagwERRq|Ek5J5 z`cwFiPKJu(w$WFbGU05wFo;p*kh5JO{$_-vhy$5b!P45M4h16z2b&*Tm4G5cfi+z@ zs3uL6%Ev&zrb6aGQksIak&8#5YJ5s~a!zXIu0a{Nb60`F^S=lR)e*wwS%BMg2+d!Lla=u;(2BTD#p!VoQEz!=>r^= ze9kb|yfa-G*46#vCn=g{=Q(Y3tHkb^$N<6@l?4TlS9ZFwdZw&;vcCCp-yUy}r?dLV z=572KzqpP2aa=;lvh-9aielZzR;JH((Q>WJXPCF^HQvs2E{dPUMM4`-PyhVdt<*Ex zh7LqZ2QkJQ{D%L5hT}Tr6;xW;!a5{2G!hpLGl?aGB$h8le;tY(3T;E-1D4a{ zu{Kfo%l*I#2KYa8HOb@IwrC15VL?Tl!?CU8I&HEHWFYidWb9}u64~L)1$G9G)upRX zMeZW2{<#Sr?=xbnJ8e5{?A*7H-}4lKJl71r{3yLBV|pb3#*=@kh@d3;is$j6TLZooZsmT-5cPqCx)m~>>Vg@ z6BMKBD!UX?xRvrsoo2{3m@~*uN#vP{@HnksL8tNklAe)Ri&;nCTzf%Ih2?IK{1M7R!i{ zD#Ie$$ZHQ_1*&jd0}zOl9gQcNmlG6@yi~&^tAEKr5!0&D#s>#I-=8%#!Q6?;`xMk5sMuef=Z!? zu>D!!yQyt2Lvpd3$=S0L#?)6eL?oZHye12Ein|fT49RZ;jDMi0xuEj@fdcQJ_pmrV z!^7ze_%7ue3zEmKlw3b6QM9?&M9qAkb;{C*fnenN2vb?&Fqm7XEJso&(>0v!CvT6I zuKIjeZWKFg@7q+3m|pC|xw*a}dHJ)8?s2)11Hd$B?Nn-E>&j?tZD!%T;>2~M?g#6M ziH~Hf`Ibi3Y?3DaTOvD_3_BZ^Hw>-_ZdhIR1Y41N<0J3i7GmnogeYHGG-3)9Q*hYs zr7T=A=uFa;gM)x>fIk%4FVd|#)eqaCM3x)+Wevm_H zTbCqtvd?KL0sFy{)XIq{9%S4e{_@gv^|VGm<_nvsgP#?$fKU`5G=>nK05xNsZRj;G zXXgzvgieyFE-ar%7B2#8z%q%^2!rUT5%^E7d`y+@#33*69+EX}wDJfpEGXf$H6SY| zTMu@fjpgjsD?L;}Fnn2XHQPqEOVq=cbols=J^5_cgT#3ctC~-$iPj38YB(=?UOuh= zWuc2ONz^Rh`qmP9YjL zZo+5-ro$_XOA=GP&ip1?=hr_wrnvOyu^aAqYv<}sq^i-BI*%ra4H!PrZfl(!ffwI8vlJO?a5PwZ;LGvb5?it zZ|Ddna#Dj2%izn{3U#=LQqp7TIrA`dd>7S)B{7&Mjs^l>Ts#(&BI5G3$Ap+nl&6rk z(c&kb_aG`2V+Y(gW?1N52J{nqx0=z^CJdU22*nZle^>94cnhGB4E@aGG?#_%k8*}t zm_+3X*qM4sN2ckZNu!miH=>|ftrjX8XKd_noyGAi?~b^-mdnnd8+{V%VX4rLiRxE5 zxv$T+?cnz74Trxbf}<)rD!=P#uQj^ldTE#6?bF;>d64BzXL(cDoUG{U5i@zHW+q+z z05ATo;(Skd(dF;h3b%XR(q2$po~)#}o2U$y1`a}6m3SZbiPt%`Yca)L&)nY@ClPv$u^!va( zCq)C9tT^62T81*Lto#Y3_33-e7jH>MPdb{+|A4}0ATAB?nJKr71@b>c!wDRI1$VGB zPP`a28xGaaa8z%pGg|QgD#raEC%;?^iDI$5RN;-N=7f7|)pEFS$tJXpBlM>9i72op z1&96?h5CU_BX&1pWvvF<1Vj7^Nt?CRurgfCOH*?!6UHU@d+@FF!fSbRwCx<@nWAdD zAL)~>5UK@0*y_f}?R~=J+h&{5(Rf#0M(aUffCPq|lz#8KUj$KZ_$ZUOfU}fBu8Zcn zqOtkELQ+FHF57OWnfp0$_o7Che}AoGx$_~gw^wst+>AeagSg(}Eb4G`b*)U7vYpKR zS*_CGqtbkKXKwZBr6y~i#PvcZX^;b#J?&qc%99YlUF7eu^#`z)y+O`LRXJ#0m@~bk z*3HsPPe@BFN5c8&=y3H+8A;>lLW@656fdBl5FMF>SR8*jQ_~nlOZ3f8LQfeG7cX!U zvBV|A;vT^}b(U8rKFvbe9$1%@qGKtZZz+dsX9aAFa zj9>`~pqP*jD1;OFBZQ+=ln)%{(pId^6Sg3g1R=|iC(0+z9w~24q&GmtT_#d{?Wl6z z0?ph?vVyombxgtO;m_IKi>KBdhmVi@T3q?u5GntxBs-T|r|0Rab!B-f05ol?62{!w zoJAKB$b`Md-rRs#qL9eAuNP(sJ76gRluIDO&`2x$V!QEEV59)h6l&R$%gcN`+R8g6 z>L&t_y)DAsOVTiqUG>rjACRMx5$tCEzR9s-E3oEi)~C@rRRx;>9B`*TVwLCqxdt&+r-5 zi*&Eq+2UER{H~B`1wxh;x|xXoL@>eH)4-Jkp0XEN4xq)vS41zPig%w$>D--r zt2h`Y29LyWs-E^_7O*Z?ds*{pNG@vOLc}$?HJ_^@4;eVXHo#v;QN~_Ra2H`BRbJKE z+WoAJBsro;o-8&-?#N5dr6Q${lMxRdEe4nHrlep(q_{Mu}KxotKSo>9lVKR2Ve5u zWnPYoPag;0tQ0mhJhwa2-vxz8r-I0z<0n`XkEYF$IjN+!9hG9qq}N7Jm9B=ceAt`f zcrcXxFscA%`mmczN6^RON5;I1t!h9YW~-HOJ`x$@!!ljZEox0`#tDnO=cm}!M$50$ z+OgO5k7YuUMP^Fm`(Tw?@9Y~l9A3YZ`J>A`4PJkj{t zSa)c?;K#bA(v0co8OL;$C}9#jd3u`k1ixdX+IstBZ`(^nUgn;k@h$;@KOEI}783o| z)X%pZBvu30GVCpDUn$8A2*(GFF2xmkecka%@KIn0vWj?u*rcM+kn$84OJaEzm=5`w zktw|41J54MUr_Nc`VSO-06t`m12TtP&Y}?s^KZ=_(#D3eiAW~eSHdu*cjx>}L@9{q zsp)pD6Bkk$<#TQ#G12Qn{rm%@ufJKAFS}Zs=6+d9G5@tSbIQ(lAAE7$r1$e_i@wg; z79Hu)E=gPY(&lLa{}!nTYT{X@U#x+hlXN`Y>-&?w1sIo*gRt8@Byseo4qrPr(V)ru zZqvSguQzM{!;Wj}As}fzEa{J6ba_jf&X1qc=ekw%r_9w03=gWLhb7ir$F4qQEai!< zx1RNCuRdc0KNX8Kl=)T7B)o!h9H}0(5=A0orh-fa@%l91TxG4DNXYMRiu(C3U|AQ& zX1*>N+}xGW+?)K{K7g| zT<*!V-4-5&q*yXlgnfKW*o2;jL;toW1drS#j(@18IUJghyVlDysKCG|c>8Ff@$)A2 z5|5fz#?Rz=c(|Zw-g6!+_Dmc-HR($kT+kX)RhNAr)bJEKgg?Pf26?!UOOjmtR#QE^6G4jjzHLuT zj14K?Pm|0)b@_7$ry!#0SSvf=CY*9}ii|+17Pd_YW?I(^<~PL6RkCFRE(ubiY#|uL z&E=1IVNJqm{!0+Ppx5=It*=9e(Bl9VSGI z@P9s5WQt}Oj@Z`*wNKeU%(@VJ-UaS?+D{%eiznXP&ei4dHp+0ixCq$xwG8XDr@({oAuk(!u#+~JHs=(z9(ol4XG1ho{`Ef zQ!S>FT8|nZV>-unK8Rdux+ap(bI^LTd&v|Cn$3_*SFlWU0IyoZneUg_Ow^4N>f~Kk zW%lFBlE#0~$^U=k90<%AEn`17IEzLjiS?wHy6Ioq(=>0U9_NT`X~qh4WZJ@r(EzJ| zLOK_f(gch)T(OW)5)X!z7>ci`Ir$wD*@E~9?MO}|a~v&CdD}xr?KO;4UR)a=E4po` z+l;BY;$|hD%C=;(`rj5#q_CMo+HgT3WGdZfW(f(Z+*q**Zw{~GtV3UftqNgU3LQ3L zeyWujY<@&DFArAL@70`1G5Zxl-us-}@!z2Fo@b{=Og(L8pVy{-Td%n0o_2Ab!&HcE1Md45eBU~7*I zNc-y7WCY~=eGkAk?oT^CGQI|E;{f+5&Ep043gK8eVrPD`F%4Q$(>7@+jIiyEcDJ7` ztuWPGk?cio9X1;=aV|cLpB4&(cHhk1kcqTlFz{x8c9F$X7mk?0QKZJT@fB#$0V=dy zf*7q(B@9EthyLlcLK*+Oyk1PiK3lY~id>R0uC#m@bxulBtnwPqr0 z_=SJx`ZgQ*EfJl9s4zV-4pG!!bYE8FEn=9J5MzAZ&>a5m;`L}{Db+wb6PHrtbD5Ez zc@(=R6P0@~hfFh)VN6sRF&V+{XO&vZ+Cds_j~}X5@=+xc6}aYf(uXb#{_Lu4Mqf@h zcDMh(Lm=z|Se-!h#o;qxLl0$hlbJ`xteJ`DX+$w-ML<4LJ`6xWA)mE=U=hwddK44z zY6-UTU_h7djTg2E)76xqF!{KlFMPhOtCr>2Jn#HaZhQ5V%yV(+;OccLcUOJ)QG1iN zm}|r3aduPzasU!mRo&nmnG)f{9Os_~G1#=tB(Ii)irnzUF3ak8sK(E{TZyM^9l86A zg%>490zv~x6O$GT${4(o8}?_?&`HI38BKpY~kZ8=Qq4vvtd zBQ4jPvLcD)=iQTzlUt#1dW5O9qU}NN!}G&~O;?#yfm{owCa((WpURlZrN?LEm*7|Y zA2Jfj1OtsE{Ev~GImdU3l&OjyNsZh4$pPSgjr>jCA z_xNy23llR!ks`F01x^wc-wRS9HN?s*HQ-!{wZUtI?q!~&E^!)d}uZ7p<^WADQ0W264BC8=5`tjY_TFypy(8on^VL$ z!%_wrM9Rv(;;d5HcH(SUMRDDq?<%Z#?PcSt^(X`)bVn`~tuEOUKA})VBz{`33 z3!tI@mh=7WWbjVoQkU1rf*p0SRoE3hb*d)~V%$#%$nrZPDGYRDD-QEfO*on%qdrq6 zkYUg&G1(7)B!_7=moC*|rtHP08~ky^(kk2KBh!uBdScAr+x|yM2mDm2q)moGBs38T zH4TyjFduXu2b zw`QxH!?ApE#8Z*@){}wZ7$an7nrVq;%RKa~w9$q{Hr4MECj9>#0>D_Q(6yfe;-QXt z&MxnuRGbX{7RjYqjJdEe@nRe5hb1jgj1BCU3auRKPO&7WTs5hkTRVcvPmvanCFWSeWa?sRKeAkgZ(@qPve@ced&M<}?Y*Et4M|6?$dSQ$j*OrO_q=w+0Yd zumf%?nCHP{vwhgW8`rY5dP?x z_>McpwwEG`*sC{3q6C)yaORAEmsK%CKx6dD(sdMQ5yX)Q=ziE&#{qvKme}0W$rxf9 zjz+Yo%cw_Q6DYa)EtLW;v15}(5uxYiX^7aM>raZh-z6X?Ki<41D2BPmc*wlsjgo$~^;K5OD0`j@9|FBKI z^g==C_jLF7>5q9Pg0rS4;8w1fOiZknD#!iimx2yb?Op#HITJC3TiF9v&U^KLkg-Is zSFxx+{Y9)m(2p3Vrj3`SS01JhfM!#APhDL<92Mi?6IlLKAG6Loypd6=Q&C)Yg_I)& ztycg$Nw9UFOh*;^Iq)T!IiEvl%8l8HgNDgGR6Ax>X<^e;D`15Ger+i2&Ifpt^AHKT*0T*`Nn{=xCzTH_#)G6>B9Gky}?nD?KqQ0wa# zE#$q+Jy9SoZS{WY4TrFPNq9pbro36gqQIvXZv{Ejw_5r8>TAEp$hn4I<6I(g$Ee?;U9K$BhjjFF6B)_b$&d zc#ivAcjUXlbXwegqilOwJ~}L71P4bbhY`YVT3sMPhI0E0aJC}Yll5vxu=9(-=fal zlG7H>oRX`azrv@3_$<#_AAVb4VlpuPNtx(r>oD{3E;~Yigl<^1jMny5G;d^?iX>MH zanwrh8^o*)1uoP_zs%P29=|(pR7gWPNav+{yJRR2eG)|RnTOj=QEZ^*>Y~_U2baPW z*+`FgRaIrYUTG9(?O5=eu>%R~V0*_>D^`Swvx(M!ppXN+hhEF^PdvaLDp%BM;SlOm zZl&&@`Soq@h-$S4-cMsAM(L1hLiA7N*}R`gS3IgMCWHq{w5s6Ia%nMIU-3gbyxfoR zc%)Z9UafNW)B5>LcpN2CTEoWH-#7vods?GIf zGVx}#2^<~Fm}>-l~@P}3;zYCe$t`$ zpa8y2PDIL*YPv1cBX8b}W*I-nl9CK}!dO;eUy|K#*sLBi`LVcVr3r{NY;1i#mdf0) zSo>*`AnYucAp=Co6T6(^YD*z;RT{eedD;HxzrP2-Qz8~%Igf|#J*(>kLb5(gC3sVk zNz-9si&{q1u}YWbWf{_g=-K5Fq_?tMiqTx1WqTK|H9?I4kN~EUOO=A-`Z687?s(Q;2C*JJ1s`NEOT7giIwezdI&wCSWey zwZ&FH=eEf&eJ0E{>FPMAAX+)GbX9%(MDO{s-hH}za?RS>>BnssgDHLc=-9F8sG8CH zdT85oL5{rb<#?Yy_B9e2Fo+W~q~A*r?E@$SzBpw-&AH|H z>p{Wg9RB*vx>YuK07Ey*xl2Bo$V@oJU}N>sRz&5PRcJ(#Itx4?qwP|y#V!1yorZW_ z?IIt%Ce|EoX=MzeaNSjs0lC{P=#OGhoI>%x6y8m7*ZAu~fE()~6kG!ew+q0jf;A_8WNe!hRZG1AO#y zNKi74*2aie;nj$prd2Xg>MdzaZCg?L=J5!5U1=rjwddLoBVT$Myv5Cy1l`UQtXI{K`vaT2A{8dH<4sil za;|c}?WOC?<&5#ytEXP;XY zzVmt(q&V^}RBdhe%iwQ}CO>u|Q08!mef{`;^yq1P^X)d{+V?&fp5u!bUZF1(`ns_T(@p}{J`bg9 zpw=z#XeKN^K5cn%;!Fuvx~dX5Us0}%PTP*1!1vZZ&6@m{ckC$su)P13V}num{Y=J% z?Z4GY#|Kv3;}5s0v)Er0oyA3fnZjQ;1@d^HW}NNcZ9MA)+6QJADaF%8Han;>s-2v; zN<*75)0>wLomkqKZRE#yzYh9U-CdeBZAW8#k1{!bT-O#;hpC(4o_~%QGz={6CU4U@ z=em++tAp)d&q5#Gr}=Pf(i0r!#{@&@=(XlK9{WMxe)5-mm zC`0qzQD&3w?q*MvU|#jU%GCs%o?aGJA3dFLUzt3^3MES-luH@XYoaH}exZlg4&>t*NH-^nMp3ZBwZ zO?sR7zkRK34Bno)*x|xS=knOz_&WGxV#{~T=e_rp>Ph`ivIt}fZ)cF?OUdg&q7qmKgu7- zVnJh4aOF}d?k+m)3o%_yxu1jWWw)l&rN{bzR&OZF=lduX=hp%$t-ufHVhXw!EaaA? zmxny|G$icnQkfW@-dKKOpm?t8sW4@6l{d7MWr9T&u|e+oJ9drig_9Z0l3UkI5B0D` zzT-Hq_hu7ZVp!%vJQL*~iJ(G83o!6AE4+RjO~i3%}oaKue?R|9&<7@bOmYp6P+_Z13%~Ppt*c7 z*lE5d9aE@JWquQ0Quya80IYxG*gxc@{&C(v3@%ngw+t2?QjhNaQ%}!)_1EaO58JVr zAgjmK9=bJ$er^pa8G$no3epiFVlkF)p;q}lLE_SZ_^?$une%0bA|WcWCAnd@R|?{~ zXda;q&IB}2W=|P=G*t$+epz0tHThhrf0K5NmbSL3v-)#J<>>}uA(pWtJ7xeEl#D%2 zVvtLE3R=ul{wb*mTbyAi1%$5q-ELoTekLE^%IUEUiS!(Uo=)+TE{2!ZCnR?^G&jut z2$B2*B|~LRXRGW+Q!yD?2pcF%OMH}!s!@QN1P9KeKERZ@7;+eU(4Cc$U?3@)!W%}V-G5X_6hTg(l zR}5I}IYI-Rd05swGx0VX=f?J%SI5LCC2>8&Lj7KK@$0=;L?aVQhN^w}wI6-!!`m_) z>GBA0COi^Jc1}IPDd2D>50s-EeR0gEPHW|w-}E_)Uti_Cr5gLE;NB(OWKwMDM6n^a z#Wncl_ViStUXEV7tzd&;9(mDB{T`gTjE_X7{cty9x-0o@7OF#~4DK^Ky~NK(rXO&U zWyK$uBKi40WaI^ualKYDd%)cNnm{BBr!b|rQn3t%x}5nwDj7uC5oJrvKox=TSG?=9 z@bS3gQ*xY0U!A?WIvLJpOS4X?3QBsBCKF(~G0mQ=Z4xMpTp=0$R;VD?M*Bp+eJUM3 zowedeX=BJoPqk)#T3#bvT=O{jN!q#+wrf}t<6I~PHc2n6mJou9;WAI+mJTLmlH3@; z)r#i+V$F!DQ?m)C2UW?g$CEm)c0O+AXLQ!K%8AiI@w(~qGmkUlu>YXjtEZBf^#2xz zkhS=HQE0N^%bR0TJInOuLd`GuozwC2rk}@VOIjO_D7xxvpW7saN1`B?W`0>oKt!$> z`Z7S<`P)tZ_@f@5?_Yby30SNUA3)VO+a8QVl=zN$bFY4dNi zb{Xyy|L!?kwRfQ(ceWT3SMuzYq#Kh<{U#`x;j(?l#-&I_Z`>iUkN9c$-C}nk-IUL7 zcwtvRA_9aJiY0w%Ud;FoR91~RF_=iN6a3*nT^}!8V5E^sFMr9`Oa)^!_Hw)?s4QMC zsNr7`bUVOgCS}m9m3wUTqzj|8Z*8w9Lm|$bK}Rq?fh%FzSsRwKRUN`7j*B@l0_QFR zB=mpfvRi;03UFvVXyp73Hp;cgV90!#Ii4A{oh#) zwqK~L;k~48U8#K@dNA_oEF;VH>FGQ0H@Nj2)NaDWI;+>l!(pPt+z+KX`f0oYKh~W# ziRw}WK5n*MQnF}m71QaF{+o%<|19?6t>*FR@}z<5nq9-@SkKal0xjFy6al@FRJJ#F z(xs{(&bY*YqSEz3{^h&zTpX)II*P6`*bmrQ6f8Qwc~7vR^eH#h!%TPJZy_n? zy`0I_?jn!5&APGbz&x(6#kYdmFJDO_YF5{MED8&`M9j$?z4c?QsnjDgf=UCkp(l|H zf35-m3b;V!3`DRW1IRc?;3xlyf9YwLy{gK(5<1P38KjRKA1RhT0u$1iZOAb6i&Is_ z+EwrwN$YIv(U|Po+HYUzIb77_W0cR7V}VxY*H`nm4fSjD+>e{@_kX5_&!xSnT@!J1U|qmm{p)fM z>}6Ak#dn!omES`TvwpIaSy5(7h))+3vgSlRSW zSi}qHq-#8NH(87dksJ=YYa4N)Bt_j`TW@SNaacs-v{7?3@rbgU9X@ddK_!d$-l5*V{GbnU*K|jBq^>#S(m)?Y$eLBX5zki zy9;aPzjH}0kkc`Rnc(bd89WW15m}FN95yg-Moq;!ZTU7|!=}`aWwuk?W+xRXx#MI3 z;(rJ`ddrytVfYm;l`0OJ<+g}%C;MQG?qDrPBpGEGQ!X?#aS-Y4nb_4Zt3{Qr!R-g< z4K*)#&UeViIzCL_+?BeCJiz3mh1@z*>7SF8LSTckR?!$RdL77|?IFeg$|a)nX#3IL ze%uKj=gUF-u2XO%uZ+Gdc9;_lJ8>)T&2xfoXN0S4szH-BGn@1Pv@s$~ zT_kf(5Tz)A{|YtrLPeO(%t+sh=P1Kaqm2kXS{7Ph3tjujmWx$K`10R5G{z9?gu)~d zS-7d8d@8<^h-5W?oFsk)Sq0X9k^PG?RDVKCMb*gB?ZRu<3r}IOyk?4mNuQI0Rwpvs zB4e-gcA6pD=2MQ$q>ik3lb)>WuEf@`!>yeTFFam{@9eR9o5qK4tx5j-Kl}rL0`PxW zYOM2*!Y3w7q}szh;ak)u(tm)9D&W|*L!%AoN$6o9Q^t@<-A8xV-V$$C>g&=6+uQhm z9#bv(HOZjGvYc`mX3)(YxlWhmAtrR6^F?PS6KFdYrA@@M55=&~q?7Qf@J-mAX$(yl z&f~>zIF8Ys3xF*UxwJ$VZ`ZKY;ky-U?431v))MAVEO_BG&LmjkKLf^;Q}q$hag0MZ zg3&L-qB3@-dW&_ax^(!a%7`}(-Xg{Fn4MdgK25PNq|a?Jh!1k|ZgPU?W?Ef9+AB76 zpSVR_=rgTThK|r%><=Q~$2q!$tqkk9Bv=$);pvLeG7z4)Q=0#f5$z9+%}V7IXdeKP zWG3^CG^{M&1B_Ii!Tv#>U z<+cz4{BNDz%Erp@54vS!4eHSdf3_|?!9`QlWtPNP>)~robUR>#lu1(&J5lw^W`H-t zF`Pqd!c+(O;hffcYT3v(KH?l=MQbJ*u*gws4^IpT_{LZ!1LS9!coWf61sSl)$6eso z8m2{Z>l*nR2zp!kg>NifM&1GZ!9zSxoIMRwb40!o;E=y0uHQi}cir`Uzumg}ZJ;ak zk6=o972(OraBI(U6=#%SafA#)QMWZ=F{?#WzUBW7t@{%7s-Z|xJ@ zJXtnAGdotRt}nA~1<`=)Kp9~)Eh((VV>(Wh`w0nH;JJyfOkp`P4P2j{E2lj?ee-)$ zB`x{7tZ0cq_L`8g3O5uon`RT$M)+x!5?>6H;6rh40#qo5fKZH%r}eEA#&jMBG&e$c zgZ0yyfIw0?No@>aQ^t~p5HLp-cxO@#i;>0x8DReK%(OIpLK@#o{9#E&m!+zR>znG~ z{yHv3dP@9Ya7n_7H8Xp0_Uq$g>!Lt`XVu9lwG~Y!<0w)6+sV2N^?PFFp`aew?e#;< z7857hf_G)9eJv8L74!$UQ)1*9E~;*xN6mk30^p{g|99>l`wfsj0OnIy*Bakn3k*NC zon5ho$P}5?KP)L@#(^4xW9do@L|^8TkQC7Pt9%_WO=pxzI+>0HbTqQ!%4I|L5X2Jew%ayq$g3r?P1 zx|&kiuoXTMWQ&X9#I!OYBrCR;HbPDjNMb;~D@iQv^!xGN1{a7pSzu~*7dGn{h+2`+ zSuztBY%nz=BiX0A7pC9skVQLj;oU9&K}NvP+9ep+O~c0l2QIgJBrKJuH{6>YZ|8!< zCvL@dhdDmefq|5SO~!LG9LgZrJitAEdw zY6{p$n>&9;JS~iDgDvd>D|W1?xNQg z7i245V6-&8Sl>u*FVK^nub5mVSMAAnx2k39D$sNKx?sSlYQ!aA-N=bWM|)W`9WO<4 z{2?pF)oD|ms;&HY4%52CO2@m`Zvu5KiLc8dq{XIX?-0+X#oHnR!>G%%H}fRcKpquq z?URybIq2)3Pmk%k9G;z3=k-DIq>}=6R$JTEBBG>=b}xW z-)*Ty-@<|^vCNe!^E6u69@j^3Kc)KLApjytdw`}8dfw;^&=iOtVC=~LBFDHSD*SMa zg=yR_o3^XR43w4Bzj%Uj@YRqq~c`L*-j|7FvQ=xw1MwR6b< zoc6)zk+Ro?GZuOW3J9(vtIC}1$&u+%soX$hFACi6*t}bu1Li3xu2CPXD?8t+*d`LF z$-lQ(;PdeHzKm~3=cswwK&v5$gul6`K!;(V4X}0!(Hir~#&cLY>G{NH_`BylV?Jjx z{dEq1d>P-jbVA9^rrW;Q?wrLl)DBte@H;8=$r0~dNGjS8?i1p1|%6)4$1ufGlul{=oK+Tx*XT&xSa5bFkt_gmGA;Z`?7sRpFNyj@zGe^#8 zC*!UKq%l$GV?E_qZ~M{Gnhw+h!0hgOP53fim0NuH%T#CMCtlPo++Kq_^o86efx|TL z^EvhXt-MZ6X$q$kXz zA)NJdLq8zWp+j#`D%bqGq5rdniU;`a{W5^>66Xk%SjJ$CXJCyklL1;L*KLW4frh-LI zWR1g!5Y`?aFv8c&F+vj$E}k?yk+0u zDMM6?(5OJIo+lGv`0$QZygG?U}IM-QmGCn`0YdSICpU(w>h5 z4MJ@2Gy>Sx^Jm|W=zSB;nth9nY46Ph$Hh#d*ZY3rRKXa#Wo$-=FS|KzBT;wMgZ$px4$b?!s@JnXbkswZy;OUmZ>amy@OSLJgU=V0^l zk`zNsP>5@HMo^^bwP$wx+PKLTV&;iEh6e?HQXk3RAZ>a994?Z?slvZ4ILg; zrbmp2xG}*J<={izO#>tq64AP>zUA< zc<$l~4|f_v#%6~HM0+8YEg)R1D4H=_vol3}UOX_TvoSfP27yTVh-{68lCF(=%9}Jq z`8;)z9FmuwK%uKl+Ma6txg4_;y|#SPu=c08AurJq9AUUk`9W2D3AA&MGpS(bF@x5% zfDNzVB0nzp|7bevsHWeyj}rq24A|(@jc(~i=>}nRcXzka4bqI1ZlpV;OS-$eL_n~8 zrr+Q5|IXPt_qjgzeZ}kjzLG#=ZKwcrdLBqn9K>2zDit*ihl;yL58l^+9?8YqMYx@) zXqow5^2^q-GArpLSHrgX1?7jBDdX=dnJL{{t6P$bGfl5uxaweflbJSltoQZnD=%}R z#7^CSRUC7CW6&hW{~dx^m{la1lfwO9Q5e}QC7wNr1ZZk%{!4mAWt(TkORL9q%A!6`xnqy;Bv;Dv)f$+?BWnggl~wN+EIo3X z+1J0*J`o{jYUZ|56vDJ%rJchYxiHOOENj6KswlW*PLh|1AdCeFHT9qaYgJ&vGM;?) zWTM&LFP$tfLZdP0W88I@NmR`q(hS~E`fDzgq0`_V81Zm;8@OQNtLE}Tq_E5cgJqQ^ zr*D#E8V}d#-zWH1$vRppCxr5u^NFn$S=mp<(}L_#hy>I5!4ousNi3K{{koJedQNjR zaSX8AK*g-?-*gEX3B$<5IocNWqQMc_T@s`q)-)5rp(7;+pRe1R<8L*hp`bu#`3Yj! z!K#Mu%@*>6Kf)2ql^WwoX9R)fakNpEu=IQvE{3rjF{?q|6jvs7ZH-||()ABMsh@#? z1J=`rnauabG29i?>RZPbHjt~g^86l;W|?gF-Yu#wY~9`q%VSQ`uXNbG)M`uSESv(#Q^Bzl3N<2 zGHPRlH7pGfRM4YJtLBZ;6L}jjGIU&K1@7~_jfTy|$7+9FV{uAq@6LXQqwtDYPmeGA z%d6QxZLCc)+3Cm$v=@7tXX{IeTAssEiLAvyj*mN}m8smS>62~NJ(jnzD+|uAN&P${ zGgLJlByA-bQz-=on#hou3J@1a5u#WoL&6sn6+B781euq)0bAO2ezrh!Il)qipg}JO z-`GS3!mlSHmG660sob|%sik}P8P-H~VND!c4uz)|?3&az6 zGTSz(J}uTGsaUc;W}$6Ac!NQ{H4DokGiNN3`Cau{@^Y-3HC!9+kLC^+w7fcYwohT{ zR(jcclVPE1th2c}-h^0GS54k-qF0VVq|XzS(gHX)q*ImaoM^oGn~xD;d^j(-fF;dU z1G|!Tdu!3r!Qv<~G8L<@*r-^KLLR;8Dw+ohW$>C)Wu3yHUjEY8a}6Hg5?YzafkGG| z!aed~$>E8CJh2vv4Jvp)jXd}(Pq?Keg!-8v7QQC9oeL#ngrHbtFFBGAc2K$FLka#H z2}t?)(O)IdfWj!}KbEgSGr~qW`H6n??2>|$OlF{=xL-Py2aF=4Pm*{YGAoQRBMYB# zuC)91mF@6y<+=VZRD~aUEAlt9U(8m)uiM0?K-`VVgTnLZ_*oQ?uBIrR^Q_$mgzpXW z7sqDuZoR_g7Cq5%?AwO0VMV7FeL%%4dOB=72e#zrh*a&A54@TW0s$$c7n~)g(kM9W zlm5Pv@R`Q+I!M&F+aG3{QzNit*=YZTJn4eLit22fMA6pRu7y_|g`Zxozc|BNb!Vh* zUs)XEa&SNAY^^oyE%{@Ym+5x8u3%%u&32#cn3->6VZqHjpj$j&8Kgo~G)sqEDf(9w zhHv-g-}5kEUxTz*nM2KXFv|AOn;#uFO5&|touNYN0~N(l9B+mo(ni^HHi{Ir)U#yj zni)rVL`VI->M28wSh*pkyvZCBC7=CrF4L9a-lDgQCyo1HE2v@q8<&p~O~*+e-(ntY z7!1B6w6iia_()vVcti`&$cs&xi$(S&~V@RC*^bZ$6}wkDcmt^f098`>^|0t z{Q<9jUz@7XG{`^p*y8=REj8uo$qO9E5wVzkW!jnY59-6bPc^Phrj8DH#9kX+j~wrO zivBRn+_I9fCY&x!ZTFy2%vb7kj~lLCq+96}>$yOyd?i>VS8SW!yIzJ<;&~>K`s)Er z4S<3g;wr2x^#ZHJ_i?L=u=C3AjsBZf6KB6iSv2?yoPqT_E4|K-jCv^=|}&427#0 z3!CUM)Da}WH5yN56B)|+swf7KcxLemZ}DP)9V^v49G zIZ=Jat)2DuEZ@X%@S_4w8BzB89l*zZ3^nt|51c20T?&_X)`U2o94e;VCf$*t(Wv8U z05j1Qw8A!8*vkO!P08Ma7P zjGZ;a!G+vYRaT})Hn)9cA6&NZ;(%baSe!T?clGE-P^7MTQ@dSAm(l7H}jmjd2a2=Y=`7+-C0 zta$+GZh8*_s6L-#}+R75{liAp7aU~lmG;JOSN33L6MKYA)OFtfl+E4onK z!$9pX&3@2cVtUQ2b)T5Z(AJy@_9MGzuTQ2aiI?p3&njcJ1Jmp%%8s9Vkn7vg3AlV= z+1?L$VKSAFlBLv)nIHcreOS9dM_IalRIU&Hr4MU=jR*;<~kP@3k2NtLZ%B|fb?WQ#Sinrh?J zxnLpX5f69n%kZeS;@l@GehX=vKbj5v_zmk6h{T$ z&MLpmsT-WE99ATk>e}~i8-FQ0BW;T1*A;6l&TC2Eztpi57fvUP$$#z10!G6v#HiyyzEm?gG zIeU#R``=P{hhafLYT4JpaUj{)n3Csd;bB5Xv+nq$X)d5_G%HFC=v=V8$v=>>OLP+dM2FWN@%rWy6o3GWvD4`(qoUSu_Up=i_6Or6(D%@>pWBHUfdna{8MHFfyW;eh~o55o{GyP?(mLkQe;iQ_lO>ku(yJK zEKiU5)Qfj+9+2Z1=J6*$U+#z3{dD&ETy{RgxWb!uzH_kdIAeFy`yz()y5!=WQX$;T z*d{yh+>JH2w8uD{V+p5%?rvU*TZ#O3qDEYtu7K8om+02si~iM3pfWwQM9b(2ePbcG z<1l~8QTbWff!qZjp{s>!x0rI7n8PsxVSwX?dUzvi&$&kx`+^2z)8mljx@2XtA+4Mv z?;7m>X7JA4XcYaxHUBf`(F2>HkmYCE}3fgBj{qF2{D{A%OPB%ElwB*I)};O0x}$ zCo8wha{$df77~rm;{+ar*+n!j%<{4OwdnLeLJ{+_<(X3{?jbS7q?zkUN+}FcU;K^k z%X$kro-7Q-a^5i}d-3%5$J@qEwA*4IzKw`Or6QXsLyNqx8p1>gEtq1tlE49vDOYmR zTd*c$&0%n+y*+Fw2vbx3MwpB8HOd{ywrZgk=Et$H;zyyUkh~X7=+%2zJ_+pbW=?fr zRCdSrBgv_Ih*r&N^zeZ@g;`MVm8lOe3@(dW&LB5buH|fc3o%}nMNRrF8c!mv!ke9q zh?{eyvalvzQuQ4+4_FtwkNg)2cz=h}4JZoR4UXTU3V@7Np4f&NIim5_LL_gq#y=|c zo^4Kj;FL!Zmw+LtB+%sM8MR9HC@p?M%_dg;l+0*!_?WKk?KI(n*~->elPRLjHum{N zp8J+NEB05u-{Pc4Tcl*A6*g=y-n4f$|G@Ie4Tx+NyrXnrzoRd2wTrQE>?BjSqLouh zY4*<@zoR?g&WJ~7(H|(8y7} z6ic(l-}9Did@Fp87~p1y=P4s@eeL|ALG80>1VQ&G#qmd}D1yC^G=h*rQ85BG3tBQA z%yLdRCMGEvEtZ`bvg58zQh21cCe_)10DxC`EeHu)0p zqi8_uMA+_{qvOD@|2>)T5D+C~T^wz14B)s88ZqGMzHkI}R;8gcw!7Cf;Z zS+SfoLHu^(0+W$H{(TR}$b|#gwUqca#L;#dpi@@at>Q6Wgh1>8q5}XyTPw1pU_Tu=PH-4r8~i(ofb?s{C%}^j111Pf}?Pj5!usHeO<_hlXlU?jXhP<%q&C0nbn#Pxp0 z?YBs~r8*Z(8N2KC|9ubYel}4EyYXu-$8X_?;6R%Id?ZFhsu)rGgl#-aj(sxHiW>&T z0uWP&CK(X{33CfLV4aW54C^Lz6T;(5)}O&I+4I%WR5wO-5QqfXzsAZbWxz&WMZ&Cf*{> zHUxj>8hxSH2j=EOy3!uTw6#&Ten|53R8!_DiDA+TN$G*<@7wBoq=Ki^9*j8+HMA0+c zWDL%Ft~f^>AcV~8Ju}hbPQe(w!h@TK;WUnU9u_5HO*BihuZJrOB?JN=7^qlc+)RhQ zz`@ebY7>wPaZn2^VWjijzhO4T%XECfc@snT?-%YrG}sybu=w%bgjxbj6@o3k{;{$r z!&dgB@{d)MmUCm)%%YX*#pJ_?Uz%}~bC=u?m87FzWB!HF4Mq1N=X;8#Tn5I1a z1{U8GLr3BWvL~NWeE+y1ncx@l96z+{k6Z)z3vo)pB1+#-TZMFS}89rdYDh>pVU;R%&>?R zKbIFP9}tNSMhTB*3#n4Aic@DYq5RCWl=!}K%!IE5Wy_VdcR20*gS z!e@aGfoCIWF2^G$@4uSZ8J&bRekM)BT`TJdea-E|qcm`*MV?QugUN7dxPCj(ZCw=n z!f@06znc;77n1L-|LfIxSwD(^$nSk`1Y~`pOtQ_n>=^1W25kJX3`T*X%tB&>0_XbP zVEVbG3iz>C23c?(Emc=_@|OaE0Nvbp|40`;n*qhL)tP|$yI81PI(2LSq=&(_XswnunyZ~HfAuOwr524ytFu(M%`4F+ z43XDz^L|Jgi3=6NvN+XC<^-L^^hUcsO#X6c)yv5K_1vVL!M`!n&jP#hp2Th8n)7v@#m%>Eb$P7K5(po48Ylxk z_rFU4*=YPrtnAcXwtpt;XUJ}Ns_@{@-;3DUyYtx=kP!QU20T=L-1G3<4v*E z4VrlCB8H_Kx}qF+as~6aWxPIEzh!lHYV_%-nEbAEm;QYHDd$CWe5-@`{7R?aHx2xX zL9>Q{-F2Ecsm|wwdVa?bA`AR!A8Q*GG?z|Eb9k6)pSv45PmwIBXJsVIwfjz9Kv7We zhyjygBpg@?L+R*y?Zb_FF0X_!^;8(NC|kXV+{irIRMXTMR(?_{r_DTP2TrbksA`$! zv;3veVuT-X_i-xCInHM*$PV$&v*p>7Ydz6XeOu8)0lFNr*0^rH=CBUCKnD>%oqyFd zvfHW>fvlkx#*x@gI}%esJX84A3*s$a%y8g;A*^Q4_uwgxLIdM$h>7l$A5ow&J1;g$ zh5PXcA=dEF-}Q&bY|RL%;s&Amz{H;&3}AuQYXqVqZ{6J zc_m{1*20eWNqV-|N-plBjtOV-nexTUEAVO!nc$&)|_OSM&*=GEY79npjyVcweeNo|3!kE z53-u>SGeY4LsrvZAD&;GOQb3Sx*Za01lL5Toe)w#+rP$q5;9nE7<=s)sBW%Qf%(1U zEh*g2?sedAcQjK8;qQi&vPTqkGl&d^3@t5Ka82Z|oRu`gIY21~Z^=hwX)zrXrGR+r zctvkrO|d6pn3qg#?VVxi(Ows^!X<31-K{ZF(f4_#^Ti`q;Zn5qY^pKkl28atTqfCp z%4}m0At1!4sN_#^cJWo4E}hPqmef}IC*RsJeplxf$HU%)^&fA_5fwWVbCV6HAyr0v zx2MLm(8!f5QinJ6{B>8A)ZV=1mPV}OVhIj%hs`7*X|Z&X@7F7Efv=Dvn13~t5E4^B z4j=Y79czXVAv7&#NYF*{XU|-LO4ZI!ZSXKFY%a8OAR_mT0;+?c$xZ-ZT$=QMpz9a9Qu!u zB1t5%!m9xs${31bI2B~Zw7Q=)ia$pttLVf#Q=z@oI)76S|dI!T7A0?7J%x@BINW6()*nc3r! z5<+oXlDPINw*E3GWi||4!6cq^*x(4?Bo|J&lIKG^RivaMbe$NomZkw>^Z~m4S>x0Y zkiAF8Wa3=E^|jdMnQvn@1=jd^F;6j|#~ZS@3Vl&51Qk=5Deai5 z6X8RA@BQ4Q!uxitN02_j%L<4-tJsmaoE9i&u_6&HuH ziby;g@hWK6z4m`89WEJJ?KrSqE99Irmp2Xt8XQgY+rLQRs4ox7PIyxvW*V@lGQ)h8 zVwh)4-hb39Q6p#Axcyja_R7worw8HKJuNU|BSewAR+Equ@#lRbQnya;Cw##9)ZKkx z^v+lybPrGrq~Q$3eFVZ}v2N zqB5>sJft7}8J(H)nQHt2`bmZj6a@?f5QA<>>;YpoA+u@8j-+u_!_q_}8a_oBs5qLM z`fKQGG1K!zR=TDwPqEbF`)vE2`&Ay@U{lG!dfObDY$88?I6cdR24J#J6&yt=W{gP$ zqOBQY?xdnroL|i_SJg^Ddh0||$vh6;nS^!4FCp_ zc%C~w|Fo9fVby~fOJghEh^bnx9zP5MHQQp0j5!W21n zGRyk^sBq1F^~ewT0=n@Ug1_}y9;s-KEB>gm-`m`$fF`&M_^L`8xtlBJ)D9$sS@XK~ zo{b4x%rL*RaA5hQAv62?(QAu;OQMH3$?Z(@=xX|k>fwir0oU&8*T*{H09h3o%g5@r z8~yiAn>|_Qox;fuJLi;h>-0CvU6*Gs!P|QOTFyvi9O{2b<0j`N(vr@XttP=)-*?*I z)h&z7@>PDq^aeZ_z=En3dBdiS7fx%X>ZE7&r7D+S%@a%vhsYFjiWlpbH-O6llbfIX z&{MxLBq!%#CnuhDRps*WGr}YEtsL|}RPAng0w-?MY4*R85A*b_$Y_wA!)gethKWh*4N_ z?LBR^^Tiu2)Ey^XNI-D^wwpZ6M={cJ1^ zpNkYGVqUx#;K?cU1%iG7Nn1@BhgTWN$BriwsMerA#r9kw*&>&XFR6W;-fB{UNHBRn z7n!4{UMkicgoTC5J5N#X2?djWE9qlK!IbsO%_Dr!PzkH%RICWpWYz3CcYQNK-+d9W zE>HXk7NlPLw%x8)?>a?dhxQ|$TQ93_u3Nk48zGs~SdJ_Hy$pLDNI{?NSr)~VRr z5&z|JfD(Vfc4Cu_=Q~@Losf6(ze5N{0=_m;NZuU@_#z8QsI(h*$+wqJxxZ_)QS;~c z=ZQ|x{a#a}#}1uKEFfy?7mSt{%bFSxadI+=JOAz;LcsK`Y3xT%sHd0H7j#^$cwSP6 zCp}tY zgQV-0zEGL7E!FzqV-?&c`2X}DNVFAML)oLA)jQVTBeEt=mPxAN08)%J2NwEp^06x# z$_>k4I`C1SA!)kR8Gd0uo7h(_uI_!iV#%;XJS6d=UlzGR=kqs2HHvq zyM76kxqtx%cPJ5`W&@)wjzO1Z+$95aJg#*mXfl|!2`@s-z~tOr!R&&!s5T2zqpqAi zkD#`zHfPC`xtO_XLgdY#%1|&0q%hZ)d2Xn^z9sh|0o~Q`MRAkKc>7I5WoK~pUpkJzY>H$a+d-EQ9{g`z8j@3pvO%(~;|pADH+Q(c!|ZZyIE-xYa`SmFqFf;_G11@q z;;3W53fXAE_NV2kz%zFlI~mc=4hgn+2NAhqS5u3UsvrWiMK0zDMRg-Dki}vRh%-G9 z+{lc3{(?pX9E*}M+zM2AH2_5GrX%LhmNM3Q2|2L=1}d~%qXM_8c@rH z;`r9GD`#N#-SZk(vweVZnn!3-HIS#I-fdEPO*yu|iEs3*r<+HU;*Yo2=Lg91NB(!F zzohIxc0_GRIesYpJ@sI(R4ZalvDH|xubkZTnKs^8y@w#quTZWq>Q)6KYk?ttT$ti8 zK7Of_WIZA8X|qF-io-ANY!o06h^o#;ZMV2j)|}T|Mg57#p(j;$EBnlWImObYDI;FG zwJ?j2#D<@imHF6SznaF<1oy>r114)yqqjf>Ebt%uhp|CzOpmFdg%movF8ZJE6zxyX zZWbU-wW;>i(f=I+K30HLREf>_QhiMgazf9;$m$c&&7bupWBFz(zP2)wR~(I4uMV~5 zLx=}#*Tf_w;x$67iJIJ?>RaN^R&9f66{jgg_0|Ws`?8>(pdya>NJa(6mUW)`?S?v0 zdyY?DDgg>y6(aQh0bi`wCd7KrYwtS~K0}TnafnSWX=O2BH^=k>Z|T0{5S8`8WSc_6 zoDxkmONwtK>z~^sXa$VPEA`gmcHQeYz#W?8Aw7Y^+4B}LJ4a`B`{iCe%DN#NRxVVL;^be4GStC zK8+Bhs|o#k2*|{_CC={evgP4_XshqmR$vl>mJf8$^HahwV1=GaanmL(tG$azbJ87nKEt7JVgOE;#`=-iw^ zNKP@tQ(`OaE+{Fb+tN!9DpB?VsdwIr5qYBMV^f71M4=A$aq5ZG$?RdEo2!8lSU6~w zL{KwJuqo>9P89OL!C-N1#)zB{99M2#wIA0RDG%A-yPejGmIpv$3TdoULjpIsULPs5{Fpc;fNUG{?Whnx7Pup2b|ExDt*Hr9e-7@Dmea=Jvru8zGBLRk2(>Sf**|^tWaQ1IF zjl_0BkRup`&G;hH>i=`L;A8f^zJZrqmkKppc=3m3M@aOmLl{kSAw~T<|&Q<|H*i3&SZ+HBZ9W>USx>_?DzCN9DU!dQ4 zi8N5|9?_&(RSRnl#$wB=#rF~+GBRHbCzb7QAgnwoYkjVhXDjNhQa0-}l6xf4sg)G~ z($2T&f;qjNytH&k&6X0XT&wdA*!nJ?z1ul~Xj^PlvYU>9YnrVat8P(@dgA5&vu#D@ zj6yNU@?j}t4cSu|$bt;6c8sYQ>%Ex4GISPEq##<2_T-{LN0G6@><^%_iotrFVA*`9 zPuV3CS2J8@-AvuZp~!UL>E=MvuVE3Y_QGL3Ez9+@fl}DwsQuG7D20SLG*5Ef^z-E+ zrfK_>_}xfq+(xJc>~ga`vYm6>l&Ul=WmNj_o_A!uUE5c3Tozf(LQMYXe((M6P46^K zp}1DzalSxSqKw4sL>`-S-ao^@)b9#$Pj#79~V6^yIBcpxBY+%QAyBtY4WH^G>}H+_N|54Ai(%t3A9R>d+!b6V+mz@DK%e20*pus&zRN z_x^)l*_Y-Vq#6Kne09}3a5-=;FDR`b`%l54{?Q}TZN5Evyx9N-MU>of@PtQZ$q=5*DzjNc9_yJ7$#cnm}4|#C_3ZPOn zW+p-!W~nl)etB5wO~Ot=m-8IlX^D%*I`@I%LA|Xp2tI43LU!ZqG$4Ou*`%rX#As4^ z`Hu-xoA-F-+xG2+FE%|Il%;$d6jJ6K>`6VDQQb2tOsrzhQj@}dA+N@N?jqz-$V_1= zW(8S3+=0w+eL6SJ=)6*xH%1*dVlroE(<-fKASkFP#7|->1leRmZjyV+ml|@nNdC0( zrGFa5)rsstQy2zMP%-(ST8Adkm4`2Lo$wbTcN!|CUUwwDVr^I0uOZS(^GzO@9A%!nRaUI5{}$S0icPy_e85a z*&R^R6Hh2p#??vos+-`w-<4)5==k0$hr7E78{+bgEV2Ys84s;zSSO)6)t1rY9--^d z;#pBdsHHT`eZgEjyiuf!9b$xIlL5M1U$l_xX2dDJZz`NKluG)KT|(}Ri?Xn$8&FuQ z|I02RRX8D7ru`s$xv>KY2|7MZHrI7+RA?|W4-#sT$15BG+ zCvDbgR#!mwrWTnKe#@Sn)YL7^G`)(;u>k+9q6Eroe9@}OOy8MWvTwhBUQ5o>eGh5y z52dF#rRodSt?zpE)ULj`>~`fiy?U@Gf2@UO$%c2AWJA+%{W+V$8|TT;XcUQ*5UajC ztSS-;eh>kl@`&&Q+|$4q8dw+_GWJ-=ZULw;cWOXWe^!G~7YUvQoD${J#F3P-G{y(};h>i}R&e3`vsghs5A=UmP9yv7oPQ(X z+cbpE&G5Sgbad4~Nm-g|Y9Dqo%tewJd#|W5 zI^w+qO^38GpPLtA-1QRO3lPslhn+mUI#z-;G}Jor_hvzMTEmf?ceH5w!9JJp?R0`z%j4TSl>DL!9Qlf zpoyF^N49Hl?h|ngz2+5P6aKNr8jQ?A+*$(m$#NuqC!beay>uYZA<13AL zrYtNBu&d#~)Pset$iCA|D?Vh8M_n6Bub}v4Lc|E9{|KB-IfcW;B7I!)lS!XKR-4@? z(X22E+sw+>^@V~awRXixs$-24wuzWusHD47>gh>_isC(?MJrJKo5n&O2RsN9bc5v~xh1Vo373~jbb0FpI6JJ;s< zaguJ-EUYMDcNKNGopE~hGKAEc^9qeNo-559lFh}wxjOg{E5UOQ&I0A^R!X84^`UvX)hm{0~$3yJt8IIeh4gSz!G;d{7{xvmH_~ zj@Y!IwT=b}YiRM}g%BnVAw`nAnmTWH4Zo3xzDHqREQN>pDjoj6K1RE zOJKg;Di|!ALEPbTJbGTSesTSsg2^VA< zEF1llFBF^b1Rs0wSZRixTdhS~c+jW3k&p%u{LUo6!XPE3a}VOKZ%0Ln!&IS}3)Y^^ zBKq_!UlN=WVw7|09CMUsGCKqyqbqzHbS1wEAAIz#nR!${yX@hODGe!Kq-|%Pb$sla zm}*u)X9%klcFIm;CXmKC9*>W|Fc2uAEcOumFLTEG9E41ltYfY@k*GJWc!%#t zE0>LQG0H`a%G*Y*OmE~e80KJS?ERr9s#1F}J5kZ+sC+cs8=cRwM{^}OrkK~Y$hH_dPKvf}zI^Uu)fOZ>ydWx;$*dC-ux4PO&-uyi^KG5B zH!UGJefYWQg?2q7^pN0Tp|Ke5nYh+HR-3@BLVgDxk+ei(s-=zoKuV4kl0V@7AuOKH zd11Mw7baV`o~U+DAFB!_T%Lc$0B29B*>`qiMjtira{z0H=rKznw&%4RUx&2V4hjiL z25|M3`ZdcB;e8*@)&4YbLTRhOYn_s^>nnJFxJSRq~R6_EOm8l?UsmmB<}!}Zrb zOSMl=pxQUH2F?sw7z`C9n1qcSoz#j#C`8t)M+6Y^BfTIagxL8sY8HVxn6T-Nun9e(QZEN0%iMG>*B|QmYT;xJc_xx z8mA+6+)(!XQ>!VxBm5NEP7q&3xNwAQ|FhOzAWAqYtLayWD*=0AHJMk%*5C=a-~g>p z5__0Q0kVP`#e5d>v;<4>Wed-*g=@FlZ3_2yPLp0HBOPCD?4o}#^6~#@^X}M*{HF47 zIG}mV@{t=jK1{IEcsj)Xnbsz~s)AY8>wj+~dl<5O=!;qU&wMKAh&#Zy=^Z1FvkrUJ zo_b*{)wXpX6lmc%phGpfoMlAfb-?~}9d2GXGj+UcpJL_3O^awxTmXNu$1=U5mKKf` zH(T6_<1SLrQfICvUhqBePD!C=i?Ws>fJ4bc3K5b5jIPHw2VZ3CpoU?1U`oOI43y?# z5k)qz;0t{@$Mlengx$joA1(+48-*C-t4EUi*Hy)s{a|Xs;u2HRmpQRU*aA{eWsDX1 zNh;;_BAO(kQg|{AP=YT4aFLMHd(A{k^Hi(~hIMA8@YOQX4FkZ~W-m>R4p4y1)Ubv0 zc_k0)mMlVbur1|OlKSqEqxb*xAE*&FlVT__JMU|5`m-tpX~ImyCQ`C!Fd`_eJ}+gGf^MClBR`KwelE6thuWNX#)fpG5Y z7#DjB=vu&;jOT6PPpjh~)uut|^T*fLq5|7;0uIb|zaM{-_5}41#ZTsEP56Z=5_0;) zZRWl9dEx!=OV)19ZTIrGelVRN&>y=AC0v{~H_D!Wo0YV(pYTX~Q4hpWX05_#-kTfw z{#n-u)NZZPo%nu;dp&ncefeZq$c~WzobI48s#jqR!ldnGbos)0DOa=nk40W1B1hQf zaH;zlImN?a>HAmG-kAzQ%YQ=wX{TU@OqY-~)Gm_Xx&y6FTd7moG7FUtTy)qx$W~Xh zudho>FpXJ=8r(XwfEj5!DCIgEK}P&KMv~$Z;qp-1bwfWpwQ&H+aUA6p;r(M07}YKG$g_|h^gKP^*ap{)ah50J3viY3w-5+LJ^tI z%_}$K503P7jEiX8pS=iDbosS)zdF4(z1Y}0>VKbtZ{%g5kvrt|%>}%j-&mnBLjADu zin}5e+&cnMUP;x6AV!*Xnhu?#;3FMNZIGJb>v~7z`v581E=7A}FX}ZnaZB8^*UZ}< zfdHVUlR?J9sS_&D;+LEHzxdpLK2#HCgc@xd1x%XUJ`AmYl8#e9!ij}Gu_Wc&(n1Fo zAP}N^PCO87+%IWceYPF*lR|0r@}E>ubC^ZW6O7 zsS&qxALCX<7BFNfDS%+O%olKO7Hntd~ zd2ynlLXpcC#?B?nvhXE!_eWdrC|?jaytr_1PAciSq8;tsd*`vHhgCm677eB1CLkV3 z*Ut-w*>|;SP;Kg`E}W`;-YZGV8#ggZv}G6^n!_C!&J~GzIn|#^4DhO7GHOvQ1vhJK zwN;Mr9T=pD@r|MD@eCvZV^V-Pgx0s0Ud?$igAY{74*D%k90HWuZzD_kccq!f^p!m{ zELBg(RuoAv28)HT*XAP?_$0okeI+2&ec)=0>*9HyM&m7R@SLB5yyHE5GvbQly+@vk z7wA5~vgpV;Z7P|E^Iu~H1+T>mDS}zU`hrBgR}f^eY_=Sh)gVVb%-n0Mjya|cOC0u! z*zb6{GWM>oGfU89Xs0in$auf@aG`QUON2ti&@L8Ciq~IHZvL$Kv;_JD0rynKIN#-A%qGg=mg= z>dZZ5B;^^8_awdjLNA2&5B;iqFi=mSA~+=kN@5u##YA0UW-V8A6%IPL}4i+V3~I;*E(rrq3sX{8y^q z@m_qtG2ZkZnW{DaN&185+w}UvgNZ*l*hHzcd7IqYO zh7(M5LuOWT{R-APjGq-_7gaJUv4%vwk;KZCf@Me5i?IPFb&W=Sl_91jmketj zFdC{jF&G9?FIx)pT@k%Z7{rX~jQ7>Tc7RGokM^k%qKWTTbrMM8swJ>;H6)&^_N7G7 zdUMCjFOfeRBVN6znAT4mX{vw|S$iplT+kjkx}_FYH8k@ANiiJyPC0V%C1kY|w-e&T z199~uow+|;S<$GW5EpglKZ`=UBI_`-08)U+u}iQj+5MGqW=+>u0@gXG-gpa2cm$_V zt0oRqlnLqW@sE5m564Uk$HEcgw8fM_LrF0K7gO}L6VsQxhEgn3WlNw*)1!v6X_-aD zwpXA@pyxpe;r|W+Sw8%4nxu8b{XC+Eg3><+{rajR z<%u2xaW)?j0X~SbFJmrD+M%tz8rzrsgZZi;f*jbqDUJ;!Hx3ockiZ4lP$3g{W=m=Q8kv$(1{b z(MWG62axn26s>;(RS%$)V73-h%&rOIy_EgrUHI1hT9KpbbAVjg@tS~3TU|pI6^ey-g<5xIJDM>wj3NkRE%1HR`^ZZ6LpL6F#iZ7j1Z;=yGAF z7NzME^zV&C!81a7IU^J2%l~|r#>I=vcpu^5nAOvQv%PTfGTsGxB;yML?q$r@($_?f zqT!8e%7nYhsx6KghyW=*LF@P5)30fQcDQW>LW+o4p62pLh$Ah3 zy($puMawfZ(*+58n(Ek4h%o0KibS(hT8#wFQX~#$`eb-xVQieVZs=^Fy%TB*r)vu9 z@9!nz;!m(c2+aEud>PbnRe12IU-IK~U7;NT7|-q<3bVo)vegW`Md~tTY%)S0pA*mA zUj4rEDX-ZYc*&r=$#o)3oPDRIVc6zi>23zNja7{6atuCMZlq=(S~Nd*t0NSf^m9Z` zVE$PSO}SWElOZjKkS@l^8cMzTjJKFHp!BvR+xWOGa2*aUv*tza$O3DT9wLNdB*w{H zp2&o9w0+X#@TUaj^A@*z zSwLyPD5y!j3QNJ|#hn*0`F*U=uLlUnmtmSq{gE)#fb!1xc_ zL6#3KZ~mrB3cJV=3=-?~Hd@l3Rw6%&zpB&7@%>G8NB1a=3atuJ6Ojlt!j5u7@$9I| zEy@B=%xx{tPg-!3)03TwUOJNI#4Db;TJbv=(A-T6L zuN)p7K^)PZnMLtLcGs1hJ+7ktosr>KkriVs%ymh5Z;y(~i;L{$PTodNCzgKWDIGyH zS@J2Je{4l_DQHs8Mrlz2V+0$HNGl$YbX=02nD3DZ@rDpl{si43qC*yFbaXEMmov^G zEr*cl()oYSgF4b8&5@wpF}y(EoGDgI`rY;+a(UaX5H~@e46_a}75+p@t|R^VM?1Jz z9(HRe%4K4@p0bV<$IM31*8kCT6@E>)Uw5Pf25cioIYy0Ubcw|193?H?A)P7>qq{*$ z8l@YQ?hd6?KpIrSzQ1=og5H#sY$(-295y!O`Sqs9|fm|L;W{x>^=8o!{MSY;N z;g)oqB@+NYw;cURqX~i_&_q0J`A$yuz*WovltMByBx0-wc(#i$jfuVFCt@mLpd%Oz z7Ha=8NiD@dyKK`MTfLSa{GsxQmTlPltxbPcIp^z zeAmx#<~e87nAO_zm3ixuhg3wHg2Y*WuD3+1yVAGn#x#>)QhT}n80SjouC;Bd7$}38 zOe5D?xV4<>@ufdE)d_oZNbhlPs<0oL*cwT1Qf9u-oM1Wew-VnYQ=Az1eg2$fefRSD z2OU|R3YhYX*yv7=jqMKq!o#@_3H~GR(ZAR0|0>c>k*vJB&uTC;Ur~fpEB{l zuc`+0f$Nx=j_Ux6-1Hn9SZw^Al1-DyOMyVWM+V)qzP%mYf&wk^xtFP7#y>3eH}${X zFFtX-ZTN^EnJygTLkf0JuVf(CT``=mZJq5AE92s+`MM(QFuXcYX-|`NP&JKsF&B=9 zj-w3)yq9OM!6Qb~8C!N6u4K?h4^BlE2V7`cRnFJ4GM@DcTl#&w$aeNzdnQnFy~e}F z`njdvqK}94Sm#jpQH7VtiHmosab|fk?7=!CnRE|{v};tL2nHQ1b#Gfn#EJ9A-=~1n zl;HoX^*=v}I|Vws&Rg&+PEe>?5)rtRIbe%sm40<^5ocNku#r57z3;)6sBFd0_%XRB zu^>{HKu_#vnFo@C)LxpnWZ!0-+VD=>TlTxaW_E!$C*3k3?PDGsou7v4R=+&4^{CyJ zp3Lz5{F~`C%H|nOVPdMftycx(mZN1T&N#14PXWQrG_9-Wai&c*<;}x ziUC9lKSMx+Mu=6gRJN$;0DDkZ1?`#bFf-c5;#NeQu#fH*A2A8u2oduTwIqm<82+7* zoyRs|F#xjlLI3Q4Jw1c2MQ|3#Ga8f$L_7a59X&kMb zKlJXFx+)#KyO_(Gh(8&s8YvH40KQo^xa4YyAKjtBl184>M<9R7jTk9>2Jtx5eMt34 zWyrrxrShuX18)$i`{B;MtG>myZ1Akd`<0`$y?WE4MhDNs&ero#06}Bwj}B`9IE|mE zqBK&QHAaDz2T+rtCc0ODF2-SunaolkZ();PkdY4-cH$(#j|z{0N0RAHwHqmRDvFvJ z(W(fGZcPq)F1?#Xj4j;Jpial*k-oJwt3#5aKx5?3BncilVz*|97sibb|AaMggQO#H zOkwVMgWh!#D$bu;(gu$Zdd&%IfiXpi&)mgHb>e|(Fvg^n`r(pF)f0mcG8RQAN0B)@ zewX`Ht9{i(`{L&WvRPr10W=Ef=e#B-kC z>?#n#_W<$t($bG76kS+%Omw_ZX%#4yi5qI3Z)KT2c#}JewxoxM9(3eY&j{<4Bk9CW zoOae=mmL?U@(cH9Rjn*O_W7z{V#2d#Mg(d|3NCc6*Efa75XJQ$p)s5i6Np3T7bka7 z9zw&QPjJq?XqIP%V4?u(hWk7#jG#CAWB|avbTk14HkKB@N8t!)|5T=%gxkMuy&H3j zO$2J!B6nNt(qeKAl~XNna<;<8&)|5Q>xX7O`PWk$IiFy1V9&!p?ruutAz`hWc`HsU zWoit+W)j|5uWj%!6K*!|3)j@PQrGlHar_d2W|l+@XX^*jxS|h{x;j|Yl(=FuLz?<1# z9v-ooST?%;OVjQ7k?p**{-+9v4G~n`sf*Bt)~RrefmFra3i1E8OJLT&HF8Lyi~ldb zH~0Wk7|JV`)z+#V%b#_8D4yth{Whq85S}o_#2n)-#*KBgSXJlFYMjDCs*yv@9VFpo z7hVZ*GHM@~+jZL+3lo3r_iN>(ZVO!k8ip5@zj{jE#O~KLORr^}(KI3S?y`A-imxP4r#@KZ( zCCwf7v^$CerQMCtZRt zD729O5o!T+thuATh(}FE&IDbN(wetkk(W+mODQD3>x06=PaICps&El&YqWtuyh=0d)&+P2{kEIQ& zV$Z8M_Yde7g)1%3$?Q2YjCBMu1=UxxFkJ5uWdt@%B?T-&1sprc@-N9FXd}Xic6Y1f z*};_MP1X;&XS8o^jTUAk3egaVm`1Y6&y};LOB$%wyhz!%rznNnJAQsDKlV94-#C?j z=v7nN=qq*+aY;umBe933W;JKdFZT1ZEoBmswsFj>Zt(wg3fNGWxV}O4Xp#M@|ImWLDnc_v>lP}XcGP92Awl<~x9-ssjLKqP@yWScUmPnyid?IwL z-Z4+XBxye2b;lbFF4b9R!vNXzjx=9C+bw&Gu#2^A{T9F=Mf*a`U-Ys0Yx_q0AH-h- z2wtaSVcTLZkFqR2N%H;dT;EtN7#H!$oaIP(bhc*rzs%@@JDg6M8vNTXT_-uqrMGD> zzs-I~GtWK>!@3$~>3qLd1cW0O{lMh~hf*Gnn8;2ED&#W^^u#3N-e5wpTKTV{6E`Q= z)Y)`8Bb3x%yowKV&qh8ZC`+{RS&TJ98zqr#il2hHovVT|NY#+xQ?{M!VDh#cBpV-} zA`);77GVfa0@%q?@Vz2cAWSZ3AC7e*j_kP56@iZK0>33h5-TY{j2?y!< zHoufohb5x2R*CvH3(? zi}>H(2l)@*&c)r(Be=n?g7y)mmr64oA`eX(-FS#d9UNIcZ4`5KB!!Xh872R=-`4Cc z7BP9cbyJr%K23+?t88GpypL7;_OC#$)e)H;F@|x~P^R1BK>5;kX zU%$%<_{K$*4LC4q2jcHjzOsJH8&#^1fp$w6!4i4;F%hKU;MCI4TINq?j1UX=4)M=) zmV+&`wq=R$g${^i7O~Xc+R0IZfj?_NX=3EY8b}L-P88? z0^!O4Ti%ntzf`kyw<+j-MXpxdOKpcNY@*C9?|BOLaV_~9JSkGLIH8(XGaSadm)&IL zTk8|#v)S2po$8$9U|2(G95zq{%*NpA#y(rB_JB5Hu*~vRUKlrbts`(YDz-8YLjm(e z`*`EaCpj7Db6S^9z<9_&yZ4}q6Z_Ui6ADpTAQF*e=BP^6B#S~uhU+L^8Y4D0G{%21 z02Gz%!ZaD_a)R*(K0 z+aE^&I{=`!%QMm)Kb1kzd~Bc+CuZui0G!D4iT+_2iPyw2x?MsGvpt2rY*2}T`#QL< zGA&^StEZV}Ct-|n3Ood8$p+AN*)s=U0~TXvU-XIi1&H?+SV0p+2!B1pNDvW0L2dtF z5H=J|7-0yM^>czV1Pw)}{!z4r0{}2X;t`Ckf_YX0g$!A0&%0L6x>?pE!@T4Gx2h4e zy+ZnFqgtJ087K7&gP}i@zO4RqjshwAq^hGqxk=vU;n1>LfrMKo3ka^C2qkfr;jRZqQPi=U)KtXK=YE&R z9ZA~9l_hsQ*SZb$vDqITf&@FV&OIyo?!Kh)xLTZF0=;^=C*>FVMP{bYDJu8fX)zC9 zYj1nu#Z9u~$=mrjkr>`?NNs60Oe01poU zBajArHa)3+|A8a%wc?(B>{%$jMIaVTbOFoHfkZOgow;&qHdvf?Jg_0|NPI)h4cbh*Ju z4kN1wbqC3eta6HL${L@!hETJI{w)%U%mgznDA1O5ak#maz;#ZFv8$+()^?3tTfqis z(-?`-lH+T>39`o^Aj(Ef1O#xsG<$5CrdgY^Fy{g@!KMc+X{ff9anWi=f=wxx257cO z>|{Nt#+{y`gNA-L4P=+#4ApI)lMBH!V0E*30$0?cVPh@A>h`nqMy}}ZjB>lfRD-x< z>He1#&i{fBt-n0(DqKp&G)YWmtJB{uu)ks3X_s2cVeRdxGI<88--8qdT?UD7=18TNE$ zh^7Q5^&CfOEFwO|{)?Q*10GJrb;yrcVI7<)Y2aw0FttK2yK1|?0DjzGW*t|+g?Cu zTD$+wqOxXyzy~h(txwxLb0vLQb=Z*#=8%&6PZ`{bdMYlIqiM-+K^3^v-~UYtxFFp5 zOZ8qIoM<{1x*`vLPfUUSb~n(Wq_N$sYW?V>?MxwetpxxevAa|Ar}>Q2#-TV%P~9y) zOOA6PTG00?zle%bzI1TSk$u}%j`*{lR76orviozYZ8DXkFIVfgU0&ftSc8(oyt?cT zHxu+ubS5%hi-{j8N?Jdh5Cdu23c8>6zqUl@*=w!4Kkl!{2e~%3~gDh^z~AMKeVb@E&TA*7VfmX1y{S*%ZdJ1KPrMANgub-(H~UI6n}18Z$+t0g=g+ zPNbi?_uWk8HuLANa>kgu6q{c8?P=3?olb$Q5+l8PZEtxB z!<_hms6+vinmHe*E%l?<{k_{8f~MKez8Dtld+?CSSj|f0>$JW;mrJP*e)Cu$-ZLW& z2)M@O-WtvmW$L$aJJV(c>KXR2nV$o>IuL zfTl%z&<-)I!cp+y1Uyx86w{sZvgm=QjrSukiVO-N29aY+BH>fQLR_K$SpT@EKoVyg zS2;5H7IzX~&8bYR|s9k5}Ay z@!J>UVTAHh7>C&mM~j@q-IKmFw@w0uuxiKW?4$u%5-92spdKSHE*a`t-0d?(^ zFzPDvME~&jAIySDsF)`9<+hj#h{p7j2hUh-A-uJ0eDbwjV$TAJ6F8!~3-}~{=J`)D zy?D?-DeJ42?0`^KLO9%}=j{g>Foj8#L*pgTTrQ+4m^ND1@<5y8uYw0c% zQbIoQm}gPuQlI;_zg5E{S%DZw{qyInGw#Q-ngh$2O@B{?H0N=S#S<*gVh3wO-QAD_ ziloHq>fdD>up5z%lJ%CgRcyWBn1`iltrY!qg4a38tt#0Q?SlhwIH~{5 zrpDkX(6PP(p(pv!iLT7xsK5pp%UU_^UjkYfXi{juNb`xGeV!_X6AV=fwM$nLIpc-|p$Wy2d*75$kvFYwFPL%$cb!SM|~m;GNa&r0TApa_4u zT77-9K37229n~EOv~aAdU}@b_b!ER)+pG0#am>@`@Dbh1Q6;!;!rcG`Y2?|fr#U5z z?$e)u)+wUPe<;V>C6Tf|->F$LXe+ucD3%z#=l=d7OTBJM|BZKl!u?8Nk!74S=PT}z z{W6nJVHld}>d$PYP4-~TYv!8WO039^+F&5^j_%n?Nih+fN^|qy%!u><2>uI0xlf)w zKWpgBgA{5vyA5ek>EfI&OExUaTI`c@oY7x?Z6 z>}KdUM`N#B==D+bC1m%WwZkfM}qcWi9f)V)*?fJ!zhi|smYGbn*E^eE=e=uojF!s>a>`B$fY?V98 zd#+v{I|r9vo^N>x9VT;_oxA1Th==K5{08*1C0@BeiLWeg;D#>Xh-^Akq#knv|0dRFIhSs zJ|IHq0h8e5_dOzRJ?qoqZZZ#gqz^^aFxI!E+(^Z$IhP zSBex(C{V@l>z{y;#Aa7tHAz5H@~``$N9kb zb2g)%r`FEBUBnLwcj;e0Uir#i?ta~}$t85SxU;ove)H;ivxnfL^V5fA?xuG*b(L5x z$y}6R#!*b=GjI8d2Ff_3)Tejr^2t$r^5w)j#{9+9VQ{Bc*8#s|2I&D2Nc<+r(Kk(6 z+yq1c`J}`)rXOL=Dx=QdH2yB|v)yAyGBwqjYCp zid(7}V)AM4T9Cc*Et^aC$>PZgF);)9E3Z|o&9aoJ(dJXVt>SLv`7MTf!q;Xs7;1MX zR0`cjW@U=R6Nln=|&+g!#YiN@A5>)IWaL)?v^Q?DlFE z+JTzQvr)TTM0eeL5hB)*;LSr~(_TQthml2E2{8F(XaL9~Rcm8J= znSIS*Z6V0$TC6b}9)z8m0kKjV?}vzYP*`cxc}p%3HuE&@)QrpF7yt73+N1vbv3`4= z%>zt-F*Vy^`Ha|uxN(^~%6*T0m-?^`yep^QOJ=WpwreHcm>s;)6zf@yk?A-$o8iQK zOd(b@`JS)QcF@yLnrWwTOc&(T$NYLWOzmCppHqlD7(hBYp{yC%b#sThSqZ`|3{doL z_0_oh{>7+h~tWbAjf>~_+{Dd5!AI|zWUPvH#6ga!;*ZVgJI55uiKZ5T*4uZJ?eN%p7<~~LJoU5gE1S--o6;g)5^e=7-I0wMR4e`Sm$~Fl;B7M4g(ZiiQa; zudK%;;+JJ2Y#4;rnh;nn!)Z$VI||#uod@DNg?BhHHk|o5ygB0KgfpoI;SB|(psAqS zp9>!kKnS}X#QhGOW0}?%ob$$$=#xl4(_mzsh2A07m-zGmr>OQ;v?)cD%wchd#>_6S z6-I2WPh&@)H1?7nmM4O!n6a$7zDkrjp}HSF8b5Qf(!8m53{fYjwg zchKR(c9E0U-^(fp(P;?o-)C5E#;v?aETKOV$h~Cl@TSN^O;_J;^8`=i9H9!gIUH`) zJmz`l3@?B|Q_{N;36fDBxHGGldH!`Q$Nmr@I%~}01c^c!+Gq35t6ok7N2r#|zoRk+ma{;eCfC;-B@A^H3)#MK6!goFk6vVx62_ zzJ34O{N(qH7mW|iuUJeBeem&E!FZ*j5b)^B0{n>up(}dciXX}Z;r@gL+`sE&tjjTzQCdnUQtGX?1$we1^Nq2=~B11Z*04R%$IDU0oH#ihu&a zX0Rcf><;e+7~I&$p9ucT?7J(sA_`n+lgd%L(&OKGVbIzxK014qyeJXlW%w}+hdq$D*)-Nj5f4tS zK!awprX^np*x(cptrEF|&uLi9%S^ATcDw($3aspoXzPr+UF1-TKI!Y&=G;l@?6spG zTY6nS>K6uaD1QPMNORq(H&-G@|juT7UB&y>9ujZ-J7e}?H82C5YeZ_LPBCC_6d zG7+Zzo?*Y<>N~bOh_7O36h51_BhzED>?_~4%NAK`Gu&{CelYY&-_Wkxx_0FJoD^wT ztpDbiJ@3XW$uH2?^zlbbhU{tf8Cbn1w4cX3yz@xNfHIxJM`Rf*1epEOEfxQ;W&FZPK`~T zh!#P(=9=Ylq*eu8V5=>%vmO&^OEn%c>GGSQU%(hmz2a!5aG3LaA<{m0A=MBlcze*l z{ewAp^1QHR>4PrrHppPn)bHz+On}UbzJP$hHjm>|GFHYdn~QUrCqT>9=JV%hZU@*- z@f&^*Jzv{D$5Q|R6u%;<=oTas{UALuR~csicF6lQ`py@h7nfYL8dRhl$e^cxUTentOxxDa zRaOyH<^Eea11N10UB*BYgRgOjBo2WQ@%N5<-|(YygVsr)n1GdknI!&)y*iwY7t;h& z4W7Dd6lw3AfnK?X@yL=eKC)Ozc5YHIl2@^_%>-38aQCM8ZH;27$42x?h?SDkhYE+} zH@bqPTikbzqnh6a0jDGAkxf77AJoG@4EP*S8g(&y(gL8erbj z&%AiHEEasv!1slm6Hd^3c1?Ds*TcbU{Q2dE)yg7$(xL2(!XrEJlG0e^kdAu(vX5e< z8YD`{>wixHK(UVNoN?RMeVoTG?(~75;Y%Xo6Jv5^OW3#E&RXrnU#Z{UFA|0C(1y(8azNBah;X?4ErGIiHKmog&^;~66KEc?R;g>A~s^3eH< z@04#mDy+KeIzD%=YEvvcnw8=CGoCo==*WBf?wpTlQl0&P8?2Z3n`_BI>}2+p`i^c4 z#80yIzaUT=Vcp^?9U|6oI24ZRy-qGoV_%XKHq$#_?Ni>cmE{1&1Ks7Rw5GRul`QHW7Cx*!FYO)o_*#4a zh^y`Vs;^i-OGT>NeLyy5*kxTpwWgq)HPt|NoxUnRHF+nWzu&agIOWi`d>Vb=B!&H1 z&J6^D@d3zO+VXD`sS5d?><=ujH25nsv>vh(@(omlo;cEf#~v%`e7x3Ljv%q$7|^oI z`T8Q%K&A2Er=3H;(VjxK;Qc@e`x?i$F4HKH+DC!St*yJo-(cR4Z!`SnYz0kWjaSkP z8vh0X2TsR$J2}!jVfX$?4uLxt9o=(7LWexB{Jza{6vtB~fIIwgI21sh#)}y107zqK z6orYA5>B}bDUo54hb1){oyD1ElRF~{(j#2>$!%KGf(~klB@{;V-@Ns4o#CO-8`e)q zA2GogQP-89kasqi4-wj6hF~ezAmLRqWrBAAQOO-*1wa;`)m}|U4ZPA@rj5{F&!Xb- zgBfQ+I3OIvY#py&M92D>7J8He^3+Zj*;vE`uIgtt>b#y zef`47r~#oMippeyE@LA7{7d55rwqVEMR7Xk5a}*X%w#$vgr8YOlLrg{#si=Q@=oHn z%D{M8Ig!nBflm<9p&2 z>@=k+Z(@3}Od*UiE{HVQxLl{SXLOP;DJ3_eL{=VODgC()gY@K^bnn}7TT zv#;s7$#UBp>2;XnBd>mfEj%0wASeD2qV_g6 zhIYBOdrB}@rb5=Va@9t8Oa;n)OF;of-@uuev}?n*Z>8bl?45Adv@v2NbN0N*D9V1F zqQ04aLnUNAujqWpOD9%=f5~TLYkyT=K+1>qh6cM+*txmt}Fy9`9Lofnafn`DNs4B)Ac+Lw|XPQeBdQoSRp@&#R` z2s2^6s2IX$@0uKsY)gZ*2!XInaPez*H57cVG&+I$L7k%=0t(GgC^e6)6)K`4R>U7O zW|*kf(g;r4^sUhVmRHn_oL6v3K*OFqzQYs)eF{;bvJ|%JpOvUyxw>DOWd1Y8!)r+_bs zNeD%v@yZFPxlNcxKRJ_WEnkeU*~=E{k`?PuITn?Y!WLq?RYL z8B-NMH+t`@vIQ=B8ghkR2JBsemML3C>GFC+hP;;lm4|SO^uMMLwm4~X9Cs;C&0|O+ zj(7JfBoV)*I7OMuq1b>l#{mI{64ATTR3doJUOL%g_{u4G$a}kFMvT*99m!RmeS|G# zfkP*o_^?n%)F5HggK;KD<69tx{@uvt`&NEC@r%^)4G)X;7-H>2Q89hQ&p?o8RW(Un z0aX)l$(tZMlyI8W(FDa@ZhbVoG`nTki0JNAU0r+xIjI=Al7b{TA2_ny=i>e6lWXby zLzl$*MuPz|*D=rG#-YSc*KXGFB!8X-`vh=6AWAC&f*wg+{<0~Bc3M)II3WstML1%5 zQIANz)EBm5a}Sx#!Z};1NU59{y5zi$yZjjNuU!hK83B?Kj^q#PDIP+;8eZw@CX^`xCY;)!SU3{)L)OWyA*oE3R&LNRnGUGx)*>JbLqck z#Ne!Tb?dp_Hu4Bv9+HWmHm(>tHE;^i^UK@Sjp*^DPv7^&YR&?9vicjiLtU~K9y`8n zat%E4JYz93b zi^I{-JcKuy03PC$Z%e*O@E&xStmc+CySwgV0#r<6B?a}AEM+wRQLU}p;A7u z3Y;ctxDwNvmP=(CVGA09#fv%9$JLaL{(A}lTvGT;)=>W-bRINV$eM(l@Y`rcGpU!2 zG*l)@Q7-&=Jw*c4_#_G*j|?|FG9bcOcX;F0u$~GtNN-cNM#ZYCfdj)rKIl!>))S${ z*V=@oC&=`af{fkntV!|^=}0439$T%}DK|AiK0%Dy!JZ4q{(;gmVbFYdQ_@pFm#3mL@U$7X(TyE;Hg-ol{K>XBVJB1x6poDbOmnC8uefnabGv zQ=7?;&JIchtN^qz$9NN1KBWp%6!UpfRYVkLMONzY+hhSH(EJ!$%Pq~ooj?BIh|h|6 zAQ(8jGlR)N4Fz0Ra0>^vVE0>e<(%t9){ zt|Zti6SshgZFMimxYok#9URGGwu4IZ{8-Y&^nvBf@c634o^s6z@{crX zuRrQd90xsr+5kOmDTL%is!irmVYH;$T_L0Kgk97pSY{N&tT=@37Ppx5?yqp62%QAl z+W0X-d9N8Za2^h9ppFWvvJo{%qr6I+bEB87u@};p6 zz)NB}P3IZ`c^qK{htLBk)p09l9Qg2;+IpP?9$6S_yhV{1T;U?oD_w6($&}|WjKZfO zHsu&XvjHxhY5B7>q(VZ+=9KTPD!6E?xJpT%n5KKd@-A-#W>s|i8pHAq-soS-4y@mbEt+?4a@_oZin?piysn&RVc42OHeTzZ2mp9;0Fn_(+=j;^;-Y|cD1 zzUHncH+a$fXm?2-5l%~sk4KP`wq`9dp2h1Ij~iCmF1dVUcvUDDsDfP${)U6 zTK`ohWF^R&f57mai{-fh8lXdg7gL8VWezDfpMKpbzAEpW4id7CW?#{>9we72^^Oox z1yXl?$Qza9df)<$)>m~fW1v&!wbcG9jGCPvGLDR7P*WZ`jbdS7SmS};R%)UjlD8oM zBNYiATyB6O8EpRx0wo9TDd5nDS2&sij@!yZS$h3hv~;h~zU*C#j0p=1$(I#%0D$eB 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�Q*EZ8Ie8931eN;&0vey8CiREYyGAZgKS*yhL$c# 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

  • ycIJ2^CxEhay~zjF#|*QG$we3};q!?MXG}uxRlu?w{^f8=#f z1!6djX#hdNp~{468?+4+1cJKUiHLDr|0fs(&vDm8zJFBuYo9vU?8JLSilDB5rJQ!!kgb-_NL;u&x`RwW$VZ;n>I{Y z%_GmoTMPj!?*XfOM~XpNdmr|mrcKM#U@Krk9_Cc`DbV>@)!*wftHB^UK;>IARzkps ig$lrp|MT&wJy>d#5(VAqAft4&G6)3v&lmB3p738jeTYQ> literal 0 HcmV?d00001 diff --git a/apu_mixer_recordings/square.mp3 b/apu_mixer_recordings/square.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..033908e5f346d3ba9a460586b5ff82482c90db06 GIT binary patch literal 124604 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 P83q90Ut0SAW|{v2Vj+W+ literal 0 HcmV?d00001 diff --git a/apu_mixer_recordings/triangle.mp3 b/apu_mixer_recordings/triangle.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e135f7ac125e344a67d52b1f6537047d57dd4771 GIT binary patch literal 64784 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 literal 0 HcmV?d00001 diff --git a/instr_test-v3/readme.txt b/instr_test-v3/readme.txt new file mode 100644 index 0000000..48f07b4 --- /dev/null +++ b/instr_test-v3/readme.txt @@ -0,0 +1,387 @@ +NES CPU Instruction Behavior Tests +---------------------------------- +These tests verify most instruction behavior fairly thoroughly, +including unofficial instructions. Failing instructions are listed by +their opcode and name. Serious errors in behavior of basic opcodes might +cause many false errors. These tests will NOT help you figure out what +is wrong with your implementation of the failed instructions, simply +whether you are failing any, and which those are. + +all_instrs.nes tests (almost) all instructions, including unofficial +ones, while official_only.nes tests only official ("documented") +instructions. The *_singles/ test all instructions, but test the +official ones first, so you can tell whether you pass those even if your +emulator hangs on the unofficial ones. + +The nsf_singles builds audibly report the opcodes of any failed +instructions before the final result. + + +Internal operation +------------------ +Instructions are tested by setting many combinations of input values for +registers, flags, and memory, running the instruction under test, then +updating a running checksum with the resulting values. After trying all +interesting input combinations, the checksum is compared with the +correct one to find whether the instruction passed. + +This approach is used for all instructions, even those that shouldn't +care the value of any registers or modify them. This catches an emulator +incorrectly looking at or modifying registers in those instructions. + +This approach makes it very easy to write the tests, since the +instructions don't have to be each coded for separately; instead, only +the different addressing modes need separate tests. + +instrs: what opcodes to test, along with their names. + +instr_template: template for instructions. First byte is replaced with +opcode. After executing instruction and anything after, it should jump +to instr_done. + +operand: where to place byte operand for instruction. This value comes +from the table of values to test, using an index separate from that used +to set the other registers before executing the instruction. + +set_in: things to execute before the instruction. On entry, A is value +put in operand, and Y is index used in table. + +check_out: things to execute after the instruction. + +values2: if defined, set of values to use for operand. Default uses same +set as for other registers. + +test_values: routine to actually run the tests. test_normal does what's +described above. + +correct_checksums: list of checksums for each instruction. Generated +when CALIBRATE=1 is uncommented. + + +Instructions +------------ +U = Unofficial +X = Freezes CPU, so not tested +? = Inconsistent/unknown behavior, so not tested + +00 BRK #n +01 ORA (z,X) +02 X KIL +03 U SLO (z,X) +04 U DOP z +05 ORA z +06 ASL z +07 U SLO z +08 PHP +09 ORA #n +0A ASL A +0B U AAC #n +0C U TOP abs +0D ORA a +0E ASL a +0F U SLO abs +10 BPL r +11 ORA (z),Y +12 X KIL +13 U SLO (z),Y +14 U DOP z,X +15 ORA z,X +16 ASL z,X +17 U SLO z,X +18 CLC +19 ORA a,Y +1A U NOP +1B U SLO abs,Y +1C U TOP abs,X +1D ORA a,X +1E ASL a,X +1F U SLO abs,X +20 JSR a +21 AND (z,X) +22 X KIL +23 U RLA (z,X) +24 BIT z +25 AND z +26 ROL z +27 U RLA z +28 PLP +29 AND #n +2A ROL A +2B U AAC #n +2C BIT a +2D AND a +2E ROL a +2F U RLA abs +30 BMI r +31 AND (z),Y +32 X KIL +33 U RLA (z),Y +34 U DOP z,X +35 AND z,X +36 ROL z,X +37 U RLA z,X +38 SEC +39 AND a,Y +3A U NOP +3B U RLA abs,Y +3C U TOP abs,X +3D AND a,X +3E ROL a,X +3F U RLA abs,X +40 RTI +41 EOR (z,X) +42 X KIL +43 U SRE (z,X) +44 U DOP z +45 EOR z +46 LSR z +47 U SRE z +48 PHA +49 EOR #n +4A LSR A +4B U ASR #n +4C JMP a +4D EOR a +4E LSR a +4F U SRE abs +50 BVC r +51 EOR (z),Y +52 X KIL +53 U SRE (z),Y +54 U DOP z,X +55 EOR z,X +56 LSR z,X +57 U SRE z,X +58 CLI +59 EOR a,Y +5A U NOP +5B U SRE abs,Y +5C U TOP abs,X +5D EOR a,X +5E LSR a,X +5F U SRE abs,X +60 RTS +61 ADC (z,X) +62 X KIL +63 U RRA (z,X) +64 U DOP z +65 ADC z +66 ROR z +67 U RRA z +68 PLA +69 ADC #n +6A ROR A +6B U ARR #n +6C JMP (a) +6D ADC a +6E ROR a +6F U RRA abs +70 BVS r +71 ADC (z),Y +72 X KIL +73 U RRA (z),Y +74 U DOP z,X +75 ADC z,X +76 ROR z,X +77 U RRA z,X +78 SEI +79 ADC a,Y +7A U NOP +7B U RRA abs,Y +7C U TOP abs,X +7D ADC a,X +7E ROR a,X +7F U RRA abs,X +80 U DOP #n +81 STA (z,X) +82 U DOP #n +83 U AAX (z,X) +84 STY z +85 STA z +86 STX z +87 U AAX z +88 DEY +89 U DOP #n +8A TXA +8B ? XAA #n +8C STY a +8D STA a +8E STX a +8F U AAX abs +90 BCC r +91 STA (z),Y +92 X KIL +93 ? AXA (z),Y +94 STY z,X +95 STA z,X +96 STX z,Y +97 U AAX z,Y +98 TYA +99 STA a,Y +9A TXS +9B ? XAS abs,Y +9C U SYA abs,X +9D STA a,X +9E U SXA abs,Y +9F ? AXA abs,Y +A0 LDY #n +A1 LDA (z,X) +A2 LDX #n +A3 U LAX (z,X) +A4 LDY z +A5 LDA z +A6 LDX z +A7 U LAX z +A8 TAY +A9 LDA #n +AA TAX +AB U ATX #n +AC LDY a +AD LDA a +AE LDX a +AF U LAX abs +B0 BCS r +B1 LDA (z),Y +B2 X KIL +B3 U LAX (z),Y +B4 LDY z,X +B5 LDA z,X +B6 LDX z,Y +B7 U LAX z,Y +B8 CLV +B9 LDA a,Y +BA TSX +BB ? LAR abs,Y +BC LDY a,X +BD LDA a,X +BE LDX a,Y +BF U LAX abs,Y +C0 CPY #n +C1 CMP (z,X) +C2 U DOP #n +C3 U DCP (z,X) +C4 CPY z +C5 CMP z +C6 DEC z +C7 U DCP z +C8 INY +C9 CMP #n +CA DEX +CB U AXS #n +CC CPY a +CD CMP a +CE DEC a +CF U DCP abs +D0 BNE r +D1 CMP (z),Y +D2 X KIL +D3 U DCP (z),Y +D4 U DOP z,X +D5 CMP z,X +D6 DEC z,X +D7 U DCP z,X +D8 CLD +D9 CMP a,Y +DA U NOP +DB U DCP abs,Y +DC U TOP abs,X +DD CMP a,X +DE DEC a,X +DF U DCP abs,X +E0 CPX #n +E1 SBC (z,X) +E2 U DOP #n +E3 U ISC (z,X) +E4 CPX z +E5 SBC z +E6 INC z +E7 U ISC z +E8 INX +E9 SBC #n +EA NOP +EB U SBC #n +EC CPX a +ED SBC a +EE INC a +EF U ISC abs +F0 BEQ r +F1 SBC (z),Y +F2 X KIL +F3 U ISC (z),Y +F4 U DOP z,X +F5 SBC z,X +F6 INC z,X +F7 U ISC z,X +F8 SED +F9 SBC a,Y +FA U NOP +FB U ISC abs,Y +FC U TOP abs,X +FD SBC a,X +FE INC a,X +FF U ISC abs,X + + +Multi-tests +----------- +The NES/NSF builds in the main directory consist of multiple sub-tests. +When run, they list the subtests as they are run. The final result code +refers to the first sub-test that failed. For more information about any +failed subtests, run them individually from rom_singles/ and +nsf_singles/. + + +Flashes, clicks, other glitches +------------------------------- +If a test prints "passed", it passed, even if there were some flashes or +odd sounds. Only a test which prints "done" at the end requires that you +watch/listen while it runs in order to determine whether it passed. Such +tests involve things which the CPU cannot directly test. + + +Alternate output +---------------- +Tests generally print information on screen, but also report the final +result audibly, and output text to memory, in case the PPU doesn't work +or there isn't one, as in an NSF or a NES emulator early in development. + +After the tests are done, the final result is reported as a series of +beeps (see below). For NSF builds, any important diagnostic bytes are +also reported as beeps, before the final result. + + +Output at $6000 +--------------- +All text output is written starting at $6004, with a zero-byte +terminator at the end. As more text is written, the terminator is moved +forward, so an emulator can print the current text at any time. + +The test status is written to $6000. $80 means the test is running, $81 +means the test needs the reset button pressed, but delayed by at least +100 msec from now. $00-$7F means the test has completed and given that +result code. + +To allow an emulator to know when one of these tests is running and the +data at $6000+ is valid, as opposed to some other NES program, $DE $B0 +$G1 is written to $6001-$6003. + + +Audible output +-------------- +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason. See the source +code of the test for more information about the meaning of a test code. +They are found after the set_test macro. For example, the cause of test +code 3 would be found in a line containing set_test 3. Examples: + + Tones Binary Decimal Meaning + - - - - - - - - - - - - - - - - - - - - + low 0 0 passed + low high 01 1 failed + low high low 010 2 error 2 + + +-- +Shay Green diff --git a/instr_test-v3/rom_singles/01-implied.nes b/instr_test-v3/rom_singles/01-implied.nes new file mode 100644 index 0000000000000000000000000000000000000000..6bddb187fe138705057fcf233b3bede85bbaa942 GIT binary patch literal 40976 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 R2mwNX5Fi8yfnNxLe*?15o+bbQ literal 0 HcmV?d00001 diff --git a/instr_test-v3/rom_singles/03-zero_page.nes b/instr_test-v3/rom_singles/03-zero_page.nes new file mode 100644 index 0000000000000000000000000000000000000000..2ea31f74b41ee4d32b86e41e39af4668d71950a4 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/instr_test-v3/rom_singles/04-zp_xy.nes b/instr_test-v3/rom_singles/04-zp_xy.nes new file mode 100644 index 0000000000000000000000000000000000000000..89b7eacafaf79d8a69834eef5f97c0529641cbf2 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/instr_test-v3/rom_singles/08-ind_y.nes b/instr_test-v3/rom_singles/08-ind_y.nes new file mode 100644 index 0000000000000000000000000000000000000000..d4ea1bb07368b1e4176b2704bbe156249a365fe6 GIT binary patch literal 40976 zcmeI5dsI_b_Qy{W2nZoWouBV73RSQhU5>8QyK+<^e|1<@bat? z2V{F2FlsgrV{gOZmdiejfZHKApS>did*`utvm0*tqq8NSdHb$_e(|B!Z00dUp^C!g zXBJMJaY*6#Qm;JHuzU8IJ%QWD#cha6cTO!o9k^%l+Pno9=1kJQ_B?O;tHbi78%N$L z@_Sc2qDlE|YWJGy=ul2+>n{EOAKC+|0t%nbDnw5ISx&zkK7*(##PBGENu7folYV}#20@j<23*n`SOd!_t`%02 zxu;f)6uAl`atd)v3mA*U%wtV~#x7>~_E3uMsn`zH`8{Fz_RLkzYK6Ey8$6kW)i-E} z@qBx0ZqCC(={X4gJgZd!mXBKt@8_}|O5e+BO)$!;8G8>ITQ1NX)KDlW)ggiZl0`7o z7Dd^koc=NaObey-Y?CNDjP6B;(-Bl`lx(bm-La;?1a*WuT-__Zus7`6h~)3+2y=LH zDIIR^mAnLSLWi!ws`&#*CCSttvGLQQgmY5W=I`g9p%Qy5q6n(lXYo)@Gz=v1;ww%(d}&?$k*L z(BnK<`#`{gjM&86Ce8{q-ZHs&iqA36?4b_ku@Ra09&4=W>5tZfyOD!=R_>^VBZqlP zLE~6o1+s@(!e*rf5d4jl&QWFn6;Ug1PGo9IzN4X(~y`f^`Sub)zG~)bRUJex5C`lE|r_5UrC)^l!lJh(ESwV zXobChe1u%Ckm7nr!tk8uus`b^LCn)Yg(U!|w^;0Ou2}NeGbfJS|J=5i`~e}-Pb1Ha!6 z%SM^lZtQQt*|KjMd3>f59L*Rz+OuLzsDj4_+z!~Da1w=B*qH&7gYD&3f9BqSm~AoO z`@EfIZ_tK~13uZzQ_pn4j2Zl~#{=r&k)j7!0)+#H!w2fj1A6d4s452>m!WBa-VB4- zr2+{mFSaXwoO#c@Yaq7wLz!`vn;CDBK+m!5xp107AWxr0r)LP=p4rTOSgvyKs5Awz zpOlmXhU949HUN?eDD$Lv?raS62(XzD1o5LRTksbhmL>y_vJ@KllqJO=piETOAd4S8 zkTM{O`Xq*L%V7oPN^GkJmm9)!{HzHqF=KF{c%WPzmLcK#qalVm7~i9yC)d?eDcn{ zU!I{JE3f|I#)|v%&u(^Hp86!SX7Q~JZEL<+>eAFsD;l~lxM1?Ou&ohazPeX*3?G{K zLDbQKx#BC4|$)B zJR#jN&h&~o=C{L73Uem?wdY5%M*{Og_Y5kD-174;-n{VkZF#-+>B{FbFRpF*&ACU* z8|U2FWc}6G^S*trN%0_cXF$b>?Ed*<_mBTw@ACLRpnErWRF3F7YtxEF!U_9#oqpiH zkau`u@Z$81Gb4u-Z>?><;69ueJTZOo%#A}Lw-z_o-n>`2qwk1KvlgwGAl$Y8!RfgW<_8VE6-Pr!{>~6CR%}Y`0NA}Au zZErmL(7YSTQsynuP728_cv4l@QbJ4cnxv8al=}9@>{9dYvkz0|A=#vmCE6!dxdkP3 zUCWvz2@aX0T~hU=AeSy_sY_aeCH+R~m5uGC*}KgT&(2GcA-=yTI8&3NZfv^394#)d zC^>TCWW&w+iy3Lu3V~lpkap!V6;Bu%c)YNz^6HJcOV_Snu02*%dI|-Id#p-dp4!yN zTq!xXS$5;0RLD~;TdBQNcjIbhS>f?hrA5bTFJHfwx;%YV4{-phH7EY!vT367`d`ORzxKuW zDHloy{Oa7PA@lxrZ1fwpqPVx(^8!}i-Ger^<@DHm>of5?54ZMN_5HSf=}!&e%b#!W zm70HP)};M)umAkujcKnOx;k}S+4)7dvTE+o1V0Y4405w)9VPeiTJL*&$is`fc*$zc903HC~x1voy(n zcDQljpz^;jh^?qzJo4z7rNfKQuJ!-pw{P=5zoQTSee1iT-OZWO4<2h`vhJru{;pHq zGuy44mW1Or4U2yhEm+7sO?`c?&o*a1XIn63s?U}*t@~;AG@otyocUZ7+$?Kua839J6=%9Gs_3?4$cy2;B7G=V^Gdh-nL_dZ$j z%+%ZXD4Tf>ua()?%L4H@o+XKWtsmfht#3l`{TweoO747SaqD!mqvYwyTXv(IfLNZI zryR$-g&4o8>r8_RUZGzuU}}{CFTLbTcCkPIVp#tJ=4{7SyU_t(I=yuL4G{n;vl*ov5vGK~9`@S-XU6J*SD3 zwaW%&PF*(WUnWDG>dv<4vaZr0jPwj@GU7BrYqPm*HpD3mp8X(B6V+C$Rh|nDa7|_e<9!mew^BB8k`L^;O|rT zN)fKj$RnV(yDnEf8;?`_V^`C8DEkz+!lh^VdX&uzGV$ccDr>)5v!PqrdbU4K^){=X zonKD7U^3bHR-^i`UDAE_G!J#br;5C^C?*MY}u!3wVF*Gaq1FBC#;6`$7z2L zm;Q)TIn2ID$VZ$e!p0JbfS*q#Fp=!y=hV9qTwXygWTj-DXHF5)iS&>^r&eocO%2R1 zr(mzK*67%JkBY#%rbdrAW$j&7Z#}EgGMSF$!zn`GuZIQhQ*YcFU;G-_%dnflzgxXW z(Q4n3wAyO*Og#8|m34;8(}-1s?zrmf>tE1@J1{^fbDGGag)*m*UnfjFtYEKt#s`NK zrww=5b-}jxs?Mqtbwb&vGCgz~4deAGg5Iucq5cKcvEzcWM`3jA`H46MtBxICxBB>i zzlT#7?CdV6_o^69N2yedIQ1+CSTCHehSO9kU5z-U9^^qTa0L34eSYzJ;ZFg1Bm@Wn rLVyq;1PB2_fDj-A2mwNX5Fi8y0YZQfAOr{jLVyq;1PFnj2!VeB>20#8 literal 0 HcmV?d00001 diff --git a/instr_test-v3/rom_singles/09-branches.nes b/instr_test-v3/rom_singles/09-branches.nes new file mode 100644 index 0000000000000000000000000000000000000000..047b5c91245888c4f351ed6a29dc6302b7a48423 GIT binary patch literal 40976 zcmeI5e^^u38OKi&2){yzC>Rytps1*zu~SDU+NiY#mRfDQ+FIQ%LPEd@h*ndVT06az z+Q#Cn8@1DAkvQV2LlFfO%&bj?GQA=q_zQ;+5^5z{wWt{O-Xxdmp6z+|Jo|4wmw3MS zob#UdocD8n@Nn{n3+BBtoX_JS?&&8FAwUQa0)zk|KnM^5ga9Ex2oM5<03kpK5CVh% zAwUQa0)zk|KnM^5ga9Ex2oM5<03kpK5CVh%AwUQa0)zk|KnM^5ga9Ex2oM5<03kpK z5CVh%AwUQa0)zk|KnM^5ga9Ex2oM5<03kpK5CVh%AwUQa0)zk|KnM^5ga9Ex2oM5< z03kpK5CVh%AwUQa0)zk|KnM^5ga9Ex2oM5<03kpK5CVk2|3si5a$fj8^WbIZCLL}b zvJ8Do4>m_EL$~N5HK>P<*c(Y99$)_M#`pR;Ekek(5D8rj61ik3+$BL$mkUL^%21pu z4^40}d^$ln;|A*I@%;iNSiaF@+KG*w7DOkOf>u4#j*qotL%TUqn&nrA8Hah2OQ4)> zSBBe7f|A6F@K*f|#{YD^2A)wFgx3=iqV4?66VD1%V|6((WL z%k8_2f_mnAi`6hxZb1f#ynBCy+)_lxTM%}(TlyiP=s07*=E+r~+UYS>quc4RRdMa~ zI2>@JWOAXTi>fY|vNzu0FbcN>rR`o_Zoj}L!jo-<(OfbhO%wzVB zEg2WDGztRg@tT4O)ddsxPTARlQM-9On@oVDn0=YZCJB&~$OODi6gzM3khSbjng6CFre*TTE8YLo#Qv9!yStThy8cVse`n?l zs0%22m|BKh{;4j%B0httI>hiOh29x_{$hK@i*u_q1Gcw|ep10G!5u@5YOqaqa^e5OOA7$3$8RTo^u&k|Utbx#nS}LMY4GuQOJ{M>-7@KEaQ?WUQvoF(c9z{P zW;>L=Q_z`Yl+`o#AQ_u4)$G$yC^*9*f&Y?4FwQoVvJZ9n%LFhjl+v?phSK5mV0s80 zLB$P~J)>ZEtSK-_9ibkg9-Lh^4EAkA%C~fcc}PknJ;XdXWfN@S@D!X>&s?U%_eN?c zT-0e2RD=WFdP%Qxdnbe^I4EunM@(R$1cI|53KAY=zr|`g&n82dq#&ZcY!f99qz#PF5KOPr#PS>LT(zo3(4yx4=qy_7PPMv zT*SixLD9hjy?M;c!C2Czz&Q?$@^Uwh>{8}B*s)D@*73@C6e9u}FQjE@RT;sE8hFQ} z5uVH*M1W2+;Ex5Dm9s{bpOdD=s{H)i`~i`E(kMTH}!85 zpJpD}!yL?gBQo(lrE#W*Ka}p_dVH|Qou-HNs2Asa0eu; zbO;y%VgxJId#RH#u<~EhU$Cl>|LJTgT8e77= z?JWIZFTe&rkCT3*)Wicz_{fCyOmCs&UU4WN8xWuJo)!s+FAMY*(_QrzrFno#r@_Ghyr zn0Xkeums@j4vQVm70Yh+%!y|=IS=OFz>^yU@+`N3FSmpR$qYyi#?x54;~u*t=M;%| zr9inK>ts4x`I*m&rJsi2=@ddi0JP@kR0mo%nR-iY+V0NiMfXZ`D#Sb&@nRgBN_I@ZcuIp!} zStQVNoU<5CQ*h+z)9CUHVZgGGxed!z?j4n;6!w#na=?%r&dsq9R6vy{#M7r@n0tWD zgusa(W!Z>7@3ves@F+`}flpb|3qNtBz_(mRV=WU}3HQPqnN5QE) z`tuk*h0D4DCk0LrhB%b(+bQsb%N)u)$G`i%#g)mPOE@l!>R(!)XJ7Y^H~*f~JEtl3Xy|82 z2ZsD+F#Vh*_zz>tMt(Tu&wjs+ubo^a*fHHW{G+#fe(?o$UwP^0S2J(Fd}@Q^!rTYB z4NI=C?OOHqGPkDj`Gezjg_O?P9KI>yug~rj9l`r&yf^glsABOSgUZJgNcJVy{i<^{ z^Fm+tqm>tDx34+#y6U@>HhuR(+v30d`r8F9%kT1jpLk5Vb*kwn=9mvA92XYN{L7&C z;|>Mx4*PU;MdZexeg4MTw{FOrwGUT3o_{XCTcR1B%2w!RQsT=xU_<9>R2^ffo16!?V(Yga5+ z@q}T4N6V^eFI{aqfBDLV#v=zSPoMyC(8}!ejBBmT#qz^7)&BetktSE2mX(u9`3ZtU z4^ax$J0d)zwSqn^tI5%Z0qaumBV!&R&_3e&urGg@Z>K39wVrEkYdL=GP(^U4pCFUU$_We;@>I)LXwNrYy;NIOcJxH$ z!6S_qu3XMY&t4fM4nU3Ol>5GzWU|(KRQ+ki+k4cw%Oke{M|ovVZXVj9YNn&5%tld^JaVhWos zRI=&3MQl3v6*hg1O@B;hBZ-v|AOr{jLVyq;1PB2_fDj-A2!a160iY=B|Uk z+;Mtth6-n`#&5yZKVJSe&QPsQPs?9338$=Ki*rDMP#%r)fwR#PH`K1>p zA?}VBRPxC39^AoM0u8*424oB_dZ^s!{twV}zI*?gPuy_D?O?uFBHw+ot%s>D$g>Tz19!#UhA6>jV!!`p>o$FOTSLHV5mGhW#bN16cEQ#^ORG0*Ae4a zcZF$D!4>+2Ql?QE@YG+gDQ@=XKMd(;^taVnifB@6Xn@6+XKkyNIB0dX2NJt}F1dIsWDBocZ2aViu+MhwWR!eBlayy{ z_KYONsWgcVd;{WCZxbi$uDcPZ8${A%p-qoCjY`%wxFIG^`>cIJww}{u%GzgxJg06O z^e>YkPIad`bOi-^#Hrq9+aMI_pg*rdoNTQB`j7IJfyw|CgvTixwkL9*0$h=&-m7|> zFiM7G;NPps>YVHxY8K)&No%vYZ8pRy44(ZUPLtJEt5uy0_FnC6u-R-4y@*q{)!JvZ zy3x~W_2sQ-7G*tSQ_mVuXbs)j5U0s3eku6(X|xb<0zXb|4K1#g2C(-je5DA_2ILV? z+by@dnf1r1{l5F!8OZw-xWc1n`FfO%3nKBv$0}QXsbTGavh{3#oa${>Jv+ag_Q7Pb z^U0~lE!01uxAaL8Ht*ABxBC{1$L3Qg)w6k@s?};Xbi}D!9F>#@>yOiD50_}fsT^is zB;+GblVM|tM8MCd5|~JK@pJ0k2yU++H?mSP&pW3G=|p;npHr)~x1j;%ms2Qjur}z} zdXI|0x}iajIAzQGtloN7qhvB2%ZF2hz+Mjv+^1f@4L<)3u$N&sgZ+SdkD@%^k(6h( zdL|z1y~-NH<7vbyLO0#b&CO3}%S{*{!Eziqn>x?7Cpv zdsS!EiFzULQ<)yRje_y|6hUuSv{3(q>ez8X-lH%&_WVSgLaB}&-+=n~fW3!PAMETt zsQ0QEPDiO!j5zfy2Usth=D}$ymF6K%sXMzN7B~WZ%DzAOJn^f5yb=P003kpK5CVh% kAwUQa0)zk|KnM^5ga9Ex2oM5<03kpK5CVk2{|SMA0?z6$g8%>k literal 0 HcmV?d00001 diff --git a/instr_test-v3/rom_singles/10-stack.nes b/instr_test-v3/rom_singles/10-stack.nes new file mode 100644 index 0000000000000000000000000000000000000000..0483966867e372eb564b54acb7d3722ff8ebbf39 GIT binary patch literal 40976 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 HM+p2MMSdSq literal 0 HcmV?d00001 diff --git a/instr_test-v3/rom_singles/11-jmp_jsr.nes b/instr_test-v3/rom_singles/11-jmp_jsr.nes new file mode 100644 index 0000000000000000000000000000000000000000..e4c1884b249ddf7516e12b72438c65862766377a GIT binary patch literal 40976 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 EFQjg900000 literal 0 HcmV?d00001 diff --git a/instr_test-v3/rom_singles/12-rts.nes b/instr_test-v3/rom_singles/12-rts.nes new file mode 100644 index 0000000000000000000000000000000000000000..2f308be5d05426a7166efe9e4e719cbe943c5b77 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/instr_test-v3/rom_singles/13-rti.nes b/instr_test-v3/rom_singles/13-rti.nes new file mode 100644 index 0000000000000000000000000000000000000000..d8f090b220e29aedd57382ebda7241efc4e5e9ee GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/instr_test-v3/rom_singles/15-special.nes b/instr_test-v3/rom_singles/15-special.nes new file mode 100644 index 0000000000000000000000000000000000000000..2fa10df3af9a5f4165ff79ac23efd132ed7990f9 GIT binary patch literal 40976 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 K01@~operand + sta <(address+1) + + lda #<(operand+1) + sta <(address+2) + lda #>(operand+1) + sta <(address+3) + + ; Be sure X doesn't have values other than + ; 0 or 2 + lda #0 + jsr :+ + lda #2 +: sta in_x + lda #$A5 + sta address+1 + sta address+2 + sta address+3 + test_normal + rts + +correct_checksums: +.dword $C7123EFB +.dword $A914111E +.dword $78FDC202 +.dword $727A1EC0 +.dword $0CCBE904 +.dword $918A9806 +.dword $47A2405D +.dword $9D5AE8F0 +.dword $57CC5810 +.dword $686F6585 +.dword $41CCD775 +.dword $1CCC0373 +.dword $54931D9E +.dword $D221ACE3 +.dword $2F5C514E +.dword $47A96694 diff --git a/instr_test-v3/source/08-ind_y.s b/instr_test-v3/source/08-ind_y.s new file mode 100644 index 0000000..cbfa3bd --- /dev/null +++ b/instr_test-v3/source/08-ind_y.s @@ -0,0 +1,87 @@ +.include "instr_test.inc" + +instrs: + entry $B1,"LDA (z),Y" ; A = (z),Y + + entry $91,"STA (z),Y" ; (z),Y = A + + entry $D1,"CMP (z),Y" ; A op (z),Y + + entry $11,"ORA (z),Y" ; A = A op (z),Y + entry $F1,"SBC (z),Y" + entry $71,"ADC (z),Y" + entry $31,"AND (z),Y" + entry $51,"EOR (z),Y" +.ifndef OFFICIAL_ONLY + entry $13,"SLO (z),Y" + entry $33,"RLA (z),Y" + entry $53,"SRE (z),Y" + entry $73,"RRA (z),Y" + entry $B3,"LAX (z),Y" + entry $D3,"DCP (z),Y" + entry $F3,"ISC (z),Y" +.endif +instrs_size = * - instrs + +address = <$FF +operand = $2FF + +instr_template: + lda (address),y + jmp instr_done +instr_template_size = * - instr_template + +.macro set_in + lda values+1,y + sta operand+1 + + lda values+2,y + sta operand+2 + + set_paxyso +.endmacro + +.macro check_out + check_paxyso + + lda operand+1 + jsr update_crc_fast + + lda operand+2 + jsr update_crc_fast + + lda address + jsr update_crc_fast +.endmacro + +.include "instr_test_end.s" + +test_values: + lda #operand + sta <(address+1) + + lda #0 + jsr :+ + lda #1 +: sta in_y + test_normal + rts + +correct_checksums: +.dword $C34014B1 +.dword $AD463B54 +.dword $7CAFE848 +.dword $95D8B24C +.dword $0899C34E +.dword $7628348A +.dword $43F06A17 +.dword $9908C2BA +.dword $539E725A +.dword $6C3D4FCF +.dword $459EFD3F +.dword $189E2939 +.dword $B1EC2D77 +.dword $2B0E7B04 +.dword $43FB4CDE diff --git a/instr_test-v3/source/09-branches.s b/instr_test-v3/source/09-branches.s new file mode 100644 index 0000000..0d9b825 --- /dev/null +++ b/instr_test-v3/source/09-branches.s @@ -0,0 +1,47 @@ +.include "instr_test.inc" + +instrs: + entry $90,"BCC r" ; PC = PC op flags + entry $50,"BVC r" + entry $D0,"BNE r" + entry $30,"BMI r" + entry $10,"BPL r" + entry $F0,"BEQ r" + entry $B0,"BCS r" + entry $70,"BVS r" +instrs_size = * - instrs + +zp_byte operand + +instr_template: + bne :+ + sta operand +: jmp instr_done +instr_template_size = * - instr_template + +values2: + .byte 0,$FF,$01,$02,$04,$08,$10,$20,$40,$80 +values2_size = * - values2 + +.macro set_in + sta in_p + set_paxyso +.endmacro + +.define check_out check_paxyso + +.include "instr_test_end.s" + +test_values: + test_normal + rts + +correct_checksums: +.dword $70FED976 +.dword $423DD402 +.dword $EFA864F5 +.dword $987425C4 +.dword $3095ECE9 +.dword $4749ADD8 +.dword $D81F105B +.dword $EADC1D2F diff --git a/instr_test-v3/source/10-stack.s b/instr_test-v3/source/10-stack.s new file mode 100644 index 0000000..d7f72a7 --- /dev/null +++ b/instr_test-v3/source/10-stack.s @@ -0,0 +1,117 @@ +.include "instr_test.inc" + +instrs: + entry $48,"PHA" + entry $08,"PHP" + + entry $68,"PLA" + entry $28,"PLP" + + entry $9A,"TXS" + entry $BA,"TSX" +instrs_size = * - instrs + +instr_template: + pha + jmp instr_done +instr_template_size = * - instr_template + +values2: + .byte 0,$FF,$01,$02,$04,$08,$10,$20,$40,$80 +values2_size = * - values2 + +zp_byte operand + +.macro set_in + sta in_p + set_paxyso + + ; Clear bytes on stack + stx $17F + sty $180 + stx $181 + + sty $1FE + stx $1FF + sty $100 + stx $101 + sty $102 +.endmacro + +zp_byte save +zp_byte save2 +zp_byte save3 +zp_byte save4 +zp_byte save5 + +.macro check_out + php + sta save ; A + pla + sta save2 ; P + pla + sta save3 ; PLA + stx save4 ; X + tsx + stx save5 ; S + + ldx saved_s + txs + + ; Output + tya + jsr update_crc_fast + + lda save + jsr update_crc_fast + + lda save2 + jsr update_crc_fast + + lda save3 + jsr update_crc_fast + + lda save4 + jsr update_crc_fast + + lda save5 + jsr update_crc_fast + + ldx in_s + dex + lda $100,x + jsr update_crc_fast + + inx + lda $100,x + jsr update_crc_fast + + inx + lda $100,x + jsr update_crc_fast +.endmacro + +.include "instr_test_end.s" + +test_values: + ; Values for SP + lda #$80 + jsr :+ + lda #$00 + jsr :+ + lda #$01 + jsr :+ + lda #$FF + jsr :+ + lda #$FE +: sta in_s + test_normal + rts + +correct_checksums: +.dword $798D2DB5 +.dword $0CA6FC29 +.dword $68C636F1 +.dword $D35DB3D5 +.dword $F1159742 +.dword $A3EBB2D7 diff --git a/instr_test-v3/source/11-jmp_jsr.s b/instr_test-v3/source/11-jmp_jsr.s new file mode 100644 index 0000000..293e78a --- /dev/null +++ b/instr_test-v3/source/11-jmp_jsr.s @@ -0,0 +1,28 @@ +.include "instr_test.inc" + +instrs: + entry $4C,"JMP" + entry $20,"JSR" +instrs_size = * - instrs + +instr_template: + jsr :+ + inx +: inx + jmp instr_done +instr_template_size = * - instr_template + +operand = in_a + +.define set_in set_paxyso +.define check_out check_paxyso + +.include "instr_test_end.s" + +test_values: + test_normal + rts + +correct_checksums: +.dword $4F91B466 +.dword $D794E018 diff --git a/instr_test-v3/source/12-rts.s b/instr_test-v3/source/12-rts.s new file mode 100644 index 0000000..d4b93e5 --- /dev/null +++ b/instr_test-v3/source/12-rts.s @@ -0,0 +1,38 @@ +.include "instr_test.inc" + +instrs: + entry $60,"RTS" +instrs_size = * - instrs + +instr_template: + rts + inx + inx + jmp instr_done +instr_template_size = * - instr_template + +operand = in_a + +.define check_out check_paxyso + +.macro set_in + ; Put return address on stack + ldx in_s + inx + lda #<(instr+1) + sta $100,x + inx + lda #>(instr+1) + sta $100,x + + set_paxyso +.endmacro + +.include "instr_test_end.s" + +test_values: + test_normal + rts + +correct_checksums: +.dword $E1EB954A diff --git a/instr_test-v3/source/13-rti.s b/instr_test-v3/source/13-rti.s new file mode 100644 index 0000000..854db70 --- /dev/null +++ b/instr_test-v3/source/13-rti.s @@ -0,0 +1,41 @@ +.include "instr_test.inc" + +instrs: + entry $40,"RTI" +instrs_size = * - instrs + +instr_template: + rti + inx + inx + jmp instr_done +instr_template_size = * - instr_template + +zp_res operand + +.define check_out check_paxyso + +.macro set_in + ; Put return address and P on stack + ldx in_s + inx + lda operand + sta $100,x + inx + lda #<(instr+1) + sta $100,x + inx + lda #>(instr+1) + sta $100,x + + set_paxyso +.endmacro + +.include "instr_test_end.s" + +test_values: + test_normal + rts + +correct_checksums: +.dword $F4B30222 diff --git a/instr_test-v3/source/14-brk.s b/instr_test-v3/source/14-brk.s new file mode 100644 index 0000000..b40084f --- /dev/null +++ b/instr_test-v3/source/14-brk.s @@ -0,0 +1,47 @@ +CUSTOM_IRQ = 1 +.include "instr_test.inc" + +zp_byte p_inside_brk + +irq: pha + php + pla + sta p_inside_brk + pla + rti + +instrs: + entry $00,"BRK" +instrs_size = * - instrs + +instr_template: + brk + inx + inx + jmp instr_done +instr_template_size = * - instr_template + +operand = in_a + +.macro set_in + set_stack + set_paxyso +.endmacro + +.macro check_out + ; By looking at stack, we verify + ; values BRK pushed on it + check_paxyso + check_stack + lda p_inside_brk + jsr update_crc_fast +.endmacro + +.include "instr_test_end.s" + +test_values: + test_normal + rts + +correct_checksums: +.dword $1392F39C diff --git a/instr_test-v3/source/15-special.s b/instr_test-v3/source/15-special.s new file mode 100644 index 0000000..dc3534e --- /dev/null +++ b/instr_test-v3/source/15-special.s @@ -0,0 +1,90 @@ +CUSTOM_IRQ=1 +.include "shell.inc" + +irq: pla + pha + rti + +jmp_6ff: + .byte $6C ; JMP ($6FF) (to avoid warning) + .word $6FF + +main: + setb SNDMODE,$40 ; disable frame IRQ + + set_test 3,"JMP ($6FF) should get high byte from $600" + setb $6FF,$F0 + setb $600,$07 + setb $700,$06 + setb $7F0,$E8 ; INX + setb $7F1,$60 ; RTS + setb $6F0,$60 ; RTS + ldx #0 + jsr jmp_6ff + cpx #1 + jne test_failed + + set_test 4,"RTS should return to addr+1" + lda #>:+ + pha + lda #<:+ + pha + ldx #0 + rts + inx +: inx + inx + cpx #1 + jne test_failed + + set_test 5,"RTI should return to addr" + lda #>:+ + pha + lda #<:+ + pha + ldx #0 + php + rti + inx +: inx + inx + cpx #2 + jne test_failed + + set_test 6,"JSR should push addr of next instr - 1" + setb $6FE,$20 ; JSR + setb $6FF,<:+ + setb $700,>:+ + jmp $6FE +: pla + cmp #$00 + jne test_failed + pla + cmp #$07 + jne test_failed + + set_test 7,"BRK should push status with bits 4 and 5 set" + lda #$00 + pha + plp + brk + nop + cmp #$30 + jne test_failed + lda #$FF + pha + plp + brk + nop + cmp #$FF + jne test_failed + + set_test 8,"BRK should push address BRK + 2" + ldx #1 + brk + inx + inx + cpx #2 + jne test_failed + + jmp tests_passed diff --git a/instr_test-v3/source/common/ascii.chr b/instr_test-v3/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/instr_test-v3/source/common/bootloader.bin b/instr_test-v3/source/common/bootloader.bin new file mode 100644 index 0000000000000000000000000000000000000000..b5ca2b3a8764977f79f291389719ff89802c6425 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wG3YQU0Fl6NFtM_+mr-FQM=xVTFT(<^3BPrA}9T)zdy6^)iV!+I2!no40SJYt<`&|B4Dfafd9=hN%n_*i{(Q7=26_A23{CIeF*8jZ}sg7p|_jaLI?A L0oe_n|3DA`y1;q5 literal 0 HcmV?d00001 diff --git a/instr_test-v3/source/common/build_rom.s b/instr_test-v3/source/common/build_rom.s new file mode 100644 index 0000000..b89aaa8 --- /dev/null +++ b/instr_test-v3/source/common/build_rom.s @@ -0,0 +1,131 @@ +; Builds program as iNES ROM + +; Default is 32K PRG and 8K CHR ROM, NROM (0) +; CHR_RAM selects UNROM (2) +; CART_WRAM selects MMC1 (1) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM = 1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM = 1 ; Use mapper that supports 8K WRAM in cart +MAPPER = n ; Specify mapper number +.endif + +.ifndef MAPPER + .ifdef CART_WRAM + MAPPER = 1 ; MMC1 + .elseif .defined(CHR_RAM) + MAPPER = 2 ; UNROM + .else + MAPPER = 0 ; NROM + .endif +.endif + +.ifndef V_MIRRORING + V_MIRRORING = 1 ; since text console needs it +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte "NES",$1A + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte MAPPER*$10 + V_MIRRORING +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +.ifndef LARGER_ROM_HACK +.segment "CODE" + .res $4000 +.endif + +.include "shell.s" + +std_reset: +.if MAPPER = 1 + ; Some writes to odd addresses to work + ; with my Ultima devcart + lda #$80 + sta $8001 + + ; Vertical mirroring, 8K CHR, WRAM enabled, all 32K mapped + lda #$0E<<1 ; $0E +: lsr a + sta $8000 ; 0E 07 03 01 00 + bne :- + + lda #04 ; $00 +: sta $A001 ; 04 08 10 20 40 + asl a + bpl :- + + lda #$05 ; $01 +: sta $C001 ; 05 0A 14 28 50 + asl a + bpl :- + + lda #04 ; $00 +: sta $E000 ; 04 08 10 20 40 + asl a + bpl :- + +.endif + + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_chr_ram + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; Standard NES bootloader to help with devcart. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "bootloader.bin" + +.code +.align 256 diff --git a/instr_test-v3/source/common/console.s b/instr_test-v3/source/common/console.s new file mode 100644 index 0000000..5820b3c --- /dev/null +++ b/instr_test-v3/source/common/console.s @@ -0,0 +1,331 @@ +; Scrolling text console with word wrapping, 30x29 characters. +; +; * Defers PPU initialization until first flush/ newline. +; * Works even if PPU doesn't support scrolling. +; * Keeps border around edge of screen for TV overscan. +; * Requires vertical or single-screen mirroring. +; * Requires ASCII font in CHR. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: A, X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + lda #0 + sta PPUADDR + sta PPUADDR + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/instr_test-v3/source/common/crc.s b/instr_test-v3/source/common/crc.s new file mode 100644 index 0000000..625bf1e --- /dev/null +++ b/instr_test-v3/source/common/crc.s @@ -0,0 +1,115 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 ; Current CRC-32; no need to invert +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 360 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 + sec +@bit: ror checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcs :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 + sec +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ldx #3 +: lda checksum,x + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ldy #3 +: lda (ptr),y + cmp checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/instr_test-v3/source/common/crc_fast.s b/instr_test-v3/source/common/crc_fast.s new file mode 100644 index 0000000..94abad7 --- /dev/null +++ b/instr_test-v3/source/common/crc_fast.s @@ -0,0 +1,110 @@ +; Fast table-based CRC-32 + +; Initializes fast CRC tables and resets checksum. +; Preserved: Y +init_crc_fast = reset_crc + +; Updates checksum with byte from A +; Preserved: X, Y +; Time: 54 clocks +update_crc_fast: + stx checksum_temp + +; Updates checksum with byte from A +; Preserved: Y +; Time: 42 clocks +.macro update_crc_fast + eor checksum + tax + lda checksum+1 + eor checksum_t0,x + sta checksum + lda checksum+2 + eor checksum_t1,x + sta checksum+1 + lda checksum+3 + eor checksum_t2,x + sta checksum+2 + lda checksum_t3,x + sta checksum+3 +.endmacro + + update_crc_fast + ldx checksum_temp + rts + +.pushseg +.segment "RODATA" +.align 256 +checksum_t0: + .byte $8D,$1B,$A1,$37,$94,$02,$B8,$2E,$BF,$29,$93,$05,$A6,$30,$8A,$1C + .byte $E9,$7F,$C5,$53,$F0,$66,$DC,$4A,$DB,$4D,$F7,$61,$C2,$54,$EE,$78 + .byte $45,$D3,$69,$FF,$5C,$CA,$70,$E6,$77,$E1,$5B,$CD,$6E,$F8,$42,$D4 + .byte $21,$B7,$0D,$9B,$38,$AE,$14,$82,$13,$85,$3F,$A9,$0A,$9C,$26,$B0 + .byte $1D,$8B,$31,$A7,$04,$92,$28,$BE,$2F,$B9,$03,$95,$36,$A0,$1A,$8C + .byte $79,$EF,$55,$C3,$60,$F6,$4C,$DA,$4B,$DD,$67,$F1,$52,$C4,$7E,$E8 + .byte $D5,$43,$F9,$6F,$CC,$5A,$E0,$76,$E7,$71,$CB,$5D,$FE,$68,$D2,$44 + .byte $B1,$27,$9D,$0B,$A8,$3E,$84,$12,$83,$15,$AF,$39,$9A,$0C,$B6,$20 + .byte $AD,$3B,$81,$17,$B4,$22,$98,$0E,$9F,$09,$B3,$25,$86,$10,$AA,$3C + .byte $C9,$5F,$E5,$73,$D0,$46,$FC,$6A,$FB,$6D,$D7,$41,$E2,$74,$CE,$58 + .byte $65,$F3,$49,$DF,$7C,$EA,$50,$C6,$57,$C1,$7B,$ED,$4E,$D8,$62,$F4 + .byte $01,$97,$2D,$BB,$18,$8E,$34,$A2,$33,$A5,$1F,$89,$2A,$BC,$06,$90 + .byte $3D,$AB,$11,$87,$24,$B2,$08,$9E,$0F,$99,$23,$B5,$16,$80,$3A,$AC + .byte $59,$CF,$75,$E3,$40,$D6,$6C,$FA,$6B,$FD,$47,$D1,$72,$E4,$5E,$C8 + .byte $F5,$63,$D9,$4F,$EC,$7A,$C0,$56,$C7,$51,$EB,$7D,$DE,$48,$F2,$64 + .byte $91,$07,$BD,$2B,$88,$1E,$A4,$32,$A3,$35,$8F,$19,$BA,$2C,$96,$00 + +checksum_t1: + .byte $EF,$DF,$8E,$BE,$2B,$1B,$4A,$7A,$67,$57,$06,$36,$A3,$93,$C2,$F2 + .byte $FF,$CF,$9E,$AE,$3B,$0B,$5A,$6A,$77,$47,$16,$26,$B3,$83,$D2,$E2 + .byte $CF,$FF,$AE,$9E,$0B,$3B,$6A,$5A,$47,$77,$26,$16,$83,$B3,$E2,$D2 + .byte $DF,$EF,$BE,$8E,$1B,$2B,$7A,$4A,$57,$67,$36,$06,$93,$A3,$F2,$C2 + .byte $AE,$9E,$CF,$FF,$6A,$5A,$0B,$3B,$26,$16,$47,$77,$E2,$D2,$83,$B3 + .byte $BE,$8E,$DF,$EF,$7A,$4A,$1B,$2B,$36,$06,$57,$67,$F2,$C2,$93,$A3 + .byte $8E,$BE,$EF,$DF,$4A,$7A,$2B,$1B,$06,$36,$67,$57,$C2,$F2,$A3,$93 + .byte $9E,$AE,$FF,$CF,$5A,$6A,$3B,$0B,$16,$26,$77,$47,$D2,$E2,$B3,$83 + .byte $6C,$5C,$0D,$3D,$A8,$98,$C9,$F9,$E4,$D4,$85,$B5,$20,$10,$41,$71 + .byte $7C,$4C,$1D,$2D,$B8,$88,$D9,$E9,$F4,$C4,$95,$A5,$30,$00,$51,$61 + .byte $4C,$7C,$2D,$1D,$88,$B8,$E9,$D9,$C4,$F4,$A5,$95,$00,$30,$61,$51 + .byte $5C,$6C,$3D,$0D,$98,$A8,$F9,$C9,$D4,$E4,$B5,$85,$10,$20,$71,$41 + .byte $2D,$1D,$4C,$7C,$E9,$D9,$88,$B8,$A5,$95,$C4,$F4,$61,$51,$00,$30 + .byte $3D,$0D,$5C,$6C,$F9,$C9,$98,$A8,$B5,$85,$D4,$E4,$71,$41,$10,$20 + .byte $0D,$3D,$6C,$5C,$C9,$F9,$A8,$98,$85,$B5,$E4,$D4,$41,$71,$20,$10 + .byte $1D,$2D,$7C,$4C,$D9,$E9,$B8,$88,$95,$A5,$F4,$C4,$51,$61,$30,$00 + +checksum_t2: + .byte $02,$05,$0C,$0B,$6F,$68,$61,$66,$D9,$DE,$D7,$D0,$B4,$B3,$BA,$BD + .byte $B5,$B2,$BB,$BC,$D8,$DF,$D6,$D1,$6E,$69,$60,$67,$03,$04,$0D,$0A + .byte $6C,$6B,$62,$65,$01,$06,$0F,$08,$B7,$B0,$B9,$BE,$DA,$DD,$D4,$D3 + .byte $DB,$DC,$D5,$D2,$B6,$B1,$B8,$BF,$00,$07,$0E,$09,$6D,$6A,$63,$64 + .byte $DE,$D9,$D0,$D7,$B3,$B4,$BD,$BA,$05,$02,$0B,$0C,$68,$6F,$66,$61 + .byte $69,$6E,$67,$60,$04,$03,$0A,$0D,$B2,$B5,$BC,$BB,$DF,$D8,$D1,$D6 + .byte $B0,$B7,$BE,$B9,$DD,$DA,$D3,$D4,$6B,$6C,$65,$62,$06,$01,$08,$0F + .byte $07,$00,$09,$0E,$6A,$6D,$64,$63,$DC,$DB,$D2,$D5,$B1,$B6,$BF,$B8 + .byte $BA,$BD,$B4,$B3,$D7,$D0,$D9,$DE,$61,$66,$6F,$68,$0C,$0B,$02,$05 + .byte $0D,$0A,$03,$04,$60,$67,$6E,$69,$D6,$D1,$D8,$DF,$BB,$BC,$B5,$B2 + .byte $D4,$D3,$DA,$DD,$B9,$BE,$B7,$B0,$0F,$08,$01,$06,$62,$65,$6C,$6B + .byte $63,$64,$6D,$6A,$0E,$09,$00,$07,$B8,$BF,$B6,$B1,$D5,$D2,$DB,$DC + .byte $66,$61,$68,$6F,$0B,$0C,$05,$02,$BD,$BA,$B3,$B4,$D0,$D7,$DE,$D9 + .byte $D1,$D6,$DF,$D8,$BC,$BB,$B2,$B5,$0A,$0D,$04,$03,$67,$60,$69,$6E + .byte $08,$0F,$06,$01,$65,$62,$6B,$6C,$D3,$D4,$DD,$DA,$BE,$B9,$B0,$B7 + .byte $BF,$B8,$B1,$B6,$D2,$D5,$DC,$DB,$64,$63,$6A,$6D,$09,$0E,$07,$00 + +checksum_t3: + .byte $D2,$A5,$3C,$4B,$D5,$A2,$3B,$4C,$DC,$AB,$32,$45,$DB,$AC,$35,$42 + .byte $CF,$B8,$21,$56,$C8,$BF,$26,$51,$C1,$B6,$2F,$58,$C6,$B1,$28,$5F + .byte $E9,$9E,$07,$70,$EE,$99,$00,$77,$E7,$90,$09,$7E,$E0,$97,$0E,$79 + .byte $F4,$83,$1A,$6D,$F3,$84,$1D,$6A,$FA,$8D,$14,$63,$FD,$8A,$13,$64 + .byte $A4,$D3,$4A,$3D,$A3,$D4,$4D,$3A,$AA,$DD,$44,$33,$AD,$DA,$43,$34 + .byte $B9,$CE,$57,$20,$BE,$C9,$50,$27,$B7,$C0,$59,$2E,$B0,$C7,$5E,$29 + .byte $9F,$E8,$71,$06,$98,$EF,$76,$01,$91,$E6,$7F,$08,$96,$E1,$78,$0F + .byte $82,$F5,$6C,$1B,$85,$F2,$6B,$1C,$8C,$FB,$62,$15,$8B,$FC,$65,$12 + .byte $3F,$48,$D1,$A6,$38,$4F,$D6,$A1,$31,$46,$DF,$A8,$36,$41,$D8,$AF + .byte $22,$55,$CC,$BB,$25,$52,$CB,$BC,$2C,$5B,$C2,$B5,$2B,$5C,$C5,$B2 + .byte $04,$73,$EA,$9D,$03,$74,$ED,$9A,$0A,$7D,$E4,$93,$0D,$7A,$E3,$94 + .byte $19,$6E,$F7,$80,$1E,$69,$F0,$87,$17,$60,$F9,$8E,$10,$67,$FE,$89 + .byte $49,$3E,$A7,$D0,$4E,$39,$A0,$D7,$47,$30,$A9,$DE,$40,$37,$AE,$D9 + .byte $54,$23,$BA,$CD,$53,$24,$BD,$CA,$5A,$2D,$B4,$C3,$5D,$2A,$B3,$C4 + .byte $72,$05,$9C,$EB,$75,$02,$9B,$EC,$7C,$0B,$92,$E5,$7B,$0C,$95,$E2 + .byte $6F,$18,$81,$F6,$68,$1F,$86,$F1,$61,$16,$8F,$F8,$66,$11,$88,$FF +.popseg diff --git a/instr_test-v3/source/common/delay.s b/instr_test-v3/source/common/delay.s new file mode 100644 index 0000000..e8d7278 --- /dev/null +++ b/instr_test-v3/source/common/delay.s @@ -0,0 +1,202 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_res delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +; Delays approximately n milliseconds (1/1000 second), +; without caring whether it's NTSC or PAL. +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec_approx n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*1726190+500)/1000 +.endmacro + + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/instr_test-v3/source/common/instr_test.inc b/instr_test-v3/source/common/instr_test.inc new file mode 100644 index 0000000..9faa4ce --- /dev/null +++ b/instr_test-v3/source/common/instr_test.inc @@ -0,0 +1,99 @@ +REGION_FREE = 1 +.include "shell.inc" +.include "crc_fast.s" + +; Defines instruction to test +.macro entry op,name + .byte op,0 + .local Addr + .word Addr + seg_data RODATA,{Addr: .byte name,0} +.endmacro + +; Values set_paxyso sets registers to. Set +; before calling test_values, which can then +; overwrite them if desired. +zp_byte in_p +zp_byte in_a +zp_byte in_x +zp_byte in_y +zp_byte in_s + +; Temporary space for check_paxyso +zp_byte out_a +zp_byte out_x +zp_byte out_s + +; Values to cycle through for registers +values: + .byte 0,1,2,$40,$7F,$80,$81,$FF +values_size = * - values + .byte 0,1,2,$40,$7F,$80,$81,$FF + +; Sets bytes on stack around in_s +.macro set_stack + ldx in_s + inx + inx + ldy #6 +: txa + asl + eor #$A5 + sta $100,x + dex + dey + bne :- +.endmacro + +; Checksums bytes on stack around in_s +.macro check_stack + ldx in_s + inx + inx + ldy #6 +: lda $100,x + dex + jsr update_crc + dey + bne :- +.endmacro + +; Sets P, A, X, Y, S, and operand +.macro set_paxyso + ldx in_s + txs + lda values,y + sta operand + lda in_p + pha + lda in_a + ldx in_x + ldy in_y + plp +.endmacro + +; Checksums P, A, X, Y, S, and operand +.macro check_paxyso + php + sta out_a + pla + + stx out_x + tsx + stx out_s + ldx saved_s + txs + + cld + jsr update_crc_fast + lda out_a + jsr update_crc_fast + lda out_x + jsr update_crc_fast + tya + jsr update_crc_fast + lda out_s + jsr update_crc_fast + lda operand + jsr update_crc_fast +.endmacro diff --git a/instr_test-v3/source/common/instr_test_end.s b/instr_test-v3/source/common/instr_test_end.s new file mode 100644 index 0000000..07fca18 --- /dev/null +++ b/instr_test-v3/source/common/instr_test_end.s @@ -0,0 +1,199 @@ +; Offset of current instruction +zp_byte instrs_idx + +zp_byte failed_count + +main: + ; Stack slightly lower than top + ldx #$A2 + txs + + jsr init_crc_fast + + ; Test each instruction + lda #0 +@loop: sta instrs_idx + tay + + jsr reset_crc + lda instrs,y + jsr test_instr + jsr check_result + + lda instrs_idx + clc + adc #4 + cmp #instrs_size + bne @loop + +.ifdef BUILD_DEVCART + lda #0 + jmp exit +.endif + + lda failed_count + jne test_failed + jmp tests_passed + +; Check result of test +check_result: +.ifdef BUILD_DEVCART + ; Print correct CRC + jsr crc_off + print_str ".dword $" + ldx #0 +: lda checksum,x + jsr print_hex + inx + cpx #4 + bne :- + jsr print_newline + jsr crc_on +.else + ; Verify CRC + ldx #3 + ldy instrs_idx +: lda checksum,x + cmp correct_checksums,y + bne @wrong + iny + dex + bpl :- +.endif + rts + +; Print failed opcode and name +@wrong: + ldy instrs_idx + lda instrs,y + jsr print_a + jsr play_byte + lda instrs+2,y + sta addr + lda instrs+3,y + sta addr+1 + jsr print_str_addr + jsr print_newline + inc failed_count + rts + +; Place where instruction is executed +instr = $3A0 + +; Tests instr A +test_instr: + sta instr + jsr avoid_silent_nsf + + ; Copy rest of template + ldx #instr_template_size - 1 +: lda instr_template,x + sta instr,x + dex + bne :- + + ; Disable and be sure APU IRQs are clear, since + ; I flag gets cleared during testing. + setb SNDMODE,$C0 + setb $4010,0 + nop + lda SNDCHN + + ; Default stack + lda #$90 + sta in_s + + ; Test with different flags + lda #$00 + jsr test_flags + lda #$FF + jsr test_flags + + rts + +; Position in operand table +zp_byte operand_idx + +test_flags: + sta in_p + + ldy #values_size-1 +: sty operand_idx + + lda values,y + sta in_a + + lda values+1,y + sta in_x + + lda values+2,y + sta in_y + + jsr test_values + + ldy operand_idx + dey + bpl :- + + rts + +.ifndef values2 + values2 = values + values2_size = values_size +.endif + +.macro test_normal +zp_byte a_idx +zp_byte saved_s + + tsx + stx saved_s + + set_stack + + ldy #values2_size-1 +inner: sty a_idx + + lda values2,y + sta operand + + set_in + +; For debugging +.if 0 + ; P A X Y S O (z,x) (z),y + jsr print_p + jsr print_a + jsr print_x + jsr print_y + jsr print_s + lda operand + jsr print_a +.ifdef address + lda (address,x) + jsr print_a + lda (address),y + jsr print_a +.else + lda operand,x + jsr print_a + lda operand,y + jsr print_a +.endif + jsr print_newline +.endif + + jmp instr +instr_done: + + check_out + + ldy a_idx + dey + bpl inner + + check_stack + + ldx saved_s + txs +.endmacro diff --git a/instr_test-v3/source/common/macros.inc b/instr_test-v3/source/common/macros.inc new file mode 100644 index 0000000..dc968ad --- /dev/null +++ b/instr_test-v3/source/common/macros.inc @@ -0,0 +1,321 @@ +BLARGG_MACROS_INCLUDED = 1 + +; Allows extra error checking with modified version +; of ca65. Otherwise acts like a constant of 0. +ADDR = 0 + +; Switches to Segment and places Line there. +; Line can be an .align directive, .res, .byte, etc. +; Examples: +; seg_data BSS, .align 256 +; seg_data RODATA, {message: .byte "Test",0} +.macro seg_data Segment, Line + .pushseg + .segment .string(Segment) + Line + .popseg +.endmacro + +; Reserves Size bytes in Segment for Name. +; If Size is omitted, reserves one byte. +.macro seg_res Segment, Name, Size + .ifblank Size + seg_data Segment, Name: .res 1 + .else + seg_data Segment, Name: .res Size + .endif +.endmacro + +; Shortcuts for zeropage, bss, and stack +.define zp_res seg_res ZEROPAGE, +.define nv_res seg_res NVRAM, +.define bss_res seg_res BSS, +.define sp_res seg_res STACK, +.define zp_byte zp_res + +; Copies byte from Src to Addr. If Src begins with #, +; it sets Addr to the immediate value. +; Out: A = byte copied +; Preserved: X, Y +.macro mov Addr, Src + lda Src + sta Addr +.endmacro + +; Copies word from Src to Addr. If Src begins with #, +; it sets Addr the immediate value. +; Out: A = high byte of word +; Preserved: X, Y +.macro movw Addr, Src + .if .match( .left( 1, {Src} ), # ) + lda #<(.right( .tcount( {Src} )-1, {Src} )) + sta Addr + lda #>(.right( .tcount( {Src} )-1, {Src} )) + sta 1+(Addr) + .else + lda Src + sta Addr + lda 1+(Src) + sta 1+(Addr) + .endif +.endmacro + +; Increments 16-bit value at Addr. +; Out: EQ/NE based on resulting 16-bit value +; Preserved: A, X, Y +.macro incw Addr + .local @Skip + inc Addr + bne @Skip + inc 1+(Addr) +@Skip: +.endmacro + +; Adds Src to word at Addr. +; Out: A = high byte of result, carry set appropriately +; Preserved: X, Y +.macro addw Addr, Src + .if .match( .left( 1, {Src} ), # ) + addw_ Addr,(.right( .tcount( {Src} )-1, {Src} )) + .else + lda Addr + clc + adc Src + sta Addr + + lda 1+(Addr) + adc 1+(Src) + sta 1+(Addr) + .endif +.endmacro +.macro addw_ Addr, Imm + lda Addr + clc + adc #> 8) <> 0 + lda 1+(Addr) + adc #>Imm + sta 1+(Addr) + ;.else + ; .local @Skip + ; bcc @Skip + ; inc 1+(Addr) + ;@Skip: + ;.endif +.endmacro + +; Splits list of words into tables of low and high bytes +; Example: split_words foo, {$1234, $5678} +; expands to: +; foo_l: $34, $78 +; foo_h: $12, $56 +; foo_count = 2 +.macro split_words Label, Words + .ident (.concat (.string(Label), "_l")): .lobytes Words + .ident (.concat (.string(Label), "_h")): .hibytes Words + .ident (.concat (.string(Label), "_count")) = * - .ident (.concat (.string(Label), "_h")) +.endmacro + +.macro SELECT Bool, True, False, Extra + .ifndef Bool + False Extra + .elseif Bool <> 0 + True Extra + .else + False Extra + .endif +.endmacro + +.macro DEFAULT Name, Value + .ifndef Name + Name = Value + .endif +.endmacro + +.ifp02 + ; 6502 doesn't define these alternate names + .define blt bcc + .define bge bcs +.endif +.define jlt jcc +.define jge jcs + +; Jxx Target = Bxx Target, except it can go farther than +; 128 bytes. Implemented via branch around a JMP. + +; Don't use ca65's longbranch, because they fail for @labels +;.macpack longbranch + +.macro jeq Target + bne *+5 + jmp Target +.endmacro + +.macro jne Target + beq *+5 + jmp Target +.endmacro + +.macro jmi Target + bpl *+5 + jmp Target +.endmacro + +.macro jpl Target + bmi *+5 + jmp Target +.endmacro + +.macro jcs Target + bcc *+5 + jmp Target +.endmacro + +.macro jcc Target + bcs *+5 + jmp Target +.endmacro + +.macro jvs Target + bvc *+5 + jmp Target +.endmacro + +.macro jvc Target + bvs *+5 + jmp Target +.endmacro + + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data RODATA,{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + .local @for_loop + lda #start +@for_loop: + pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne @for_loop +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + .local @for_loop_skip + .local @for_loop + ldy #>(start) + lda #<(start) +@for_loop: + tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc @for_loop_skip + iny +.else + bcs @for_loop_skip + dey +.endif +@for_loop_skip: + cmp #<((end)+(step)) + bne @for_loop + cpy #>((end)+(step)) + bne @for_loop +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro + +; Negates A and adds it to operand +.macro subaf Operand + eor #$FF + sec + adc Operand +.endmacro + +; Initializes CPU registers to reasonable values +; Preserved: A, Y +.macro init_cpu_regs + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + .ifndef BUILD_NSF + inx + stx PPUCTRL + .endif +.endmacro diff --git a/instr_test-v3/source/common/neshw.inc b/instr_test-v3/source/common/neshw.inc new file mode 100644 index 0000000..d636a97 --- /dev/null +++ b/instr_test-v3/source/common/neshw.inc @@ -0,0 +1,56 @@ +; NES I/O locations and masks + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.ifndef REGION_FREE + .ifndef PAL_ONLY + .ifndef NTSC_ONLY + NTSC_ONLY = 1 + .endif + .endif +.else + .ifdef NTSC_ONLY + .error "NTSC_ONLY and REGION_FREE defined" + .endif + .ifdef PAL_ONLY + .error "PAL_ONLY and REGION_FREE defined" + .endif +.endif + +.ifdef NTSC_ONLY + CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.endif + +.ifdef PAL_ONLY + CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/instr_test-v3/source/common/ppu.s b/instr_test-v3/source/common/ppu.s new file mode 100644 index 0000000..0e6587a --- /dev/null +++ b/instr_test-v3/source/common/ppu.s @@ -0,0 +1,205 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts + + +.macro check_ppu_region_ Len + ; Delays since VBL began + jsr wait_vbl_optional ; 10 average + delay Len - 18 - 200 + lda PPUSTATUS ; 4 + bmi @ok ; 2 + delay 200 + ; Next VBL should roughly begin here if it's the + ; one we are detecting + delay 200 + lda PPUSTATUS ; 2 + bpl @ok +.endmacro + +check_ppu_region: + +.ifndef REGION_FREE +.ifdef PAL_ONLY + check_ppu_region_ 29781 + print_str {newline,"Note: This test is meant for PAL NES only.",newline,newline} +.endif + +.ifdef NTSC_ONLY + check_ppu_region_ 33248 + print_str {newline,"Note: This test is meant for NTSC NES only.",newline,newline} +.endif +.endif +@ok: rts + + +; Loads ASCII font into CHR RAM and fills rest with $FF +.macro load_chr_ram + jsr wait_vbl_optional + mov PPUCTRL,#0 + mov PPUMASK,#0 + mov PPUADDR,#0 + mov PPUADDR,#0 + + ; Copy ascii_chr to 0 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page + + ; Fill rest + lda #$FF +: sta PPUDATA + iny + bne :- + inx + cpx #$20 + bne :- +.endmacro diff --git a/instr_test-v3/source/common/print.s b/instr_test-v3/source/common/print.s new file mode 100644 index 0000000..976fd9c --- /dev/null +++ b/instr_test-v3/source/common/print.s @@ -0,0 +1,278 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr print_nibble_ + pla + + pha + and #$0F + jsr print_nibble_ + pla + rts + +print_nibble_: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints low 4 bits of A as single hex character +; Preserved: A, X, Y +print_nibble: + pha + and #$0F + jsr update_crc + jsr print_nibble_ + pla + rts + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + bne :+ + inc addr+1 +: rts + + +; Prints A as 1-3 digit decimal. +; In: A = MSB +; Preserved: A, X, Y +print_dec: + sta print_temp_ + pha + txa + pha + tya + pha + ldy print_temp_ + lda #0 + sta print_temp_ + tya + jmp :+ + + +; Prints 16-bit AY as 1-5 digit decimal. +; Preserved: A, X, Y +print_ay_dec: + jsr update_crc + sta print_temp_ + pha + txa + pha + tya + pha +: jsr update_crc + + ; Strip leading zeroes + ldx #6 +: dex + cmp @lsb-1,x + lda print_temp_ + sbc @msb-1,x + tya + bcc :- + bcs @non_zero + + ; Print remaining digits + +@more: ; Commit subtraction + iny + sta print_temp_ + pla + + ; Subtract +@digit: sbc @lsb,x + pha + lda print_temp_ + sbc @msb,x + bcs @more + + ; Print digit and undo subtraction + tya + jsr print_char_ + pla + clc + adc @lsb,x +@non_zero: + sec + ldy #'0' + dex + bne @digit + + ora #'0' + jsr print_char_ + + pla + tay + pla + tax + pla + rts + +@lsb: .byte 0,<10,<100,<1000,<10000 +@msb: .byte 0,>10,>100,>1000,>10000 + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/instr_test-v3/source/common/shell.inc b/instr_test-v3/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/instr_test-v3/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/instr_test-v3/source/common/shell.s b/instr_test-v3/source/common/shell.s new file mode 100644 index 0000000..0ddd572 --- /dev/null +++ b/instr_test-v3/source/common/shell.s @@ -0,0 +1,184 @@ +; Shell that sets up testing framework and calls main + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +; Move code from $C000 to $E200, to accommodate my devcarts +.ifndef LARGER_ROM_HACK +.segment "CODE" + .res $2200 +.endif + +; Put shell code after user code, so user code is in more +; consistent environment +.ifndef NO_CODE2 +.segment "CODE2" +.endif + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + init_cpu_regs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell without affecting current set_test values +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + ; Clear APU registers + lda #0 + sta $4015 + ldx #$13 +: sta $4000,x + dex + bpl :- + + ; CPU registers + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sta temp + init_cpu_regs + setb SNDCHN,0 + lda temp + + jsr report_result + pha + jsr check_ppu_region + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + + +;**** Other routines **** + +.include "shell_misc.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts +.endif diff --git a/instr_test-v3/source/common/shell_misc.s b/instr_test-v3/source/common/shell_misc.s new file mode 100644 index 0000000..cf95e5a --- /dev/null +++ b/instr_test-v3/source/common/shell_misc.s @@ -0,0 +1,226 @@ +; Reports internal error and exits program +internal_error: +assert_failed: + pla + tay + pla + init_cpu_regs + print_str newline,"internal error, PC=" + jsr print_hex + jsr print_y + lda #255 + jmp exit + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +.macro fill_ram_ Begin, End + ; Simpler to count from negative size up to 0, + ; and adjust address downward to compensate + ; for initial low byte in Y index + .local Neg_size + Neg_size = (Begin) - (End) + ldxy #(Begin) - = 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/instr_test-v3/source/common/text_out.s b/instr_test-v3/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/instr_test-v3/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/instr_timing/instr_timing.nes b/instr_timing/instr_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..48e9227a1e114a12109366ff060f093a814facf3 GIT binary patch literal 32784 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 diff --git a/instr_timing/rom_singles/1-instr_timing.nes b/instr_timing/rom_singles/1-instr_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..51d445f3a215ed4c85047812dfd370c4d61a55d5 GIT binary patch literal 40976 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 Type to test +test_instrs: + sta type_mask + setb nothing_failed,1 + + setb test_index,0 +@loop: ldx test_index + lda instr_types,x + and #$F0 + cmp type_mask + bne :+ + jsr avoid_silent_nsf + jsr @test_instr +: inc test_index + bne @loop + + lda nothing_failed + ora test_code + rts + + +; Tests current instruction in normal and page cross cases +@test_instr: + ; No page crossing + lda #2 + jsr time_instr + ldy test_index + eor instr_times,y + beq :+ + + jsr print_failed_instr + jsr print_newline + + lda instr_times,y + cmp instr_times_cross,y + bne :+ ; test again only if page crossing time is different + rts + + ; Page crossing +: lda #3 + jsr time_instr + ldy test_index + eor instr_times_cross,y + beq :+ + + jsr print_failed_instr + print_str " (cross)",newline +: rts + + +; Prints failed instruction times +; A -> Actual XOR correct +; X -> Actual +; Preserved: Y +print_failed_instr: + pha + lda test_index + jsr print_hex + jsr play_byte + print_str " was " + txa + jsr print_dec + pla + print_str ", should be " + stx temp + eor temp + jsr print_dec + setb nothing_failed,0 + rts + + +; Times a single instruction +; test_index -> Opcode of instruction +; A -> Byte to load into X and Y before running instruction +; X, A <- Cycles instruction took +.align 256 +time_instr: + sta temp + ldy test_index + sty test_opcode + + ; Copy test_opcode to RAM + lda instr_types,y + and #$07 + asl a + tay + lda test_addrs-2,y + sta addr + lda test_addrs-1,y + sta addr+1 + ldy #1 +: lda (addr),y + sta test_opcode,y + iny + cpy #16 + bne :- + + ; Save copy of stack + tsx + stx saved_sp +: lda $100,x + sta stack_copy,x + inx + bne :- + + ; Set zero-page values so the addressing modes use the following + ; when X and Y = $02/$03 + ; zp $FD + ; zp,x $FF/$00 + ; abs $03FD + ; abs,x/y $03FF/$0400 + ; (ind,x) $02FD/$0302 + ; (ind),y $02FF/$0300 + ; JMP (ind) test_opcode+3 + setb <$00,$02 + setb <$01,$03 + setb <$FD,$FD + setb <$FE,$02 + setb <$FF,$FD + lda temp ; $A3 LAX (ab,X) will load X from these two + sta $02FD + sta $0302 + setw $03FD,test_opcode+3 ; JMP ($03FD) will use this address + + ; Fill stack for RTS/RTI test + ldx #$FF + txs + inx + lda #>test_opcode +: pha + inx + bne :- + + ; Setup registers + lda temp + tay + tax + setb temp,0 + + ; Synchronize with APU length counter + setb SNDMODE,$40 + setb SNDCHN,$01 + setb $4000,$10 + setb $4001,$7F + setb $4002,$FF + setb $4003,$18 + lda #$01 +: and SNDCHN + bne :- + + ; Setup length counter + setb $4003,$18 + + ; ~26323 delay, so length counter will be ~3500 cycles from expiring + setb temp3,-13 + setb temp2,-207 +: inc temp2 + bne :- + inc temp3 + bne :- + + ; Run instruction + jmp test_opcode + +raw_to_cycles: ; entry i is lowest value that qualifies for i cycles + .byte 241, 226, 212, 200, 189, 179, 171, 163, 156, 149, 0 + +; Jumps here when instruction has been timed +instr_done: + ; Restore things in case instruction affected them + sei + cld + + ; Convert iteration count to cycle count + lda temp + ldy #-1 +: iny + cmp raw_to_cycles,y + blt :- + + ; Convert 10+ to 0 + cpy #10 + blt :+ + ldy #0 +: + ; Restore stack + ldx saved_sp + txs +: lda stack_copy,x + sta $100,x + inx + bne :- + + tya + tax + + rts + +.macro instr_template instr +: instr + inc temp + lda SNDCHN + and #$01 + bne :- + jmp instr_done +.endmacro + +test_1: instr_template nop +test_2: instr_template sta <$FD +test_3: instr_template sta $03FD +test_4: instr_template jmp test_opcode+3 + +test_addrs: + .word test_1, test_2, test_3, test_4 + +; $8n = unofficial NOPs and $EB equivalent of SBC #imm +; $4n = all other unofficial opcodes +; $0n = official opcodes +; -1 = not tested +; n = instruction length +instr_types: + ; 0 1 2 3 4 5 6 7 8 9 A B C D E F + .byte 2, 2, -1,$42,$82, 2, 2,$42, 1, 2, 1,$42,$83, 3, 3,$43 ; 0 + .byte -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; 1 + .byte 4, 2, -1,$42, 2, 2, 2,$42, 1, 2, 1,$42, 3, 3, 3,$43 ; 2 + .byte -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; 3 + .byte 2, 2, -1,$42,$82, 2, 2,$42, 1, 2, 1,$42, 4, 3, 3,$43 ; 4 + .byte -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; 5 + .byte 3, 2, -1,$42,$82, 2, 2,$42, 1, 2, 1,$42, 3, 3, 3,$43 ; 6 + .byte -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; 7 + .byte $82, 2,$82,$42, 2, 2, 2,$42, 1,$82, 1,$42, 3, 3, 3,$43 ; 8 + .byte -1, 2, -1,$42, 2, 2, 2,$42, 1, 3, 1,$43,$43, 3,$43,$43 ; 9 + .byte 2, 2, 2,$42, 2, 2, 2,$42, 1, 2, 1,$42, 3, 3, 3,$43 ; A + .byte -1, 2, -1,$42, 2, 2, 2,$42, 1, 3, 1,$43, 3, 3, 3,$43 ; B + .byte 2, 2,$82,$42, 2, 2, 2,$42, 1, 2, 1,$42, 3, 3, 3,$43 ; C + .byte -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; D + .byte 2, 2,$82,$42, 2, 2, 2,$42, 1, 2, 1,$82, 3, 3, 3,$43 ; E + .byte -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; F + ; Bxx HLT + +; Clocks when no page crossing occurs +instr_times: + ; 0 1 2 3 4 5 6 7 8 9 A B C D E F + .byte 7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6 ; 0 + .byte 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; 1 + .byte 6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6 ; 2 + .byte 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; 3 + .byte 6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6 ; 4 + .byte 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; 5 + .byte 6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6 ; 6 + .byte 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; 7 + .byte 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 ; 8 + .byte 0,6,0,6,4,4,4,4,2,5,2,5,5,5,5,5 ; 9 + .byte 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 ; A + .byte 0,5,0,5,4,4,4,4,2,4,2,4,4,4,4,4 ; B + .byte 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 ; C + .byte 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; D + .byte 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 ; E + .byte 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; F + +; Clocks when page crossing occurs +instr_times_cross: + ; 0 1 2 3 4 5 6 7 8 9 A B C D E F + .byte 7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6 ; 0 + .byte 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; 1 + .byte 6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6 ; 2 + .byte 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; 3 + .byte 6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6 ; 4 + .byte 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; 5 + .byte 6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6 ; 6 + .byte 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; 7 + .byte 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 ; 8 + .byte 0,6,0,6,4,4,4,4,2,5,2,5,5,5,5,5 ; 9 + .byte 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 ; A + .byte 0,6,0,6,4,4,4,4,2,5,2,5,5,5,5,5 ; B + .byte 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 ; C + .byte 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; D + .byte 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 ; E + .byte 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; F diff --git a/instr_timing/source/2-branch_timing.s b/instr_timing/source/2-branch_timing.s new file mode 100644 index 0000000..d372fef --- /dev/null +++ b/instr_timing/source/2-branch_timing.s @@ -0,0 +1,186 @@ +; Verifies timing of branch instructions +; +; Runs branch instruction in loop that counts iterations +; until APU length counter expires. Moves the loop around +; in memory to trigger page cross/no cross cases. + +.include "shell.inc" + +zp_byte opcode +zp_byte flags +zp_byte time_ptr +bss_res times,8 + +main: + set_test 0 + for_loop test_opcode,$10,$F0,$20 + jmp tests_done + +log_time: + ldx time_ptr + sta times,x + inc time_ptr + rts + +test_opcode: + sta opcode + + ; Not taken + ldx #$FF + and #$20 + beq :+ + inx +: stx flags + setb time_ptr,0 + jsr test_addrs + + ; Taken + lda flags + eor #$FF + sta flags + jsr test_addrs + + ; Verify times + ldx #8 - 1 +: lda times,x + cmp @correct_times,x + bne @error + dex + bpl :- + + rts + +@correct_times: + .byte 2,2,2,2,3,3,4,4 + +@error: lda opcode + jsr print_a + jsr play_byte + ldy #0 +: lda times,y + jsr print_dec + jsr print_space + iny + cpy #8 + bne :- + jsr print_newline + set_test 1 + rts + +; Tests instruction with page cross/no cross cases +test_addrs: + setw addr,$6EA + jsr test_forward + + setw addr,$700 + jsr test_reverse + + setw addr,$6EB + jsr test_forward + + setw addr,$6FF + jsr test_reverse + + rts + +; Times code at addr +time_code: + pha + + ; Synchronize with APU length counter + setb SNDMODE,$40 + setb SNDCHN,$01 + setb $4000,$10 + setb $4001,$7F + setb $4002,$FF + setb $4003,$18 + lda #$01 +: and SNDCHN + bne :- + + ; Setup length counter + setb $4003,$18 + + delay 29830-7120 + + ; Run instruction + setb temp,0 + pla + jmp (addr) + +raw_to_cycles: ; entry i is lowest value that qualifies for i cycles + .byte 250, 241, 233, 226, 219, 213, 206, 201, 195, 190, 0 + +; Jumps here when instruction has been timed +instr_done: + ; Convert iteration count to cycle count + lda temp + ldy #-1 +: iny + cmp raw_to_cycles,y + blt :- + + ; Convert 10+ to 0 + cpy #10 + blt :+ + ldy #0 +: + tya + jsr log_time + + rts + +.macro test_dir + ; Copy code + ldy #40 +: lda @code,y + sta (addr),y + dey + bpl :- + + ; Patch branch opcode + ldy #@branch - @code + lda opcode + sta (addr),y + + ; Calculate address of @loop + lda addr + clc + adc #@loop - @code + sta addr + lda addr+1 + adc #0 + sta addr+1 + + jmp time_code +@code: +.endmacro + +.macro instr_loop + inc temp + lda SNDCHN + and #$01 + beq *+5 + jmp (addr) + jmp instr_done +.endmacro + +test_reverse: + test_dir +: instr_loop +@loop: lda flags + pha + plp +@branch: + bmi :- + instr_loop + +test_forward: + test_dir +@loop: lda flags + pha + plp +@branch: + bmi :+ + instr_loop +: instr_loop diff --git a/instr_timing/source/common/ascii.chr b/instr_timing/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/instr_timing/source/common/build_rom.s b/instr_timing/source/common/build_rom.s new file mode 100644 index 0000000..f3d50cd --- /dev/null +++ b/instr_timing/source/common/build_rom.s @@ -0,0 +1,93 @@ +; Builds program as iNES ROM + +; Default is 32K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +; Move code to $C000 +.segment "CODE" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_ascii_chr + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/instr_timing/source/common/console.s b/instr_timing/source/common/console.s new file mode 100644 index 0000000..036553c --- /dev/null +++ b/instr_timing/source/common/console.s @@ -0,0 +1,331 @@ +; Scrolling text console with line wrapping, 30x29 characters. +; Buffers lines for speed. Will work even if PPU doesn't +; support scrolling (until text reaches bottom). Keeps border +; along bottom in case TV cuts it off. +; +; Defers most initialization until first newline, at which +; point it clears nametable and makes palette non-black. +; +; ** ASCII font must already be in CHR, and mirroring +; must be vertical or single-screen. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/instr_timing/source/common/crc.s b/instr_timing/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/instr_timing/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/instr_timing/source/common/delay.s b/instr_timing/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/instr_timing/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/instr_timing/source/common/devcart.bin b/instr_timing/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..684fbb99be38d6e3c146eadd8f8dd005ffc5268f GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1Wo+nWSim*mmrujL|HOg?>t;w)Uiv%JiQ&YB?>-ES zViwD1s88?d&`L@>csa>_f|eTR_2XX!HG8V%xUMJ9nVkFdh4L14siw*QS43#N*4V(k eG_}z~_wClCXDKH%UZp1I&L`I9|NlLK&IACCCY;*< literal 0 HcmV?d00001 diff --git a/instr_timing/source/common/macros.inc b/instr_timing/source/common/macros.inc new file mode 100644 index 0000000..d4cb72e --- /dev/null +++ b/instr_timing/source/common/macros.inc @@ -0,0 +1,169 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro diff --git a/instr_timing/source/common/neshw.inc b/instr_timing/source/common/neshw.inc new file mode 100644 index 0000000..814d772 --- /dev/null +++ b/instr_timing/source/common/neshw.inc @@ -0,0 +1,43 @@ +; NES I/O locations and masks + +; Clocks per second +.ifndef CLOCK_RATE + CLOCK_RATE = 1789773 ; NTSC +; CLOCK_RATE = 1662607 ; PAL +.endif + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.if CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.elseif CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/instr_timing/source/common/ppu.s b/instr_timing/source/common/ppu.s new file mode 100644 index 0000000..21cad12 --- /dev/null +++ b/instr_timing/source/common/ppu.s @@ -0,0 +1,142 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts diff --git a/instr_timing/source/common/print.s b/instr_timing/source/common/print.s new file mode 100644 index 0000000..29fbc23 --- /dev/null +++ b/instr_timing/source/common/print.s @@ -0,0 +1,235 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + pha + and #$0F + jsr @nibble + pla + rts + +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: A, X, Y +print_dec: + pha + sta print_temp_ + txa + pha + lda print_temp_ + + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jsr print_char + pla + tax + pla + rts + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/instr_timing/source/common/shell.inc b/instr_timing/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/instr_timing/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/instr_timing/source/common/shell.s b/instr_timing/source/common/shell.s new file mode 100644 index 0000000..358cddf --- /dev/null +++ b/instr_timing/source/common/shell.s @@ -0,0 +1,382 @@ +; Common routines and runtime + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +; Move code to $E200 ($200 bytes for text output in devcarts +; where WRAM is mirrored to $E000) +.segment "CODE" + .res $2200 + +; Put shell code after user code, so user code is in more +; consistent environment +.segment "CODE2" + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts +.endif + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sei + cld + ldx #$FF + txs + + ldx #0 + stx SNDCHN + .ifndef BUILD_NSF + stx PPUCTRL + .endif + + jsr report_result + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +.macro fill_ram_ Begin, End + .local Neg_size + Neg_size = (Begin) - (End) + ldxy #(Begin) - ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page +.endmacro + +; Disables interrupts and loops forever +.ifndef CUSTOM_FOREVER +forever: + sei + lda #0 + sta PPUCTRL +: beq :- + .res $10,$EA ; room for code to run loader +.endif + + +; Default NMI +.ifndef CUSTOM_NMI + zp_byte nmi_count + + nmi: + inc nmi_count + rti + + ; Waits for NMI. Must be using NMI handler that increments + ; nmi_count, with NMI enabled. + ; Preserved: X, Y + wait_nmi: + lda nmi_count + : cmp nmi_count + beq :- + rts +.endif + + +; Default IRQ +.ifndef CUSTOM_IRQ + irq: + bit SNDCHN ; clear APU IRQ flag + rti +.endif + +.endif + + +; Reports A in binary as high and low tones, with +; leading low tone for reference. Omits leading +; zeroes. Doesn't hang if no APU is present. +; Preserved: A, X, Y +play_hex: + pha + + ; Make low reference beep + clc + jsr @beep + + ; Remove high zero bits + sec +: rol a + bcc :- + + ; Play remaining bits + beq @zero +: jsr @beep + asl a + bne :- +@zero: + + delay_msec 300 + pla + rts + +; Plays low/high beep based on carry +; Preserved: A, X, Y +@beep: + pha + + ; Set up square + lda #1 + sta SNDCHN + sta $4001 + sta $4003 + adc #$FE ; period=$100 if carry, $1FF if none + sta $4002 + + ; Fade volume + lda #$0F +: ora #$30 + sta $4000 + delay_msec 8 + sec + sbc #$31 + bpl :- + + ; Silence + sta SNDCHN + delay_msec 160 + + pla + rts diff --git a/instr_timing/source/common/testing.s b/instr_timing/source/common/testing.s new file mode 100644 index 0000000..ba41f03 --- /dev/null +++ b/instr_timing/source/common/testing.s @@ -0,0 +1,106 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "RODATA",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing: + jmp init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/instr_timing/source/common/text_out.s b/instr_timing/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/instr_timing/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/mmc3_irq_tests/1.Clocking.nes b/mmc3_irq_tests/1.Clocking.nes new file mode 100644 index 0000000000000000000000000000000000000000..47ed2dd874b4d4a65af66c70af1f95ea6617fe50 GIT binary patch literal 16400 zcmeI2L1-LR7=ZuTBs(guUuwf{>Bt(D+5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx) zB0vO)01+SpM1Tko0U|&Ih`@7C0Ky|YIn2v1aq|FQo91_3;PVDwn&3iP?KK2=z}PRH zjj!Y60QP*cOK8fMhM)bKhExO;MK z(pr4th&R!7t;KS-%H}$?-#cP{l;xayA{$0oYFDGL6t-Am}k>jj~)v6$(x5A4-FdobqQgMf>VJuMp{QgevZLd4k{ z@xAbG?qIE~gfIto;Je({&Tluiec(Qv-`?Ka_bA^O{@L(%x$C;a2w&}CQq*gCI}AHu zb{qlIqTyT{%uk;_`4*cy`vE)o{)cB4X3qk<6N!R9$(B_DrJu%P%rBtt?^CB*i^X{6 zVoY4b0=_X=p71r?HDn;hRq;`Z;_#V4N$G*-c)`-VHjWS&VB_A(yK zQm@6eS0YFJQ`ufj!)N$a?}lB@u5=uszN?)?-$-Uuik4z3-Gti{*7M0fe{ zCo2D|6`x=&YzzAUh8Ie_%dU3Be!qOfz>Yp2>StjWkBE`w)kHj8?cMHa^D1) zF-$fCPQ(5qq?D~5q(RUR zurIVdjHq~9)=vON@i7T2s(tK#x`=IJKeF{}()+CqJd+iWJ860!_sOj%>4UaZ{h~Bg zJ&B1k|3T}D^4sdUMk{C*F`nnOR2>w|E9FkJVxqmDraPDqy(Zdvy zHjVTiUO(`apTCZ7{?yfzX|JnabFMoK9=hMSx7^xCo6Os+p)POYz3l3I^!~2>(LsIg z|5?!ihyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vQGgTS}ZMtmv$ E7jw55OaK4? literal 0 HcmV?d00001 diff --git a/mmc3_irq_tests/2.Details.nes b/mmc3_irq_tests/2.Details.nes new file mode 100644 index 0000000000000000000000000000000000000000..842e26f830eae597eff5409f7c8afe6086347540 GIT binary patch literal 16400 zcmeI2L1-IC6o%i*wpOIBvms5hF`-OJ3ku|*(iQ|2>4w;04V%=BUC40`jgTP+=ccB@ zP+WsC-PVU1LP>Y z5g-CYfCvx)B0vO)01+SpMBuq60KqtK9p<^0xN(55j`3SB@aYVnAK^k<>XZezz}T_o zjcfJR0R~M^`w2%nW6k?cE@b1)>z!Y;)){dIW8xHE7E`KoR5z)*3Dq&x9m5W@_pRiVPXiNC+VGFfs4CS3jF*mK+ z&2CRPYan1v6Z%@}W|T}X;8hXr_H%=M(Ga@VRtv5) z@HR&nHj%+6BTRfk)g$5o`)msX8XE|8j)b;&n%|y_f+u(idO@3e1N&xseIt0f9Q?_# zpe@v+-D&AJS~?E;^-HeKxQ*A2hvwX?Zc8um{y$p&n-`zp;zT$wlqlY1iw&{g%T+VD z#pnID9JEDBMJ_M3#J#0<6~sGB54{ZP(HR~QFY|rtc07E1HApqv@?o%r=l)vbpG-71 zkZCFd6SCQCtT>yE@RJ3j5>#I98UPa+gG~VB>}fV@zXb+fQfA=W#Fzm_Mj86qe12BN z45QM|G0mJxEvPQBOn(4*XHzym%!8R%0v4bm#|ra)1Ph~PAuTI#v~Z~wjgCUs@21uK zB=@@#eI!TCTrP+CQZ?ll(xYVnbr&X%x=ql9QcgT=YC}ht-MV0!uPHawV^Y2W!wa@Faq#=1EfZHD?1~yDD49 zw{fwtg6reZa`2d|r|>Uki|fC(_12i%)>rJSHiLVmZ%gYX=j$!@>Y5g-CYfCvx)B0vQGcLcr* Jf2d!q{|&_P?E(M* literal 0 HcmV?d00001 diff --git a/mmc3_irq_tests/3.A12_clocking.nes b/mmc3_irq_tests/3.A12_clocking.nes new file mode 100644 index 0000000000000000000000000000000000000000..00094deaa5abdb2398a8952a1ae387f27fab2218 GIT binary patch literal 16400 zcmeI2L5Lew7=ZuD?q)(=cBg3VSc*ImA;KO~^$;-BDcvozkk++bp~rVZJiijsKh5ygv z|KC6Vd;kBxFOSJ3$L3D#)4+nE3`mFo5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F z0z`la5CI}U1c(3;AOb{y2oQnio&W^e0hQkt=X#!aDlO( zI@iC9;@#}qj;DQxGoAg|c~C8dtlhcV`(BHWh$9#ihw!nOSE{PioKmw&F{NHdg{yb1 z?lPAi+u{Jaj=5AypR)N*_1BJA7-c!3cBE>QrFtQp*<)GaHv4Ep`0ic{d(#-UHp#yILyBT6GV0d_u^E7rg65u^tA7u3| z=h>%er|ABD&OV96Sh^ZZ4^M$Ku%rj;1}@E3XA{(F!}w^!KaS5h>f@dn zovC2{UxRKMtiBT3;;-`7QW8AD8!!mEoSo~~LVbnXv3@<)RX%Vh7!C*ba2ub!8JbJ4 zxv}o>;XhaYA1gk_q*#B%^gVW=Bc{F5dI3vc9*&DaSL9UWY%>=3o85H~?=~NK1>B}H zydqxVR(w01{&6M9ZFc3OU<2>{XPqo{dKOW@?`+h*sRT?Y7K`agip2y!MKBscLGSMrl}0Cfrz z)29~e8qC7>P%2piMqwP=1SrprW4CC&xc0eKf$|wC6Da|cs{xgo@B6h1^jcENRu2;2 z@B7#n+8#z!ye(@70i(E0!is7i`=82Vo7j(R{T%mxX#-DX1>|;;+{JZr^Ko*oEmglL z4OLHK;?%#_I;Z@$+E;J+jXcJ)yr!yyf_bIfZj=qQcavlr^P$&3TdUP7*Z?F``^(E= z0=CfHJ(fFWxtitXEHQ1*mt3$!0pC~Zni~%>Eb2R65O92N;V_=4Np|D&j0?=e@SZtd zjJIht?%?$UPx;yF=;{w$J)UyA`X&2{&EUTCwR6p>HaFN;8&w<^H}GC|bv}B3SAXl^ zc>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0{=naoA6e2 GI(iC8(H2Vp literal 0 HcmV?d00001 diff --git a/mmc3_irq_tests/4.Scanline_timing.nes b/mmc3_irq_tests/4.Scanline_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..202d04f935bc609e196cfeb4f2f26469c12b2b12 GIT binary patch literal 16400 zcmeI2(Q6z<7{I?hle=pT=@uKamMBy8;R;1g^x?pxUTG3HuqkO9MbL+V%CUhy#J5Aw zh?GbuuJpk`$kVaV;sjFbi*Ld{4KbWyK`1^**<0LD0>-@}&1tV2zuC*B{slte`!dWo z-}lXa^UZH(=U#GQ;_^uiD$tjG5+XnZhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y z5g-CYfCvx)B0vO)01+SpMBu3>0RBlHkMiOPt{>+&hWVXm`AnYA4|1U`c4`6~VC>6i z{Z=bJ&aOnR_9KpR>{@i+DhBMc=w|09EuIvU7!&8vEv8gwscu4b5m$YIL*$7jrVY2GgPj>8e`%Y9NXX8Yc>}f?6pvM&S(Xn)EI6K=Qvr_Zg=;EwG0B5 zHIZA++)jGtDw?h3jL_J*7Mp0fz&?DUFSa;$z~kamM@xGM)EENg2spda+Vub7s@!x5 zp&#f2+vYC3zq9ise7_g>|ERh9+_vq0gilYOe}he3y2xgyrl&5v18g@Cz$PL#f(Y1N zt1&1(VB?|4u$MwC6&)wUD4Pt$fO5pju`W&_8IeVY^+I5>JAugK{)K@YY}|ySc@6}s zY*m!2?bO^1U+l2w!cAY}#msicdNDA?Jt;y=Pyx9_*PdnmVd);9geOa9*+UyCUe z(cL(=9_Mg?+ZbfnY$wOKiN4c;F?Y&|bNE8OK=q#&Dc)vBB5}+uHu5<6>wa7E+qgH3 z#EY>A7uyXGZ!JD>^O!lukg=QpKHf-&dnn)i3?*Pd zp-@O&g+hXV1<>n${rRpAFrL@hI6%>yVYB9&prcEP&Xnk&=arzIEtO_fOxNrEIfhYG zQ_HIBNxnaTlC>qbKPrJyQUxqPT@IJ$y#yA9jB-}iVXS<$nG6j<*Xw4LeU^J&i8_%( zMzL7L`BF8d7qUY&0JRGP)2ABO)ma70Ln-$P(DMUWCO~O?0INl{y7o<_45h15CQ zR}IQl&-1Ef=rpC2%?>1<*Y&V2)E$hd_?E1m1&rcj5*AeXSpRSq%fxzQ^VhiZ+ZOOt z7C`PM$z7Z$w;v|=wxp^TrLNYKm^iiXH9t}ImU^z%^y*oR_wpKQ9TdzfR@q!nHiou+l}#j9kxw8kl-r2H>vTeHG`jGgRSBBcqF=x z&!?d!e~+8u=Fjb1JnXb{>hfZr_bwyrQpi3IEo|?GxNJMe53gHmCBpX9|F+NuhyW2F x0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vQGPXgZsKeSd`{{rk6au)yq literal 0 HcmV?d00001 diff --git a/mmc3_irq_tests/5.MMC3_rev_A.nes b/mmc3_irq_tests/5.MMC3_rev_A.nes new file mode 100644 index 0000000000000000000000000000000000000000..4881ee6c20400a8a8d327d683cdac5922eabf1fe GIT binary patch literal 16400 zcmeI2L1-IC6hQyViB_aW*^s8*noy>MfC4$Fv;{#$x*>L0f#SHfTXLL3Bi0a#dlRh? zlvYpzTYRWXD20ZFKqinhy_8-Gdm7T9iamuMO4v1)F@m_O98yuMtNvM8&b8N+|MmHQ z{`{Fge;>1Z(!%`mtOgcLWJE#)hyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CY zfCvx)B0vO)01+SpM1Tmq@B|>359dJD$8m|Y7VMYKM&8Iuq^R_?L@+NXDsYZW7yu=40E$e?+r(y zx&Z<a&|g;82rs` zJS#my82f%dcDScq>D7B4a1XBZde7JGj28w^>fVSujx)*d)&Ps5ULUu^umfgAAuuhR zjJ5sorArsyWR<1&*oDjQFRaWjv8DMBD$AA23+z0w`=Q9-vwW;-vGqtydD=J-pep0! z@zj11d86v9p)LL?^;VN$5225OK4;%=*+Nmu#(& zTzrNOci<9WNL{?kZf}XBUh!rQ7k@R;FN40wsLVI5SZucXH$lA9dg|qHo6eAiv1QCIHknEE611tMotO(l~QR%m`3W?q&2m;Y;AHt)JDHw_p+C&3_#F3#5`7}4&0?{L>!niVo7w3)fO-lO%cmaC zHJF9%p_IoB7`a2(CO~QK5O$01+dE%dWhh;fGLaInxKb$BeBZB?VbGRRwg-^-{?Nz1 z&<`-9@*P<_2bjfe5}K-g>_4ByHnAVs{yiT2(E*-H6Xb4^Ji>Ky`&sh1BUQgB4RxNx z!fE`t{fUY@YG1wWH?o)?*EQ8SC|Fm@-A2hk|0qdzu^vVZ^tD>8j154NKUrD}6R?Hm zp0M00%hfD5V~L}7rRahsa`;lKi)s9cX;I&gf`H@8jcV+v!T64585dZG;XQM_7;n>o zKE&$>o{H5wtKj|zvBj<5`g)vq`}%eJhRsfII=7uWPIVBmnawKdUWC`Tuk(X%VfF1U z>I?tjrw1ScM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5%`}G_#yl` Hx*Gip{K}4c literal 0 HcmV?d00001 diff --git a/mmc3_irq_tests/5.MMC3_rev_A.sav b/mmc3_irq_tests/5.MMC3_rev_A.sav new file mode 100644 index 0000000..4960062 --- /dev/null +++ b/mmc3_irq_tests/5.MMC3_rev_A.sav @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/mmc3_irq_tests/6.MMC3_rev_B.nes b/mmc3_irq_tests/6.MMC3_rev_B.nes new file mode 100644 index 0000000000000000000000000000000000000000..c58b30c6bdaee695a4f3b3fdee3add78a24ed104 GIT binary patch literal 16400 zcmeI2QHvW@6oAiU+f1loJ7ujMmm*h+kV3%`6#~XO+TAjNbi3|urH}W)hFR#t`W7?< zL?Tic*#{Sj_)rE4-a^;>Y5g-E3JOK#jd3=If&vWA#-<;)lp5x0ozHyiftvRd-@PM&Xz1!b( z;$sYYzV;K2bjErQD^|qjdpCzaYw>w;9%JHNToz?zD#|P>v!D!9<`f#tKC*elTz~9{ z*Kq2Z>sGqTKHsUF?uq4tDywQoY7VMYK8wyAw{3BkL01Ic2^)LU7`AsN!@R80?a{ud zY=M9+P3T*h?PNT?g451cMrdrN!}N|1?4_rEuEV(p0T-WmT52IuV~Es3#MvvId*NT) z!L!mMgfa1xxyya+a=+I1f%|Z|-+!9-aGV(aUi0_4>$=kjZw|32>a}q@3_D@pP+l!xTw?D5yAz2FKFdd{7Tf%f6*Imz31Dol zBS4*%rd3{yrvLmHdq@0T?5`)`6Z|sv!vSYM>^MTv+>7KEZaWK?9k8H;Xna0A3!%}0I?x9JS| z`nm7pyXo-H>tSYhARmQYyfp2daq0AQk;D3Y+PkR)Oehoz=~AJP;HLmaJ*>YlG5{8G z23r8IoMpD=ya5I-DKYRWGG>60Q-Xf2SX@&v!>CVlOw&@SC1u8vn+~8@Y0KRYi(nR2 z0}ZIl+0sUkKqGIKva${*OIKS-J`bZ{lvVSyJQzvziOidpWnsQls(d4xuK}p1FtL2< z@mz!1*d9u0+<=igglz&87Y<>!=)S)7m0g13RVfoG0gEezQZ)#IY6*rdDP?O2Nf3+z z>aI{bq)&Fm2$6MG|=Bql0B@4vpV`}wOYakAelW`+=voz zgytQ$y&2onY%gPrqfXiKz!o`t+114~{=l%PO=e-p@uf#Ko~Xh2j%FDbScl;~bNv`^ z(}CW@>j%D?t9Mz!{g*i6<}U+1p7jR$HRrm+-tM~Jy0_el(Pgi8E2wi_yru)4AN&?p z-t3`1^FRFb07QTY5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+Sp|1$#L KML%|~bp8Q78; (swap to e-mail) diff --git a/mmc3_irq_tests/source/1.Clocking.asm b/mmc3_irq_tests/source/1.Clocking.asm new file mode 100644 index 0000000..cc14f14 --- /dev/null +++ b/mmc3_irq_tests/source/1.Clocking.asm @@ -0,0 +1,85 @@ +; Tests MMC3 IRQ counter operation. Requires support for clocking via +; manual toggling of VRAM address. + + .include "prefix_mmc3_validation.a" + +test_name: + .db "MMC3 IRQ COUNTER",0 + +reset: + jsr begin_mmc3_tests + + lda #2;) Counter/IRQ/A12 clocking isn't working at all + ldx #10 + jsr begin_counter_test + jsr clock_counter + jsr clock_counter + jsr should_be_clear + + lda #3;) Should decrement when A12 is toggled via $2006 + ldx #2 + jsr begin_counter_test + ldx #9 + jsr clock_counter_x + jsr should_be_set + + lda #4;) Writing to $C000 shouldn't cause reload + ldx #2 + jsr begin_counter_test + jsr clock_counter ; reloads with 2 + lda #100 + jsr set_reload + ldx #8 + jsr clock_counter_x + jsr should_be_set + + lda #5;) Writing to $C001 shouldn't cause immediate reload + ldx #1 + jsr begin_counter_test + lda #1 + jsr set_reload + jsr clear_counter + lda #4 + jsr set_reload + jsr clock_counter ; 4 + jsr clock_counter ; 3 + jsr should_be_clear + + lda #6;) Should reload (no decrement) on first clock after clear + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr should_be_clear + + lda #7;) IRQ should be set when counter is decremented to 0 + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr should_be_set + + lda #8;) IRQ should never be set when disabled + ldx #1 + jsr begin_counter_test + jsr disable_irq + ldx #10 + jsr clock_counter_x + jsr should_be_clear + + lda #9;) Should reload when clocked when counter is 0 + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + lda #10 + jsr set_reload + jsr clock_counter ; 0 + lda #2 + jsr set_reload + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clear_irq + jsr clock_counter ; 0 + jsr should_be_set + + jmp tests_passed diff --git a/mmc3_irq_tests/source/2.Details.asm b/mmc3_irq_tests/source/2.Details.asm new file mode 100644 index 0000000..84aed36 --- /dev/null +++ b/mmc3_irq_tests/source/2.Details.asm @@ -0,0 +1,88 @@ +; Tests MMC3 IRQ counter details + + .include "prefix_mmc3_validation.a" + +test_name: + .db "MMC3 IRQ COUNTER DETAILS",0 + +reset: + jsr begin_mmc3_tests + + lda #2;) Counter isn't working when reloaded with 255 + ldx #255 + jsr begin_counter_test + ldx #255 + jsr clock_counter_x + jsr should_be_clear + jsr clock_counter + jsr should_be_set + + lda #3;) Counter should run even when IRQ is disabled + ldx #2 + jsr begin_counter_test + jsr disable_irq + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr enable_irq + jsr should_be_clear + jsr clock_counter ; 0 + jsr should_be_set + + lda #4;) Counter should run even after IRQ flag has been set + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clock_counter ; 2 + jsr clear_irq + jsr clock_counter ; 1 + jsr should_be_clear + jsr clock_counter ; 0 + jsr should_be_set + + lda #5;) IRQ should not be set when counter reloads with non-zero + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clear_irq + jsr clock_counter ; 1 + jsr should_be_clear + + lda #6;) IRQ should not be set when counter is cleared via $C001 + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clear_counter + jsr should_be_clear + + lda #0 + jsr clear_vram + jsr clear_sprites + lda #7;) Counter should be clocked 241 times in PPU frame + ldx #241 + jsr begin_counter_test + jsr wait_vbl + lda #0 + sta $2005 + sta $2005 + lda #$08 ; sprites use tiles at $1xxx + sta $2000 + lda #$18 ; enable bg and sprites + sta $2001 + ldy #25 ; 29800 delay + lda #237 + jsr delay_ya8 + lda #$00 ; disable rendering + sta $2001 + jsr should_be_clear + jsr clock_counter + jsr should_be_set + + jmp tests_passed + diff --git a/mmc3_irq_tests/source/3.A12_clocking.asm b/mmc3_irq_tests/source/3.A12_clocking.asm new file mode 100644 index 0000000..63de7d0 --- /dev/null +++ b/mmc3_irq_tests/source/3.A12_clocking.asm @@ -0,0 +1,88 @@ +; Tests MMC3 IRQ clocking via bit 12 of VRAM address + + .include "prefix_mmc3_validation.a" + +test_name: + .db "MMC3 IRQ COUNTER A12",0 + +reset: + jsr begin_mmc3_tests + + lda #0 ; disable PPU, sprites and bg use $0xxx patterns + sta $2000 + sta $2001 + + lda #2;) Shouldn't be clocked when A12 doesn't change + ldx #1 + jsr begin_counter_test + lda #$00 ; transition everything but A12 + ldx #$ef + ldy #$ff + sta $2006 + sta $2006 + stx $2006 + sty $2006 + sta $2006 + sta $2006 + stx $2006 + sty $2006 + sta $2006 + sta $2006 + jsr should_be_clear + + lda #3;) Shouldn't be clocked when A12 changes to 0 + ldx #1 + jsr begin_counter_test + jsr clock_counter ; avoid pathological behavior + lda #$10 + sta $2006 + sta $2006 + jsr clear_counter + jsr clear_irq + ldx #$00 + ldy #$10 + stx $2006 + stx $2006 + sty $2006 ; counter = 1 + stx $2006 + stx $2006 ; second 1 to 0 transition + stx $2006 + jsr should_be_clear + + lda #4;) Should be clocked when A12 changes to 1 via $2006 write + ldx #1 + jsr begin_counter_test + jsr clock_counter + lda #$00 ; transition A12 from 0 to 1 + sta $2006 + sta $2006 + lda #$10 + sta $2006 + sta $2006 + jsr should_be_set + + lda #5;) Should be clocked when A12 changes to 1 via $2007 read + ldx #1 + jsr begin_counter_test + jsr clock_counter + lda #$0f ; vaddr = $0fff + sta $2006 + lda #$ff + sta $2006 + jsr should_be_clear + bit $2007 + jsr should_be_set + + lda #6;) Should be clocked when A12 changes to 1 via $2007 write + ldx #1 + jsr begin_counter_test + jsr clock_counter + lda #$0f ; vaddr = $0fff + sta $2006 + lda #$ff + sta $2006 + jsr should_be_clear + sta $2007 + jsr should_be_set + + jmp tests_passed diff --git a/mmc3_irq_tests/source/4.Scanline_timing.asm b/mmc3_irq_tests/source/4.Scanline_timing.asm new file mode 100644 index 0000000..4415abe --- /dev/null +++ b/mmc3_irq_tests/source/4.Scanline_timing.asm @@ -0,0 +1,77 @@ +; Tests basic MMC3 IRQ timing for scanlines 0, 1, and 240 + + .include "prefix_mmc3_validation.a" + +test_name: + .db "MMC3 IRQ TIMING",0 + +reset: + jsr begin_mmc3_tests + + lda #0 + jsr clear_vram + jsr clear_sprites + + lda #0 + jsr begin_test + ldy #5 ; 2327 delay + lda #91 + jsr delay_ya5 + lda #2;) Scanline 0 time is too soon/late + jsr check_irq_time + + lda #1 + jsr begin_test + ldy #20 ; 2440 delay + lda #23 + jsr delay_ya3 + lda #4;) Scanline 1 time is too soon/late + jsr check_irq_time + + lda #240 + jsr begin_test + ldy #173 ; 29606 delay + lda #33 + jsr delay_ya6 + lda #6;) Scanline 239 time is too soon/late + jsr check_irq_time + + jmp tests_passed + .code + +begin_test: + pha + jsr sync_ppu_align2_30 + lda #$08 ; 12 + sta $2000 + lda #$18 + sta $2001 + pla ; 20 + sta r_set_reload + sta r_clear_counter + sta r_disable_irq + sta r_enable_irq + rts ; 6 + .code + +get_irq_time: + ldx #0 + cli + nop + ldx #1 + nop + sei ; IRQ causes return from this routine + ldx #2 + rts + .code + +check_irq_time: + sta result + jsr get_irq_time + dex + bne + + rts +: bmi + + inc result +: jmp report_final_result + .code diff --git a/mmc3_irq_tests/source/5.MMC3_rev_A.asm b/mmc3_irq_tests/source/5.MMC3_rev_A.asm new file mode 100644 index 0000000..6fd41bc --- /dev/null +++ b/mmc3_irq_tests/source/5.MMC3_rev_A.asm @@ -0,0 +1,30 @@ +; Tests MMC3 revision A differences + + .include "prefix_mmc3_validation.a" + +test_name: + .db "MMC3 IRQ COUNTER REVISION A",0 + +reset: + jsr begin_mmc3_tests + + lda #2;) IRQ should be set when reloading to 0 after clear + ldx #0 + jsr begin_counter_test + jsr clock_counter ; 0 + jsr should_be_set + + lda #3;) IRQ shouldn't occur when reloading after counter normally reaches 0 + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + lda #0 + jsr set_reload + jsr clock_counter ; 0 + jsr clear_irq + jsr clock_counter ; 0 + jsr should_be_clear + ldx #255 + + jmp tests_passed + diff --git a/mmc3_irq_tests/source/6.MMC3_rev_B.asm b/mmc3_irq_tests/source/6.MMC3_rev_B.asm new file mode 100644 index 0000000..636e693 --- /dev/null +++ b/mmc3_irq_tests/source/6.MMC3_rev_B.asm @@ -0,0 +1,34 @@ +; Tests MMC3 revision B differences + + .include "prefix_mmc3_validation.a" + +test_name: + .db "MMC3 IRQ COUNTER REVISION B",0 + +reset: + jsr begin_mmc3_tests + + lda #2;) Should reload and set IRQ every clock when reload is 0 + ldx #0 + jsr begin_counter_test + jsr clock_counter ; 0 + jsr should_be_set + jsr clock_counter ; 0 + jsr should_be_set + jsr clock_counter ; 0 + jsr should_be_set + + lda #3;) IRQ should be set when counter is 0 after reloading + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clear_irq + lda #0 + jsr set_reload + jsr clock_counter ; 0 + jsr should_be_set + + + jmp tests_passed + diff --git a/mmc3_irq_tests/source/console.asm b/mmc3_irq_tests/source/console.asm new file mode 100644 index 0000000..793d9c7 --- /dev/null +++ b/mmc3_irq_tests/source/console.asm @@ -0,0 +1,101 @@ + +console_pos = $7f0 + +; Print char A to console +; Preserved: A, X, Y +print_char: + jsr wait_vbl ; wait for safe access +print_char_no_wait: + pha + lda #$20 + sta $2006 + inc console_pos + lda console_pos + sta $2006 + lda #0 ; restore scroll + sta $2005 + sta $2005 + pla + sta $2007 + rts + .code + +; Go to next line +; Preserved: A, X, Y +console_newline: + pha + lda console_pos + and #$e0 + clc + adc #$21 + sta console_pos + pla + rts + .code + +; Initialize console +init_console: + lda #$81 + sta console_pos + + jsr wait_vbl ; init ppu + lda #0 + sta $2000 + sta $2001 + + lda #$3f ; load palette + jsr set_vpage + lda #15 ; bg + ldx #48 ; fg + ldy #8 +pal: sta $2007 + stx $2007 + stx $2007 + stx $2007 + dey + bne pal + + lda #$02 ; load tiles + jsr set_vpage + lda #chr_data.lsb + sta <$f0 + lda #chr_data.msb + sta <$f1 + ldy #0 + lda #59 ; 59 chars in data + sta <$f2 +chr_loop: + ldx #8 + lda #0 +: sta $2007 + dex + bne - + + ldx #8 +: lda ($f0),y + iny + sta $2007 + dex + bne - + + tya + bne + + inc <$f1 +: dec <$f2 + bne chr_loop + + lda #32 + jsr fill_nametable + + jsr wait_vbl ; enable ppu + lda #0 + sta $2005 + sta $2005 + lda #$08 + sta $2001 + rts + .code + +chr_data: + .incbin "chr.bin" + diff --git a/mmc3_irq_tests/source/debug.asm b/mmc3_irq_tests/source/debug.asm new file mode 100644 index 0000000..903bf97 --- /dev/null +++ b/mmc3_irq_tests/source/debug.asm @@ -0,0 +1,149 @@ + +; Beep A times. Made to require minimal features from APU. +debug_beeps: +beep_loop: + pha + + lda #1 ; set up square 1 + sta $4015 + sta $4003 + sta $4001 + sta $4002 + + lda #$0f ; fade volume +: pha + eor #$30 + sta $4000 + lda #8 + jsr delay_msec + pla + clc + adc #-1 + bpl - + + sta $4015 ; silence square for a bit + lda #120 + jsr delay_msec + + pla + clc + adc #-1 + bne beep_loop + rts + .code + +; Print indicated register to console as $hh +; Preserved: A, X, Y, P +print_a: + php + jsr debug_byte + plp + rts + .code + +print_x: + php + pha + txa + jsr debug_byte + pla + plp + rts + .code + +print_y: + php + pha + tya + jsr debug_byte + pla + plp + rts + .code + +print_s: + php + pha + txa + pha + tsx + txa + jsr debug_byte + pla + tax + pla + plp + rts + .code + +print_p: + php + pha + php + pla + jsr debug_byte + pla + plp + rts + .code + +print_ay: + php + pha + lda #36 + jsr debug_char + pla + pha + jsr hex_byte + tya + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + plp + rts + .code + +; Print address YA to console as $hhhh +; Preserved: A, X, Y +debug_addr: + pha + lda #36 ; '$' + jsr debug_char + tya + jsr hex_byte + jmp debug_byte_impl + .code + +; Print byte A to console as $hh +; Preserved: A, X, Y +debug_byte: + pha + lda #36 ; '$' + jsr debug_char +debug_byte_impl: + pla + pha + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + rts + +hex_byte: + pha + lsr a + lsr a + lsr a + lsr a + jsr nybble + pla + and #$0f +nybble: + cmp #10 + bcc not_letter + adc #6 ; relies on carry being set +not_letter: + adc #$30 + jmp debug_char_no_wait + .code diff --git a/mmc3_irq_tests/source/delays.asm b/mmc3_irq_tests/source/delays.asm new file mode 100644 index 0000000..db4f23e --- /dev/null +++ b/mmc3_irq_tests/source/delays.asm @@ -0,0 +1,118 @@ +; to do: delay loops that take only a single count + +; Delay for almost A milliseconds (A * 0.999009524 msec) +; Preserved: X, Y +delay_msec: + pha ; 3 + lda #253 ; 2 + sec ; 2 +delay_msec_: + nop ; 2 + adc #-2 ; 2 + bne delay_msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_msec ; 3 + rts + .code + +; Delay for almost 'A / 10' milliseconds (A * 0.099453968 msec) +; Preserved: X, Y +delay_01msec: + pha ; 3 + lda #18 ; 2 + sec ; 2 +delay_01msec_: + nop ; 2 + nop ; 2 + adc #-2 ; 2 + bne delay_01msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_01msec ; 3 + rts + .code + +; Delay for almost A*10 milliseconds +; Preserved: X, Y +delay_10msec: + pha + lda #10 + jsr delay_msec + pla + clc + adc #-1 + bne delay_10msec + rts + .code + +; Delay n clocks +; Preserved: P, A, X, Y +delay_32: nop +delay_30: nop +delay_28: nop +delay_26: nop +delay_24: nop +delay_22: nop +delay_20: nop +delay_18: nop +delay_16: nop +delay_14: nop +delay_12: rts + +delay_33: nop +delay_31: nop +delay_29: nop +delay_27: nop +delay_25: nop +delay_23: nop +delay_21: nop +delay_19: nop +delay_17: beq + ; 5 +: bne + +: rts ; 6 + .code + +; Delay (5 * A + 6) * Y + 7 + n clocks +delay_ya11: + .db $a2 ; 1 ldx #imm +delay_ya10: + .db $a2 ; 1 ldx #imm +delay_ya9: + .db $a2 ; 1 ldx #imm +delay_ya8: + .db $a2 ; 1 ldx #imm +delay_ya7: + .db $a2 ; 1 ldx #imm +delay_ya6: + .db $a2 ; 1 ldx #imm +delay_ya5: + .db $a2 ; 1 ldx #imm +delay_ya4: + .db $a2 ; 1 ldx #imm +delay_ya3: + .db $a2 ; 1 ldx #imm +delay_ya2: + .db $a2 ; 1 ldx #imm +delay_ya1: + .db $a6 ; 1 ldx zp +delay_ya0: + nop ; 2 +delay_ya: + ; 2 lda # + ; 2 ldy # + ; 6 jsr + tax ; *2 +delay_yax: + dex ; **2 + bne delay_yax ; **3 + ; *-1 + dey ; *2 + bne delay_ya ; *3 + ; -1 + rts ; 6 + .code diff --git a/mmc3_irq_tests/source/ppu_sync.asm b/mmc3_irq_tests/source/ppu_sync.asm new file mode 100644 index 0000000..832eef3 --- /dev/null +++ b/mmc3_irq_tests/source/ppu_sync.asm @@ -0,0 +1,124 @@ + +; Same as sync_ppu_20 plus next frame is odd (clock subtracted) or even +; (no clock subtracted). +sync_ppu_odd_20: + lda #$80 + bne sync_ppu_frame_ +sync_ppu_even_20: + lda #$00 +sync_ppu_frame_: + pha + ; Synchronize with PPU + jsr sync_ppu_20 ; synchronize with PPU + + ; Run for two frames with BG enabled. One of the two frames will + ; be one PPU clock shorter. Note whether the first frame was the + ; shorter one. + + lda #$08 ; 6 enable bg + sta $2001 + ldy #41 ; 29785 delay + lda #144 + jsr delay_ya2 + nop ; 2 delay + pla ; 4 + eor $2002 ; 4 find whether frame was odd or even + pha ; 3 + ; run another enabled frame so that clock will + ; have been subtracted on one of the two frames + ldy #43 ; 29730+ delay + lda #137 + jsr delay_ya1 + lda #$00 ; 6 disable bg + sta $2001 + + ; If the first frame was shorter, wait three frames to switch + ; the even/odd synchronization without changing the CPU clock's + ; synchronization with the PPU clock. + + pla ; 4 + pha ; 3 + bpl + ; 3 + ; -1 + ldy #75 ; 89343 delay + lda #237 + jsr delay_ya1 +: pla ; 4 + rts ; 6 + .code + +; After return, 30 clocks until VBL flag will read +; as set, then 29781, then 29780. Turns PPU +; rendering, NMI, IRQ, and DMC off. +sync_ppu_align2_30: + pha + txa + pha + tya + pha + lda #0 ; disable dmc and irq + sta $4015 + sei + jsr wait_vbl + lda #0 ; disable bg and nmi + sta $2000 + sta $2001 + + bit $2002 +: bit $2002 ; 1 + bpl - ; 2 + + ldy #141 ; 29774 delay + lda #41 + jsr delay_ya6 + +: ldy #86 ; 29774 delay + lda #68 + jsr delay_ya1 + + bit $2002 ; 1 + bpl - ; 2 + + ldy #28 ; 29726 delay + lda #211 + jsr delay_ya1 + + pla ; 16 + tay + pla + tax + pla + + rts ; 6 + .code + +sync_ppu_align1_30: + jsr sync_ppu_align2_30 + ldy #86 ; 29775 delay + lda #68 + jsr delay_ya2 + rts + .code + +sync_ppu_align1_31: + jsr sync_ppu_align2_30 + ldy #86 ; 29774 delay + lda #68 + jsr delay_ya1 + rts + .code + +sync_ppu_align0_30: + jsr sync_ppu_align1_30 + ldy #86 ; 29774 delay + lda #68 + jsr delay_ya1 + rts + .code + +sync_ppu_20: + jsr sync_ppu_align2_30 + nop ; 4 + nop + rts ; 6 + .code diff --git a/mmc3_irq_tests/source/ppu_util.asm b/mmc3_irq_tests/source/ppu_util.asm new file mode 100644 index 0000000..51baa8f --- /dev/null +++ b/mmc3_irq_tests/source/ppu_util.asm @@ -0,0 +1,112 @@ + +; Clear VBL flag then wait for it to be set +; Preserved: A, X, Y +wait_vbl: + bit $2002 +: bit $2002 + bpl - + rts + .code + +; Set VRAM address to A * $100 +; Preserved: X, Y +set_vpage: + bit $2002 + sta $2006 + lda #0 + sta $2006 + rts + .code + +; Set VRAM address to A * $100 + X +; Preserved: A, X, Y +set_vaddr: + bit $2002 + sta $2006 + stx $2006 + rts + .code + +; Set X and Y scroll +; Preserved: A, X, Y +set_vscroll: + bit $2002 + stx $2005 + sty $2005 + rts + .code + +; Turn off NMI and disable BG and sprites +; Preserved: A, X, Y +disable_ppu: + pha + lda #0 + sta $2000 + sta $2001 + bit $2002 + sta $2006 + sta $2006 + pla + rts + .code + +; Set sprite memory to $ff +; Preserved: Y +clear_sprites: + lda #$ff + ldx #0 +: sta $2004 + dex + bne - + rts + .code + +; Clear/fill nametable with 0/A and clear attributes to 0 +clear_nametable: + lda #0 +fill_nametable: + pha + lda #$20 + jsr set_vpage + pla + ldx #240 +: sta $2007 + sta $2007 + sta $2007 + sta $2007 + dex + bne - + lda #0 + ldx #32 +: sta $2007 + dex + bne - + rts + .code + +; Clear/fill VRAM with 0/A +clear_vram: + lda #0 +fill_vram: + ldy #$24 + jmp fill_vram_ + .code + +; Clear/fill CHR with 0/A +clear_chr: + lda #0 +fill_chr: + ldy #$20 +fill_vram_: + tax + lda #0 + jsr set_vpage + txa + ldx #0 +: sta $2007 + dex + bne - + dey + bne - + rts + .code diff --git a/mmc3_irq_tests/source/prefix_cpu.asm b/mmc3_irq_tests/source/prefix_cpu.asm new file mode 100644 index 0000000..4ab7a81 --- /dev/null +++ b/mmc3_irq_tests/source/prefix_cpu.asm @@ -0,0 +1,18 @@ + .include "validation.a" + +; Arrange for IRQ to be pending on return. +; Preserved: A, X, Y +setup_pending_irq: + sei + pha + lda #$40 ; clear frame irq flag + sta $4017 + lda #$00 ; begin mode 0 + sta $4017 + + lda #40 ; wait for irq flag to be set + jsr delay_msec + pla + rts + .code + diff --git a/mmc3_irq_tests/source/prefix_mmc3.asm b/mmc3_irq_tests/source/prefix_mmc3.asm new file mode 100644 index 0000000..bd0d9aa --- /dev/null +++ b/mmc3_irq_tests/source/prefix_mmc3.asm @@ -0,0 +1,162 @@ + .include "prefix_swap.a" + +r_set_reload = $c000 +r_clear_counter = $c001 +r_disable_irq = $e000 +r_enable_irq = $e001 + +begin_mmc3_tests: + lda #200 + jsr delay_msec + lda #$c0 ; disable frame irq + sta $4017 + lda #0 ; disable PPU + sta $2001 + sta $2000 + bit $2002 ; vaddr = 0 + sta $2006 + sta $2006 + + ; Setup RESET handler + ldx $fffc + lda #$4c + sta 0,x + lda #$00 + sta 1,x + lda #$07 + sta 2,x + + ; Setup IRQ handler + ldx $fffe + lda #$4c + sta 0,x + lda #irq.lsb + sta 1,x + lda #irq.msb + sta 2,x + + lda #1 + jsr set_reload + jsr clear_counter + ldx #0 + jsr clock_counter_x + jsr clear_counter + ldx #0 + jsr clock_counter_x + jsr clear_irq + rts + + rts + .code + +; Decrement counter until IRQ occurs, then +; print how many decrements were required +print_count: + jsr get_count + jsr print_x + jsr clear_irq + rts + .code + +; Print $01 if IRQ is pending, $00 if not +print_pending: + jsr get_pending + lda #'P' + dex + beq + + lda #'-' +: jsr debug_char + lda #32 + jmp debug_char + .code + +set_reload: + sta r_set_reload + rts + +clear_counter: + lda #123 + sta r_clear_counter + rts + +disable_irq: + lda #123 + sta r_disable_irq + rts + +; Disable then re-enable IRQ +clear_irq: + lda #123 + sta r_disable_irq +enable_irq: + lda #123 + sta r_enable_irq + rts + .code + +; Clock counter X times +; Preserved: A, Y +clock_counter_x: +: jsr clock_counter + dex + bne - + rts + .code + +; Clock counter once +; Preserved: A, X, Y +clock_counter: + pha + lda #0 + sta $2006 + sta $2006 + lda #$10 + sta $2006 + sta $2006 + lda #0 + sta $2006 + sta $2006 + pla + rts + .code + +; Return X=1 if IRQ is pending, otherwise X=0 +; Preserved: Y +get_pending: + ldx #1 + cli + nop + sei ; IRQ causes return from this routine + nop + ldx #0 + rts + .code + +; Decrement counter until IRQ occurs and return +; number of decrements required in A. +get_count: + ldx #0 + cli + nop + nop +: lda #0 + sta $2006 + sta $2006 + lda #$10 + inx + sta $2006 + sta $2006 + bne - + sei + ldx #$ff + rts + +; Return from get_count +irq: pla + pla + pla + lda #0 + sta $2006 + sta $2006 + rts + .code diff --git a/mmc3_irq_tests/source/prefix_mmc3_validation.asm b/mmc3_irq_tests/source/prefix_mmc3_validation.asm new file mode 100644 index 0000000..526b456 --- /dev/null +++ b/mmc3_irq_tests/source/prefix_mmc3_validation.asm @@ -0,0 +1,27 @@ + .include "prefix_mmc3.a" + +begin_counter_test: + sta result + jsr clock_counter ; avoid pathological reload behavior + jsr clock_counter + txa + jsr set_reload + jsr clear_counter + jsr clear_irq + rts + .code + +should_be_clear: + jsr get_pending + cpx #0 + jsr error_if_ne + jsr clear_irq + rts + +should_be_set: + jsr get_pending + cpx #1 + jsr error_if_ne + jsr clear_irq + rts + diff --git a/mmc3_irq_tests/source/prefix_swap.asm b/mmc3_irq_tests/source/prefix_swap.asm new file mode 100644 index 0000000..e023946 --- /dev/null +++ b/mmc3_irq_tests/source/prefix_swap.asm @@ -0,0 +1,3 @@ + .include "prefix_cpu.a" + .include "util.a" + .include "ppu_sync.a" diff --git a/mmc3_irq_tests/source/runtime_swapcart.asm b/mmc3_irq_tests/source/runtime_swapcart.asm new file mode 100644 index 0000000..3dbb1cf --- /dev/null +++ b/mmc3_irq_tests/source/runtime_swapcart.asm @@ -0,0 +1,26 @@ + .include "delays.a" + .include "serial.a" + .include "debug.a" + .include "ppu_util.a" + +debug_newline: + lda #13 +debug_char: +debug_char_no_wait: + jmp serial_write + .code + +init_runtime: + rts + .code + +forever: + jmp $0700 + .code + + .default main = reset + + .org $fffa + .dw nmi + .dw main + .dw irq diff --git a/mmc3_irq_tests/source/validation.asm b/mmc3_irq_tests/source/validation.asm new file mode 100644 index 0000000..180d7ea --- /dev/null +++ b/mmc3_irq_tests/source/validation.asm @@ -0,0 +1,120 @@ + +result = $f8 + +default_test_name: + .db 0 + .default test_name = default_test_name + +; Report error if branch with given condition would be taken +error_if_ne: + bne report_final_result_ + rts +error_if_eq: + beq report_final_result_ + rts +error_if_mi: + bmi report_final_result_ + rts +error_if_pl: + bpl report_final_result_ + rts +error_if_cc: + bcc report_final_result_ + rts +error_if_cs: + bcs report_final_result_ + rts +error_if_vc: + bvc report_final_result_ + rts +error_if_vs: + bvs report_final_result_ + rts + +; Report passing result +tests_passed: + lda #1 + sta result +; Report final result code and wait forever +report_final_result: +report_final_result_: + sei ; disable interrupts + lda #0 + sta $2000 + jsr init_runtime + + lda test_name + beq no_name + jsr debug_char + ldx #1 +: lda test_name,x + beq no_name + jsr debug_char_no_wait + inx + jmp - + +no_name: + jsr debug_newline + + lda result + cmp #1 + beq test_passed + + lda #'F' + jsr debug_char + lda #'A' + jsr debug_char_no_wait + lda #'I' + jsr debug_char_no_wait + lda #'L' + jsr debug_char_no_wait + lda #'E' + jsr debug_char_no_wait + lda #'D' + jsr debug_char_no_wait + lda #32 ; ' ' + jsr debug_char_no_wait + lda #'#' + jsr debug_char_no_wait + + lda result + cmp #10 + bcc + + clc + adc #-10 + pha + lda #'1' + jsr debug_char_no_wait + pla +: clc + adc #'0' + jsr debug_char_no_wait +report_beeps: + lda result + jsr debug_beeps + jmp forever + +test_passed: + lda #'P' + jsr debug_char + lda #'A' + jsr debug_char_no_wait + lda #'S' + jsr debug_char_no_wait + lda #'S' + jsr debug_char_no_wait + lda #'E' + jsr debug_char_no_wait + lda #'D' + jsr debug_char_no_wait + jmp report_beeps + .code + + .default nmi = default_nmi + .default irq = default_irq + .code +default_irq: + bit $4015 +default_nmi: + rti + diff --git a/mmc3_test/1-clocking.nes b/mmc3_test/1-clocking.nes new file mode 100644 index 0000000000000000000000000000000000000000..0c0d98ae0d34a2a043a55d95f14ea89ebc4608cd GIT binary patch literal 40976 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 X01+SpM1Tko0U|&IhyW4zKN9#a_~nuY literal 0 HcmV?d00001 diff --git a/mmc3_test/2-details.nes b/mmc3_test/2-details.nes new file mode 100644 index 0000000000000000000000000000000000000000..44134a624aa7d1a52fb73967203ccd8551b9c943 GIT binary patch literal 40976 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 D34X@y literal 0 HcmV?d00001 diff --git a/mmc3_test/3-A12_clocking.nes b/mmc3_test/3-A12_clocking.nes new file mode 100644 index 0000000000000000000000000000000000000000..8b40e5a897776efcd51946b8c937870522c69b12 GIT binary patch literal 40976 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 KfCzj>2>crhH_|%* literal 0 HcmV?d00001 diff --git a/mmc3_test/4-scanline_timing.nes b/mmc3_test/4-scanline_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..81fc3e0e43c01785e4472e32984b97f5d2399ab0 GIT binary patch literal 40976 zcmeI1e{5UT702&;PF&Y>^Q$Q_X&T*@A~D3+D`U)Tp?Diq4)TBjnz{+L8xk8QbCW7b zi`lHG(&{RzFbaPlb(1n#7Djz&g%)WNtF+0}m?4?fJ@!XeCd8urupLucGoWN8*gN;W zcipsc+aW*#>AX7rzI*RE=brPq_uaV8y>~y@t}5Rp@~Ys41dsp{Kmter2_OL^fCP{L z5A6z0?aNxwH6a`#t^_hrvC^yn43)9gOWiWgnX;iJcAbxM_7=muyU z^v7o%zC+^O5fXCncmXbYX!d!qpwT(sJ#f(zvmxJC8@aG4=Y-mC@7MfFZpvA*aT6X6 zvJqiHouVCU4#gTmu|~RSj;@_cHHRCB?~pG+N_P6jEOZ`gFwTVzhjI-ih2 zHK&tUn_h{v#MZ}JV;k7kHcj RJbq+`d1U~6#wz=S*2lG@PyPHaP}wfp5*YifP> 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 S01+SpM1Tko0V42!B=A2V8@1&C literal 0 HcmV?d00001 diff --git a/mmc3_test/6-MMC6.nes b/mmc3_test/6-MMC6.nes new file mode 100644 index 0000000000000000000000000000000000000000..844ffd71e96f1d5e430b70034d3717b20bc1ebb6 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/mmc3_test/readme.txt b/mmc3_test/readme.txt new file mode 100644 index 0000000..ca6596c --- /dev/null +++ b/mmc3_test/readme.txt @@ -0,0 +1,80 @@ +NES MMC3 Tests +-------------- +These tests verify a small part of MMC3 (and some MMC6) behavior, mostly +related to the scanline counter and IRQ. They should be run in order. + + +Multi-tests +----------- +The NES/NSF builds in the main directory consist of multiple sub-tests. +When run, they list the subtests as they are run. The final result code +refers to the first sub-test that failed. For more information about any +failed subtests, run them individually from rom_singles/ and +nsf_singles/. + + +Flashes, clicks, other glitches +------------------------------- +If a test prints "passed", it passed, even if there were some flashes or +odd sounds. Only a test which prints "done" at the end requires that you +watch/listen while it runs in order to determine whether it passed. Such +tests involve things which the CPU cannot directly test. + + +Alternate output +---------------- +Tests generally print information on screen, but also report the final +result audibly, and output text to memory, in case the PPU doesn't work +or there isn't one, as in an NSF or a NES emulator early in development. + +After the tests are done, the final result is reported as a series of +beeps (see below). For NSF builds, any important diagnostic bytes are +also reported as beeps, before the final result. + + +Output at $6000 +--------------- +All text output is written starting at $6004, with a zero-byte +terminator at the end. As more text is written, the terminator is moved +forward, so an emulator can print the current text at any time. + +The test status is written to $6000. $80 means the test is running, $81 +means the test needs the reset button pressed, but delayed by at least +100 msec from now. $00-$7F means the test has completed and given that +result code. + +To allow an emulator to know when one of these tests is running and the +data at $6000+ is valid, as opposed to some other NES program, $DE $B0 +$G1 is written to $6001-$6003. + + +Audible output +-------------- +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason. See the source +code of the test for more information about the meaning of a test code. +They are found after the set_test macro. For example, the cause of test +code 3 would be found in a line containing set_test 3. Examples: + + Tones Binary Decimal Meaning + - - - - - - - - - - - - - - - - - - - - + low 0 0 passed + low high 01 1 failed + low high low 010 2 error 2 + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to prevent the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +-- +Shay Green diff --git a/mmc3_test/source/1-clocking.s b/mmc3_test/source/1-clocking.s new file mode 100644 index 0000000..62d24e2 --- /dev/null +++ b/mmc3_test/source/1-clocking.s @@ -0,0 +1,79 @@ +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + set_test 2,"Counter/IRQ/A12 clocking isn't working at all" + ldx #10 + jsr begin_counter_test + jsr clock_counter + jsr clock_counter + jsr should_be_clear + + set_test 3,"Should decrement when A12 is toggled via PPUADDR" + ldx #2 + jsr begin_counter_test + ldx #9 + jsr clock_counter_x + jsr should_be_set + + set_test 4,"Writing to $C000 shouldn't cause reload" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; reloads with 2 + lda #100 + jsr set_reload + ldx #8 + jsr clock_counter_x + jsr should_be_set + + set_test 5,"Writing to $C001 shouldn't cause immediate reload" + ldx #1 + jsr begin_counter_test + lda #1 + jsr set_reload + jsr clear_counter + lda #4 + jsr set_reload + jsr clock_counter ; 4 + jsr clock_counter ; 3 + jsr should_be_clear + + set_test 6,"Should reload (no decrement) on first clock after clear" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr should_be_clear + + set_test 7,"IRQ should be set when counter is decremented to 0" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr should_be_set + + set_test 8,"IRQ should never be set when disabled" + ldx #1 + jsr begin_counter_test + jsr disable_irq + ldx #10 + jsr clock_counter_x + jsr should_be_clear + + set_test 9,"Should reload when clocked when counter is 0" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + lda #10 + jsr set_reload + jsr clock_counter ; 0 + lda #2 + jsr set_reload + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clear_irq + jsr clock_counter ; 0 + jsr should_be_set + + jmp tests_passed diff --git a/mmc3_test/source/2-details.s b/mmc3_test/source/2-details.s new file mode 100644 index 0000000..0812e05 --- /dev/null +++ b/mmc3_test/source/2-details.s @@ -0,0 +1,79 @@ +; Tests MMC3 IRQ counter details + +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + set_test 2,"Counter isn't working when reloaded with 255" + ldx #255 + jsr begin_counter_test + ldx #255 + jsr clock_counter_x + jsr should_be_clear + jsr clock_counter + jsr should_be_set + + set_test 3,"Counter should run even when IRQ is disabled" + ldx #2 + jsr begin_counter_test + jsr disable_irq + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr enable_irq + jsr should_be_clear + jsr clock_counter ; 0 + jsr should_be_set + + set_test 4,"Counter should run even after IRQ flag has been set" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clock_counter ; 2 + jsr clear_irq + jsr clock_counter ; 1 + jsr should_be_clear + jsr clock_counter ; 0 + jsr should_be_set + + set_test 5,"IRQ should not be set when counter reloads with non-zero" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clear_irq + jsr clock_counter ; 1 + jsr should_be_clear + + set_test 6,"IRQ should not be set when counter is cleared via $C001" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clear_counter + jsr should_be_clear + + lda #0 + ;jsr clear_vram + jsr clear_oam + set_test 7,"Counter should be clocked 241 times in PPU frame" + ldx #241 + jsr begin_counter_test + jsr wait_vbl + setb PPUSCROLL,0 + sta PPUSCROLL + setb PPUCTRL,$08 ; sprites use tiles at $1xxx + setb PPUMASK,$18 ; enable bg and sprites + delay 29800 + setb PPUMASK,$00 ; disable rendering + jsr should_be_clear + jsr clock_counter + jsr should_be_set + + jmp tests_passed + diff --git a/mmc3_test/source/3-A12_clocking.s b/mmc3_test/source/3-A12_clocking.s new file mode 100644 index 0000000..0d37c6f --- /dev/null +++ b/mmc3_test/source/3-A12_clocking.s @@ -0,0 +1,77 @@ +; Tests MMC3 IRQ clocking via bit 12 of VRAM address + +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + setb PPUCTRL,0 ; disable PPU, sprites and bg use $0xxx patterns + sta PPUMASK + + set_test 2,"Shouldn't be clocked when A12 doesn't change" + ldx #1 + jsr begin_counter_test + lda #$00 ; transition everything but A12 + ldx #$ef + ldy #$ff + sta PPUADDR + sta PPUADDR + stx PPUADDR + sty PPUADDR + sta PPUADDR + sta PPUADDR + stx PPUADDR + sty PPUADDR + sta PPUADDR + sta PPUADDR + jsr should_be_clear + + set_test 3,"Shouldn't be clocked when A12 changes to 0" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; avoid pathological behavior + setb PPUADDR,$10 + sta PPUADDR + jsr clear_counter + jsr clear_irq + ldx #$00 + ldy #$10 + stx PPUADDR + stx PPUADDR + sty PPUADDR ; counter = 1 + stx PPUADDR + stx PPUADDR ; second 1 to 0 transition + stx PPUADDR + jsr should_be_clear + + set_test 4,"Should be clocked when A12 changes to 1 via PPUADDR write" + ldx #1 + jsr begin_counter_test + jsr clock_counter + setb PPUADDR,$00 ; transition A12 from 0 to 1 + sta PPUADDR + setb PPUADDR,$10 + sta PPUADDR + jsr should_be_set + + set_test 5,"Should be clocked when A12 changes to 1 via PPUDATA read" + ldx #1 + jsr begin_counter_test + jsr clock_counter + setb PPUADDR,$0f ; vaddr = $0fff + setb PPUADDR,$ff + jsr should_be_clear + bit PPUDATA + jsr should_be_set + + set_test 6,"Should be clocked when A12 changes to 1 via PPUDATA write" + ldx #1 + jsr begin_counter_test + jsr clock_counter + setb PPUADDR,$0f ; vaddr = $0fff + setb PPUADDR,$ff + jsr should_be_clear + sta PPUDATA + jsr should_be_set + + jmp tests_passed diff --git a/mmc3_test/source/4-scanline_timing.s b/mmc3_test/source/4-scanline_timing.s new file mode 100644 index 0000000..fb36737 --- /dev/null +++ b/mmc3_test/source/4-scanline_timing.s @@ -0,0 +1,123 @@ +; Tests MMC3 IRQ timing to PPU clock accuracy. Tests both modes, +; $2000=$08 and $2000=$10. +; +; Timing tested is between $2002 reads of VBL flag first set, +; and IRQ occurring. + +.include "test_mmc3.inc" +.include "sync_vbl.s" + +.macro test mode, count, n + .local n_ + n_ = (n) + 1 + setb PPUMASK,0 + jsr sync_vbl_even + delay_ppu_even (n_ .MOD 3) + 9 + setb PPUCTRL,mode + lda #count + jsr begin_ + delay n_/3 - 3 - 43 + jsr end_ +.endmacro + +begin_: + pha + setb PPUMASK,$18 + pla + sta r_set_reload + sta r_clear_counter + sta r_disable_irq + sta r_enable_irq + rts + +end_: + setb irq_flag,$10 + cli + nop + nop + inc irq_flag + delay 1000 + sei + nop + lda irq_flag + cmp #$11 + beq @no_irq + rts + +@no_irq: + set_test 14,"IRQ never occurred" + jmp test_failed + +main: + jsr begin_mmc3_tests + + jsr clear_oam + + scanline_0_08 = 6976 + scanline_1_08 = scanline_0_08 + + set_test 2,"Scanline 0 IRQ should occur later when $2000=$08" + test $08, 0, scanline_0_08 - 1 + cmp #$22 + jne test_failed + + set_test 3,"Scanline 0 IRQ should occur sooner when $2000=$08" + test $08, 0, scanline_0_08 + cmp #$21 + jne test_failed + + set_test 4,"Scanline 1 IRQ should occur later when $2000=$08" + test $08, 1, scanline_1_08 + 341 - 1 + cmp #$22 + jne test_failed + + set_test 5,"Scanline 1 IRQ should occur sooner when $2000=$08" + test $08, 1, scanline_1_08 + 341 + cmp #$21 + jne test_failed + + set_test 6,"Scanline 239 IRQ should occur later when $2000=$08" + test $08, 239, scanline_1_08 + 239*341 - 1 + cmp #$22 + jne test_failed + + set_test 7,"Scanline 239 IRQ should occur sooner when $2000=$08" + test $08, 239, scanline_1_08 + 239*341 + cmp #$21 + jne test_failed + + + scanline_0_10 = 6976 - 256 + scanline_1_10 = scanline_0_10 - 21 + + set_test 8,"Scanline 0 IRQ should occur later when $2000=$10" + test $10, 0, scanline_0_10 - 1 + cmp #$22 + jne test_failed + + set_test 9,"Scanline 0 IRQ should occur sooner when $2000=$10" + test $10, 0, scanline_0_10 + cmp #$21 + jne test_failed + + set_test 10,"Scanline 1 IRQ should occur later when $2000=$10" + test $10, 1, scanline_1_10 + 341 - 1 + cmp #$22 + jne test_failed + + set_test 11,"Scanline 1 IRQ should occur sooner when $2000=$10" + test $10, 1, scanline_1_10 + 341 + cmp #$21 + jne test_failed + + set_test 12,"Scanline 239 IRQ should occur later when $2000=$10" + test $10, 239, scanline_1_10 + 239*341 - 1 + cmp #$22 + jne test_failed + + set_test 13,"Scanline 239 IRQ should occur sooner when $2000=$10" + test $10, 239, scanline_1_10 + 239*341 + cmp #$21 + jne test_failed + + jmp tests_passed diff --git a/mmc3_test/source/5-MMC3.s b/mmc3_test/source/5-MMC3.s new file mode 100644 index 0000000..4b4eb5b --- /dev/null +++ b/mmc3_test/source/5-MMC3.s @@ -0,0 +1,31 @@ +; Tests MMC3-specifics + +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + set_test 2,"Should reload and set IRQ every clock when reload is 0" + ldx #0 + jsr begin_counter_test + jsr clock_counter ; 0 + jsr should_be_set + jsr clock_counter ; 0 + jsr should_be_set + jsr clock_counter ; 0 + jsr should_be_set + + set_test 3,"IRQ should be set when counter is 0 after reloading" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clear_irq + lda #0 + jsr set_reload + jsr clock_counter ; 0 + jsr should_be_set + + + jmp tests_passed + diff --git a/mmc3_test/source/6-MMC6.s b/mmc3_test/source/6-MMC6.s new file mode 100644 index 0000000..7c53dd1 --- /dev/null +++ b/mmc3_test/source/6-MMC6.s @@ -0,0 +1,31 @@ +; Tests MMC6-specific behavior. Some MMC3 chips also have this behavior, +; though their markings appear identical to those that have normal +; MMC3 behavior. My copy of Crystalis in particular behaves this way, +; but not my copy of Super Mario Bros. 3, even though both have a chip +; marked MMC3B. + +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + set_test 2,"IRQ should be set when reloading to 0 after clear" + ldx #0 + jsr begin_counter_test + jsr clock_counter ; 0 + jsr should_be_set + + set_test 3,"IRQ shouldn't occur when reloading after counter normally reaches 0" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + lda #0 + jsr set_reload + jsr clock_counter ; 0 + jsr clear_irq + jsr clock_counter ; 0 + jsr should_be_clear + ldx #255 + + jmp tests_passed + diff --git a/mmc3_test/source/common/ascii.chr b/mmc3_test/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/mmc3_test/source/common/build_rom.s b/mmc3_test/source/common/build_rom.s new file mode 100644 index 0000000..7c6d139 --- /dev/null +++ b/mmc3_test/source/common/build_rom.s @@ -0,0 +1,93 @@ +; Builds program as iNES ROM + +; Default is 16K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +; Move code to $C000 +.segment "DMC" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_ascii_chr + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/mmc3_test/source/common/console.s b/mmc3_test/source/common/console.s new file mode 100644 index 0000000..036553c --- /dev/null +++ b/mmc3_test/source/common/console.s @@ -0,0 +1,331 @@ +; Scrolling text console with line wrapping, 30x29 characters. +; Buffers lines for speed. Will work even if PPU doesn't +; support scrolling (until text reaches bottom). Keeps border +; along bottom in case TV cuts it off. +; +; Defers most initialization until first newline, at which +; point it clears nametable and makes palette non-black. +; +; ** ASCII font must already be in CHR, and mirroring +; must be vertical or single-screen. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/mmc3_test/source/common/crc.s b/mmc3_test/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/mmc3_test/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/mmc3_test/source/common/delay.s b/mmc3_test/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/mmc3_test/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/mmc3_test/source/common/devcart.bin b/mmc3_test/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..6c515bed582fdf11468afe914012327fc05dd241 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1Wo+nWSim*m*GlJJQHMo8=5pA-xbRD%>fgzI7k;)f z0vV}{Q<+{|__E@{s~iS~m5ej+CmVC%T>_tgUCSAOCSS`$7e{HGuA{P+Jq0QU>4 Ag#Z8m literal 0 HcmV?d00001 diff --git a/mmc3_test/source/common/macros.inc b/mmc3_test/source/common/macros.inc new file mode 100644 index 0000000..d4cb72e --- /dev/null +++ b/mmc3_test/source/common/macros.inc @@ -0,0 +1,169 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro diff --git a/mmc3_test/source/common/neshw.inc b/mmc3_test/source/common/neshw.inc new file mode 100644 index 0000000..814d772 --- /dev/null +++ b/mmc3_test/source/common/neshw.inc @@ -0,0 +1,43 @@ +; NES I/O locations and masks + +; Clocks per second +.ifndef CLOCK_RATE + CLOCK_RATE = 1789773 ; NTSC +; CLOCK_RATE = 1662607 ; PAL +.endif + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.if CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.elseif CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/mmc3_test/source/common/ppu.s b/mmc3_test/source/common/ppu.s new file mode 100644 index 0000000..21cad12 --- /dev/null +++ b/mmc3_test/source/common/ppu.s @@ -0,0 +1,142 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts diff --git a/mmc3_test/source/common/print.s b/mmc3_test/source/common/print.s new file mode 100644 index 0000000..29fbc23 --- /dev/null +++ b/mmc3_test/source/common/print.s @@ -0,0 +1,235 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + pha + and #$0F + jsr @nibble + pla + rts + +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: A, X, Y +print_dec: + pha + sta print_temp_ + txa + pha + lda print_temp_ + + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jsr print_char + pla + tax + pla + rts + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/mmc3_test/source/common/shell.inc b/mmc3_test/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/mmc3_test/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/mmc3_test/source/common/shell.s b/mmc3_test/source/common/shell.s new file mode 100644 index 0000000..3747b46 --- /dev/null +++ b/mmc3_test/source/common/shell.s @@ -0,0 +1,388 @@ +; Common routines and runtime + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +;**** Special globals **** + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +.segment "NVRAM" + ; Beginning of variables not cleared at startup + nvram_begin: + +;**** Code segment setup **** + +.segment "RODATA" + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +; Move code to $E200 ($200 bytes for text output) +.segment "DMC" + .res $2200 + +; Devcart corrupts byte at $E000 when powering off +.segment "CODE" + nop + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts + +.endif + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sei + cld + ldx #$FF + txs + pha + + setb SNDCHN,0 + .ifndef BUILD_NSF + setb PPUCTRL,0 + .endif + + pla + pha + jsr report_result + ;jsr clear_nvram ; TODO: was this needed for anything? + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +; Clears $0-($100+S) and nv_ram_end-$7FF +clear_ram: + lda #0 + + ; Main pages + tax +: sta 0,x + sta $300,x + sta $400,x + sta $500,x + sta $600,x + sta $700,x + inx + bne :- + + ; Stack except that above stack pointer + tsx + inx +: dex + sta $100,x + bne :- + + ; BSS except nvram + ldx #<__NVRAM_SIZE__ +: sta __NVRAM_LOAD__,x + inx + bne :- + + rts + + +; Clears nvram +clear_nvram: + ldx #<__NVRAM_SIZE__ + beq @empty + lda #0 +: dex + sta __NVRAM_LOAD__,x + bne :- +@empty: + rts + + +; Prints filename and newline, if available, otherwise nothing. +; Preserved: A, X, Y +print_filename: + .ifdef FILENAME_KNOWN + pha + jsr print_newline + setw addr,filename + jsr print_str_addr + jsr print_newline + pla + .endif + rts + +.pushseg +.segment "RODATA" + ; Filename terminated with zero byte. + filename: + .ifdef FILENAME_KNOWN + .incbin "ram:nes_temp" + .endif + .byte 0 +.popseg + + +;**** ROM-specific **** +.ifndef BUILD_NSF + +.include "ppu.s" + +avoid_silent_nsf: +play_byte: + rts + +; Loads ASCII font into CHR RAM +.macro load_ascii_chr + bit PPUSTATUS + setb PPUADDR,$00 + setb PPUADDR,$00 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page +.endmacro + +; Disables interrupts and loops forever +.ifndef CUSTOM_FOREVER +forever: + sei + lda #0 + sta PPUCTRL +: beq :- + .res $10,$EA ; room for code to run loader +.endif + + +; Default NMI +.ifndef CUSTOM_NMI + zp_byte nmi_count + + nmi: + inc nmi_count + rti + + ; Waits for NMI. Must be using NMI handler that increments + ; nmi_count, with NMI enabled. + ; Preserved: X, Y + wait_nmi: + lda nmi_count + : cmp nmi_count + beq :- + rts +.endif + + +; Default IRQ +.ifndef CUSTOM_IRQ + irq: + bit SNDCHN ; clear APU IRQ flag + rti +.endif + +.endif + + +; Reports A in binary as high and low tones, with +; leading low tone for reference. Omits leading +; zeroes. +; Preserved: A, X, Y +play_hex: + pha + + ; Make low reference beep + clc + jsr @beep + + ; Remove high zero bits + sec +: rol a + bcc :- + + ; Play remaining bits + beq @zero +: jsr @beep + asl a + bne :- +@zero: + + delay_msec 300 + pla + rts + +; Plays low/high beep based on carry +; Preserved: A, X, Y +@beep: + pha + + ; Set up square + lda #1 + sta SNDCHN + sta $4001 + sta $4003 + adc #$FE ; period=$100 if carry, $1FF if none + sta $4002 + + ; Fade volume + lda #$0F +: ora #$30 + sta $4000 + delay_msec 8 + sec + sbc #$31 + bpl :- + + ; Silence + sta SNDCHN + delay_msec 160 + + pla + rts diff --git a/mmc3_test/source/common/sync_vbl.s b/mmc3_test/source/common/sync_vbl.s new file mode 100644 index 0000000..298904d --- /dev/null +++ b/mmc3_test/source/common/sync_vbl.s @@ -0,0 +1,163 @@ +; Synchronizes EXACTLY to VBL, to accuracy of 1/3 CPU clock +; (1/2 CPU clock if PPU is enabled). Reading PPUSTATUS +; 29768 clocks or later after return will have bit 7 set. +; Reading PPUSTATUS immediately will have bit 7 clear. +; Preserved: A, X, Y +; Time: 120-330 msec +.align 128 +sync_vbl: + pha + + ; Disable interrupts + sei + lda #0 + sta PPUCTRL + + ; Coarse synchronize + bit PPUSTATUS +: bit PPUSTATUS + bpl :- + + ; Delay so that VBL is sure to occur slightly after + ; critical window in loop below. + delay 29760 ; +1 works, +2 fails + jmp @first + + ; VBL occurs every 29780.67 (rendering disabled) + ; or 29780.5 (rendering enabled) CPU clocks. Loop + ; takes 29781 CPU clocks. Thus, time of VBL will + ; be effectively 1/3 or 1/2 CPU clock earlier in + ; loop each time. At some point, it will fall just + ; before second PPUSTATUS read below. +: delay 29781-4-4-3 +@first: bit PPUSTATUS ; clear flag (not really necessary) + bit PPUSTATUS ; see if just set + bpl :- + + pla + rts + + +; Same as sync_vbl, but additionally ensures that next frame +; will skip PPU clock at end of VBL if rendering is enabled. +; Preserved: A, X, Y +sync_vbl_odd: + pha + + ; Rendering must be disabled + jsr wait_vbl + lda #0 + sta PPUMASK + + jsr sync_vbl + jsr @render_frame + + ; See whether frame was short + ; If not, frames totaled 59561+1/3 CPU clocks + delay 29781-17-1 + lda PPUSTATUS + bmi :+ + jmp @end +: + ; If frame was short, first frame was + ; one clock shorter. Wait another frame to + ; toggle even/odd flag. Rendering enabled + ; for frame so total of all three frames + ; is 89341+1/3 CPU clocks, which has the + ; same fraction as the other case, thus + ; ensuring the same CPU-PPU synchronization. + jsr @render_frame + +@end: ; Establish same timing as sync_vbl + delay 29781-7 + + ; Be sure VBL flag is clear for this frame, as the + ; other sync routines do. + bit PPUSTATUS + + pla + rts + +@render_frame: + lda #PPUMASK_BG0 + sta PPUMASK + delay 29781-6-6-6-6+1 + lda #0 + sta PPUMASK + rts + + +; Same as sync_vbl_odd, but next frame will NOT skip PPU clock +; Preserved: A, X, Y +sync_vbl_even: + jsr sync_vbl_odd + delay 341*262*3 / 3 - 10; get to even frame without affecting sync + + ; Be sure VBL flag is clear for this frame, as the + ; other sync routines do. + bit PPUSTATUS + rts + + +; Same as sync_vbl_even, but also writes A to SPRDMA without +; affecting timing (in particular, SPRDMA's optional extra clock +; is dealt with). +; Preserved: A, X, Y +sync_vbl_even_dma: + jsr sync_vbl_odd + delay 341*262 - 534 + sta SPRDMA + bit PPUSTATUS + + ; Delay extra clock if ncessary. Unaffected by code + ; alignment since it branches to next instr. + bpl :+ +: + ; Be sure VBL flag is clear for this frame, as the + ; other sync routines do. + bit PPUSTATUS + rts + + +; Same as sync_vbl, but then delays A additional PPU clocks. +; Preserved: X, Y +.align 32 +sync_vbl_delay: + jsr sync_vbl + + ; VBL occurs every 29780.67 clocks, therefore + ; each iteration of the loop is like delaying + ; 1/3 CPU clock (1 PPU clock). +: delay 29781-7 + clc + adc #-1 + bcs :- + + delay 29781*2-10 + + ; Be sure VBL flag is clear for this frame, as the + ; other sync routines do. + bit PPUSTATUS + rts + + +; Effectively delays n PPU clocks, while maintaing +; even/odd frame (i.e. never delays an odd number of +; frames). PPU rendering must be off. +; Preserved: A, X, Y +.macro delay_ppu_even n + .if (n) < 8 + .error "time out of range" + .endif + .if (n) .MOD 3 = 1 + .if (n) > 4 + delay (n)/3-1 + .endif + delay 29781*4 + .elseif (n) .MOD 3 = 2 + delay (n)/3 + delay 29781*2 + .else + delay (n)/3 + .endif +.endmacro diff --git a/mmc3_test/source/common/test_mmc3.inc b/mmc3_test/source/common/test_mmc3.inc new file mode 100644 index 0000000..cacb8b6 --- /dev/null +++ b/mmc3_test/source/common/test_mmc3.inc @@ -0,0 +1,125 @@ +CUSTOM_IRQ=1 +CUSTOM_MAPPER=4 ; MMC3 +.include "shell.inc" + +r_set_reload = $C000 +r_clear_counter = $C001 +r_disable_irq = $E000 +r_enable_irq = $E001 + +begin_mmc3_tests: + delay_msec 200 + setb SNDMODE,$C0 ; disable frame irq + setb PPUMASK,0 ; disable PPU + setb PPUCTRL,0 + set_ppuaddr 0 + + lda #1 + jsr set_reload + jsr clear_counter + ldx #0 + jsr clock_counter_x + jsr clear_counter + ldx #0 + jsr clock_counter_x + jsr clear_irq + rts + +set_reload: + sta r_set_reload + rts + +clear_counter: + setb r_clear_counter,123 + rts + +disable_irq: + setb r_disable_irq,123 + rts + +; Disable then re-enable IRQ +clear_irq: + setb r_disable_irq,123 +enable_irq: + setb r_enable_irq,123 + rts + +; Clock counter X times +; Preserved: A, Y +clock_counter_x: +: jsr clock_counter + dex + bne :- + rts + +; Clock counter once +; Preserved: A, X, Y +clock_counter: + pha + setb PPUADDR,0 + sta PPUADDR + setb PPUADDR,$10 + sta PPUADDR + setb PPUADDR,0 + sta PPUADDR + pla + rts + +; Return X=1 if IRQ is pending, otherwise X=0 +; Preserved: Y +get_pending: + setb irq_flag,$01 + cli + nop + sei ; IRQ causes return from this routine + nop + ldx irq_flag + dex + rts + +; Decrement counter until IRQ occurs and return +; number of decrements required in A. +get_countx: + ldx #0 + cli + nop + nop +: setb PPUADDR,0 + sta PPUADDR + lda #$10 + inx + sta PPUADDR + sta PPUADDR + bne :- + sei + ldx #$FF + rts + +zp_res irq_flag + +irq: asl irq_flag + sta r_disable_irq + rti + +begin_counter_test: + jsr clock_counter ; avoid pathological reload behavior + jsr clock_counter + txa + jsr set_reload + jsr clear_counter + jsr clear_irq + rts + +should_be_clear: + jsr get_pending + cpx #0 + jne test_failed + jsr clear_irq + rts + +should_be_set: + jsr get_pending + cpx #1 + jne test_failed + jsr clear_irq + rts diff --git a/mmc3_test/source/common/testing.s b/mmc3_test/source/common/testing.s new file mode 100644 index 0000000..ba41f03 --- /dev/null +++ b/mmc3_test/source/common/testing.s @@ -0,0 +1,106 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "RODATA",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing: + jmp init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/mmc3_test/source/common/text_out.s b/mmc3_test/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/mmc3_test/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/mmc3_test_2/readme.txt b/mmc3_test_2/readme.txt new file mode 100644 index 0000000..6132318 --- /dev/null +++ b/mmc3_test_2/readme.txt @@ -0,0 +1,121 @@ +NES MMC3 Tests +-------------- +These tests verify a small part of MMC3 (and some MMC6) behavior, mostly +related to the scanline counter and IRQ. They should be run in order. + +The ROMs mainly test behavior by manually clocking the MMC3's IRQ +counter by writing to $2006 to change the current VRAM address. The last +two ROMs test behavior that differs among MMC3 chips. + + +MMC3 Operation +-------------- +I have fairly thoroughly tested MMC3 IRQ counter operation and found the +following behaviors that differ as described in kevtris's (draft?) MMC3 +documentation: + +- The counter can be clocked manually via bit 12 of the VRAM address +even when $2000 = $00 (bg and sprites both use tiles from $0xxx). + +- The IRQ flag is not set when the counter is cleared by writing to +$C001. + +- I uncovered some pathological behavior that isn't covered by the test +ROMs. If $C001 is written, the counter clocked, then $C001 written +again, on the next counter clock the counter will be ORed with $80 +(revision B)/frozen (revision A) and neither decremented nor reloaded. +If $C001 is written again at this point, on the next counter clock it +will be reloaded normally. I put a check in my emulator and none of the +several games I tested ever caused this situation to occur, so it's +probably not a good idea to implement this. + +The MMC3 in Crystalis (referred to here as revision A) worked as +described in kevtris's document, with the above changes. The MMC3 in +Super Mario Bros. 3 and Mega Man 3 (I think revision B, but I don't have +the special screw driver) further differed when $C000 was written with +0: + +- Writing 0 to $C000 works no differently than any other value written; +it will cause the counter to be reloaded every time it is clocked (once +it reaches zero). + +- When the counter is clocked, if it's not zero, it is decremented, +otherwise it is reloaded with the last value written to $C000. *After* +decrementing/reloading, if the counter is zero and IRQ is enabled via +$E001, the IRQ flag is set. + + +Multi-tests +----------- +The NES/NSF builds in the main directory consist of multiple sub-tests. +When run, they list the subtests as they are run. The final result code +refers to the first sub-test that failed. For more information about any +failed subtests, run them individually from rom_singles/ and +nsf_singles/. + + +Flashes, clicks, other glitches +------------------------------- +If a test prints "passed", it passed, even if there were some flashes or +odd sounds. Only a test which prints "done" at the end requires that you +watch/listen while it runs in order to determine whether it passed. Such +tests involve things which the CPU cannot directly test. + + +Alternate output +---------------- +Tests generally print information on screen, but also report the final +result audibly, and output text to memory, in case the PPU doesn't work +or there isn't one, as in an NSF or a NES emulator early in development. + +After the tests are done, the final result is reported as a series of +beeps (see below). For NSF builds, any important diagnostic bytes are +also reported as beeps, before the final result. + + +Output at $6000 +--------------- +All text output is written starting at $6004, with a zero-byte +terminator at the end. As more text is written, the terminator is moved +forward, so an emulator can print the current text at any time. + +The test status is written to $6000. $80 means the test is running, $81 +means the test needs the reset button pressed, but delayed by at least +100 msec from now. $00-$7F means the test has completed and given that +result code. + +To allow an emulator to know when one of these tests is running and the +data at $6000+ is valid, as opposed to some other NES program, $DE $B0 +$G1 is written to $6001-$6003. + + +Audible output +-------------- +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason. See the source +code of the test for more information about the meaning of a test code. +They are found after the set_test macro. For example, the cause of test +code 3 would be found in a line containing set_test 3. Examples: + + Tones Binary Decimal Meaning + - - - - - - - - - - - - - - - - - - - - + low 0 0 passed + low high 01 1 failed + low high low 010 2 error 2 + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to prevent the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +-- +Shay Green diff --git a/mmc3_test_2/rom_singles/1-clocking.nes b/mmc3_test_2/rom_singles/1-clocking.nes new file mode 100644 index 0000000000000000000000000000000000000000..4458d561cbb4907ec0c228995085e3ef08e8f24a GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/mmc3_test_2/rom_singles/2-details.nes b/mmc3_test_2/rom_singles/2-details.nes new file mode 100644 index 0000000000000000000000000000000000000000..080cf476aae59fae54cef5f457c16c868cee9f34 GIT binary patch literal 40976 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 W5g-CYfCvx)B0vO)01@~?5%?cC(=Rjt literal 0 HcmV?d00001 diff --git a/mmc3_test_2/rom_singles/3-A12_clocking.nes b/mmc3_test_2/rom_singles/3-A12_clocking.nes new file mode 100644 index 0000000000000000000000000000000000000000..319b75e2ae50127e6ff8c7d2d14b697efd1285c6 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/mmc3_test_2/rom_singles/4-scanline_timing.nes b/mmc3_test_2/rom_singles/4-scanline_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..ebc0584e715234b9d93e71413d63559fc1104cec GIT binary patch literal 40976 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 Y0!RP}AOR$R1dsp{KmthM|BAqW0iv!zBme*a literal 0 HcmV?d00001 diff --git a/mmc3_test_2/rom_singles/6-MMC3_alt.nes b/mmc3_test_2/rom_singles/6-MMC3_alt.nes new file mode 100644 index 0000000000000000000000000000000000000000..f9c1c2a2b0f561b6dff1d2ceec705795c9a7283b GIT binary patch literal 40976 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 xPvl1ggCGGUfCP{L5S8{t09U8vOtO literal 0 HcmV?d00001 diff --git a/mmc3_test_2/source/1-clocking.s b/mmc3_test_2/source/1-clocking.s new file mode 100644 index 0000000..ca15681 --- /dev/null +++ b/mmc3_test_2/source/1-clocking.s @@ -0,0 +1,88 @@ +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + set_test 2,"Counter/IRQ/A12 clocking isn't working at all" + ldx #10 + jsr begin_counter_test + jsr clock_counter ; counter = 10 + jsr clock_counter + jsr should_be_clear ; counter shouldn't be zero yet + + set_test 3,"Should decrement when A12 is toggled via PPUADDR" + ldx #2 + jsr begin_counter_test + ldx #9 ; counter = 2 + jsr clock_counter_x ; clock 9 times + jsr should_be_set ; should have hit zero at least once by now + + set_test 4,"Writing to $C000 shouldn't cause reload" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; counter = 2 + lda #100 + jsr set_reload + ldx #8 + jsr clock_counter_x ; should reach 0 before reloading with 100 + jsr should_be_set ; and thus IRQ flag should be set by now + + set_test 5,"Writing to $C001 shouldn't cause immediate reload" + ldx #1 + jsr begin_counter_test + lda #1 + jsr set_reload ; shouldn't affect counter + jsr clear_counter ; request reload on next clock, not immediately + lda #4 + jsr set_reload ; reload = 4, which will get used next + jsr clock_counter ; counter = 4 + jsr clock_counter ; 3 + jsr should_be_clear + + set_test 6,"Should reload (no decrement) on first clock after clear" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr should_be_clear + + set_test 7,"Clear should clear counter immediately" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clear_counter ; clear counter + jsr clock_counter ; counter isn't 1 anymore, so IRQ shouldn't be set here + jsr should_be_clear + + set_test 8,"IRQ should be set when counter is decremented to 0" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr should_be_set + + set_test 9,"IRQ should never be set when disabled" + ldx #1 + jsr begin_counter_test + jsr disable_irq + ldx #10 + jsr clock_counter_x + jsr should_be_clear + + set_test 10,"Should reload when clocked when counter is 0" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + lda #10 + jsr set_reload + jsr clock_counter ; 0 + lda #2 + jsr set_reload + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clear_irq + jsr clock_counter ; 0 + jsr should_be_set + + jmp tests_passed diff --git a/mmc3_test_2/source/2-details.s b/mmc3_test_2/source/2-details.s new file mode 100644 index 0000000..cccdfd5 --- /dev/null +++ b/mmc3_test_2/source/2-details.s @@ -0,0 +1,88 @@ +; Tests MMC3 IRQ counter details + +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + set_test 2,"Counter isn't working when reloaded with 255" + ldx #255 + jsr begin_counter_test + ldx #255 + jsr clock_counter_x ; first clock loads with 255 + jsr should_be_clear + jsr clock_counter + jsr should_be_set + + set_test 3,"Counter should run even when IRQ is disabled" + ldx #2 + jsr begin_counter_test + jsr disable_irq + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr enable_irq + jsr should_be_clear + jsr clock_counter ; 0 + jsr should_be_set + + set_test 4,"Counter should run even after IRQ flag has been set" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clock_counter ; 2 + jsr clear_irq + jsr clock_counter ; 1 + jsr should_be_clear + jsr clock_counter ; 0 + jsr should_be_set + + set_test 5,"IRQ should not be set when counter reloads with non-zero" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clear_irq + jsr clock_counter ; 1 + jsr should_be_clear + + set_test 6,"IRQ should not be set when counter is cleared via $C001" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; 2 + jsr clock_counter ; 1 + jsr clear_counter + jsr should_be_clear + + set_test 7,"IRQ should be set when non-zero and reloading to 0 after clear" + ldx #3 + jsr begin_counter_test + jsr clock_counter ; 3 + jsr clock_counter ; 2 + lda #0 + jsr set_reload + jsr clear_counter + jsr clock_counter ; 0 + jsr should_be_set + + jsr clear_oam + set_test 8,"Counter should be clocked 241 times in PPU frame" + ldx #241 + jsr begin_counter_test + jsr wait_vbl + setb PPUSCROLL,0 + sta PPUSCROLL + setb PPUCTRL,$08 ; sprites use tiles at $1xxx + setb PPUMASK,$18 ; enable bg and sprites + delay 29800 + setb PPUMASK,$00 ; disable rendering + jsr should_be_clear + jsr clock_counter + jsr should_be_set + + jmp tests_passed + diff --git a/mmc3_test_2/source/3-A12_clocking.s b/mmc3_test_2/source/3-A12_clocking.s new file mode 100644 index 0000000..0d37c6f --- /dev/null +++ b/mmc3_test_2/source/3-A12_clocking.s @@ -0,0 +1,77 @@ +; Tests MMC3 IRQ clocking via bit 12 of VRAM address + +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + setb PPUCTRL,0 ; disable PPU, sprites and bg use $0xxx patterns + sta PPUMASK + + set_test 2,"Shouldn't be clocked when A12 doesn't change" + ldx #1 + jsr begin_counter_test + lda #$00 ; transition everything but A12 + ldx #$ef + ldy #$ff + sta PPUADDR + sta PPUADDR + stx PPUADDR + sty PPUADDR + sta PPUADDR + sta PPUADDR + stx PPUADDR + sty PPUADDR + sta PPUADDR + sta PPUADDR + jsr should_be_clear + + set_test 3,"Shouldn't be clocked when A12 changes to 0" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; avoid pathological behavior + setb PPUADDR,$10 + sta PPUADDR + jsr clear_counter + jsr clear_irq + ldx #$00 + ldy #$10 + stx PPUADDR + stx PPUADDR + sty PPUADDR ; counter = 1 + stx PPUADDR + stx PPUADDR ; second 1 to 0 transition + stx PPUADDR + jsr should_be_clear + + set_test 4,"Should be clocked when A12 changes to 1 via PPUADDR write" + ldx #1 + jsr begin_counter_test + jsr clock_counter + setb PPUADDR,$00 ; transition A12 from 0 to 1 + sta PPUADDR + setb PPUADDR,$10 + sta PPUADDR + jsr should_be_set + + set_test 5,"Should be clocked when A12 changes to 1 via PPUDATA read" + ldx #1 + jsr begin_counter_test + jsr clock_counter + setb PPUADDR,$0f ; vaddr = $0fff + setb PPUADDR,$ff + jsr should_be_clear + bit PPUDATA + jsr should_be_set + + set_test 6,"Should be clocked when A12 changes to 1 via PPUDATA write" + ldx #1 + jsr begin_counter_test + jsr clock_counter + setb PPUADDR,$0f ; vaddr = $0fff + setb PPUADDR,$ff + jsr should_be_clear + sta PPUDATA + jsr should_be_set + + jmp tests_passed diff --git a/mmc3_test_2/source/4-scanline_timing.s b/mmc3_test_2/source/4-scanline_timing.s new file mode 100644 index 0000000..fb36737 --- /dev/null +++ b/mmc3_test_2/source/4-scanline_timing.s @@ -0,0 +1,123 @@ +; Tests MMC3 IRQ timing to PPU clock accuracy. Tests both modes, +; $2000=$08 and $2000=$10. +; +; Timing tested is between $2002 reads of VBL flag first set, +; and IRQ occurring. + +.include "test_mmc3.inc" +.include "sync_vbl.s" + +.macro test mode, count, n + .local n_ + n_ = (n) + 1 + setb PPUMASK,0 + jsr sync_vbl_even + delay_ppu_even (n_ .MOD 3) + 9 + setb PPUCTRL,mode + lda #count + jsr begin_ + delay n_/3 - 3 - 43 + jsr end_ +.endmacro + +begin_: + pha + setb PPUMASK,$18 + pla + sta r_set_reload + sta r_clear_counter + sta r_disable_irq + sta r_enable_irq + rts + +end_: + setb irq_flag,$10 + cli + nop + nop + inc irq_flag + delay 1000 + sei + nop + lda irq_flag + cmp #$11 + beq @no_irq + rts + +@no_irq: + set_test 14,"IRQ never occurred" + jmp test_failed + +main: + jsr begin_mmc3_tests + + jsr clear_oam + + scanline_0_08 = 6976 + scanline_1_08 = scanline_0_08 + + set_test 2,"Scanline 0 IRQ should occur later when $2000=$08" + test $08, 0, scanline_0_08 - 1 + cmp #$22 + jne test_failed + + set_test 3,"Scanline 0 IRQ should occur sooner when $2000=$08" + test $08, 0, scanline_0_08 + cmp #$21 + jne test_failed + + set_test 4,"Scanline 1 IRQ should occur later when $2000=$08" + test $08, 1, scanline_1_08 + 341 - 1 + cmp #$22 + jne test_failed + + set_test 5,"Scanline 1 IRQ should occur sooner when $2000=$08" + test $08, 1, scanline_1_08 + 341 + cmp #$21 + jne test_failed + + set_test 6,"Scanline 239 IRQ should occur later when $2000=$08" + test $08, 239, scanline_1_08 + 239*341 - 1 + cmp #$22 + jne test_failed + + set_test 7,"Scanline 239 IRQ should occur sooner when $2000=$08" + test $08, 239, scanline_1_08 + 239*341 + cmp #$21 + jne test_failed + + + scanline_0_10 = 6976 - 256 + scanline_1_10 = scanline_0_10 - 21 + + set_test 8,"Scanline 0 IRQ should occur later when $2000=$10" + test $10, 0, scanline_0_10 - 1 + cmp #$22 + jne test_failed + + set_test 9,"Scanline 0 IRQ should occur sooner when $2000=$10" + test $10, 0, scanline_0_10 + cmp #$21 + jne test_failed + + set_test 10,"Scanline 1 IRQ should occur later when $2000=$10" + test $10, 1, scanline_1_10 + 341 - 1 + cmp #$22 + jne test_failed + + set_test 11,"Scanline 1 IRQ should occur sooner when $2000=$10" + test $10, 1, scanline_1_10 + 341 + cmp #$21 + jne test_failed + + set_test 12,"Scanline 239 IRQ should occur later when $2000=$10" + test $10, 239, scanline_1_10 + 239*341 - 1 + cmp #$22 + jne test_failed + + set_test 13,"Scanline 239 IRQ should occur sooner when $2000=$10" + test $10, 239, scanline_1_10 + 239*341 + cmp #$21 + jne test_failed + + jmp tests_passed diff --git a/mmc3_test_2/source/5-MMC3.s b/mmc3_test_2/source/5-MMC3.s new file mode 100644 index 0000000..1c7a9b2 --- /dev/null +++ b/mmc3_test_2/source/5-MMC3.s @@ -0,0 +1,31 @@ +; Tests MMC3-specifics + +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + set_test 2,"Should reload and set IRQ every clock when reload is 0" + ldx #0 + jsr begin_counter_test + jsr clock_counter ; 0 + jsr clock_counter ; 0 + jsr should_be_set + jsr clock_counter ; 0 + jsr should_be_set + jsr clock_counter ; 0 + jsr should_be_set + + set_test 3,"IRQ should be set when counter is 0 after reloading, even when counter was 0 before reloading" + ldx #1 + jsr begin_counter_test + jsr clock_counter ; 1 + jsr clock_counter ; 0 + jsr clear_irq + lda #0 + jsr set_reload + jsr clock_counter ; 0 + jsr should_be_set + + jmp tests_passed + diff --git a/mmc3_test_2/source/6-MMC3_alt.s b/mmc3_test_2/source/6-MMC3_alt.s new file mode 100644 index 0000000..e0f3ac4 --- /dev/null +++ b/mmc3_test_2/source/6-MMC3_alt.s @@ -0,0 +1,52 @@ +; Tests alternate MMC3 behavior. Some MMC3 chips also have this behavior, +; though their markings appear identical to those that have normal +; MMC3 behavior. My copy of Crystalis in particular behaves this way, +; but not my copy of Super Mario Bros. 3, even though both have a chip +; marked MMC3B. + +.include "test_mmc3.inc" + +main: + jsr begin_mmc3_tests + + set_test 2,"IRQ shouldn't be set when reloading to 0 due to counter naturally reaching 0 previously" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; reload with 2 + jsr clock_counter ; decrement to 1 + jsr clock_counter ; decrement to 0 + jsr should_be_set + lda #0 + jsr set_reload + jsr clock_counter ; reload with 0 + jsr should_be_clear + jsr clock_counter ; reload with 0 + jsr should_be_clear + jsr clock_counter ; reload with 0 + jsr should_be_clear + jsr clock_counter ; reload with 0 + jsr should_be_clear + + set_test 3,"IRQ should be set when reloading due to clear, even if counter was already 0" + ldx #2 + jsr begin_counter_test + jsr clock_counter ; reload with 2 + jsr clock_counter ; decrement to 1 + jsr clock_counter ; decrement to 0 + jsr should_be_set + lda #0 + jsr set_reload + jsr clock_counter ; reload with 0 + jsr should_be_clear + jsr clock_counter ; reload with 0 + jsr should_be_clear + lda #2 + jsr set_reload + jsr clear_counter ; this sets internal flag that is examined on next clock + lda #0 + jsr set_reload + jsr clock_counter ; reload with 0, AND set IRQ flag, unlike before + jsr should_be_set + + jmp tests_passed + diff --git a/mmc3_test_2/source/common/ascii.chr b/mmc3_test_2/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/mmc3_test_2/source/common/build_rom.s b/mmc3_test_2/source/common/build_rom.s new file mode 100644 index 0000000..38eab29 --- /dev/null +++ b/mmc3_test_2/source/common/build_rom.s @@ -0,0 +1,92 @@ +; Builds program as iNES ROM + +; Default is 32K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +.segment "CODE" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_chr_ram + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/mmc3_test_2/source/common/console.s b/mmc3_test_2/source/common/console.s new file mode 100644 index 0000000..508898b --- /dev/null +++ b/mmc3_test_2/source/common/console.s @@ -0,0 +1,328 @@ +; Scrolling text console with word wrapping, 30x29 characters. +; +; * Defers PPU initialization until first flush/ newline. +; * Works even if PPU doesn't support scrolling. +; * Keeps border around edge of screen for TV overscan. +; * Requires vertical or single-screen mirroring. +; * Requires ASCII font in CHR. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: A, X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/mmc3_test_2/source/common/crc.s b/mmc3_test_2/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/mmc3_test_2/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/mmc3_test_2/source/common/delay.s b/mmc3_test_2/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/mmc3_test_2/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/mmc3_test_2/source/common/devcart.bin b/mmc3_test_2/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..684fbb99be38d6e3c146eadd8f8dd005ffc5268f GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1Wo+nWSim*mmrujL|HOg?>t;w)Uiv%JiQ&YB?>-ES zViwD1s88?d&`L@>csa>_f|eTR_2XX!HG8V%xUMJ9nVkFdh4L14siw*QS43#N*4V(k eG_}z~_wClCXDKH%UZp1I&L`I9|NlLK&IACCCY;*< literal 0 HcmV?d00001 diff --git a/mmc3_test_2/source/common/macros.inc b/mmc3_test_2/source/common/macros.inc new file mode 100644 index 0000000..4307c66 --- /dev/null +++ b/mmc3_test_2/source/common/macros.inc @@ -0,0 +1,188 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro + +; Negates A and adds it to operand +.macro subaf Operand + eor #$FF + sec + adc Operand +.endmacro + +; Initializes CPU registers to reasonable values +.macro init_cpu_regs + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + .ifndef BUILD_NSF + inx + stx PPUCTRL + .endif +.endmacro diff --git a/mmc3_test_2/source/common/neshw.inc b/mmc3_test_2/source/common/neshw.inc new file mode 100644 index 0000000..d636a97 --- /dev/null +++ b/mmc3_test_2/source/common/neshw.inc @@ -0,0 +1,56 @@ +; NES I/O locations and masks + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.ifndef REGION_FREE + .ifndef PAL_ONLY + .ifndef NTSC_ONLY + NTSC_ONLY = 1 + .endif + .endif +.else + .ifdef NTSC_ONLY + .error "NTSC_ONLY and REGION_FREE defined" + .endif + .ifdef PAL_ONLY + .error "PAL_ONLY and REGION_FREE defined" + .endif +.endif + +.ifdef NTSC_ONLY + CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.endif + +.ifdef PAL_ONLY + CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/mmc3_test_2/source/common/ppu.s b/mmc3_test_2/source/common/ppu.s new file mode 100644 index 0000000..4827b3e --- /dev/null +++ b/mmc3_test_2/source/common/ppu.s @@ -0,0 +1,203 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts + + +.macro check_ppu_region_ Len + ; Delays since VBL began + jsr wait_vbl_optional ; 10 average + delay Len - 18 - 200 + lda PPUSTATUS ; 4 + bmi @ok ; 2 + delay 200 + ; Next VBL should roughly begin here if it's the + ; one we are detecting + delay 200 + lda PPUSTATUS ; 2 + bpl @ok +.endmacro + +check_ppu_region: + +.ifndef REGION_FREE +.ifdef PAL_ONLY + check_ppu_region_ 29781 + print_str {newline,"Note: This test is meant for PAL NES only.",newline,newline} +.endif + +.ifdef NTSC_ONLY + check_ppu_region_ 33248 + print_str {newline,"Note: This test is meant for NTSC NES only.",newline,newline} +.endif +.endif +@ok: rts + + +; Loads ASCII font into CHR RAM and fills rest with $FF +.macro load_chr_ram + bit PPUSTATUS + setb PPUADDR,0 + setb PPUADDR,0 + + ; Copy ascii_chr to 0 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page + + ; Fill rest + lda #$FF +: sta PPUDATA + iny + bne :- + inx + cpx #$20 + bne :- +.endmacro diff --git a/mmc3_test_2/source/common/print.s b/mmc3_test_2/source/common/print.s new file mode 100644 index 0000000..ab8a308 --- /dev/null +++ b/mmc3_test_2/source/common/print.s @@ -0,0 +1,247 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr print_nibble_ + pla + + pha + and #$0F + jsr print_nibble_ + pla + rts + +print_nibble_: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints low 4 bits of A as single hex character +; Preserved: A, X, Y +print_nibble: + pha + and #$0F + jsr update_crc + jsr print_nibble_ + pla + rts + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: A, X, Y +print_dec: + pha + sta print_temp_ + jsr update_crc + txa + pha + lda print_temp_ + + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jsr print_char + pla + tax + pla + rts + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/mmc3_test_2/source/common/shell.inc b/mmc3_test_2/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/mmc3_test_2/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/mmc3_test_2/source/common/shell.s b/mmc3_test_2/source/common/shell.s new file mode 100644 index 0000000..d458c9b --- /dev/null +++ b/mmc3_test_2/source/common/shell.s @@ -0,0 +1,180 @@ +; Shell that sets up testing framework and calls main + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +; Move code from $C000 to $E200, to accommodate my devcarts +.segment "CODE" + .res $2200 + +; Put shell code after user code, so user code is in more +; consistent environment +.segment "CODE2" + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + init_cpu_regs + + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell without affecting current set_test values +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + ; Clear APU registers + lda #0 + sta $4015 + ldx #$13 +: sta $4000,x + dex + bpl :- + + ; CPU registers + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sta temp + init_cpu_regs + setb SNDCHN,0 + lda temp + + jsr report_result + pha + jsr check_ppu_region + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +.include "shell_misc.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts +.endif diff --git a/mmc3_test_2/source/common/shell_misc.s b/mmc3_test_2/source/common/shell_misc.s new file mode 100644 index 0000000..7e7d4e9 --- /dev/null +++ b/mmc3_test_2/source/common/shell_misc.s @@ -0,0 +1,211 @@ +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +.macro fill_ram_ Begin, End + ; Simpler to count from negative size up to 0, + ; and adjust address downward to compensate + ; for initial low byte in Y index + .local Neg_size + Neg_size = (Begin) - (End) + ldxy #(Begin) - 4 + delay (n)/3-1 + .endif + delay 29781*4 + .elseif (n) .MOD 3 = 2 + delay (n)/3 + delay 29781*2 + .else + delay (n)/3 + .endif +.endmacro diff --git a/mmc3_test_2/source/common/test_mmc3.inc b/mmc3_test_2/source/common/test_mmc3.inc new file mode 100644 index 0000000..f7aeb7f --- /dev/null +++ b/mmc3_test_2/source/common/test_mmc3.inc @@ -0,0 +1,128 @@ +CUSTOM_IRQ = 1 +CUSTOM_MAPPER = 4 ; MMC3 +.include "shell.inc" + +r_set_reload = $C000 +r_clear_counter = $C001 +r_disable_irq = $E000 +r_enable_irq = $E001 + + +; Sets things for MMC3 tests +begin_mmc3_tests: + delay_msec 200 + setb SNDMODE,$C0 ; disable frame irq + setb PPUMASK,0 ; disable PPU + setb PPUCTRL,0 + set_ppuaddr 0 + + lda #1 + jsr set_reload + jsr clear_counter + ldx #0 + jsr clock_counter_x + jsr clear_counter + ldx #0 + jsr clock_counter_x + jsr clear_irq + rts + + +; Begins a test by loading X into scanline counter, first +; ensuring that pathological behavior won't occur +begin_counter_test: + jsr clock_counter ; avoid pathological reload behavior + jsr clock_counter + txa + jsr set_reload + jsr clear_counter + jsr clear_irq + rts + + +; Fails if MMC3 IRQ is set +should_be_clear: + jsr get_pending + jne test_failed + jsr clear_irq + rts + + +; Fails if MMC3 IRQ is clear, then clears it +should_be_set: + jsr get_pending + jeq test_failed + jsr clear_irq + rts + + +set_reload: + sta r_set_reload + rts + + +clear_counter: + setb r_clear_counter,123 + rts + + +disable_irq: + setb r_disable_irq,123 + rts + + +; Disables then re-enables IRQ +clear_irq: + setb r_disable_irq,123 +enable_irq: + setb r_enable_irq,123 + rts + + +; Clock counter X times +; Preserved: A, Y +clock_counter_x: +: jsr clock_counter + dex + bne :- + rts + + +; Clocks counter once +; Preserved: A, X, Y +clock_counter: + pha + lda #0 + sta PPUADDR + sta PPUADDR + lda #$10 + sta PPUADDR + sta PPUADDR + lda #0 + sta PPUADDR + sta PPUADDR + pla + rts + + +; Determines state of MMC3 IRQ flag, and acknowledges it +; Out: A = 0 if clear, 1 if set +; flags based on value of A +; Preserved: X, Y +get_pending: + setb irq_flag,1 + cli + nop + ; If IRQ was pending, it will occur here + ; and shift irq_flag left + sei + nop + lda irq_flag + lsr a + rts + +zp_byte irq_flag + +irq: asl irq_flag + sta r_disable_irq + rti diff --git a/mmc3_test_2/source/common/testing.s b/mmc3_test_2/source/common/testing.s new file mode 100644 index 0000000..6bb852a --- /dev/null +++ b/mmc3_test_2/source/common/testing.s @@ -0,0 +1,105 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "RODATA",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing = init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/mmc3_test_2/source/common/text_out.s b/mmc3_test_2/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/mmc3_test_2/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/nes15-1.0.0/LICENSE b/nes15-1.0.0/LICENSE new file mode 100644 index 0000000..1d2942c --- /dev/null +++ b/nes15-1.0.0/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2011 Mathew Brenaman. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + diff --git a/nes15-1.0.0/Makefile b/nes15-1.0.0/Makefile new file mode 100644 index 0000000..727d680 --- /dev/null +++ b/nes15-1.0.0/Makefile @@ -0,0 +1,114 @@ +# +# 'nes15' GNU Makefile +# + +INCS = \ + fifteen/fifteen.inc \ + snd/snd.inc \ + src/game.inc \ + src/gfx.inc \ + src/nmi.inc \ + src/play.inc \ + src/title.inc + +OBJS = \ + fifteen/fifteen.o \ + snd/mus0.o \ + snd/mus1.o \ + snd/sfx0.o \ + snd/sfx1.o \ + snd/snd.o \ + src/game.o \ + src/gfx.o \ + src/header.o \ + src/nmi.o \ + src/play.o \ + src/title.o + +LIBINCS = \ + nes-lib/apu.inc \ + nes-lib/bcd.inc \ + nes-lib/joy.inc \ + nes-lib/lfsr32.inc \ + nes-lib/muse.inc \ + nes-lib/oam.inc \ + nes-lib/pkb.inc \ + nes-lib/ppu.inc \ + nes-lib/vrub.inc + +LIBOBJS = \ + nes-lib/bcd16_from_bin.o \ + nes-lib/bcd16.o \ + nes-lib/bcd16_to_vrub.o \ + nes-lib/joy_read1.o \ + nes-lib/joy_repeat1.o \ + nes-lib/joy_update1.o \ + nes-lib/lfsr32.o \ + nes-lib/muse.o \ + nes-lib/oam_clear.o \ + nes-lib/pkb.o \ + nes-lib/pkb_to_vram.o \ + nes-lib/vrub_from_mem.o \ + nes-lib/vrub.o + +CHRS = \ + gfx/cursor.chr \ + gfx/edges.chr \ + gfx/font.chr \ + gfx/tile.chr + +VCHRS = \ + gfx/nums.chr + +PKBS = \ + gfx/play.pkb \ + gfx/title.pkb + +PALS = \ + gfx/bgd.pal \ + gfx/spr.pal + +INES = nes15.nes +AS65 = ca65 +LD65 = ld65 +AFLAGS65 = -l -I src -I fifteen -I gfx -I snd -I nes-lib + +ifdef PAL + AFLAGS65 += -DPAL=1 +endif + +LCONFIG = game.cfg +MAPFILE = map.txt +PCX2CHR = pcx2chr +BIN2PKB = bin2pkb + +# +# Targets +# + +$(INES): header.bin game.bin chr1.chr chr2.chr + cat header.bin game.bin chr1.chr chr2.chr > $(INES) + +header.bin game.bin chr1.chr chr2.chr: $(LCONFIG) $(OBJS) $(LIBOBJS) + $(LD65) -C $(LCONFIG) $(LIBOBJS) $(OBJS) -m $(MAPFILE) -o $@ + +$(OBJS): $(INCS) $(LIBINCS) $(CHRS) $(VCHRS) $(PKBS) $(PALS) +$(LIBOBJS): $(LIBINCS) + +$(CHRS): $(CHRS:.chr=.pcx) + $(PCX2CHR) $(@:.chr=.pcx) $@ + +$(VCHRS): $(VCHRS:.chr=.pcx) + $(PCX2CHR) $(@:.chr=.pcx) $@ -V + +%.pkb: %.nam + $(BIN2PKB) $< $@ + +%.o: %.s + $(AS65) $(AFLAGS65) $< -o $@ + +.PHONY: clean +clean: + rm $(INES) *.bin *.chr $(OBJS) $(OBJS:.o=.lst) $(LIBOBJS) \ + $(LIBOBJS:.o=.lst) $(MAPFILE) $(CHRS) $(VCHRS) $(PKBS) + diff --git a/nes15-1.0.0/README b/nes15-1.0.0/README new file mode 100644 index 0000000..408c825 --- /dev/null +++ b/nes15-1.0.0/README @@ -0,0 +1,118 @@ +nes15 - by Mathew Brenaman + + nes15 is an implementation of the classic Fifteen Puzzle for the + Nintendo Entertainment System. This version is an NROM-128 (16kb + PRG, 8kb CHR) and was tested on the real system with a PowerPak. It + should also work with most emulators such as Nestopia and FCE Ultra. + + The fifteen puzzle consists of a frame of numbered square tiles in + random order with one tile missing. The object of the puzzle is to + place the tiles in order by sliding them into the empty position: + + 1 2 3 4 + + 5 6 7 8 + + 9 10 11 12 + + 13 14 15 -- + + If you become frustrated trying solve the puzzle, I've implemented + an auto-solver that allows you to watch it be solved. While the + auto-solver does not always make the least amount of moves needed + to solve the puzzle, it should always at least solve it. + + This program is free software. It is distributed under the terms + of a simple BSD-style license (OSI-approved). See the 'LICENSE' + file for details. + + This product is not sponsored or endorsed by Nintendo. + + + +How to play +----------- + + At the title screen, pressing any button will began play. + + Game controls: + + Directional buttons: Move the cursor + A: Slide the tile under cursor into the gap + Start: Pause the game + Select: Toggle the auto-solver + + After the puzzle has been completed by either you or the auto-solver, + press either A or B and new puzzle will be generated. + + + +Compiling +--------- + + You will need ca65, a macro assembler included with cc65, which + can be found at: + http://www.cc65.org/ + + You will also need to compile and locally install the tools provided. + + If you are using Linux or something similar, simply running 'make' + should produce the NTSC ROM image. If you wish to build the PAL + version, run 'make PAL=1'. + + For other OS's, you will need to do a bit of fiddling with the + makefile and other witchery which I will not cover here. + + + +Contacting +---------- + + If you have any comments, questions, or bug reports, send them to: + mbrenaman@gmail.com + + + +Acknowledgements +---------------- + + Sources of NES programming information: + + http://wiki.nesdev.com/w/index.php/Nesdev_Wiki + http://nesdev.parodius.com/bbs/index.php + http://nintendoage.com/forum/messageview.cfm?catid=22&threadid=22487 + + + Some aspects of the game's implementation where inspired by: + + Posts found at: + http://nesdev.parodius.com/bbs/index.php + + SMBDis - A comprehensive disassembly of Super Mario Bros: + http://www.romhacking.net/docs/344/ + + Concentration Room: + http://www.pineight.com/croom/ + + LJ65: + http://www.pineight.com/nes/#t + + + The Font used for the digits on puzzle tiles is from what I believe + is an old DOS font, which can be found at: + http://orangetide.com/nesdev/gamefonts/ + + And possibly also at: + http://chris.pirillo.com/dos-fonts/ + + + The font used, titled "Ghost", I found here: + http://kofler.dot.at/c64/ + + It's seems to actually be the font used in the Commodore 64 version + of "Ghosts and Goblins". + + + The music is from "Eight Short Preludes and Fugues" by J.S. Bach + (possibly by J.T. Krebs), BWV 558. + diff --git a/nes15-1.0.0/bin2pkb/Makefile b/nes15-1.0.0/bin2pkb/Makefile new file mode 100644 index 0000000..5bd5d35 --- /dev/null +++ b/nes15-1.0.0/bin2pkb/Makefile @@ -0,0 +1,36 @@ +# +# 'bin2pkb' GNU Makefile +# + +OBJS = \ + ../clib/binio.o \ + ../clib/packbits.o \ + bin2pkb.o + +PROG = bin2pkb + +CC = gcc +LFLAGS = -o $(PROG) +CFLAGS = -I ../clib -Wall -Wextra -pedantic -ansi + +# +# Targets +# + +$(PROG): $(OBJS) + $(CC) $(OBJS) $(LFLAGS) + +-include $(OBJS:.o=.d) + +%.o: %.c + $(CC) $(CFLAGS) -c $*.c -o $*.o + $(CC) $(CFLAGS) -MM $*.c > $*.d + +.PHONY: debug +debug: CFLAGS += -g +debug: $(PROG) + +.PHONY: clean +clean: + rm $(OBJS) $(OBJS:.o=.d) $(PROG) + diff --git a/nes15-1.0.0/bin2pkb/bin2pkb.c b/nes15-1.0.0/bin2pkb/bin2pkb.c new file mode 100644 index 0000000..3165be0 --- /dev/null +++ b/nes15-1.0.0/bin2pkb/bin2pkb.c @@ -0,0 +1,85 @@ +/* + * File: bin2pkb.c + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * Binary file to Packbits encoded file converter + */ + +#include +#include +#include +#include "binio.h" +#include "packbits.h" + + + +/* + * Reads the binary data stored in 'src_file' and writes it out in Packbits + * encoding to 'dst_file'. + * + * Returns: If the conversion was successfully done, then a non-zero value is + * returned. Otherwise, zero is returned and an error message is printed to + * 'stderr'. + * + * Asserts: + * src_file != NULL + * dst_file != NULL + */ +static int bin2pkb(void); + + + +static const char *src_file = NULL; +static const char *dst_file = NULL; + + + +int main(int argc, char *argv[]) +{ + if (argc == 1) { + printf("Usage: bin2pkb [INFILE] [OUTFILE]\n"); + return EXIT_SUCCESS; + } + + if (argc == 2) { + fprintf(stderr, "Output file required\n"); + return EXIT_FAILURE; + } + + src_file = argv[1]; + dst_file = argv[2]; + + if (!bin2pkb()) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + + + +static int bin2pkb(void) +{ + unsigned char *data; + size_t size = 0; + + assert(src_file != NULL); + assert(dst_file != NULL); + + if ((data = binio_read_file(src_file, &size)) == NULL) { + return 0; + } + + printf("Compressing \"%s\" (%lu bytes)\n", src_file, + (unsigned long)size); + + if ((size = packbits_write_file(dst_file, data, size)) > 0) { + printf("Output \"%s\" (%lu bytes)\n", dst_file, + (unsigned long)size); + } + + free(data); + + return size > 0; +} + diff --git a/nes15-1.0.0/clib/binio.c b/nes15-1.0.0/clib/binio.c new file mode 100644 index 0000000..2247045 --- /dev/null +++ b/nes15-1.0.0/clib/binio.c @@ -0,0 +1,429 @@ +/* + * File: binio.c + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * Binary file I/O library implementation + */ + +#include +#include +#include +#include +#include +#include + +#include "binio.h" + + + +#if UCHAR_MAX > 0xFFU +# error 'binio' requires 8 bit chars +#endif + +typedef unsigned char uint8; +typedef signed char int8; + +#if USHRT_MAX > 0xFFFFU +# error 'binio' requires 16 bit shorts +#endif + +typedef unsigned short uint16; +typedef short int16; + +#if ULONG_MAX == 0xFFFFFFFFUL + +typedef unsigned long uint32; +typedef long int32; + +#elif UINT_MAX == 0xFFFFFFFFUL + +typedef unsigned int uint32; +typedef int int32; + +#else +# error 'binio' requires either 32 bit longs or 32 bit ints +#endif + + + +struct binio_file *binio_from_file(const char *file, const char *mode) +{ + struct binio_file *bf; + + assert(file != NULL); + assert(mode != NULL); + + if ((bf = malloc(sizeof *bf)) == NULL) { + fprintf(stderr, "Unable to allocate new file handle\n"); + return NULL; + } + + if ((bf->fp = fopen(file, mode)) == NULL) { + fprintf(stderr, "Error opening \"%s\", %s\n", file, + strerror(errno)); + return NULL; + } + + bf->name = file; + bf->eof = bf->error = 0; + + assert(bf->fp != NULL); + assert(bf->name == file); + assert(bf->eof == 0); + assert(bf->error == 0); + + return bf; +} + + + +void binio_close(struct binio_file *bf) +{ + assert(bf != NULL); + + if (fclose(bf->fp) == EOF) { + fprintf(stderr, "Error closing \"%s\", %s\n", bf->name, + strerror(errno)); + } + + free(bf); +} + + + +unsigned char *binio_read_file(const char *file, size_t *size) +{ + struct binio_file *bf; + unsigned char *data; + int success; + + assert(file != NULL); + assert(size != NULL); + + if ((bf = binio_from_file(file, "rb")) == NULL) { + return NULL; + } + + if ((*size = binio_get_size(bf)) == 0) { + binio_close(bf); + return NULL; + } + + if ((data = malloc(sizeof *data * *size)) == NULL) { + fprintf(stderr, "Unable to allocate new binary buffer\n"); + binio_close(bf); + return NULL; + } + + binio_read(bf, data, *size); + success = !(bf->error || bf->eof); + + if (bf->eof) { + fprintf(stderr, "Error reading \"%s\", Unexpected EOF\n", + bf->name); + } + + binio_close(bf); + + if (!success) { + free(data); + return NULL; + } + + return data; +} + + + +void binio_read(struct binio_file *bf, unsigned char *data, size_t size) +{ + size_t i; + + assert(bf != NULL); + assert(data != NULL); + assert(size > 0); + + for (i = 0; i < size; i++) { + data[i] = binio_read_u8(bf); + } +} + + + +unsigned char binio_read_u8(struct binio_file *bf) +{ + uint8 u8; + + assert(bf != NULL); + + if (bf->eof || bf->error) { + return 0; + } + + if (fread(&u8, 1, 1, bf->fp) == 1) { + return u8; + } + + if (feof(bf->fp)) { + bf->eof = 1; + } else if (ferror(bf->fp)) { + bf->error = 1; + fprintf(stderr, "Error reading \"%s\", %s\n", bf->name, + strerror(errno)); + } + + return 0; +} + + + +signed char binio_read_s8(struct binio_file *bf) +{ + return (int8)binio_read_u8(bf); +} + + + +unsigned short binio_read_u16le(struct binio_file *bf) +{ + uint16 u16; + + u16 = binio_read_u8(bf); + u16 |= (uint16)binio_read_u8(bf) << 8; + + return u16; +} + + + +short binio_read_s16le(struct binio_file *bf) +{ + return (int16)binio_read_u16le(bf); +} + + + +unsigned short binio_read_u16be(struct binio_file *bf) +{ + uint16 u16; + + u16 = (uint16)binio_read_u8(bf) << 8; + u16 |= binio_read_u8(bf); + + return u16; +} + + + +short binio_read_s16be(struct binio_file *bf) +{ + return (int16)binio_read_u16be(bf); +} + + + +unsigned long binio_read_u32le(struct binio_file *bf) +{ + uint32 u32; + + u32 = binio_read_u8(bf); + u32 |= (uint32)binio_read_u8(bf) << 8; + u32 |= (uint32)binio_read_u8(bf) << 16; + u32 |= (uint32)binio_read_u8(bf) << 24; + + return u32; +} + + + +long binio_read_s32le(struct binio_file *bf) +{ + return (int32)binio_read_u32le(bf); +} + + + +unsigned long binio_read_u32be(struct binio_file *bf) +{ + uint32 u32; + + u32 = (uint32)binio_read_u8(bf) << 24; + u32 |= (uint32)binio_read_u8(bf) << 16; + u32 |= (uint32)binio_read_u8(bf) << 8; + u32 |= binio_read_u8(bf); + + return u32; +} + + + +long binio_read_s32be(struct binio_file *bf) +{ + return (int32)binio_read_u32be(bf); +} + + + +int binio_write_file(const char *file, const unsigned char *data, size_t size) +{ + struct binio_file *bf; + int success; + + if ((bf = binio_from_file(file, "wb")) == NULL) { + return 0; + } + + binio_write(bf, data, size); + success = !bf->error; + binio_close(bf); + + return success; +} + + + +void binio_write(struct binio_file *bf, const unsigned char *data, size_t size) +{ + size_t i; + + assert(bf != NULL); + assert(data != NULL); + assert(size > 0); + + for (i = 0; i < size; i++) { + binio_write_u8(bf, data[i]); + } +} + + + +void binio_write_u8(struct binio_file *bf, unsigned char u8) +{ + assert(bf != NULL); + + if (bf->error) { + return; + } + + if (fwrite(&u8, 1, 1, bf->fp) == 1) { + return; + } + + bf->error = 1; + + if (ferror(bf->fp)) { + fprintf(stderr, "Error writing \"%s\", %s\n", bf->name, + strerror(errno)); + } +} + + + +void binio_write_s8(struct binio_file *bf, signed char s8) +{ + binio_write_u8(bf, (uint8)s8); +} + + + +void binio_write_u16le(struct binio_file *bf, unsigned short u16) +{ + binio_write_u8(bf, (uint16)(u16 & 0xFF)); + binio_write_u8(bf, (uint16)(u16 >> 8 & 0xFF)); +} + + + +void binio_write_s16le(struct binio_file *bf, short s16) +{ + binio_write_u16le(bf, (uint16)s16); +} + + + +void binio_write_u16be(struct binio_file *bf, unsigned short u16) +{ + binio_write_u8(bf, (uint16)(u16 >> 8 & 0xFF)); + binio_write_u8(bf, (uint16)(u16 & 0xFF)); +} + + + +void binio_write_s16be(struct binio_file *bf, short s16) +{ + binio_write_u16be(bf, (uint16)s16); +} + + + +void binio_write_u32le(struct binio_file *bf, unsigned long u32) +{ + binio_write_u8(bf, (uint32)(u32 & 0xFF)); + binio_write_u8(bf, (uint32)(u32 >> 8 & 0xFF)); + binio_write_u8(bf, (uint32)(u32 >> 16 & 0xFF)); + binio_write_u8(bf, (uint32)(u32 >> 24 & 0xFF)); +} + + + +void binio_write_s32le(struct binio_file *bf, long s32) +{ + binio_write_u32le(bf, (uint32)s32); +} + + + +void binio_write_u32be(struct binio_file *bf, unsigned long u32) +{ + binio_write_u8(bf, (uint32)(u32 >> 24 & 0xFF)); + binio_write_u8(bf, (uint32)(u32 >> 16 & 0xFF)); + binio_write_u8(bf, (uint32)(u32 >> 8 & 0xFF)); + binio_write_u8(bf, (uint32)(u32 & 0xFF)); +} + + + +void binio_write_s32be(struct binio_file *bf, long s32) +{ + binio_write_u32be(bf, (uint32)s32); +} + + + +void binio_rewind(struct binio_file *bf) +{ + assert(bf != NULL); + + if (fseek(bf->fp, 0L, SEEK_SET) == -1) { + bf->error = 1; + fprintf(stderr, "Error rewinding \"%s\", %s\n", bf->name, + strerror(errno)); + } else { + bf->eof = 0; + } +} + + + +size_t binio_get_size(struct binio_file *bf) +{ + size_t size = 0; + + assert(bf != NULL); + + binio_read_u8(bf); + + while (!bf->eof) { + binio_read_u8(bf); + size++; + } + + binio_rewind(bf); + + if (bf->error) { + return 0; + } + + return size; +} + diff --git a/nes15-1.0.0/clib/binio.h b/nes15-1.0.0/clib/binio.h new file mode 100644 index 0000000..c259976 --- /dev/null +++ b/nes15-1.0.0/clib/binio.h @@ -0,0 +1,185 @@ +/* + * File: binio.h + * Namespace: binio_ / BINIO_ + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * Binary file I/O library + * + * Note that 'binio' assumes that the user will never write or expect to read a + * value outside of minimums guaranteed by the C Standard. For example, nothing + * greater than 255 for unsigned chars, or nothing less than -2147483647L for + * longs. + */ + +#ifndef BINIO_H +#define BINIO_H + +#include + + + +/* + * Binary file handle returned by 'binio_from*' and freed by 'binio_close'. + */ +struct binio_file { + FILE *fp; /* Private */ + const char *name; /* Read-only */ + int eof; /* Read-only */ + int error; /* Read-only */ +}; + + + +/* + * Opens the file 'file' for use. The string 'mode' is passed to 'fopen' and + * should always include the 'b' option. + * + * Returns: If the file was opened successfully, a new file handle is returned. + * Otherwise, NULL returned and an error message is printed to 'stderr'. + * + * Asserts: + * file != NULL + * mode != NULL + * Returned 'binio_file' is valid + */ +struct binio_file *binio_from_file(const char *file, const char *mode); + +/* + * Closes the binary file 'bf'. Note that the file handle is freed by this + * function. If an error occurred while closing the file, an error message is + * printed to 'stderr'. + * + * Asserts: + * bf != NULL + */ +void binio_close(struct binio_file *bf); + +/* + * Reads the entire file 'file' into a newly allocated buffer. + * + * Returns: If the buffer was successfully created and read into, it is + * returned and 'size' is set to the size of the buffer. Otherwise, NULL is + * returned and an error message is printed to 'stderr'. + * + * Asserts: + * file != NULL + * size != NULL + */ +unsigned char *binio_read_file(const char *file, size_t *size); + +/* + * Reads 'size' bytes from the binary file 'bf' from its current position + * forward into the buffer 'data'. If the end of the file was reached before + * reading is complete, the file handle's 'eof' member will be set to a + * non-zero value. If an error occurred while reading, the file handle's + * 'error' member will be set to a non-zero value and an error message will be + * printed to 'stderr'. + * + * Asserts: + * bf != NULL + * data != NULL + * size > 0 + */ +void binio_read(struct binio_file *bf, unsigned char *data, size_t size); + +/* + * The following input functions read binary values from the binary file 'bf'. + * Functions with names that end with 'le' read data in little-endian format. + * Functions with names that end with 'be' read data in big-endian format. If + * the end of the input file is reached, the file handle's 'eof' member will be + * set to a non-zero value. If an error occurs while reading, the file handle's + * 'error' member will be set to a non-zero value and an error message will be + * printed to 'stderr'. + * + * Returns: If successful, the value read from file is returned, otherwise + * zero is returned. + * + * Asserts: + * bf != NULL + */ +unsigned char binio_read_u8(struct binio_file *bf); +signed char binio_read_s8(struct binio_file *bf); +unsigned short binio_read_u16le(struct binio_file *bf); +short binio_read_s16le(struct binio_file *bf); +unsigned short binio_read_u16be(struct binio_file *bf); +short binio_read_s16be(struct binio_file *bf); +unsigned long binio_read_u32le(struct binio_file *bf); +long binio_read_s32le(struct binio_file *bf); +unsigned long binio_read_u32be(struct binio_file *bf); +long binio_read_s32be(struct binio_file *bf); + +/* + * Writes the binary data in 'data' with the size 'size' to the file 'file'. + * + * Returns: If the binary data was successfully written, zero is returned. + * Otherwise, a non-zero value is returned and an error message is printed to + * 'stderr'. + * + * Asserts: + * file != NULL + * data != NULL + * size > 0 + */ +int binio_write_file(const char *file, const unsigned char *data, size_t size); + +/* + * Writes 'size' bytes to the binary file 'bf' from its current position + * forward from the buffer 'data'. If an error occurs while writing, the file + * handle's 'error' member will be set to a non-zero value and an error message + * will be printed to 'stderr'. + * + * Asserts: + * bf != NULL + * data != NULL + * size > 0 + */ +void binio_write(struct binio_file *bf, const unsigned char *data, + size_t size); + +/* + * The following output functions write binary values to the binary file 'bf'. + * Functions with names that end with 'le' write data in little-endian format. + * Functions with names that end with 'be' write data in big-endian format. If + * an error occurs while writing, the file handle's 'error' member will be set + * to a non-zero value and an error message will be printed to 'stderr'. + * + * Asserts: + * bf != NULL + */ +void binio_write_u8(struct binio_file *bf, unsigned char u8); +void binio_write_s8(struct binio_file *bf, signed char s8); +void binio_write_u16le(struct binio_file *bf, unsigned short u16); +void binio_write_s16le(struct binio_file *bf, short s16); +void binio_write_u16be(struct binio_file *bf, unsigned short u16); +void binio_write_s16be(struct binio_file *bf, short s16); +void binio_write_u32le(struct binio_file *bf, unsigned long u32); +void binio_write_s32le(struct binio_file *bf, long s32); +void binio_write_u32be(struct binio_file *bf, unsigned long u32); +void binio_write_s32be(struct binio_file *bf, long s32); + +/* + * Resets the current position of the binary file 'bf' to its beginning. If an + * error occurs while rewinding, the file handle's 'error' member will be set + * to a non-zero value and an error message will be printed to 'stderr'. + * + * Asserts: + * bf != NULL + */ +void binio_rewind(struct binio_file *bf); + +/* + * Gets the number of bytes left to be read in the binary file 'bf', then + * resets the binary file's position back to the beginning of the file. + * + * Returns: If successful, the number of bytes left in the file is returned. + * Otherwise, if an error occurs or there where no bytes left to read, zero + * is returned. If an error does occur, the file handle's 'error' member will + * be set to a non-zero value and an error message will be printed to 'stderr'. + * + * Asserts: + * bf != NULL + */ +size_t binio_get_size(struct binio_file *bf); + +#endif /* BINIO_H */ + diff --git a/nes15-1.0.0/clib/img8.c b/nes15-1.0.0/clib/img8.c new file mode 100644 index 0000000..b46ed28 --- /dev/null +++ b/nes15-1.0.0/clib/img8.c @@ -0,0 +1,53 @@ +/* + * File: img8.c + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * 8bpp image library implementation + */ + +#include +#include +#include + +#include "img8.h" + + + +struct img8_image *img8_new(int w, int h) +{ + struct img8_image *img; + + assert(w > 0 && h > 0); + + if ((img = malloc(sizeof *img)) == NULL) { + fprintf(stderr, "Unable to allocate new image\n"); + return NULL; + } + + if ((img->data = malloc(sizeof *img->data * w * h)) == NULL) { + fprintf(stderr, "Unable to allocate new image data\n"); + free(img); + return NULL; + } + + img->w = w; + img->h = h; + + assert(img->w == w); + assert(img->h == h); + assert(img->data != NULL); + + return img; +} + + + +void img8_free(struct img8_image *img) +{ + assert(img->data != NULL); + assert(img != NULL); + + free(img->data); + free(img); +} + diff --git a/nes15-1.0.0/clib/img8.h b/nes15-1.0.0/clib/img8.h new file mode 100644 index 0000000..02e8c8f --- /dev/null +++ b/nes15-1.0.0/clib/img8.h @@ -0,0 +1,87 @@ +/* + * File: img8.h + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * 8bpp image library + */ + +#ifndef IMG8_H +#define IMG8_H + +#define IMG8_PAL_SIZE 256 + + + +struct binio_file; + +/* + * 8bpp image created and freed by the library. Its members are considered + * read-only. + */ +struct img8_image { + int w, h; + unsigned char *data; +}; + +/* + * Used to represent palette entries for 8bpp images. + */ +struct img8_color { + unsigned char r, g, b; +}; + + + +/* + * Creates a new image with the width 'w' and the height 'h'. + * + * Returns: If the image was created successfully, it is returned. Otherwise, + * NULL is returned and an error message is printed to 'stderr'. + * + * Asserts: + * w > 0 && h > 0 + * Returned 'img8_image' is valid + */ +struct img8_image *img8_new(int w, int h); + +/* + * Frees the image 'img'. + * + * Asserts: + * img != NULL + * img->data != NULL + */ +void img8_free(struct img8_image *img); + +/* + * Reads a new image from the 256 color PCX file 'bf' and stores the palette + * read in pal. If 'pal' is NULL, then the palette will not be read. If the end + * of the file was reached before reading is complete, the file handle's 'eof' + * member will be set to a non-zero value. If an error occurred while reading, + * the file handle's 'error' member will be set to a non-zero value and an + * error message will be printed to 'stderr'. + * + * Returns: If the image was successfully created, it is returned. Otherwise, + * NULL is returned and an error message is printed to 'stderr'. + * + * Asserts: + * file != NULL + */ +struct img8_image *img8_read_pcx_file(const char *file, + struct img8_color *pal); + +/* + * Reads a new image from the 256 color PCX binary file 'bf' and stores the + * palette read in 'pal'. If 'pal' is NULL, then the palette will not be read. + * + * Returns: If the image was successfully created and read, it is returned. + * Otherwise, NULL is returned and an error message is printed to 'stderr'. + * + * Asserts: + * bf != NULL + */ +struct img8_image *img8_read_pcx(struct binio_file *bf, + struct img8_color *pal); + +#endif /* IMG8_H */ + diff --git a/nes15-1.0.0/clib/img8_pcx.c b/nes15-1.0.0/clib/img8_pcx.c new file mode 100644 index 0000000..39dc9ba --- /dev/null +++ b/nes15-1.0.0/clib/img8_pcx.c @@ -0,0 +1,197 @@ +/* + * File: img8_pcx.c + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * PCX image loading and saving functions for 'img8' + */ + +#include +#include +#include +#include "binio.h" + +#include "img8.h" + + + +#define COLOR_MAP_SIZE 48 +#define FILLER_SIZE 54 + + + +struct pcx_header { + unsigned char man; + unsigned char ver; + unsigned char enc; + unsigned char bpp; + unsigned short x_min, y_min, x_max, y_max; + unsigned short h_dpi, v_dpi; + unsigned char color_map[COLOR_MAP_SIZE]; + unsigned char res; + unsigned char num_planes; + unsigned short bpl; + unsigned short pal_info; + unsigned short h_scr_size; + unsigned short v_scr_size; + unsigned char filler[FILLER_SIZE]; +}; + + + +/* + * Reads the PCX header from the binary file 'bf' and stores it in 'h'. + * + * Returns: If the PCX header was read successfully and is valid, then a + * non-zero is returned. Otherwise, zero is returned and an error message is + * printed to 'stderr'. + * + * Asserts: + * bf != NULL + * h != NULL + */ +static int read_pcx_header(struct binio_file *bf, struct pcx_header *h); + + + +struct img8_image *img8_read_pcx_file(const char *file, struct img8_color *pal) +{ + struct binio_file *bf; + struct img8_image *img; + int success; + + assert(file != NULL); + + if ((bf = binio_from_file(file, "rb")) == NULL) { + return NULL; + } + + img = img8_read_pcx(bf, pal); + binio_close(bf); + + if (img == NULL) { + return NULL; + } + + success = !(bf->error || bf->eof); + + if (bf->eof) { + fprintf(stderr, "Error reading \"%s\", File truncated\n", + bf->name); + } + + if (!success) { + img8_free(img); + return NULL; + } + + return img; +} + + + +struct img8_image *img8_read_pcx(struct binio_file *bf, struct img8_color *pal) +{ + struct pcx_header header; + struct img8_image *img; + unsigned char *dst; + unsigned char u8; + int h; + int i; + int c = 0; + + assert(bf != NULL); + + if (!read_pcx_header(bf, &header)) { + return NULL; + } + + if ((img = img8_new(header.x_max - header.x_min + 1, + header.y_max - header.y_min + 1)) == NULL) { + return NULL; + } + + dst = img->data; + + for (h = 0; h < img->h; h++) { + i = 0; + + while (i < header.bpl) { + u8 = binio_read_u8(bf); + + if ((u8 & 0xC0) == 0xC0) { + c = u8 & 0x3F; + u8 = binio_read_u8(bf); + } else { + c = 1; + } + + while (c-- > 0) { + dst[i++] = u8; + } + } + + dst += img->w; + } + + binio_read_u8(bf); + + if (pal != NULL) { + for (i = 0; i < IMG8_PAL_SIZE; i++) { + pal[i].r = binio_read_u8(bf); + pal[i].g = binio_read_u8(bf); + pal[i].b = binio_read_u8(bf); + } + } + + return img; +} + + + +static int read_pcx_header(struct binio_file *bf, struct pcx_header *h) +{ + assert(bf != NULL); + assert(h != NULL); + + h->man = binio_read_u8(bf); + h->ver = binio_read_u8(bf); + h->enc = binio_read_u8(bf); + h->bpp = binio_read_u8(bf); + h->x_min = binio_read_u16le(bf); + h->y_min = binio_read_u16le(bf); + h->x_max = binio_read_u16le(bf); + h->y_max = binio_read_u16le(bf); + h->h_dpi = binio_read_u16le(bf); + h->v_dpi = binio_read_u16le(bf); + + binio_read(bf, h->color_map, COLOR_MAP_SIZE); + + h->res = binio_read_u8(bf); + h->num_planes = binio_read_u8(bf); + h->bpl = binio_read_u16le(bf); + h->pal_info = binio_read_u16le(bf); + h->h_scr_size = binio_read_u16le(bf); + h->v_scr_size = binio_read_u16le(bf); + + binio_read(bf, h->filler, FILLER_SIZE); + + if (bf->error) { + return 0; + } + + if (bf->eof) { + fprintf(stderr, "Error reading \"%s\", Header truncated\n", + bf->name); + return 0; + } + + if (h->man != 10 || h->ver != 5 || h->enc != 1 || h->bpp != 8 + || h->num_planes != 1) { + fprintf(stderr, "Error reading \"%s\", Not a valid 256 " + "color PCX file\n", bf->name); + return 0; + } + + return 1; +} + diff --git a/nes15-1.0.0/clib/neschr.c b/nes15-1.0.0/clib/neschr.c new file mode 100644 index 0000000..3c4bcd6 --- /dev/null +++ b/nes15-1.0.0/clib/neschr.c @@ -0,0 +1,221 @@ +/* + * File: neschr.c + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * NES CHR image library implementation + */ + +#include +#include +#include +#include +#include "binio.h" +#include "img8.h" + +#include "neschr.h" + + + +/* + * Reads a CHR tile into the CHR image 'chr' at 'dst' from the 8bpp image 'img' + * starting from the top-left corner 'sx' and 'sy'. + * + * Asserts: + * chr != NULL + * img != NULL + * dst < chr->size + * sx >= 0 && sx < img->w && sy >= 0 && sy < img->h + */ +static void tile_from_img8(struct neschr_chr *chr, + const struct img8_image *img, size_t dst, int sx, int sy); + + + +struct neschr_chr *neschr_new(size_t size) +{ + struct neschr_chr *chr; + + assert(size > 0); + + if ((chr = malloc(sizeof *chr)) == NULL) { + fprintf(stderr, "Unable to allocate new NES CHR\n"); + return NULL; + } + + if ((chr->data = malloc(sizeof *chr->data * size)) == NULL) { + fprintf(stderr, "Unable to allocate new NES CHR data\n"); + free(chr); + return NULL; + } + + chr->size = size; + + assert(chr->size == size); + assert(chr->data != NULL); + + return chr; +} + + + +void neschr_free(struct neschr_chr *chr) +{ + assert(chr != NULL); + assert(chr->data != NULL); + + free(chr->data); + free(chr); +} + + + +struct neschr_chr *neschr_read_file(const char *file) +{ + struct neschr_chr *chr; + unsigned char *data; + size_t size; + + assert(file != NULL); + + if ((chr = malloc(sizeof *chr)) == NULL) { + fprintf(stderr, "Unable to allocate new NES CHR\n"); + return NULL; + } + + if ((data = binio_read_file(file, &size)) == NULL) { + free(chr); + return NULL; + } + + chr->size = size; + chr->data = data; + + assert(chr->size == size); + assert(chr->data != NULL); + + return chr; +} + + + +struct neschr_chr *neschr_read(struct binio_file *bf, size_t size) +{ + struct neschr_chr *chr; + + assert(bf != NULL); + assert(size > 0); + + if ((chr = neschr_new(size)) == NULL) { + return NULL; + } + + binio_read(bf, chr->data, size); + + assert(chr->size == size); + assert(chr->data != NULL); + + return chr; +} + + + +int neschr_write_file(const char *file, const struct neschr_chr *chr) +{ + assert(file != NULL); + assert(chr != NULL); + + return binio_write_file(file, chr->data, chr->size); +} + + + +void neschr_write(struct binio_file *bf, const struct neschr_chr *chr) +{ + assert(bf != NULL); + assert(chr != NULL); + + binio_write(bf, chr->data, chr->size); +} + + + +struct neschr_chr *neschr_from_img8(const struct img8_image *img, int ver) +{ + struct neschr_chr *chr; + int x, y; + int w = (img->w + 7) / 8 * 8; + int h = (img->h + 7) / 8 * 8; + size_t i = 0; + + assert(img != NULL); + + if ((chr = neschr_new(img->w * img->h / (NESCHR_TILE_SIZE + * NESCHR_TILE_SIZE) * NESCHR_TILE_BYTES)) == NULL) { + return NULL; + } + + if (!ver) { + for (y = 0; y < h; y += NESCHR_TILE_SIZE) { + for (x = 0; x < w; x += NESCHR_TILE_SIZE) { + tile_from_img8(chr, img, i, x, y); + i += NESCHR_TILE_BYTES; + } + } + } else { + for (x = 0; x < w; x += NESCHR_TILE_SIZE) { + for (y = 0; y < h; y += NESCHR_TILE_SIZE) { + tile_from_img8(chr, img, i, x, y); + i += NESCHR_TILE_BYTES; + } + } + } + + assert(chr->size == i); + assert(chr->data != NULL); + + return chr; +} + + + +int neschr_is_equal(const struct neschr_chr *chr1, + const struct neschr_chr *chr2) +{ + assert(chr1 != NULL); + assert(chr2 != NULL); + + if (chr1->size != chr2->size) { + return 0; + } + + return !memcmp(chr1->data, chr2->data, chr1->size); +} + + + +static void tile_from_img8(struct neschr_chr *chr, + const struct img8_image *img, size_t dst, int sx, int sy) +{ + int p; + int x, y; + unsigned char u8; + + assert(chr != NULL); + assert(img != NULL); + assert(dst < chr->size); + assert(sx >= 0 && sx < img->w && sy >= 0 && sy < img->h); + + for (p = 0; p < NESCHR_NUM_PLANES; p++) { + for (y = sy; y < sy + NESCHR_TILE_SIZE; y++) { + u8 = 0; + + for (x = sx; x < sx + NESCHR_TILE_SIZE; x++) { + u8 <<= 1; + u8 |= (img->data[x + y * img->w] >> p) & 1; + } + + chr->data[dst++] = u8; + } + } +} + diff --git a/nes15-1.0.0/clib/neschr.h b/nes15-1.0.0/clib/neschr.h new file mode 100644 index 0000000..618a479 --- /dev/null +++ b/nes15-1.0.0/clib/neschr.h @@ -0,0 +1,140 @@ +/* + * File: neschr.h + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * NES CHR image library + */ + +#ifndef NESCHR_H +#define NESCHR_H + +#include + + + +#define NESCHR_BPP 2 +#define NESCHR_TILE_SIZE 8 +#define NESCHR_NUM_PLANES 2 +#define NESCHR_TILE_BYTES (NESCHR_TILE_SIZE * NESCHR_NUM_PLANES) + + + +struct binio_file; +struct img8_image; + +/* + * CHR image created and freed by the library. Its members are considered + * read-only. + */ +struct neschr_chr { + size_t size; + unsigned char *data; +}; + + + +/* + * Creates a new CHR image with the size 'size'. + * + * Returns: If the CHR image was created successfully, it is returned. + * Otherwise, NULL is returned and an error message is printed to 'stderr'. + * + * Asserts: + * size > 0 + * Returned 'neschr_chr' is valid + */ +struct neschr_chr *neschr_new(size_t size); + +/* + * Frees the CHR image 'chr'. + * + * Asserts: + * chr != NULL + * chr->data != NULL + */ +void neschr_free(struct neschr_chr *chr); + +/* + * Reads a new CHR image from the file 'file'. + * + * Returns: If the CHR image was successfully created and read, it is + * returned. Otherwise, NULL is returned and an error message is printed to + * 'stderr'. + * + * Asserts: + * file != NULL + * Returned 'neschr_chr' is valid + */ +struct neschr_chr *neschr_read_file(const char *file); + +/* + * Reads a new CHR image from the file 'bf' with the size 'size'. If the end of + * the file was reached before reading is complete, the file handle's 'eof' + * member will be set to a non-zero value. If an error occurred while reading, + * the file handle's 'error' member will be set to a non-zero value and an + * error message will be printed to 'stderr'. + * + * Returns: If the CHR image was successfully created, it is returned. + * Otherwise, NULL is returned and an error message is printed to 'stderr'. + * + * Asserts: + * bf != NULL + * size > 0 + * Returned 'neschr_chr' is valid + */ +struct neschr_chr *neschr_read(struct binio_file *bf, size_t size); + +/* + * Writes the CHR image 'chr' to the file 'file'. + * + * Returns: If the CHR image was successfully written, a non-zero value is + * returned. Otherwise, zero is returned and an error message is printed to + * 'stderr'. + * + * Asserts: + * file != NULL + * chr != NULL + */ +int neschr_write_file(const char *file, const struct neschr_chr *chr); + +/* + * Writes the CHR image 'chr' to the binary file 'bf'. If an error occurs while + * writing, the file handle's 'error' member will be set to a non-zero value + * and an error message will be printed to 'stderr'. + * + * Asserts: + * bf != NULL + * chr != NULL + */ +void neschr_write(struct binio_file *bf, const struct neschr_chr *chr); + +/* + * Creates a new CHR image from the 8bpp image 'img'. If 'ver' is set to a + * non-zero value, the 8bpp image is read from top to bottom as opposed to left + * to right. + * + * Returns: If the CHR image was created successfully, it is returned. + * Otherwise, NULL is returned and an error message is printed to 'stderr'. + * + * Asserts: + * img != NULL + * Returned 'neschr_chr' is valid + */ +struct neschr_chr *neschr_from_img8(const struct img8_image *img, int ver); + +/* + * Tests if the CHR image 'chr1' contains the same data as the CHR image + * 'chr2'. + * + * Returns: If both images contain the same data, then a non-zero value is + * returned. Otherwise, zero is returned. + * + * Asserts: + * chr1 != NULL + * chr2 != NULL + */ +int neschr_is_equal(const struct neschr_chr *chr1, + const struct neschr_chr *chr2); + +#endif /* NESCHR_H */ + diff --git a/nes15-1.0.0/clib/packbits.c b/nes15-1.0.0/clib/packbits.c new file mode 100644 index 0000000..7f8bdb4 --- /dev/null +++ b/nes15-1.0.0/clib/packbits.c @@ -0,0 +1,208 @@ +/* + * File: packbits.c + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * Packbits encoding and decoding library implementation + */ + +#include +#include +#include +#include "binio.h" + +#include "packbits.h" + + + +unsigned char *packbits_read_file(const char *file, size_t *size) +{ + struct binio_file *bf; + unsigned char *data; + int success; + + assert(file != NULL); + assert(size != NULL); + + if ((bf = binio_from_file(file, "rb")) == NULL) { + return NULL; + } + + if ((*size = packbits_get_size(bf)) == 0) { + binio_close(bf); + return NULL; + } + + if ((data = malloc(sizeof *data * *size)) == NULL) { + fprintf(stderr, "Unable to allocate decoded PackBits data\n"); + binio_close(bf); + return NULL; + } + + packbits_read(bf, data, *size); + success = !(bf->error || bf->eof); + + if (bf->eof) { + fprintf(stderr, "Error reading \"%s\", File truncated\n", + bf->name); + } + + binio_close(bf); + + if (!success) { + free(data); + return NULL; + } + + return data; +} + + + +void packbits_read(struct binio_file *bf, unsigned char *data, size_t size) +{ + signed char header; + unsigned char *data_end = data + size; + unsigned char u8; + int i; + + assert(bf != NULL); + assert(data != NULL); + assert(size > 0); + + while ((header = binio_read_s8(bf)) != -128 && data != data_end) { + if (header >= 0) { + for (i = header + 1; i > 0; i--) { + *data++ = binio_read_u8(bf); + } + } else { + u8 = binio_read_u8(bf); + + for (i = 1 - header; i > 0; i--) { + *data++ = u8; + } + } + } +} + + + +size_t packbits_write_file(const char *file, const unsigned char *data, + size_t size) +{ + struct binio_file *bf; + size_t out_size; + + assert(file != NULL); + assert(data != NULL); + assert(size > 0); + + if ((bf = binio_from_file(file, "wb")) == NULL) { + return 0; + } + + out_size = packbits_write(bf, data, size); + binio_close(bf); + + return out_size; +} + + + +size_t packbits_write(struct binio_file *bf, const unsigned char *data, + size_t size) +{ + const unsigned char *data_end = data + size; + const unsigned char *curr; + size_t dst_size = 0; + + assert(bf != NULL); + assert(data != NULL); + assert(size > 0); + + while (data < data_end) { + if (data < data_end - 1 && *data == *(data + 1)) { + curr = data + 1; + + while (curr != data_end) { + if (*curr != *(curr - 1)) { + break; + } + + if (curr - data >= 128) { + break; + } + + curr++; + } + + binio_write_s8(bf, 1 - (curr - data)); + binio_write_u8(bf, *data); + data = curr; + dst_size += 2; + } else { + curr = data + 1; + + while (curr != data_end) { + if (*curr == *(curr + 1)) { + break; + } + + if (curr - data >= 128) { + break; + } + + curr++; + } + + binio_write_s8(bf, curr - data - 1); + dst_size++; + + while (data < curr) { + binio_write_u8(bf, *data++); + dst_size++; + } + } + } + + binio_write_s8(bf, -128); + dst_size++; + + if (bf->error) { + return 0; + } + + return dst_size; +} + + + +size_t packbits_get_size(struct binio_file *bf) +{ + size_t size = 0; + signed char header; + int i; + + assert(bf != NULL); + + while ((header = binio_read_s8(bf)) != -128 && !bf->eof) { + if (header >= 0) { + for (i = header + 1; i > 0; i--) { + binio_read_u8(bf); + size++; + } + } else { + binio_read_u8(bf); + size += 1 - header; + } + + } + + binio_rewind(bf); + + if (bf->error) { + return 0; + } + + return size; +} + diff --git a/nes15-1.0.0/clib/packbits.h b/nes15-1.0.0/clib/packbits.h new file mode 100644 index 0000000..dcf2d9e --- /dev/null +++ b/nes15-1.0.0/clib/packbits.h @@ -0,0 +1,112 @@ +/* + * File: packbits.h + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * Packbits encoding and decoding library + * + * A PackBits data stream consists of packets with a one-byte header followed + * by data. The header is a signed byte; the data is treated as an unsigned + * char. + * + * Header byte Data following the header byte + * + * 0 to 127 (1 + n) literal bytes of data + * -1 to -127 One byte of data, repeated (1 - n) times in the + * decompressed output + * -128 Marks the end of the encoded data + * + * Note that the PackBits encoding used here differs somewhat from the + * original. The header byte -128 is used to mark the end of the encoded data + * instead of indicating a no-op or a run. + */ + +#ifndef PACKBITS_H +#define PACKBITS_H + +#include + + + +struct binio_file; + + +/* + * Reads the entire Packbits encoded file 'file' into a newly allocated buffer. + * + * Returns: If the buffer was successfully created and read into, it is + * returned and 'size' is set to the size of the buffer. Otherwise, NULL is + * returned and an error message is printed to 'stderr'. + * + * Asserts: + * file != NULL + * size != NULL + */ +unsigned char *packbits_read_file(const char *file, size_t *size); + +/* + * Reads 'size' bytes of decoded data from the PackBits encoded binary file + * 'bf' from its current position forward into 'data'. If the end of the file + * was reached before reading is complete, the file handle's 'eof' member will + * be set to a non-zero value. If an error occurred while reading, the file + * handle's 'error' member will be set to a non-zero value and an error message + * will be printed to 'stderr'. + * + * Asserts: + * bf != NULL + * data != NULL + * size > 0 + */ +void packbits_read(struct binio_file *bf, unsigned char *data, size_t size); + + +/* + * Writes the binary data in 'data' with the size 'size' to the file 'file' in + * PackBits encoding. + * + * Returns: If the binary data was compressed and successfully written, the + * size of the encoded data is returned. Otherwise, zero is returned and an + * error message is printed to 'stderr'. + * + * Asserts: + * file != NULL + * data != NULL + * size > 0 + */ +size_t packbits_write_file(const char *file, const unsigned char *data, + size_t size); + +/* + * Writes 'size' bytes to the binary file 'bf' from its current position + * forward from the buffer 'data' in PackBits encoding. If an error occurs + * while writing, the file handle's 'error' member will be set to a non-zero + * value and an error message will be printed to 'stderr'. + * + * Returns: If the binary data was compressed and successfully written, the + * size of the encoded data is returned, otherwise zero is returned. + * + * Asserts: + * bf != NULL + * data != NULL + * size > 0 + */ +size_t packbits_write(struct binio_file *bf, const unsigned char *data, + size_t size); + +/* + * Gets the number of bytes (after decoding) left to be read in the PackBits + * encoded binary file 'bf', then resets the binary file's position back to the + * beginning of the file. + * + * Returns: If successful, the number of bytes left (after decoding) in the + * file is returned. Otherwise, if an error occurs or there where no bytes left + * to read, zero is returned. If an error does occur, the file handle's 'error' + * member will be set to a non-zero value and an error message will be printed + * to 'stderr'. + * + * Asserts: + * bf != NULL + */ +size_t packbits_get_size(struct binio_file *bf); + +#endif /* PACKBITS_H */ + diff --git a/nes15-1.0.0/fifteen/Makefile b/nes15-1.0.0/fifteen/Makefile new file mode 100644 index 0000000..14fd3cd --- /dev/null +++ b/nes15-1.0.0/fifteen/Makefile @@ -0,0 +1,35 @@ +# +# 'fifteen' test GNU Makefile +# + +INCS = \ + ../nes-lib/lfsr32.inc \ + fifteen.inc + +OBJS = \ + ../nes-lib/lfsr32.o \ + fifteen.o \ + test.o + +BIN = test.bin + +AS65 = ca65 +LD65 = ld65 +AFLAGS65 = -l -I ../nes-lib +LCONFIG = test.cfg +MAPFILE = map.txt + +# +# Targets +# + +$(BIN): $(OBJS) + $(LD65) -C $(LCONFIG) $(OBJS) -m $(MAPFILE) -o $(BIN) + +.PHONY: clean +clean: + rm $(BIN) $(OBJS) $(OBJS:.o=.lst) $(MAPFILE) + +%.o: %.s $(INCS) $(LCONFIG) + $(AS65) $(AFLAGS65) $< -o $@ + diff --git a/nes15-1.0.0/fifteen/fifteen.inc b/nes15-1.0.0/fifteen/fifteen.inc new file mode 100644 index 0000000..3bf7533 --- /dev/null +++ b/nes15-1.0.0/fifteen/fifteen.inc @@ -0,0 +1,104 @@ +; +; File: fifteen.inc +; Namespace: fifteen_ / FIFTEEN +; Code Segment: FIFTEENLIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Fifteen puzzle library +; + +.ifndef FIFTEEN_INC +FIFTEEN_INC = 1 + +; Dimensions of the puzzle board + +FIFTEEN_WIDTH = 4 +FIFTEEN_HEIGHT = 4 +FIFTEEN_SIZE = FIFTEEN_WIDTH * FIFTEEN_HEIGHT + + + +; Current state of the puzzle board. The gap is represented by zero and the +; tiles are represented by the values 1 to 15. + +.global fifteen_board + +; Horizontal position of the puzzle's gap + +.globalzp fifteen_gap_x + +; Vertical position of the puzzle's gap + +.globalzp fifteen_gap_y + + + +; +; Generates a new puzzle state. Note that the state will always be solvable. +; +; Destroyed: a, x, y +; +.global fifteen_gen + +; +; Tests if the puzzle is currently in a solvable state. Note that the puzzle is +; solvable if the parity of the permutation of the board is not equal to the +; parity of the gap's vertical position (perm_parity ^ (fifteen_gap_y & 1)). +; +; Out: +; C = Set if the puzzle is in an solvable state, else reset +; +; Destroyed: a, x, y +; +.global fifteen_solvable + +; +; Attempts to move a tile into the gap's position. +; +; In: +; a = The horizontal position of the tile to move +; y = The vertical position of the tile to move +; Out: +; Z = Reset if the move was invalid, else set if the move was performed +; +; Destroyed: a, x, y +; +.global fifteen_move + +; +; Tests if the puzzle has been solved. +; +; Out: +; Z = Reset if the puzzle is unsolved, else set +; +; Destroyed: a, y +; Preserved: x +; +.global fifteen_solved + +; +; Initializes the puzzle solver. This should be called once before using +; 'fifteen_solve' to obtain moves. If the puzzle state is altered by moves +; other than those provided by the solver, this should be called again. +; +; Destroyed: a, x, y +; +.global fifteen_init_solver + +; +; Returns the next move generated by the puzzle solver. If the puzzle is +; altered by moves other than those returned by this subroutine, then +; 'fifteen_init_solver' should be called again. Never call this subroutine when +; the puzzle is solved. +; +; Out: +; a = The horizontal position of the tile to move +; y = The vertical position of the tile to move +; +; Destroyed: x +; +.global fifteen_solve + +.endif + diff --git a/nes15-1.0.0/fifteen/fifteen.s b/nes15-1.0.0/fifteen/fifteen.s new file mode 100644 index 0000000..a35f08c --- /dev/null +++ b/nes15-1.0.0/fifteen/fifteen.s @@ -0,0 +1,1152 @@ +; +; File: fifteen.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Fifteen puzzle subroutines and data +; +; The solver used is based on documentation and source code by 'Karl Hornell' +; found at: +; http://www.javaonthebrain.com/java/puzz15/ +; + +.include "lfsr32.inc" + +.include "fifteen.inc" + + + +.segment "ZEROPAGE" + +fifteen_gap_x: .res 1 +fifteen_gap_y: .res 1 + +; Temporary storage used by the module + +temp: .res 6 + +; Current position of the gap in the solver's copy of the puzzle's state + +solver_gap: .res 1 + +; Current position of the next move in 'solver_moves' that will be returned +; when 'fifteen_solve' is called. This is also used by the move generator to +; keep track of the end of the moves list. + +solver_end: .res 1 + +; Current goal the solver is trying to accomplish + +solver_goal: .res 1 + + + +.segment "BSS" + +fifteen_board: .res FIFTEEN_SIZE + +; The solver's copy of the current state of the puzzle. Values greater than $7F +; are used to mark locked tiles that should not be moved by the solver. + +solver_board: .res FIFTEEN_SIZE + +; List of moves to be used by the solver to accomplish its current goal. The +; end of the list is marked with a value greater than $7F. Note the size is an +; arbitrary estimate. + +solver_moves: .res 64 + + + +.segment "FIFTEENLIB" + +.proc fifteen_gen + +divisor = temp + 1 +last_tiles = temp + 1 + + ; Initialize the board with the goal state randomly shuffled. + + lda fifteen_goal + sta fifteen_board + ldx #2 + +shuffle_loop: + ldy #4 + jsr lfsr32_next + lda lfsr32 + stx divisor + sec + +mod_loop: + sbc divisor + bcs mod_loop + adc divisor ; Carry is already cleared + tay + lda fifteen_board, y + sta fifteen_board - 1, x + lda fifteen_goal - 1, x + sta fifteen_board, y + inx + cpx #FIFTEEN_SIZE + 1 + bne shuffle_loop + + ; Find the location of the gap and save it. + + ldx #FIFTEEN_SIZE + +gap_loop: + dex + lda fifteen_board, x + bne gap_loop + txa + and #$03 + sta fifteen_gap_x + txa + lsr + lsr + sta fifteen_gap_y + + ; Find the last two tiles from the bottom-right corner backwards. + + ldx #FIFTEEN_SIZE + ldy #2 + +last_loop: + dex + lda fifteen_board, x + beq last_loop + stx last_tiles - 1, y + dey + bne last_loop + + ; If the puzzle is in an unsolvable state, reverse the last two tiles + ; on the board. This inverts the permutation's parity, thus leaving the + ; puzzle in a solvable state. + + jsr fifteen_solvable + bcs done + ldx last_tiles + lda fifteen_board, x + pha + ldy last_tiles + 1 + lda fifteen_board, y + sta fifteen_board, x + pla + sta fifteen_board, y + +done: + rts + +.endproc + + + +.proc fifteen_solvable + +perm_parity = temp + + ; Initialize the parity and check for inversions from the first tile + ; forward to the second to the last. + + ldx #0 + stx perm_parity + +outer: + + ; Count the inversions forward from the current tile. Note that we + ; don't count inversions from the puzzle's gap. + + lda fifteen_board, x + beq cont_outer + txa + tay + iny + +inner: + + ; If an inversion with a tile was found, invert the current parity. + + lda fifteen_board, y + beq cont_inner + cmp fifteen_board, x + bcs cont_inner + inc perm_parity + +cont_inner: + iny + cpy #FIFTEEN_SIZE + bne inner + +cont_outer: + inx + cpx #FIFTEEN_SIZE - 1 + bne outer + + ; Return solvability in the carry flag + ; (bit 0 of perm_parity ^ fifteen_gap_y). + + lda perm_parity + eor fifteen_gap_y + lsr + rts + +.endproc + + + +.proc fifteen_move + +tile_x = temp + + sta tile_x + + ; If the tile to move is lined up with the gap horizontally, then that + ; tile's vertical position must be directly adjacent to the gap. + + cmp fifteen_gap_x + bne test_ver + tya + sbc fifteen_gap_y ; Carry is already set + cmp #1 + beq valid + cmp #-1 + beq valid + rts + + ; Else, if the tile to move is lined up with the gap vertically, then + ; that tile's horizontal position must be directly adjacent to the gap. + +test_ver: + cpy fifteen_gap_y + bne done + sbc fifteen_gap_x ; Carry is already set + cmp #1 + beq valid + cmp #-1 + beq valid + rts + + ; If the move is valid, swap the tile with the gap and set the gap's + ; new position. + +valid: + tya + asl + asl + adc tile_x ; Carry is already cleared + tax + lda fifteen_gap_y + sty fifteen_gap_y + asl + asl + adc fifteen_gap_x ; Carry is already cleared + tay + lda tile_x + sta fifteen_gap_x + lda fifteen_board, x + sta fifteen_board, y + lda #0 ; Done last to ensure Z = 0 + sta fifteen_board, x + +done: + rts + +.endproc + + + +.proc fifteen_solved + + ldy #FIFTEEN_SIZE + +loop: + lda fifteen_board - 1, y + cmp fifteen_goal - 1, y + bne done + dey + bne loop + +done: + rts + +.endproc + + + +.proc fifteen_init_solver + +lock_pos = temp + + ; Copy the puzzle state to the solver's puzzle state copy. + + ldx #FIFTEEN_SIZE + +copy_loop: + lda fifteen_board - 1, x + sta solver_board - 1, x + dex + bne copy_loop + + ; Set the solver's current position of the gap. + + lda fifteen_gap_y + asl + asl + ora fifteen_gap_x + sta solver_gap + + ; Find the goal the solver should start from, keeping track of the last + ; position read from in 'goal_table'. + + ldx #0 + stx lock_pos + stx solver_goal + +goal_loop: + ldy goal_table, x + lda solver_board - 1, y + cmp goal_table, x + bne lock_tiles + inx + lda goal_table, x + bne goal_loop + inc solver_goal + stx lock_pos ; Save current position for lock marking + inx + bne goal_loop + + ; Mark any tiles that are in their destination positions as locked. + +lock_tiles: + ldx lock_pos + +lock_loop: + dex + bmi done + ldy goal_table, x + beq lock_loop + lda #$FF + sta solver_board - 1, y + bne lock_loop + + ; Finally, build the list of moves for the first goal that needs to be + ; accomplished and return. + +done: + jmp build_moves + +; List of all tiles needed by each of the solver's goals + +goal_table: + .byte 1, 0 + .byte 2, 0 + .byte 3, 4, 0 + .byte 5, 0 + .byte 6, 0 + .byte 7, 8, 0 + .byte 9, 13, 0 + .byte 10, 14, 0 + .byte 11, 12, 15, 0 + +.endproc + + + +.proc fifteen_solve + + ; If another move is waiting on the moves list, then return it. + + ldx solver_end + lda solver_moves, x + bmi next_goal + inc solver_end + tax + lsr + lsr + tay + txa + and #$03 + rts + + ; Else, reinitialize the solver for the next goal and try again. Note + ; that 'fifteen_init_solver' is used to skip over any new goals that + ; might already be accomplished. + +next_goal: + jsr fifteen_init_solver + jmp fifteen_solve + +.endproc + + + +; +; Fills 'solver_moves' with the moves needed to accomplish the solver's current +; goal. +; +; Out: +; solver_end = 0 +; +; Destroyed: a, x, y +; +.proc build_moves + + lda #0 + sta solver_end + jsr build + ldx solver_end + lda #0 + sta solver_end + lda #$FF + sta solver_moves, x + rts + +build: + lda solver_goal + asl + tax + lda build_table + 1, x + pha + lda build_table, x + pha + rts + +build_table: + .addr build_1 - 1 + .addr build_2 - 1 + .addr build_3_4 - 1 + .addr build_5 - 1 + .addr build_6 - 1 + .addr build_7_8 - 1 + .addr build_9_13 - 1 + .addr build_10_14 - 1 + .addr build_15 - 1 + +; +; Builds the moves needed to move a tile to a specified destination, avoiding +; any locked tiles. After the tile is placed at its destination it is locked +; into place. Note that this should not be called to move a locked tile. +; +; In: +; a = The tile to move +; y = The position to move the tile to +; Out: +; solver_end = The position ahead of the last move in the list +; +; Destroyed: a, x, y, temp.../+6 +; +.proc move_tile + +; Current position of the tile being moved + +tile_pos = temp + 1 + +; Position the tile should be moved to + +tile_goal = temp + 2 + +; Position the gap should be moved to + +gap_goal = temp + 3 + +; Counters used to hold the weights of the gap's path clockwise and counter- +; clockwise around the tile being moved. + +cw_weight = temp + 4 +ccw_weight = temp + 5 + + sty tile_goal + + ; Find the position of the tile to be moved. + + ldx #$FF + +find_loop: + inx + cmp solver_board, x + bne find_loop + stx tile_pos + lda #$FF ; Lock the tile to be moved + sta solver_board, x + +move_loop: + + ; If the current tile has reached its goal, then return. + + lda tile_pos + cmp tile_goal + bne test_goal + rts + + ; Determine the position the gap should move toward. + +test_goal: + lda tile_pos ; Reset the gap's goal + sta gap_goal + lda tile_goal ; Test if the gap's goal should be moved + and #$03 ; horizontally + sta temp + lda tile_pos + and #$03 + cmp temp + bcs test_goal_left ; If the tile is to the right, test left + inc gap_goal ; Else, move the goal right + bne move_gap_loop + +test_goal_left: + beq test_goal_y ; If lined up, test for vertical movement + dec gap_goal ; Else, move the goal left + bpl move_gap_loop + +test_goal_y: + lda tile_goal + lsr + lsr + sta temp + lda tile_pos + lsr + lsr + cmp temp + bcs move_goal_up ; If the tile is above, move the goal up + lda gap_goal ; Else, move the goal down + adc #4 ; Carry is already cleared + sta gap_goal + bne move_gap_loop + +move_goal_up: + lda gap_goal + sbc #4 ; Carry is already set + sta gap_goal + + ; Move the gap until it is orthogonally or diagonally adjacent to the + ; tile to be moved. + +move_gap_loop: + + ; If the gap is adjacent to the tile to be moved, then continue on to + ; test for rotational movement. + + lda tile_pos ; Find the displacement from the tile + sec + sbc solver_gap + tay + ldx #8 + +gap_adj_loop: + tya ; If the displacement is listed and is not out + cmp round_disp - 1, x ; of bounds, then the gap is adjacent + bne gap_adj_cont + lda solver_gap + and #$03 + clc + adc round_dx - 1, x + cmp #4 + bcc rotate_gap + +gap_adj_cont: + dex ; Else, continue backwards in the table + bne gap_adj_loop + + ; Else, move the gap closer to the current tile. + + lda gap_goal ; Test for horizontal movement + and #$03 + sta temp + lda solver_gap + and #$03 + cmp temp + bcc move_gap_right ; If the gap is to left, try right + beq test_gap_y ; Else, if lined up, test for vertical movement + ldx solver_gap ; Else, try to move the gap left + dex + lda solver_board, x + bpl move_gap ; If not blocked by a locked tile, move left + bmi test_gap_y ; Else, test for vertical movement + +move_gap_right: + ldx solver_gap + inx + lda solver_board, x + bpl move_gap ; If not blocked by a locked tile, move right + +test_gap_y: + lda solver_gap ; Test for vertical movement + lsr + lsr + sta temp + lda gap_goal + lsr + lsr + cmp temp + bcs move_gap_down ; If the gap is above, move down + lda solver_gap ; Else, try to move up + sbc #3 ; Carry is already cleared + tax + lda solver_board, x + bpl move_gap ; If not blocked by a locked tile, move up + +move_gap_down: + lda solver_gap ; Else, just move down + adc #3 ; Carry is already set + tax + + ; Exchange the gap with the tile at its goal position and continue. + +move_gap: + ldy solver_end + txa + sta solver_moves, y + inc solver_end + ldy solver_gap + lda solver_board, x + sta solver_board, y + lda #0 + sta solver_board, x + stx solver_gap + beq move_gap_loop + + ; Move the gap along the shortest path either clockwise or counter- + ; clockwise around the tile to be moved. + +rotate_gap: + lda solver_gap ; If the gap is already at its goal, skip past + cmp gap_goal ; rotational movement + bne init_weights + jmp cont_move + +init_weights: + lda #0 ; Reset the path weight counters + sta cw_weight + sta ccw_weight + + ; Find the gap's current displacement from the current tile starting in + ; the middle of the displacement table. + + ldx #8 + +find_disp_loop: + lda tile_pos + clc + adc round_disp, x + cmp solver_gap + beq test_cw + inx + bne find_disp_loop + + ; Test the clockwise path around the current tile. + +test_cw: + stx temp + +cw_loop: + lda tile_pos ; If the current position is over the goal, + clc ; then the path if fully tested + adc round_disp, x + cmp gap_goal + beq test_ccw + inx + cmp #FIFTEEN_SIZE ; If out of bounds, add highest value + bcs cw_blocked + tay + lda tile_pos + and #$03 + adc round_dx, x ; Carry is already clear + cmp #4 + bcs cw_blocked + lda solver_board, y ; If blocked by locked tile, add highest value + bmi cw_blocked + inc cw_weight ; Else, add the lowest value to the weight for + bne cw_loop ; this path, making it more desirable + +cw_blocked: + lda cw_weight + clc + adc #8 + sta cw_weight + bne cw_loop + + ; Test the counter-clockwise path around the current tile. + +test_ccw: + ldx temp + +ccw_loop: + lda tile_pos ; If the current position is over the goal, + clc ; then the path if fully tested + adc round_disp, x + cmp gap_goal + beq rotate_loop + dex + cmp #FIFTEEN_SIZE ; If out of bounds, add highest value + bcs ccw_blocked + tay + lda tile_pos + and #$03 + adc round_dx, x ; Carry is already clear + cmp #4 + bcs ccw_blocked + lda solver_board, y ; If blocked by locked tile, add highest value + bmi ccw_blocked + inc ccw_weight ; Else, add the lowest value to the weight for + bne ccw_loop ; this path, making it more desirable + +ccw_blocked: + lda ccw_weight + clc + adc #8 + sta ccw_weight + bne ccw_loop + + ; Move the gap along the shortest path found. + +rotate_loop: + lda cw_weight + cmp ccw_weight + bcc rotate_cw + dec temp + bpl cont_rotate + +rotate_cw: + inc temp + +cont_rotate: + ldx temp + lda tile_pos + clc + adc round_disp, x + ldy solver_end ; Save the move to the moves list + sta solver_moves, y + inc solver_end + tay + ldx solver_gap ; Exchange the gap with the tile to be moved + lda solver_board, y + sta solver_board, x + lda #0 + sta solver_board, y + sty solver_gap + cpy gap_goal ; Repeat until the gap has reached its goal + bne rotate_loop + + ; Add the final move to the list and continue moving. + +cont_move: + ldy solver_end + lda tile_pos + sta solver_moves, y + inc solver_end + tay + lda #0 + sta solver_board, y + lda #$FF + ldx gap_goal + sta solver_board, x + stx tile_pos + sty solver_gap + jmp move_loop + +; Rotational displacement lookup table stored from the top-left going forward +; clockwise + +round_disp: + .byte -4, -3, 1, 5, 4, 3, -1, -5 + .byte -4, -3, 1, 5, 4, 3, -1, -5 + .byte -4, -3, 1, 5, 4, 3, -1, -5 + .byte -4 + +; Horizontal change lookup table stored from the top-left going forward +; clockwise + +round_dx: + .byte 0, 1, 1, 1, 0, -1, -1, -1 + .byte 0, 1, 1, 1, 0, -1, -1, -1 + .byte 0, 1, 1, 1, 0, -1, -1, -1 + .byte 0 + +.endproc + +; +; Copies a predefined list of moves from memory into 'solver_moves', adjusting +; the solver's copy of the puzzle state as needed. The list provided should be +; followed by a value greater than $7F. +; +; In: +; a = The low byte of the address of the move list +; y = The high byte of the address of the move list +; +; Out: +; solver_end = The position ahead of the last move in the list +; +; Destroyed: a, x, y, temp/+1 +; +.proc read_moves + +addr = temp + + sta addr + sty addr + 1 + +loop: + ldy #0 ; Read moves until a terminating value is found + lda (addr), y + bmi done + tax ; Exchange the tile to move with the gap + ldy solver_gap + lda solver_board, x + sta solver_board, y + lda #0 + sta solver_board, x + stx solver_gap + ldy solver_end ; Save the move to the moves list + txa + sta solver_moves, y + inc solver_end + inc addr ; Advance to the next byte and continue + bne loop + inc addr + 1 + bne loop + +done: + rts + +.endproc + + + +; +; Move building subroutines for each solver goal. +; +.proc build_1 + + lda #1 + ldy #0 + jmp move_tile + +.endproc + +.proc build_2 + + lda #2 + ldy #1 + jmp move_tile + +.endproc + +.proc build_3_4 + + lda #3 + ldy #3 + jsr move_tile + + ; Corner case #1: + ; x x 4 3 + ; x x x x + ; x x x x + ; x x x x + + lda solver_board + 2 + beq test_case2 + cmp #4 + bne move4 + ldy #6 + jsr move_tile + jmp case2 + + ; Corner case #2: + ; x x 0 3 + ; x x 4 x + ; x x x x + ; x x x x + +test_case2: + lda solver_board + 6 + cmp #4 + bne move4 + +case2: + lda #moves0 + jsr read_moves + jmp finish + +move4: + lda #4 + ldy #7 + jsr move_tile + +finish: + lda #$FF ; Lock tile 4 + sta solver_board + 7 + lda #3 ; Unlock and move tile 3 + sta solver_board + 3 + ldy #2 + jsr move_tile + lda #4 ; Unlock and move tile 4 + sta solver_board + 7 + ldy #3 + jmp move_tile + +moves0: + .byte 3, 7, 11, 10, 6, 7, 11, 10, 6, 7, 3, 2, 6, 7, 11, $FF + +.endproc + +.proc build_5 + + lda #5 + ldy #4 + jmp move_tile + +.endproc + +.proc build_6 + + lda #6 + ldy #5 + jmp move_tile + +.endproc + +.proc build_7_8 + + lda #7 + ldy #7 + jsr move_tile + + ; Corner case #1: + ; x x x x + ; x x 8 7 + ; x x x x + ; x x x x + + lda solver_board + 6 + beq test_case2 + cmp #8 + bne move8 + ldy #10 + jsr move_tile + jmp case2 + + ; Corner case #2: + ; x x x x + ; x x 0 7 + ; x x 8 x + ; x x x x + +test_case2: + lda solver_board + 10 + cmp #8 + bne move8 + +case2: + lda #moves0 + jsr read_moves + jmp finish + +move8: + lda #8 + ldy #11 + jsr move_tile + +finish: + lda #$FF ; Lock tile 8 + sta solver_board + 11 + lda #7 ; Unlock and move tile 7 + sta solver_board + 7 + ldy #6 + jsr move_tile + lda #8 ; Unlock and move tile 8 + sta solver_board + 11 + ldy #7 + jmp move_tile + +moves0: + .byte 7, 11, 15, 14, 10, 11, 15, 14, 10, 11, 7, 6, 10, 11, 15, $FF + +.endproc + +.proc build_9_13 + + lda #13 + ldy #8 + jsr move_tile + + ; Corner case #1: + ; x x x x + ; x x x x + ; 13 x x x + ; 9 x x x + + lda solver_board + 12 + beq test_case2 + cmp #9 + bne move9 + ldy #13 + jsr move_tile + jmp case2 + + ; Corner case #2: + ; x x x x + ; x x x x + ; 13 x x x + ; 0 9 x x + +test_case2: + lda solver_board + 13 + cmp #9 + bne move9 + +case2: + lda #moves0 + jsr read_moves + jmp finish + +move9: + lda #9 + ldy #9 + jsr move_tile + +finish: + lda #$FF ; Lock tile 9 + sta solver_board + 9 + lda #13 ; Unlock and move tile 13 + sta solver_board + 8 + ldy #12 + jsr move_tile + lda #9 ; Unlock and move tile 9 + sta solver_board + 9 + ldy #8 + jmp move_tile + +moves0: + .byte 8, 9, 10, 14, 13, 9, 10, 14, 13, 9, 8, 12, 13, 9, 10, $FF + +.endproc + +.proc build_10_14 + + lda #14 + ldy #9 + jsr move_tile + + ; Corner case #1: + ; x x x x + ; x x x x + ; x 14 x x + ; x 10 x x + + lda solver_board + 13 + beq test_case2 + cmp #10 + bne move10 + ldy #14 + jsr move_tile + jmp case2 + + ; Corner case #2: + ; x x x x + ; x x x x + ; x 14 x x + ; x 0 10 x + +test_case2: + lda solver_board + 14 + cmp #10 + bne move10 + +case2: + lda #moves0 + jsr read_moves + jmp finish + +move10: + lda #10 + tay + jsr move_tile + +finish: + lda #$FF ; Lock tile 10 + sta solver_board + 10 + lda #14 ; Unlock and move tile 14 + sta solver_board + 9 + ldy #13 + jsr move_tile + lda #10 ; Unlock and move tile 10 + sta solver_board + 10 + ldy #9 + jmp move_tile + +moves0: + .byte 9, 10, 11, 15, 14, 10, 11, 15, 14, 10, 9, 13, 14, 10, 11, $FF + +.endproc + +.proc build_15 + + ; Rotate the last tiles counter-clockwise until the puzzle is solved. + +loop: + lda solver_board + 15 + bne test11 + lda solver_board + 14 + cmp #15 + beq done + lda #moves0 + jsr read_moves + jmp loop + +test11: + lda solver_board + 11 + bne test10 + lda #moves1 + jsr read_moves + jmp loop + +test10: + lda solver_board + 10 + bne move15 + lda #moves2 + jsr read_moves + jmp loop + +move15: + lda #moves3 + jsr read_moves + jmp loop + +done: + rts + +moves0: + .byte 11 + +moves1: + .byte 10 + +moves2: + .byte 14 + +moves3: + .byte 15, $FF + +.endproc + +.endproc + + + +; Goal state of the board + +fifteen_goal: + .byte 1, 2, 3, 4 + .byte 5, 6, 7, 8 + .byte 9, 10, 11, 12 + .byte 13, 14, 15, 0 + diff --git a/nes15-1.0.0/fifteen/test.cfg b/nes15-1.0.0/fifteen/test.cfg new file mode 100644 index 0000000..9159e65 --- /dev/null +++ b/nes15-1.0.0/fifteen/test.cfg @@ -0,0 +1,19 @@ +# +# 'fifteen' test linker configuration +# + +MEMORY { + ZP: start = $00, size = $100, type = rw; + RAM: start = $200, size = $600, type = rw; + ROM: start = $8000, size = $8000, type = ro, file %O, fill = yes; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + BSS: load = RAM, type = bss; + CODE: load = ROM, type = ro; + LFSRLIB: load = ROM, type = ro; + FIFTEENLIB: load = ROM, type = ro; + VECTORS: load = ROM, start = $FFFA, type = ro; +} + diff --git a/nes15-1.0.0/fifteen/test.s b/nes15-1.0.0/fifteen/test.s new file mode 100644 index 0000000..1f45f85 --- /dev/null +++ b/nes15-1.0.0/fifteen/test.s @@ -0,0 +1,98 @@ +; +; File: test.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Test program for the fifteen puzzle library +; + +.include "lfsr32.inc" +.include "fifteen.inc" + + + +NUM_TESTS = 10000 + + + +.segment "ZEROPAGE" + +failed: .res 1 +count: .res 2 + + + +.segment "CODE" + +; +; Reset routine used to test the fifteen puzzle library. If all tests were +; successful, then 'failed' will be set to zero, else 'failed' will be set to +; one. +; +.proc reset + + cld + ldx #$FF + txs + lda #1 + sta failed + lda #<($10000 - NUM_TESTS) + sta count + lda #>($10000 - NUM_TESTS) + sta count + 1 + + lda #53 + sta lfsr32 + sta lfsr32 + 1 + sta lfsr32 + 2 + sta lfsr32 + 3 + +loop: + ; Ensure the puzzle generator is providing solvable puzzles. + + jsr fifteen_gen + jsr fifteen_solvable + bcc done + + ; Test the puzzle solver. + + jsr fifteen_init_solver + +solve_loop: + jsr fifteen_solved + beq next + jsr fifteen_solve + jsr fifteen_move + jmp solve_loop + +next: + inc count + bne loop + inc count + 1 + bne loop + dec failed + +done: + jmp done + +.endproc + + + +; +; Dummy NMI and IRQ routines +; +; Preserved: a, x, y +; +nmi: +irq: + rti + + + +.segment "VECTORS" + + .addr nmi + .addr reset + .addr irq + diff --git a/nes15-1.0.0/game.cfg b/nes15-1.0.0/game.cfg new file mode 100644 index 0000000..abff2a7 --- /dev/null +++ b/nes15-1.0.0/game.cfg @@ -0,0 +1,35 @@ +# +# 'nes15' linker configuration +# + +MEMORY { + HEADER: start = $7FF0, size = $0010, type = ro, file = "header.bin", + fill = yes; + ZP: start = $00, size = $100, type = rw; + RAM: start = $300, size = $500, type = rw; + PGRROM: start = $C000, size = $4000, type = ro, file = "game.bin", + fill = yes; + CHRROM1: start = $10000, size = $1000, type = ro, file = "chr1.chr", + fill = yes; + CHRROM2: start = $11000, size = $2000, type = ro, file = "chr2.chr", + fill = yes; +} + +SEGMENTS { + INESHDR: load = HEADER, type = ro; + ZEROPAGE: load = ZP, type = zp; + BSS: load = RAM, type = bss; + CODE: load = PGRROM, type = ro; + BCDLIB: load = PGRROM, type = ro; + FIFTEENLIB: load = PGRROM, type = ro; + JOYLIB: load = PGRROM, type = ro; + LFSRLIB: load = PGRROM, type = ro; + MUSELIB: load = PGRROM, type = ro; + OAMLIB: load = PGRROM, type = ro; + PKBLIB: load = PGRROM, type = ro; + VRUBLIB: load = PGRROM, type = ro; + VECTORS: load = PGRROM, start = $FFFA, type = ro; + CHR1: load = CHRROM1, type = ro, optional = yes; + CHR2: load = CHRROM2, type = ro, optional = yes; +} + diff --git a/nes15-1.0.0/gfx/bgd.pal b/nes15-1.0.0/gfx/bgd.pal new file mode 100644 index 0000000..5de6df4 --- /dev/null +++ b/nes15-1.0.0/gfx/bgd.pal @@ -0,0 +1 @@ +(8 \ No newline at end of file diff --git a/nes15-1.0.0/gfx/cursor.pcx b/nes15-1.0.0/gfx/cursor.pcx new file mode 100644 index 0000000000000000000000000000000000000000..fc0601b5a0a1c688b13cc153bf5426af68e8e354 GIT binary patch literal 1049 zcmeHDTMEK35ZufVl+rusneyQca|AE2)gt0gPo%RTV*b+4Lg!=OvzyG2)6s;J9l`}l zDYe#jA1s|M*(F~Q)b&`1mw~*44%vx#8k~eD$fy^QQ~nW&I?=dA9CfiUE0O<;y_pi{ g%T~SFOBHl)`rX&4-m`GjS5^tpC)Yl;E3gd(KBv__`Tzg` literal 0 HcmV?d00001 diff --git a/nes15-1.0.0/gfx/edges.pcx b/nes15-1.0.0/gfx/edges.pcx new file mode 100644 index 0000000000000000000000000000000000000000..638304fe2201691806468759156b4422c5e78eed GIT binary patch literal 1097 zcmd;LW#nK00(%B_5CsB3K|xEGF8xm&U|@7$U}Okm-O2>fOe%SZ;SA#;21aJaQ_PIa zCmBxwNidU@# ZIvM0_Bn>>I1{`t0JF03l1cpWk004E`MnnJr literal 0 HcmV?d00001 diff --git a/nes15-1.0.0/gfx/font.pcx b/nes15-1.0.0/gfx/font.pcx new file mode 100644 index 0000000000000000000000000000000000000000..390424a50b42c084036440ba907e0667cf2517cd GIT binary patch literal 2990 zcmeH}O>PrG5QW=}A|b>bxDg9q2riQgaD?feaWEi3kRsS1K;j1M&HG+;d1kCEk|k1{ zX;*jsy!!2NUR>>-7k%E8R}en?{r>v;`t-0**}W~h^7`uCvoL<__lGhLO>0~&&a7JW zwBexb)LDPaeFn8m8vwwtV9nhU9-zOp))?hx5a+$6?QC_kI{(z(Za-=R3_%5a9X{!d z@(9j69JOGL<(n8NRW0aPs-&UZI=~OhzgvpNWbJh+aCw;lS$x(4wQT~6!WpD05R75n z73;H|%BlP=gB&&US|Ya zbab{^qsi957kJ`eN0s9^n?_6IdBMBY{)_Q802zTm@O(BnAER=U{Y&~)Yf`-^(1CCw z_;6m8yK~ex#mQWdqDiR9Usp;%O(JPP5|jNXS6GB~_`)?vsVnP0#VtZF3UIJZRS%j& zojfm$poUtUlm5mcCiy#^=4f?t85+U3sPNN&Rm#pU5{q6ES~sH&h+r`hng2qaB!IAz zEKPzNl?{-7qz6{+<~|iz(E*9M5Lo*?umDnJteK)McwEb-`K89T6s!Rqe>ZTPi#>Ck zv+e|QFlCGLL^V{nB+8ymM2tURJ2d(B6P%2Al?WQOt3dmaypr9qR?_r9vAb=uF6{8= z>MkWp*p5fmC|&sLz^=TiEFC6-wzFdt@#rfNw(c#8;Iep_1qrMRFJ2WfpcdyFyQ70^ z^Rvaq+#*nBd1!jC(Gn3OcXyF!mIG?3!%J@0kBF?mwsTRUE3_bf4yt}Ax=Y|2uiu|1eKlPZjt-D)0~G&J<|? literal 0 HcmV?d00001 diff --git a/nes15-1.0.0/gfx/nums.pcx b/nes15-1.0.0/gfx/nums.pcx new file mode 100644 index 0000000000000000000000000000000000000000..f0e43b121284abb771b9edcbf72c888b7ce4058e GIT binary patch literal 2287 zcmeH|L2lbH5Jg210g9qPZ`OtH=nLcsq$JyNoiy3?0@=1e58%H4hqja~3TIg$GDwYv zGxI-ZhVwpgsJnV2Q-h@_~<3X@QaDHF))6aukX6(}CBB)j8dGF5BibpqB= ztu8IJBSAzYu*MZ(6!kd=%w@+SH0O%tEX!y493)9txY*aMJSkGWPM{jFrKZHvpqywc z*cKzyJY}gKh_CHe=cGtQ)$}ql>XR7AKx7gMKErq604myHHBXLv(c=}1PBy01rsPR} zttJ9e5v-$~N)qzPme=xMT8dQ`$(D^=l!eZlvMBE*(n4;6sbL#LtB@9=J19t{NBLG) zJFfDys)1-kl}yh$`ZozmP@@BsnqWh}M07K-J_xuSp8|5%O0YD5x})`ox!r*7yqn+} zozPCz3fY|pSI0b%UP1ZeHNLu}k@t~VZyt{~6);U@Ku!yT+Tt&24#uQB!;D5CkY?lS z1aR(2S=;(Tz~^Veks>pSLR4AVPJZZrkk~Osh7$}tK!Ztg8gU*NRW%v{Ln8zLkv%Cm literal 0 HcmV?d00001 diff --git a/nes15-1.0.0/gfx/title.nam b/nes15-1.0.0/gfx/title.nam new file mode 100644 index 0000000000000000000000000000000000000000..a68fe9c53a025e15cdfc428f783c645a57f9943c GIT binary patch literal 1024 zcmbu7!ES;;5QecTTs-I-%nM+kiHS$B(zFL?71XP?FQE4Q6L)5re_6CAC;5SyZoU;d)7mE|wv z@sMS?W>Ud^zQ64>S8(6|0r&jxx$l3^eSc*C`1AQ?hU1<;pWo-cKQg=zN313laCd%f zkR2R{KRE9I4oAf#72)ipB63frRXBUAi16)slI6zR{R8;+;OwL#@x?aSkDDJvkMGlY zGEX{vEze$)G^H|cK8gdawndefdBtsbzueWIZ}h(XDrt4t(_*odDa@aXAj`f@OxHV! R*}5_J&1QyN>%Du>#tlj>c}V~O literal 0 HcmV?d00001 diff --git a/nes15-1.0.0/nes-lib/apu.inc b/nes15-1.0.0/nes-lib/apu.inc new file mode 100644 index 0000000..3408e73 --- /dev/null +++ b/nes15-1.0.0/nes-lib/apu.inc @@ -0,0 +1,37 @@ +; +; File: apu.inc +; Namespace: apu_ / APU_ +; Code Segment: APULIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; General purpose APU library +; + +.ifndef APU_INC +APU_INC = 1 + +; APU I/O locations + +SQ1_VOL = $4000 +SQ1_SWEEP = $4001 +SQ1_LO = $4002 +SQ1_HI = $4003 +SQ2_VOL = $4004 +SQ2_SWEEP = $4005 +SQ2_LO = $4006 +SQ2_HI = $4007 +TRI_LINEAR = $4008 +TRI_LO = $400A +TRI_HI = $400B +NOISE_VOL = $400C +NOISE_LO = $400E +NOISE_HI = $400F +DMC_FREQ = $4010 +DMC_RAW = $4011 +DMC_START = $4012 +DMC_LEN = $4013 +SND_CHN = $4015 + +.endif + diff --git a/nes15-1.0.0/nes-lib/bcd.inc b/nes15-1.0.0/nes-lib/bcd.inc new file mode 100644 index 0000000..85df8d9 --- /dev/null +++ b/nes15-1.0.0/nes-lib/bcd.inc @@ -0,0 +1,109 @@ +; +; File: bcd.inc +; Namespace: bcd_ / BCD_ +; Code Segment: BCDLIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Binary-coded decimal library +; + +.ifndef BCD_INC +BCD_INC = 1 + +; Output binary-coded decimal number and temporary storage + +.global bcd_num + +; Output binary value and temporary storage + +.global bcd_bin + + + +; +; Converts an 8-bit binary value to BCD format. +; +; In: +; a = The 8-bit binary value to convert +; Out: +; a = The 8-bit BCD result +; +; Preserved: x +; Destroyed: a, y, bcd_num +; +.global bcd8_from_bin + +; +; Converts an 8-bit BCD number to binary format. +; +; In: +; a = The 8-bit BCD number to convert +; Out: +; a = The 8-bit binary result +; +; Preserved: x +; Destroyed: a, y, bcd_bin +; +.global bcd8_to_bin + +; +; Sets up a VRUB update to draw an 8-bit BCD number to the screen. Note that +; ASCII digit values are used and leading zeros are replaced with whitespace. +; +; In: +; a = The low byte of the address to draw to +; y = The high byte of the address to draw to +; bcd_num = The 8-bit BCD number to draw +; +; Preserved: y, bcd_num +; Destroyed: a, x +; +.global bcd8_to_vrub + +; +; Converts a 16-bit binary value to BCD format. +; +; In: +; a = The low byte of the 16-bit binary value to convert +; y = The high byte of the 16-bit binary value to convert +; Out: +; a, bcd_num = The low byte of the 16-bit BCD result +; y, bcd_num + 1 = The high byte of the 16-bit BCD result +; +; Preserved: x +; Destroyed: a, y, bcd_bin/+1 +; +.global bcd16_from_bin + +; +; Converts a 16-bit BCD number to binary format. +; +; In: +; a = The low byte of the 16-bit BCD number to convert +; y = The high byte of the 16-bit BCD number to convert +; Out: +; a, bcd_bin = The low byte of the 16-bit binary result +; y, bcd_bin + 1 = The high byte of the 16-bit binary result +; +; Preserved: x +; Destroyed: a, y, bcd_num/+1 +; +.global bcd16_to_bin + +; +; Sets up a VRUB update to draw a 16-bit BCD number to the screen. Note that +; ASCII digit values are used and leading zeros are replaced with whitespace. +; +; In: +; a = The low byte of the address to draw to +; y = The high byte of the address to draw to +; bcd_num/+1 = The 16-bit BCD number to draw +; +; Preserved: bcd_num/+1 +; Destroyed: a, x, y +; +.global bcd16_to_vrub + +.endif + diff --git a/nes15-1.0.0/nes-lib/bcd16.s b/nes15-1.0.0/nes-lib/bcd16.s new file mode 100644 index 0000000..5832a79 --- /dev/null +++ b/nes15-1.0.0/nes-lib/bcd16.s @@ -0,0 +1,35 @@ +; +; File: bcd16.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Common 16-bit binary-coded decimal subroutines and data +; + +.include "bcd.inc" + + + +.segment "BSS" + +bcd_num: .res 2 +bcd_bin: .res 2 + + + +.segment "BCDLIB" + +.export bcd_table_lo +bcd_table_lo: + .byte <1, <2, <4, <8 + .byte <10, <20, <40, <80 + .byte <100, <200, <400, <800 + .byte <1000, <2000, <4000, <8000 + +.export bcd_table_hi +bcd_table_hi: + .byte >1, >2, >4, >8 + .byte >10, >20, >40, >80 + .byte >100, >200, >400, >800 + .byte >1000, >2000, >4000, >8000 + diff --git a/nes15-1.0.0/nes-lib/bcd16_from_bin.s b/nes15-1.0.0/nes-lib/bcd16_from_bin.s new file mode 100644 index 0000000..333fbfe --- /dev/null +++ b/nes15-1.0.0/nes-lib/bcd16_from_bin.s @@ -0,0 +1,57 @@ +; +; File: bcd16_from_bin.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; 'bcd16_from_bin' subroutine +; +; The technique used was adapted from source code by 'Damian Yerrick' found at: +; http://wiki.nesdev.com/w/index.php/16-bit_BCD +; + +.include "bcd.inc" + + + +.import bcd_table_lo +.import bcd_table_hi + + + +.segment "ZEROPAGE" + +temp: .res 1 + + + +.segment "BCDLIB" + +.proc bcd16_from_bin + + sta bcd_bin + sty bcd_bin + 1 + ldy #16 + +loop: + lda bcd_bin + sec + sbc bcd_table_lo - 1, y + sta temp + lda bcd_bin + 1 + sbc bcd_table_hi - 1, y + bcc lower + sta bcd_bin + 1 + lda temp + sta bcd_bin + +lower: + rol bcd_num + rol bcd_num + 1 + dey + bne loop + lda bcd_num + ldy bcd_num + 1 + rts + +.endproc + diff --git a/nes15-1.0.0/nes-lib/bcd16_to_vrub.s b/nes15-1.0.0/nes-lib/bcd16_to_vrub.s new file mode 100644 index 0000000..204976e --- /dev/null +++ b/nes15-1.0.0/nes-lib/bcd16_to_vrub.s @@ -0,0 +1,80 @@ +; +; File: bcd16_to_vrub.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; 'bcd16_to_vrub' subroutine +; + +.include "bcd.inc" + +.include "vrub.inc" + + + +.segment "BCDLIB" + +.proc bcd16_to_vrub + + ; Setup the VRUB update to draw number. + + ldx vrub_end + sta vrub_buff + VRUB_DSTLO, x + tya + sta vrub_buff + VRUB_DSTHI, x + lda #$80 + sta vrub_buff + VRUB_CTRL, x + lda #4 + sta vrub_buff + VRUB_LEN, x + inx + inx + inx + inx + + ; Write the digits to be drawn. + + ldy #1 + +digit_loop: + lda bcd_num, y + and #$F0 + lsr + lsr + lsr + lsr + ora #'0' + sta vrub_buff, x + inx + lda bcd_num, y + and #$0F + ora #'0' + sta vrub_buff, x + inx + dey + bpl digit_loop + + ; Finish the VRUB update. + + lda #$00 + sta vrub_buff, x + stx vrub_end + + ; Remove any leading zeros from the number to be drawn. + + ldy #3 + +zero_loop: + lda vrub_buff - 4, x + cmp #'0' + bne done + lda #' ' + sta vrub_buff - 4, x + inx + dey + bne zero_loop + +done: + rts + +.endproc + diff --git a/nes15-1.0.0/nes-lib/joy.inc b/nes15-1.0.0/nes-lib/joy.inc new file mode 100644 index 0000000..6f74855 --- /dev/null +++ b/nes15-1.0.0/nes-lib/joy.inc @@ -0,0 +1,116 @@ +; +; File: joy.inc +; Namespace: joy_ / JOY_ +; Code Segment: JOYLIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Joypad reading and handling library +; + +.ifndef JOY_INC +JOY_INC = 1 + +; Joypad I/O locations + +JOY1 = $4016 +JOY2 = $4017 + +; Number of frames before the joypad button repeat starts + +.globalzp JOY_REP_DELAY + +; Interval of frames between joypad button repeats + +.globalzp JOY_REP_SPEED + + + +; State of the last joypad read + +.global joy_state + +; State of which buttons are being held down + +.global joy_held + +; State of which buttons where just pressed + +.global joy_pressed + +; State of which buttons where just released + +.global joy_released + +; State fed back into 'joy_pressed' on button repeats + +.global joy_repeat + +; Timer used for joypad button repeat + +.global joy_timer + + + +; +; Resets the held, pressed, and released states for JOY1. +; +; Out: +; a = 0 +; +; Preserved: x, y +; Destroyed: a +; +.macro joy_init1 + + lda #$00 + sta joy_held + sta joy_pressed + sta joy_released + +.endmacro + +; +; Strobes and reads the state of JOY1. Note that the method used is unreliable +; if the DMC is playing. +; +; Out: +; a, joy_state = The 8-bit state of the joypad read. The button state +; from bit 7 to bit 0 is: +; +; Right, Left, Down, Up, Start, Select, B, A +; +; Preserved: x, y +; +.global joy_read1 + +; +; Reads the state of JOY1 using 'joy_read1' and updates the states of the +; buttons held, pressed, and released. +; +; Out: +; joy_held = The buttons currently being held down +; joy_pressed = The buttons just pressed +; joy_release = The buttons just released +; +; The state of each button is stored in the same order as 'joy_state'. +; +; Preserved: x +; Destroyed: a, y +; +.global joy_update1 + +; +; Updates the button repeat timer and the state of the buttons just pressed for +; JOY1. This should be called once per frame after calling 'joy_update1'. +; +; Out: +; joy_pressed = The buttons just pressed and repeated +; +; Preserved: x, y +; Destroyed: a +; +.global joy_repeat1 + +.endif + diff --git a/nes15-1.0.0/nes-lib/joy_read1.s b/nes15-1.0.0/nes-lib/joy_read1.s new file mode 100644 index 0000000..24b16c6 --- /dev/null +++ b/nes15-1.0.0/nes-lib/joy_read1.s @@ -0,0 +1,40 @@ +; +; File: joy_read1.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; 'joy_read1' subroutine +; + +.include "joy.inc" + + + +.segment "BSS" + +joy_state: .res 1 + + + +.segment "JOYLIB" + +.proc joy_read1 + + lda #$01 + sta JOY1 + lsr + sta JOY1 + ror + sta joy_state + +loop: + lda JOY1 + and #$03 + cmp #$01 + ror joy_state + bcc loop + lda joy_state + rts + +.endproc + diff --git a/nes15-1.0.0/nes-lib/joy_repeat1.s b/nes15-1.0.0/nes-lib/joy_repeat1.s new file mode 100644 index 0000000..e796240 --- /dev/null +++ b/nes15-1.0.0/nes-lib/joy_repeat1.s @@ -0,0 +1,51 @@ +; +; File: joy_update1.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; 'joy_repeat1' subroutine +; +; Adapted from the source code to 'Concentration Room' by 'Damian Yerrick' +; found at: +; http://www.pineight.com/croom/ +; + +.include "joy.inc" + + + +.segment "BSS" + +joy_repeat: .res 1 +joy_timer: .res 1 + + + +.segment "JOYLIB" + +.proc joy_repeat1 + + lda joy_held + beq done + lda joy_pressed + beq cont + sta joy_repeat + lda #JOY_REP_DELAY + sta joy_timer + bne done + +cont: + dec joy_timer + bne done + lda #JOY_REP_SPEED + sta joy_timer + lda joy_repeat + and joy_held + ora joy_pressed + sta joy_pressed + +done: + rts + +.endproc + diff --git a/nes15-1.0.0/nes-lib/joy_update1.s b/nes15-1.0.0/nes-lib/joy_update1.s new file mode 100644 index 0000000..b9b1996 --- /dev/null +++ b/nes15-1.0.0/nes-lib/joy_update1.s @@ -0,0 +1,42 @@ +; +; File: joy_update1.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; 'joy_update1' subroutine +; +; Adapted from the source code by 'blargg' posted in the thread 'Button +; Handling Headaches' at: +; http://nesdev.parodius.com/bbs/ +; + +.include "joy.inc" + + + +.segment "BSS" + +joy_held: .res 1 +joy_pressed: .res 1 +joy_released: .res 1 + + + +.segment "JOYLIB" + +.proc joy_update1 + + jsr joy_read1 + tay + ora joy_held + eor joy_held + sta joy_pressed + tya + eor joy_held + and joy_held + sta joy_released + sty joy_held + rts + +.endproc + diff --git a/nes15-1.0.0/nes-lib/lfsr32.inc b/nes15-1.0.0/nes-lib/lfsr32.inc new file mode 100644 index 0000000..2e84925 --- /dev/null +++ b/nes15-1.0.0/nes-lib/lfsr32.inc @@ -0,0 +1,33 @@ +; +; File: lfsr32.inc +; Namespace: lfsr_ / LFSR_ +; Code Segment: LFSRLIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; 32-bit Galois Linear Feedback Shift Register +; + +.ifndef LFSR32_INC +LFSR32_INC = 1 + +; Used to hold the current state of the LFSR. It is the user's responsibility +; to set the initial state. + +.globalzp lfsr32 + + + +; +; 32-bit Galois LFSR with taps at 32, 31, 29, and 1. +; +; In: +; y = The number of states to shift through +; +; Preserved: x +; Destroyed: a, y +; +.global lfsr32_next + +.endif + diff --git a/nes15-1.0.0/nes-lib/lfsr32.s b/nes15-1.0.0/nes-lib/lfsr32.s new file mode 100644 index 0000000..3110626 --- /dev/null +++ b/nes15-1.0.0/nes-lib/lfsr32.s @@ -0,0 +1,41 @@ +; +; File: lfsr32.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; 'lfsr32_next' subroutine +; + +.include "lfsr32.inc" + + + +.segment "ZEROPAGE" + +lfsr32: .res 4 + + + +.segment "LFSRLIB" + +.proc lfsr32_next + + lsr lfsr32 + 3 + ror lfsr32 + 2 + ror lfsr32 + 1 + ror lfsr32 + bcc zero + lda lfsr32 + 3 ; Taps 32, 31, and 29 + eor #$D0 + sta lfsr32 + 3 + lda lfsr32 + eor #$01 ; Tap 1 + sta lfsr32 + +zero: + dey + bne lfsr32_next + rts + +.endproc + diff --git a/nes15-1.0.0/nes-lib/muse.inc b/nes15-1.0.0/nes-lib/muse.inc new file mode 100644 index 0000000..e70ce27 --- /dev/null +++ b/nes15-1.0.0/nes-lib/muse.inc @@ -0,0 +1,470 @@ +; +; File: muse.inc +; Namespace: muse_ / MUSE_ +; Code Segment: MUSELIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; MUSE - MUsic and Sound effects Engine +; +; Sound data format - +; +; Each sound is composed of one or more streams. Streams are sequences of data +; consisting of notes, rests, key-offs, ties, and opcodes. There are two sets +; of four streams available to the user, each corresponding to one of the four +; hardware sound channels (squares, triangle, and noise). The first set of +; streams is dedicated to sound effects and the second is dedicated to music. +; +; Headers - +; +; Sound data begins with the main list of sound headers. This list must be +; defined by the user at 'muse_sounds_lo/hi' and is expected to contain the +; starting addresses of each header. Each header must use the following format: +; +; 1 - Type of sound +; +; Zero indicates music and values greater than zero indicate a sound +; effect and its priority. If a sound effect is already playing and its +; priority is greater than the priority of the next sound, then the new +; sound will not be played. +; +; Then for each stream to used by the sound - +; +; 1 - Sound stream to be used (be sure to use the correct ones) +; 2 - Address of the stream's data +; +; Finally, the header should be terminated with a value greater than $7F. +; +; Stream data - +; +; A stream's data is divided into two categories, notes/rests/key-offs/ties +; commands and opcodes. Bytes with a value less than MUSE_OPCODE are commands +; and should be provided in the following format: +; +; nnnnnddd +; +; nnnnn = Type +; +; Values less than MUSE_REST are notes. This value is added to +; the current transposition base which can be adjusted with the +; provided opcodes. +; +; For the square and triangle channels, the value of the note +; plus the transposition base is used as an index into a period +; lookup table. This table begins at A0 and ends at E7 where +; middle C (261.625565 Hz) is C3 for the square channels and C4 +; for the triangle channel. For the noise channel, the value of +; the note plus the transposition base is used as the period and +; the tone. The lower four bits are written as the period and the +; fifth bit written as the tone. +; +; MUSE_REST silences the stream until the next note. +; +; MUSE_KEY_OFF disables sustaining and looping in the stream's +; current register envelope until the next note. +; +; MUSE_TIE continues the last note/rest/key-off command. +; +; Note that a stream's first command should not be a tie or a +; key-off. +; +; ddd = Duration +; +; The duration value is used as an index into a table of lengths +; where: +; +; 0 = 1 tick (1/32) +; 1 = 2 ticks (1/16) +; 2 = 3 ticks (3/32) +; 3 = 4 ticks (1/8) +; 4 = 6 ticks (3/16) +; 5 = 8 ticks (1/4) +; 6 = 12 ticks (3/8) +; 7 = 16 ticks (1/2) +; +; To create notes with a length not provided, ties must be used. +; +; Bytes with values greater than or equal to MUSE_OPCODE are opcodes. These +; are processed one after the other until the stream reader reaches either a +; new command or the end of the stream's data. The following opcodes are +; available to the user: +; +; MUSE_SET_TRANS - Set the transposition base +; +; 1 - New transposition base +; +; MUSE_MOVE_TRANS - Move the transposition base +; +; 1 - Value to add to the transposition base +; +; MUSE_LOOP_TRANS - Move the transposition base with a value from a +; lookup table indexed by the current loop count. +; +; 2 - Address of the offset lookup table +; +; MUSE_SET_TEMPO - Set the music's tempo +; +; 1 - New tempo value. +; +; The value needed for the tempo for NTSC systems can be found +; with: +; +; tempo = 128 * BPM / 225 - 1 +; +; And for PAL systems: +; +; tempo = 256 * BPM / 375 - 1 +; +; Where BPM is number of quarter beats per minute. +; Note that the default tempo is $FF. +; +; MUSE_SET_ENV - Set the current register envelope +; +; 1 - New register envelope index +; +; MUSE_SET_SWEEP - Set the current hardware sweep value +; +; 1 - New hardware sweep value +; +; By default the value of the hardware sweeps for the streams +; mapped to the square channels is $08 (disabled). User defined +; values will be used by the streams until they are changed again +; by the user or the stream reaches the MUSE_END opcode. Note +; that when disabling the sweep registers, you should use the +; value $08. Also note that this opcode should never be used with +; the streams mapped to the triangle and noise channels. +; +; MUSE_LOOP - Loop back to stream position +; +; 1 - Number of repetitions +; +; 2 - The address to loop back to +; +; Each stream has an internal loop counter that is initially +; zero. When this opcode is encountered: +; +; If the number of repetitions is zero, loop back +; unconditionally. +; Else, if the loop counter is less than the number of +; repetitions, increment the loop counter and loop back to the +; provided address. +; Else, the opcode is ignored. +; +; Note that nested loops will not work as one might expect since +; there is only one loop counter per stream. +; +; MUSE_END - End of stream data +; +; Register envelopes - +; +; User-defined register envelopes are strings of bytes where all but bits 4 +; and 5 are written directly to the sound channel's first register (SQ1_VOL, +; SQ2_VOL, TRI_LINEAR, NOISE_VOL). The remaining bits indicate what action the +; envelope reader should take after writing the register bits: +; +; 00 = Continue to next byte +; 01 = Save current position as the loop point and continue +; 10 = Loop back to the position saved with '01' or the beginning +; until key-off +; 11 = Sustain current position until key-off +; +; The address of the list of register envelopes must be defined by the user at +; 'muse_envs_lo/hi'. This list must contain the starting addresses of each +; envelope. All register envelopes should be terminated with zero. Note that +; the triangle channel should be turned on with the value $C0 and muted with +; the value $80. +; +; Regional support - +; +; By default MUSE supports NTSC systems. For PAL support, simply compile with +; the PAL symbol defined. 'muse_create_tempo' will then compensate for the +; change in frame rate and the proper period table values will be used. +; + +.ifndef MUSE_INC +MUSE_INC = 1 + +; Possible sound engine states stored in 'muse_state' + +.enum + ; Initial state after calling 'muse_off' + + MUSE_OFF + + ; Initial state after calling 'muse_on' + + MUSE_ON + + ; State set by the user to pause music playback. Note that this should + ; only be used when the state is set to 'MUSE_ON'. + + MUSE_PAUSE + + ; Set by the user to restore music playback. Note that this should + ; only be used when the state is set to 'MUSE_PAUSED'. + + MUSE_RESTORE + +.endenum + +; Channels used by the sound engine's streams + +.enum + + MUSE_SQ1 + MUSE_SQ2 + MUSE_TRI + MUSE_NOISE + +.endenum + +; Available sound engine streams. Streams 'MUS0' to 'MUS3' are mapped to the +; hardware channels 'SQ1' to 'NOISE' and are be to used to play music. Streams +; 'SFX0' to 'SFX3' are mapped to the hardware channels 'SQ1' to 'NOISE' and are +; to be used to play sound effects. + +.enum + + MUSE_MUS0 + MUSE_MUS1 + MUSE_MUS2 + MUSE_MUS3 + MUSE_SFX0 + MUSE_SFX1 + MUSE_SFX2 + MUSE_SFX3 + MUSE_NUM_STREAMS + +.endenum + +; Sound engine commands and opcodes + +.enum + + MUSE_C = $00 + MUSE_CS = $08 + MUSE_DB = MUSE_CS + MUSE_D = $10 + MUSE_DS = $18 + MUSE_EB = MUSE_DS + MUSE_E = $20 + MUSE_F = $28 + MUSE_FS = $30 + MUSE_GB = MUSE_FS + MUSE_G = $38 + MUSE_GS = $40 + MUSE_AB = MUSE_GS + MUSE_A = $48 + MUSE_AS = $50 + MUSE_BB = MUSE_AS + MUSE_B = $58 + MUSE_CH = $60 + MUSE_CSH = $68 + MUSE_DBH = MUSE_CSH + MUSE_DH = $70 + MUSE_DSH = $78 + MUSE_EBH = MUSE_DSH + MUSE_EH = $80 + MUSE_FH = $88 + MUSE_FSH = $90 + MUSE_GBH = MUSE_FSH + MUSE_GH = $98 + MUSE_GSH = $A0 + MUSE_ABH = MUSE_GSH + MUSE_AH = $A8 + MUSE_ASH = $B0 + MUSE_BBH = MUSE_ASH + MUSE_BH = $B8 + MUSE_REST = $C0 + MUSE_KEY_OFF = $C8 + MUSE_TIE = $D0 + MUSE_OPCODE = $D8 + MUSE_SET_TRANS = MUSE_OPCODE + MUSE_MOVE_TRANS + MUSE_LOOP_TRANS + MUSE_SET_TEMPO + MUSE_SET_ENV + MUSE_SET_SWEEP + MUSE_LOOP + MUSE_END + +.endenum + +; Sound engine duration indexes + +.enum + + MUSE_32 + MUSE_16 + MUSE_D16 + MUSE_8 + MUSE_D8 + MUSE_4 + MUSE_D4 + MUSE_2 + +.endenum + + + +; List of the addresses of the user-defined sounds + +.global muse_sounds_lo +.global muse_sounds_hi + +; List of the addresses of the user-defined register envelopes + +.global muse_envs_lo +.global muse_envs_hi + +; Current state of the sound engine + +.global muse_state + +; Bitfield indicating which streams are active. Streams starting from +; 'MUSE_MUS0' up are mapped to bits zero and up. + +.global muse_active + + + +; +; Stops any sound effects currently playing. +; +; Preserved: x, y +; Destroyed: a +; + +.macro muse_stop_sfx + + lda muse_active + and #$0F + sta muse_active + +.endmacro + +; +; Tests if a sound effect is currently being played. +; +; Out: +; Z = Reset if a sound effect is playing, else set +; +; Preserved: x, y +; Destroyed: a +; +.macro muse_sfx_playing + + lda muse_active + and #$F0 + +.endmacro + +; +; Stops any music currently playing. +; +; Preserved: x, y +; Destroyed: a +; + +.macro muse_stop_music + + lda muse_active + and #$F0 + sta muse_active + +.endmacro + +; +; Tests if music is currently being played. +; +; Out: +; Z = Reset if music is playing, else set +; +; Preserved: x, y +; Destroyed: a +; +.macro muse_music_playing + + lda muse_active + and #$0F + +.endmacro + +; +; Toggles between the sound engines music pausing states. Note that this +; should only be used when the sound engine is active. +; +; Preserved: x, y +; Destroyed: a +; +.macro muse_toggle_music + + lda #MUSE_PAUSE + cmp muse_state + bne done + + lda #MUSE_RESTORE + +.local done +done: + sta muse_state + +.endmacro + +; +; Creates a tempo constant for use with sound engine. +; +; In: +; tempo = The name of the symbol to created +; bmp = The number of quarter beats (MUSE_4) per minute +; +.macro muse_create_tempo tempo, bpm + +.ifndef PAL + tempo = 128 * bpm / 225 - 1 +.else + tempo = 256 * bpm / 375 - 1 +.endif + +.endmacro + +; +; Initializes the sound engine for use. Either this or 'muse_off' must be +; called at the start of the program. After calling 'muse_off', this subroutine +; should be called again if sound output is needed. +; +; Preserved: y +; Destroyed: a, x +; +.global muse_on + +; +; Kills all sound engine activity and mutes the sound channels used by the +; sound engine. Either this or 'muse_on' must be called at the start of the +; program. +; +; Preserved: x, y +; Destroyed: a +; +.global muse_off + +; +; Plays the specified sound effect or music. +; +; In: +; a = The index of the sound play +; +; Destroyed: a, x, y +; +.global muse_play + +; +; Updates the sound engine for one frame. Preferably this should be called +; during each NMI, however that is not a requirement. +; +; Destroyed: a, x, y +; +.global muse_update + +.endif + diff --git a/nes15-1.0.0/nes-lib/muse.s b/nes15-1.0.0/nes-lib/muse.s new file mode 100644 index 0000000..cb3f133 --- /dev/null +++ b/nes15-1.0.0/nes-lib/muse.s @@ -0,0 +1,932 @@ +; +; File: muse.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; MUSE sound engine subroutines and data +; + +.include "apu.inc" + +.include "muse.inc" + + + +.segment "ZEROPAGE" + +; Temporary storage used by 'muse_play' + +temp: .res 3 + +; Temporary storage used by 'muse_update'. Note that separate temporary +; storage is used since the user is allowed to call 'muse_update' during the +; NMI. + +update_temp: .res 4 + +; Current channel being updated by 'muse_update' multiplied by four + +curr_chn: .res 1 + + + +.segment "BSS" + +muse_state: .res 1 +muse_active = stream_sweep + 2 + +; Current sound effect's priority rating + +sfx_priority = stream_sweep + 3 + +; Current global music tempo + +curr_tempo = stream_sweep + 6 + +; The current tempo plus one is added to this and stored back in each frame. +; When a carry occurs, each active music stream's timer is updated. + +tempo_sum = stream_sweep + 7 + +; Address of the next byte in the stream's data + +stream_lo: .res MUSE_NUM_STREAMS +stream_hi: .res MUSE_NUM_STREAMS + +; Stream's command timer + +stream_timer: .res MUSE_NUM_STREAMS + +; Stream's loop counter + +stream_loop: .res MUSE_NUM_STREAMS + +; Note and note state: rk-nnnnn +; +; r = Rest +; 0: Note is playing +; 1: Rest command active +; +; k = Key-off +; 0: Note is in key-on state +; 1: Note is in key-off state +; +; nnnnn = Value of the last note read + +stream_note: .res MUSE_NUM_STREAMS + +; Stream's current transposition base + +stream_trans: .res MUSE_NUM_STREAMS + +; Stream's current hardware sweep value. Note that this is only used by the +; streams mapped to the square channels. + +stream_sweep: .res MUSE_NUM_STREAMS + +; Index of the stream's current register envelope + +stream_env: .res MUSE_NUM_STREAMS + +; Stream's current position in its register envelope + +stream_env_pos: .res MUSE_NUM_STREAMS + +; Stream's current loop back point in its register envelope + +stream_env_loop: .res MUSE_NUM_STREAMS + + + +.segment "MUSELIB" + +.proc muse_on + + ldx #MUSE_ON ; Set the sound engine state to active + stx muse_state + dex + stx muse_active ; Reset all active stream flags + lda #$0F ; Enable sound for the four channels used + sta SND_CHN + lda #$30 ; Mute all sound channels used + sta SQ1_VOL + sta SQ2_VOL + sta NOISE_VOL + lda #$80 + sta TRI_LINEAR + rts + +.endproc + + + +.proc muse_off + + lda #MUSE_OFF + sta muse_state ; Set the sound engine state to inactive + sta muse_active ; Set all streams to inactive + sta SND_CHN ; Silence all sound channels + rts + +.endproc + + + +.proc muse_play + +addr = temp +active = temp + 2 + + ; Load the first header byte for the sound to be played. + + tay + lda muse_sounds_lo, y + sta addr + lda muse_sounds_hi, y + sta addr + 1 + ldy #0 + lda (addr), y + beq play_music + + ; If the sound is a sound effect, play if either no other sound effect + ; is playing or the sound effect playing has a priority less than or + ; equal to the priority of the new sound. + + tax + muse_sfx_playing + beq play_sfx + cpx sfx_priority + bcc done + +play_sfx: + stx sfx_priority ; Save the sound effect's priority + lda muse_active ; Disable all SFX streams to prevent updates + and #$0F ; while setting up new SFX + bpl start + +play_music: + lda #$FF ; Reset the global music tempo to its default + sta curr_tempo + sty tempo_sum + lda #MUSE_ON ; Set the sound engine state to active in case + sta muse_state ; music was paused + lda muse_active ; Disable all music channels to prevent + and #$F0 ; updates while setting up the new music + +start: + sta muse_active ; Save the updated stream states + sta active + +loop: + iny + + ; Read the stream's index. If a terminating value was read, then + ; reading is done. + + lda (addr), y + bmi update_active + tax + iny + + ; Read the address of the stream's data. + + lda (addr), y + sta stream_lo, x + iny + lda (addr), y + sta stream_hi, x + lda #0 ; Reset the stream's loop counter + sta stream_loop, x + lda #1 ; Set the stream's timer to one so it is + sta stream_timer, x ; updated on the next 'muse_update' call + lda stream_masks, x ; Set the stream's active flag in temporary + ora active ; memory + sta active + + ; If the stream being initialized is mapped to one of the square + ; channels, then reset its hardware sweep value. + + txa + and #$03 + cmp #MUSE_TRI + bcs loop + lda #$08 + sta stream_sweep, x + bne loop + + ; Copy over the new set of stream active flags from temporary memory + ; since we are ready for 'muse_update' to begin using them. + +update_active: + lda active + sta muse_active + +done: + rts + +.endproc + + + +.proc muse_update + + ; If the sound engine is inactive, then return. + + lda muse_state + beq done + + ; Update 'tempo_sum' with the current tempo plus one. Whenever a carry + ; occurs, music streams will be updated. + + lda tempo_sum + sec + adc curr_tempo + sta tempo_sum + + ; Update each stream starting from sound effects down to music. + + ldx #MUSE_NUM_STREAMS - 1 + +loop: + txa ; Save the channel the stream is mapped to for + and #$03 ; later subroutines + asl + asl + sta curr_chn + + ; Update the stream if it is active. + + lda stream_masks, x + and muse_active + beq volume + jsr update_stream + + ; Write the stream's volume if necessary. + +volume: + jsr write_vol + + ; Update the stream's register envelope if it is still active. + + lda stream_masks, x + and muse_active + beq cont + jsr update_env + +cont: + dex + bpl loop + + ; If music was just restored, reset the sound engine's state to + ; 'MUSE_ON'. + + lda #MUSE_RESTORE + cmp muse_state + bne done + lda #MUSE_ON + sta muse_state + +done: + rts + +.endproc + + + +; +; Reads a stream's data and performs any updates. This should only be called +; for active streams. +; +; In: +; x = Index of stream to update +; curr_chn = Index of the stream's channel multiplied by four +; +; Preserved: x +; Destroyed: a, y, update_temp/+1/+2/+3 +; +.proc update_stream + +addr = update_temp +addr2 = update_temp + 2 + + cpx #MUSE_SFX0 ; If updating a sound effect stream, skip to + bcs update_timer ; the timer update + lda muse_state ; Else, if music is paused, then return + cmp #MUSE_PAUSE + beq done + cmp #MUSE_RESTORE ; Else, if restoring music, write the current + bne test_tempo ; period of the stream and continue + jsr restore_period + +test_tempo: + lda curr_tempo ; If 'tempo_sum' did not carry this frame, then + cmp tempo_sum ; return + bcc done + +update_timer: + dec stream_timer, x ; If the timer is not finished counting down, + bne done ; then return + + lda stream_lo, x ; Set the address to read the stream's data + sta addr ; from + lda stream_hi, x + sta addr + 1 + + ; Load the next byte from the stream's data and advance forward. + +loop: + ldy #0 + lda (addr), y + inc addr + bne test_byte + inc addr + 1 + +test_byte: + cmp #MUSE_OPCODE + bcc test_cmd + + ; If the byte read is an opcode, perform the opcode. + + sbc #MUSE_OPCODE + jsr perform_opcode + lda stream_masks, x ; Ensure the stream is still active, if not + and muse_active ; then return + beq done + + ; Advance the current position in the stream's data past the opcode's + ; data and continue to process the stream's data. + + tya + clc + adc addr + sta addr + bcc loop + inc addr + 1 + bne loop + + ; Else, the byte read is a command. Regardless of the command read, + ; set the stream's timer to the length provided by the command. + +test_cmd: + pha + and #$07 + tay + lda length_table, y + sta stream_timer, x + + ; Save the current stream position back into the stream. + + lda addr + sta stream_lo, x + lda addr + 1 + sta stream_hi, x + pla + cmp #MUSE_TIE ; If a tie command was read, then return + bcs done + cmp #MUSE_KEY_OFF ; If a key-off command was read, then continue + bcs key_off_cmd + cmp #MUSE_REST ; If a rest command was read, then continue + bcs rest_cmd + + ; Else, this is note command and we must save the note read, initialize + ; the stream's register envelope, and write the new period to the APU. + + lsr + lsr + lsr + sta stream_note, x + lda #0 + sta stream_env_pos, x + sta stream_env_loop, x + jmp write_period + +key_off_cmd: + lda #$40 ; On key-offs, set the stream's key-off flag + bne finish_rest + +done: + rts + +rest_cmd: + lda #$80 ; On rests, set the stream's rest flag + +finish_rest: + ora stream_note, x + sta stream_note, x + rts + +; +; Performs an opcode read from the specified stream's data. +; +; In: +; a = Value of the opcode to perform +; x = Index of the stream being updated +; curr_chn = Index of the stream's channel multiplied by four +; addr = Address of the current position in the stream's data +; Out: +; y = Number of bytes used as the opcode's parameters +; +; Preserved: x +; Destroyed: a, update_temp+2/+3 +; +.proc perform_opcode + + asl + tay + lda opcode_table + 1, y + pha + lda opcode_table, y + pha + ldy #0 + rts + +opcode_table: + .addr opcode_set_trans - 1 + .addr opcode_move_trans - 1 + .addr opcode_loop_trans - 1 + .addr opcode_set_tempo - 1 + .addr opcode_set_env - 1 + .addr opcode_set_sweep - 1 + .addr opcode_loop - 1 + .addr opcode_end - 1 + +.endproc + +; +; Opcode subroutines called by 'perform_opcode'. Note that y is initially set +; to zero when these are called and it is their responsibility to set y to the +; number of bytes to advance in the current stream's data. +; +.proc opcode_set_trans + + ; Save the new transposition base and return. + + lda (addr), y + sta stream_trans, x + iny + rts + +.endproc + +.proc opcode_move_trans + + ; Add the next value read to the transposition base and return. + + lda (addr), y + clc + adc stream_trans, x + sta stream_trans, x + iny + rts + +.endproc + +.proc opcode_loop_trans + + ; Load the transposition table's address and read the byte offset by + ; the stream's current loop count. + + lda (addr), y + sta addr2 + iny + lda (addr), y + sta addr2 + 1 + ldy stream_loop, x + + ; Add the value read to the stream's current transposition base. + + lda (addr2), y + clc + adc stream_trans, x + sta stream_trans, x + ldy #2 + rts + +.endproc + +.proc opcode_set_tempo + + ; Save the new tempo and reset 'tempo_sum'. + + lda (addr), y + sta curr_tempo + sty tempo_sum + iny + rts + +.endproc + +.proc opcode_set_env + + ; Save the index of the register envelope to be used and reinitialize + ; the stream. + + lda (addr), y + sta stream_env, x + tya + sta stream_env_pos, x + sta stream_env_loop, x + iny + rts + +.endproc + +.proc opcode_set_sweep + + ; Save the new value of the hardware sweep register to be used and + ; return. + + lda (addr), y + sta stream_sweep, x + iny + rts + +.endproc + +.proc opcode_loop + + lda (addr), y ; Read the number of repetitions + beq save_addr ; If zero, then loop back indefinitely + cmp stream_loop, x ; Else, if the stream's loop counter is equal + beq loop_done ; to the number repetitions, the loop is done + inc stream_loop, x ; Else, increment the stream's loop counter + +save_addr: + iny ; Save the address read as the new address to + lda (addr), y ; read from and return + pha + iny + lda (addr), y + sta addr + 1 + pla + sta addr + ldy #0 + rts + +loop_done: + tya ; Else, reset the stream's loop counter and + sta stream_loop, x ; return + ldy #3 + rts + +.endproc + +.proc opcode_end + + lda muse_active ; Reset the stream's active flag + eor stream_masks, x + sta muse_active + + ; If ending a sound effect stream while it is overridding an active + ; music stream, then restore the music stream's period. + + cpx #MUSE_SFX0 + bcc done + lda stream_masks - 4, x + and muse_active + beq done + txa + and #$03 + tax + jsr restore_period + txa + ora #$04 + tax + +done: + rts + +.endproc + +.endproc + + + +; +; Updates a stream's position in its current register envelope. This should +; only be called for active streams. +; +; In: +; x = Index of stream to update +; curr_chn = Index of the stream's channel multiplied by four +; +; Preserved: x +; Destroyed: a, y, update_temp/+1 +; +.proc update_env + +addr = update_temp + + ; Skip updating the register envelopes of either stream's in the middle + ; of rest command or paused music streams. + + lda stream_note, x + bmi done + cpx #MUSE_SFX0 + bcs update + lda muse_state + cmp #MUSE_PAUSE + beq done + +update: + + ; Load the next byte to be read from the register envelope data. + + ldy stream_env, x + lda muse_envs_lo, y + sta addr + lda muse_envs_hi, y + sta addr + 1 + ldy stream_env_pos, x + + lda (addr), y ; If the next byte is zero, then the envelope + beq done ; is done + and #$30 ; Else, handle the control bits + beq env_cont + cmp #$10 + beq env_loop_point + cmp #$20 + beq env_loop + + ; Sustain current position until key-off command. + + lda stream_note, x + asl + bmi env_cont + rts + + ; Loop back to saved loop point until key-off. + +env_loop: + lda stream_note, x + asl + bmi env_cont + lda stream_env_loop, x + sta stream_env_pos, x + rts + + ; Save current position as loop point and continue. + +env_loop_point: + tya + sta stream_env_loop, x + +env_cont: + inc stream_env_pos, x + +done: + rts + +.endproc + + + +; +; Makes the necessary APU period and sweep writes for the specified stream. +; +; In: +; x = Stream to write from +; curr_chn = Index of the stream's channel multiplied by four +; +; Preserved: x +; Destroyed: a, y, update_temp+2/+3 +; +.proc write_period + +period = update_temp + 2 + + ; Skip writing to the APU for a music stream that is currently being + ; overridden by a sound effect stream. + + cpx #MUSE_SFX0 + bcs cont + lda stream_masks + 4, x + and muse_active + bne done + +cont: + + ; Add the current note to the transposition base to determine the + ; actual note to be played. + + lda stream_note, x + and #$1F + clc + adc stream_trans, x + tay + lda curr_chn ; If writing to the noise channel, continue + cmp #MUSE_NOISE * 4 + beq write_noise + + ; Lookup the period to be written from the period lookup table. + + lda period_table_lo, y + sta period + lda period_table_hi, y + sta period + 1 + ldy curr_chn ; If writing to the triangle channel, continue + cpy #MUSE_TRI * 4 + beq write_tri + lda stream_sweep, x ; Else, write the sweep and period for the + sta SQ1_SWEEP, y ; square channel and return + lda period + sta SQ1_LO, y + lda period + 1 + sta SQ1_HI, y + rts + +write_tri: + lda period ; Else, set the triangle channel's period and + sta TRI_LO ; return + lda period + 1 + sta TRI_HI + rts + + ; Else, set the noise channel's period and tone and then return. + +write_noise: + tya + and #$1F + cmp #$10 + bcc write_noise_lo + and #$0F + ora #$80 + +write_noise_lo: + sta NOISE_LO + lda #$00 + sta NOISE_HI + +done: + rts + +.endproc + + + +; +; Restores the period of the specified interrupted stream. +; +; In: +; x = Stream to restore +; curr_chn = Index of the stream's channel multiplied by four +; +; Preserved: x +; Destroyed: a, y, update_temp+2/+3 +; +.proc restore_period + + ; Mute any interrupted square channel streams using the hardware + ; sweep. Silence is better than hearing an incorrect period. + + ldy curr_chn + cpy #MUSE_TRI * 4 + bcs write + lda stream_sweep, x + bpl write + lda stream_note, x + ora #$80 + sta stream_note, x + rts + +write: + jmp write_period ; Else, rewrite the stream's current period + +.endproc + + + +; +; Makes the necessary APU volume/duty writes for the specified stream. +; +; In: +; x = Stream to write from +; curr_chn = Index of the stream's channel multiplied by four +; +; Preserved: x +; Destroyed: a, y, update_temp/+1 +; +.proc write_vol + +addr = update_temp + + lda stream_masks, x ; If the stream is active, continue + and muse_active + bne active + cpx #MUSE_SFX0 ; Else, do not make any writes for inactive + bcs done ; sound effect streams + lda stream_masks + 4, x ; Else, silence the channel if writing for an + and muse_active ; inactive non-overridden music stream + bne done + + ; Silence the stream and return. + +silence: + ldy curr_chn + cpy #MUSE_TRI * 4 + beq silence_tri + lda #$30 + bne update_apu + +silence_tri: + lda #$80 + bne update_apu + +active: + cpx #MUSE_SFX0 ; If active sound effect, continue to write + bcs write + lda stream_masks + 4, x ; Else, skip writing if overridden music + and muse_active + bne done + lda muse_state ; Else, silence if music is paused + cmp #MUSE_PAUSE + beq silence + + ; If the stream is note in the middle of a rest command, then write the + ; stream's current duty/volume from its register envelope. + +write: + lda stream_note, x + bmi silence + ldy stream_env, x + lda muse_envs_lo, y + sta addr + lda muse_envs_hi, y + sta addr + 1 + ldy stream_env_pos, x + lda (addr), y ; If the stream is at the end of its register + beq silence ; envelope, then silence and return. + and #$CF + ldy curr_chn + cpy #MUSE_TRI * 4 + beq update_apu + ora #$30 + +update_apu: + sta SQ1_VOL, y + +done: + rts + +.endproc + + +; Period tables generated with the Python program 'mktables.py' found at: +; http://wiki.nesdev.com/w/index.php/APU_period_table + +.ifndef PAL + +; NTSC period lookup table + +period_table_lo: + .byte $f1, $7f, $13, $ad, $4d, $f3, $9d, $4c, $00, $b8, $74, $34 + .byte $f8, $bf, $89, $56, $26, $f9, $ce, $a6, $80, $5c, $3a, $1a + .byte $fb, $df, $c4, $ab, $93, $7c, $67, $52, $3f, $2d, $1c, $0c + .byte $fd, $ef, $e1, $d5, $c9, $bd, $b3, $a9, $9f, $96, $8e, $86 + .byte $7e, $77, $70, $6a, $64, $5e, $59, $54, $4f, $4b, $46, $42 + .byte $3f, $3b, $38, $34, $31, $2f, $2c, $29, $27, $25, $23, $21 + .byte $1f, $1d, $1b, $1a, $18, $17, $15, $14 + +period_table_hi: + .byte $07, $07, $07, $06, $06, $05, $05, $05, $05, $04, $04, $04 + .byte $03, $03, $03, $03, $03, $02, $02, $02, $02, $02, $02, $02 + .byte $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00 + +.else + +; PAL period lookup table + +period_table_lo: + .byte $60, $f6, $92, $34, $db, $86, $37, $ec, $a5, $62, $23, $e8 + .byte $b0, $7b, $49, $19, $ed, $c3, $9b, $75, $52, $31, $11, $f3 + .byte $d7, $bd, $a4, $8c, $76, $61, $4d, $3a, $29, $18, $08, $f9 + .byte $eb, $de, $d1, $c6, $ba, $b0, $a6, $9d, $94, $8b, $84, $7c + .byte $75, $6e, $68, $62, $5d, $57, $52, $4e, $49, $45, $41, $3e + .byte $3a, $37, $34, $31, $2e, $2b, $29, $26, $24, $22, $20, $1e + .byte $1d, $1b, $19, $18, $16, $15, $14, $13 + +period_table_hi: + .byte $07, $06, $06, $06, $05, $05, $05, $04, $04, $04, $04, $03 + .byte $03, $03, $03, $03, $02, $02, $02, $02, $02, $02, $02, $01 + .byte $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + .byte $00, $00, $00, $00, $00, $00, $00, $00 + +.endif + +; Command length lookup table + +length_table: + .byte 1, 2, 3, 4, 6, 8, 12, 16 + +; Stream bitmask lookup table + +stream_masks: + .byte $01, $02, $04, $08, $10, $20, $40, $80 + diff --git a/nes15-1.0.0/nes-lib/oam.inc b/nes15-1.0.0/nes-lib/oam.inc new file mode 100644 index 0000000..2e70edd --- /dev/null +++ b/nes15-1.0.0/nes-lib/oam.inc @@ -0,0 +1,66 @@ +; +; File: oam.inc +; Namespace: oam_ / OAM_ +; Code Segment: OAMLIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; General purpose OAM library +; + +.ifndef OAM_INC +OAM_INC = 1 + +; OAM I/O location + +OAM_DMA = $4014 + +; OAM data offsets + +.enum + + OAM_Y + OAM_TILE + OAM_ATT + OAM_X + OAM_SIZE + +.endenum + + + +; RAM location of the OAM buffer +; +; Bytes: 256 + +.global oam_buff + + + +; +; Copies the contents of the OAM buffer to OAM using OAM_DMA. +; +; Preserved: x, y +; Destroyed: a +; +.macro oam_copy + + lda #0 + sta OAMADDR + lda #>oam_buff + sta OAM_DMA + +.endmacro + + + +; +; Sets all sprites in the OAM buffer to a non-visible state. +; +; Preserved: y +; Destroyed: a, x +; +.global oam_clear + +.endif + diff --git a/nes15-1.0.0/nes-lib/oam_clear.s b/nes15-1.0.0/nes-lib/oam_clear.s new file mode 100644 index 0000000..073afeb --- /dev/null +++ b/nes15-1.0.0/nes-lib/oam_clear.s @@ -0,0 +1,30 @@ +; +; File: oam_clear.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; 'oam_clear' subroutine +; + +.include "oam.inc" + + + +.segment "OAMLIB" + +.proc oam_clear + + ldx #0 + lda #248 + +loop: + sta oam_buff + OAM_Y, x + inx + inx + inx + inx + bne loop + rts + +.endproc + diff --git a/nes15-1.0.0/nes-lib/pkb.inc b/nes15-1.0.0/nes-lib/pkb.inc new file mode 100644 index 0000000..2761e04 --- /dev/null +++ b/nes15-1.0.0/nes-lib/pkb.inc @@ -0,0 +1,46 @@ +; +; File: pkb.inc +; Namespace: pkb_ / PKB_ +; Code Segment: PKBLIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; PackBits decoding library +; +; A PackBits data stream consists of packets with a one-byte header followed by +; data. The header is a signed byte; the data is treated as an unsigned char. +; +; Header byte Data following the header byte +; +; 0 to 127 (1 + n) literal bytes of data +; -1 to -127 One byte of data, repeated (1 - n) times in the +; decompressed output +; -128 Marks the end of the encoded data +; +; Note that the PackBits encoding used here differs somewhat from the original. +; The header byte -128 is used to mark the end of the encoded data instead of +; indicating a no-op or a run. +; + +.ifndef PKB_INC +PKB_INC = 1 + +; Address of the PackBits encoded data to be decoded + +.globalzp pkb_src + + + +; +; Decodes and writes PackBits encoded data to PPUDATA. Note that the user is +; responsible for setting PPUADDR. +; +; In: +; pkb_src/+1 = Address of the PackBits data to decode +; +; Destroyed: a, x, y, pkb_src/+1 +; +.global pkb_to_vram + +.endif + diff --git a/nes15-1.0.0/nes-lib/pkb.s b/nes15-1.0.0/nes-lib/pkb.s new file mode 100644 index 0000000..d3109f4 --- /dev/null +++ b/nes15-1.0.0/nes-lib/pkb.s @@ -0,0 +1,16 @@ +; +; File: pkb.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Common Packbits decoding subroutines and data +; + +.include "pkb.inc" + + + +.segment "ZEROPAGE" + +pkb_src: .res 2 + diff --git a/nes15-1.0.0/nes-lib/pkb_to_vram.s b/nes15-1.0.0/nes-lib/pkb_to_vram.s new file mode 100644 index 0000000..e4c18ff --- /dev/null +++ b/nes15-1.0.0/nes-lib/pkb_to_vram.s @@ -0,0 +1,72 @@ +; +; File: pkb_to_vram.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; 'pkb_to_vram' subroutine +; + +.include "ppu.inc" + +.include "pkb.inc" + + + +.segment "PKBLIB" + +.proc pkb_to_vram + + ldy #0 + lda (pkb_src), y + bpl literal + cmp #-128 + beq done + + ; Write out repeated data + + eor #$FF + clc + adc #2 + tax + iny + lda (pkb_src), y + iny + +run_loop: + sta PPUDATA + dex + bne run_loop + beq cont + + ; Write out literal data + +literal: + clc + adc #1 + tax + iny + +literal_loop: + lda (pkb_src), y + sta PPUDATA + iny + dex + bne literal_loop + + ; Advance the source address to the next header byte + +cont: + tya + clc + adc pkb_src + sta pkb_src + lda #0 + adc pkb_src + 1 + sta pkb_src + 1 + bne pkb_to_vram + +done: + rts + +.endproc + diff --git a/nes15-1.0.0/nes-lib/ppu.inc b/nes15-1.0.0/nes-lib/ppu.inc new file mode 100644 index 0000000..d5eec11 --- /dev/null +++ b/nes15-1.0.0/nes-lib/ppu.inc @@ -0,0 +1,66 @@ +; +; File: ppu.inc +; Namespace: ppu_ / PPU_ +; Code Segment: PPULIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; General purpose PPU library +; + +.ifndef PPU_INC +PPU_INC = 1 + +; PPU I/O locations + +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +OAMADDR = $2003 +OAMDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 + + + +; +; Polls PPUSTATUS until the veritical blanking flag is set. +; +; Preserved: a, x, y +; +.macro ppu_poll_vblank + +.local loop +loop: + bit PPUSTATUS + bpl loop + +.endmacro + +.endif + +; +; Fills all name and attribute tables with zero. +; +; Destroyed: a, x, y +; +.macro ppu_clear_nts + + ldx #$10 + lda #$20 + sta PPUADDR + lda #0 + tay + sta PPUADDR + +.local loop +loop: + sta PPUDATA + iny + bne loop + dex + bne loop + +.endmacro + diff --git a/nes15-1.0.0/nes-lib/vrub.inc b/nes15-1.0.0/nes-lib/vrub.inc new file mode 100644 index 0000000..2084c01 --- /dev/null +++ b/nes15-1.0.0/nes-lib/vrub.inc @@ -0,0 +1,152 @@ +; +; File: vrub.inc +; Namespace: vrub_ / VRUB_ +; Code Segment: VRUBLIB +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; The VRAM update buffer +; + +.ifndef VRUB_INC +VRUB_INC = 1 + +.enum + + ; Control byte: t---i--r + ; + ; t = Terminate + ; 0: No transfers left + ; 1: Continue transferring + ; + ; i = VRAM increment + ; 0: Increment by 1 + ; 1: Increment by 32 + ; + ; r = Repeat byte + ; 0: No repeating + ; 1: Repeat first byte read from source + + VRUB_CTRL + + ; VRAM destination address + + VRUB_DSTHI + VRUB_DSTLO + + ; Length of the transfer + + VRUB_LEN + + ; Begining of the data to transfer + + VRUB_DATA + +.endenum + + + +; ROM/RAM to VRAM updates storage. Note that the first byte must be set to zero +; before NMIs are enabled. +; +; Bytes: May be as little as 'VRUB_DATA + 1' to a full page if needed + +.global vrub_buff + +; Current position of the next entry to write to. If set to zero, 'vrub_update' +; does nothing. This should initially be set to zero before NMIs are enabled. +; After an update is added to the 'vrub_buff', 'vrub_end' should be set to the +; first byte of the next update and a null terminator (zero) should written. + +.globalzp vrub_end + + + +; +; VRUB NMI macro. Note that afterwards PPUCTRL and PPUSCROLL should be updated +; to reset the PPU's internal address. +; +; In: +; ppuctrl = The bits to write to PPUCTRL when setting the VRAM increment +; +; Preserved: vrub_buff +; Destroyed: a, x, y, vrub_end +; +.macro vrub_update ppuctrl + + ldy #0 + sty vrub_end + +.local buff_loop +buff_loop: + lda vrub_buff + VRUB_CTRL, y + bpl done + lsr + ora ppuctrl + sta PPUCTRL + lda vrub_buff + VRUB_DSTHI, y + sta PPUADDR + lda vrub_buff + VRUB_DSTLO, y + sta PPUADDR + ldx vrub_buff + VRUB_LEN, y + iny + iny + iny + iny + bcs repeat + +.local literal_loop +literal_loop: + lda vrub_buff, y + sta PPUDATA + iny + dex + bne literal_loop + beq buff_loop + +.local repeat +repeat: + lda vrub_buff, y + iny + +.local repeat_loop +repeat_loop: + sta PPUDATA + dex + bne repeat_loop + beq buff_loop + +.local done +done: + +.endmacro + +; +; Creates a VRUB update to draw a string to VRAM. +; +; In: +; addr = The address to draw the string to +; string = The string to be drawn +; +.macro vrub_str addr, string + + .byte $80, >addr, -T-%z2D>h>UP!bKH-@q#ixXwckQ>2-AHT8 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 literal 0 HcmV?d00001 diff --git a/nes15-1.0.0/nes15-PAL.nes b/nes15-1.0.0/nes15-PAL.nes new file mode 100644 index 0000000000000000000000000000000000000000..9d7e0da1b535ff1659f60a86a035d84fb01a5407 GIT binary patch literal 28688 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 $*.d + +.PHONY: debug +debug: CFLAGS += -g +debug: $(PROG) + +.PHONY: clean +clean: + rm $(OBJS) $(OBJS:.o=.d) $(PROG) + diff --git a/nes15-1.0.0/pcx2chr/pcx2chr.c b/nes15-1.0.0/pcx2chr/pcx2chr.c new file mode 100644 index 0000000..9dc3a97 --- /dev/null +++ b/nes15-1.0.0/pcx2chr/pcx2chr.c @@ -0,0 +1,171 @@ +/* + * File: pcx2chr.c + * Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) + * + * PCX file to NES CHR file converter + */ + +#include +#include +#include +#include +#include "img8.h" +#include "neschr.h" + + + +/* + * Processes the argument 'arg' passed to the program, setting options based on + * what was read. + * + * Returns: If a valid argument was passed and processed, then zero is + * returned. Otherwise, a non-zero value is returned and an error message is + * printed to 'stderr'. + * + * Asserts: + * arg != NULL + */ +static int process_arg(const char *arg); + +/* + * Converts the PCX file stored in 'src_file' to the NES CHR file stored in + * 'dst_file'. If 'vertical' is set to a non-zero value, then the PCX file + * will be read from top to bottom. + * + * Returns: If the conversion was successfully done, then a non-zero value is + * returned. Otherwise, zero is returned and an error message is printed to + * 'stderr'. + * + * Asserts: + * src_file != NULL + * dst_file != NULL + */ +static int pcx2chr(void); + + + +static const char help_str[] = + "Usage: pcx2chr [OPTION]... [PCXFILE] [CHRFILE]\n" + "\nOptions:\n" + "\t-V, --vertical\tread from PCX file vertically\n" + "\t-h, -?, --help\tdisplay this help and exit\n"; + +static const char *src_file = NULL; +static const char *dst_file = NULL; +static int vertical = 0; +static int print_help = 0; + + + +int main(int argc, char *argv[]) +{ + int i; + + for (i = 1; i < argc; i++) { + if (!process_arg(argv[i])) { + return EXIT_FAILURE; + } + + if (print_help) { + printf(help_str); + return EXIT_SUCCESS; + } + } + + if (src_file == NULL) { + printf(help_str); + return EXIT_SUCCESS; + } + + if (dst_file == NULL) { + fprintf(stderr, "Output file required\n"); + return EXIT_FAILURE; + } + + if (!pcx2chr()) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} + + + +static int process_arg(const char *arg) +{ + const char *p; + + assert(arg != NULL); + + if (arg[0] != '-' || arg[1] == '\0') { + if (src_file == NULL) { + src_file = arg; + } else if (dst_file == NULL) { + dst_file = arg; + } + + return 1; + } + + p = arg; + + while (*++p != '\0') { + switch (*p) { + case 'V': + vertical = 1; + break; + case 'h': + case '?': + print_help = 1; + break; + case '-': + if (!strcmp(arg, "--help")) { + print_help = 1; + } else if (!strcmp(arg, "--vertical")) { + vertical = 1; + } else { + fprintf(stderr, "Unrecognized " + "option '%s'\n", arg); + + return 0; + } + + return 1; + default: + fprintf(stderr, "Unrecognized option '%c'\n", + *p); + return 0; + } + } + + return 1; +} + + + +static int pcx2chr(void) +{ + struct img8_image *img; + struct neschr_chr *chr; + int success; + + assert(src_file != NULL); + assert(dst_file != NULL); + + if ((img = img8_read_pcx_file(src_file, NULL)) == NULL) { + return 0; + } + + chr = neschr_from_img8(img, vertical); + img8_free(img); + + if (chr == NULL) { + return 0; + } + + success = neschr_write_file(dst_file, chr); + neschr_free(chr); + + return success; +} + diff --git a/nes15-1.0.0/snd/mus0.s b/nes15-1.0.0/snd/mus0.s new file mode 100644 index 0000000..e42d7f2 --- /dev/null +++ b/nes15-1.0.0/snd/mus0.s @@ -0,0 +1,600 @@ +; +; File: mus0.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Prelude from BWV 558 by J.S. Bach (possibly by J. T. Krebs), preceded by the +; new puzzle SFX +; + +.include "muse.inc" + +.include "snd.inc" + + + +muse_create_tempo TEMPO, 95 + + + +.segment "CODE" + +.export snd_mus0 +.proc snd_mus0 + + .byte 0 + .byte MUSE_MUS0 + .addr stream0 + .byte MUSE_MUS1 + .addr stream1 + .byte MUSE_MUS2 + .addr stream2 + .byte MUSE_MUS3 + .addr stream3 + .byte $80 + + + +stream0: + .byte MUSE_SET_ENV, SND0_ENV0 + .byte MUSE_REST | MUSE_D4 + .byte MUSE_TIE | MUSE_D4 + .byte MUSE_SET_TEMPO, TEMPO + +stream0_loop0: + .byte MUSE_SET_TRANS, 12 * 2 + 3 + .byte MUSE_REST | MUSE_8 + .byte MUSE_G | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_G | MUSE_8 + .byte MUSE_EBH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_KEY_OFF | MUSE_8 + .byte MUSE_F | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_F | MUSE_8 + .byte MUSE_DH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_KEY_OFF | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_A | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_G | MUSE_8 + .byte MUSE_FS | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_G | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_FS | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_KEY_OFF | MUSE_16 + +stream0_loop1: + .byte MUSE_GH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_GH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_LOOP, 1 + .addr stream0_loop1 + .byte MUSE_GH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_GH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_GH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_GH | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_G | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_CH | MUSE_16 + + .byte MUSE_A | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_BB | MUSE_16 + + .byte MUSE_G | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_G | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_F | MUSE_16 + + .byte MUSE_BB | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_G | MUSE_8 + .byte MUSE_EBH | MUSE_8 + +stream0_loop2: + .byte MUSE_CH | MUSE_32 + .byte MUSE_DH | MUSE_32 + .byte MUSE_LOOP, 5 + .addr stream0_loop2 + .byte MUSE_BB | MUSE_8 + + .byte MUSE_BB | MUSE_D4 + .byte MUSE_CH | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_EH | MUSE_8 + .byte MUSE_FH | MUSE_2 + .byte MUSE_TIE | MUSE_D4 + + .byte MUSE_FH | MUSE_8 + .byte MUSE_EH | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_CSH | MUSE_8 + .byte MUSE_B | MUSE_8 + +stream0_loop3: + .byte MUSE_CSH | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_EH | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_AH | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_LOOP, 1 + .addr stream0_loop3 + +stream0_loop4: + .byte MUSE_DH | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_AH | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_LOOP, 1 + .addr stream0_loop4 + + .byte MUSE_GH | MUSE_16 + .byte MUSE_AH | MUSE_16 + .byte MUSE_FH | MUSE_8 + +stream0_loop5: + .byte MUSE_EH | MUSE_32 + .byte MUSE_FH | MUSE_32 + .byte MUSE_LOOP, 5 + .addr stream0_loop5 + .byte MUSE_DH | MUSE_8 + + .byte MUSE_DH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_8 + .byte MUSE_G | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_G | MUSE_8 + + .byte MUSE_EBH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_8 + .byte MUSE_F | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_F | MUSE_8 + + .byte MUSE_DH | MUSE_2 + .byte MUSE_TIE | MUSE_D4 + .byte MUSE_DH | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_A | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_G | MUSE_8 + +stream0_loop6: + .byte MUSE_FS | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_FS | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_D | MUSE_16 + + .byte MUSE_G | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_G | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_D | MUSE_16 + .byte MUSE_LOOP, 1 + .addr stream0_loop6 + + .byte MUSE_CH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_BB | MUSE_8 + +stream0_loop7: + .byte MUSE_A | MUSE_32 + .byte MUSE_BB | MUSE_32 + .byte MUSE_LOOP, 5 + .addr stream0_loop7 + .byte MUSE_G | MUSE_8 + .byte MUSE_G | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_KEY_OFF | MUSE_4 + .byte MUSE_G | MUSE_2 + .byte MUSE_TIE | MUSE_8 + .byte MUSE_A | MUSE_8 + +stream0_loop8: + .byte MUSE_FS | MUSE_32 + .byte MUSE_G | MUSE_32 + .byte MUSE_LOOP, 5 + .addr stream0_loop8 + .byte MUSE_G | MUSE_8 + + .byte MUSE_G | MUSE_4 + .byte MUSE_TIE | MUSE_2 + .byte MUSE_FS | MUSE_4 + .byte MUSE_TIE | MUSE_2 + .byte MUSE_LOOP, 0 + .addr stream0_loop0 + + + +stream1: + .byte MUSE_SET_ENV, SND0_ENV1 + .byte MUSE_REST | MUSE_D4 + .byte MUSE_TIE | MUSE_D4 + +stream1_loop0: + .byte MUSE_SET_TRANS, 12 * 0 + 3 + .byte MUSE_GH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_EBH | MUSE_8 + .byte MUSE_GH | MUSE_8 + .byte MUSE_MOVE_TRANS, 12 + .byte MUSE_CH | MUSE_8 + .byte MUSE_MOVE_TRANS, -12 + .byte MUSE_CH | MUSE_8 + + .byte MUSE_FH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_FH | MUSE_8 + .byte MUSE_BBH | MUSE_8 + .byte MUSE_BB | MUSE_8 + + .byte MUSE_GH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_MOVE_TRANS, 12 + .byte MUSE_CH | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_A | MUSE_8 + + .byte MUSE_BB | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_EBH | MUSE_8 + .byte MUSE_CH | MUSE_8 + +stream1_loop1: + .byte MUSE_A | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_LOOP, 2 + .addr stream1_loop1 + + .byte MUSE_DH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_CH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_A | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_BB | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_G | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_CH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_BB | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + .byte MUSE_BB | MUSE_2 + .byte MUSE_A | MUSE_4 + + .byte MUSE_KEY_OFF | MUSE_16 + .byte MUSE_GH | MUSE_16 + .byte MUSE_FH | MUSE_16 + .byte MUSE_EBH | MUSE_16 + .byte MUSE_DH | MUSE_8 + .byte MUSE_EBH | MUSE_8 + .byte MUSE_FH | MUSE_8 + .byte MUSE_GH | MUSE_8 + .byte MUSE_KEY_OFF | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_A | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_F | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_CH | MUSE_16 + + .byte MUSE_DH | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + .byte MUSE_EH | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + + .byte MUSE_DH | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + .byte MUSE_DH | MUSE_4 + .byte MUSE_A | MUSE_4 + .byte MUSE_CSH | MUSE_4 + +stream1_loop2: + .byte MUSE_KEY_OFF | MUSE_8 + .byte MUSE_D | MUSE_8 + .byte MUSE_F | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_F | MUSE_8 + .byte MUSE_D | MUSE_8 + .byte MUSE_G | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_MOVE_TRANS, -2 + .byte MUSE_LOOP, 1 + .addr stream1_loop2 + .byte MUSE_SET_TRANS, 12 * 0 + 3 + + .byte MUSE_KEY_OFF | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_FH | MUSE_8 + .byte MUSE_BBH | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_GH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_AH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_BBH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_AH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_GH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_GH | MUSE_2 + .byte MUSE_FSH | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_16 + .byte MUSE_GH | MUSE_16 + .byte MUSE_FSH | MUSE_16 + .byte MUSE_GH | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_GH | MUSE_16 + .byte MUSE_FSH | MUSE_16 + .byte MUSE_GH | MUSE_16 + .byte MUSE_BB | MUSE_16 + .byte MUSE_DH | MUSE_16 + .byte MUSE_CH | MUSE_16 + .byte MUSE_DH | MUSE_16 + + .byte MUSE_KEY_OFF | MUSE_4 + .byte MUSE_GH | MUSE_2 + .byte MUSE_MOVE_TRANS, 12 + .byte MUSE_DH | MUSE_4 + .byte MUSE_A | MUSE_4 + .byte MUSE_CH | MUSE_4 + + .byte MUSE_DH | MUSE_D4 + .byte MUSE_TIE | MUSE_2 + .byte MUSE_DH | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_BB | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_FS | MUSE_8 + .byte MUSE_LOOP, 0 + .addr stream1_loop0 + + + +stream2: + .byte MUSE_SET_ENV, SND0_ENV2 + .byte MUSE_REST | MUSE_D4 + .byte MUSE_TIE | MUSE_D4 + +stream2_loop0: + .byte MUSE_SET_TRANS, 12 * 1 + 3 + .byte MUSE_G | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_CH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_F | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_BB | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_EBH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_DH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_G | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_DH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_B | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_CH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_FH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_BB | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_EBH | MUSE_2 + .byte MUSE_TIE | MUSE_2 + .byte MUSE_KEY_OFF | MUSE_2 + + .byte MUSE_DH | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + .byte MUSE_EBH | MUSE_4 + .byte MUSE_FH | MUSE_4 + .byte MUSE_F | MUSE_4 + + .byte MUSE_BB | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_A | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_G | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + .byte MUSE_G | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + + .byte MUSE_F | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + .byte MUSE_G | MUSE_4 + .byte MUSE_A | MUSE_2 + + .byte MUSE_DH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_BB | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_CH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_F | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_BB | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_EBH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_DH | MUSE_2 + .byte MUSE_TIE | MUSE_2 + .byte MUSE_TIE | MUSE_2 + + .byte MUSE_TIE | MUSE_2 + .byte MUSE_TIE | MUSE_4 + .byte MUSE_BB | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_CH | MUSE_4 + .byte MUSE_DH | MUSE_4 + .byte MUSE_D | MUSE_4 + .byte MUSE_G | MUSE_2 + .byte MUSE_TIE | MUSE_2 + + .byte MUSE_EH | MUSE_2 + .byte MUSE_DH | MUSE_2 + .byte MUSE_TIE | MUSE_4 + + .byte MUSE_G | MUSE_4 + .byte MUSE_TIE | MUSE_2 + .byte MUSE_DH | MUSE_4 + .byte MUSE_TIE | MUSE_2 + .byte MUSE_LOOP, 0 + .addr stream2_loop0 + + + +stream3: + .byte MUSE_SET_ENV, SND1_ENV0 + .byte MUSE_SET_TRANS, 0 + + .byte MUSE_DS | MUSE_D16 + .byte MUSE_REST | MUSE_D16 + .byte MUSE_DS | MUSE_D8 + .byte MUSE_END + +.endproc + diff --git a/nes15-1.0.0/snd/mus1.s b/nes15-1.0.0/snd/mus1.s new file mode 100644 index 0000000..f072dd1 --- /dev/null +++ b/nes15-1.0.0/snd/mus1.s @@ -0,0 +1,75 @@ +; +; File: mus1.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Puzzle solved music +; + +.include "muse.inc" + +.include "snd.inc" + + + +muse_create_tempo TEMPO, 95 + + + +.segment "CODE" + +.export snd_mus1 +.proc snd_mus1 + + .byte 0 + .byte MUSE_MUS0 + .addr stream0 + .byte MUSE_MUS1 + .addr stream1 + .byte MUSE_MUS2 + .addr stream2 + .byte $80 + + + +stream0: + .byte MUSE_SET_ENV, SND0_ENV0 + .byte MUSE_SET_TEMPO, TEMPO + .byte MUSE_SET_TRANS, 12 * 2 + 3 + .byte MUSE_REST | MUSE_8 + .byte MUSE_F | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_CH | MUSE_8 + .byte MUSE_A | MUSE_8 + .byte MUSE_F | MUSE_8 + + .byte MUSE_BB | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + .byte MUSE_END + + + +stream1: + .byte MUSE_SET_ENV, SND0_ENV1 + .byte MUSE_SET_TRANS, 12 * 1 + 3 + + .byte MUSE_CH | MUSE_4 + .byte MUSE_TIE | MUSE_2 + .byte MUSE_BB | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + .byte MUSE_END + + + +stream2: + .byte MUSE_SET_ENV, SND0_ENV2 + .byte MUSE_SET_TRANS, 12 * 1 + 3 + + .byte MUSE_F | MUSE_4 + .byte MUSE_TIE | MUSE_2 + .byte MUSE_BB | MUSE_4 + .byte MUSE_KEY_OFF | MUSE_2 + .byte MUSE_END + +.endproc + diff --git a/nes15-1.0.0/snd/sfx0.s b/nes15-1.0.0/snd/sfx0.s new file mode 100644 index 0000000..055410d --- /dev/null +++ b/nes15-1.0.0/snd/sfx0.s @@ -0,0 +1,35 @@ +; +; File: sfx0.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Tile movement SFX +; + +.include "muse.inc" + +.include "snd.inc" + + + +.segment "CODE" + +.export snd_sfx0 +.proc snd_sfx0 + + .byte 1 + .byte MUSE_SFX3 + .addr stream0 + .byte $80 + + + +stream0: + .byte MUSE_SET_ENV, SND1_ENV0 + .byte MUSE_SET_TRANS, 0 + + .byte MUSE_DS | MUSE_D8 + .byte MUSE_END + +.endproc + diff --git a/nes15-1.0.0/snd/sfx1.s b/nes15-1.0.0/snd/sfx1.s new file mode 100644 index 0000000..264a0be --- /dev/null +++ b/nes15-1.0.0/snd/sfx1.s @@ -0,0 +1,38 @@ +; +; File: sfx1.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Play paused SFX +; + +.include "muse.inc" + +.include "snd.inc" + + + +.segment "CODE" + +.export snd_sfx1 +.proc snd_sfx1 + + .byte 1 + .byte MUSE_SFX1 + .addr stream0 + .byte $80 + + + +stream0: + .byte MUSE_SET_ENV, SND3_ENV0 + .byte MUSE_SET_TRANS, 12 * 2 + 3 + + .byte MUSE_BB | MUSE_8 + .byte MUSE_FH | MUSE_8 + .byte MUSE_DH | MUSE_8 + .byte MUSE_BBH | MUSE_2 + .byte MUSE_END + +.endproc + diff --git a/nes15-1.0.0/snd/snd.inc b/nes15-1.0.0/snd/snd.inc new file mode 100644 index 0000000..e0d3cf9 --- /dev/null +++ b/nes15-1.0.0/snd/snd.inc @@ -0,0 +1,39 @@ +; +; File: snd.inc +; Namespace: snd_ / SND_ +; Code Segment: CODE +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Music and sound effects data module +; + +.ifndef SND_INC +SND_INC = 1 + +; Available music and sound effects + +.enum + + SND_MUS0 + SND_MUS1 + SND_NUM_MUS + SND_SFX0 = SND_NUM_MUS + SND_SFX1 + +.endenum + +; Available register envelopes + +.enum + + SND0_ENV0 + SND0_ENV1 + SND0_ENV2 + SND1_ENV0 + SND3_ENV0 + +.endenum + +.endif + diff --git a/nes15-1.0.0/snd/snd.s b/nes15-1.0.0/snd/snd.s new file mode 100644 index 0000000..ea250b1 --- /dev/null +++ b/nes15-1.0.0/snd/snd.s @@ -0,0 +1,71 @@ +; +; File: snd.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Music and sound effects data +; + +.include "muse.inc" + + + +.segment "CODE" + +; Register envelopes + +muse_envs_lo: + .byte env0 + .byte >env1 + .byte >env2 + .byte >env3 + .byte >env4 + + + +env0: + .byte $42, $48, $46, $76, $45, $45, $44, $44, $44, $43, $43, $43, $43 + .byte $42, $42, $42, $42, $42, $41, $41, $41, $41, $41, $41, $00 + +env1: + .byte $81, $86, $84, $B4, $83, $83, $82, $82, $82, $81, $81, $81, $81 + .byte $00 + +env2: + .byte $F0, $00 + +env3: + .byte $01, $02, $06, $0C, $0F, $00 + +env4: + .byte $8F, $8C, $8A, $89, $88, $87, $86, $85, $85, $84, $84, $83, $83 + .byte $82, $82, $82, $81, $81, $81, $00 + + + +; Music and sound effects + +.import snd_mus0 +.import snd_mus1 +.import snd_sfx0 +.import snd_sfx1 + +muse_sounds_lo: + .byte snd_mus0 + .byte >snd_mus1 + .byte >snd_sfx0 + .byte >snd_sfx1 + diff --git a/nes15-1.0.0/src/game.inc b/nes15-1.0.0/src/game.inc new file mode 100644 index 0000000..8e61901 --- /dev/null +++ b/nes15-1.0.0/src/game.inc @@ -0,0 +1,59 @@ +; +; File: game.inc +; Namespace: game / GAME_ +; Code Segment: CODE +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Main game module +; + +.ifndef GAME_INC +GAME_INC = 1 + +; Main game states + +.enum + + ; Title screen state + ; + ; Preconditions: + ; + ; Rendering must be turned off via 'nmi_ppumask'. + ; The OAM buffer must be cleared. + + GAME_TITLE + + ; Playing game state + ; + ; Preconditions: + ; + ; Rendering must be turned off via 'nmi_ppumask'. + ; The base name table in 'nmi_ppuctrl' must be $2000. + ; The OAM buffer must be cleared. + ; The LFSR must be seeded. + + GAME_PLAY + +.endenum + + + +; Temporary storage used by the game modules + +.globalzp game_temp + + + +; +; Changes the current game state and calls its initialization function. +; +; In: +; a = The game state to change to +; +; Destroyed: Assume everything +; +.global game_change_state + +.endif + diff --git a/nes15-1.0.0/src/game.s b/nes15-1.0.0/src/game.s new file mode 100644 index 0000000..a013073 --- /dev/null +++ b/nes15-1.0.0/src/game.s @@ -0,0 +1,150 @@ +; +; File: game.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Main game subroutines and data +; + +.include "apu.inc" +.include "joy.inc" +.include "muse.inc" +.include "oam.inc" +.include "ppu.inc" +.include "vrub.inc" + +.include "fifteen.inc" +.include "gfx.inc" +.include "nmi.inc" +.include "play.inc" +.include "title.inc" + +.include "game.inc" + + + +JOY_REP_DELAY = 30 +JOY_REP_SPEED = 3 + + + +vrub_buff = $100 +oam_buff = $200 + +.segment "ZEROPAGE" + +game_temp: .res 4 + +; The current game state + +game_state: .res 1 + + + +.segment "CODE" + +; +; Reset routine +; +.proc reset + + sei + cld + ldx #$FF + txs + inx + stx PPUCTRL ; Disable NMI + stx PPUMASK ; Disable rendering + stx DMC_FREQ ; Disable DMC IRQs + + bit PPUSTATUS ; Clear the vblank flag + ppu_poll_vblank ; First of two waits for vblanks to ensure that + ; the PPU has stabilized + + stx nmi_ppumask ; Reset PPUMASK mirror + stx nmi_draw ; Reset NMI draw flag + stx vrub_buff ; Reset VRUB buffer and end position + stx vrub_end + stx joy_held ; Initialize read joypad states + stx joy_pressed + stx joy_released + joy_init1 ; Initialize the joypad state + jsr oam_clear ; Initialize the OAM buffer + jsr muse_on ; Initialize the sound engine + + ppu_poll_vblank ; Second vblank wait + + lda #$80 ; Enable NMIs, set pattern and name tables + sta nmi_ppuctrl + sta PPUCTRL + + jsr gfx_write_pals ; Write the sprite and background palettes + dec nmi_draw ; Enable NMI drawing so OAM is cleared and the + ; palettes are written + + lda #GAME_TITLE ; Set game state to the title screen + jsr game_change_state + + ; Main loop + +loop: + jsr update + jmp loop + +.endproc + + + +.proc game_change_state + + sta game_state + asl + tax + lda init_table + 1, x + pha + lda init_table, x + pha + rts + +init_table: + .addr title_init - 1 + .addr play_init - 1 + +.endproc + + + +; +; Calls the current state's update subroutine. +; +; Destroyed: Assume everything +; +.proc update + + lda game_state + asl + tax + lda update_table + 1, x + pha + lda update_table, x + pha + rts + +update_table: + .addr title_update - 1 + .addr play_update - 1 + +.endproc + + + +.byte $48, $41, $50, $50, $59, $20, $45, $41, $53, $54, $45, $52, $21 + + + +.segment "VECTORS" + + .addr nmi + .addr reset + .addr nmi_done + diff --git a/nes15-1.0.0/src/gfx.inc b/nes15-1.0.0/src/gfx.inc new file mode 100644 index 0000000..fa02f28 --- /dev/null +++ b/nes15-1.0.0/src/gfx.inc @@ -0,0 +1,191 @@ +; +; File: gfx.inc +; Namespace: gfx_ / GFX_ +; Code Segment: CODE +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Graphics module +; + +.ifndef GFX_INC +GFX_INC = 1 + +; Game display message indexes + +.enum + + GFX_MSG_CLEAR + GFX_MSG_SOLVED + GFX_MSG_SOLVING + +.endenum + + + +; High byte of the name table to draw to + +.globalzp gfx_nt + +; Tile sprite's horizontal position on the puzzle board + +.globalzp gfx_tile_x + +; Cursor's horizontal position on the puzzle board + +.globalzp gfx_cursor_x + +; Tile sprite's vertical position on the puzzle board + +.globalzp gfx_tile_y + +; Cursor's vertical position on the puzzle board + +.globalzp gfx_cursor_y + +; Tile sprite's on-screen horizontal position + +.globalzp gfx_tile_sx + +; Cursor's on-screen horizontal position + +.globalzp gfx_cursor_sx + +; Tile sprite's on-screen vertical position + +.globalzp gfx_tile_sy + +; Cursor's on-screen vertical position + +.globalzp gfx_cursor_sy + +.endif + + + +; +; Sets up the VRUB update to write the background and sprite palettes used by +; the game. +; +; Destroyed: a, x, y +; +.global gfx_write_pals + +; +; Sets up the VRUB updates to draw a puzzle tile to the background. Note that +; this should not be used to draw the puzzle's gap. +; +; In: +; a = The horizontal position of the tile to draw +; y = The vertical position of the tile to draw +; +; Destroyed: a, x, y, game_temp/+1/+2 +; +.global gfx_draw_tile_bgd + +; +; Sets up the VRUB updates to erase a puzzle tile from the background. +; +; In: +; a = The horizontal position of the tile to erase +; y = The vertical position of the tile to erase +; +; Destroyed: a, x, y, game_temp/+1 +; +.global gfx_erase_tile_bgd + +; +; Initializes the tile sprite and draws it to the OAM buffer. Note that this +; should not be used to draw the puzzle's gap. +; +; In: +; gfx_tile_x = The tile sprite's starting horizontal position +; gfx_tile_y = The tile sprite's starting vertical position +; gfx_tile_sx = The horizontal position of the tile sprite's destination +; on the puzzle board +; gfx_tile_sy = The vertical position of the tile sprite's destination on +; the puzzle board +; +; Destroyed: a, x, y +; +.global gfx_init_tile_spr + +; +; Positions the OAM sprites used by the tile sprite. +; +; Destroyed: a, x, y +; +.global gfx_pos_tile_spr + +; +; Moves the tile sprite's on-screen position to match its position on the +; puzzle board. +; +; Out: +; Z = Reset if the tile sprite's on-screen position matches its puzzle +; board position, else set +; +; Destroyed: a, x, y +; +.global gfx_update_tile_spr + +; +; Sets the OAM sprites used by the tile sprite to a non-visible state. +; +; Destroyed: a, x, y +; +.global gfx_erase_tile_spr + +; +; Initializes the cursor and draws it to the OAM buffer. +; +; In: +; gfx_cursor_x = The cursor's horizontal position on the puzzle board +; gfx_cursor_y = The cursor's vertical position on the puzzle board +; +; Preserved: x, y +; Destroyed: a +; +.global gfx_init_cursor + +; +; Positions the OAM sprites used by the cursor. +; +; Preserved: x, y +; Destroyed: a +; +.global gfx_pos_cursor + +; +; Moves the cursor's on-screen position to match its position on the puzzle +; board. +; +; Out: +; Z = Reset if the cursor's on-screen position matches its puzzle board +; position, else set +; +; Destroyed: a, x, y +; +.global gfx_update_cursor + +; +; Draws the number of moves used by the player to the screen. +; +; In: +; a = The low byte of the number of moves to draw +; y = The high byte of the number of moves to draw +; +; Destroyed: a, x, y +; +.global gfx_draw_moves + +; +; Draws a message to the message display area of the game screen. +; +; In: +; a = The index of the message to draw +; +; Destroyed: a, x, y +; +.global gfx_draw_msg + diff --git a/nes15-1.0.0/src/gfx.s b/nes15-1.0.0/src/gfx.s new file mode 100644 index 0000000..f520bee --- /dev/null +++ b/nes15-1.0.0/src/gfx.s @@ -0,0 +1,666 @@ +; +; File: gfx.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Graphics subroutines and data +; + +.include "bcd.inc" +.include "oam.inc" +.include "ppu.inc" +.include "vrub.inc" + +.include "fifteen.inc" +.include "game.inc" + +.include "gfx.inc" + + + +; Puzzle tile's dimensions in pattern table tiles + +TILE_WIDTH = 4 +TILE_HEIGHT = 4 +TILE_SIZE = TILE_WIDTH * TILE_HEIGHT + +; Pattern table indexes used to draw the puzzle's tiles + +TILE_TLCORNER = $00 +TILE_TRCORNER = $01 +TILE_BLCORNER = $02 +TILE_BRCORNER = $03 +TILE_TEDGE = $04 +TILE_BEDGE = $05 +TILE_LEDGE = $06 +TILE_REDGE = $07 +TILE_NUM_BASE = $60 + +; Name table position of the top left corner of the tile area + +TILE_NT_X = 8 +TILE_NT_Y = 6 + +; Name table address of the top left corner of the tile area + +TILE_NT_ADDR = TILE_NT_X + TILE_NT_Y * 32 + +; First and last OAM sprites used by the tile sprite + +TILE_OAM_FIRST = CURSOR_OAM_LAST + OAM_SIZE +TILE_OAM_LAST = TILE_OAM_FIRST + (TILE_SIZE - 1) * OAM_SIZE + +; Pattern table indexes used to draw the cursor + +CURSOR_TLCORNER = $08 +CURSOR_TRCORNER = $09 +CURSOR_BLCORNER = $0A +CURSOR_BRCORNER = $0B + +; First and last OAM sprites used by the cursor + +CURSOR_OAM_FIRST = 0 +CURSOR_OAM_LAST = 3 * OAM_SIZE + +; Name table address of the moves display area + +MOVES_NT_ADDR = 22 + 27 * 32 + +; Name table address of the message display area + +MSG_NT_ADDR = 6 + 26 * 32 + + + +.segment "ZEROPAGE" + +gfx_nt: .res 1 + +gfx_tile_x: .res 1 +gfx_cursor_x: .res 1 + +gfx_tile_y: .res 1 +gfx_cursor_y: .res 1 + +gfx_tile_sx: .res 1 +gfx_cursor_sx: .res 1 + +gfx_tile_sy: .res 1 +gfx_cursor_sy: .res 1 + + + +.segment "CODE" + +.proc gfx_write_pals + + lda #pal_update + jmp vrub_from_mem + +pal_update: + .byte $80, $3F, $00, 32 + .incbin "bgd.pal" + .incbin "spr.pal" + +.endproc + + + +.proc gfx_draw_tile_bgd + +nt_addr = game_temp +tile_offset = game_temp + 2 + + ; Store the offset to add to the tile's center indexes. + + sta nt_addr + tya + asl + asl + adc nt_addr ; Carry is already cleared + tax + lda fifteen_board, x + asl + asl + sta tile_offset + + ; Store the name table address to write to. + + jsr calc_nt_addr + + ; Setup the VRUB updates for each column of the tile. + + ldx vrub_end + ldy #TILE_WIDTH - 1 + +loop: + + ; Store the pattern table indexes for this column. + + lda pt_indexes, y + sta vrub_buff + VRUB_DATA, x + lda pt_indexes + TILE_WIDTH, y + sta vrub_buff + VRUB_DATA + 1, x + lda pt_indexes + TILE_WIDTH * 2, y + sta vrub_buff + VRUB_DATA + 2, x + lda pt_indexes + TILE_WIDTH * 3, y + sta vrub_buff + VRUB_DATA + 3, x + + ; If drawing the inner columns, add the offset already stored. + + tya + beq cont + cpy #TILE_WIDTH - 1 + bcs cont + lda vrub_buff + VRUB_DATA + 1, x + adc tile_offset + sta vrub_buff + VRUB_DATA + 1, x + lda vrub_buff + VRUB_DATA + 2, x + adc tile_offset + sta vrub_buff + VRUB_DATA + 2, x + +cont: + ; Set the control byte for the update. + + lda #$88 + sta vrub_buff + VRUB_CTRL, x + + ; Finish writing the update and move to the next column. + + jsr finish_update + txa + adc #VRUB_DATA + TILE_HEIGHT + tax + dey + bpl loop + lda #$00 + sta vrub_buff + VRUB_CTRL, x + stx vrub_end + rts + +; +; Calculates the name table address for the top left-hand corner of a puzzle +; tile (nt_addr * 4 + y * 128 + TILE_NT_ADDR). Note that this is reused by +; 'gfx_erase_tile_bgd'. +; +; In: +; nt_addr = The horizontal position of the tile to draw +; y = The vertical position of the tile to draw +; +; Out: +; nt_addr/+1 = The name table address for the puzzle tile +; +; Preserved: x +; Destroyed: a, y +; +.proc calc_nt_addr + + tya + ldy nt_addr + lsr + sta nt_addr + 1 + ror + sta nt_addr + tya + asl + asl + adc nt_addr ; Carry is already cleared + adc #TILE_NT_ADDR + ora gfx_nt + sta nt_addr + 1 + rts + +.endproc + +; +; Sets the destination and length bytes for current column's VRUB update. Note +; that this is reused by 'gfx_erase_tile_bgd'. +; +; In: +; x = The index in 'vrub_buff' to write to +; y = The column of the tile being written +; +; Preserved: y +; Destroyed: a +; +.proc finish_update + + tya + clc + adc nt_addr + sta vrub_buff + VRUB_DSTLO, X + lda #0 + adc nt_addr + 1 + sta vrub_buff + VRUB_DSTHI, X + lda #TILE_HEIGHT + sta vrub_buff + VRUB_LEN, x + rts + +.endproc + +pt_indexes: + .byte TILE_TLCORNER, TILE_TEDGE, TILE_TEDGE, TILE_TRCORNER + .byte TILE_LEDGE, TILE_NUM_BASE - 4, TILE_NUM_BASE - 2, TILE_REDGE + .byte TILE_LEDGE, TILE_NUM_BASE - 3, TILE_NUM_BASE - 1, TILE_REDGE + .byte TILE_BLCORNER, TILE_BEDGE, TILE_BEDGE, TILE_BRCORNER + +.endproc + + + +.proc gfx_erase_tile_bgd + +nt_addr = game_temp + + ; Store the name table address to write to. + + sta nt_addr + jsr gfx_draw_tile_bgd::calc_nt_addr + + ; Setup the VRUB updates for each column of the tile to erase. + + ldx vrub_end + ldy #TILE_WIDTH - 1 + +loop: + + ; Set the control byte for the update. + + lda #$89 + sta vrub_buff + VRUB_CTRL, x + + ; Store the blank pattern table index, which will be repeated for the + ; entire column. + + lda #' ' + sta vrub_buff + VRUB_DATA, x + + ; Finish writing the update and move to the next column. + + jsr gfx_draw_tile_bgd::finish_update + txa + adc #VRUB_DATA + 1 + tax + dey + bpl loop + lda #$00 + sta vrub_buff + VRUB_CTRL, x + stx vrub_end + rts + +.endproc + + + +.proc gfx_init_tile_spr + +; Center OAM sprites that contain the tile's number + +oam0 = oam_buff + TILE_OAM_FIRST + 5 * OAM_SIZE +oam1 = oam_buff + TILE_OAM_FIRST + 6 * OAM_SIZE +oam2 = oam_buff + TILE_OAM_FIRST + 9 * OAM_SIZE +oam3 = oam_buff + TILE_OAM_FIRST + 10 * OAM_SIZE + + ; Set the sprite's pattern table indexes and color. + + ldx #TILE_OAM_LAST + ldy #TILE_SIZE - 1 + +loop: + lda gfx_draw_tile_bgd::pt_indexes, y + sta oam_buff + OAM_TILE, x + lda #1 + sta oam_buff + OAM_ATT, x + dex + dex + dex + dex + dey + bpl loop + + lda gfx_tile_y + asl + asl + adc gfx_tile_x ; Carry is already cleared + tay + lda fifteen_board, y + asl + asl + adc #TILE_NUM_BASE - 4 ; Carry is already cleared + tay + sty oam0 + OAM_TILE + iny + sty oam2 + OAM_TILE + iny + sty oam1 + OAM_TILE + iny + sty oam3 + OAM_TILE + + ; Initialize the tile sprite's on-screen position from the puzzle board + ; position already stored in 'gfx_tile_sx' and 'gfx_tile_sy'. + + lda gfx_tile_sx + lsr + ror + ror + ror + adc #TILE_NT_X * 8 ; Carry is already cleared + sta gfx_tile_sx + lda gfx_tile_sy + lsr + ror + ror + ror + adc #TILE_NT_Y * 8 ; Carry is already cleared + sta gfx_tile_sy + rts + +.endproc + + + +.proc gfx_pos_tile_spr + + ldx #TILE_OAM_LAST + ldy #TILE_SIZE - 1 + +loop: + tya + and #$0C + asl + adc gfx_tile_sy ; Carry is already cleared + adc #$FF + sta oam_buff + OAM_Y, x + tya + and #$03 + asl + asl + asl + adc gfx_tile_sx ; Carrys is already cleared + sta oam_buff + OAM_X, x + dex + dex + dex + dex + dey + bpl loop + rts + +.endproc + + + +.proc gfx_update_tile_spr + + ldx #0 + +; +; Update either the tile sprite or the cursor. Note that this is reused by +; 'gfx_update_cursor'. +; +; In: +; x = Which sprite to update (0 = tile, 1 = cursor) +; +; Out: +; Z = Reset if the sprite's on-screen position matches its puzzle board +; position, else set +; +; Preserved: x +; Destroyed: a, y +; +.proc update + + ; Keep count of the number of coordinates updated. + + ldy #0 + + ; Update the sprite's horizontal position. + + lda gfx_tile_x, x + lsr + ror + ror + ror + adc #TILE_NT_X * 8 ; Carry is already cleared + sec + sbc gfx_tile_sx, x + beq move_ver + bcs move_right + + lsr + lsr + ora #$C0 + bne hor_done + +move_right: + adc #2 ; Carry is already set + lsr + lsr + +hor_done: + clc + adc gfx_tile_sx, x + sta gfx_tile_sx, x + iny + + ; Update the sprite's vertical position. + +move_ver: + lda gfx_tile_y, x + lsr + ror + ror + ror + adc #TILE_NT_Y * 8 ; Carry is already cleared + sec + sbc gfx_tile_sy, x + beq done + bcs move_down + + lsr + lsr + ora #$C0 + bne ver_done + +move_down: + adc #2 ; Carry is already set + lsr + lsr + +ver_done: + clc + adc gfx_tile_sy, x + sta gfx_tile_sy, x + iny + +done: + tya ; Set Z based on the number coordinates updated + rts + +.endproc + +.endproc + + + +.proc gfx_erase_tile_spr + + ldx #TILE_OAM_LAST + ldy #TILE_SIZE - 1 + lda #248 + +loop: + sta oam_buff + OAM_Y, x + dex + dex + dex + dex + dey + bpl loop + rts + +.endproc + + + +.proc gfx_init_cursor + +oam0 = oam_buff + CURSOR_OAM_FIRST +oam1 = oam_buff + CURSOR_OAM_FIRST + OAM_SIZE +oam2 = oam_buff + CURSOR_OAM_FIRST + OAM_SIZE * 2 +oam3 = oam_buff + CURSOR_OAM_FIRST + OAM_SIZE * 3 + + ; Set the sprite's pattern table indexes and color. + + lda #CURSOR_TLCORNER + sta oam0 + OAM_TILE + lda #CURSOR_BLCORNER + sta oam1 + OAM_TILE + lda #CURSOR_TRCORNER + sta oam2 + OAM_TILE + lda #CURSOR_BRCORNER + sta oam3 + OAM_TILE + + lda #0 + sta oam0 + OAM_ATT + sta oam1 + OAM_ATT + sta oam2 + OAM_ATT + sta oam3 + OAM_ATT + + ; Initialize the cursor's on-screen position. + + lda gfx_cursor_x + lsr + ror + ror + ror + adc #TILE_NT_X * 8 ; Carry is already cleared + sta gfx_cursor_sx + lda gfx_cursor_y + lsr + ror + ror + ror + adc #TILE_NT_Y * 8 ; Carry is already cleared + sta gfx_cursor_sy + rts + +.endproc + + + +.proc gfx_pos_cursor + +oam0 = oam_buff + CURSOR_OAM_FIRST +oam1 = oam_buff + CURSOR_OAM_FIRST + OAM_SIZE +oam2 = oam_buff + CURSOR_OAM_FIRST + OAM_SIZE * 2 +oam3 = oam_buff + CURSOR_OAM_FIRST + OAM_SIZE * 3 + + lda gfx_cursor_sx + sta oam0 + OAM_X + sta oam1 + OAM_X + clc + adc #(TILE_WIDTH - 1) * 8 + sta oam2 + OAM_X + sta oam3 + OAM_X + + lda gfx_cursor_sy + adc #$FF ; Carry is already cleared + sta oam0 + OAM_Y + sta oam2 + OAM_Y + clc + adc #(TILE_HEIGHT - 1) * 8 + sta oam1 + OAM_Y + sta oam3 + OAM_Y + rts + +.endproc + + + +.proc gfx_update_cursor + + ldx #1 + jmp gfx_update_tile_spr::update + +.endproc + + + +.proc gfx_draw_moves + + ; Convert the number of moves to BCD format. + + jsr bcd16_from_bin + + ; Setup the VRUB update to draw the number of moves. + + lda #>MOVES_NT_ADDR + ora gfx_nt + tay + lda #msg0, >msg1, >msg2 + +; Game screen messages + +msg0: + vrub_str MSG_NT_ADDR, " " + .byte $00 + +msg1: + vrub_str MSG_NT_ADDR, "SOLVED! " + .byte $00 + +msg2: + vrub_str MSG_NT_ADDR, "SOLVING..." + .byte $00 + +.endproc + + + +.segment "CHR1" + + .incbin "edges.chr" ; $00 + .incbin "cursor.chr" ; $08 + .incbin "tile.chr" ; $0C + .res $130 + .incbin "font.chr" ; $20 + .incbin "nums.chr" ; $60 + diff --git a/nes15-1.0.0/src/header.s b/nes15-1.0.0/src/header.s new file mode 100644 index 0000000..bce6d38 --- /dev/null +++ b/nes15-1.0.0/src/header.s @@ -0,0 +1,16 @@ +; +; File: header.inc +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; NROM-128 iNES header +; + +.segment "INESHDR" + + .byte "NES", $1A + .byte $01 ; 1 16k bank of PRGROM + .byte $01 ; 1 8k back of CHRROM + .byte $01, $00 ; Mapper 0 with vertical mirroring + .byte $00 + diff --git a/nes15-1.0.0/src/nmi.inc b/nes15-1.0.0/src/nmi.inc new file mode 100644 index 0000000..7173000 --- /dev/null +++ b/nes15-1.0.0/src/nmi.inc @@ -0,0 +1,69 @@ +; +; File: nmi.inc +; Namespace: nmi_ / NMI_ +; Code Segment: CODE +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; NMI module +; + +.ifndef NMI_INC +NMI_INC = 1 + +; Counter incremented every NMI. This is used primarily by 'nmi_wait' to wait +; for the end of the next NMI. + +.globalzp nmi_count + +; Copy of PPUCTRL written during every NMI + +.globalzp nmi_ppuctrl + +; Copy of PPUMASK written during every NMI. Note that if you intend to turn +; on or off rendering, you should write to this, then use 'nmi_wait' to wait +; for the mirror to be copied to PPUMASK. + +.globalzp nmi_ppumask + +; Flag that tells the NMI that the current frame is ready to be drawn, causing +; it to draw the OAM buffer and perform VRUB updates. + +.globalzp nmi_draw + + + +; +; Waits for the end of the next NMI. +; +; Preserved: x, y +; Destroyed: a +; +.macro nmi_wait + + lda nmi_count + +.local loop +loop: + cmp nmi_count + beq loop + +.endmacro + +; +; NMI routine +; +; Preserved: a, x, y +; +.global nmi + +; +; Simply a lable set to the 'rti' instruction at the end of NMI routine. This +; is provided so it can be used as the IRQ routine. +; +; Preserved: a, x, y +; +.global nmi_done + +.endif + diff --git a/nes15-1.0.0/src/nmi.s b/nes15-1.0.0/src/nmi.s new file mode 100644 index 0000000..4f966ff --- /dev/null +++ b/nes15-1.0.0/src/nmi.s @@ -0,0 +1,66 @@ +; +; File: nmi.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; NMI subroutines and data +; + +.include "muse.inc" +.include "oam.inc" +.include "ppu.inc" +.include "vrub.inc" + +.include "nmi.inc" + + + +.segment "ZEROPAGE" + +nmi_count: .res 1 +nmi_ppuctrl: .res 1 +nmi_ppumask: .res 1 +nmi_draw: .res 1 + + + +.segment "CODE" + +.proc nmi + + pha + txa + pha + tya + pha + + bit nmi_draw ; Test if the frame is ready to be displayed + bpl no_draw + oam_copy ; Update OAM + vrub_update nmi_ppuctrl ; Perform VRUB updates + inc nmi_draw ; Reset the frame ready flag + +no_draw: + lda nmi_ppuctrl ; Update PPUCTRL + sta PPUCTRL + lda #0 + sta PPUSCROLL ; Update PPUSCROLL + sta PPUSCROLL + lda nmi_ppumask ; Update PPUMASK + sta PPUMASK + inc nmi_count ; Update the NMI counter used for waiting + jsr muse_update ; Update the sound engine + + pla + tay + pla + tax + pla + +done: + rti + +.endproc + +nmi_done = nmi::done + diff --git a/nes15-1.0.0/src/play.inc b/nes15-1.0.0/src/play.inc new file mode 100644 index 0000000..021514f --- /dev/null +++ b/nes15-1.0.0/src/play.inc @@ -0,0 +1,29 @@ +; +; File: play.inc +; Namespace: play_ / PLAY_ +; Code Segment: CODE +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Playing game state module +; + +.ifndef PLAY_INC +PLAY_INC = 1 + +; +; Initializes the playing game state. +; +; Destroyed: Assume everything +; +.global play_init + +; +; Updates the playing game state. +; +; Destroyed: Assume everything +; +.global play_update + +.endif + diff --git a/nes15-1.0.0/src/play.s b/nes15-1.0.0/src/play.s new file mode 100644 index 0000000..1dcbf7f --- /dev/null +++ b/nes15-1.0.0/src/play.s @@ -0,0 +1,571 @@ +; +; File: play.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Playing game state subroutines and data +; + +.include "joy.inc" +.include "muse.inc" +.include "pkb.inc" +.include "ppu.inc" + +.include "fifteen.inc" +.include "game.inc" +.include "gfx.inc" +.include "nmi.inc" +.include "snd.inc" + +.include "play.inc" + + + +; Playing game states + +.enum + + ; Generates and draws a new puzzle and prepares the game for play. + ; + ; Preconditions: + ; + ; 'gfx_nt' must be initialized. + ; The background must be drawn to both name tables. + + PLAY_NEW_PUZZLE + + ; Waits for player input and performs any valid actions. + ; + ; Preconditions: + ; + ; The puzzle board must be drawn. + ; The message area must be cleared. + + PLAY_WAIT_ACTION + + ; Displays tile movement. + ; + ; Preconditions: + ; + ; A valid move must have occurred. + ; 'tile_x' and 'tile_x' must be set to the tile's new position. + ; The cursor's position must be set to the tile's old position. + + PLAY_MOVE_TILE + + ; Displays the solved message and waits for input. + ; + ; Preconditions: + ; + ; The puzzle must be solved. + + PLAY_PUZZLE_SOLVED + +.endenum + +; Maximum number of that can be counted + +MAX_MOVES = 9999 + + + +.segment "ZEROPAGE" + +; Current playing game state + +play_state: .res 1 + +; Play state flags: ps------ +; +; p = Paused +; 0: Play is active +; 1: Play is paused +; +; s = Auto-solving +; 0: Auto-solver is inactive +; 1: Auto-solver is active + +play_flags: .res 1 + +; Position of the current tile being processed + +tile_x: .res 1 +tile_y: .res 1 + +; Number of moves used by the player + +moves: .res 2 + + + +.segment "CODE" + +; +; 'PLAY_NEW_PUZZLE' state +; +.proc new_puzzle + +.proc init + + jsr fifteen_gen ; Generate a new puzzle state + lda gfx_nt ; Prepare to draw to the off-screen name table + eor #$04 + sta gfx_nt + lda #0 ; Initialize the current position to draw + sta tile_x + sta tile_y + tay ; Reset and the number of moves used + sta moves + sty moves + 1 + jsr gfx_draw_moves ; Draw the number of moves to the screen + lda #GFX_MSG_CLEAR ; Clear the message display area + jsr gfx_draw_msg + lda #SND_MUS0 ; Start the background music + jmp muse_play + +.endproc + +.proc update + + ; If the current position is the gap, erase any tile that might be + ; there, else draw the tile at the current position. + + lda tile_x + ldy tile_y + cmp fifteen_gap_x + bne draw_tile + cpy fifteen_gap_y + bne draw_tile + jsr gfx_erase_tile_bgd + jmp next + +draw_tile: + jsr gfx_draw_tile_bgd + +next: + + ; Advance to the next tile. + + inc tile_x + lda tile_x + sec + sbc #FIFTEEN_WIDTH + bne update + sta tile_x + inc tile_y + lda tile_y + cmp #FIFTEEN_HEIGHT + bne done + + ; Begin play if the puzzle board is fully draw. + + lda nmi_ppuctrl ; Switch the visible name table to one drawn to + eor #$01 + sta nmi_ppuctrl + lda #$1E ; Enable rendering if not already enabled + sta nmi_ppumask + lda #PLAY_WAIT_ACTION ; Change the state to 'wait_action' + jmp change_state + +done: + rts + +.endproc + +.endproc + + + +; +; 'PLAY_WAIT_ACTION' state +; +.proc wait_action + +.proc init + + rts + +.endproc + +.proc update + + ; If auto-solving is enabled, perform the next move provided by the + ; auto-solver. + + bit play_flags + bvc test_move + lda fifteen_gap_x + sta tile_x + lda fifteen_gap_y + sta tile_y + jsr fifteen_solve + jsr fifteen_move + lda fifteen_gap_x + sta gfx_cursor_x + lda fifteen_gap_y + sta gfx_cursor_y + lda #PLAY_MOVE_TILE + jmp change_state + + ; Else, attempt to move the tile under the cursor if 'A' is pressed. + +test_move: + lda joy_pressed + lsr + bcc done + lda fifteen_gap_x + sta tile_x + lda fifteen_gap_y + sta tile_y + lda gfx_cursor_x + ldy gfx_cursor_y + jsr fifteen_move + bne done + lda #PLAY_MOVE_TILE + jmp change_state + +done: + rts + +.endproc + +.endproc + + + +; +; 'PLAY_MOVE_TILE' state +; +.proc move_tile + +.proc init + + ; Play the tile movement SFX. + + lda #SND_SFX0 + jsr muse_play + + ; Initialize the tile sprite. Note that the tile sprite starts under + ; the cursor and must move to the new position of the tile that was + ; moved. + + lda gfx_cursor_x + sta gfx_tile_sx + lda gfx_cursor_y + sta gfx_tile_sy + lda tile_x + sta gfx_tile_x + lda tile_y + sta gfx_tile_y + jsr gfx_init_tile_spr + jsr gfx_pos_tile_spr + + ; Erase the moved tile from the background. + + lda gfx_cursor_x + ldy gfx_cursor_y + jsr gfx_erase_tile_bgd + + ; Update and draw the number of moves used by the player. + + lda moves + cmp #MAX_MOVES + beq done + +update_moves: + inc moves + bne draw_moves + inc moves + 1 + +draw_moves: + lda moves + ldy moves + 1 + jmp gfx_draw_moves + +done: + rts + +.endproc + +.proc update + + ; Update the tile sprite. + + jsr gfx_update_tile_spr + beq done + jmp gfx_pos_tile_spr + + ; Continue play if the tile sprite has reached its destination. + +done: + lda gfx_tile_x + ldy gfx_tile_y + jsr gfx_draw_tile_bgd ; Draw the moved tile to the background + jsr gfx_erase_tile_spr ; Erase the tile sprite + + ; If the puzzle is solved, switch to 'solved' state. + + jsr fifteen_solved + bne unsolved + lda #PLAY_PUZZLE_SOLVED + jmp change_state + + ; Else, go back to 'wait_action' state. + +unsolved: + lda #PLAY_WAIT_ACTION + jmp change_state + +.endproc + +.endproc + + + +; +; 'PLAY_PUZZLE_SOLVED' state +; +.proc puzzle_solved + +.proc init + + lda #0 ; Disable the auto-solver and pausing + sta play_flags + lda #SND_MUS1 ; Play the puzzle solved music + jsr muse_play + lda #GFX_MSG_SOLVED ; Draw the solved message to the screen + jmp gfx_draw_msg + +.endproc + +.proc update + + ; If the solved music is still playing, then continue waiting. + + muse_music_playing + bne done + + ; Else, continue waiting until the player presses either 'A' or 'B'. + + lda joy_pressed + and #$03 + beq done + + ; Else, generate a new puzzle and begin playing. + + lda #PLAY_NEW_PUZZLE + jmp change_state + +done: + rts + +.endproc + +.endproc + + + +.proc play_init + + ; Draw the playing state's PackBits encoded name table to both name + ; tables. + + lda #$20 + sta PPUADDR + sta gfx_nt + lda #$00 + sta PPUADDR + sta play_flags ; Initialize the play state flags + sta gfx_cursor_x ; Initialize the cursor to top left-hand corner + sta gfx_cursor_y ; of the puzzle board + lda #play_pkb + sta pkb_src + 1 + jsr pkb_to_vram ; Write background to the first name table + lda #$24 + sta PPUADDR + lda #$00 + sta PPUADDR + lda #play_pkb + sta pkb_src + 1 + jsr pkb_to_vram ; Write background to the second name table + jsr gfx_init_cursor ; Initialize the cursor sprite + lda #PLAY_NEW_PUZZLE ; Change the play state to 'new_puzzle' + jmp change_state + +play_pkb: + .incbin "play.pkb" + +.endproc + + + +.proc play_update + + nmi_wait ; Wait for the end of the next NMI + jsr joy_update1 ; Read the current joypad state + + ; If play is is not paused, continue to test input. + + lda joy_pressed + bit play_flags + bpl test_pause + + ; Else, if the player has pressed 'Start' then unpause the game and + ; the background music. + + and #$08 + bne unpause + jmp update_done + +unpause: + muse_toggle_music + lda play_flags + and #$7F + sta play_flags + bpl test_solver + + ; Test if the player has pressed 'Start' and pause play if so. + +test_pause: + and #$08 + beq test_solver + muse_toggle_music + lda #SND_SFX1 + jsr muse_play + lda play_flags + ora #$80 + sta play_flags + bmi update_done + + ; If the auto-solver is not enabled, continue to test input. + +test_solver: + lda joy_pressed + bit play_flags + bvc test_solver_on + + ; Else, if the player has pressed 'Select' then disable the auto- + ; solver. + + and #$04 + beq test_done + lda play_flags ; Disable the auto-solver + and #$BF + sta play_flags + lda #GFX_MSG_CLEAR ; Clear the message display area + jsr gfx_draw_msg + jmp test_done + + ; Test if the player has pressed 'Select' and enable the auto-solver + ; if so. + +test_solver_on: + and #$04 + beq test_dir + lda play_state ; Skip if the puzzle is already solved + cmp #PLAY_PUZZLE_SOLVED + beq test_dir + jsr fifteen_init_solver ; Else, initialize the auto-solver + lda #GFX_MSG_SOLVING ; Draw the solving message to the screen + jsr gfx_draw_msg + lda play_flags ; Set the auto-solver flag + ora #$40 + sta play_flags + bne test_done + + ; Test the directional buttons and move the cursor if so. + +test_dir: + jsr joy_repeat1 ; Only apply repeat for directional buttons + lda joy_pressed ; Test for move cursor right + bpl test_left + ldy gfx_cursor_x + cpy #FIFTEEN_WIDTH - 1 + beq test_left + inc gfx_cursor_x + +test_left: + asl ; Test for move cursor left + bpl test_down + ldy gfx_cursor_x + beq test_down + dec gfx_cursor_x + +test_down: + asl ; Test for move cursor down + bpl test_up + ldy gfx_cursor_y + cpy #FIFTEEN_HEIGHT - 1 + beq test_up + inc gfx_cursor_y + +test_up: + asl ; Test for move cursor up + bpl test_done + ldy gfx_cursor_y + beq test_done + dec gfx_cursor_y + +test_done: + jsr gfx_update_cursor ; Update and position the cursor + jsr gfx_pos_cursor + jsr update ; Call the current state's update subroutine + +update_done: + + dec nmi_draw ; Inform the NMI that its time for a redraw + rts + +update: + lda play_state + asl + tax + lda update_table + 1, x + pha + lda update_table, x + pha + rts + +update_table: + .addr new_puzzle::update - 1 + .addr wait_action::update - 1 + .addr move_tile::update - 1 + .addr puzzle_solved::update - 1 + +.endproc + + +; +; Changes the current game state and calls its initialization function. +; +; In: +; a = The playing state to change to +; +; Destroyed: Assume everything +; +.proc change_state + + sta play_state + asl + tax + lda init_table + 1, x + pha + lda init_table, x + pha + rts + +init_table: + .addr new_puzzle::init - 1 + .addr wait_action::init - 1 + .addr move_tile::init - 1 + .addr puzzle_solved::init - 1 + +.endproc + diff --git a/nes15-1.0.0/src/title.inc b/nes15-1.0.0/src/title.inc new file mode 100644 index 0000000..9473bfe --- /dev/null +++ b/nes15-1.0.0/src/title.inc @@ -0,0 +1,29 @@ +; +; File: title.inc +; Namespace: title_ / TITLE_ +; Code Segment: CODE +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Title screen state module +; + +.ifndef TITLE_INC +TITLE_INC = 1 + +; +; Initializes the title screen state. +; +; Destroyed: Assume everything +; +.global title_init + +; +; Updates the title screen state. +; +; Destroyed: Assume everything +; +.global title_update + +.endif + diff --git a/nes15-1.0.0/src/title.s b/nes15-1.0.0/src/title.s new file mode 100644 index 0000000..6947d28 --- /dev/null +++ b/nes15-1.0.0/src/title.s @@ -0,0 +1,70 @@ +; +; File: title.s +; Copyright (c) 2011 Mathew Brenaman (see 'LICENSE' for details) +; Assembled with ca65 +; +; Title screen state subroutines and data +; + +.include "joy.inc" +.include "lfsr32.inc" +.include "pkb.inc" +.include "ppu.inc" + +.include "game.inc" +.include "nmi.inc" + +.include "title.inc" + + + +.segment "CODE" + +.proc title_init + + lda #$20 ; Draw the title screen's Packbit encoded name + sta PPUADDR ; table data + lda #$00 + sta PPUADDR + lda #title_pkb + sta pkb_src + 1 + jsr pkb_to_vram + jsr joy_update1 ; Initial read to clear out pressed buttons + lda #$1E ; Enable sprite and background rendering + sta nmi_ppumask + nmi_wait + rts + +title_pkb: + .incbin "title.pkb" + + +.endproc + + + +.proc title_update + + jsr joy_update1 ; Continue waiting until the player presses any + lda joy_pressed ; button + beq cont + lda #$00 ; Else, disable rendering + sta nmi_ppumask + nmi_wait + lda #82 ; Seed LFSR with the only available entropy + eor nmi_count + sta lfsr32 + sta lfsr32 + 1 + eor nmi_count + sta lfsr32 + 2 + sta lfsr32 + 3 + lda #GAME_PLAY ; Change the state to 'play' + jmp game_change_state + +cont: + rts + +.endproc + diff --git a/nes_instr_test/nsf_singles/01-implied.nsf b/nes_instr_test/nsf_singles/01-implied.nsf new file mode 100644 index 0000000000000000000000000000000000000000..42fc4dd8bcee20a10a16470d26419605536aaaf9 GIT binary patch literal 32896 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 literal 0 HcmV?d00001 diff --git a/nes_instr_test/nsf_singles/03-zero_page.nsf b/nes_instr_test/nsf_singles/03-zero_page.nsf new file mode 100644 index 0000000000000000000000000000000000000000..28a5f9ed4eb3338a59c3086ed7d02298c0a9cfa0 GIT binary patch literal 32896 zcmeIy|8E;-836FdXFGOXNNmUX(q`%2juEmlXi7Jc{y>$iPB?ehq{Pw0pkH2haqG~~ zmXxuzY$J5NtO_$^lLn>2Q{~2Kt~4X7Rf$${KqQYXH z*J;%v{s1)TImOT2`{kay`{aF}j<)Ew)eeUP2KMC#OrV1VNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNb3V<@nY1`X7ZTB!yH1MKrgCXfPGCYSpi$`8SroGU65=Scz-_pIKAe>zWzR?aaLer}7I!IclVxBWo@O{`Bj4-TnTo zf02)@5wqPn_KrEZE31}I?#`+e>`;y+a^}4}>5*8MnRZQI$)-HgtbRjlN!GMz!)m<- zY}dS2#K6^6r#;8nq>@!vPj1Vqb(0-g^&a-j{0KYYxA@fHeK@>U3@?q=pDLX*tK`h; z(Yld)8WoS^onz~=3H%M=?z_P2{gn}8$~=Gj_mt<%GglY8kA1lD>t`QT-}vU`)c*Fx z-woC8Nk3}5wW?wIW4Pw;e&vM)6%_zF%jMWo~Ma#}q5mfI)g(@-d5(HuLT zd%ax0o)}A*fD@2a^nV#WKq}SWmdM5tW+ruv8nnlBh4IegEG%3-XJcKtV_^pq) z=9%$K+}t_=1^3p1Ygp2O&w%d0=lzkrlS|b07WIGJ?wQ3NT$gjp-GAo`|8?+7)!eKu zxSO0P!g0gno~hP~YCsKQbqMkMtDBl+Q3TT7_R!wSy}@q`*J33IMgFFSGL?}x)yhmT z@;nxWK!nZeSJc30Rf4mXxUDV*B1HtA^eNatCnk)T9LqQrGauG z{~AcT6ZfL6SCz&${_nW0yX+r=lywYOjZ0F&kK0kL7HMtUvx_&wS~ZGhpfR%H761;)tEK9WY(T{OPsakl_le8 zC2l@FmoA=S$MQ1%559%ENl8j5C-ZED$zr9yqQRar*sn~sWN>yS&*rgg;df{cVcK(J zIH?gU3|~$&ombv6W%hm^t5ZU0&5N&EGG-hT4z8EW+NL{hxD;CNwAhQHeqrC%JAGPF zJO$3Z0x57}`N!gqrN318|2k#Qrof@!OkoAfbe;)Z=l28(K`|iAUX_+EIEwjz$b;BRwuCh&^eiIXT#ZxwjENe?y#6EN+t6Gwd zmZY<#cPS~gXca4(lF)*azbNLtS(?{;ZG+#&dD!a`DRzmW$8V+ZZI2y39Pa^N_~3y! zw8wh;;yu1wXZ9)ZMGkyB-hUw0$Kw6{2m7IE(;OsjXok`XP3y(+7ZUsRvLXI(v8WBvyOqc?N_ literal 0 HcmV?d00001 diff --git a/nes_instr_test/nsf_singles/04-zp_xy.nsf b/nes_instr_test/nsf_singles/04-zp_xy.nsf new file mode 100644 index 0000000000000000000000000000000000000000..739acb0f41bed141d3aae3ec3a1db6ba8c83096b GIT binary patch literal 32896 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 literal 0 HcmV?d00001 diff --git a/nes_instr_test/nsf_singles/06-abs_xy.nsf b/nes_instr_test/nsf_singles/06-abs_xy.nsf new file mode 100644 index 0000000000000000000000000000000000000000..3414986923ac8adcc96a74faa65c6e00ee0d5573 GIT binary patch literal 32896 zcmeIzeQ*@z836F-_U@A7u(`W@Lr8d0r>00tM6F<3y+9K0a7i@Bv|RbfUdYi4W&$QE z#QH(23mDlplu;sMTD;~0i>3xzMv`fu)u}ZZTW`vAz$xmT_pzI_l%s>t63O-1+siPW z_8b?6bGOyzfhWt!LF-gTVkhzL(gM1Ug871W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq;sfC7_2kU=aI3&i}L4)(Qp$k7L;P<|hnLj`@16DsV3 zTs3@-FN^Ois&yO*<*x^m=m-_82eX(TDqIgaV!SKv)$8s1VqhEqxf{9f4rA1L?18RZ%HM0pw%r3)@7*WilsFGwrp z`06=eQ@;fz>N1$Gu7}%HFDzC+f_u~t;eK@g`Z;u|^Wi!5 zevs5A*sneduc@!X>*^W3X=GT^AlK!}P>e0>7mp!#Rf;Vk@ z;L>lOi2eESTep7s9ovHDzyGiErPueV(!RPEl;5mf_rW#(_Q^%}?q9sgxMX?H=ud7d zTXOQ9f1K}V*wfKFw)gbxoQ8q%WxtGG4!rWzcfLK_)_Y@%aB`BrlCZegT``$4Um{Q` zSX|wFZp`B9&0H;kOz0j_@nHF}BbdP!#$7A%V6Ire^%a{IgfVLm*P7E>#rqOt))XSf zU0ON8rI*EM)!V(UgOJK$o)~*Rb~G=1IdC|T%u5-Bq)n?)KGxE6Q*g05(K0mE+QN>- zmTC`aEhJPyDtcn|8WTK77NMZl)1`?A_6XWoc_gfT6Bo{xH}XIw-#4bxwK6nXsIjQ zRIn+3b5AMm1cmPNVqvJjeL^e<<-4E5O~K)2W_en75Xm&&he)_g2FWDIJ8(??STYFmki-eHPcjNYVP~mq5=#Ue684z6{?e4= zpur`>-jdycy(P(#FqbTS!^{b+Ho;HFxAXqw_OrqC0rta$3;za>qOQbo0lqiEW+j;~ z^DiA|+v4nGl1;}2_VWZQj%G~cyRht$!gz4GN85_9Z{_tqIgMKQikF}djJW;d=8s!{X5;_ch&tW}hVa!O zc5!O>st`1%EHYpxhYc6jlE150()Dr159V;VO-ebOq*MD|qnj%6eQ<$Sl#W9`8(QuZOq@%v84m5 zzW!BTb7#}`E~xj^v8`>sE`JBx=xf8LGA-8O-}rb(XX_LGwl3gns+n)mnr!r9^k&;@ zFnYnWS|8V=7u@wLGUGM1daU;FdcLPI6B`@!c4LFyuCB@EWg^yFuDA8*g@#7Gz8<|$ zU0;)_qem~)X6xwD3oBMVlo{8f7gjf5ySWp;;KuJfd_(rxMjn4fri!PrcBW7JWqO}? z=B{SN%-h@^{0@CITg3}ARq!jbRj@Bx1^d?MRnWK^ZSh$z%+y2IY&|ceZ|wgO$|eC4 qAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}f&UMI=H!(`bMoJF%CP$Y literal 0 HcmV?d00001 diff --git a/nes_instr_test/nsf_singles/07-ind_x.nsf b/nes_instr_test/nsf_singles/07-ind_x.nsf new file mode 100644 index 0000000000000000000000000000000000000000..568707ed5aa977ff21ee75b975268d96dd73d7ef GIT binary patch literal 32896 zcmeIz{cjUx902g=p0;bLxV7CY48}9?hk>9YV!*_hPBy%e<0YFv;0y2+R=mnGaG(Mv z%FAvcz?o^HA&WCm*2zrSFv0h~LZZ zxqH6P+x2tL_qMXGam92&5XkP=;=2RQjOYDj_Qn;2l6knuhEy+^~&l9Io)KkofK>hFS-jmKM#JGwCPd*G zD~_{rW8l>&`!mYEi$*HSLiQoQo{Y>&*`!m3w95$Fx+~6le;ypw9an}ucX)S&)!Pwc z7ZU^PqDub2`lwRCw#JwoGiPztNm)Z8Y(M`=w983{^?RCME%j?1%1n*0icu{M1y`mW zakjAmDXL5#SP@mq2UbRv8SL57ZnocZooi_&tx?4S6f~PcVPNAZ1j+~7XT!Kk7^kKw z3{;5?Myi6XXJ%(M7?~zUruUS0|)HTB9MP)b-z|aWOkBT;19F zVetq_<*~*XYm1%E*YC>5Wivk|aI?UgW9Cp($JFqX$s0}me}$UZnb;Dm;)aSFDpRVZ z#+Y~j2FrXR*KRn6oc;Hg_mh-kdCJ~Fb;5^;F2H&}v5PUeER@!7=OV)pf%iI+4d3Ep z|2p{P5^k2H9Mv`u;jrQ1wU)pu_9{Nejw1e8Np-boB|+G=tY}l=Cg1BFWsnI)^}j1c zk;3|ON@2uTzYmhaThE5|Yl^q0Smx{z*p_F#^=SYe_S}{74V6%sTPicya|uyg~T(3GoqM6E764lE! zqT0E(8``wrRDo;#D&<;0wec`-FVpNwDTgM0$U(cyQr;tisF4p!_sbuYnx#55%T72b zXLWID+}I%n6FWx2=}xvcF2Xx_19VkNW$AF7O-Zmo<}Yoqw+;4Xf{h!T9gDN0koNF9 zv_&v&?{Vl<1sTe-)0~e>UnN9#B@WpwOEq!pSB)D(LchTEd{KL5(hask&18)ovhp8d z%O_)6+FFJ5enh&64L*PH@q?YMlH9@sgm#96;#$wuMum`m!YkyX`=G&=-d=GX0j^Sm;SYKZx3`Db`s{FHKD0ULDxBE!afd zwOd+(WLY589Bgt=T-hAru5Z~MY;6fNvtVoMmR3@|ctNP8Y5fkevT+&P+8o#!Y-Jk* z%`hlaW39oBZ?TOFxAF+3}H400mG01yBG5 mPyhu`00mG01yBG5Pyhu`00mG01yBG5{(k}+68GX85`P1OBLj#4 literal 0 HcmV?d00001 diff --git a/nes_instr_test/nsf_singles/08-ind_y.nsf b/nes_instr_test/nsf_singles/08-ind_y.nsf new file mode 100644 index 0000000000000000000000000000000000000000..76e5ecbc5585134bd6fe36e3ab956b3139f2a8ad GIT binary patch literal 32896 zcmeIy{cjUx902g=uI<`Y+}iG~Y%m_snDL?xfjHEdPByqL$A+svh!OS_R%~$@u=&C; z#-ZG@OwNoSB+Eh*QrE#P47V8!TY@A@1h!yu247}EOxKsAEE;R%C7E&cd)>xjB4#PKFOLz9cYV-yG_`OZBJJ7<(xrV%dNe!f z)qW@EwL|2hww{b>FO%z94*5abK*E}vOlvLVj`jta)ou{Wtv`t4)=)}3JQWP~P%aF= zulOu2ijKS>ZKjFTTDqwDTS8+k8Yb%IBD5v`zn~f66VV(9&V6{ z0q&4FL*MeAxnO9i5Gw2|>RnbMnt974T@&`fw-dhI@Ez4J22#A<5`*4ydK*eX)4Q_6 z*4wwLhZS5|awa&u;_IU~>U;M4*1nf%ex~jFC$@#Je!2A2X5)pik>}qp{O(|1{U(3l z*yTpAqx!kplc5Y+dGb_p^5MlfJuTjkSp>Qss^OqQ#3!uI)=zBQ+Qs`b{H3BNHf~MAFOLd(Iws7eg|l_8-z}Ub$qed_ z&|{IIEcKr6tWV2Ia!kwCb1WZk=voqdI&r&U@K1jO9gdXg9V>LK(8(+n-4US^ZuYVH zzjNC>ZXTSe9wbRqb<)_ytAvdcm4oN~NXH^Rr$43MS%^$P1m5lBT=+LO{f~oP$!A)A z(o|{y5e5Yhb(asX*)BO?b>y~rkza>7c;t@>5U4dql_lyX9j zs*hk%*sJJ-dQ-CZ<@p$W1WNOQy($I36SjL|R#YZD;aCKvgYa=?i+w-495hZHVkEz zwc3el?Xca2B?QiI?L7y%vKN?i0&n`oEfuj&p+?Q?mqR^P(G+Liu8k9@qB(h*dAfl$8Dy z(*G$55Cd#~u=&B(m)`h(8BI(C2&c{jA;c%t85T4pEee4k4;=w=DX-0Cn$w4hAIRWg zf08qJ+3xZ&2Gt}Rc!iUVyhTtRrPC4R4Ah{~px0-KWu1|?@g;1)$S3o4ZGF2!M+e|EY|0l`TV@v=2tf5ECs#I5QKB(UgDS+8eVna-lGLr%_f$(&0z zxcsv+?^3ceOJ(AM$|uW#MYe_8s%F+Pa09`=u@OvGR%sS2Y#$vC7)Ig)Cz2 z{8gR!;NH5*h1i39V)?7{v5GAVPpfh-WKKPN%fu)Opa2S>01BW03ZMWApa2S>01BW0 b3ZMWApa2S>01BW03j9X}_QdbU_Qd}NZb|ij literal 0 HcmV?d00001 diff --git a/nes_instr_test/nsf_singles/09-branches.nsf b/nes_instr_test/nsf_singles/09-branches.nsf new file mode 100644 index 0000000000000000000000000000000000000000..327a38753ae54b58545395c33a0dbd64f8e0bac3 GIT binary patch literal 32896 zcmeIye{2&~902fl*LLlyZf)0Xg#mkje@s*?5##tr3pjF}$AT;&(FnZ4idS6*cK!fk za0<7K$!Yn6WSKOXbsf8f%9ugf5;WltLl;c$9|IFXZ7uCvmvS6OdS1)*;>(**pTh5 zZE=q!Jv)h2b|-6g5}WKvdUuivx#l9V%ifV%MmRq3LC=S!`_~vbW^5y$8X7ri_{nF6 zi+pYr$!TMpq>KaPD?{Vu72=CCq{Q)7hl>V!5{W^|>F|3RM`=TL@>QMYb^48-Z1hE} zX{r^Hv}h5}X2tii3CnQfdG}BIXEfX8Y1eHw+-OGIGW1e@a+fYwP43p^YI-0;rHnzD zV(01he4^sw`+D5YPiuG8fKne&WAbv9Q0I(Vf`-XUhU`aIPKvs`baJaMH%zwa@-o^q zGrY3T^)s95T|HEJbk*b$U0xwC8CgDP2Chgh5t2(s8itoOiFV#`jjqupIQ!uofOE?H zl3W4J@Txx7rIFQxOkX?k<6-A7r}DRy8>jxTUL8ODd@3FJdicudv9sHcYsLewpxIgR zZq6al^%<4YP)=%M4xwMPXB@&nxphe8OaD{>4(iE_K?Gfs6IN0}f%&05c{1y;lQ1DQPb!tg=%N|%AUiN66-!GVp zAmP~J-B+{E^Loq&E5RH5P4*^hf*0hPq$hX;7KJ-Vr?u;{d!$xk^dTtK^X^~?fTvw| z#Hy@9c*rgKvh=yUpgt~FsfJuFL8+=loXCAic+CR!UC?UF^H2YKzMxqPpAcT>Vznur zFS?+_+t8521Hs4eHJnh&{&=InFbh9w2q4C3kTEVQta7_9!R>zNc` z!IDDQ4}@t=XNX?zTp_yFpc2K()E<~qZzvp7#}%HbA;rQHtk2u^?lNbdZS+B4c{3X&uB|doX;K=oLFG{gUt`NzVgQR>r`PnPB?8Y0YiL2 zn_~%E(V-F;G^vd+x1vYf?Shn!LyP`H3%2}I@+Ps-Y$)+9UwynkdzBOpJ z+eEW%dC6=yx0~$_vn@UFtr8!I0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVe QfCB$DsQ_3S;sD11kPu1dQ{GmPE*H9%Qj3;ve8GTk$Fra6<+C zz(B4cbGHl=&9bD)tn1(=lR-klmJAa<7`A9~-$X;qt#>VD(by0CNoHJqu7fPZFMKsV zm+pP{{<-IRzdp~qV{2slGLGX&*Sls{mf(c~D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2 zD1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVe zfC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch z0w{n2D1ZVefC4D+9~78P5tYaRxl;BgeDrxE?Mo7S+MgtjbY+s1r2|Rg%xgErS|d@l z)i;v%?he?a(&4%RE5K9fr9yhyaP83YQ15ZBr;F=7!S&2@ zy+y8vaJ?MY!*imOcgZUxnM(4?#HxwJ>fz8pKV7eNB!O&B+xKWUWfXOXhck*KCmLd9A9nzUklVdCi{hCA`k{RgLm|!3)_gSB!GJ z>{&>CxNj7mamf^b+IG>?c+5vM_i684s4l=}u%GTVpoOAhQ2mDYg;BzqiV9&r5vGOC z6TLL}k?2~jN)$Vk0j#ONDI8PB6rQP3#l})B5mfDR4TB}tYbisN_t|Y3WQ& zu14c?!SfED(XFO9ZyXh4*`qg7#Q}QK6yP`b0CW|em&AUPmS<_S^eGzjV}oAJ(s_f? zZ%ld;P6c=mbu)w=IR~3UP{3><%%mxPpB3nJ6N+CFx0u#j%^OqP7{@e^puV)|2C1-R zaYTEp;{oQH7w6QX^%OGlB}oz+9Di{5!O>Sb_2qs6Sy~qln80u6EhUStb@6ML(i9MaG@or;-}g6ERX*$1<{*H}ddfyC z%F0p{s}4D(Dy(o}#TJgwD|}e3C~r_m7&gCX?YmOi*LZuQHxK(@)^3H^V=cY;AcVUm z+SwUvBkorZ9gLA}(Rh2T&HbRKtBJem;E`Cz!Du^;b#xr+AR8N=>pT)|JwSFuw$a1w z(POa=+8S+#n@S_v5o`Uhqci?dto;~i5w^fz3uzId7hA~AT@kV~vWpZS{~*JiD1ZVe sfC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0x0mm7uc7*Z|=+f19Ex9E&u=k literal 0 HcmV?d00001 diff --git a/nes_instr_test/nsf_singles/11-special.nsf b/nes_instr_test/nsf_singles/11-special.nsf new file mode 100644 index 0000000000000000000000000000000000000000..5a115707ddd04190ae2c8facb1f03cfdb2374ce1 GIT binary patch literal 32896 zcmeIyUuauZ90%}oZ_*@-+BW?g9KsRz&}|M=-DU-mOkBCCcVn!+=!2eYx!sM%wkD}t zeH!YWW9~}#APk`}qSc+TYF81)K!rVsDJu8PJ&1(dq}~<92)aSV#&d4Fl`&srPlIm= zxt#O+p5HzB-mh2dg!t!jBNed+ zeI;a;i61q~;k6}Uxui`l`NiKh(fY_zIpJ4%(;qa~q7fN=@@BN8kej#G-*E53AMg&h zytJfWuSGPvy~-&~*UUZ^(N5^$YD7Eje@0CIa^jNsi9Fg-Jtq=$i>nQZ7uBk!wz*AS zSUEbSW<%M8p01Unjev~Ec1&AsE3VPi@oDW0X@ux-mA+lQ(CS<>&zg&^4TUYX$sP}s zGgJ4L9`UYb=KjuR=zMiR4x(ZZ6@v{4eYmQf5Q|N=_Pwu$%i+1@p*hlM8EOQlREMxK zaTIaCAL-?)8P7JIKX1$|h#B6bS5~KgXG^!d*f%|Fv8U0J2nZ3TZ*)1adU(@{SshlV z)x|dTBof-O?%lCcWUy@yJ?_${>Kfl_wem%)&7|X1PW1WOr$luE;vjlXw_ktk z_PXZ;z4wS(QKq_QRkhJh&8pQltEg71Xd(t;-K@CBd`%P7feWnzlQH5%kGKCtH@X6w z$;eBt_!N&VD-rIt@0cYl)wBuwo-n8HJgNAD??}bj$cY_f{HUn$pKXQlIa_5sZ3kG1 z9gFjz)yqVQoorD*iZ^0s6pfQpy~oW{y^Fn$x)?v-qB6R>rmwh1bfbRcN~!q)eY2*C z-#|QsL_Vte=^EWor)mG)bm?K2epRO{E~6jTXt?5=@a>}Qxw9hFC;p_^YMU=>`qy=h zep{oL>!!Y|Cco8+TUO>2=Co@3iFG$|6n3qT=t*fL=7!eicvEPJTf9%ENnn};r%B5+ z2~Cr*=lpufTbL$_vs@BWs^=`TQcEMkiI`NyKohL& zY3JbJW?C@ECUO~i$S6`Xd&r~*CW{6g$&bBCH|g{8 zi(2ZxYh-A6|BcG{M8WhI(6JFZY8)xj>}a8wr`u>hd3yh|x5Ns?baA3U4`+*FAK7Ao zZl~$d4BbHsM)9_=+=NjmP}yWFeUvos@V^<$ApijgKmY;|fB*y_009U<00Izz00bZa V0SG_<0uX?}{}VV+zg|-+{{n65y#xRN literal 0 HcmV?d00001 diff --git a/nes_instr_test/readme.txt b/nes_instr_test/readme.txt new file mode 100644 index 0000000..cb78006 --- /dev/null +++ b/nes_instr_test/readme.txt @@ -0,0 +1,364 @@ +NES CPU Instruction Behavior Tests +---------------------------------- +These tests verify most instruction behavior fairly thoroughly, +including unofficial instructions. Failing instructions are listed by +their opcode and name. Serious errors in behavior of basic opcodes might +cause many false errors. + +The *_singles/ test all instructions, but test the official ones first, +so you can tell whether you pass those even if your emulator hangs on +the unofficial ones. + +The nsf_singles builds audibly report the opcodes of any failed +instructions before the final result. + + +Internal operation +------------------ +Most instructions are tested by setting many combinations of input +values for registers, flags, and memory, running the instruction under +test, then updating a running checksum with the resulting values. After +trying all interesting input combinations, the checksum is compared with +the correct one (what a NES gives) to find whether the instruction +passed. This approach makes it very easy to write the tests, since the +instructions don't have to be each coded for separately; instead, only +the different addressing modes need separate tests. + + +Instructions +------------ +U = Unofficial +X = Freezes CPU, so not tested +? = Inconsistent/unknown behavior, so not tested + +00 BRK #n +01 ORA (z,X) +02 X KIL +03 U SLO (z,X) +04 U DOP z +05 ORA z +06 ASL z +07 U SLO z +08 PHP +09 ORA #n +0A ASL A +0B U AAC #n +0C U TOP abs +0D ORA a +0E ASL a +0F U SLO abs +10 BPL r +11 ORA (z),Y +12 X KIL +13 U SLO (z),Y +14 U DOP z,X +15 ORA z,X +16 ASL z,X +17 U SLO z,X +18 CLC +19 ORA a,Y +1A U NOP +1B U SLO abs,Y +1C U TOP abs,X +1D ORA a,X +1E ASL a,X +1F U SLO abs,X +20 JSR a +21 AND (z,X) +22 X KIL +23 U RLA (z,X) +24 BIT z +25 AND z +26 ROL z +27 U RLA z +28 PLP +29 AND #n +2A ROL A +2B U AAC #n +2C BIT a +2D AND a +2E ROL a +2F U RLA abs +30 BMI r +31 AND (z),Y +32 X KIL +33 U RLA (z),Y +34 U DOP z,X +35 AND z,X +36 ROL z,X +37 U RLA z,X +38 SEC +39 AND a,Y +3A U NOP +3B U RLA abs,Y +3C U TOP abs,X +3D AND a,X +3E ROL a,X +3F U RLA abs,X +40 RTI +41 EOR (z,X) +42 X KIL +43 U SRE (z,X) +44 U DOP z +45 EOR z +46 LSR z +47 U SRE z +48 PHA +49 EOR #n +4A LSR A +4B U ASR #n +4C JMP a +4D EOR a +4E LSR a +4F U SRE abs +50 BVC r +51 EOR (z),Y +52 X KIL +53 U SRE (z),Y +54 U DOP z,X +55 EOR z,X +56 LSR z,X +57 U SRE z,X +58 CLI +59 EOR a,Y +5A U NOP +5B U SRE abs,Y +5C U TOP abs,X +5D EOR a,X +5E LSR a,X +5F U SRE abs,X +60 RTS +61 ADC (z,X) +62 X KIL +63 U RRA (z,X) +64 U DOP z +65 ADC z +66 ROR z +67 U RRA z +68 PLA +69 ADC #n +6A ROR A +6B U ARR #n +6C JMP (a) +6D ADC a +6E ROR a +6F U RRA abs +70 BVS r +71 ADC (z),Y +72 X KIL +73 U RRA (z),Y +74 U DOP z,X +75 ADC z,X +76 ROR z,X +77 U RRA z,X +78 SEI +79 ADC a,Y +7A U NOP +7B U RRA abs,Y +7C U TOP abs,X +7D ADC a,X +7E ROR a,X +7F U RRA abs,X +80 U DOP #n +81 STA (z,X) +82 U DOP #n +83 U AAX (z,X) +84 STY z +85 STA z +86 STX z +87 U AAX z +88 DEY +89 U DOP #n +8A TXA +8B ? XAA #n +8C STY a +8D STA a +8E STX a +8F U AAX abs +90 BCC r +91 STA (z),Y +92 X KIL +93 ? AXA (z),Y +94 STY z,X +95 STA z,X +96 STX z,Y +97 U AAX z,Y +98 TYA +99 STA a,Y +9A TXS +9B ? XAS abs,Y +9C U SYA abs,X +9D STA a,X +9E U SXA abs,Y +9F ? AXA abs,Y +A0 LDY #n +A1 LDA (z,X) +A2 LDX #n +A3 U LAX (z,X) +A4 LDY z +A5 LDA z +A6 LDX z +A7 U LAX z +A8 TAY +A9 LDA #n +AA TAX +AB U ATX #n +AC LDY a +AD LDA a +AE LDX a +AF U LAX abs +B0 BCS r +B1 LDA (z),Y +B2 X KIL +B3 U LAX (z),Y +B4 LDY z,X +B5 LDA z,X +B6 LDX z,Y +B7 U LAX z,Y +B8 CLV +B9 LDA a,Y +BA TSX +BB ? LAR abs,Y +BC LDY a,X +BD LDA a,X +BE LDX a,Y +BF U LAX abs,Y +C0 CPY #n +C1 CMP (z,X) +C2 U DOP #n +C3 U DCP (z,X) +C4 CPY z +C5 CMP z +C6 DEC z +C7 U DCP z +C8 INY +C9 CMP #n +CA DEX +CB U AXS #n +CC CPY a +CD CMP a +CE DEC a +CF U DCP abs +D0 BNE r +D1 CMP (z),Y +D2 X KIL +D3 U DCP (z),Y +D4 U DOP z,X +D5 CMP z,X +D6 DEC z,X +D7 U DCP z,X +D8 CLD +D9 CMP a,Y +DA U NOP +DB U DCP abs,Y +DC U TOP abs,X +DD CMP a,X +DE DEC a,X +DF U DCP abs,X +E0 CPX #n +E1 SBC (z,X) +E2 U DOP #n +E3 U ISC (z,X) +E4 CPX z +E5 SBC z +E6 INC z +E7 U ISC z +E8 INX +E9 SBC #n +EA NOP +EB U SBC #n +EC CPX a +ED SBC a +EE INC a +EF U ISC abs +F0 BEQ r +F1 SBC (z),Y +F2 X KIL +F3 U ISC (z),Y +F4 U DOP z,X +F5 SBC z,X +F6 INC z,X +F7 U ISC z,X +F8 SED +F9 SBC a,Y +FA U NOP +FB U ISC abs,Y +FC U TOP abs,X +FD SBC a,X +FE INC a,X +FF U ISC abs,X + + +Multi-tests +----------- +The NES/NSF builds in the main directory consist of multiple sub-tests. +When run, they list the subtests as they are run. The final result code +refers to the first sub-test that failed. For more information about any +failed subtests, run them individually from nes_singles/ and +nsf_singles/. + + +Multi-tests +----------- +The NES/NSF builds in the main directory consist of multiple sub-tests. +When run, they list the subtests as they are run. The final result code +refers to the first sub-test that failed. For more information about any +failed subtests, run them individually from nes_singles/ and +nsf_singles/. + + +Flashes, clicks, other glitches +------------------------------- +Some tests might need to turn the screen off and on, or cause slight +audio clicks. This does not indicate failure, and should be ignored. +Only the test result reported at the end is important, unless stated +otherwise. + + +Text output +----------- +Tests generally print information on screen. They also output the same +text as a zero-terminted string beginning at $6004, allowing examination +of output in an NSF player, or a NES emulator without a working PPU. The +tests also work properly if the PPU doesn't set the VBL flag properly or +doesn't implement it at all. + +The final result is displayed and also written to $6000. Before the test +starts, $80 is written there so you can tell when it's done. If a test +needs the NES to be reset, it writes $81 there. In addition, $DE $B0 $G1 +is written to $6001-$6003 to allow an emulator to detect when a test is +being run, as opposed to some other NES program. In NSF builds, the +final result is also reported via a series of beeps (see below). + +See the source code for more information about a particular test and why +it might be failing. Each test has comments and correct output at the +top. + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to avoid the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +In addition to the other text output methods described above, NSF builds +report essential information bytes audibly, including the final result. +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason as listed in the +source code by the corresponding set_code line. Examples: + +Tones Binary Decimal Meaning +- - - - - - - - - - - - - - - - - - - - +low 0 0 passed +low high 01 1 failed +low high low 010 2 error 2 + +-- +Shay Green diff --git a/nes_instr_test/rom_singles/01-implied.nes b/nes_instr_test/rom_singles/01-implied.nes new file mode 100644 index 0000000000000000000000000000000000000000..38211b4f8f3844500a3d4f4163969b0ebdfa38fc GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/nes_instr_test/rom_singles/04-zp_xy.nes b/nes_instr_test/rom_singles/04-zp_xy.nes new file mode 100644 index 0000000000000000000000000000000000000000..c875f3648c3ce03efde207a3a75b448561606156 GIT binary patch literal 40976 zcmeI1du&_P8Nff^Bu*Ag;=Ed?P1DmCbgUa5D-gD*q|kIuxoudT@z{XgqSSL(mWINp zTX~@fZdR&>g)yM&lu=oA=fDDiUGC&5%02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5%02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5%02v?yWZ=^?a5@AUsFiAkTHam8zA_#z>x2Aoc^?#n zEBe45uIz(CJw77OAMdVeEIS-7zZ>$^vT()SP@tBFEAIxoT5%i-)yn=V1#D8o!@C~I z3BCeb^_OA0{wh4IKMga!t@7lWqK}LoxUEfPu~tVrnkd4 z)2E<0eI9O4KMR}Eufg}y;jH}fXehLw*%CO%#fRAZ@qxP%?1oWx*=TsNt1W+US6mM- z$>hl|j>|j8LwN@mzf$(scSqv|e;RUrs2p6(qYK7Zi9T>oLM<8Clu%1q=NR*kC6_2Y z%OoraSd*SgNn`;|8-|zqWd*}9EGqLlQH?}@g`?Z1-_g%QZaaYLk z(Ae9DN*CRG_CI}|{^e78&r@q3Pes0a*IWORzjU=P@0y!>kN@<={zF&Z@SD-ePj9b& z7A>7VEnkr;^01X-8e=w>_8imkVdZ0oF@jw+?pcQq^NjgD zUo7QN28(;8HhY^}-kBUM&gAhB-kjnwn?)9z>3yC9kg+rG7<+8&rIPrh|BydflCdet zQr^ab!PZ_!=xROPdh|kDEBp0W9ZwWvq8JljaLe8?&mOGoS1cLn!ok9$)9a2xreIwr zzgLQbG6-=S_IHZCKIV6|<>DWRoFUA?eK~AqzptGB$fHE(D9JgQ0(Tx7QSiXynVF;I z)H1akZ-+`{=^VG)!!LnQ(b`I1g|Ga+UKid3l}+!dmEnq}->Mbi@}@`eQYdR;L-7%{ ztiQ^yu*>jRy;9bcL%~DNNx5Xa2PAA;c8#+iq&(X7YKf++rG7kC8ptEbUx5_Q!?UQz ztBmp+KUuEF^Yte{O4xd< z@%W=`1>@PKaeU*c$LYD`*C#xzYC?k^8`DZz>x5qky9RT3D}b&!RTnFm*n_LsV`ms* zXQ2#!FTD6S6hEgyr~$Kv;?w@ave#^_n78J}*5r{1k9MP|t(9V+f3`j@d8Vejx__?o z@Z|Y%i^J9U>aGqgJf0`8>O2LD zl)X!&gYz?G2W%behweP zD$DUMR*ZH-@B~JjNy=ZX>>lDo(Za9&W9fFU%KP1ZDoYu>2I%qT0W z8XAmD9HRVKQejF;F4c=~-Tc4`1SeHyd$l8cnYD%4R+9 zMuQuh&Gg1*Grf9^8RxypWb;O|-PIe`81ao(+|BE6HQR0e-{_T_&3fDDiUGC&5%02v?yWPl8i0Wv@a$N(8217zSc zGB8))m0YBMyz!j%{I`5jF1X7I6tr1s!H*SxBFxIL30m=l|C0e1e*phkY;SKjMj{C9 z*>?N`LDwp!-X6qwi}(5*F1K$j2-aLzQ}=z}H$c$ga2V|g+8x-D!w!Oq8`EwD1i@FI ztM_3QL6@rw2M9Pole{%IR=CJ6<2!&L;D1D#Sx5;xaw`q9tdmbfldW|i=&Iur?*hSK zw4^?e$bw*(!&PsO20^f0@$BPoF|{_$3KddhjgPVoSq<`wlQ;yDA!?>n+!(nHEwWY`zGss9rtx8t3a@> zJsQnMqacWb=YJqr?~6ntzIu!|ITedWqp>Lv%tj(Jkw_Lk%7~SYz$ztjBI;W;ORSCE zMM1Eh>vv)M7HjRO6a5KBW5b!@7{*&vjHe5im_J<*J)6y*=FppZmm73obSxGGL7qPoG0Qn?-0lGPBM5-;LEPXL z&30o}`!PJrc$zVOmgZH|XM9mH;HaJ&`)dmCxT@=F-t~}M<)6R6x!@IOk$fDDiUGC&5%02v?yWPl8i0Wv@a$N(Amd>i;T9UIi( literal 0 HcmV?d00001 diff --git a/nes_instr_test/rom_singles/05-absolute.nes b/nes_instr_test/rom_singles/05-absolute.nes new file mode 100644 index 0000000000000000000000000000000000000000..ecac8f190b7e49f48d2da6c62099702c1b8e1fd7 GIT binary patch literal 40976 zcmeI1du&tJ8Nff^Bud(_v+&W1xiCkt?8_TMQ8O3pK5T#}+G@_Za?_A## zXsi8Ksnhh`*ynf8`<&l-_>XMf;9H>BY(NhgAOmE843GgbKnBPF86X2>fDDiUGC&5% z02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5% z02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5% z02v?yWPl8i0Wv@a$N(8217v^*c)P&&QU!JBx=yDI>NlSERm@QTJw|MFUG;ul&d9 z^Qn?QkGQVzfu*8!$vATwLl37l=g=c*t%7xpv%q+E8IP<`Fe6%W`mgE!70O8JL%k_7 zze(@YZqb2#^SnNb0oN8CDc!$(NKI>thc>0PB}1Fj8e>nKA6S0CHOWu)titP0 zgSQ+myu=oHV~You46s$|3Z-n6-IfmEw->*M@Ow(U;LI=_SaHDh$HA3{`LnHSe{*M5 z)epb^&*q7rmHs%`{ciPW>st@JvGVz@Y}@qF$p`2=*{goyXK{LZu;Bhr^-6*@vr`9(Gz=5e`6qXDtr9N(wD;Lu55kw@|V8* z>-)9W9!vJ`*m&hk@1kwd`!j#2TY37k+kT&WOBXJvD<{jm?5=U0vAx;ADqiO8RZGXq zyob!NEMTJdlz|Vc8b5|5*lii_efTi%c))vWg#aHe?^8PMogQ^>cDOuOB#MaUxVO+O zvb+#Kw zjC{eP`o_JzSUJEgb5o_mr6;f5cM@_X_vMQFloaq`NZGKzzq2>T1Mbe*)CV$U1XFN( zjuw*N=NCTq@WecxotG=|6rmB02Of{kJbhNH)T;1ysNu`!c|2Zm2}H{_*7&RaRgd<$ z@g}Hgc~7f}Rk!?3tBzH*{0J|F$`&?~8q+EVYXh9!gs1EE%9dFaJmR{lIx`Vaux-_y zVUJCE^{;47-Owrmc)D~@$FeVjk}AR@X{2h+{Chr~Z={OxCQ;J1zS{k;a+Fz`U^voZu<6>m&g9-NL zM9j^GCU7)E6YQ#JblAWRSJ7F!=R@wy5w|`BBtT`5Ie@7g{C{4OyO`_y zFi$@hv2p!mMB#dSq=-j(&qBReTfi}kA6%vkEX-9Nv3YfPVZnjG3k$LfQc8B=@ns5U z4`i>Hi{ zez2vkMKMD$QrCF2C|9NfCMp>5Vq3bu&{AQu;st@D#aY;JUGVqg@TA;IJj$NK-3B7a z&21R5KB>!mwZg9NsVHt+GyR%A8^vW28&O^laKs(8VQKt$>?5gZJO+nuR#;@YVwG6E zT=A3@3b;PvJY)*Z<+JrovHG{_b2EH(ZBvt(h(lEOXF21OYK2k0rG3wy?Hy3wyldxn z*x23~+}=@cku8JrmYt7p-@UUv$hPm^y=ymk?!LW!+n!y)Cm!DpYV$hQj^Ve=@Y@*r zwu%(rR*~Y{DpFcDug9=?g9z98R18&L8-{JI;=Qd^ysv8(xxRZv*xDvqShu+u!wqKc z`b}H#{oawNaKc{i0S~rcV55KMqdWOpkZcGh68S^|BysTK z1CovYcs%ZJ#PS7BCliT8avCJ_@%T(Uo`;V!ZpGuUmdDQ|{A=fkwXwSdNHz-nZfxJ; zVmsBc1%Pd6kk<@0Andy?6!`EzG5ZV|oW6Bd3=ih1Eo%=rn5 z^mmirpQFeZ{Yi!s@vvB5$r)Tsv7VALv0C|XWkNGYM5ORcZ z{*v+dbTWzSD~ajJcrqmNO**i2G8qO*kvr%NHmL<6~A51h|+#d-m)N9KDDG#JFUmP>XR%oZmDqJnrBE z&GF$SB{_Og>}@QF`8O~m#)WZ{I685Ef+VJf#Q5fD z`N8t0rx`riGnikX6K_Yi+X<59cEJ52*@d^M+ua3{{9iBPT<{9CDBkHI17v^fDDiUGC&6YzYY8c@}#pZ literal 0 HcmV?d00001 diff --git a/nes_instr_test/rom_singles/06-abs_xy.nes b/nes_instr_test/rom_singles/06-abs_xy.nes new file mode 100644 index 0000000000000000000000000000000000000000..3438592c0e3aa170584b1f7bfa2d99cbc52e674b GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/nes_instr_test/rom_singles/07-ind_x.nes b/nes_instr_test/rom_singles/07-ind_x.nes new file mode 100644 index 0000000000000000000000000000000000000000..6ef806e58b7887c37cef255f3d08a301f5a7de78 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/nes_instr_test/source/01-implied.s b/nes_instr_test/source/01-implied.s new file mode 100644 index 0000000..0e9254f --- /dev/null +++ b/nes_instr_test/source/01-implied.s @@ -0,0 +1,81 @@ +;CALIBRATE=1 +.include "instr_test.inc" +instrs: + entry $2A,"ROL A" ; A = op A + entry $0A,"ASL A" + entry $6A,"ROR A" + entry $4A,"LSR A" + + entry $8A,"TXA" ; AXY = AXY + entry $98,"TYA" + entry $AA,"TAX" + entry $A8,"TAY" + + entry $E8,"INX" ; XY = op XY + entry $C8,"INY" + entry $CA,"DEX" + entry $88,"DEY" + + entry $38,"SEC" ; flags = op flags + entry $18,"CLC" + entry $F8,"SED" + entry $D8,"CLD" + entry $78,"SEI" + entry $58,"CLI" + entry $B8,"CLV" + + entry $EA,"NOP" + +.ifndef OFFICIAL_ONLY + entry $1A,"NOP" + entry $3A,"NOP" + entry $5A,"NOP" + entry $7A,"NOP" + entry $DA,"NOP" + entry $FA,"NOP" +.endif +instrs_size = * - instrs + +instr_template: + nop + jmp instr_done +instr_template_size = * - instr_template + +operand = in_a + +.define set_in set_paxyso +.define check_out check_paxyso + +.include "instr_test_end.s" + +test_values: + test_normal + rts + +correct_checksums: +.dword $013A2933 +.dword $A38733B0 +.dword $6EC2BCA6 +.dword $763FEBC5 +.dword $0FF1C1E6 +.dword $5B2EB5B7 +.dword $1D8ACEF5 +.dword $83DC03F9 +.dword $8EBDF63B +.dword $F34CAA18 +.dword $9123FF08 +.dword $48897445 +.dword $4BE14840 +.dword $E7C7ECC0 +.dword $408EF097 +.dword $A6AEF749 +.dword $8F06AD7B +.dword $FC96AE14 +.dword $28F10ADA +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 diff --git a/nes_instr_test/source/02-immediate.s b/nes_instr_test/source/02-immediate.s new file mode 100644 index 0000000..eabe937 --- /dev/null +++ b/nes_instr_test/source/02-immediate.s @@ -0,0 +1,75 @@ +;CALIBRATE=1 +.include "instr_test.inc" + +instrs: + entry $A9,"LDA #n" ; AXY = #n + entry $A2,"LDX #n" + entry $A0,"LDY #n" + + entry $69,"ADC #n" ; A = A op #n + entry $E9,"SBC #n" + entry $09,"ORA #n" + entry $29,"AND #n" + entry $49,"EOR #n" + + entry $C9,"CMP #n" ; AXY op #n + entry $E0,"CPX #n" + entry $C0,"CPY #n" +.ifndef OFFICIAL_ONLY + entry $EB,"SBC #n" + + entry $80,"DOP #n" + entry $82,"DOP #n" + entry $89,"DOP #n" + entry $C2,"DOP #n" + entry $E2,"DOP #n" + + entry $0B,"AAC #n" + entry $2B,"AAC #n" + entry $4B,"ASR #n" + entry $6B,"ARR #n" + entry $AB,"ATX #n" + entry $CB,"AXS #n" +.endif +instrs_size = * - instrs + +operand = instr+1 + +instr_template: + lda #0 + jmp instr_done +instr_template_size = * - instr_template + +.define set_in set_paxyso +.define check_out check_paxyso + +.include "instr_test_end.s" + +test_values: + test_normal + rts + +correct_checksums: +.dword $AB3E4F82 +.dword $7B121231 +.dword $E544DF3D +.dword $86046BF5 +.dword $999E9E48 +.dword $DC562F7E +.dword $6BF08A00 +.dword $D2A32FD6 +.dword $7DF1D50B +.dword $751D8339 +.dword $A451BD7A +.dword $999E9E48 +.dword $ACE6BAE4 +.dword $ACE6BAE4 +.dword $ACE6BAE4 +.dword $ACE6BAE4 +.dword $ACE6BAE4 +.dword $DC37BE89 +.dword $DC37BE89 +.dword $C07C3593 +.dword $49618FA8 +.dword $1D8ACEF5 +.dword $1240499F diff --git a/nes_instr_test/source/03-zero_page.s b/nes_instr_test/source/03-zero_page.s new file mode 100644 index 0000000..2455c89 --- /dev/null +++ b/nes_instr_test/source/03-zero_page.s @@ -0,0 +1,94 @@ +;CALIBRATE=1 +.include "instr_test.inc" + +instrs: + entry $A5,"LDA z" ; AXY = z + entry $A6,"LDX z" + entry $A4,"LDY z" + + entry $85,"STA z" ; z = AXY + entry $86,"STX z" + entry $84,"STY z" + + entry $E6,"INC z" ; z = op z + entry $C6,"DEC z" + entry $06,"ASL z" + entry $46,"LSR z" + entry $26,"ROL z" + entry $66,"ROR z" + + entry $65,"ADC z" ; A = A op z + entry $E5,"SBC z" + entry $05,"ORA z" + entry $25,"AND z" + entry $45,"EOR z" + + entry $24,"BIT z" ; AXY op z + entry $C5,"CMP z" + entry $E4,"CPX z" + entry $C4,"CPY z" +.ifndef OFFICIAL_ONLY + entry $04,"DOP z" + entry $44,"DOP z" + entry $64,"DOP z" + + entry $07,"SLO z" + entry $27,"RLA z" + entry $47,"SRE z" + entry $67,"RRA z" + entry $87,"AAX z" + entry $A7,"LAX z" + entry $C7,"DCP z" + entry $E7,"ISC z" +.endif +instrs_size = * - instrs + +operand = <$FE + +instr_template: + lda operand + sta <(address+1) + + lda #<(operand+1) + sta <(address+2) + lda #>(operand+1) + sta <(address+3) + + lda #0 + jsr :+ + lda #2 +: sta in_x + test_normal + rts + +correct_checksums: +.dword $B9D16BC6 +.dword $DBC21F73 +.dword $84827E50 +.dword $FE9A8B04 +.dword $9EEFAAD8 +.dword $65F6C5BB +.dword $82C41B16 +.dword $DC68A9E8 +.dword $04A09668 +.dword $417BDD05 +.dword $9A40C4E4 +.dword $0CB8C16E +.dword $EC8492F8 +.dword $AFC77201 +.dword $5BFDAB74 +.dword $C62D3147 diff --git a/nes_instr_test/source/08-ind_y.s b/nes_instr_test/source/08-ind_y.s new file mode 100644 index 0000000..1b0edda --- /dev/null +++ b/nes_instr_test/source/08-ind_y.s @@ -0,0 +1,88 @@ +;CALIBRATE=1 +.include "instr_test.inc" + +instrs: + entry $B1,"LDA (z),Y" ; A = (z),Y + + entry $91,"STA (z),Y" ; (z),Y = A + + entry $D1,"CMP (z),Y" ; A op (z),Y + + entry $11,"ORA (z),Y" ; A = A op (z),Y + entry $F1,"SBC (z),Y" + entry $71,"ADC (z),Y" + entry $31,"AND (z),Y" + entry $51,"EOR (z),Y" +.ifndef OFFICIAL_ONLY + entry $13,"SLO (z),Y" + entry $33,"RLA (z),Y" + entry $53,"SRE (z),Y" + entry $73,"RRA (z),Y" + entry $B3,"LAX (z),Y" + entry $D3,"DCP (z),Y" + entry $F3,"ISC (z),Y" +.endif +instrs_size = * - instrs + +address = <$FF +operand = $2FF + +instr_template: + lda (address),y + jmp instr_done +instr_template_size = * - instr_template + +.macro set_in + lda values+1,y + sta operand+1 + + lda values+2,y + sta operand+2 + + set_paxyso +.endmacro + +.macro check_out + check_paxyso + + lda operand+1 + jsr update_crc_fast + + lda operand+2 + jsr update_crc_fast + + lda address + jsr update_crc_fast +.endmacro + +.include "instr_test_end.s" + +test_values: + lda #operand + sta <(address+1) + + lda #0 + jsr :+ + lda #1 +: sta in_y + test_normal + rts + +correct_checksums: +.dword $A70CC617 +.dword $C51FB2A2 +.dword $9A5FD381 +.dword $7B2B686A +.dword $80320709 +.dword $E04726D5 +.dword $9C19B6C7 +.dword $C2B50439 +.dword $1A7D3BB9 +.dword $5FA670D4 +.dword $849D6935 +.dword $12656CBF +.dword $964F3A4A +.dword $452006A5 +.dword $D8F09C96 diff --git a/nes_instr_test/source/09-branches.s b/nes_instr_test/source/09-branches.s new file mode 100644 index 0000000..2fcd4f1 --- /dev/null +++ b/nes_instr_test/source/09-branches.s @@ -0,0 +1,48 @@ +;CALIBRATE=1 +.include "instr_test.inc" + +instrs: + entry $90,"BCC r" ; PC = PC op flags + entry $50,"BVC r" + entry $D0,"BNE r" + entry $30,"BMI r" + entry $10,"BPL r" + entry $F0,"BEQ r" + entry $B0,"BCS r" + entry $70,"BVS r" +instrs_size = * - instrs + +zp_byte operand + +instr_template: + bne :+ + sta operand +: jmp instr_done +instr_template_size = * - instr_template + +values2: + .byte 0,$FF,$01,$02,$04,$08,$10,$20,$40,$80 +values2_size = * - values2 + +.macro set_in + sta in_p + set_paxyso +.endmacro + +.define check_out check_paxyso + +.include "instr_test_end.s" + +test_values: + test_normal + rts + +correct_checksums: +.dword $D5B22EE0 +.dword $9CEB0A7E +.dword $DE8DEFE5 +.dword $D704F89C +.dword $AD3F7EB0 +.dword $A4B669C9 +.dword $AF89A8CC +.dword $E6D08C52 diff --git a/nes_instr_test/source/10-stack.s b/nes_instr_test/source/10-stack.s new file mode 100644 index 0000000..219f1ae --- /dev/null +++ b/nes_instr_test/source/10-stack.s @@ -0,0 +1,118 @@ +;CALIBRATE=1 +.include "instr_test.inc" + +instrs: + entry $48,"PHA" + entry $08,"PHP" + + entry $68,"PLA" + entry $28,"PLP" + + entry $9A,"TXS" + entry $BA,"TSX" +instrs_size = * - instrs + +instr_template: + pha + jmp instr_done +instr_template_size = * - instr_template + +values2: + .byte 0,$FF,$01,$02,$04,$08,$10,$20,$40,$80 +values2_size = * - values2 + +zp_byte operand + +.macro set_in + sta in_p + set_paxyso + + ; Clear bytes on stack + stx $17F + sty $180 + stx $181 + + sty $1FE + stx $1FF + sty $100 + stx $101 + sty $102 +.endmacro + +zp_byte save +zp_byte save2 +zp_byte save3 +zp_byte save4 +zp_byte save5 + +.macro check_out + php + sta save ; A + pla + sta save2 ; P + pla + sta save3 ; PLA + stx save4 ; X + tsx + stx save5 ; S + + ldx saved_s + txs + + ; Output + tya + jsr update_crc_fast + + lda save + jsr update_crc_fast + + lda save2 + jsr update_crc_fast + + lda save3 + jsr update_crc_fast + + lda save4 + jsr update_crc_fast + + lda save5 + jsr update_crc_fast + + ldx in_s + dex + lda $100,x + jsr update_crc_fast + + inx + lda $100,x + jsr update_crc_fast + + inx + lda $100,x + jsr update_crc_fast +.endmacro + +.include "instr_test_end.s" + +test_values: + ; Values for SP + lda #$80 + jsr :+ + lda #$00 + jsr :+ + lda #$01 + jsr :+ + lda #$FF + jsr :+ + lda #$FE +: sta in_s + test_normal + rts + +correct_checksums: +.dword $AA53E72F +.dword $F46D6C3F +.dword $4B0D5E27 +.dword $A1AB7B53 +.dword $8A5B86A7 +.dword $6157E3AF diff --git a/nes_instr_test/source/11-special.s b/nes_instr_test/source/11-special.s new file mode 100644 index 0000000..dc3534e --- /dev/null +++ b/nes_instr_test/source/11-special.s @@ -0,0 +1,90 @@ +CUSTOM_IRQ=1 +.include "shell.inc" + +irq: pla + pha + rti + +jmp_6ff: + .byte $6C ; JMP ($6FF) (to avoid warning) + .word $6FF + +main: + setb SNDMODE,$40 ; disable frame IRQ + + set_test 3,"JMP ($6FF) should get high byte from $600" + setb $6FF,$F0 + setb $600,$07 + setb $700,$06 + setb $7F0,$E8 ; INX + setb $7F1,$60 ; RTS + setb $6F0,$60 ; RTS + ldx #0 + jsr jmp_6ff + cpx #1 + jne test_failed + + set_test 4,"RTS should return to addr+1" + lda #>:+ + pha + lda #<:+ + pha + ldx #0 + rts + inx +: inx + inx + cpx #1 + jne test_failed + + set_test 5,"RTI should return to addr" + lda #>:+ + pha + lda #<:+ + pha + ldx #0 + php + rti + inx +: inx + inx + cpx #2 + jne test_failed + + set_test 6,"JSR should push addr of next instr - 1" + setb $6FE,$20 ; JSR + setb $6FF,<:+ + setb $700,>:+ + jmp $6FE +: pla + cmp #$00 + jne test_failed + pla + cmp #$07 + jne test_failed + + set_test 7,"BRK should push status with bits 4 and 5 set" + lda #$00 + pha + plp + brk + nop + cmp #$30 + jne test_failed + lda #$FF + pha + plp + brk + nop + cmp #$FF + jne test_failed + + set_test 8,"BRK should push address BRK + 2" + ldx #1 + brk + inx + inx + cpx #2 + jne test_failed + + jmp tests_passed diff --git a/nes_instr_test/source/common/ascii.chr b/nes_instr_test/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..a3514f451aa650e64c7f57c8424dff903532dd34 GIT binary patch literal 2048 zcmeIyzl+;26bJBkH+T}^Mh_-`gQjAr2sd@=A7M)I(3&Gt@gPj6`!o8tXegRQ#t=#= z9m-81lny0>(e?Wzyr1xZ-=(0SPa@k5G?a%#K28vguEl6NABpvY zk=SX}bw?ug=F#-HMXc)y8zgKn%d=_R@Z^-PiA16pzB4QF}H&@&*n$FE0buoIZuQiF|=O5$!y(Q6lKUHePdRfHD zu|EIrN*mNj6(SZn>=bzs$yKR8Ykk#d(wIMM`nz{`-HOC^@IHD^A~w%I5>4-%>kYPp?ws&gCPuTJ7_Eayoyoc%iTsH^?0)V7#uvL(CLAr7 ziTokPEzc)D{Epu?s27n}6wCQda$JZc#m92{m+;{v_w#z9_0ID7iZc$A&r?j(qW{c; zZEv_<+{SpoetZ$Fmg~j7?>Tf5cs?%FB|(Tb#bCu1Pd_v6MpoiZ?h&ejh}> zCW;y8I-RaXqET7IFFJP&0p}~CJ-9G(e^Oy|2$n={pIz=}8?8sqk4S{^77uta&l}48 z0q-*2W{f|XKSk^ENm@IX4j$vPJQyY2#1ie}cDp@ux5oxi7Y(NtbrJC$aqxJ8vuS_$ zNQt{WKNoy|c66gUqF&S%%Qo0=k+9m=0sUu=yf4&~*d2dANkr?&`#V|kgYhX(Gv4eO k{n-V+j&;2tF+C1=Uc@!Nrggn0vHSH2vEUO}bD2V#gkYXATM literal 0 HcmV?d00001 diff --git a/nes_instr_test/source/common/build_nsf.s b/nes_instr_test/source/common/build_nsf.s new file mode 100644 index 0000000..9bea408 --- /dev/null +++ b/nes_instr_test/source/common/build_nsf.s @@ -0,0 +1,135 @@ +; Builds program as NSF music file + +.ifndef NSF_SONG_COUNT + NSF_SONG_COUNT = 1 +.endif + +.ifndef CUSTOM_NSF_HEADER + .segment "HEADER" + .byte "NESM",26,1 + .byte NSF_SONG_COUNT + .byte 1 ; start with first song + .word load_addr,reset,nsf_play +.endif + +.segment "DMC" + load_addr: + +.ifndef CUSTOM_NSF_VECTORS + .segment "VECTORS" + .word 0,0,0,nmi,internal_error,irq +.endif + +.include "shell.s" + +nv_res nsf_track,1 +nv_res nsf_running,1 + +.ifdef EMPTY_NSF_PLAY + CUSTOM_NSF_PLAY = 1 + nsf_play: + rts +.endif + +std_reset: + sta nsf_track + + ; In case NSF player interrupts init with play, + ; wait a while in init. If play interrupts, then + ; we just use that play call to run program, and + ; this is never resumed. + setb nsf_running,1 + delay_msec 500 + +.ifndef CUSTOM_NSF_PLAY + nsf_play: +.endif +std_nsf_play: + php + bit nsf_running + bpl :+ + plp + rts + +: lda nsf_running + beq :+ + + ; First call + setb nsf_running,0 + delay_msec 20 + jmp run_shell + + ; Player let init run too long before interrupting + ; with play, or play call interrupted itself. +: setb nsf_running,$80 + jsr clear_ram + jsr init_shell + print_str "NSF player called play recursively" + jmp internal_error + + +init_runtime: + rts + +post_exit: +forever: + jmp forever + +; Reports A in binary as high and low tones, with +; leading low tone for reference. Omits leading +; zeroes. +; Preserved: A, X, Y +play_byte: + pha + + ; Make low reference beep + clc + jsr @beep + + ; Remove high zero bits + sec +: rol a + bcc :- + + ; Play remaining bits + beq @zero +: jsr @beep + asl a + bne :- +@zero: + + delay_msec 300 + pla + rts + +; Plays low/high beep based on carry +; Preserved: A, X, Y +@beep: + pha + + ; Set up square + lda #1 + sta SNDCHN + sta $4001 + sta $4003 + adc #$FE ; period=$100 if carry, $1FF if none + sta $4002 + + ; Fade volume + lda #$0F +: ora #$30 + sta $4000 + delay_msec 8 + sec + sbc #$31 + bpl :- + + ; Silence + sta SNDCHN + delay_msec 160 + + pla + rts + +; User code goes in main code segment +.code diff --git a/nes_instr_test/source/common/build_rom.s b/nes_instr_test/source/common/build_rom.s new file mode 100644 index 0000000..c0236c4 --- /dev/null +++ b/nes_instr_test/source/common/build_rom.s @@ -0,0 +1,87 @@ +; Builds program as iNES ROM + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte "NES",26 + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word 0,0,0, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .rodata + ascii_chr: + .incbin "ascii.chr" + ascii_chr_end: +.else + .segment "CHARS" + .incbin "ascii.chr" + .align $2000 +.endif + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + ; Load ASCII font into CHR RAM + ldy #0 + sty PPUADDR + sty PPUADDR + ldx #ascii_chr + @page: + stx addr+1 + : lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page + .endif + rts + +post_exit: + jsr clear_nvram + jmp forever + +; User code goes in main code segment +.code diff --git a/nes_instr_test/source/common/console.s b/nes_instr_test/source/common/console.s new file mode 100644 index 0000000..65f3b11 --- /dev/null +++ b/nes_instr_test/source/common/console.s @@ -0,0 +1,222 @@ +; Scrolling text console with line wrapping, 30x29 characters. +; Buffers lines for speed. Will work even if PPU doesn't +; support scrolling (until text reaches bottom). Keeps border +; along bottom in case TV cuts it off. +; +; Defers most initialization until first newline, at which +; point it clears nametable and makes palette non-black. +; +; ** ASCII font must already be in CHR, and mirroring +; must be vertical or single-screen. + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs +console_margin = 1 + +console_buf_size = 32 +console_width = console_buf_size - (console_margin*2) + +zp_byte console_pos +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_buf_size + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + jmp console_clear_line_ + + +; Hides console by blacking palette and disabling PPU. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +console_wait_vbl_: + lda console_scroll + cmp #-1 + jne wait_vbl_optional + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + txa + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldx #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + + ; Clear attributes + lda #0 + ldx #$40 +: sta PPUDATA + dex + bne :- + + pla + tax + jmp console_show + + +; Shows console display +; Preserved: X, Y +console_show: + pha + + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + + lda #$30 ; white + jsr console_load_palette_ + + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + stx console_temp + + ; Newline if buf full and next char isn't space + ldx console_pos + bpl :+ + cmp #' ' + beq @ignore_space + ldx console_temp + jsr console_newline + stx console_temp + ldx console_pos +: + ; Write to buffer + sta console_buf+console_margin,x + dex + stx console_pos + +@ignore_space: + ldx console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_clear_line_ + + ; Scroll up 8 pixels and clear one line AHEAD + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + jsr console_add_8_to_scroll_ + jsr console_flush_a + jmp console_apply_scroll_ + + +; A = (A + 8) % 240 +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_clear_line_: + stx console_temp + + ; Start new clear line + lda #' ' + ldx #console_buf_size-1 +: sta console_buf,x + dex + bpl :- + ldx #console_width-1 + stx console_pos + + ldx console_temp + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + + pla + rts + +console_flush_: + lda console_scroll +console_flush_a: + ; Address line in nametable + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + sta PPUADDR + + ; Copy line + stx console_temp + ldx #console_buf_size-1 +: lda console_buf,x + sta PPUDATA + dex + bpl :- + ldx console_temp + + rts + diff --git a/nes_instr_test/source/common/crc.s b/nes_instr_test/source/common/crc.s new file mode 100644 index 0000000..797204c --- /dev/null +++ b/nes_instr_test/source/common/crc.s @@ -0,0 +1,87 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on diff --git a/nes_instr_test/source/common/crc_fast.s b/nes_instr_test/source/common/crc_fast.s new file mode 100644 index 0000000..5e1ffb4 --- /dev/null +++ b/nes_instr_test/source/common/crc_fast.s @@ -0,0 +1,65 @@ +; Fast table-based CRC-32 + +; Uses 1K of RAM +checksum_t0 = $400 +checksum_t1 = $500 +checksum_t2 = $600 +checksum_t3 = $700 + +; Initializes fast CRC tables and resets checksum. +; Preserved: Y +; Time: ~60 msec +init_crc_fast: + ldx #0 +@byte: ; Calculate CRC for this byte + lda #0 + sta checksum+3 + sta checksum+2 + sta checksum+1 + stx checksum + jsr update_crc_ + + ; Write in table + lda checksum + sta checksum_t0,x + lda checksum+1 + sta checksum_t1,x + lda checksum+2 + sta checksum_t2,x + lda checksum+3 + sta checksum_t3,x + + inx + bne @byte + + jmp reset_crc + + +; Updates checksum with byte from A +; Preserved: X, Y +; Time: 54 clocks +update_crc_fast: + stx checksum_temp + +; Updates checksum with byte from A +; Preserved: Y +; Time: 42 clocks +.macro update_crc_fast + eor checksum + tax + lda checksum+1 + eor checksum_t0,x + sta checksum + lda checksum+2 + eor checksum_t1,x + sta checksum+1 + lda checksum+3 + eor checksum_t2,x + sta checksum+2 + lda checksum_t3,x + sta checksum+3 +.endmacro + + update_crc_fast + ldx checksum_temp + rts diff --git a/nes_instr_test/source/common/delay.s b/nes_instr_test/source/common/delay.s new file mode 100644 index 0000000..7e0acc0 --- /dev/null +++ b/nes_instr_test/source/common/delay.s @@ -0,0 +1,191 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100 usec. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/nes_instr_test/source/common/instr_test.inc b/nes_instr_test/source/common/instr_test.inc new file mode 100644 index 0000000..5082938 --- /dev/null +++ b/nes_instr_test/source/common/instr_test.inc @@ -0,0 +1,51 @@ +.include "shell.inc" +.include "crc_fast.s" + +; Instructions to test +.macro entry op,name + .byte op,0 + .local Addr + .word Addr + seg_data "STRINGS",{Addr: .byte name,0} +.endmacro + +zp_byte in_p +zp_byte in_a +zp_byte in_x +zp_byte in_y +zp_byte in_s + +values: + .byte 0,1,2,$40,$7F,$80,$81,$FF +values_size = * - values + .byte 0,1,2,$40,$7F,$80,$81,$FF + +.macro set_paxyso + ldx in_s + txs + lda values,y + sta operand + lda in_p + pha + lda in_a + ldx in_x + ldy in_y + plp +.endmacro + +.macro check_paxyso + php + cld ; limits effect of buggy emulator + jsr update_crc_fast + pla + jsr update_crc_fast + txa + jsr update_crc_fast + tya + jsr update_crc_fast + tsx + txa + jsr update_crc_fast + lda operand + jsr update_crc_fast +.endmacro diff --git a/nes_instr_test/source/common/instr_test_end.s b/nes_instr_test/source/common/instr_test_end.s new file mode 100644 index 0000000..4ad5371 --- /dev/null +++ b/nes_instr_test/source/common/instr_test_end.s @@ -0,0 +1,180 @@ +zp_byte instrs_idx +zp_byte failed_count + +main: ldx #$A2 + txs + + jsr init_crc_fast + + ; Test each instruction + lda #0 +@loop: sta instrs_idx + tay + + jsr reset_crc + lda instrs,y + jsr test_instr + jsr check_result + + lda instrs_idx + clc + adc #4 + cmp #instrs_size + bne @loop + + lda failed_count + jne test_failed + jmp tests_passed + +; Check result of test +check_result: +.ifdef CALIBRATE + ; Print correct CRC + jsr crc_off + print_str ".dword $" + ldx #0 +: lda checksum,x + jsr print_hex + inx + cpx #4 + bne :- + jsr print_newline + jsr crc_on +.else + ; Verify CRC + ldx #3 + ldy instrs_idx +: lda checksum,x + cmp correct_checksums,y + bne @wrong + iny + dex + bpl :- +.endif + rts + +; Print failed opcode and name +@wrong: + ldy instrs_idx + lda instrs,y + jsr print_a + jsr play_byte + lda instrs+2,y + sta addr + lda instrs+3,y + sta addr+1 + jsr print_str_addr + jsr print_newline + inc failed_count + rts + +bss_res instr,instr_template_size + +; Tests instr A +test_instr: + sta instr + jsr avoid_silent_nsf + + ; Copy rest of template + ldx #instr_template_size - 1 +: lda instr_template,x + sta instr,x + dex + bne :- + + ; Disable and clear frame IRQ + lda #$40 + sta SNDMODE + + ; Default stack + lda #$90 + sta in_s + + ; Test with different flags + lda #$00 + jsr test_flags + lda #$FF + jsr test_flags + + rts + +zp_byte operand_idx + +test_flags: + sta in_p + + ldy #values_size-1 +: sty operand_idx + + lda values,y + sta in_a + + lda values+1,y + sta in_x + + lda values+2,y + sta in_y + + jsr test_values + + ldy operand_idx + dey + bpl :- + + rts + +.ifndef values2 + values2 = values + values2_size = values_size +.endif + +.macro test_normal +zp_byte a_idx +zp_byte saved_s + + tsx + stx saved_s + + ldy #values2_size-1 +inner: sty a_idx + + lda values2,y + sta operand + + set_in + +.if 0 + ; P A X Y S O (z,x) (z),y + jsr print_p + jsr print_a + jsr print_x + jsr print_y + jsr print_s + lda operand + jsr print_a +.ifdef address + lda (address,x) + jsr print_a + lda (address),y + jsr print_a +.else + lda operand,x + jsr print_a + lda operand,y + jsr print_a +.endif + jsr print_newline +.endif + + jmp instr +instr_done: + + check_out + + ldy a_idx + dey + bpl inner + + ldx saved_s + txs +.endmacro diff --git a/nes_instr_test/source/common/macros.inc b/nes_instr_test/source/common/macros.inc new file mode 100644 index 0000000..bd74554 --- /dev/null +++ b/nes_instr_test/source/common/macros.inc @@ -0,0 +1,135 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "STRINGS",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro diff --git a/nes_instr_test/source/common/neshw.inc b/nes_instr_test/source/common/neshw.inc new file mode 100644 index 0000000..20bf574 --- /dev/null +++ b/nes_instr_test/source/common/neshw.inc @@ -0,0 +1,37 @@ +; NES I/O locations and masks + +; Clocks per second +.ifndef CLOCK_RATE + CLOCK_RATE = 1789773 ; NTSC +; CLOCK_RATE = 1662607 ; PAL +.endif + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 diff --git a/nes_instr_test/source/common/ppu.s b/nes_instr_test/source/common/ppu.s new file mode 100644 index 0000000..28d616d --- /dev/null +++ b/nes_instr_test/source/common/ppu.s @@ -0,0 +1,141 @@ +; PPU utilities + +; Special tile images +tile_blank = 0 +tile_color1 = 1 +tile_color2 = 2 +tile_solid = 3 +tile_upper_left = 4 +tile_upper_right = 5 +tile_lower_left = 6 +tile_lower_right = 7 +tile_upper_left_lower_right = 8 + + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + lda #0 + jsr fill_screen + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts diff --git a/nes_instr_test/source/common/print.s b/nes_instr_test/source/common/print.s new file mode 100644 index 0000000..ff28609 --- /dev/null +++ b/nes_instr_test/source/common/print.s @@ -0,0 +1,207 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + pha + and #$0F + jsr @nibble + pla + rts + +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + .ifnblank str2 + jsr_with_addr print_str_addr,{.byte str,str2,0} + .else + jsr_with_addr print_str_addr,{.byte str,0} + .endif +.endmacro + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: Y +print_dec: + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jmp print_char + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/nes_instr_test/source/common/shell.inc b/nes_instr_test/source/common/shell.inc new file mode 100644 index 0000000..ce65f2d --- /dev/null +++ b/nes_instr_test/source/common/shell.inc @@ -0,0 +1,23 @@ +; Included at beginning of program + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/nes_instr_test/source/common/shell.s b/nes_instr_test/source/common/shell.s new file mode 100644 index 0000000..21954a2 --- /dev/null +++ b/nes_instr_test/source/common/shell.s @@ -0,0 +1,352 @@ +; Common routines and runtime + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Number of clocks delay before reset is jumped to +.ifndef DEVCART_DELAY + DEVCART_DELAY = 0 +.endif + +;**** Special globals **** + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E + +.segment "NVRAM" + ; Beginning of variables not cleared at startup + nvram_begin: + +;**** Code segment setup **** + +.ifndef NOT_FOR_DEVCART + ; Move code to $E000 + .segment "DMC" + .res $6000 +.endif + +; Devcart corrupts byte at $E000 when powering off +.code + nop + +; Goes after all other read-only data, to avoid trailing zeroes +; from getting stripped off by devcart loader. +.segment "ROEND" + .byte $FF + +; Cause support code to go AFTER user code, so that +; changes to support code don't move user code around. +.segment "CODE2" + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "print.s" +.include "delay.s" +.include "crc.s" +.include "testing.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print +.endif + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_oam +.endif + + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sei + cld + ldx #$FF + txs + + .ifndef BUILD_NSF + ldx #0 + stx PPUCTRL + .endif + + jsr report_result + jmp post_exit + + +; Reports final result code in A +; Preserved: A +report_result: + pha + jsr :+ + jsr play_byte + pla + jmp set_final_result + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +; Clears $0-($100+S) and nv_ram_end-$7FF +clear_ram: + lda #0 + + ; Main pages + tax +: sta 0,x + sta $300,x + sta $400,x + sta $500,x + sta $600,x + sta $700,x + inx + bne :- + + ; Stack except that above stack pointer + tsx + inx +: dex + sta $100,x + bne :- + + ; BSS except nvram + ldx #<__NVRAM_SIZE__ +: sta __NVRAM_LOAD__,x + inx + bne :- + + rts + + +; Clears nvram +clear_nvram: + ldx #<__NVRAM_SIZE__ + beq @empty + lda #0 +: dex + sta __NVRAM_LOAD__,x + bne :- +@empty: + rts + + +; Prints filename and newline, if available, otherwise nothing. +; Preserved: A, X, Y +print_filename: + .ifdef FILENAME_KNOWN + pha + jsr print_newline + setw addr,filename + jsr print_str_addr + jsr print_newline + pla + .endif + rts + +.pushseg +.segment "STRINGS" + ; Filename terminated with zero byte. + filename: + .ifdef FILENAME_KNOWN + .incbin "ram:rom.nes" + .endif + .byte 0 +.popseg + + +;**** NSF-specific **** + +.ifdef BUILD_NSF +bss_res nsf_activity,1 + +; Call periodically where there would otherwise be silence, +; so that NSF build won't be cut short in NSF player that +; detects silence. +; Preserved: A, X, Y +avoid_silent_nsf: + pha + lda nsf_activity + clc + adc #4 + sta nsf_activity + sta $4011 + pla + rts + + +init_wait_vbl: +wait_vbl_optional: +;wait_vbl: ; undefined so assembler error results if called + rts + + +.ifndef CUSTOM_IRQ + irq: +.endif +nmi: + jmp internal_error + +;**** ROM-specific **** +.else ; .ifndef BUILD_NSF + +.include "ppu.s" + + +avoid_silent_nsf: +play_byte: + rts + + +; Disables interrupts and loops forever +.ifndef CUSTOM_FOREVER +forever: + sei + lda #0 + sta PPUCTRL +: beq :- +.endif + +; Default NMI +.ifndef CUSTOM_NMI + zp_byte nmi_count + + nmi: + inc nmi_count + rti + + ; Waits for NMI. Must be using NMI handler that increments + ; nmi_count, with NMI enabled. + ; Preserved: X, Y + wait_nmi: + lda nmi_count + : cmp nmi_count + beq :- + rts +.endif + + +; Default IRQ +.ifndef CUSTOM_IRQ + irq: + bit SNDCHN ; clear APU IRQ flag + rti +.endif + +.endif diff --git a/nes_instr_test/source/common/testing.s b/nes_instr_test/source/common/testing.s new file mode 100644 index 0000000..e654e09 --- /dev/null +++ b/nes_instr_test/source/common/testing.s @@ -0,0 +1,124 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "STRINGS",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing: + jmp init_crc + + +; Reports that all tests passed +tests_passed: +.ifndef BUILD_MULTI + jsr print_filename + print_str newline,"Passed" +.endif + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed +.ifndef BUILD_MULTI + jsr print_filename + print_str newline,"Done" +.endif + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: +.ifndef BUILD_MULTI + jsr print_filename +.endif + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (addr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + + jsr reset_crc + pla + tay + pla + rts + +@wrong: jsr print_newline + jsr print_crc + jsr print_newline + jmp test_failed diff --git a/nes_instr_test/source/common/text_out.s b/nes_instr_test/source/common/text_out.s new file mode 100644 index 0000000..46ab8f1 --- /dev/null +++ b/nes_instr_test/source/common/text_out.s @@ -0,0 +1,82 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Executing from $6000 already + lda #>init_text_out + bpl :+ + + ; Disable if there's no RAM there + lda $6000 + eor #$FF + sta $6000 + cmp $6000 + bne :+ + + ; Disable if changes to $6000 affect $E000, + ; as on my devcart + ldy $E000 + eor #$FF + sta $6000 ; restore original data in RAM + cpy $E000 ; see if $E000 changed as well + bne :+ + + ; Terminate output string + setb text_out_base,0 + + setb final_result,$80 + + ; Signature that tells emulator data is valid + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base +: stx text_out_addr+1 + setb text_out_addr, Character to write +; Preserved: A, X, Y +write_text_out: + sty text_out_temp + + ldy text_out_addr+1 + beq @off + + ; Write new terminator FIRST, then new char before it, + ; in case emulator looks at string in middle of this routine. + ldy #1 + pha + lda #0 + sta (text_out_addr),y + dey + pla + sta (text_out_addr),y + + inc text_out_addr + bne :+ + inc text_out_addr+1 +: +@off: + ldy text_out_temp + rts diff --git a/nes_instr_test/source/nes.cfg b/nes_instr_test/source/nes.cfg new file mode 100644 index 0000000..035d32d --- /dev/null +++ b/nes_instr_test/source/nes.cfg @@ -0,0 +1,51 @@ +# ca65 linker configuration for iNES ROM with code at $E000 + +# fill=yes forces area to be padded to specified size in output +MEMORY +{ + # My devcart only has memory from $E000-$FFFF + HEADER: start = 0, size = $10, type = ro, fill=yes; + BANKS: start = $8000, size =$20000, type = ro; + ROM: start = $8000, size = $7FF4, type = ro, fill=yes; + + # Extra 6 bytes in vectors because built-in NES configuration + # does the same. Stupid, but better to keep compatible with it + # so small examples can use the built-in configuration. + VECTORS:start = $FFF4, size = $C, type = ro, fill=yes; + + CHARS: start = 0, size = $2000, type = ro; + + ZP: start = $10, size = $F0, type = rw; + SRAM: start = $0200, size = $0200, type = rw; +} + +# align=$100 allows use of .align directive with a value up to $100 +# optional=yes avoids warning if segment is never used +# define=yes defines __NAME_LOAD__ and __NAME_SIZE__ +SEGMENTS +{ + HEADER: load = HEADER, type = ro; + DMC: load = ROM, type = ro, optional=yes; + CODE: load = ROM, type = ro, align=$100; + + # Library code goes into this segment, keeping user code same + # length regardless of runtime: devcart, ROM, NSF, etc. + CODE2: load = ROM, type = ro, align=$100, optional=yes; + RODATA: load = ROM, type = ro; + + # Separate segment for strings so RODATA can have pointers to + # strings + STRINGS: load = ROM, type = ro, optional=yes; + + # So trailing zeroes won't get stripped off when sending to devcart + ROEND: load = ROM, type = ro, optional=yes; + + VECTORS: load = VECTORS,type = ro; + BANKS: load = BANKS, type = ro, align=$2000, optional=yes; + + CHARS: load = CHARS, type = ro, align=$2000, optional=yes; + + ZEROPAGE: load = ZP, type = zp; + NVRAM: load = SRAM, type = bss, define=yes, optional=yes; + BSS: load = SRAM, type = bss; +} diff --git a/nes_instr_test/source/nsf.cfg b/nes_instr_test/source/nsf.cfg new file mode 100644 index 0000000..f7481c7 --- /dev/null +++ b/nes_instr_test/source/nsf.cfg @@ -0,0 +1,31 @@ +# ca65 linker configuration for 32K NSF music file + +# fill=yes forces area to be padded to specified size in output +MEMORY { + HEADER: start = 0, size = $80, type = ro, fill = yes; + + ROM: start = $8000, size = $7FF4, type = ro, fill = yes; + VECTORS:start = $FFF4, size = $C, type = ro, fill = yes; + + ZP: start = $10, size = $F0, type = rw; + SRAM: start = $0200, size = $0600, type = rw; +} + +# align=$100 allows use of .align directive with a value up to $100 +# define=yes defines __NAME_LOAD__ and __NAME_SIZE__ +SEGMENTS { + HEADER: load = HEADER, type = ro; + DMC: load = ROM, type = ro, optional=yes; + CODE: load = ROM, type = ro, align = $100; + + CODE2: load = ROM, type = ro, align = $100; + RODATA: load = ROM, type = ro; + STRINGS: load = ROM, type = ro; + ROEND: load = ROM, type = ro, optional=yes; + + VECTORS: load = VECTORS,type = ro; + + ZEROPAGE: load = ZP, type = zp; + NVRAM: load = SRAM, type = bss, define=yes, optional=yes; + BSS: load = SRAM, type = bss; +} diff --git a/nes_instr_test/source/readme.txt b/nes_instr_test/source/readme.txt new file mode 100644 index 0000000..57da11e --- /dev/null +++ b/nes_instr_test/source/readme.txt @@ -0,0 +1,88 @@ +NES Tests Source Code +--------------------- + +Building with ca65 +------------------ +To assemble a test ROM with ca65, use the following commands: + + ca65 -I common -o test.o source_filename_here.s + ld65 -C nes.cfg test.o -o test.nes + +To assemble as an NSF music file: + + ca65 -I common -o test.o source_filename_here.s -D BUILD_NSF + ld65 -C nsf.cfg test.o -o test.nsf + +Note that some tests might only work when built as a ROM or NSF file, +but not both. + +Some tests might include a ROM/NSF that has all the tests combined. +Building such a multi-test is complex and the necessary files aren't +included. Also, tests you build won't print their name if they fail, +since that requires special arrangements. + + +Framework +--------- +Each test is in a single source file, and makes use of several library +source files from common/. This framework provides common services and +reduces code to only that which performs the actual test. Virtually all +tests include "shell.inc" at the beginning, which sets things up and +includes all the appropriate library files. + +The reset handler does minimal NES hardware initialization, clears RAM, +sets up the text console, then runs main. Main can exit by returning or +jumping to "exit" with an error code in A. Exit reports the code then +goes into an infinite loop. If the code is 0, it doesn't do anything, +otherwise it reports the code. Code 1 is reported as "Failed", and the +rest as "Error ". + +Several routines are available to print values and text to the console. +Most update a running CRC-32 checksum which can be checked with +check_crc, allowing ALL the output to be checked very easily. If the +checksum doesn't match, it is printed, so you can run the code on a NES +and paste the correct checksum into your code. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported due to their complexity. I +load the code at $E000 since my devcart requires it, and I don't want +the normal ROM to differ in any way from what I've tested. This also +allows easy self-modifying code. + +Some macros are used to make common operations more convenient. The left +is equivalent to the right: + + Macro Equivalent + ------------------------------------- + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + set addr,byte lda #byte + sta addr + + zp_byte name .zeropage + name: .res 1 + .code + + zp_res name,n .zeropage + name: .res n + .code + + bss_res name,n .bss + name: .res n + .code + + for_loop routine,begin,end,step + calls routine with A set to successive values + + loop_n_times routine,count + calls routine with A from 0 to count-1 + +-- +Shay Green diff --git a/nmi_sync/demo_ntsc.nes b/nmi_sync/demo_ntsc.nes new file mode 100644 index 0000000000000000000000000000000000000000..cb1c21769860fadb13cbcbcd34b359b70250efc0 GIT binary patch literal 40976 zcmeI*J!=#}7y#h8J&3V#1Pc*_DXuVJkusfWgbN%Z*reR@TAL7TTn*Q`cJ?+0PNDxo zu)NaJD&STrA}A4b?jy0Wyd=#t?CyN*%e*rWv-LiC{On%U3m4@uhc=|PmmXI0E1tD? zc5{Ccm)*_1s_P!alf|37S;F$yuG{(EoBb;7>A$E+T*T$3OjhS=68|^vAPhpc%JX9x zIxO93{2XWf(WDvI)3{Zggi;-s#w>iS(stMm^>M6II7*>OFPqV)=Fb|-FuiRCp&;~A zem&oNoNw~}&M@CByZk*akJI$7>GIt&^!#Ed-=2rfW5>H|T+P)_br8bSa_=AXLj9t& z%e{Z~tGK?5hpY2=wmjmik0C#5H`4oWZ#GhUBkkS#GW%JNwvMiEl`<0`K!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNA}Sps2MUVUiFKh0O2^J + +.include "nmi_sync.s" + +reset: + ; Initialize PPU and palette + jsr init_graphics + + ; Synchronize to PPU and enable NMI + jsr init_nmi_sync + + ; Loop endlessly +loop: jsr wait_nmi + + ; You could run normal code between NMIs here, + ; as long as it completes BEFORE NMI. If it + ; takes too long, synchronization may be off + ; by a few cycles for that frame. + ; ... + + jmp loop + + +.align 256 ; branches must not cross page +nmi: + pha + + ; Do this sometime before you DMA sprites + jsr begin_nmi_sync + + ; DMA then enable sprites. Instructions before + ; STA $4014 (excluding begin_nmi_sync) must take + ; an even number of cycles. The only required + ; instruction here is STA $4014. + bit <0 ; to make cycle count even + lda #0 + sta $2003 + lda #>sprites + sta $4014 + lda #$10 + sta $2001 + + ; Our instructions up to this point MUST total + ; 1715 cycles, so we'll burn the rest in a loop. + + ; delay 1715 - 30 + lda #29 + sec +nmi_1: pha + lda #9 +nmi_2: sbc #1 + bne nmi_2 + pla + sbc #1 + bne nmi_1 + + jsr end_nmi_sync + + ; We're now synchronized exactly to 2286 cycles + ; after beginning of frame. + + ; delay 16168 - 2286 - 5 + nop + lda #24 + sec +nmi_3: pha + lda #113 +nmi_4: sbc #1 + bne nmi_4 + pla + sbc #1 + bne nmi_3 + + ; Draw short line using monochrome mode bit + lda #$11 + sta $2001 ; writes 16168 cycles into frame + lda #$10 + sta $2001 + + pla + rti + + +.align 256 +sprites: + ; Reference sprites around manually-drawn line + .byte 118, 0, 0, 80 + .byte 118, 0, 0, 80+8 + .byte 118, 1, 0, 80+16 + + .byte 122, 0, 0, 80 + .byte 122, 0, 0, 80+8 + + .res 256 - 5*4, $FF + + +init_graphics: + sei + + ; Init PPU + bit $2002 +init_graphics_1: + bit $2002 + bpl init_graphics_1 +init_graphics_2: + bit $2002 + bpl init_graphics_2 + lda #0 + sta $2000 + sta $2001 + + ; Load alternating black and white palette + lda #$3F + sta $2006 + ldy #$E0 + sty $2006 +init_graphics_3: + sta $2007 + eor #$0F + iny + bne init_graphics_3 + + rts + +; Freeze program if this somehow gets triggered, rather +; than silently messing up timing +irq: jmp irq + + +.segment "HEADER" + .byte "NES",26, 2,1, 0,0 ; 32K PRG, 8K CHR, UNROM + .byte 0,0,0,0,0,0,0,0 + +.segment "VECTORS" + .word 0,0,0, nmi, reset, irq + +.segment "CHARS" + ; Characters for sprites + .byte $FF,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0 + + .byte $FF,$FF,$FF,$FF,$FF,0,0,0 + .byte 0,0,0,0,0,0,0,0 + + .res $2000 - $20 diff --git a/nmi_sync/demo_pal.nes b/nmi_sync/demo_pal.nes new file mode 100644 index 0000000000000000000000000000000000000000..033d9e6f33ba5f5aba3d2e23a9ab63c47e34542e GIT binary patch literal 40976 zcmeI*J!=#}7y#h8J&3V#1uLL@p6;bRdu!)Bh@lCo4md?Oz-k8e~ + +.include "nmi_sync.s" + +reset: + ; Initialize PPU and palette + jsr init_graphics + + ; Synchronize with PPU and enable NMI + jsr init_nmi_sync_pal + + ; Loop endlessly +loop: jsr wait_nmi + + ; You could run normal code between NMIs here, + ; as long as it completes BEFORE NMI. If it + ; takes too long, synchronization may be off + ; by a few cycles for that frame. + ; ... + + jmp loop + + +.align 256 ; branches must not cross page +nmi: + pha + + ; Do this sometime before you DMA sprites + jsr begin_nmi_sync + + ; DMA then enable sprites. Instructions before + ; STA $4014 (excluding begin_nmi_sync) must take + ; an even number of cycles. The only required + ; instruction here is STA $4014. + bit <0 ; to make cycle count even + lda #0 + sta $2003 + lda #>sprites + sta $4014 + lda #$10 + sta $2001 + + ; Our instructions up to this point MUST total + ; 6900 cycles, so we'll burn the rest in a loop. + + ; delay 6900 - 30 + lda #9 + sec +nmi_1: pha + lda #150 +nmi_2: sbc #1 + bne nmi_2 + pla + sbc #1 + bne nmi_1 + + jsr end_nmi_sync + + ; We're now synchronized exactly to 7471 cycles + ; after beginning of frame. + + ; delay 20486 - 7471 - 5 + nop + lda #85 + sec +nmi_3: pha + lda #28 +nmi_4: sbc #1 + bne nmi_4 + pla + sbc #1 + bne nmi_3 + + ; Draw short line using monochrome mode bit + lda #$11 + sta $2001 ; writes 20486 cycles into frame + lda #$10 + sta $2001 + + pla + rti + + +.align 256 +sprites: + ; Reference sprites around manually-drawn line + .byte 118, 0, 0, 82 + .byte 118, 0, 0, 82+8 + .byte 118, 1, 0, 82+16 + + .byte 122, 0, 0, 84 + .byte 122, 0, 0, 84+8 + + .res 256 - 5*4, $FF + + +init_graphics: + sei + + ; Init PPU + bit $2002 +init_graphics_1: + bit $2002 + bpl init_graphics_1 +init_graphics_2: + bit $2002 + bpl init_graphics_2 + lda #0 + sta $2000 + sta $2001 + + ; Load alternating black and white palette + lda #$3F + sta $2006 + ldy #$E0 + sty $2006 +init_graphics_3: + sta $2007 + eor #$0F + iny + bne init_graphics_3 + + rts + +; Freeze program if this somehow gets triggered, rather +; than silently messing up timing +irq: jmp irq + + +.segment "HEADER" + .byte "NES",26, 2,1, 0,0 ; 32K PRG, 8K CHR, UNROM + .byte 0,0,0,0,0,0,0,0 + +.segment "VECTORS" + .word 0,0,0, nmi, reset, irq + +.segment "CHARS" + ; Characters for sprites + .byte $FF,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0 + + .byte $FF,$FF,$FF,$FF,$FF,0,0,0 + .byte 0,0,0,0,0,0,0,0 + + .res $2000 - $20 diff --git a/nmi_sync/nmi_sync.s b/nmi_sync/nmi_sync.s new file mode 100644 index 0000000..b0557f1 --- /dev/null +++ b/nmi_sync/nmi_sync.s @@ -0,0 +1,185 @@ +; Allows precise PPU synchronization in NMI handler, without +; having to cycle-time code outside NMI handler. + +.zeropage +nmi_sync_count: .res 1 + +.code +.align 256 ; branches must not cross page + +; Initializes synchronization and enables NMI +; Preserved: X, Y +; Time: 15 frames average, 28 frames max +init_nmi_sync: + ; Disable interrupts and rendering + sei + lda #0 + sta $2000 + sta $2001 + + ; Coarse synchronize + bit $2002 +init_nmi_sync_1: + bit $2002 + bpl init_nmi_sync_1 + + ; Synchronize to odd CPU cycle + sta $4014 + + ; Fine synchronize + lda #3 +init_nmi_sync_2: + sta nmi_sync_count + bit $2002 + bit $2002 + php + eor #$02 + nop + nop + plp + bpl init_nmi_sync_2 + + ; Delay one frame +init_nmi_sync_3: + bit $2002 + bpl init_nmi_sync_3 + + ; Enable rendering long enough for frame to + ; be shortened if it's a short one, but not long + ; enough that background will get displayed. + lda #$08 + sta $2001 + + ; Can reduce delay by up to 5 and this still works, + ; so there's a good margin. + ; delay 2377 + lda #216 +init_nmi_sync_4: + nop + nop + sec + sbc #1 + bne init_nmi_sync_4 + + sta $2001 + + lda nmi_sync_count + + ; Wait for this and next frame to finish. + ; If this frame was short, loop ends. If it was + ; long, loop runs for a third frame. +init_nmi_sync_5: + bit $2002 + bit $2002 + php + eor #$02 + sta nmi_sync_count + nop + nop + plp + bpl init_nmi_sync_5 + + ; Enable NMI + lda #$80 + sta $2000 + + rts + + +; Initializes synchronization and enables NMI on PAL NES +; Preserved: X, Y +; Time: about 20 frames +init_nmi_sync_pal: + ; NMI will first occur within frame 2 after + ; synchronization + lda #2 + sta nmi_sync_count + + ; Disable interrupts and rendering + sei + lda #0 + sta $2000 + sta $2001 + + ; Coarse synchronize + bit $2002 +init_nmi_sync_pal_1: + bit $2002 + bpl init_nmi_sync_pal_1 + + ; Synchronize to odd CPU cycle + sta $4014 + bit <0 + + ; Fine synchronize +init_nmi_sync_pal_2: + bit <0 + nop + bit $2002 + bit $2002 + bpl init_nmi_sync_pal_2 + + ; Enable NMI + lda #$80 + sta $2000 + + rts + + +; Waits until NMI occurs. +; Preserved: A, X, Y +wait_nmi: + pha + + ; Reset high/low flag so NMI can depend on it + bit $2002 + + ; NMI must not occur during taken branch, so we + ; only use branch to get out of loop. + lda nmi_sync_count +wait_nmi_1: + cmp nmi_sync_count + bne wait_nmi_2 + jmp wait_nmi_1 +wait_nmi_2: + pla + rts + + +; Must be called in NMI handler, before sprite DMA. +; Preserved: X, Y +begin_nmi_sync: + lda nmi_sync_count + and #$02 + beq begin_nmi_sync_1 +begin_nmi_sync_1: + rts + + +; Must be called after sprite DMA. Instructions before this +; must total 1715 (NTSC)/6900 (PAL) cycles, treating +; JSR begin_nmi_sync and STA $4014 as taking 10 cycles total) +; Next instruction will begin 2286 (NTSC)/7471 (PAL) cycles +; after the cycle that the frame began in. +; Preserved: X, Y +end_nmi_sync: + lda nmi_sync_count + inc nmi_sync_count + and #$02 + bne end_nmi_sync_1 +end_nmi_sync_1: + lda $2002 + bmi end_nmi_sync_2 +end_nmi_sync_2: + bmi end_nmi_sync_3 +end_nmi_sync_3: + rts + + +; Keeps track of synchronization on frames where no +; synchronization is needed (where begin_nmi_sync/end_nmi_sync +; aren't called). +; Preserved: A, X, Y +track_nmi_sync: + inc nmi_sync_count + rts diff --git a/nmi_sync/readme.txt b/nmi_sync/readme.txt new file mode 100644 index 0000000..274b9cd --- /dev/null +++ b/nmi_sync/readme.txt @@ -0,0 +1,268 @@ +NES Precise NMI Synchronization +------------------------------- +This library allows synchronizing exactly to the PPU from within a +normal NMI handler. It allows PPU writes from within an NMI handler of +the same precision that is otherwise only possible using completely +cycle-timed code. It supports NTSC and PAL. + +The code is written for the ca65 assembler. Other assemblers will +require minor changes. + +For more about how the technique works, see +http://wiki.nesdev.com/w/index.php/Consistent_frame_synchronization . + + +Demos +----- +NTSC and PAL demos are included. These show minimal use of this library +to manually draw a line using timed writes. They manually draw a line by +setting bit 0 of $2001 to enable monochrome mode. The time of the write +determines the position on screen, so any synchronization problems will +cause the line's left side to move. Reference lines are shown above and +below the manually-drawn one, showing the correct left edge position. + +On the NTSC version, the left pixel of the middle line will be darker, +since it's flashing: + + ******************** + *** + -******************* + *** + ******************** + +On the PAL version, the left pixel or two will be darker, since it's +flashing. The left edge's general position will change randomly each +time you press reset. The upper line shows the farthest left it can ever +be after reset, and the lower line shows the farthest right it can be. +It may appear as one of the following: + + ******************** + *** + -******************* + *** + ****************** + + + ******************** + *** + -****************** + *** + ****************** + + + ******************** + *** + -***************** + *** + ****************** + + +Usage +----- +To use this library: + +* Include "nmi_sync.s". + +* Call init_nmi_sync[_pal] before synchronization is needed, then wait +in a loop that calls wait_nmi, does anything that is necessary between +NMIs, then loops back. + +* Inside NMI, call begin_nmi_sync, do sprite DMA, delay appropriately, +then call end_nmi_sync. If running on NTSC NES, sprite and/or background +rendering MUST be enabled before calling end_nmi_sync. It can be +disabled again after it returns. + +* On frames where synchronization isn't needed, but will be needed a few +frames later, call track_nmi_sync. If it won't be needed for a long +time, nothing needs to be done, and init_nmi_sync can be called again +later to re-synchronize and start over. + +After end_nmi_sync returns, the next instruction will be synchronized to +2286 (NTSC)/7471 (PAL) cycles after the frame began. + +If the NMI handler's timing is off by even one cycle, synchronization +will fail sometimes. To verify timing, write an odd value to $2001 after +synchronization. The point where monochrome mode begins on the scanline +should be very stable. If it ever jiggles, then something is wrong in +your code. + +The following demonstrates: + + .include "nmi_sync.s" + + reset: + ... + jsr init_nmi_sync/init_nmi_sync_pal + + loop: + jsr wait_nmi + ...anything done outside of NMI... + jmp loop + + nmi: + ...save registers... + jsr begin_nmi_sync ; count as 6 cycles + ... + + ; Instructions between nmi: and STA $4014 must take an even + ; number of cycles. STA $4014 must be done as a part of + ; synchronization. + sta $4014 ; count as 4 cycles + ... + + ; Instructions between nmi: and here must take + ; 1715 (NTSC)/6900 (PAL) cycles. + + delay 1715 - ... ; NTSC + delay 6900 - ... ; PAL + + ; On NTSC, sprite and/or background rendering MUST be + ; enabled at this point, or else synchronization will + ; be lost. + + jsr end_nmi_sync + + ; Sprite and background rendering can be disabled again + ; at this point, if it's not needed. + + ; Next instruction is now synchronized to exactly + ; 2286 (NTSC)/7471 (PAL) cycles after cycle that + ; frame began in. + ... + + ...restore registers... + rti + + +NTSC Timing +----------- +Given the following NMI handler + + nmi: + ... + jsr end_nmi_sync + delay N cycles + lda #$01 + sta $2001 ; writes 2286+N+5 cycles into frame + +The $2001 write will be 2286+N+5 cycles after frame began. To have the +$2001 write at a particular pixel, calculate N with + + pixel = y * 341 + x + N = (pixel + 290) / 3 + +For example, to write at y=121 x=80, N should be 13877. + +The pixel position can be calculated from N with + + pixel = N * 3 - 290 + y = pixel / 341 + x = pixel - (y * 341) + +where y=0 x=0 is the top-left pixel. For example, if the delay is 13877, +then the $2001 write will occur at y=121 x=80. + +After init_nmi_sync is called, the first, third, fifth, etc. frames have +the above timing. On the second, fourth, sixth, etc. frames, the write +is one pixel LATER (x=81 in the example). This one-pixel jitter is an +unavoidable hardware limitation. + +The above applies to enabling monochrome mode by setting bit 0 of $2001; +other registers take effect at slightly different times. For some +registers, the pixel written can vary slightly after pressing reset. +It's best to use the above as a guide, reduce delay until glitches occur +due to it occurring too early, increase delay until glitches occur as +well, then choose a delay in the middle of those two extremes. + + +PAL Timing +---------- +Given the following NMI handler + + nmi: + ... + jsr end_nmi_sync + delay N cycles + lda #$01 + sta $2001 ; writes 7471+N+5 cycles into frame + +The $2001 write will be 7471+N+5 cycles after frame began. To have the +$2001 write at a particular pixel, calculate N with + + pixel = y * 341 + x + N = (pixel * 5 + 1444) / 16 + +For example, to write at y=121 x=82, N should be 13009. + +The pixel position can be calculated from N with + + pixel = (N * 16 - 1444 + extra) / 5 + y = pixel / 341 + x = pixel - (y * 341) + +where y=0 x=0 is the top-left pixel, and extra is an additional delay +that depends on whether it's an even or odd frame, and also a random +offset selected when reset is pressed. For example, if the delay is +13009, then the $2001 write will occur no earlier than y=121 x=81. + +After init_nmi_sync is called, the first, third, fifth, etc. frames have +the above timing. On the second, fourth, sixth, etc. frames, extra is 8 +greater, causing the write to be one or two pixels LATER (x=83 or 84 in +the example). This jitter is an unavoidable hardware limitation. + +After pressing reset, extra is set to a random value from 0 to 7, +causing writes to be one or two pixels later. This doesn't change until +reset is pressed. This is also unavoidable. + +The above applies to enabling monochrome mode by setting bit 0 of $2001; +other registers take effect at slightly different times. For some +registers, the pixel written can vary slightly after pressing reset. +It's best to use the above as a guide, reduce delay until glitches occur +due to it occurring too early, increase delay until glitches occur as +well, then choose a delay in the middle of those two extremes. + + +Limitations +----------- +* DMC samples can't be played, since they introduce too much timing +variation. A normal NMI performs just as well/poorly in this case. + +* If NMI occurs while executing an instruction that takes more than +three cycles, synchronization will be upset for that frame. Note that a +taken branch counts as more than three cycles, due to an obscure detail. +To avoid this, call wait_nmi each frame, or sit in a loop of +instructions two/three-cycle instructions. I have found some workarounds +that allow NMI to occur during almost any instruction, but they require +some extra helper sprites and use of the sprite overflow flag; contact +me for details. + +* Every frame from that point, NMI must either call begin/end_nmi_sync, +or track_nmi_sync, or else synchronization will be lost and +init_nmi_sync will need to be called again. + +* The NMI handler must not read $2002 until after end_nmi_sync has been +called. + +* After synchronizing, NMI and rendering must be enabled by the next +frame, and left enabled (rendering can be disabled on PAL since it +doesn't affect PPU timing). If rendering isn't desired, it can be +enabled just before calling end_nmi_sync, then disabled afterwards. + +* Sprite DMA must be done on frames needing synchronization, even if no +sprites are being used. + +* Even when perfectly synchronized, frames don't always begin exactly on +a cycle. On NTSC, a given cycle will toggle between two adjacent pixels. +On PAL, it will toggle between the calculated pixel and one or two +pixels after. These effects are hardware limitations; this library +synchronizes as precisely as is possible in software. + + +Thanks +------ +* Bregalad for his initial questions that inspired the idea, and for +trying an early version. + + +-- +Shay Green diff --git a/nmi_sync/unrom.cfg b/nmi_sync/unrom.cfg new file mode 100644 index 0000000..93fc936 --- /dev/null +++ b/nmi_sync/unrom.cfg @@ -0,0 +1,27 @@ +# 32K iNES ROM with optional 8K CHR + +MEMORY +{ + ZP: start = $10, size = $E0; + RAM: start = $200, size = $500; + + HEADER: start = 0, size = $10, fill=yes; + + ROM: start = $8000, size = $7FF4, fill=yes, fillval=$FF; + VECTORS:start = $FFF4, size = $C, fill=yes; + + CHARS: start = 0, size = $2000, fillval=$FF; +} + +SEGMENTS +{ + ZEROPAGE: load = ZP, type = zp; + BSS: load = RAM, type = bss,align=$100; + + HEADER: load = HEADER, type = ro; + CODE: load = ROM, type = ro, align=$100; + RODATA: load = ROM, type = ro, align=$100; + VECTORS: load = VECTORS, type = ro; + + CHARS: load = CHARS, type = ro, align=$2000, optional=yes; +} diff --git a/ny2011/ny2011.nes b/ny2011/ny2011.nes new file mode 100644 index 0000000000000000000000000000000000000000..ce76082712e3feac47b2d3209aefdb6329f6f7a8 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/oam_read/oam_read.nes b/oam_read/oam_read.nes new file mode 100644 index 0000000000000000000000000000000000000000..31d8f7571aa6271c3a145b0e040854c71456e70e GIT binary patch literal 40976 zcmeI1ZERat8Gv73C$5P++oa9nrfGMyc2ZZBa(^Hcfz?^CR!+HV(clMYNSw5>=MJKj4q_9&3mrz zNk4=%Y2A-adQTlc_k5r8ocEqe$^JcG7*ISOkf}|H43GgbKnBPF86X2>fDDiUGC&5% z02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5% z02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5% z02v?yWPl8i0Wv@a$N(8217v^n+<4i3XjJ;S*ZRh^@Da~8* z$4@)o{*;4LFE=o;VCfvTV28``eVEwerBwXUkN_|A%qnBPF;#o9TIgwdMH4X`k9USe z_BeSxoYI3SJ;Z)kV&5(;gwsKYpN`K%)5i{!u<&BgzL7ecss)=KUJHp~Hy1`{1No0P z-W!1myp z|H71VDl*o#-k#j@Sao+{(Yu=posO{w4(H)=kt`f|m9oQD}9cD9n@3mXgVrdNyAjj+Cv z4OdQKG~|2?oA_A1iO=h9e-`bx49Lf@XwhCtozq^ZIHUE5(Nr8wW7W9vnCxwYuwiPg zKgLOOaAx34B>X^uHA80xSh*syb6v{fOytY}7h|!ZD)UtrHnLk4T+OWt`&1PNEi^E2 zLt}nEGhnd%LvvnbF}#xBd}l9by*P8On>oF)FFuOx=>vw}H?RXgSiLZSUo!*whhFh2 zVjJOiaN;})&UJC)1UpeR-pF~laUrL0V+*q6gkG+z|3Z-GM@VvL_HvkJ2%*1g-Udo^F^Ja*E*cl+ncC*q!sg#^ zZm#m3eX)*e+=%wGD#zH+4%FEmu{B`M{%|W^cD{=Zmyx*2|NFtJC%V|&Bk1mrd3fa! z#UF2W89Qvn_?Wm5x1V}6R0!E#^w_Zf9>-V<8Vx;^V!JAM4=gR=9W^oX^{-AQMn>Te zt(yfDDiUGC&5%zz5U77gGtAoJgl9 zzBxAjG&?jgnqXr`*)jaf5j*${8%-QPG%`80iw#eS;_<}s#3V~(5{HgWbs9`1j!v;B z4?M9841ccO&cS@o?27SO{BuHndCvbB{$8Jbt5tZ_{;%%AhlJ;O{B`x)XYHjlfZ^HM zA8X#6_nowFEzNtE_V>qj%>MgbejWe5N*r#zufu)F279{x)9N?sa8LS>ZGx72p9bzZ zeu#(!_|IiJjjt*uNl3TS_`!k>BfELjm&Nuj4<-WNEKD#_9Vr&ot?WxxdErX!>r{SR6)h@ zJB%jB50CTRAUTw_td?bgBraZjKr)&%O*0wA_8l%4Ez2q{gJjDzS5318chhw9ChX?s zB`djmjo2Hfvp_N`^ha=fms@U85ZmB;PvcKSma$^ zZnduCdMuY%niYAM$z)P&9VA=9!J#7_ z%u7avTFgu0{+99JF@igE)`ypr$}>cssCl31D%>szDi2irTIR`JbV#rh6|csoWSL6CI90pmsT2;QcV$Ptj_|9T1c zf>)qR@qA~x&;LHCI~gDYWPl8i0Wv@a$N(8217v^ diff --git a/oam_read/source/common/ascii.chr b/oam_read/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/oam_read/source/common/build_rom.s b/oam_read/source/common/build_rom.s new file mode 100644 index 0000000..7636916 --- /dev/null +++ b/oam_read/source/common/build_rom.s @@ -0,0 +1,91 @@ +; Builds program as iNES ROM + +; Default is 16K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +; Move code to $C000 +.segment "DMC" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_ascii_chr + .endif + rts + +post_exit: + jsr set_final_result + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code diff --git a/oam_read/source/common/console.s b/oam_read/source/common/console.s new file mode 100644 index 0000000..f2d6c19 --- /dev/null +++ b/oam_read/source/common/console.s @@ -0,0 +1,224 @@ +; Scrolling text console with line wrapping, 30x29 characters. +; Buffers lines for speed. Will work even if PPU doesn't +; support scrolling (until text reaches bottom). Keeps border +; along bottom in case TV cuts it off. +; +; Defers most initialization until first newline, at which +; point it clears nametable and makes palette non-black. +; +; ** ASCII font must already be in CHR, and mirroring +; must be vertical or single-screen. + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs +console_margin = 1 + +console_buf_size = 32 +console_width = console_buf_size - (console_margin*2) + +zp_byte console_pos +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_buf_size + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + jmp console_clear_line_ + + +; Hides console by blacking palette and disabling PPU. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +console_wait_vbl_: + lda console_scroll + cmp #-1 + jne wait_vbl_optional + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + txa + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldx #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + + ; Clear attributes + lda #0 + ldx #$40 +: sta PPUDATA + dex + bne :- + + pla + tax + jmp console_show + + +; Shows console display +; Preserved: X, Y +console_show: + pha + + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + + lda #$30 ; white + jsr console_load_palette_ + + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + stx console_temp + + ; Newline if buf full and next char isn't space + ldx console_pos + bpl :+ + cmp #' ' + beq @ignore_space + ldx console_temp + jsr console_newline + stx console_temp + ldx console_pos +: + ; Write to buffer + sta console_buf+console_margin,x + dex + stx console_pos + +@ignore_space: + ldx console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_clear_line_ + + ; Scroll up 8 pixels and clear one line AHEAD + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + jsr console_add_8_to_scroll_ + jsr console_flush_a + jmp console_apply_scroll_ + + +; A = (A + 8) % 240 +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_clear_line_: + stx console_temp + + ; Start new clear line + lda #' ' + ldx #console_buf_size-1 +: sta console_buf,x + dex + bpl :- + ldx #console_width-1 + stx console_pos + + ldx console_temp + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + + pla + rts + +console_flush_: + lda console_scroll +console_flush_a: + ; Address line in nametable + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + sta PPUADDR + + ; Copy line + stx console_temp + ldx #console_buf_size-1 +: lda console_buf,x + sta PPUDATA + dex + bpl :- + ldx console_temp + + rts + diff --git a/oam_read/source/common/crc.s b/oam_read/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/oam_read/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/oam_read/source/common/delay.s b/oam_read/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/oam_read/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/oam_read/source/common/devcart.bin b/oam_read/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..e8958c60cee839eb37da1072177122577e9b3155 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1{r|t0VFA~KUn`w^MI9FXn9E`R;=(V5s(&Z@SlFb^WXpf00NG! A0ssI2 literal 0 HcmV?d00001 diff --git a/oam_read/source/common/macros.inc b/oam_read/source/common/macros.inc new file mode 100644 index 0000000..52982a6 --- /dev/null +++ b/oam_read/source/common/macros.inc @@ -0,0 +1,169 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro incxy7 + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro diff --git a/oam_read/source/common/neshw.inc b/oam_read/source/common/neshw.inc new file mode 100644 index 0000000..bdd4136 --- /dev/null +++ b/oam_read/source/common/neshw.inc @@ -0,0 +1,37 @@ +; NES I/O locations and masks + +; Clocks per second +.ifndef CLOCK_RATE + CLOCK_RATE = 1789773 ; NTSC +; CLOCK_RATE = 1662607 ; PAL +.endif + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 diff --git a/oam_read/source/common/ppu.s b/oam_read/source/common/ppu.s new file mode 100644 index 0000000..155a9ed --- /dev/null +++ b/oam_read/source/common/ppu.s @@ -0,0 +1,129 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + lda #0 + jsr fill_screen + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts diff --git a/oam_read/source/common/print.s b/oam_read/source/common/print.s new file mode 100644 index 0000000..d2d7b81 --- /dev/null +++ b/oam_read/source/common/print.s @@ -0,0 +1,225 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + pha + and #$0F + jsr @nibble + pla + rts + +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: Y +print_dec: + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jmp print_char + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/oam_read/source/common/shell.inc b/oam_read/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/oam_read/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/oam_read/source/common/shell.s b/oam_read/source/common/shell.s new file mode 100644 index 0000000..635ce9f --- /dev/null +++ b/oam_read/source/common/shell.s @@ -0,0 +1,330 @@ +; Common routines and runtime + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +;**** Special globals **** + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +.segment "NVRAM" + ; Beginning of variables not cleared at startup + nvram_begin: + +;**** Code segment setup **** + +.segment "RODATA" + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +; Move code to $E200 ($200 bytes for text output) +.segment "DMC" + .res $2200 + +; Devcart corrupts byte at $E000 when powering off +.segment "CODE" + nop + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "print.s" +.include "delay.s" +.include "crc.s" +.include "testing.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts + +.endif + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_oam +.endif + + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sei + cld + ldx #$FF + txs + pha + + setb SNDCHN,0 + .ifndef BUILD_NSF + setb PPUCTRL,0 + .endif + + pla + pha + jsr report_result + ;jsr clear_nvram ; TODO: was this needed for anything? + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +; Clears $0-($100+S) and nv_ram_end-$7FF +clear_ram: + lda #0 + + ; Main pages + tax +: sta 0,x + sta $300,x + sta $400,x + sta $500,x + sta $600,x + sta $700,x + inx + bne :- + + ; Stack except that above stack pointer + tsx + inx +: dex + sta $100,x + bne :- + + ; BSS except nvram + ldx #<__NVRAM_SIZE__ +: sta __NVRAM_LOAD__,x + inx + bne :- + + rts + + +; Clears nvram +clear_nvram: + ldx #<__NVRAM_SIZE__ + beq @empty + lda #0 +: dex + sta __NVRAM_LOAD__,x + bne :- +@empty: + rts + + +; Prints filename and newline, if available, otherwise nothing. +; Preserved: A, X, Y +print_filename: + .ifdef FILENAME_KNOWN + pha + jsr print_newline + setw addr,filename + jsr print_str_addr + jsr print_newline + pla + .endif + rts + +.pushseg +.segment "RODATA" + ; Filename terminated with zero byte. + filename: + .ifdef FILENAME_KNOWN + .incbin "ram:nes_temp" + .endif + .byte 0 +.popseg + + +;**** ROM-specific **** +.ifndef BUILD_NSF + +.include "ppu.s" + +avoid_silent_nsf: +play_byte: + rts + +; Loads ASCII font into CHR RAM +.macro load_ascii_chr + bit PPUSTATUS + setb PPUADDR,$00 + setb PPUADDR,$00 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page +.endmacro + +; Disables interrupts and loops forever +.ifndef CUSTOM_FOREVER +forever: + sei + lda #0 + sta PPUCTRL +: beq :- + .res $10,$EA ; room for code to run loader +.endif + + +; Default NMI +.ifndef CUSTOM_NMI + zp_byte nmi_count + + nmi: + inc nmi_count + rti + + ; Waits for NMI. Must be using NMI handler that increments + ; nmi_count, with NMI enabled. + ; Preserved: X, Y + wait_nmi: + lda nmi_count + : cmp nmi_count + beq :- + rts +.endif + + +; Default IRQ +.ifndef CUSTOM_IRQ + irq: + bit SNDCHN ; clear APU IRQ flag + rti +.endif + +.endif diff --git a/oam_read/source/common/testing.s b/oam_read/source/common/testing.s new file mode 100644 index 0000000..ba41f03 --- /dev/null +++ b/oam_read/source/common/testing.s @@ -0,0 +1,106 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "RODATA",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing: + jmp init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/oam_read/source/common/text_out.s b/oam_read/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/oam_read/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +Most update a running CRC-32 checksum which can be checked with +check_crc, allowing ALL the output to be checked very easily. If the +checksum doesn't match, it is printed, so you can run the code on a NES +and paste the correct checksum into your code. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported due to their complexity. I +load the code at $E000 since my devcart requires it, and I don't want +the normal ROM to differ in any way from what I've tested. This also +allows easy self-modifying code. + +Some macros are used to make common operations more convenient. The left +is equivalent to the right: + + Macro Equivalent + ------------------------------------- + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + set addr,byte lda #byte + sta addr + + zp_byte name .zeropage + name: .res 1 + .code + + zp_res name,n .zeropage + name: .res n + .code + + bss_res name,n .bss + name: .res n + .code + + for_loop routine,begin,end,step + calls routine with A set to successive values + + loop_n_times routine,count + calls routine with A from 0 to count-1 + +-- +Shay Green diff --git a/oam_stress/oam_stress.nes b/oam_stress/oam_stress.nes new file mode 100644 index 0000000000000000000000000000000000000000..a6168a8de61e535f108d9a81875a8ee9d40cc163 GIT binary patch literal 40976 zcmeI1ZERat8Gw(k6W2tZZIZZg(=>uSzR!8idrzd~;J(jwOEw!3seuU%paC?12G9T+Km%w14WI!ufCkV2 z8bAYR01co4G=K)s02)98XaEhM0W^RH&;S}h184vZpaC?12G9T+Km%w14WI!ufCkV2 z8bAYR01co4G=K)s02)98XaEhM0W^RH&;S}h184vZpaC?12G9T+Km%w14WI!ufCkV2 z8bAYR01co4G=K)s02)98XaEhM0W^RH&;S}h18CrZ3@kZARL*OZK3|INV9wAP#h!PD z&YIuOsEIQ#RUuJ#{v5QR#|ohXkm#fNXlSR0gJs*Mq#?(UtUO=Jw$<#s2_KGytYLv| zW?uD1Rd-bN&>!UKxAJLk%uPaPLo=l2poj8Mc)@MljLt>N?wXC2J$%?L*}*AS>O<9Q zgY&nC2I+6|eLT|!nKsD0PgV})Lua6Kl)YUE*EVD~%nC$-iCwU#N#AS_D^8?5=S zR4PRMLk;5%QL+FfT7&wn;(xQHdlJ*TSh=g#D%+I1PwLR_Y|Cj1ZclQ5U?M!#{e@E>|xA)TprwS?i zFWdVYa7YW@o65lg2(w>s_dU^04CiU@o6$LqF!-{uB#~fJ<%Ptn9ByCjl(79rir8i|8HMW4W2jL{VW)-X(Sbdq6K3mdQN$^XpYv#N0VVRg_c6vBciwFfrinw{tzd% zp2_Z6zxSamt$AjG4}nf(u^&nk*7DGjy}D)yxEY- zJ-^s0G5Xz-^4lVdD<>-P%c;hX=*ys?K^Gvhl9Civ{!*ex%9K`UutL9FqDFz9s?bjq z8U06z{;6UfJpFkY8WT#dmg%p`^j2B>FidoA4!Z0}b_JO^E|esFL9<;nME&Kc^6d)k zEh`5r=Ghmsws{*fTo6?I2Zmzd!8XFyp6OOXf6QZq7q#^dkB3Kx2VyilIyy2+vV z8G~@0z@lN1Hn6V|`bt>@3`^0cAf^cas;z|uKLz78wp*fiBPRvHX_l{OjT9UW54X3t zIcEGR8;k)T*|A_O!y9+@A&DlpNzHz{w@I?oYT&)iSlqN&tKV}oK&HGUnBMZcEwxp) z+ZVJ{!$y>!l^Dc^a;U;XMfJfw(J|RhhYRU;u$ArrU+GRTmiC#>uE6`vFOYNTj>Dt{ z?vBpGq!lg<-(liVJ1>$As&959(`@Y;(Sa9^NiN3ow@=7q?5!P_0GVWk}iw`6avK%uY|%W7y$rs>VM<+Kblt zMCqO)+$~}Rn5Jsn(tfD+(&w)2^qhma`NNZQatHA4B2Ig2%J-@;<=?kU#;HHZZ|c3q zAHiw?uJZTp{}6q$5~cGMrhP$~uPiOW&ytaWuYF}~d^9{ZMt)zv{eidplMef#0W^RH z&;S}h184vZpaC?12G9T+Km%w14WI!u@Ln_U`DmC%Mq;s%Zww7TPLGZZhUw54Jpq3? zqDP*fgW;1$2S&&D(Ef2=JRCk59;M-U_~?motHF49Y@B}f(5Lqh&6#X8l4PcBYDN1b z{5c`DJnei0ey>lzSs*ca3F zx~>yJSUmp_!9XOF$wUIs-r{mj*Y(^o5v*r2tC>ul+{;WepCNl$=8_)SyGG~@)9FMo z!1eoK{3d%HpcDKF>bc9c%QeKVQLBI81(?g66PLzm7K&eO{h#a zEJ#S)m4N*VW-`mU9GtHpl;<+JIIlP9g4VfQf(Y{R)r?io*(1ww?njUiXrF)pZ_*k! z*Bn0w?=rm2(0+~9Rdl?0B^}RX%!7ya7I|YxW+zTUuGbeA7uWIfbyy(e1p{0yT!BsU=k@6U we|%tfG=K)s02)98XaEhM0W^RH&;S}h184vZpaC?12G9T+Km%yt|Iony0LA!wRsaA1 literal 0 HcmV?d00001 diff --git a/oam_stress/readme.txt b/oam_stress/readme.txt new file mode 100644 index 0000000..1834e64 --- /dev/null +++ b/oam_stress/readme.txt @@ -0,0 +1,81 @@ +NES OAM Stress Test +------------------- +Thoroughly tests OAM address ($2003) and read/write ($2004). On an NTSC +NES, this passes only for one of the four random PPU-CPU +synchronizations at power/reset. Test takes about 30 seconds, unless it +fails. + +This test randomly sets the address, then randomly either writes a +random number of random bytes, or reads from the current address a +random number of times and verifies that it matches what's expected. It +does this for tens of seconds (refreshing OAM periodically so it doesn't +fade). Once done, it verifies that all bytes in OAM match what's +expected. + +Expected behavior: + +$2003 write sets OAM address. + +$2004 write sets byte at current OAM address to byte written, then +increments OAM address. + +$2004 read gives byte at current OAM address, without modifying OAM +address. + + +Flashes, clicks, other glitches +------------------------------- +Some tests might need to turn the screen off and on, or cause slight +audio clicks. This does not indicate failure, and should be ignored. +Only the test result reported at the end is important, unless stated +otherwise. + + +Text output +----------- +Tests generally print information on screen. They also output the same +text as a zero-terminted string beginning at $6004, allowing examination +of output in an NSF player, or a NES emulator without a working PPU. The +tests also work properly if the PPU doesn't set the VBL flag properly or +doesn't implement it at all. + +The final result is displayed and also written to $6000. Before the test +starts, $80 is written there so you can tell when it's done. If a test +needs the NES to be reset, it writes $81 there (emulator should wait a +couple of frames after seeing $81). In addition, $DE $B0 $G1 is written +to $6001-$6003 to allow an emulator to detect when a test is being run, +as opposed to some other NES program. In NSF builds, the final result is +also reported via a series of beeps (see below). + +See the source code for more information about a particular test and why +it might be failing. Each test has comments and correct output at the +top. + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to avoid the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +In addition to the other text output methods described above, NSF builds +report essential information bytes audibly, including the final result. +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason as listed in the +source code by the corresponding set_code line. Examples: + +Tones Binary Decimal Meaning +- - - - - - - - - - - - - - - - - - - - +low 0 0 passed +low high 01 1 failed +low high low 010 2 error 2 + +-- +Shay Green diff --git a/oam_stress/source/common/ascii.chr b/oam_stress/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/oam_stress/source/common/build_multi.s b/oam_stress/source/common/build_multi.s new file mode 100644 index 0000000..e96b5a4 --- /dev/null +++ b/oam_stress/source/common/build_multi.s @@ -0,0 +1,116 @@ +; Builds program as bank for multi-test MMC1 ROM + +; Define these so that error will occur if already defined +; by program +CUSTOM_MAPPER = 1 ; MMC1 +CHR_RAM = 1 + +.ifndef BANK_COUNT + BANK_COUNT = 16 +.endif + +.segment "VECTORS" + .word -1, -1 + .word reset + .word nmi, multi_reset, irq + +;;;; CHR-RAM +.define CHARS "CHARS_PRG" +.segment CHARS + ascii_chr: + +.segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: + +;;;; Shell +NEED_CONSOLE = 1 +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + load_ascii_chr + rts + +nv_res cur_bank + +.macro write_mmc1 Addr +: sta Addr + lsr a + cmp #$40 >> 5 + bne :- +.endmacro + +; Copies and executes following code (256 bytes max) +; from RAM at $700 +.macro exec_in_ram + ldx #0 +: lda @source,x + sta @dest,x + inx + bne :- + jmp @dest +@source = * +.org $700 +@dest: +.endmacro + +multi_reset: + exec_in_ram + + ; 16K PRG, upper bank switchable, and reset shift reg first + lda #$4A << 1 + write_mmc1 $8000 + + ; Select first bank and execute + lda #$40 + write_mmc1 $E000 + setb cur_bank,0 + jmp ($FFF8) +.reloc + +post_exit: + cmp #0 + beq @passed + + ; Print which test number failed + print_str newline,"While running test " + ldx cur_bank + inx + txa + jsr print_dec + print_str {" of ",.sprintf("%d", BANK_COUNT),newline,newline,newline} + + setb final_result,1 +: jmp :- + +@passed: + exec_in_ram + + ; 16K PRG, upper bank switchable, and reset shift reg first + lda #$4A << 1 + write_mmc1 $8000 + + ; Next bank + inc cur_bank + lda cur_bank + cmp #BANK_COUNT + bne @run_bank + jsr console_init ; clear screen + print_str {"All ",.sprintf("%d",BANK_COUNT)," tests passed",newline,newline,newline} + + setb final_result,0 +: jmp :- + +@run_bank: + ora #$40 + write_mmc1 $E000 + jmp ($FFF8) + +.reloc diff --git a/oam_stress/source/common/build_nsf.s b/oam_stress/source/common/build_nsf.s new file mode 100644 index 0000000..731c271 --- /dev/null +++ b/oam_stress/source/common/build_nsf.s @@ -0,0 +1,162 @@ +; Builds program as NSF music file + +.ifndef NSF_SONG_COUNT + NSF_SONG_COUNT = 1 +.endif + +.ifndef CUSTOM_NSF_HEADER + .segment "HEADER" + .byte "NESM",26,1 + .byte NSF_SONG_COUNT + .byte 1 ; start with first song + .word load_addr,reset,nsf_play +.endif + +.segment "CODE" + load_addr: + +.ifndef CUSTOM_NSF_VECTORS + .segment "VECTORS" + .word 0,0,0,nmi,internal_error,irq +.endif + +.include "shell.s" + +nv_res nsf_track,1 +nv_res nsf_running,1 + +.ifdef EMPTY_NSF_PLAY + CUSTOM_NSF_PLAY = 1 + nsf_play: + rts +.endif + +std_reset: + sta nsf_track + + ; In case NSF player interrupts init with play, + ; wait a while in init. If play interrupts, then + ; we just use that play call to run program, and + ; this is never resumed. + setb nsf_running,1 + delay_msec 500 + +.ifndef CUSTOM_NSF_PLAY + nsf_play: +.endif +std_nsf_play: + php + bit nsf_running + bpl :+ + plp + rts + +: lda nsf_running + beq :+ + + ; First call + setb nsf_running,0 + delay_msec 20 + jmp run_shell + + ; Player let init run too long before interrupting + ; with play, or play call interrupted itself. +: setb nsf_running,$80 + jsr clear_ram + jsr init_shell + print_str "NSF player called play recursively" + jmp internal_error + + +init_runtime: + rts + +post_exit: + jsr set_final_result +forever: + jmp forever + +; Reports A in binary as high and low tones, with +; leading low tone for reference. Omits leading +; zeroes. +; Preserved: A, X, Y +play_byte: + pha + + ; Make low reference beep + clc + jsr @beep + + ; Remove high zero bits + sec +: rol a + bcc :- + + ; Play remaining bits + beq @zero +: jsr @beep + asl a + bne :- +@zero: + + delay_msec 300 + pla + rts + +; Plays low/high beep based on carry +; Preserved: A, X, Y +@beep: + pha + + ; Set up square + lda #1 + sta SNDCHN + sta $4001 + sta $4003 + adc #$FE ; period=$100 if carry, $1FF if none + sta $4002 + + ; Fade volume + lda #$0F +: ora #$30 + sta $4000 + delay_msec 8 + sec + sbc #$31 + bpl :- + + ; Silence + sta SNDCHN + delay_msec 160 + + pla + rts + +bss_res nsf_activity,1 + +; Call periodically where there would otherwise be silence, +; so that NSF build won't be cut short in NSF player that +; detects silence. +; Preserved: A, X, Y +avoid_silent_nsf: + pha + lda nsf_activity + clc + adc #4 + sta nsf_activity + sta $4011 + pla + rts + + +init_wait_vbl: +wait_vbl_optional: +;wait_vbl: ; undefined so assembler error results if called + rts + + +.ifndef CUSTOM_IRQ + irq: +.endif +nmi: + jmp internal_error diff --git a/oam_stress/source/common/build_rom.s b/oam_stress/source/common/build_rom.s new file mode 100644 index 0000000..7636916 --- /dev/null +++ b/oam_stress/source/common/build_rom.s @@ -0,0 +1,91 @@ +; Builds program as iNES ROM + +; Default is 16K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +; Move code to $C000 +.segment "DMC" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_ascii_chr + .endif + rts + +post_exit: + jsr set_final_result + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code diff --git a/oam_stress/source/common/console.s b/oam_stress/source/common/console.s new file mode 100644 index 0000000..f2d6c19 --- /dev/null +++ b/oam_stress/source/common/console.s @@ -0,0 +1,224 @@ +; Scrolling text console with line wrapping, 30x29 characters. +; Buffers lines for speed. Will work even if PPU doesn't +; support scrolling (until text reaches bottom). Keeps border +; along bottom in case TV cuts it off. +; +; Defers most initialization until first newline, at which +; point it clears nametable and makes palette non-black. +; +; ** ASCII font must already be in CHR, and mirroring +; must be vertical or single-screen. + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs +console_margin = 1 + +console_buf_size = 32 +console_width = console_buf_size - (console_margin*2) + +zp_byte console_pos +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_buf_size + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + jmp console_clear_line_ + + +; Hides console by blacking palette and disabling PPU. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +console_wait_vbl_: + lda console_scroll + cmp #-1 + jne wait_vbl_optional + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + txa + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldx #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + + ; Clear attributes + lda #0 + ldx #$40 +: sta PPUDATA + dex + bne :- + + pla + tax + jmp console_show + + +; Shows console display +; Preserved: X, Y +console_show: + pha + + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + + lda #$30 ; white + jsr console_load_palette_ + + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + stx console_temp + + ; Newline if buf full and next char isn't space + ldx console_pos + bpl :+ + cmp #' ' + beq @ignore_space + ldx console_temp + jsr console_newline + stx console_temp + ldx console_pos +: + ; Write to buffer + sta console_buf+console_margin,x + dex + stx console_pos + +@ignore_space: + ldx console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_clear_line_ + + ; Scroll up 8 pixels and clear one line AHEAD + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + jsr console_add_8_to_scroll_ + jsr console_flush_a + jmp console_apply_scroll_ + + +; A = (A + 8) % 240 +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_clear_line_: + stx console_temp + + ; Start new clear line + lda #' ' + ldx #console_buf_size-1 +: sta console_buf,x + dex + bpl :- + ldx #console_width-1 + stx console_pos + + ldx console_temp + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + + pla + rts + +console_flush_: + lda console_scroll +console_flush_a: + ; Address line in nametable + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + sta PPUADDR + + ; Copy line + stx console_temp + ldx #console_buf_size-1 +: lda console_buf,x + sta PPUDATA + dex + bpl :- + ldx console_temp + + rts + diff --git a/oam_stress/source/common/crc.s b/oam_stress/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/oam_stress/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/oam_stress/source/common/crc_fast.s b/oam_stress/source/common/crc_fast.s new file mode 100644 index 0000000..5e1ffb4 --- /dev/null +++ b/oam_stress/source/common/crc_fast.s @@ -0,0 +1,65 @@ +; Fast table-based CRC-32 + +; Uses 1K of RAM +checksum_t0 = $400 +checksum_t1 = $500 +checksum_t2 = $600 +checksum_t3 = $700 + +; Initializes fast CRC tables and resets checksum. +; Preserved: Y +; Time: ~60 msec +init_crc_fast: + ldx #0 +@byte: ; Calculate CRC for this byte + lda #0 + sta checksum+3 + sta checksum+2 + sta checksum+1 + stx checksum + jsr update_crc_ + + ; Write in table + lda checksum + sta checksum_t0,x + lda checksum+1 + sta checksum_t1,x + lda checksum+2 + sta checksum_t2,x + lda checksum+3 + sta checksum_t3,x + + inx + bne @byte + + jmp reset_crc + + +; Updates checksum with byte from A +; Preserved: X, Y +; Time: 54 clocks +update_crc_fast: + stx checksum_temp + +; Updates checksum with byte from A +; Preserved: Y +; Time: 42 clocks +.macro update_crc_fast + eor checksum + tax + lda checksum+1 + eor checksum_t0,x + sta checksum + lda checksum+2 + eor checksum_t1,x + sta checksum+1 + lda checksum+3 + eor checksum_t2,x + sta checksum+2 + lda checksum_t3,x + sta checksum+3 +.endmacro + + update_crc_fast + ldx checksum_temp + rts diff --git a/oam_stress/source/common/delay.s b/oam_stress/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/oam_stress/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/oam_stress/source/common/devcart.bin b/oam_stress/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..e8958c60cee839eb37da1072177122577e9b3155 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1{r|t0VFA~KUn`w^MI9FXn9E`R;=(V5s(&Z@SlFb^WXpf00NG! A0ssI2 literal 0 HcmV?d00001 diff --git a/oam_stress/source/common/macros.inc b/oam_stress/source/common/macros.inc new file mode 100644 index 0000000..52982a6 --- /dev/null +++ b/oam_stress/source/common/macros.inc @@ -0,0 +1,169 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro incxy7 + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro diff --git a/oam_stress/source/common/neshw.inc b/oam_stress/source/common/neshw.inc new file mode 100644 index 0000000..bdd4136 --- /dev/null +++ b/oam_stress/source/common/neshw.inc @@ -0,0 +1,37 @@ +; NES I/O locations and masks + +; Clocks per second +.ifndef CLOCK_RATE + CLOCK_RATE = 1789773 ; NTSC +; CLOCK_RATE = 1662607 ; PAL +.endif + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 diff --git a/oam_stress/source/common/ppu.s b/oam_stress/source/common/ppu.s new file mode 100644 index 0000000..155a9ed --- /dev/null +++ b/oam_stress/source/common/ppu.s @@ -0,0 +1,129 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + lda #0 + jsr fill_screen + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts diff --git a/oam_stress/source/common/print.s b/oam_stress/source/common/print.s new file mode 100644 index 0000000..d2d7b81 --- /dev/null +++ b/oam_stress/source/common/print.s @@ -0,0 +1,225 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + pha + and #$0F + jsr @nibble + pla + rts + +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: Y +print_dec: + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jmp print_char + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/oam_stress/source/common/shell.inc b/oam_stress/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/oam_stress/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/oam_stress/source/common/shell.s b/oam_stress/source/common/shell.s new file mode 100644 index 0000000..635ce9f --- /dev/null +++ b/oam_stress/source/common/shell.s @@ -0,0 +1,330 @@ +; Common routines and runtime + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +;**** Special globals **** + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +.segment "NVRAM" + ; Beginning of variables not cleared at startup + nvram_begin: + +;**** Code segment setup **** + +.segment "RODATA" + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +; Move code to $E200 ($200 bytes for text output) +.segment "DMC" + .res $2200 + +; Devcart corrupts byte at $E000 when powering off +.segment "CODE" + nop + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "print.s" +.include "delay.s" +.include "crc.s" +.include "testing.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts + +.endif + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_oam +.endif + + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sei + cld + ldx #$FF + txs + pha + + setb SNDCHN,0 + .ifndef BUILD_NSF + setb PPUCTRL,0 + .endif + + pla + pha + jsr report_result + ;jsr clear_nvram ; TODO: was this needed for anything? + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +; Clears $0-($100+S) and nv_ram_end-$7FF +clear_ram: + lda #0 + + ; Main pages + tax +: sta 0,x + sta $300,x + sta $400,x + sta $500,x + sta $600,x + sta $700,x + inx + bne :- + + ; Stack except that above stack pointer + tsx + inx +: dex + sta $100,x + bne :- + + ; BSS except nvram + ldx #<__NVRAM_SIZE__ +: sta __NVRAM_LOAD__,x + inx + bne :- + + rts + + +; Clears nvram +clear_nvram: + ldx #<__NVRAM_SIZE__ + beq @empty + lda #0 +: dex + sta __NVRAM_LOAD__,x + bne :- +@empty: + rts + + +; Prints filename and newline, if available, otherwise nothing. +; Preserved: A, X, Y +print_filename: + .ifdef FILENAME_KNOWN + pha + jsr print_newline + setw addr,filename + jsr print_str_addr + jsr print_newline + pla + .endif + rts + +.pushseg +.segment "RODATA" + ; Filename terminated with zero byte. + filename: + .ifdef FILENAME_KNOWN + .incbin "ram:nes_temp" + .endif + .byte 0 +.popseg + + +;**** ROM-specific **** +.ifndef BUILD_NSF + +.include "ppu.s" + +avoid_silent_nsf: +play_byte: + rts + +; Loads ASCII font into CHR RAM +.macro load_ascii_chr + bit PPUSTATUS + setb PPUADDR,$00 + setb PPUADDR,$00 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page +.endmacro + +; Disables interrupts and loops forever +.ifndef CUSTOM_FOREVER +forever: + sei + lda #0 + sta PPUCTRL +: beq :- + .res $10,$EA ; room for code to run loader +.endif + + +; Default NMI +.ifndef CUSTOM_NMI + zp_byte nmi_count + + nmi: + inc nmi_count + rti + + ; Waits for NMI. Must be using NMI handler that increments + ; nmi_count, with NMI enabled. + ; Preserved: X, Y + wait_nmi: + lda nmi_count + : cmp nmi_count + beq :- + rts +.endif + + +; Default IRQ +.ifndef CUSTOM_IRQ + irq: + bit SNDCHN ; clear APU IRQ flag + rti +.endif + +.endif diff --git a/oam_stress/source/common/testing.s b/oam_stress/source/common/testing.s new file mode 100644 index 0000000..ba41f03 --- /dev/null +++ b/oam_stress/source/common/testing.s @@ -0,0 +1,106 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "RODATA",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing: + jmp init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/oam_stress/source/common/text_out.s b/oam_stress/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/oam_stress/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +Most update a running CRC-32 checksum which can be checked with +check_crc, allowing ALL the output to be checked very easily. If the +checksum doesn't match, it is printed, so you can run the code on a NES +and paste the correct checksum into your code. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported due to their complexity. I +load the code at $E000 since my devcart requires it, and I don't want +the normal ROM to differ in any way from what I've tested. This also +allows easy self-modifying code. + +Some macros are used to make common operations more convenient. The left +is equivalent to the right: + + Macro Equivalent + ------------------------------------- + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + set addr,byte lda #byte + sta addr + + zp_byte name .zeropage + name: .res 1 + .code + + zp_res name,n .zeropage + name: .res n + .code + + bss_res name,n .bss + name: .res n + .code + + for_loop routine,begin,end,step + calls routine with A set to successive values + + loop_n_times routine,count + calls routine with A from 0 to count-1 + +-- +Shay Green diff --git a/other/2003-test.nes b/other/2003-test.nes new file mode 100644 index 0000000000000000000000000000000000000000..fc69530c568ac77593f8ec4543cafbeca91557d1 GIT binary patch literal 40976 zcmeIwPe>eB90%|>JML=QRcDjN3?-y58l#3Dw12mBN!K8cKw+c^#2cJ{<4<-;L^i|*#2xORrQod)}La_&B3+gsP1 z=Yr`SqC-E!f6wzTi`>q0rN~E%8J4g2j+_0_tM2Rbh!5$dQeQiN`|d3|81 zCp{#uN!fwB&&>htRPI7J$E!tsh`MqAVUW71)gd>wI^agk!8NAwhkp7YrRiaix|8X0 zmt5(V%je}vk9>Qj(I~&wyj_y-T$XvGQEfQe+VIFb@4ol`2OlOs8vXRM8)Kidn`09< z`3V1dZ1l#Y|BHP*=l5t3fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P-m|FK{Q%@@D?kuM-tQ;NKHSW^CL3HW|D? zO{&ypgE(h*rDnFgAfAn@shFJ$;)|*2nir1;@qu*^3+Gdsbzq0)dv;tM9v%+n=O`J@ zQ!pEg&jk7Z`XM=O+n#L)uchMsD~MBB%d)bmAl|Q$Uu{2#J_Zwu1b1&DyZD z*Mpc=)9YIAoAvoa{+D9J8S=Aho9_Of8^L<*u(i(1-toN0q5bUouJ?4KwLke%Yn>l` zoJ|D>`}z5&wI73+@*Cmz&D5-1EVRB^uNutvcMtDR!A>rzgz}F)Z>Lp{pUs8hY&M%B zfMCAYbusxv=>H26cz^%|AOHafKmY;|fWS)#G>+O!OvMxkKmY;|fB*y_009U<00Izz K00jOg0{;L(Y1~Et literal 0 HcmV?d00001 diff --git a/other/8bitpeoples_-_deadline_console_invitro.nes b/other/8bitpeoples_-_deadline_console_invitro.nes new file mode 100644 index 0000000000000000000000000000000000000000..1ea66dabb2ad752eeaa5a50b01ea5ddeb24f8a7f GIT binary patch literal 32784 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 Z4fJZDR|CBo=+(ggGY#Ce8>FA^{y%t7!xR7j literal 0 HcmV?d00001 diff --git a/other/BLOCKS.NES b/other/BLOCKS.NES new file mode 100644 index 0000000000000000000000000000000000000000..de7372ca1c38be7f7e3dda52f35a86b2bce824e7 GIT binary patch literal 40976 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 OKoAfF1cA>mf&T^}_Zm+C literal 0 HcmV?d00001 diff --git a/other/BladeBuster.nes b/other/BladeBuster.nes new file mode 100644 index 0000000000000000000000000000000000000000..8876d57264c985adffb86b5de77623c660bf744a GIT binary patch literal 393232 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 BZ3F-S literal 0 HcmV?d00001 diff --git a/other/CMC80s.NES b/other/CMC80s.NES new file mode 100644 index 0000000000000000000000000000000000000000..8e3a362e118d6008ef700a13ddea0b9b3adf6a3d GIT binary patch literal 49168 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 BVz&SQ literal 0 HcmV?d00001 diff --git a/other/DROPOFF7.NES b/other/DROPOFF7.NES new file mode 100644 index 0000000000000000000000000000000000000000..cedb2e455b45787bfd57a74b5b36a2c7206cf104 GIT binary patch literal 532496 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

    mI8ieU@@f~3>BZy=d`kCLrS+5jqMT|T=X2)&h3 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

    `M$*ppzTfpQ ztH@lmK2kp_@X2g_woiJm@-de(zv_0S3=M6{d`k4Z4`7{H^tnj_=H@=R;Dh6)zKhub zhio^17cf}a`1x7fHVNO=v!gQ~+1KS2%gdy7KjljTSJdrn;|E%;mV60-Bi(?yxrtd` zy{pJN&{M}1ZHOK-J?owI2P8?`%y1uso9p;!P~F~n`v}*7g4Io0o`w!G@I(dcZ*sY# z9Jcj5SrIQV$oe=EwuAHltC*eOxhcn@t9$Ek>O8ZtZky7UyeRn1)<=H)>E3E{>k*#B zKAo~zvTl6K7vyFxdoIfs2DZ)OM~?Gajy%ZQfA~sK(KuPKCdOYL)i!Fp&1z|OAEj#- z$$LJ?d9zJ@yVM4&*Vi9|80dHC zx&@|%;M}%xhe1VFaxa{&x>%^okHg`gZ;CZVL<;uak%6AQ?CN7ke0zwDHYH@_lOVsMWD z>GA6HFCPwdnZ>eGrAO6gOao(wkT3usAnI$`Oc;NTvn{T=I%+tZ=JT+R9f5$?!S41> zNB}SmO``qA8-RsknKvN;KsLC6A7b|z4dl*!lvfdB49bb=DGb}SulEDk`nueS%pw>T zE;+0!jT95p3QkYW0v{0&_9;KVu`O86mMv1nSj!iR^qdbKZQL)W|LUHc?OP zDqh$aKzV>!hr41w@V9b8en}S{F7Y(p{b5*mm3ONEnw@Q|U4GpKN#nvsH7OSvAnc3+b-DHIv zL(F!oa6$y6;~=(be;=WGA`g^H!EBJ=T*rwFjvJ|io!Gj8$2$RVoKSQE9E-)?Ksb}1U!c3@r3NGaBJ>%JPewk z4{_g+gc?`nQZHj(Vkjg-33QychwwQE3bB_Z|NeO?ab<;h0||tA3==> zu-WQaP0fW~>lVJ}BvoCuIH(s4MSOA68-w+2P0hHs%)@Ad zNE-e|T;N7~zH(lsjUz5PI{~uvV5-XH66dos!}bT*dv4U8sLV|DUO*LXlYDXP*g19} zmBStCHPLXfr%e(K;klqFNGV*bMu~&%Ll2~u;o~QJT`>|+F$iOfqO^~HK<_IcqY(N&iP0j24HSc#`2L3L zQ6`y-fTaB(ZyXjp2fL|4*?8A=B8?9Z8ZTW zSDz)C35acpW+Vg6U<^#BjOkVPPuF}_ne&;o&lPlbBs>kp%f0E!aSsKl7Z`q!?{$UCwTNQSlyX(m%t;0Y&; z@x&u&x`ZF2AfW^)rGrcAU|FJ(qDp`XQxDyl4li1&SQckQz5sM>;#dq8Do~#;^6F19 ze#;*!h9i$O6rS1`FBfb`aeWHbf4awD(eW=ps>BJrzgEZ^9z}owrA`jjMuh~vCfPzc z-EQsK8bl)tTTY11Cn&nd?7FmMX;1yaES|>U4%8gEw@>;WcX8ELVF>~%vRJ9G z)l~^cD?N%Y6rQ=r%h0DGVf)mKq@j|$)!yQkb9a5~DfcAmZ*?v~YHPoXvTuNOw5iSH z1*%`MeGA+v8)iMtw_mw(v}0S0Y>jRcc2RjC(9pSRw{FIJY(*aw+w&zu0>*1!4Y2G5 zSP98cA<0LFaczLFrJfsRRK-bVm_7bE&tYTv;Dn-vTD5FGWHv)q{>Q8;`8aoOT6^`# zB4+YO8S8oncj!LjQ-xA%o5nU}NV|DHtFgQs9!94a1)e0$rVAHL<3h zlvIoXy5aUP?K964&r6H{%ssKWt2wSJf!qgZ&yK+#BD(5eTfXIT!fF=0x-)^f`Yf@p zrI%iV3K*9)^U$9^By+LI(Ls$Q; zmGy5-^jviDo4OH8<=vGVt4?o7kwt9xoG4?M>i%kFTu`9r?l8`<@L4LADYYfDD|Ky& z7ws7lj$rkl*Y(}|MaSa}T~ZY0AxH_|__#om@jE`RoWVQ}-F{m;DqO$f=);`nSI zF8e68`do*}^ylLd8RJJ3xs@uI+ z%3Y%q`)**iva&stOSeWNo!Tq18cf;|r57AMi!9>IB##{s;V>6MJR)V5;T}9Xr;Jsoci)wQ>zFds;Ex+N{qT z#Ezijbt(rna;(V4A4+Mg;4xG1)9vH56t7z|XnO_TkM-!ye7i(VX~(cZ?29mKy~UOH zYrTjqaJ2qo4jJej&jFXF#O7L-y*f(zhTGxh=QWuP>-9^9QCunr(dPX+u6kFit*?Li z3f}lV*@~9U?8l*F#&Ti(?-kg(Po(9o-OxU@=Ak|zU?DBDB(7Oqp|~S3#z*Ym=69_4 zNAKhx*ZNc~uTZ2$8RI8M7{@Xvo}DoP84A;Bv8-rP$(385mLCRFd%pblCRzAoLRzk8 z)(~R)^0jf%myiCFkh?Oa%)ep?!7Q^nirzcfH48&_Y^PY>s|NkWbu}rzMWlt59Gn4Cw}q`^Y*#3ikA;s za$lPb@3V>}!Q-hly^zYLa6dJM*Xew76deN&Q~8uFF+xh~>l-TByd`&QUdI5NT<%-6 zsM?p7Eyx)S4-UJj!aT!l5fA<3pQHaiAd>m!Mf|{44I?99zf^4ly znvclT8(#~f0l2<0w5s^<#Ueyp?t94*t8doN{lGl&pTjFU?l`hDlAabD+4-)buQrl zrWK#MIn8F~6>I@6@Z*l-3&l^uB2`&{MyjpgiLf>16kLt)FK1w?Zg&-@#|EarpNV`u zuQQQ;we1+;dN;|kv-x67nRtgrSN@aS&DNsT-lD*CwejTQYSk>-Ytx?FvA-oH#OuBl z4qC5{{bkl?bkvI(>IT2}rUil%=bam|K(}~q_8vO-%`x+yv`SjosXs5?CY8eNo_Gu% z@t+PHyo2$*JANg1Qc_<*Yx}ZtiIQQ zF^S0ioy`!rm*G$@HTtskfijp{bf}NjycPNL2~@zyKR;(j>!#TFZ?5#QEekl~x1LBl z2XIem>uGn6^iB%^`@@`KeAV#bba2)p)}fqC?O>YWQy5Zmr|&_IN1?~*?!M@{v(3Y) z@#k8Ir+pzBb}ChAQwO^U(Jln+qa5B$EaM!$ukzJwq(VUYhW!Uc%DZ)=GNPV4mW zfU#>hRk*hI{=d?QrY0Rg2>i?GXsZ|MgEl5^2(S!LEpf>11yf3@A9oX4G7_1Q{0g!j zQK&d0D|3$a6Cv^pn-6Fw=VlYztGPggJ?vdi1|eL^`%=z)10D$4dQsEwfSaV9m7ip* zpy?E{1>O7*=lvGcKn}1%=2S~x-%a6r5j2h}K_fTuyBfcw6(uHV>jjoYGlrU$uG0Vs zoV))30VLQz12StBeo5eih8j&B$5j-eBF0a;%FXSQUN{n!kTRW?fE+a7U>`W9Q-xuI zXHa*y2&gdi$qO5&3F5wxx9k*`Y)R#~zBlbAtf85T;A5#x?bWT5(|nVbMHVgf`OI?W zVYWDqPPf+AZV`AM3@f^E@?bM_wv?EEt8XFq$0T50pC;_kE#znR_*axIPwmR_&04tZ z=J0fNeRe)S$ohOt?ZE>~+3?Wt-HWRu2t~kVTAZ0BfkpR6OxNIFUefZy1RdnXw>4qo z5NyqV&mFjE6FohX{vR0(S6jXI3C2~4-B8YP!M3w31a+h^ps6S}iN<(5b!cEbJ*#J$CwWsGBXCCb8OXU;ZXEer-1bb13R6WIG{6 z&BZ4@>##jPz>`=DYF%BaZ|?W8e9w{i5Lt~?O@liI-@p(5z!y;7&vzT(ATW=8s3+JL zK$zSps(}>~;iG=NroTJpO>$*W!d>vUfe$U-(o);Go>bO?8N!Xa#40n;5>MlR2#HdB z2;!kQF=)vsoA5#HY$q9pnPs;TvchjkspR}@F9)mT3_%M4nUp~pqH)o-)(=b{54s~e zDu~$|E-OZL*o9$UqEbz$Ah&}>I-)GGNRqyyPB%=$cNKG&w9x*7V!PNrUSM5mY360~ z1I(JN7SCLHtYWQ<{@g0D9{EQduhW)put2dmx^xO170-mq{rzJF-WPlVd!;(wTbWaB z*<%hK?1&Bx6?m2VK8OUcLY9`L6UzhDR*S0`3XYNX16!kfYIW1iqLOU{FmA}^i8HN` zcCk;T2WSbdMGI}o7Vh;?C)v$BCH9c18){Ur&?hu4X^mw^z77E5*v2uZeSi6|yraFH za3Y~rxc)$HrMg6vpii@mk$f5n2p`F3egIg(`!cU}Wqbe3QKWcdO3I844mFWxUwgr! znIb6nq!3qESAz~w%-c!O% zSpU`kq3Ye^nz+{W@d+UYK^YWc)D0PEYpZy{wo<8v1Vu_WO1WhcK}hhlXvJ1ZC6GeM z#hAv@Zqe>WtGiWDQ49iZm8}Owf{5%>>lT!l)(cFeRs@wniHwkBe(%upJ)h4ne@L9k ztXZ>WUEcM+&-1(|0BrsLyDfNbH+3?SP*S`Ik{?2G%qV4wHQlP3Xm!|L17w#u!hD!< zoBb*C&9Vsx^Y8zjnYoNt(gmmgthmg={0Ig)BpeLm!#15s@dBnB)ES-z5K@KNfS9#d zH$dd5P6EeZOPpZI%HI^7Qy6No!VO)oL7D5}qN7sCe`Bo<rJwR=2HygXe)ghtb1zPv$t2S0P3uYNMmtYBuAOns8@QI?mZe_a2q6gV`)(@IRzvZ3EDjj zuuo*tOPxb@sHbl}TpEYKv$|O#L=>ZS4?i++!)->8lQ?(v&^k7R>Vj+@8wLn8J$txA zOrt2`OWEkL3k`Q-OIUE)*EUAz4%xT}_tju8qb!N2ZM63vG+DQfqk%iwJfzrTV?!3S z7jT+~_z`*??Vza+E9jOWzIw4+tRoOxkk?In`@r2*u=@}^l6j-0HNa1g5EamX@IsBu z!S~^*=GMG`Z?XyCM$m-HIpf+YV!{D3=Ar+Tf6e?Sv>!4CbGcazU#j7(E{idECYYPL zRye&QiNb^Aod|$!6wC_^3t> zr@{P+Z&H%)oK3HbbX_*@lU=-dWO~Yb!iUGpPy7|fquY5|k)J};`_hQ%5eJjI2^sDm z4a0cRH&<^;`m0QWu>zQYf&3%8p0ql;Q8-}nUybv;wl)BY&!k9}IN#a1$O;fAI$BS0y<*iGf~4#yvi8(&7wv2lYJ+O0Ox7l zby@;$Ecn3W2oo9vXOF#OedpTE=Q00~%J7W3({1t5jH8R$<}n{|roFkrnx5Qf)jW3w zx12wH_;u#W|2qxAeG-Ic#AL1Yw`?GaF0-Bpg-Y3LURO|8+97?T#+i{;Jr5jz`LzfB zWB=uwV@V5#iFh*_>Lv{>)<4RREx{%2Uo8@hbpCn;(=eNDHmW59@XSvD2$52M_Uw89 zqKHUms{suZxt&psXK%Lc3c!SG!6$4+wd!FY(*$55Qerw*zU-uR;6YwTM(nO8b!TfE z2f}KkAqBG5L#PX$+caa*q9+d?e2smDmEiw69a&*b&#Ho}BJ444Prp!e001C) zpB}cp(`Y?#5m2R#lGo7aVb1_skM48jY~fac(ZW$jl#IMvoR zAA<~}_OoYUGKU>iVcO$QtE-KeR9-kjN??Zl^HbQ>U1d(T2ugnKU;i;IqJUzsE*q%% zAJ}+D)}K0iy6r0zlNWv2%|J|+Fqiz9Oe0q7}CiW!#YwGdGh!8ihuC{?&@l*5DTWL3-p+EW%();YjI!f zb^<*^1iXh8EH3KS9PWD{t7wr&71(SxE-<6i1w@;e?%-o3u~b1To9!Pcq`;pq>%cCl zc?;)$LR3yhvqKbA-*`p`DmtJhS0?lDxpmL0WgYvhcoC7x`}%NsQe%^~b~6b3tW%8? zOj~2(uEF24Ke>b3v6SRG-`SZ{x|8PJOnTbia0j3N)S9KPevK!HS>ja>kC2yp_6Q;) zfz^EU@8tms>7^3fb=Vw_1xjZK$o_mgwBCHXwFKyK9PAXABF;STKr74vb@9^g`%~vX zz2kD)j|K&vPuD#ali()hx;-s4GKmv+@sZoL(ur`rFgr1`6hu8}5}8CGU(qePRK&&w zL9f|CHJJ_GNxYahK*eSO;&z%_FowX+GSleHP&Mf=1_Z{q!MNjusv*Kau=F+>E2C^} z72MDQau|4JKqoPPl~#z?$k1%1p`1pAL>$?H1!}22G*{o!j)_vC&!@oktw&MODF?>!0WYVkFnZgKPk z2URMf_I$feX7_^DBRz_=qsi*0sVqef$EwJPfbsIwUWa{HIpzvd?yGHrcq9RVIl{q} z%A~fwbJH_&YNx;Uw5ZF@SkADY*3z9L;QnL6Xq3l5w4)zVuYB9;W2b%EsKAw;c%MqR zJjT16DzLGBWJ((6257Q}Z5?*@hKF3XsR0w*mw|euH{M{T`BALE0t);Azw7KiP1Vwv z5;R4viPQfm*s!KP-OB_n9jZjYBZ{1v1m!0(n7o_X1-(ho6|Hcb?rm=ex0?mB?v& zwV!wVkpkhWsSYk-10AOr7)3QUa4i0KezUBWFLZ-D;U$J3;xZSk=@m4Eh`qsL8=~_d zZ4dY|Es6oIc6udF&$1lvkAaBX$a@E@f}U7df? z!+dK%g+?9K%HGn>_v%rsPzg?cpl1NFaF zQtPro?q{)_qt&x3Ftr*I^_saNVTXt4w{Zn2;C*U^Z4S)PPT;S~RriuyB)S;q5twF& z!Uki5G8oTb+Ou4s8)ipGJMmLo@zE$C<65ibV0ZmFis9Hsz;NL9>%jTW4$<#Zm-uQ!}FQ#4YQT_k+HTDq3Qgon(86y?0PHimXc;Lh*?_#H4A_rg*O*1QGK zaTyu6+Vct-oHDQ|C)RNI)eM<5voP(}_umL``>zQCd>va^Us}1=8tJV0XYyJ2amq~%bzAR2 zfs6O&F{l=g`Icv4?)TRJ9mVkv5~Gj>PcTO&*?*DC zVoR)$yUc2ZbmVqmw#_a%RV#&f+-j&k!{2NC^$OnoE5R)e{j$4@$F~C(2KJ>7S5dZZ zC#q2N)}o zqmprt111@kFHv4Qw?*T;!(syw+U<&>*)wzX|GXIxrJ-6o*q9~`3^Ld~*fFXN{EN9n z{4Ef;QGvTkK`%qGSGG8^AU!7N1eEn`0uq(ex=S7}oyz|d`p1R%( z<4#-kS{_~tvJZI0W~nL~Z+k=H3n~tH_uETrw|T~%y0XpE?5vKII zut%@FuN+&Y)p%AOG|S|)B*{n8j>g+%rMj(-DPagJw6iPp)_A<;sTCy60To!zk}i^__Ugw+@>e{f$pJ3X}Jh*xMl{`PE3Y z@88s{lA~c`EoIN?KCV|UCZWB;|DCelq^;C>ZVYwsUvbYOASkS{B~;I&UClk>3)RiJ zu^~tt5<+n`z{qzsKW$JnKCY64_^&j7VZ%C2UZ>9E8nkTsZ2^##^hZjRnhVs zFmldG{ATFc9$VRYj`u;Yx4{cq0N^P4uy9F0OY1*JW@!(i4(zvo(~U8?AAwH9Hlv` zgiYyhgp}tlc=1$jf2Z!THS@I$Nk0B?Zql41r++^Eq^Z}d1HI-QdS5^Nu>sGxyz#)c ztl5DXc46&_m8OWVr_XtJGlVr^0s~FwaKC9*2zV?zvdX`9-NsPWy`H;!5SCtY-9Fen zMDP390(+wmrTcGtMvIkk;fHrQ22`G>KTU^zyXU}fkHDDOJ3)oh(@&+_>Kq}yNF@|~ z9N(B60q-;aJ5K?Wez~?CW_n2l+WxQCp2)Gi>%ACGCJwCf<; z6L#}#2ebB!(f6Urk#X2RGgWuL@J5+}^pF~HKxYbR zdFHEsBH;WRqBG2s_rl%4^kp6^)7LjHqip;)`AR>XYekiZ!{jk3X8bV_hM+l6CASN# zHGh38P4RRqu3UP;vzeo8K9HP34h>WSEyYCmy}iRJXq?YQ3e(uRagX6S@$0@26%o6k zQc$7}lJ+5Oy8BGGxHoif;V|33Uq@dF&W+g7O?v=#%e3GqZQ~+(%zX|p#Jhgh-Q!D; zZk>sVf`kffw1%Q=y?*u-;JINkx55) zrqT^>NqT)NOL8)5UVpIdu^{E0_V*EN8M*R3q2f!bdKfd-dL<$*>FytIxWC@$=yB8 z?6>HWyYSYVj7)DV>4TL-j{`Q*&)@4EVo5nm;9pc2PQBn_VKZZ>e#hWsG?`435nL1# z3rAWVEJP&qy8755v!81~Miw|%T1^3AB@qm{wXg7c0mufrJ$*WkyDHLoDR;TI_kDv8}A~p;cfyOglMN zm^sY;>T1eK8JhfFp}lq${z-22qm8(`s?X%B>8I=!{8SLqybuj`M}%fL%_YIR(l%M_ z3}}P*pR#!pJY>hfo%)`h93S5$GkQjQuTJ-8MY#U8?%b}wrbQlk*TMWya^g=oEnaK} z?bw={e>JJ(G{X7p;5cc9%!7c!`O#V;6WoAB>ylhDKlrdq5LBT&|f5w=N zV7pnsU{dD&!sCZ^D7$~j?p~9zPkD9LPj7c@z&Fg;m@QRGm3f6gQ;Ysd`NdV9xuJAq-^u3VES2+M(ASQvA1;v>!L zPI%Z=*p;2#rIaLx+5bEWEuQmhRTIc;B*=ld#5j=PBiU5F7o1AKg0kSupM*?H2^4eG zygv&pXdIub1^5&`Rc=ZIJ4cz3tmX-l!zd@786avk4>*;OMQ{?MK8*87b4ouNTYwgD z6+}vQXq2HsMWlp+9>W!Jr$j^;imSpj63XzLI zYtV>#M=-yKB&Zdl!caBQ_P{JA0%Jnm&fXEO2sYoX#tQ5WwVUYbMbKbb9OmAsBUt5u zLTv$QhKzM?R?P0pn`_*UX53?ITHDN+SWx)a-2RGZ*v6@XN6(#fX9Xuvh}cXlGdFb7 zk1xf~`UEwa9pGvmM9^;nJZRbdRL5~=pX^n9Xts~gs}Jz;A>UCK{?a@2wmY*8drqdf zF-|_DHIi)}`=r?&Uu}zvAuPh_8MkW8DV0Quk*+{F6g(-DI`y-}DFb zXSgPb7557%d<)BxRF)$C?sYVZj%oIZR7_gl%S z%C{b9j+D`m)QCBLV8vXPJ}5n{$Zk!kt<4{l+hy~t$ClU!Jg+A1z5*V22RO#Sp9o1w zvRWFOVtKcs@wyW*8V`reOOHJEM?T;ghh3TyFSUFCMk^M%q0SR z|Z#;rBiy1~cQ?Mwg#m0elV%)IKq;ka3Fy6U*~ z*n1u7U%J|6$v%2tnhD$O=s&uYQj0P)QRvK6Ip@5O%ayzvOWuXKA#=m`n`Zx~J#z!( zhMVOG1&qI?Jv6a;|JC=m{KD+huFiV@*#2XW(;iB*LCO0x^ zttBwu!PZR`+VQRBg!RBS`{PYTSHFLAO2^_||507PyLsE-T%P~y-x_xAUb%nMh669; zEj^8cb&w_d>L=ejLyzB=cFdg?vU6wOl4}d*CnrOq>UHN1euU@ONZ>WpHkH?IE4v}t znQm$wXaZ-Y73v2G`0BIDB_ZGa{6+qm;$~@1e{kCe`7<-#z2GR3CNB2PyZT#`>~Hw>+7rJuhNRjf zS^d)0mO<5ANo@Tl$2!a0VU7wVE|{M-9mZr}Fjn2H*LQtM_8+`h5r!TXl{bM=wd zpF>{5x7EXXm7mjq$6iCKC{F;ghJ%l5Ga{PG2YPz;q~d$NwQi2ijGj~PSpKd>I=TI~ z9xf8zabds#sQ0oVb@hrjWGM?x|8@3>3II`qMV}t|XKEcRv#F(u5?l{~ip*JSYHqtC zC5ZK$BFxnJOt(4d`wz42U~cMZ%oE3$snLkZ+EU6x;)aUrlHvxuy)z86?U6dh^q>>D zm0*GC5W`*_oyG#LRb#yG12tZ^F3u=s=~1?KOW3XdkLnpj;=(0?1IpgFW8Q0 ze&Hux$a$>pK?T4cdft}R?cHz*%-06G2AR@#4wxqTr?i3{?wjF$D-rp)w?tM~`mIWZ zFRue*vwmV1V7)|RK9z2|?&FXZ{zGmYcUDR7i+YuB;L)4UL3|5o>Wx|oc`6;=vkq0x z@}`;-NhY9816BFNiLbx;xqMMm6Xiss@z8h9+uHu~y2u*=dWMVK)GN@>TjVbyA)<{( z52v#s;{nxyVvB@oYDFVql%bzfr}S)8;H6+);)+Gf!0E;nFYtte3>*f^3PdX)`o-X~ z`~yH{ajiD=Kg9{)`^2=vs3bU%tF4#Y(8>_)7=$&1#K$gk8&~kD#+{0t^>y0-oy`-k zU80Qv{=L#!_3D$1_TcRNO?D@jZ%*kpLEH&XLuJ{*wB+dMB1Y2;l`Dx@gCwIhGOUwNQBDRu!4>$N23d&m)1n82*}(O_cmRC}b-e3-2dxF2FE4q8(V?^7*K>upPtwYWLO~5rluwP z2kow@|7w2IodN4>{@@$0+YBcFhh)J4$8_8KRy^Xf=j6bBy2U@DW?-~_&W_#Int`Ul z-nz)TJItO2#?v%JZ|{}UWAj;Y@6oy)h|lsRU$|eGBl2`~!?M%gFbJm!HJr!v)9X(| zlRnKFZSdW(xHJWS`&`qCj5=>hC$jl*7z3-K#c`?6o*h~mwXjlBSNxXpkC}BX@}#eZ!NY zn&!S~g}9qecbM-k9fBPfXvsj=|4cWoT#vXm(vs@%oDP zMHT}R2cMK`1J8VrpkEyzPj&WPX1rb4HYbg#Gz;)gacl&(I5RWx4mVIB_h9MxGgPWC~ss`*Rb-9 zk(Vu&a38RyAe|v95W8J9-QCR|aB1wOb$lca;LIpG_q=;NgT=zP%7Dg}lzib_OZh_K zPgE5%2h*=1`a!zKnp9s5%puUDa%YkDx+%kkximdVuX0rAs<0fdVj9foSV zVVXsr-_R{j;*iv+c@iSN1Mr&>n9q@&I#2KV75~#qn|)TvZq-Jn z&kgBnX}+0+Hx~2#SOA#Z*CvLjqkx$eo3LKf2=*FbD8bJQBs`~H1Rw*LAQBf)_ zw_1yf;WvQ!hJ1Im^i%(cPjvJ=)}F)bG7|9>kz0C8@j10uZ!|+6@xY7K51iB0{+0FE ztDC%Hu61)hZmI0->0O8CZL;5oWeR}_pM`um+B@iD7@&1;AoKG7QH1ltt#osAwKdCi zXa2;fj6?Ky$9wC8D#z$zzqpz|0Gh(_E2Zy(EC${@1jS4=VYi*Zpg-_H%JwU#Zl00x zg3gYQ-rvEKHMBr&Ncs?hyh&4#40AV43*v~y9WN}a{UW`iFPxVHbQA+Rqs0P5KSGZJ zG7S71aR{F?iIj8~DI8#gt%WsMs!d5Ks5YLLUeWNIA1sE8B%Gp>Y>UG0Q zr*&YK_YTo*aNG;&W`pzhcG0rZS{rvo54rpDR9}o#p zZzN>Rv!@l%$P^Hmk>MfmdVvcCI)HxHA#coX1Qs_ui~Qo@jja<62!57DwD&?#B?TNy zq-vOSw6aXK^g7=1Wiz}jp-cnn5F{uHeAG;L6|<&u8uq4S`^8-9ZL(UVc|&DT%s4|y z%l3>naF{HH93*m}|2A%_{5M@E&r*Hr0$&2-rh;xE_kb%88W0QDpB=$v35J?;EhTx- z&pgYak(pT`?(U$jAqc>)I=>(w4V6f~uDPRatlfay?Pc&2hRdh_;v5a>TwzjP5mysg zkMrk9ejBqNli|{rFW+MBB!>J{uCbOtRwr~cedXbA4$5cz@aa47ZT$OxQ_>q-ezcw+dkMJHPFfL!)ZFQ%c|JPwZ<)u51Fh0KS|9dfKPLxC~EkKxnimg-ldK1Wg#Js z9`Bh{+ffitE3mb-nbE*7h=e@o;Jz0n26DH@ZDjevtOeog?V$c2o=vpwvzr82_XE8! z@3syB`s!D&4zc-&X|a|8_8K`cwg}Pl=eF`TOy^EhKW6-V%vjJ{1I6xPgR!GU9Fwab z{F#g8ll?iRvbs;MGF(_cH(j7-UG>t7(&Gl{g`D*DALq$3dHrm$hI-uQjDi-<$ zdl_BtSLvb;v0@ezM~+v&e)6WgdCM(c_5B=p2X5$e{=sA8vZ+1;9+S18|`8l2`K2MKp zq7`f6cK*Dp_QcO0)~&nWRGqkM$PQzUrXvvB>I&VtRr(&U!j$@kX47wJVKKXU@Mc*? zRj~_}b~p5yIO{$7T)Ll?7UOZsGT{=!#T zE@Od_S#>3L{2$+-a{3@V_PBz@lHlWtT3=f+-B1~4_*ZSo(Y-Y?nY}58_m*zq#4_ZI zNRE0vuAuFY>4uf5-{+TPCsbKC+VSROyu7p&Mx}@LXZd8@A3c}ES*xRyc1n&~vnEVrZ^K>Sa?0Kv8+xhEq8p1LxFSCHGI7YvNMBsI!%}Ej6<2?ye5>Ax=SP!|svm9G; z5;AYEi-*dz1Vn@fpBwE-XW_bD-rFJnj2ZY5w;cOoTd82<_p0S{;3vKBhKJ*>9>-sy zzB>F3Nm{$*M=2mvAKyC8`(~SK9sq&qh8-;bb5Y(l_E#t^4kYylE}Jo4)OqPpfA!DS zOW-q)p3MV?V&u9n=}5%-qQNp* zsw52Pp^`$1JOepK+A6T1Aj)O*^@+OV9)k=4eGPmzU){fn>jqpACKhYR);j;7O7BC= zZ!tA8uo~r2E;BasSK`*|+{nexA6n0dhTHgxoDhToz+UF^u+tA(wlur5BIrE=fsVb29rnV+JoD>FePBC9ozvL+>}Ll%eZ%XXyp+{W z?-*~HpAM-`^6Q@Qwnx_06>qiluhh*9qQuKNKN61V$?}MuUR`QcW%<~?B3ApgLm3qq zSD~WEpcosh+Dz}Fqn1F->lem_@=C8+T!Zo#z@w}x)v{Rd#GN;+@Q)QgVvq+ z3H#^=honWnj-M-M*7qp?-H7upEdxQE-Yto#Re&aX79H<1*Q>jyPfFlhc0ahz|LWwO zn*;Y30UcrpmhorT@f!VZ&jtBf6^{4Hc+*XgO$Uce#K|EO8^*RNHBl;I$Dy%|YP>Mzg??evm zIS#>7uYq;?1t&E3x8Cs~-L2i$`5@$j`Mf|JsN_~$x*_a=OiY@zBfh>wv%Edx=+F73IT;BDat4pp zr1Jn-qFWnHt(Vo!ufLNq)yMB{=|bM*6A%8oxXzz!RRHTMZO+M)ibCk7b?a0Tt6l0F zUNc^@`V@=%^yMW$W!ok*9E$se{iG{_pHd%Yel7-7h%9>`Da zTXkog-kgsA9bJvq#n+B9Td7XEB{GRqZoS}LI<0cH=$w2Gcq+$7BjFkseT(y*9w4x~ zw-Jd}c4)7EUH37%7BIPSG`*6=N>>4*nicn3>C@L10*Y{ah>013p)r}|b7h>q5X4Fv z*MeVCmR(2pGUd@NvqNC1_0ao*DmRSR%?A{Wy@{5?6WQn?e@+~*ixj~-QU_)KI0kjV z2YW97NSdUVf8ZN*bATTD(64+*ew}f3ULPBs549l2Ym@v^YhKZf(^F4fP%s&llb?=x zql_@ppT(|;10xO?Kvgw$Ez5Sj`^!5O4#!p=bFYRscld;K&@GdUsjjiYU6QZD4!+Pf zfCXd&X8fw~$~$z+Jl~qz#n+Q~mdr-i%TW_Ec!y?BClDj8!)Dq}^e&9gPo|tS8dyMd6lbi?Y)w2jNWTZ|>+ZmW z;n1z=*ih0Ir5%=Z<5~}}YBlu1R2C=N z{Xz^C_cjWyuntj;y*&bm^SWtSoZo9C>hp*Nx1nf>XPTyv@!sEU3CE=<4L%m6y1<%*rFK3`r zy-x>MLQ}Lfr5gOcAM!*eRL;@m0ADFowsq?eOx}d9d1b`T-7iOF38~g*RWfuodx@gi z%)H0CfIZ>62U-+7!`^2(ji=#EQ}ca6IK0M&MXBMtPXpQ@e3QKxpAVzNb-R>Vw%onT zR;>uKdUbfjVf!NhF2hi$-P#P@;uPKZ*SUUGcW7C{3OgA2AZvgRmN+iJ!-BDvx-;km zt;HiGwGL1xkl>*G?3fe|BOw{kIBBjSnaRJdgh>Mjb$EGua~yNg!nB<`B{X=CZ~h^W zRa}+eg9ACS!9g(c?b9R53n-l|VP|bg&WjqrUM=sM|yF`4k`=TGw!8=VPw+cii&#jQNL(n@T?y8n)leFXKoiiu|Ktfc6a`eD;cW)M3-DJnH5P7S|8Yzc-`yE zmwg3JmoFc|?uL9JGkkZrd#rdq??jOa6GFVzl8lu;i&l+8e;*eA?zGTY0&ND;yY2V!*$Z2E} zCqd^BsbK0FQs9Q^Ay&^g4^)*O+pS6V^o5PJ)LFeqL0YsYp*cu4i41Vr_+N(V{ z@A3|&z{AX`Mi>y$wRbR?*~wchjLcFEAt zENjh~Ovg!xn%_F$xZ4O5DBz2ZerV|OIDl<94QSiZ+(sQtKKU3flOIH2}Ep_Fc z`plH4srI$WXB@FTaOx5a$jB8u`V#)et`d-QhpVm$wRbQ2!l@QX!rV#kyGsSm$a;I@ zk2hm>Z4)}~UIfERGoD~E`GyXahE+S2D!XtQFe5S^ec20@FY)rsD~)Xt(Y$`jl``G%c0YMtN`tvga_#x!3l)HD+DUT-kv3b$P-**m^_SVA zWl7fs^&Nb-6G2*Oj?RXtE%cZ85BYrg@xIPscU+>Hh`ysJC24Kw zc?JtPrIi&{y-6I_5vbs#7Fc53AOE=Z+`i8R z3(5_hzx>k(qU}b-`!g?*{Ibs?@r>G@&zsrPAWL>dC1+7w37v1AG1C8=ebJ)G;jWTf zy#tIy(F-GYK1VpxAp6X!>Pl>$J0HJxY;*vJkW%MpHSe<>H=hs6cxDSSEa9vhbc2NVILl=UHjm&WWJ*L zB^XOjJ>4Ah_SZe*XC*v7Use~1E3am|?E5AoanE$H_^`~+2G0~EsD6+&CV?*C#gS1V z;#+x1VGrT@pe#*d>22Y=oMBlx{#GIaJ?Fkm29b>RLGD)o^ulmcAR)4O&`xY#(V;QpS zkh#Q=1A2R!%3izo2kXTF8NB7nN5^G2uhO=)7yn3^make^yCB&<;21(!AagR-{cUAj z^AHnH36<65!zijP9)&a6;%5(L90nQ2(rldf@$Kxv^WT0`+c6G4sF?BRc{#pw)X$3X z3ai9^5C3V;R}vSM7>;zit;dt6&g>j4l`V|M)9lID((&kKZL(bWPI3#@6==qF?$Ysh=FI$8whfnfL$jWXl=)QdHAa}v}TgCWW z(Lw?e<~X?62yb*U7x`HM^pd z-7F%fH9_XY9=Q*zvOneT909So{{?*oRmU}sr08%-%?SqpMGz#M9CA2=gKSCQ1J1uWA0N&Oz|se_B)fd7Z4L`|L;=zTYRLvi#{j`P#{m z>03Q^3GBw6s__+j4i7l~b6@I@#1*#m^xGxtV+M-w)d`2M9qYi8LCCYH`O8|L)Oq;> z`R4*Sagx!}oVv(_xwxx&vt5#vMeTc&#Y!#kC}g}95ja?$D&A{&wteIM13{})t5=84 z%#29$l*w>YO^Kr(usLy@@9Vt-U#!4+E9uy)DVbEa_l9|`KnsP zM}K^4*!j6tD_f#O=P9+_dZe~`+f>$hZ*z!`&j%wV<7tV9e{R|&8~pNKI?~#=w6~x$ zB$0!b?LV!Ss;)wx_ZMZy+`~m78p7#ZdWe%zm1&m6*4om{?7p)d8D?In+T~L2$~w3y z?*yA7hjV>N^_Y>%#(K&wrcLdr=yNSrYlNYCgZi0luFs28cbjCP9mCJF{4g)-f z9ln9f7O5d!yNRn4R$c2e*Pn`48x(e~Xr`LzDz&U`$H~@Lgwl0tk%V=~#eIrkpQ+rf z@l#^lE>aR(xCE{Gw|TtEI4`i2(p=_aoQ~slKJcFd@;w!E`Y~YInvpt|rJ!uxPee9S&p+kytb{M&9u*q>||nhXCtYL=nN< zKwYfxeCn7H74oRzcq3OcP)f2U^=sXsnu4_ZToh86;Zfb`1whx}_SYyV=ZiR=SPyK% zB9a|dv)#o<)rLb4xGm{iBODwyfPA|L5yU)`3iEgZfe3Zy8jQew)sU~rl9}v#DE3w2 zm>%0QRY>Y$Qe_2??GRyBljMum^?FpG)7c37cCN@olU3_-IU4G%vfNhEsHpJSLPom@ zocgZzEH{KC$NSiTz#7LhoTj3*D0NpOfnL&o)iyL}U_H1j774S-^*Ij>+?15&2Yg6u z4qGF=fOI};H}X38vUZSu2z<&4+`?~J$v$~nPIdsr&%sL(;*DpIfU@HZR7Y^eY}}#t zL=e`p04Jfb$=1=vs@Mpuc1WoumhrOH45p{?bvKzvA{Ye;>OvqBnT*4Cbchucf}k*Bce9v1QvajEjB3az9Av*Q0i$ScGSjxB7sU3Ggc{H^}ScYHi#) z$RWm)jogG3rMJkoNM0z|vaS4+hnpxMpYUYCBB}sfjJOe990sIgc@644%f%D8B9Ty- zop9?GJMetHmfSAAjCwD=c~*~#LEC=)#*sGg+B;%N+s6;gV$r-xF$okn2e&x9EqZYUginuWiM8*dldJ zNx>^}eat-`Um(lQwqFe5lja73E9eiThTo-Zd=XEqwu#B~c2>jiUp}{SLp5$HM(u3F zKGW9@1dC6?M62LpYL=ILq>B6gffGeFnO_zd(Miub%39fciX_|2z~|IRPW5M^o_+&c zx48~Xzb}?wuEfm+RYZIgS76d z=fpmA26(l&nwnNag&h^<5`AsQQT`0AM(Ac?-I8{;2-wGL^LDhsEH3LTq}bw9YY8LP zgT??g4-qly%WWuO1c@`s>9VmEEYximlZFh6CDz0Ui8h%sK;4RJRpf4YBLD)q0u3JR zWOGIEb6&IL!py+Owdux0QGaWc5|ZED>HT#jXv>W{%`AaPND)(a&4tkc6esboxw7HD zR%~&&?lxPX(O-LjDlX<$^~umiuBN~~O+aq)*dRgT9C((c39@^q(*V##IgM;_Nf?Oo zlo~K^>R%`#+RoMhUum`4#?`U46rmxw7>EOG<`6u&0wO%o`xmv+3VaZCo|gj`H3sg58e4fG`8vaPhwtW3A}X$zFR> zf(787pI_ln%U4t~MEkv8iOWprj6!11Dae2S2PDpJ3{4p2(K zGP{Bo#xKPKQ(0kGdt1iB+Q|BFEw$q@$2?zfup~1_$5AQLqj!cVkw@%qYD1u@f}Opy4>f^_F4(Aq_U#p{p>uvaXY5&AN~X^ zx`PC0PDpu<5d=~(p6`g}B?=#GQZWhM>{BQw@v%&rk^QMzmEDFXKa{xie5v#!nHmp; z{N^3d!te>^XFDyofz`&_v|kGEu2E7Epdr?`b48y?sVaWHS&r8&C?l@GoFm9lf7;4D zWKJ2J?6%qZxMC?@NH`(N{?kZmzp=F^l6uAsM;kcI#)Kz&SH(F1`DAV{@qP--zqC*Ka1I{B0m?}7@} z`HR%fE~jyyiGO?jmrnd%dNjOgljT6Q3ZBwg)dt{T$m<2a%*-}P@1)^&5Vyc>=pj?e ztu#Bq z?l7jiqJ9*2!+-EWyTuF!yRjXWz@8#Y@daT?s0HpHW1Wjg>W5 zd@8c^@}k;gU878uA?;d?^V9@E7?;EdKot3FOpqvt7n8IaUmfiX00tTUvFkF>?0zc* zzxLaBQ8yS&yb|SNN>*00VCEt@-mohGuS#^pSDZd_(#F1S7US`cZEa(CY@wtuTbXC? z{-$KE>F_RjR9LowKX9a>d%CO(`gN7;R^akVW7A;;&a*}~F?wkUp96>!!2HQkYuSPU zv#iUM@3cb?N(0<9cqf!fSEsL*#D!IfYLlW67p~h(HP5IQdw(2#HQWbGh%0%Ih*%YHUqNwoIK7QQ{3a;iYs|I@#?iPdUT zitumC*R0JIQ|QYQX1 zb<%7ImhsdeOvb~Uyb=R;DI|)za=javUR*bUY8Y;)tS|u$lMAC6^!aM^_xIHVm?oXy zmykr}{q89u62C|!-%CO%a>T|KxOp0ajrCXPQWLTt!vIcB&Io-Rs|~lcnJWa;&VXJ# zs<1$Mu^SvSlLS4{+BlRnf~*G&XYbl%btTr5j^Z4VCRy9b7V5>`%K@Z8tl=#MNl(@4 zx4sV4W& zlW@NkCD^)Qw!D?={XKmu7ijZgNg9aqTiBmOL9NV@y3$Bip@KSKRXkZ0vS8oP4zq7CZ z;k6Ig6}QoaU3vE3)A8ZyYGUwJEB99eEWPuctulKW@4Qs5T<8i?6PT9_qHNgMC-c=c z%kIEbV#>i6Hm7nlYA>1kY3DbXW^IX@_;Li^$;Ab+XOo14^A*A6cS0JX_00rVmK`8c zXI|`1$DJJX87!9iVsOOEf-!Z%C4#4N2FsK{0EPBqp_-kTJ2!_4$4X2&{k#SVlgfbu zJ`fGD)9qv{s!&bZQdkt+smsq2(8GaEz{V(!LJcd5QD#XN+9O?^+qnmws8){xAyniH zKDRyP-gn9B_J#JeU@(?NlmVr7iearEUKI;@Macwt-s)(z(>4mywYf9gPGd)_xx^$Z zTn|32j?Z?m(L^ef07$AQ!zI;BA z>1i`6v~iEO^ZDh^?QQX9u0q;4lHbY-^r9j#{RYh`fdbOXhuk)z=(_IiR+b2O79;}f z6R{+KDu^1{A)wOsEv)EhjQAl z7!&Qm4I^_PkF^TqIpgoavGzrj&1gh1RM2mzP;fAHK1i!Tj3fDJ zBp9S-2P(*(dGfI=o-df7$G|Lpak`xNT0x+gdZvc5r^C7#mU2;&tWE&6V9lo@5Vupa zw3KrpNO5&1Ye1_>Sx2x%@=$0fquEjoeG7-=S+~+~C1hD)V>z%ZYeTCc>24^faN65f zLzGn3NEooCQ#IhXCfHhaf@nBIE=hS0pHYOX4HY*63yH_W2J?#@T<;Zlf|g~PnmE$1mM0Gt$8_PXT#;KytuUC6 zJGkgo19tyP@SXL*IJeu_hjL&LAPpocj+vpRl+mzgb>PBiwXH)2JBYU_q64gAir|+K zyf4@1+zSy9eUHH8&Gvirs*TGvbFpoi8Oq<=GmPAWUxrac+c1Q<+1NcBTCyI)dAHM2 z)CRs5#&dxxH&`1irs70oYszmSQUNMZt6u@4+JXwz{a~o4l@QxhNjx>I?272vLZZuQ z!XObX*_P-uLbmGlWS`O~`<5$K2WyFVQ7h_&K?+gBP?+GAwvG-12%q31Ya5C7SFOhP zZGEq<#6!v^l7ze#7$5Zp$w-rzWQ9>A<-B6#3NC`5wZqw3@g6QD+snvQl?@fCL)|u5 z2O!B`hrN}%^lgfwI@hmt%7zVG!K+Zw`=QIIUxE9Du62ssrzDX12^2WP)cuxyCV{YL z?XP|DYC=YJ22;dFdprmLk+ZzHd`))py>7OK;KODGI8@2FQeQ#siz3;gUwM~EZVU+< z*dR!_i-ihi14st#XDhN{6Ur8nFvU+}R$D3tHcL4IA#n?DMThhn!mK5DZm4dykkVsv zu80JwZN4KwO+BcJt`#07d#1Ir*1zxr;PhFZq^Q z|BcpeT-{~tuycPm2uEZWVTCt{DQ=mbt2JQ)9$Iu2bpmu9r)=Ekz_Iri&0GeC#7Js1 zsRYZj;vl@jnHn;2>1t-pjddojZa2vj1Y}h&BvMR+Cr-5QNZ|=6sfdbupJM6ADi>ko z^I?Wuepa$@VXLwC3Lx8|4~gYGib#B9<9kw952si70`@+(;FORgz&H^IWx_7t+wovI z!HIU+LpGlaUij5cunBlxA|ABGA(aOQ1#{)19yByWunX@qrr^oh-7tW09D0-U|0C}G zKz#pI1wVg z&T@!zz8e$zSlG>1gf#kq+Tw>lhKx94DUFnk%{l(u&MXQg*$|wgVt&u zIo+B19XyT`GdM#{&V=~V(xE_SYymM?{eFMFN>cSY+{wvL>|G}ad1T-g#PF5`e?G*! zP_o*Dy58qM7<^(LYceB1XGiPi<>&k-Kmagk=1T&pNZG#5di&H(qEtOX z;TcjG_JC&4m*b5Q{{T6ypJ|96=7`mklY^65M!=q_7h1s*bhy7?=VpZL7B6lUdc>(_ zi0LZxU&=dRQyE_pls){fdmbq{m<9IpbUo``A156i$WABA?PWoY-si@3!_`blCwpo1 z7^5{9u(5H%RO9l0So_@Y3P`@}6iVdvcZ9!)NexuI|BQQ#ak(YXL9-0g>al zP7yfdHs6Hj_h;iKsQLogvR7JaC2tcL(hg)#J8e^ZHXouv$OQZO@AhW^fOUwtxOkdv zFoU&<-*A#$Rgxz1Atk(RW9DMV>|8~dIf0#Qznaw$1J!Rca2nGm*zobv|8U~K`W;pW zf*!)lzJRs10b1>UdL^}(hyx8QNl#~B0B@Fr$^D*VV+U66{z3vBHN_sr@j$7c^=4J!NQ~1ORI1|**18%ChtS&n7l>T_`oGceEa-Z2(#dI` z{i0gLNPoD1P}zXZW*SIN?~0q+|FLup$K>4cBiGWOg&ix;Aa-eOiPajgRh?&~@{OhD z<_BDMFM0Hb4jQ!rxU!?aOT{wM)mCqh#zCfU@(BcQN$298RqsnOMcb?-e?z8(h)ZY` zTdUP%5@KHW9~zvW^YWOFPRfagV^;gogXu%Z7ehZ6_A|vc!5U1R(n3CCK zBvubZxp8neacVb@=`A7iHC+Yg#Vp|EZr+HisYRofnKQK zjEK2_;h6}|lUDEXN>{qTK-P6)g<(LpnvqKH`0iX?JcdF~jdD#sCNo zt`h~pMU6o)xsZnKQ?o8dh8(OAF{hKwq6V#jV+@TdgPpojtFJNyXank|CW!@~ng;yU z+wy=|0G>G(92*JFxp=}{P@WUWa2}myQ6rQTDJ}AxMuXG63$YeVnTMF|m_FQ!8Y_}e z6p!vL+3RAd-yhA26D|in;SGnjiMsUX2;xS<95k1VNO}G;@_@X(-gpvBVS?75fz6Mi zN!O)7cISSbfrwS)4t6E2;x}KVjK9<9oxplF7k;vmZbiaDMuDrJM14;y0zolV+NRx< zJ7ri09%4G}k`+^yS{N19V@?UpKrAqoYF!M_0`@21%V0v4@@^%3C0UY0Dof9#&(v}iz0|7f;vDe4 zs^gfIVxrYLBt*sj?$aQb_?#+aVZ%5`%=yo>)t z32FJt46(`kwi`h+^^lulNsnPC;~Au9++Y!c8N$n!y3M7ONC=V3$%!QIEV;xWwphFC z4f@AF<1~oK>tdNa8eFv=4z9dr;T?DYmP;gb7kT$R(7ea#JPMe@z44}PiG@z* z?m4|9F={^B)4%`R-sCy66T#M~H}p2%@yf0h8=IXbT`w1{+r$)zah1~KFnJK;b*o7$ zR?*r?hDvhhm&fhRDv3ew!Q#S|mxzTUFpR~4HXk4CWJH4ICH%KUZJg=-mZcVay{vO8t>tndN;=f{4Up6X|dVkAy{OW zN0-2Q;vUVFN**d52n5z4c0q~XWPVH~MdW0r0FiXe-yQGmsuY2w`lHKB0b4J2d(c>* zvTB2aoY}SpV_f3sfzm#XMXw^z+P+8 zANzzt6x$6*orK*ldCO{kdMjp4N1pI5fwO8(|A{9-B9ZjtMy*J)`X3%wbXvNT3cxhE zJxOj)T$$c{41wZVy~|#cBz2p_?%9(bDn{&IrUWcIllrXrJD0XLp@d6#h^^%kRPF>z zE>K66(BkJ7U}}tdm#bE6R6jITW$0!~`#ArCNA#xeT=LVzn(xjR$aEI#`iDdp>>`n( z$dPU`)%v&i$JThQ-?=>E0$q+>D3cyKzD|`er^LCtS83!tAgZM0r_m?6Moa%)*Ht4~ ztz#10_LbXDh&T1l{B)T#VEd|92%7J!?UkP@d`^7e_Kbh6m(?0f-FjbN(SJ(4UH`1U zr>$pU>EFAWRBp~Z^Y1f^sY9I`6LYk3wY2}X)|FbTYx1$@O7%mFKGjV3&blqrTL0!$ zQ4JTnsYPJ0JO+oj3AwSDZttZ78~Zcj|=0KW_#^iw*7=LO-O#4ls>IH4@iA#f^iS^8ty zvsH&HGF|*~0^KO&w7~&r_jutssUc|CiUOa0RWZRQc)me);3k|(B4kaUAmC$82?i=; z$Cn;jn5k*JNfGjw9~Z3Ul@Ib1*8JfZVTyflnXGI=$X6M$vB4NkhaeAbIq$!(bm$Yd z`Kg>vq2dSO%sSa|+@tsNE3XL3F5OLS{_YIeaKB`zC*~#DeWhjo6GvlMB78ohLV)mVlJWJ%;Xq7LCv=%UxP>cas=Xda)D7q;EObw})Pj!ma9(xsmN8OM_-4d#z{Pv`wS<_(nmcgK)+wkuD>d?=Y6y3-U4oYpR_~hi z_&|sM#HhoQQh17BCmj2C#<(vE6jEt&N-%J>qC+5p4}^eXW?HcGGGfk>m@=@+d^pK% z_Q_Ix!end6cO}TLREf?i#Az@XxY~<(Us^<6%H3m>w(h=0K; zfmta#P+F3P>&=%%Gg>Cz;)A$WCM!zuvDa*fcIAWt-`XtyOrS9mQp5`Ysv!C8d+Qgl>A>SuWQZ&xZp)7Rb{LKB_BR>8#A6ajyE2NU2| z?Z{g@=K+k(j|+o7e&(<+^)*>hV6gM>1;MkvF&(l9Tzc|C1MEPIARu__?4ug@;IfSK z@eriKanycAX$6D{;m*9z1)83Wuiq+z6)!&&P!3dzDr70a@Zc>&{MU!OWHWB=h)E5~ z6g)-XrjUQrR|1%#l#ucu&(06|-i_E|I>v-M6>GCntp0(n)^o5NNel?lbTY4W_>oYT zpaMY-6eY1%Uwu%3@PCmGe!u(OE}598D76g7Ea|9B&&!0eqz^(l_CS2dH!tM-wB~pP zTv&znLZVY43#kvznjY-R_PC|TE8)bke>#>bP*EPt|G*mXb$$Bcj&*_q(v&kq&hce% zAa*Tnf~dsDUbPA07YP-Hud}CHk>6DwnC#73-FfN@L41H-Gy0ujz zR+}$8w2*z&94NBpXMkw9T%DEgG>BlSB`WEh5jqYRy--`aa+Iou>ej7rMS~C^-@9C1 zH38qe0SqFi)aJrVlSm@T?RRlRP8kN2(s>YY9LEqsL=P;dSB9Z;4Z)u!E3>ToX~zw*Qbkc8LW1p$?}8Wex%~Kx-K7 z7>ekWc;lyhl`4asM9^8UhPrB1(P3^bbgpPpflb9ZO9Dm{SuT^h1}}+AmgE-hVj=Qi zNUlL2W#<@+DcxJiB)89>@q@Nx$(Kq}NO?pg#xRg=f#_^^#b7RkV zi1IJ>`LmY$W7c}Y8@&tCwJ%E#G&W1v1VKsQz5eepzp>@em41<3 z<&F^s{QWppV&zm02|n$q{>oo8V^W9Sn}q|RHAqjKhUJdj+!DLdFBo3OZs~`F^1&io zGmtON%Wx|G?3D0vVW>jnG`bidDa{h!uHLFl!bsk*-ck-3e#e*w=>>S4pD{~L?AWwM z7GChv6v4^i9<__~#3|6(J0B)WHZiw+ta`ZqfzrZ$@{W%& z)FFVSA7qyGGsBv}N+D71zI%qzFqlnxo^miDkj(4}*mPEy5_se5k2UFT(!mEnowLR+GA9+p)6+jNPYp0LR7)L*#}qkht|ogcA`3C zpMhDidXzQLYkRYqJydUQpYip=DoM}=wLbQ_l7)1RO0$Y=ia<;xFj18Wt2Zl!=LsS& z!|K}>XK)ky1d2c=q)8Kukk6q?!c`i%1h(zF(d^CPPC;l}j+yxFr8XIS+{e$=hzuSo zMIlfRbmUo;Y=*u*lg9Gm>{Sw#s#wo~PYc>)frgc4?-9mQUu9%i9E9pcTcrkF+g?7j z)a8(%OgC?4t&ObGLWM;%9JSt(?SUkCwBqRkW$`HjiEt1%{Q6%*KH_vG0n;fg8)V}Ydz29JmXgalMVpU4q76DK=+Qy%6j6CQ(g z9@tiOP57lt5Ihq1R!L(O6bO&dgX(JJyIg*iA9h752ruiae{|W4iN;H8c`1l;w?uTv zmxGZ{XAu6WP)BlzUnEj(B7OOy(qK&Lm*X*^nhagz>$hC%^8|b5!|Vit=DHcAzF>iY zq(9hJSM`&vriy)))VllP4;_aiYpc?z&w*Ug16fa%$hlvu>y)K>gmR8kioO}2Y2~=@ zOs<@CeWP>#zhtHUbdvwQU1Z#lp(mUNNGXFcp7zC+pSGuZ>P_I=r^`84eS=6PV#RU` zH+`T}Xl6uBC+nFqPHAAYUUJ%%;~+UqRccV(f-o+EvZAVz(;gf{1~dcNh~#JX)sXy5 zY;{Ibq9$jQf!+zg3Z50rR>LI8@IsLVG$0d9-MTz;Q3<&hVzdiNV&UwWZ6But(qb~L z6XG}Ky?4&EqR^twurTbv0*P1SppqQujJU=(bbhb8>I@^nBAHYVas(nkvwk`!F0NnQ zXTRXld{1bqN3hn}@cq46Qc6)hr}L|e87K+FqKwgdBs$AjFHaT9Z z(NgsZJ(>d8C`EEGpf64O6)RSFJ!%R2n*avTkA!Jz*!l#?C13W@7H*^*N|%h*CAtgs zyPOSL7%CxMF96)_V%%zS!N%%?r%kR2nP?83BR!CfyE%x37?Fh4!*B+ZRB}51NfA2< zv1p@GZJZXxv!Bj&YA+<5>=}`>$Q>ZFTKMKxTEyDb8iz@1dfIyo#0KuxG!Q8hoQIhl zS3~lrEB0^0LCS>Df=1!sD6UdvNDSO*hxkpV27pqaE`S7q?cr)+^^X(2gZu;A*(w%2 zS*6O6LOO0rGKg1@UP{PFhIgL^r?)+cZ}c`ev~oq=8fsx-}sfC*G$Ri4j{jI8StDK}J8x_c9KzcDW_`S~NmZTv?ypXg6BL zfn8N5)?HfU}vJdZ)oQ+*%#aNh=z9=iMXMLjW6O7cXPFe$% zyG|!3Iq)^@6N&}07kBIwhBTyiEL9;kCpQ0(1%*A%Z~BG|TV4|kgS6hoBx9P=V1+4K zM$l%!4V*rvKGSPwVFjVI48&ue8w}dG^1w~uB4vrXFK0!QVYAT;mJUJ@qzR$A8G$aK zJe%-GVAjq3_LDB`MPil{SfapJrVAH@O8Dhm!q-eLn{FLgC_0!8NI=XPFhipiZ&Zip zH~5+&QVPGVG_kb6u}ONoM&tVXl~)>*)_Cfc0ZP>XT~9Y$fxv)T>H5+&!|EA>(qe|a0`$ao128n6LwtfVkcd-ygl7o9 z2V*@3TiKHXaW3j59;Lg7u`nn zs6^jmW3Uv?DQ=L1abtq^sxy_spjunX)zi>q*d6FzbUwYBI0d?xUqwXEic<6GWYCGh zY~!zz)uWF%=POw|T>pF0^=j6mN4A3&BTA;s_j<5Wv>odTqDJ4qUpEs^T7+yPObzkqu)~1MHAKb6p~WGakkwit z-o}>IqsvgzXb3PV3rhf_Mh0QHAA(xo+i1J?%;gixpsyj6Pxu<#WvRD?N1E@{$6ikk( zj}b{`=mQg^Z(vzWaXTO;Cx3C1(`KwFLoCdfF2WR7N>9QLgsW%mYzkxOQLkY29s;!- zD$u$5>_Y8~6u-;HLNH8}ZjujnmIVc&07I2k%t2ol=0}i)<5!L?)1%jn)IcGdf-sU^hsCSR)MV=YetQjh z*ouG+B4VN7ro_1qTs6lGcVG(_TRBJ?snFVm^PL{R0kjBbI0ReVZdme&*{`g^>R1UH zR#|A(O16hamNmng+RVV*4qz-7L;nfegNcz? zJoHc(C2deic*kNmc7qOVfkqI7pk^T`H$c3!28R50?$yuAkf_`qwO3=ne*dlOV9ROM;7!ma`h}jDqo4HS z`V-}isg7n*ZUL#AVEcPW&m>DW+XG5k>xw#`hQS6B-54|%)2!7qOC3-Mh-*x>4*Cq} z1k5`&u0~`*do;P=+L}f;G1Y#e6Bj%!W}mKwziA2`1rAIb3$tz<*3nC`MfsUpWf99) zBHAd5LuyaDU9}FE9vX^cgnMkIc)N#kNZnkmNn2}rRzInr7P=Hq(soyZH{ml6)D`Aq zI!=!_5n2Tspum%~^0Cj7awM2C4>SO9(i?qd>UMEj8US^hPFL#@yOZP(eYVZ94Vfmw zJ&hv7wT+wPc0pL5B$2yyq}$Yujxy{v=mquSf=LD9f^KdWG*Xfi3ELB}&$_7&l5}r# zxjY{5WvZ2C0P62a%jtW>^rwY#kN-Qls9M&dA%CTu>_Qv|cPKz&yAa_E{)fG&w9|p@54S{fuKIZqF=e3`A2`I-u(0wB{tan}ACMtVK7r zUYAs(d)%EMfda(+4_!B=^B^-!%E zwTK6eCo zP-thooP$}ZfD9oQL8;U}6UlE>KX^4$KZEE6(4a01E*XVu=`_ zKde1OI8g|2;UEQ;4FL?*v;al=7CgqXz`DSAgu z7&^*OEJ>L=KQpvWWP|_^GD6G?sK6Ak2td$uU>GWv#Go`nL}|y{(JoQ);l(-;&`8iT z>gJwSi#9zTP;wUh9froRYBrm89Pw3aDCdBsrF-gnw{g}0%|IhsGvzq22zZDI8=+wM zrlyquAUqz*vw)yt#xQkI(VLstNaqI@JY-NRrG zusNWoHPb9?IJ)QbE(YWjgbNAF#CVnTJgDc?7L$q6c=Q2~fx+S>x>O=mgkJS1Mf5cw zXeet<$fp!@#5cIuV#a7jh#0slm&<{FkBKDP9cV(^!(;$P(3XWV?&vceA#GWU^}({z z{xWoS(KU{vJ>&qI6q{pdP}1elg3_Xti`kByfMe?v04w@|MKzl+J_~jRMz&bxWomH$ z2X#e(1^`E^)+#YTL{e08NJBbb*gbA1O42y{+x=0R81~HjH7hI4W*TS+1bAW}DhyVw`2tc#ALp+jD ziV>xYERP$sm^d9?L_A;y3^ywl5yD0nA0-`Nj>VQ^9CkN=4YlK*4@yWtm5*`UU!wb* z76XRX>%=RcMYYjH2L_%}`H)u)*X+6|IMN4VksFG1sN5aVVi*H}z@t~6=<#?yp=2wX zwt|YOSI%++q1RH1LlbBV*W;Px^T<8z-fJA#d9Bu&6Uq~jvzssyqc{LJA)HY@$ zn~M8E#Vn4IpBM_rw*_c1!_vcH?M9MI9sRU;Zj=J=1;R7(%Q8}m0hAl4cMlvieoHVE z(BwpaMN#KSzMj5l8TlUl3q~KGUX2QnNHZ9br3Xh7O!4*+2p~O+!I`QpW({~HJh;&> zibH5JNBgI;fM`a4M-dMua7wf~n#HMABTt~Lxc()Yt^Wu8z&*VlWi;Dz43mzb{4qt( z!Pf^%4F^;64wATjghHQ1EXF~OmrX_zjXuI4#4ur)9bmg;{lC^?i1P-9&Oyyg(2H3xaB++j*~*AuZ9tdt#4Jg)QIPQ@kqFG^tPHPdWJl8Qb7IPH z0<`rvI2N($POq579s_q$gZB|@8YEY25fe9MlX z3%0{SgWMrGOt26F5O2kQHOR0z3TM|@T}KoHpt@+{5?0QVP$d(=l%v*YX1DkR_)B`a z1y_kyx$7&Zx;{4!l+r8R=2>)+L3dmZZkC${81y1|O09aY1Xx|nHUmcY zF$uDvyc0{@E|<og!j;ho@{lYVh)4Vxj^#K2`yKPHnlpPUXK}s>5K!MAvcNI*0_*`7&Q8= z*y1!Q;Us!Yn1nVG+%RcF7cmnUF}Qq4#J~l*5(+rdjnFs_6mWSsmrh5tI<3isRRFSd zMGf6BNE6w{X<@C@jo}y2egg5bTaya5au_2*;W(01Zj){jP9}`oL6-(IOXs|n+Xhtb z`UC^miuFamT{!VDSS$3bmgumRw_%K!E`4_`dZNR6B6<#SAvz>oujnf2aEzl}*SVA` z^b)5UOcw_;IdI>I`iS0WL6#g2f{{XOgE7*@z={FTurGC68Mlel!ukokqiz!7OM)Ih z4QVHKF@qPdl$fI$^qjI(098sa>4pKO;&cF(8Vrc?%{s_;0c;8Ml}RiufiLtApaugQ z`9}XzxTT4LDyIC@IMT$un?sEN*+ z4(5+o7&@&cps8BGADw1bEr(HVL+g4m#tt|Ku|zch;{+BXLp&rPGJq~h0Mq~>H55^x zYMg7pDB&qeIk0?yC*U;v2Oy%idUR8VI_b)-H0fa$My0iS>;fzsD7M3))8jk?m;+#Q z068%>367l}+F=Ja2S7}RQ!1U2Zj2JM)@{<7w0g<{(zYK1R!1oY_!Am-thpKMNRJ?9 z57ZstJbLgFM#SWZihDF(9HyV9Kb0z&6oY$L$tjx!1_&0MINZaS8wM? z@qC!ml+=q@u)A+-Em&Elqp*ra9d9?}dNbN4imXl}2dU}S{VQ0=u$SB4@#c6ncB>Nz z_)gv5AGSj4$54qZuCV*+Pv*1#T*zt~jA}q9V+hz;Sf%4y63#NrDIZhnCxb7tR(r9Z zu_!aGkhC&o%Y??;sDv3}PZ)nPYkd=p5WL!1^8~|fki_Edq!E(cP6N1cb*bMEF3+ki zhTdQs89ZX!Bs6L{zp^0%GBzZpbil_g5S6IUoVFV%#)-=_n^SPVa-ysxpY=G14uU;# zs>d#>%q)gf+CezGP%28rO<$MFh)oLsK!y}oe??sziaj_#(hS(KdlrZ)*%FV5Q(|1H z*5pG+CK&H!OY_|xlt701*CS($_bv@$zzk;3+Q$u!7a1oSFW5(TFGOXwqUW1)3q?|u z2mzIm5yUk=jkT}}f;!l-2Yp;nL#(&AzEB08v#m!HT80cpJE^s=f#k6A7EOv(ZD52( zgi~@6gZGPB5Kn3zA(f))F>Cz=-hH2B!&bML!1;=EkI~{1!cZGhJZ$9phCR-QOa08L z#Tnig8+Mb`rX1aUrGay2o$T`QiAP(1IXX3)KRwuQB#-WyC?yis8zb61_Bq089L_$L zc;D#nuv_X41M4h}qt`TPi^;UMb(wmy-N$G@2Al zmOlK1n;X$&~(R+1F-VSqb>xnK0vETBqRq zeuKCFCqGZtII2u43yzZVWW$x^M0FL~=`_|?HMh~|vyrB$VXk=)p;tm_6N33LLJOu9 z_X)%6WCtF&Hu(qKKMdelTT(a2jJrB*pFCJv=!+5dZH1WEgbS|IBDgiIWDmkBazfAp zTozMO@9iI`YjQpu?qAx0z}`ZI=x_(W zVQ1^`38I^RaCfG#s3Y#^J5tk>y&VMyPYz{4k$>PS5s1@x7hCd%j*m~AH5^#M5_wyX z)0kDcwK4C~qMZ7>TKf^xh;g2?TwH4tCf`*OR2oct-IPb#S%U^X$MfRm`gr|L)oLZv znAl$UZV3j(UXDwtyJ>gthSl}AI2-$4$TN7`3)!!bS@A{ojQ;AxMrX;FtJ?Yt&yY(M z(yTPog~fB7i*w&-?Pou7=H_}^VA%LtZTsSP_3QUIn~UWw&h|oYT*~pZrWKpk5VD!< z|AEW-sF36e20Ls=-!ZHS%p<9pr+UA%3DRNh86)uR@>fQD>-$yT44C}$(p9*RE$n#Zf}p%p@FR11 zez|WRd0jSI;p3%R*9M>sHw?x^d|3kv-wp8v)`~k1)s#43WRN~Rb&0=6iQD-SgfnW% z3oeiaZZ)V=1NDR*3ZP(2=t8(dX1r;x&yLHAC5ZMV!-cuJ!`}!ZS@VnH9A4Si%YkMO z{s~u;huQLaVRh^SO$m2T60b3CZAVZ&?1r zyfOD}db2uF$x}8te`(gXH5Y$W-YL}A?JaCb&gS2@#p%TQUp&)tSQ6@pvA-kT`4?ry z!luVoUCM1+`r&Y1pfY~T8znCn*vO5yFxgv)F_)rk{L&fSL&oxSwo!RO`)@4Jhut8^r4 zG{ig9lDFphgZ*(2r_Hlf#<#zht*&WnUvuiY=ZBomy11LCX!?%BM?L`dY@6}J+!M^$ zSy{Ha1!F%%^oQo9#oqsr%$7ZWw#7`j_W|#|=9cziI5cs#JDVDuiJJWR_KkCfe`fZpv=V+Oo)jXm+Hzm1h2u3klWzaf>(4 zPt0ZrIpuujVsYE4XV?~vGJBood1aU^YPZ+njY=o>_KVWz0(GxOJHtBDs&-fqDP zpCpW9{Qa7H|Az3~UeeOs_6+;c$ri15bK>T^m3KEZ;$(%WZtca0Z&65cnozVp>wfqj zZ0XltJc-UWBV6W0nzcyn3pH7kXL#H!)bG2sk-3>d@ znN~U%CrL{-({LYo`#wiCo!xV5yOFQzaQ3Ub86LSDmxhUssbvkz8p?xLFG&pHx|DB0)7!mz*J>mW9=?|5vZ{&HS zTke$os#VX8u3QdCfN- z(#0G}Kp?*-hnQr@Kl?+e-yi+|`Rxz09qq>bIndMmVYYEvyWYJ&tm};lv;6+{Z}ats zV*l4%-&hmN?}PsBRqyY4%x_r*%h)MF&JiLy) z-*8wPP+1}n+jXo+DLAdLwUOo_P$NyvQIv{SXbf0HaYnVENQM#Ao0v#xG3`_f&1s$&VfLT*F+)cLJO`O%O zAmgC0sF7$;tU9}?dUtbf^HR3u8FWzDu!v~@W#8Fa*w$(RBWJ(>?uH9(N@cW^d|WI< z15NkAPk1y71Q@3dtZNg9bT#cQy5I#Z!vdnz7W59Jh|-wm=kSd7Vx+F-=PaOD09j39 zwteT@)j<7G!q$un{~Bd=lt3SKI+wOQ!(IgQ;B-FqGB|GRN;mNTFO3-4Cm0s^W*{n|B#kBrY?^ncl$WnXmvVg}HAu^r*Cz*|H!H_yL+ zv)e5Onzxe&7vw zTjzx%i*Wr0KO!{hL4?+Jfc_1HBj*p-Af9BToS$}g#Q=R?5s9dR;c^E0rwZsx5%vnLnf7l$P<9nBBX37U z5CccyF}#k`2%UgO$7yF~(qY5Hb)_^K7LZQC$I;^GUvijs(1$G4iuUjh?Zs`pI{GFJ z#6V-d(h^m|1I|d~;^=5;qC#HXzryo`Ws`}M(6a9uy-Ue02(mDrKRWHEE%nA%}!w;?2y5N6H*M(Ma^INu zD$4wo#EmloUq8N0EK2yfG+Nj#!{>(d8=` z;dhZpeYy7?RE&BT$1PYf0wn0e=XuW~7jPEi<43`phrS?DxWY#zHc+_yCZ25zf(s%t z)krRC=5?HXt2WwPTWC!Y5IQc%mV{I057Z2X`!p*$;j|ErG3EKOOp;L!?#>CEpKP1bvdfs$$ zV9-A2Y|Yt7b5~_d+#nw}N$Pl#hh-sB-T(TI@@pN_{QN;&MI3uyyv{fmSdHI0^;VVme9F(auex0tl!k9V|LQ}p%4&I=I>-F% zTH|+dwvf*q&M)o|;|gKdqi^-Tv&VA6|XD z`^l8gUbU}Jx|6Ft2%Gj#YB@J-vEN9#?V;X(e4TSD zE5~j<_q6!@+=u_vE&gO%;Gyn+-Tu~Wp{iz*sK6y*_)r}_3+~!RZK*5ep54L@Bbg^Uk7A4Tt%-JDfYH;4cUlhX^W9qWk z26U2fQmemU4Qu0#(Rd?6T|0yo6?X4%QbDYXXq(g43KEWEiQzW4Is z#;4$1^D^6UlcsU_0(ZKwmnYKOMLc-r>4GPA9S>#EEg$|4+DzJ6MYw9Gm| zB$6F~avpX8_TnXm;FjrneM%n)FvG$}XrLrupKH|zeN=-30}`tS0?`?|lz|SGI&!G5 z+L~Jua1jDOY94qG!Mz!2uJF)zi4I}vL`7gUy$ckR2cK!n;DPJI>_>4=tzHz2D}%i$ zoUCQ9JuZT`aa>`B)vUNQP&L<;?p+Mg@4&juB~xI4emMKl!MGWk8MupS<{>R_7Vb+xJi||;yzVFCDS6=Fz$6tnb^-mv6WEMFczYv)C zwk?pA-a;B*EhBdhjdL8|+1@X@-1rx2$mD^v->`(h$VuC@)#!Eh&xdn6GBA<#)Pvd4 z!Ya&+ks~n@xz5zku-l3=c}_F<9|-w5#*u4*IF8OOK*{M;V^2E>TbB-GGmaGg$*E7t^_6PoTw6(0n z_5Cwb_@PcjeT~3nep$%Y`7=T?27NDma5(aP*E3`uqJcz07yY0V;cMp?2u6WW!0JB^ zv?_Qlq5yN?3q(GrYzKG}8sQMJb}1pFC>*(<33&v+@R*``L@XA*Toyzg$OsQ~5brk* zM_(nhSSVU*H$t#RBA6iL;2ZufD~#q)mJd%TN759{pzWarTG<$af_@wPO(gN3C zKpdASM+3?ht$>o2Xsh_d`yhkS{?qp8>y#?e(courwt}|E(uzT@w@AoQwkzqQYD978vsMHmo|kL zs7G+bV8k1#teeCORt}H+5LDnZCi=t`sjAq-3-W)Ip_o6ipd$}ItUGvv_;G)Sf>+Al zFGGJiBBZ07H#mOg^EVBaSCs3>HU3)V<30Sn@7`2?fk6NSNI(2!D4Dj{f@XiuV&zH%vp`jA7_LkB^NUTH$Y$yYyC3r?2~Y0#XK^GCARjH zaM_^zP@`06^vv;AW5;2Qu4OUTyv}%A9{9_muL2qGfL;c0`1j!HEi9Nc7(S zOh1m9t{S&4lQ&$GSjPq`fSGtG3dq0GrvRQMV2kiUj~{s`Jnl*qs$auTG|uDY;u9a( zE+a6F#}sD&e&aVj5sHUbM{B3RjcrD|F!BQGqcB@eKcfxMCn%wy1Yb>l9e7TrjuEc$UcmS@H|PPOhgA<9*s;^$hh zv;M=?ruAo^A3C`1KB8+mduj*m*QugcE0Q;TmExT9oS}JDeHL?y9i7t%neC#425pXW zj`LZIi@^>j8^}uff!o$D*9myS*L&*Mzq5Py{*&H+9O-G>FmXjLOX|-Nmf1kn;-HgW z4X(`)wX?8>n0tWpl@w>|Vfp0t!=eKQ>$o|I13SzFTx8Z?8C4E!b2*LaGa&u%Jr2ep zr7njICRe>1))@eMP*Nqm?IA)#N|>W_oLaOUg{cjj+707aP?mb)5Fwa!1Bi&08reS0 zung@D{lmZ%92$AC!=Q0!wPb}(L<*))rxzx0i2+u&8UsUC7}~NKErfZS3vqkI;dB_D zvUp!f1UUfqw-5+YbQY$NJkq8yzirSl&h@N!@`L>bIkVK8?cI~@@es%6-GwXzfRwsH7`=PGIJ&fY zB1@PJ+Ty23(<4K1UP;ug2HI~%rsY1(mo^p)cah%%Gdli@t9iCx3aT(*)-76-l} zy3TLMj0psH+16)y2Sy7-Ik=pMH zTd{#;gAu{FKypz^YSAwWUUG6B;!`8qefTi{)|6XQ!kdM+1{H|o{qwgG6K_;} z)#qLO_-_SnVE@d{%3Z(*43F>bjQIJn=g1W2fiD6V%)D}+|MJh**2aw+ zmmGwfliPWbYK25x7js}o*|l$3UMx?5Qxy(`U-ccXtlW8X=*0QRWi7D9OOeQ6Oa=do z-iXJuZk+G@FIO&qi)e@AK$RhY;1!3;Kb<=9W^oHBE2ZC<)x*yNFC0A-88W2ZyvPMa z2+YT?KseV3@;iQxT*-??z}SO8Mi3nEXnqV%w*!&G2rZ9L^!ObI9Lca0^X~l@s8b|D>B6-Vh=ka-i!Vo*It27I9E_AJ?~COf=dN6at4a1+9>a^_)t$H;QH;lt)!cLCvgNaI{~E$y z2FM%?M?^}DSu||;Ht!O6iLtNY?EC$@n1D=l+=)Q5*C>ZWdySaskp+@8VEw``(bF9n z?Xj5cIw0E5_2~8T1_yG>Q5a<_wqK2GGREC`{->azJnVsI&d~)9_?M+7Wr+Jsgl&1+gV((qHAaCuaGV5)cov)nzmU4cSN*sS1 z0w3)>-d%6M0m>A~$kkF3L(lXRFiKw`)+LX2co}kKkvxTHbOmpD)8|8xs{@ybgGwZ@ z{jTh|6?6Ya$*RbQtG>CYB{s~(v2gfW{Dg^^pi@__wXxTJb!fAA<9K_@BG;HWJFmj@ z;pOu8zZ&p@e~cN&vj(qTtNPPIK2QElI4pmDyZl==PR!%K=J-7F9J4EyS2Qpfv0NoC%YJTkTbRv{dAj1&fUjkr(>eQC6O20KIdXcl&>LQS zVBH;ym_3b8$WP4K-DEsR4r+)TT58gA^-ubk!U}fglc~<54?43y+WF>(*)5u!SwwVj zcE{bi#;^J2r~1Nm zfS(Uz4O)U6MtQCdHCH?DZH5FakB7} zqSgHLpys24{Z+&km)O*Q)_dw|J5P{R(EyAtU%vD0#%JElTSH9q;~tnjy?k)Yw>>gJ z^0K&B`vsqiOuog1{m&QCH zmYynUnok<%Kl&UqPI(*CAy4dQzrb{bCx$7Tm>$kKuCoWb_`RNOKY(skgxuFVy zHqG&Zx2$Kgwy~)dV)gmc$lFjaK(J1{J%4_){p4f;)44_GEqT_VO>Bmmq|Nz-M)`)* zxz$3eK+5=Z+AP=Y*^Zo+g6%pb(ZSYh@1AUjy6M$s0$V3}208J#w|3XD|C#u}2KhI; zEqZ398s_uU$p)@7VdJMd+*r(c2=;#u$>llZ)!mI>?0P?UJFf1{Dxg9GGD)@VT&<3B zT{y!MxSjy-jbq98yU#U5ouXzmgZImZ{u^qYy~pPw+G_RM?-02rNX?_ud2YmIHlftX$jPs3wVOu9F|6DtAZ*_Af_s zdTZUjzRfMog*v>qH?bM&Z3YUgb54hrDxebY#2Kg0)=u>(N1a;Og1ryL1ht^twR`LC zT&(L{&2$Uufu1{YV`2XuE!rn7iEWy6NEiwUeD`x?;0PTFxHM;SKV%RV{XljO5rCii z!9Uh5fiL+Ap={6Az4nz>$A1{;aW4?cV&i+6)_tY)^1$I8@u}Rn*dpFzMK7;T{(K&U9#?^ zbur2DRmsxMD)^ia`4Y_qt3qDWTQGPaLjY*0X^agCR zzn-TkeJB{bMJRMzPy77IzTVqkx~I1H_8)uyzUh1@=sqv|DS6|9+v5XiaRPzBUDVxs zY2{n)=l!p*3fv^Uy?bUwS5ad>=Ux>Kg-f4*J+(38@BEwXwt3>N$s?D;9+Mi(|9j<_(1u7T0(qnWGi|=UacEJis{?BfD*CR%EVMb z)G{cP0Yc{gOl-gR`_E6An|tr{XKkDmRNL}^+ZY9POe8nJBk?-b~ z$LUt;4?to#PT#*OuX>i?m%WE9)*J1({B{p|P&rQ(>k@iI2<;3ix8yzp&uzpxPBI*& zM|H~8)8QEngIh0S4DyU{Rh ztbit_P{!6dG>;uv&em5>9PzTsS4B$KMv*)E-_;K*92H^$m6nhb0ut6XEywjv&JnpQ zD{h((YGj0xp*oNyb{|7f-TKi!2*4ZKfcC?d=?M1}^d9cs2-8ireVDaDbnfH{U8{Yw zP=!7Gl&1&dB(o>+8j% zlbwCTPlk`Is-7RcZsm0g$Owdnslzq>} zn~Wu>c)ERSqjCCk>n`{kE!!i=?b_fy{_7U5x!1X;$F_R=x=Y(5ipMOM3S{$&B(iy> z+C5rZ%QX9O`;JvJ$FAExy=dCy*&X}V6=_2*_FUZ4AY1U+^ev4RKTGf{>n~2TcpK+> z%jV6xTp_p|qL7`D$UFTUKLs}iU;d*(wtJ<_l4H3QoO)5$OZEK0pC!=*M_fpibTGRk z=X$SsW%>eRqkqT9>1%Rfm~1TDaB;^PN&h=P#(uJ@$lti-Cx82DW@_Hl>AAs*yaY-2 zzWq}BC$_2f8{_Yxr`vmqhRhufbMa?h+o!+%=9J=Xr?vFT+?>qy$1i0hFubA^VeaMG zU+&u&vT>i?o^PLOU+EFy@zK|aSN9WOvg;h$$Bm8OthxC4C9jBtWf!+!++O?5t|$Cr zEN(yCuAPxl^i$Ea|Lke-KKy*P48e#xr}a1VG%mQJ`jO||wBueyW5$JP_FGi0t-)Sr zYqYEkq>V!FPYA&WOwYipIi0*Iy&^}~`qp1Q{mmxS@#azQ_X=bw9^Sc6vaWSS3Fb|F z*eRu#v(M@c#BqKy%Qj#&hmP=J7RB>z9;Ha?wDJdg5fy9n=K)vihgq{gN62+Lg_Gh- zI1@_F%6Vp?voYDD9K@RatRN3P(_m+N1Pa(Cx!_o!f9!n!-Ax~h4FB5VWEK|}Jkn8FRph_X^kM^^B-fVxm~g!U7Ioc=VsmrAa=c({{Z zp|zTSzk_(3<^>7L1_ec*I@!DYXsd8e$ilI@7eAeHX;ogw<@Z-pVSn;u z3B2bSB2aHuIF|iV->A@mVZ+RXeS1ARIS;(5@4kr36T`-I00d<~3 z+sd5PZ@u5lUoJNnjO79V*^{Y8p)&?ylZ>5a!HBi8UdEzPAX>-npPfAK5JJY74|en9 z3MR-wZ&jF8WckNyB&UWupFE#fBl3OdB$f(^P;hGkrk_W3)6GKpL~?TZ&wd|No;&&b ze(TWy)q&fBsClp#xG8RXJDB|LN#6Qc+fOkb-jP*FU9G?MrMCfV`b22%;ZZ_gChiBS zSbj^MNgoa?_LQxyDt!3q+`I=#ns45?yPmk{O(>?)2+^jmXD6?DBlDxt7 zr@P**d?+W39tK4Ur7#=i^bbir#d7PCi7A4Yzc21=Cm+?C&hZnzCptac^W1W*^VvH^ z?N{?|#fSo)-KKhRW8LjdZT06zjZuom#{^O}Il3=%OjyNdS8a>=Wbx0YqZ=Qv8oI!} z+^tG!?2T0%sl}q}TFtU*fKU%yHRaW9tmh9Cycr{BbdJrf(L63rWZrGYU6^@ygbHVW zW35Mqf$t>?b-X||@EyhaVR`U)0>M?;g8F2kBUeP_^WD8e970`&nX<4~gfeeG+U)4L z`=CImPxc7OASlBX@D{sEoIR|=yvhK+-m>-k^Ju%V-VJ2Pl%bdfi>a5B(IWzqK`;d^ zHnfc1g;+ee1uwpn5r96HL6@-zc(U?*MX2-j;Y%6)@0tbPJ_MtHDH37!SfgAqG8C)k z2DZgsd!eMB7dq9I4h1vNKpPMbqrNQANzbDLDZapq2u1KzvyEzCEpj>T zIyjhqj1VgFoEw--gMsfYWHtJshn1dC&k1i-`<=;ZA5E&quL zw~f;T><64RT;pGq8hrVUBA~vm0jhS#^fvHCSZ07m2Rl%L#F^eMI=I)qFTHd+LT|%L z2q#CYcDp?`HC25#8jHN>OEV(gg7WyE4X$(l_gB+@u-YKOj`~kIw;#v-Ni8Ao=3AOp zMQRGyd}db#&3;T%HkEeHxaqR}vz9$Ceb-wkUtsxp0ja%<0vj~dtI4~nzGf_^)QbbY z@IMxCEMR|p+|eVGJ^;#$T)&pPhE;{QNWUx=9u1g`yb>tI|If{ESH(kREzRQg@aWCT zMsPGVytaIK0=Rtz z8fligsRX`R9Bszg#R%J8RZ)Ci?vOAm$I2x+)Ljbn6fLS}K-^3rI$y3X1M#9A2t!sN zM=-Affjk7_I$tQw?F7{nxVZ($#5jYNNx_8)t}FtKZ<;2gJ3I5`pj=fT5b=IQL~Cd? z%5@-SHp&wi1R@lMBAS*_kcX3^k|1w{17zFqZlP>^MEqkwcTMAD!qQNBEL>P%NvD6s z1@kg`^M&IOk*d)sbh@(?ScVJ4#vG8LIxyjxI}pYZR}#o}GY$M=P%blgdhF=1gTheY zj`9I{(AoqFL`=&^G+4%lsDl(OW*Q%TZWJVq+nbw7^D(V4@bANu(_v%9rMIXF2S1Hj z@@ptlZS>fy@-XjJHXD@Bf68=SgErLoOEYH!B|Pi+G4o?voh$& zL*ZhDThgtpJh(g|bEW5!$YZ_NlDhR9gGrX|Zr^{tF0mx7yCrdMhxkj^3yU4f#vS!F};MzDJ9P5SnLYbx|L8`rXzS$KNBs$rdR(mWUX2%_?^@CXkL|1E+JDbf%s9g#?dg)&E z@2at4)A3{JXn?+^oWuuvUQtB@!bu8gf`86o69|I?HVw8+n)6OHnFU-xcm-gpKzwdp zyfN{?$t@t~oOybH5C*5zeUq#$ERDK$So1zQA*epN@dfTVBy2$@#Kj4+LLEVF0=~$w z>$q_j0v<`%gX0pTh8m=Sozdh9c!a7daS?!T7jvB@LF*BE$3uQ9APIr_@H+_qk&AI9 z4!$c;K0rNj)by^YbYIk{MCzHN?<_g?{lT}cLwR*Ipypd#Eu2h4HEf)>0eltIcRYmJ zih$MwgI4t@Ob z{YHys$&z`pGo)$JlJM%%&Y$+Gg8Fm=SB(~nh|H>56h1bf^1wmUu~ViKy{$dAg2O)_ z2-A=|0|J0l!L!`zHCb0ow(&Egq}0cP+>lI9ow`gvHJh)JkXxkF>x&mMi&t zD-lg!gPQ6%#4zCkdbl>Q$h1tGPS&-|kbZRm?&(blO>kF+XFdkWtcw^)Bi1COg8K<% zS<|_QPk0W@aN6x4v@~f;S6ktw9dv0%WDs1Qqc5bTr5wIvv8y+5EGwnNl^KT%a`TBO zGJa+dbeGy0h)D8u1I0jQW{a(=62WCKUy1%Zy{J{F5gDOQl(=4xYd*qR;=;uwxSu$S zEWkdT3vy;EW+(2rk6eF68t^xPGzL$phBsG&zZkk)MBaq6D90&?Y|f5LCKQ&CD@ZZU zqfXF){KoaL(OKx85u{X1s>Na`k)Kw@XNiM7I6`A7tJQXXjl#reC^Eq(-Sf_hlE^bO4MId<@_*iz6qf}O8@$xWAgijWV7U%+ zZCYg-3HTJ(Bw%Y+!T2p!ixWF<(D}%GzZF+6!Dz!#k*Fd#-jX|8Gz^BPOB^!*GO;y* zb`^)i2^{YeH>RuLZW`jmPSV;^g2sW#yrpS}^!l`<%$9ItAp#!;!Eqn7M`+g~H23GN zFz9EtG~wgxVmEX)AbOQ7cP%dO+QRF&J5ZDRTEgof5+taAi9?y1yD|S=PwTYoc;1TF znz{CVr>hCzrd%%H>Nt+Q2QOG8ma5n5TAtQ^`d5@C;izgj2`-Tf1q3pQ|69BeVv1{% z{(@`$ce@A=e-vf4CL{oI&=k$RH%MI;ocri0GV&GG%O=zNaQQ2lNY*`od!Z_vLzw~U zkgCo?O?V5y17h6Xy@;?1acPCsqzNnR+;*E>GG;M(G_MXw=zj;DZ7#pV-Aw)|&QS4F z>Dk+&sPgY>%Y`|-O*--pc|Uv}9G+41N_7%k5CghQznijoFINRR2NkfW3!FndLuYZa zo;Q+No>ez0|IqF56VaOo+j;6}52nB0)8H05P@hX|tBD)1M}><6acp=W&X>24;Q3&%;EvCNQ& z;x{vzN35G)iouaAm!+7Clb_cU)YWwMnLfh-mC&IdCIrO(yndE10i>mj6)VmBwt7W* zFkxg#y%NhTRDl(J#2Emggd+)PAd3-zf_`FY7b=ysy-X;NC30Y>Y~aC~%y-g!n(qx6 zhMzB#IG7$GqI1&@YPqm{mW{2D1-t7ZR#gn=^C8!*>?x2>(b0uZ3WPJ`sEBG~{9x<; zJ06)8z%nHx05Ce$VWWa>j21?66t>}{x|6J2hR~!-Vs%<5!FvUs#t?&`T0IvlMa@z;G)mG3LEw1@ADV;wrWprnNO*n*cZ_kXHr-E8`JPj%(oK~jGv-8uzL%ODuBU5KS|!X}1FJ04RZ=uN3S z`gqN}{<~ZpUNkI19-?RTj}Xx9y!Tp5mgVbdo{oZ;(hPjQ@!`nn)g)G)tC0ffqy76B5SE7GiLgVrK>Zprv3TOdx!iFzjyt; zYp>tUSXD4RFqhuZ_>Lf%&Wu~C8Mk`$n|4k6IJoD>0;512%Ct-`iHpNT6lqnBd*1Tn z=>2ggdnlVFb=;NU$jHd1ng3Zhb9L$JnU4`D6^y5##_``Z%`$D>>tG-aQqO*6-D)rp zS+*D>zMQ>JyL8R!muAggl@R=u|MRjnqt+OUBAWKBvitqw|E0g|+U`pi!7X=p;q(Y{ zy8oJYwD;=cDTUkom?Z&z(!wOwZ4ZKpFH@3wETU*D&dKJk;zwFld$ zu1?8)@4c60lDYe&U)paq?VDbB%p65d&Q;WN7~_u=;J*VpHM^u`wlw@&9IeV%>8GNa~R2H3aGSZ4Pb z__HX(sVI>m^j0+|((cZo+ODwiB_*7N;1CRg#lU@#Rw(yt;{%Qb06b%`0LtS=G`9?~ zzfKFL@*tCgI4l8g-nFjSJ^kkSf zdO4piLaz82?`0CO!4x}OkJ2ifpGV{xI9pRCvH^bMPM$%*&XnQ?E9vm?F1$g4K|aro zSUap|lZf%1h|N`BKN2q-uq&tb1;P+f@6=D25cYz(>ux(6m0=({YZcBuXl^}pok@vD z?@tuH7E^ilx|X~a6CpjS(pH5XeOOSBh0SamWRfLP>)T^Bw$XVRW3!tJuRx~}LaGiu zXZ-Sz=_DA_vkHVs(74$6dE-KuhFzo@gi%o7G&L1SmnG;rZGyanmdutfj>ZH*Le#d3 z$b+N5+#7$3ld@cb4;eR2%t?JgapbQn6EiUxkO?4p0PZb&Cyt0oLXsO=T{0&))7Ic1%xGW?25Xz-)pcOV0x@xkE7$cW?!x~kfu+9g%C%nd>lNlo4H>(}>h z1jqf_`Of90xYguzPRs>;*`Ck#{+u@ZqW_vL(=S7nG5yoA>%JJf&OUA7^y#Z+?~y() zTkYR*agY6C&-TW*m!;nGySZo847+XL*y*cQ=k`*%cPzV&(iOoL|8*BX*f)LC+ZWdr z`K{Y7x;*Wb?d!JBwokpVeR{{qC+9B}Uy-wM-)(=v5cT8KftB9V&-$}I=*WZh4(AXw*FYsW2G};+C?6u18L+bkzU=dH z7=3=p$7D|oJDp4i9>^^e52l%lVFl(}R^b9z+(QaO0}(ZV1m~w(ioM@#EFltWoR z)v=Lf?-7fX279;T$qJLYAC?`1xu?_8-QatkU(};-?AG$%^cZ)>Dz8;sUV)Fyck6#5 zY&ZJ2MZDg@j#6lpo3{ioH7BgYR3yvu@)^m<^u0+@yioJ0;U&Xbk0{aF^R@4`ohoR1 zGRkc5p!7CNGB2Q&@3>vpDpXa(=T8~_dj0fCk81k}0paPeDDqxOahuXRWHru;+Hqji zre8}+NVPS&4Kd{iykMJ=7zN>@RzvY#IRZ~2ac~Y}t=}M5;=NVYb!{HPA3z4Z9o%paNw_SNIkU*mVFtYq<$EmlLr#V1*99 z34mF+_FL}iXM`AdJm5J@vGlJacY{faxT+|O6I;;@9W{b{6iZHPEt&Ot05{ zedqkCP6cDl(GOJ4ymL(zW{4UeHnC82Ea|UJkIp?<@_uz`EGRaK^XSIL2BDl; zKBg~f<#AySwVbjgQxVHEv8rhl2moQyw%n-Dth6j?AhT@OMkV|>Hm^_~l90(56c|ad zfGpcJ!7qnV-#`XKNe z42L^rSYhD-WA-DVAE6pT8|nN@|EgOGTL3R1lseG=-heyyo zXri>GJ=_EB98Kspnqv7N=UwGR1Eo%&a|ztct|G`yoPbjkz{yjn3WyhXPppBHLz0ow z$9cf*xPzyJG$iM$D!jSg^MawDJ0GEQ(zr9uksM>6-gT3s@H{L!S+J7{Ba{x-$a@px z8iqh_ki&!ks4y%Zasf`G2$_gn+!4+jVbHLw%7Z`*@+-Le?slO&t|N!I$FjPUDOSv8 zLo-ja5t_AttWqeE!#$T`RORUCCX-Jg$7WH>G8>~Lx$4w2O&3kNtj_G zBqN1luLNe8>2^V(n}IE3f1i|(6MBVYIQR@#$Y#$4x>5Y%du@} zCs6?K6t}n$MIMexwU7IR&h`M25-qVCA}wlhEr>nH)$hW{!nU^t;9J16xt=}DBc>9A zY&&=feDLKWP|6-OEk>z94?w(!`*=eETa3(dWO?Duvt=d#^oS}8# zO#%I;`jQ4XB`FQ2^s~;Pf->JAnpgD1bNt;);;)aEzea6SJY(E@wE+_EhDBC?JR6#ei_ORA6KM!vm>uiJP z$(b|{tRe`nP4`2nhNgb@iF~|yB8KO-ceg&{Bsmxq;XBMcL+4j_v;Bc1M|Pr3ZX`wT z%@Q#vY6cR)AT;IRU73mel0Vt{q=Oy~k{bXBVXo7M{=5XAQtm}m9cPC+u!>3d#9b;C zw0#B0B}g3h8ev#ar)Ph!Jp_dxj-p1%_X+Xz5X0(AUs1-MOv@sJHYRUP^bD*Dhzi^4 z85wx?&z!nH3rn}Xlp38zeb;C2e$+f-!ppuRGbV-`tzWba{np0>>2~T;pke*(t$EgG z7khYlMj0w>mcBkc)5qAXVI>pmRFBrztuLcAWS4l@nNW%wA$N$9&IC!rc6*pTU*|DkcoHs5+6~y>iBC}CCfLR&F#~K*v2j@ z6h9<~=?Bcm3pa26*mHE|H@e;jUGFM-$K}NuD|tpcR2`;x)0;0Ax~VDxtm^eO^+^vH z+e$h`q`Bo_E4M)uI!S~-C>9KVBBAF2rXVs!%>RD&rI?^KXvoSH>X{Qowe!7sR!RZXbMUY9g5O+W|%Aw)}2`u@;Tpci(A~bb@7VZ z13mUR(kmG|Cz8{S*tT`lX-Ee1EIyjH*W|f`^t~Eu?ON8B^LtQa$>&ikeT*|!%{zAL-d*kc zsCimTL@2}m)5Qui2!om36_{l>)!@wr z^i{cCMRZZJ{FR%Ip*|1(<`;*D6&VCCzf7p_;a%nzITg$T9<1)pRpl>@y2<{2Hh?$G z_woy-v&}q(lC@b_zJphOL%_%<4rqGXOMhQZn$a{^nBfVUzaQ9K0kNC^mmOHPa@y6T;*gf4b08O1q0P90=zN)IXrvsgAxl!Qi83!b_L9H%m~ zBCia}gdtI%g<(g76CA9x@k7vPrZEV6>Gr`qP6p?eGDCWn-BxtljTL;6~ifu?7pnT7Das#VI-nmr`WZ91)V^ zaf1s+`MCE8xKd8|G|cBx6Oy^cKEhGY+65|}(yNSRoyAc;gdtzb6{~7&cq*cNlCypz zGq%7On$$P1WeFO-J74nS8r)%WE@d!`icN_MIn$NrC;!bawC$Tyg~kwHI)Cof#s`u5 z{^xT%CXSR4!JiAt6nU4}U|Gk4>aBw533UD^h+s?)+v?d-fnFmGJimnCOT`^>In&pS z;OMI>^5qR-K}0=OKPZIK0gh!O3HSZ$^XzL%N(BmCVMl}fSOJuRbG$4FdtJuTZEmB- z6XOwi9Ey|-0|f$CR*^^&zJ_336-#$K5$bbOi11v#GhJJSwWxL!J(+uDEZ?ul z&I<4eXxh=fE7&ti=j?gnKVrj=#?8oAJ3M5SsjBc){SI7_IV|ul?}m5>i=m=d8YaiNPl& zPeB_62BATrSL6`MX1hkHSBehAGL1P0gpb9}tn8gLl#jp$N--&PfxXdw9=NQd3l!9X zl}5@usw3}uu_9#pJKaDRq(C#9O|7C9Ko`}cpfuyjiBogv!Os4)v(?}4QJ~4^8rINH z>^7P=*f1E>rTf@GX*@ZSa4$%$-R$!Xq&Kfw#IaSCyE_@l?3X+nI>aAqp_< zKOjGmuK~$K3#^Qs#Ws9{t>TtPo(|?#AtOp;=ms)Gw>wnVDfEsIFKZAc>#}G{G>P0R zIkd5Mz9{yY8)kvESWhiqArd-T2g+ltW3qi^G$C;Q&c1LJguj5#-4(Drc~ri66W4 z=l$qW)HQ4tT=0QF@x&;cQF3?2l@}sMzF;}X4w&Fjl88IxZ*r6B42p;O$&@T_T4+zf zyXS==(Uob1nlwa9)sT@`u4QUftG|e^PJeC}2}6Dmr+Xt2;1q_Gl}76fAO&FA4H^w~ zbnM=f+w4b7ceVShGa|oRiYQz##Y-cvVG;Fo^SACUJ!DGXdza(BK%5EuK`;?$^$>>Q zsX{E3gq{xDiY(U-ea|j4FE*Bdf65CTAN?lq!`IYN8^mf>b#HpmIIz1l9J+!U=ZVOkC zky6-XpWgT1`Pvo{Ql&UCFalVF!uuN$6Ix&k7Nf2TcZ(ox;aoHc*KHzhTq_LvnbBD; z<9-Q_qwT|3|SVVDEBFZx+)gSd0cp)LW3db2l<4dg89xA@|7&)HJ>XKp^?$#vtI zMg?=2Hb!|Qn~RMR=Xi^2d>wWRD~OHq?b3ron-9Y5D|((nQttQpr23WoYRO^+=? z{(2^DlhXxav#{Wbd~}}g?%s;zx*0vZg3n}*`ws&22JstV^)QDC4RVQ)6*=hqwguW1 zhZjaj=4%6fvnTZlLig!t{>G?CUGzR`+g5@8VPeg{i*)qofYYgITW6s>r!J>6kTHxZ z6omMJ<)-G-Nz_Dk z#Cxw=+O)ES)J!TPb2AQ{-!Xy=o?^h(lZJn~;+BXcOD-ZTK z2Qxs!n9*6R*E^3xbX{v?>+8=+LwPbHn6}xBLN9MhelB@a#-9d}EbRRQr4JI>>pvv% zys?IE>=2HiiQZ!UrYX&lUu))>jpL8OFKpMSc&V8`LY7Bsd7~WEP=g>@3 z)L(xtcVvDysIK$#fxV#fZ!!zb8C#U2o=%aL;21`v`{N zG)Oe-F?Nn&aA*Om8CIDIzChp0GaKZNferZ^bw&Mz=gGdj+ug_9rV(V1h1ztcP8pn`xGx@z~4J&7L#BdSh&dl0iBA#8Mz|E7Ozi z!#xi=6rMy1-SY%k0D{%)s2-lK_|;Rtv$Y~$PEnIR2`h^>eG@R61wTZ0_pxo9TRB@_ zCWmdQuS{>_ClfQEsjiPj_U(Fw0y{G#yH_Wx44h`Lj9aie*|H=~2MQ7C_#B=mw{q=9 zc1AA?fe!0Z8HaTyc+-si!}>^K{O$t1!+wS5?kA(mu8?IfwZ17`>AmR*CViN4bvFj0 z$sK^`G>K-BD`yJwbRG{u$z*+dNl1xypJ-m@nB~v!qdmTaak7bAQKz~VLzcGeNEFS| zYS-E}baL?~B7x++d?U6bLTZVwPF1H_F%ej~0T@FZ_b0q4XbySln-a1Fc~7^5Y1U|R z&uUEcEeQ33DIt!VqO}(Q8;i(l%}h`sYRx5tPfSQfK*Gb?1O&!Hh{qIM$;o6$^Ao#W<3uv;ZzyJPQqMf$xLO2F(AgmCl=AYcS3)4vJQma<9Vi#9` z!a5+gI2e<7-9J^-umrWVhD)W=AWq8o?unf3RTfNXC1@3Y}r7_LFHRPukP1{|~( zXUxL9=>q2AH#V#5FE{u6H;v0ibF&lXA#h3I7x0}LIFFjJ!cc8n%<(wayk{k?R~K`K zCBoITrg~cdhbQ%`(UBZW)6pZQBPvna0n@3(y0#^P*L+i(7Y5zDYO2X0A02-wJizq& zBU7Sv&TrSGVLVAy@UaK$$w1W$sx+-oU#_u=G;$}CJeyOewD0Z^F94Md7{$k9K*a|aO+t9Kvabgp%^RkTt4!BgT>FDePEOm2>JqR_Kd$5|%(v zz#)gImlGMtRp87%*kckx?$qTxNk2Ldw@7ocLO19o6*2>%>_a9T=(w|@|KKE?`o_VY zW$RNQr{h+XQ@3<*=c2k-pcI;KFkoO1{OPF%({|p;*5mFUvktzyA(J21W}uJ1_yK|ADuB7>)Yd> zxb9xZuoxEgGyA2$y4bz$m}lDQRBPS-w9cxSrsy>)t2UY>_x!xA<~hw*apcjW z&x)!qa=lVSmQ+?Bd1L0Wy^xAHK^qN=+u~GY>T1*Ky^wRz?65(S59q4us`|l{4sP2S z!1M-udgQ8#!(0A;o0Wqsy0#JkhJ#$GAVBS&=4sKfu^~KtkShUM3^`5z+ZEN2Yd+&j zvNG|96Lhd43|31Esf!J&#*Zvl=X!b(L=aU;6GiI*Pjpq}{vgnf7O{vUjp{72vjsS9 zE)&-Pjww1ZTo#|WR;(%9)l&FhVUdhZj4n}+mRraMOT20xSKqa1qYsuIQs)$EDvGSJ z@Bfp_y@}UqD(@j+xVE!FtXc6-L4}d5z8MS96bY}jq#*D#q6A=6M0m*;$oJcUmlx;s zz23NV1>m?%F23s#Y<#v)GXtwpOHC;xML$Md_J3uhPYS~+f2 z(aM>dXh2H>H{L7W&iD3H7QYelID5`^ntpPdo%m0Pwqo9UGtdo* zm%9YQJnFSU5WTYUnqKtACYJ9`_=G|az>Wg(W;2vj=$?O~IO_n9Fz{yNqYb}~`G!5S z0}L8)KHE<4*d>ILrEnv^qjpHT5;hRf>@i*X>vIJ7s@qS5udN-GCqL*#*97k ziM`d_F`VN&)bQM>RDR(ha_XU7H)Hs~I7g_|oW|xuD_0vi;2DillUyAVR_XwZYOzft ziK?f>bk#5iXq7o3u{3$$$GWb%-yWS!*IdmnC|uBBoBAK??!D^DOUEkvOf~DDmr7;s z!V!XFs8oydN>1&hvi*Zx(plQ0Coa*5dwWIVgdAgG){X8t8X6X0&Cv$RU(ipd&9aopu ze}^YjZE-MH*m_}BQ(&VHG5-6acTaVYh4Z7DPUrnT$Qb304q^o16VkgehZKF@usLVw z-QmZR;P+B26!@6UqgV|o3Y#B;P$ioxlj!{7y#Em@2`|Tk`XnD8)enPhWDw}NBK5tm zMG`)=y`A;+Av*ioYdzh0-H#MbdQ6g1M4LO<2p+NXL3`v1N%_aW)eqmum;Jdhg>Zv; z3+;fd7kDW9`hbvZ+Egk99Fk)c;wCv1_F`(l6r@MrOBP}l(_^4Vwu_Al)1*M+V8^39 zwe!rDKyK2)EQOW>4@}HqFv;A{WLoVm})i-0IF*+6)9wh{*#;186NB z>;PUHCPo;l)$z#HllX~~>HTmjy%W>kX5_ZlVJIPxkYks^&45$!qh>ZY9t7l&vY`kR7ooFGj);?`pc0cQ?Bkc*G?=sKQ5idL>NsA7+O) z4Idi4`SU2=fhqf^=q2&nwx3^Mef;3c(7=~fV_tmGBW6#0+@rTIPG9=#jo@31WgaY# zA#Z-YsBls0M|a=;YD&z>*}9zE;Jp3&nOz}qf{8oF959jOq)AgEe+bD#h{V|rT^GU< z{*n?k&FFWuC}#4S%k*Q~Hv11rqV$(<86u>YW1yh1&UJ4D33{g_Md)fg#<~$p zfZF)LWQce^ujMbEI&ra&u+&t0qBeUIdG^%YUc?Cqcs5$;p&|-jF@2S89bPlkGjJpO zw7QZDcMygKVMs|ovNvbP*>j4#2PgjOs#DFr88hJ-cOqD+gi6RewDzy=6aDME-%#Hn zzxnrCVx-5&iHv#qj1t`mXWy)$wzKzI3*zGnUONuc8s8m(q?Y&nbvygfiKGWXShIX> z=6U-~oSK5LZ_d`=k~g*emQ^cf9`PLbMxrqQ3ipx z`$%*To50ys(_NdFz3B(){>MV0aH^r)@Ua`bF6o}WHcfZZ-1<{D?$`?4JjO*uMJX!| z8kajBKKdcMukCEj@bpcHO-R45%|3m)?YG~Kt|7^ptIcCn22Y=c!s@;1 z!FcEO?7r&`EBtsP8RD5LLP)udlN_EouxGfdxb^{=o%=B0)Oo(F+>bKw`GHdFw>ft= zo>?=`@#Jo!pp5qUDC(K;3OL$AA^zp>?-Vt$dO-**>{b8k2u!TiYX{k9s0`y1r`hm{;aZ8S3lYk}Xi?w-+v#%SQ$W z2Qt}93-1J6zJ7KQnKA94=8A0TQt#LQ>L;z)gnPLnZ&MyO{T3#FD20wl*YhObeJ5F) zl>E#K%3mPu4dH2nF)LzHG(_OV5X9B{eR|6aMSYr6o&MI8!{&h2wCZ({Y> zc&=R^qf`d;KKflXj<$gJk%19wsMr{j0-E{J>LK~|5`6)$5PERQhC{k~*3 zYJ2r4s$vzxzz`6G;#@ywcY@w(8e$K-5kdab``PTibd(slFUd&<6x+|SN=1xUz|QI0*!m3aSs8b8QGE)rXxf8-DvOPzYWd*u|A)N%&V z8%Px6ycE@eOG1))6B%6FAuezU>r!&Tud zsB5_d2Y=bgosKirR&h5z3W-=Q2YV&Hx$7Gc=aA??4k1Uv^(gJw2Oz`DtrQ?|5oWC4 z@Y%5r;GT(FBBXFvaOH3b?g~4(1oy5aTmqlNwZ3rOc?~kSYZ}HO!CgV=T04wGifeKk zvFE^9uG>*^g4%~%os&o?AV0d!Q^w`ESgnJR;=Vk~;bSR$G8QyHgy9hq5+tT@>qM>* zE4dZR0zeJDLvceE?)t9xgB2!0977q`M%}qD9EiJ)lHvt*81Y0?U0JB3SDO+c zq3`7CbL|DKgNO}Af(ruSf;E@x6IvK)H7M0y-w7H6uLhGHC}uCU}N-HX(Z z;MimZ=N97~44n{Tp{Ok1ic|MBC592ihqZxZ;kE@6iU!-+fsgJf5t=1=lfm;;0ndCF z;&S|%6(f0RiqMw)f{5IuKO}Ez|7t&XN7d%sF3jMS1 z_Rw#m#*FtJd_f)+InaS$lfT? zJ7e{a9wiP{fa)}Yr6V>i5Xw$^>ZxbNRfvxg7HhjJt_wSh0F-AtB6cp?396CC4{hgp z#qm;58h8@?aXU-q4SaV$EHKK!6ep9uFE``USyk7(i{^&-hWg;^PzMfvdTem8HfHN> zRiE|M9>RXUo~;jnF*z-*(rqbWAmrh~y#fXJ-}^vPGcObXhA`ndCv#ZOEGRo!e%#D+ zml4!j>RV$6tIwqc*8JtqgHeIv*ck-9KqfdE_uIy< zSMm!zK|wLk{wb_8IR_3)JHrGbP~%|c7Um%)r%^K*%G^1RD~z}i9Zc5Wm4}5tGcKdb zbi~x9s?9l?_v@kdTwM>v|8D%!End=P$M$u!ez63g^%9X$GU@SDyJ%yHR2V2N{wi(X zN83M=7)4^EQ7pct>s_P)(_-+HdpGudQEIWBv;|rBee@os-6FibbyeZIpt~ygG!#}h z6x=J=c+y5S7!{0V&!vAo8Cm?sXM1e<;#pOo_9=+qpty>CJ5r|!^0tTMpsmaIDj0xw zd2kt<%b&DD6nZAwkw4;jxIH;PHyXV|Z%4D^-)QnLN=l$F<`)QW&&~tMkH2{T>?i(z zP|^#+x#dE5Yc|VsKUwqROKXxH4~;u2mT5!oO}ye)5V{$3GDY^7V?P)pG~4gCOiPN} zGHXUe=orKp&CYBg>r_ztft@5oz2*6P(>~n2hB0W!PXd!x%7SG%KV~Pa47JMgl;FJ} z$CIF0rDt5>?`zT5!XvUcw{mP)qH-HZHzkN5YTquFNxy1I zg-7(?iq$3&BB3X?0t+oA;RKCSB)E=2WP12`CrZ|+Dp!%}qzmxpbe#}BaAZPUiHLL5 zjy^~(+i($goBH=vIBjh>NLNa5#bwu2c+S7K5@*t&Q{Vf@LIp+XR?bTT%P(_;!Eo{(RNaw)R~ zWI#F{I`27PR~Ud(ChMp$Fa%*N$v4WGC3ERJ3nC+DLbA4FHPTFB>~Ks`1wIa2lIkIQ zXvzV(hjd&HEzbM?7#&55UXq>ZOd}5p_IGwxS^jx*GeGi_mhOsp_vyR$MQy4Y6Ua4G zq(7FfCPaa~X0l%gWyxK###EZRH2RI0@E7+iB4?0U*R^k5`Yzsz@T;Zkf+oQ$_C?aq z^v+(>-s^~IXR*F+**CjrRRGk}3s+aKPUoU~kcc3fZUR-q!nnQFt6_@6W&s3VnzfXS z6kDfVLdg1rR&8ces`dg}BAK9W+9M)YxEclGtKUf7m%1Y&s|81;imq4e$|O?->+|JI zv=uGFQur&WZ6)8?np^?YXHubaMqS6ecpLwAo*9N6U~5P>{9Gd!><`~($b z9g);j$cWB13vxWVXUk~>A5fujk495VF}k(E5`#?b*$pwk)4*o2H(Jh)lRglqoT0lr?#?)PWR z-N-`)jz_2gwsZyK2HzQ&Boxu&oKDzpQuhz@Gt3ZC7+%v&ROJ`KQAgMULK8y z5w!AHS`gA8$PJU{M4Ut9_LO|Z-~!>J&%>+#A5rfD*Tj{+k0*pUh{~W4qg}{gFI&Y6 zx|K>55)>(2D1|@{Bbp0rORKh3Qb8kzT#PZ+wxYX5Yrj@OrNtoPR#{yukcg4pS}PPH z-kC^S5mW{R86nC1-(h!u|9n0IPUdpvocEmbUZ1CIC~p!8u8CuxJa)(TI)sY{3o?HA zx_X=VtmkKN-xh3tasNLb%{2hmz{z8q%g4ZRM8!v2ieNRFo=yV%)&KhxMQl)9Y12kz zi&1&^3X~EX36W>?e!))*QeI1W4KSo4iWRSMXGcc9)}p;Mb{$8}gCaIWz<;4WKLt4pA(B+EpF6Sme=92Y-Bg5DuKD`?y|MpcsEFl` z0Z<7#_AQ{vloxl5{eSF-9IdU&se)?zVlH!NjE3lQWQUUF|E|Q)^jx%Ge(a`5jOuJt zz9vOme^?^&Gz4(=joI9oGckUFB+1*>9Zv>>VN8IB+(Uj61d%BF@4QUW8C)-#NmC%YJwd zT_9%iz*9k(H6>tOb+P;A<)p1WX5xXJW6YbS7D8sPzw?kTEeFju1t?7XITb|C&Q0wN z>}6Tg*WGCa`(KHgF=ZwdT;vp?MMHDh8&7|Rh4zi#3*SpUY0jyzM5nqc(GAb@#+$h< zo~P5>|8G{BGTC||f7-io%^_t=n}7548^P0y57?=piFM zcL~#K+ZR0#Y&Fv}Bd;bk66_}9#6-qZvnb5yr(fVvOSnoH&U%+&Cclvx<|U4CB?!0_ zlE6Z)Rt*N59^!rivxb8Y_KL*8vS!HO;^pPRUu-%jN7$5Ue2#g8V)MXEf`@J>xjSgNQ z9GDCxP@K^Fp^b17%oI2XE#Zo(q8yx68T!AY821%O?|*N=T?GfYLM84pcrKJn{qF?u zmU&0!2ixQj!m?squ6{{Px<2*x&@M%41Tjf2N0zmT-wToYI)2VYze&N zLql8fYl{e}R>;ire5O2SLpdd&DPi2UBQ;!Dz0vB35 zWqf(-Lli+Z`OkpI0gmuYU96Q0I>{2@ndN*g^Wh~E8!4#xuEb<~M0^0rOYjc!DYlfy z-|jm@@OD6UsIfjN_Ngp@ceYEGdDPEY=y0nwXaT@t z!Y0-%xaZUmAwlu<(_yoakQzfxfBEVhCcB6@puyk zo{~hyPrT3DXw*0dy z%5k@IQfRBU4;sbzWVA^Jpfo1hug>R9rO7Z}piEYhX#iM{0b`7I{h0g{tY94FfR_w< zHY}ccG6&LN=HD|KEUOJVUciZ~!jG=8BQQ;xpsVR_=&Oh;T_M?yBW$bSt=1-AFv|U5 z@{H5BP0Xs0t|?)Dp&>8-6#!@tOZeLG_NVJ1-!#YSit_X&%#L+0Rya!TWGUS1ec&T9vT(N+V=I5+-O(>X9CG$az+1f| zT++p%KZQp4&}^Wo5F~OvkI}%k6NtUW+9#}N)fAg7_23a<5h zDU*g8azUB=(}am=EGUzWFCH6|v${@?`pMZT`n5XtBH{dFtP zz$h@Fayhy|-o`bkS)TBr4%A@>&7OK~&P5d~G@V@BGz?Bf7;}i&2C}~UQ9Q4=j0om2 z8dbG3?{U+?h&iZk|3u`1GA14rxp@723GIMgF3z!(B_#6`9ZxlkHZ0|vA-a^}qliYo zUl38qqdhiQm1$d(aa0D>ckCA&l;vAi)Q4pfz@x9GgTR_FkWoWh>4>3Wq=)ga_x*8Tq>?Xlp z$K(~}&misBB%^T_mcLefUeR0K^IOX9{AFg8Flbx*N7v%(rmEfX-Q<=lDd_0T1(nmH zFCX7k)7Rf%4=-O~&W1ljF7 zK~DRR=ZeD>?%9DI>vlm3t!QS#u7Tdzv<2wXphwS`+vg{uhK=qY|I9yptu}D=iD|vh zRH!2sDL-B}D+`(DgZXvt=gI3D$j+5w{_>xp^7~6Z8ty_B=b}Fxz7st&RrKv&KP*2R zm%6emp(ai}9=W?H6_*1NH%ePP8DEZk)D^8$3R6$^N0 z*;|%n=3T51z`6XOIM4Oc(jn)94`3?yW78-RAyul- zg8O5OM+HyW*2Q9h6)YLWrRLF z!vh`QTvyDZs%U$s|1?>uT5`Vn@2OTrC4g0~ICkvQ&wkuF@7&@M4-R(2pRPNae||~o zuUt%F^SFfUW^7lml;*=UPN1^{i^1*Jf)f%BmGu}2k(5lsH1ir(a2Q!5won7He_q5tHRHdO}`l!3>m(1rSwTZBG`G-S! zj&`nI-trf za9LAq08#F7HsdnrDe5^Z;DK%&f__1pw6{0Y#QOrxEySj0F zn$9=`A)HJ17<^UV z9)Cwu465y8PMKWo?H|q)KzPibXIk3#MPzPtH0tZmKqsp@cR>#%`q%|L(`EM15=AB5 zX?!U#P!q4x7gNzP0lcf`U*B7RY-%HDhQ1Cz9;^>`N&?QEMZ|!%BK6! z-$Seo3_SMn@G{{&4Vx5bUgbu}TK)17qp_;|+qLU6V5Q<>ye4~p7n*DC@Ed3G&2zS( zoLSKY^@c}w(Ze;HI$`1SvY>{Y_W2T0`D?p;*@@;F$RnQ-ee9;86xr^b_0_^ToSDGu zXk_bCqwbBeukb6Yf#X;H;;g%dEjdu~cjgSV=NWg7z0-ImiElTuv-o=suPR7EOJC_T ztVgeqztw{0f#>5alc#-MwW&c5{Kn+O>a%ML-16Or{dZQizqiJHCjs6arX`=ZdAO@D zfd7~^F6Vt}Kd})BUp~$@h|BFOhi*a?5@sdjGu;~PIuTki!fpymtp44u0_vVE?5dO_ z->z&J{$Ce%xY>S;chASB@Ge&VSVM|JkB<)D*)1aPG(l@<_7IPk$}+5zw~UJ)=FM-} z&@w3~8q!0Z$(YfrYAS0a^G*6^o%Uaj-)i@B z^}{rveeeo_^>xgu3<~qpgCH+bJ)w;0`gc$Wa)_*9p0xXZf#EJpB)5-tz=TXfoOBTQ2_eXFYXyoyNVz^}Z zLI{inOc}T2V1|-+yixOmeQ!=deW6 zAnz1+o7Rm!_7$!enTU#d(gQwVbM={~k~OeQ`<6f_|7WNk8Gi`n0eMSMC_s;vyz=Q+ zHw^VP@8`JPrEm(^06fztXV`{i+>@3jR_{EqCgl~yjS;tfRZh;xGmsg2Y-SCOG)>^Q zf{n$iyztpU_0+Fc_jUdgwS0P`2HF9_1*tEqfbWlIg0)EaR(18Mnd`?vJ6)uy`0c_aW#%ysC!LGZXlbHc-X0R-c3P!=0x~RJE&6)z_Pvpf#g# zo8@cIuzkxCZ?c;4Z&ljA&mrY6)~`FWE?fN7tzkf78ieGB#Oj9O{+&Fy&6|mpP`0tQ zd}qfx$T}-OdTmPzXIg4_iHgRNu4w+f5q36T1dc#x>A%jY``jI0tvmyIor9Hy^NI$a zkJ^ha{xX2nq3mwhPz_k)-V219s zV6Vr>AakbFZ{d#x^$U5h=1QUfs(PQ>Dp}kR;)hf!XFmYW(0*{*1jxAbfwO+rB8+p) zkUn|hurw1!ul($TO&~8co545Pw?o0K+0xP^i%WFWT*ipCbPu_ntbOki2c{6@Wg+3| zlHVAUmDtD56=vnXTLm^%k3a^%R!&ch?7#DSxx17-5mW(=C1Kor>PUU+osTt-G850Snzs{o{J87HvA?9&uDWxsDrHw) zC%1>NGkA`)GUJ)$rn`QFHFM_qwKwFEal6!H1DSnv)6iIBX7Lj3x7jm)4zdFZN}^W5 zG3x&7+{XGrj|D4jc%ADR7)kfwsPW~%9V}ZOwY=&AF*RCQTjEAFpY6+G55jBvG8f2V~zFK9ee3VPsQxD301!mIJB8T2<|b=+pb(fbuiQ{$D5$)pvI7 z3eWWUYD2TC??JL5eBAXX(6{!6jX|(vHO&ahEGX@&&5EjL8>TF)tUhtpZvTAtDpg%% zcKNfFuW%%5f8xzRwZjdmGdf1^CQnR0w)4P=9JGHW2yk-lwN**bn5GFcqQcG$-_7D9 zW0z<__}}At51{gIKiRNF^1+wIOJ0Ffx?YQlLPK{u{|xOlqL-n@y8J*6-~m2p|4#JT zhM`#;Y;N5)e(;$Xf3sjaV4jB1rmrv92vN-0oc^AwAMK4f<9Tt+^8p9c7P9`CE9m?8 zvEa|+&eNVtJ7;MYF;Gu<2ml{UBCw1sn70vv5B8^Z<>Pa-fU7 zhAe>rF^%342$Xc!i3MU^&l(Ic|80Z}60DuI!J!rY--w|3%wTUCE@Fltx#~LA{t^~F z|H*ImQ__KEu|^fnqx#56yTQdUz)lemeuaGcwAc1Ed?gB+F z?@Ut{n$b~`k^c5^n(UQUL7VHlp)mho5pkbpZVAz)RNPct5RYsR|bel&xF6&sd>j-R>bnO}u!toyoGIr@$C@wM?wc=UBewxue!MQWE-@48AUt9ZFv^Bc6 zcGLRuo@K^qp^R*a@Br00C0#vZhu@e9iu%aDjeOVTL)pOJpebfY;5H7}wK?fxV-~{x z@jS0mAy?HJ(nP%LBU?O@OsZ3`b?;TI!+zLpKtt6E)(?#{{Nq=|i^& z5VVY&;AV|%=`_9xJcy#q(B3}4-Z>)fWVcws6Q~IYNL2dXoW1j}?#3pC)qV!>d@6xC z(5rDzk?bD1d+?8B_2l_gUG>rYxwTC|WN%`+G&4gh9`@OHpkwagHxK1(ygqtnC%3=H z1jF`uizS23)_1K-$*jDI+>c|E0%rP+w@sSixf?c`qkeRxfP%xKqU=M^!eA1<3p757E0cKt#54=Oq-g}dLClTOkVE-{0H3Z_Bz}&}{^PV!AdZ_zVvA*wkyePk!|NT>8MBa_A z(SBq5Zu^}NqeGHY6=!#5AwJ=y(EybV_&2-nHmNEOuf3)@RFzrS0v2Ydp0bqvGJzO8 zPWIW~hkZUc$i3-f1s{)RG=O|?kRIyMCP;DxLU5D0Nv=$v;o08Qocm zHJ$2NA!s!e-J_iMBkz$i+G-dK45S*=t{F#vT)Rb;o&2?`@7wAu5p9MXnph^Etet)0 zX7;3jpj%t!ipC$i_s>nW!L(CTAC2U%96zop0x_*!RjjbPbAZlyv?T2$AA9tyQIVX} zUfcZ^lINWoDTvh;-Clg~7%CnJm=e0-5fbj2BdI%tXN!v6>hhh69e`SdCNnyzRC-{J zdgt=Yo@cMW2#cNWOnZM{J5(-wvJ8x$?IA%sPc+=A0oBN$4-cBE4xQNdV3;+QWZG}q z9lT8bpLlV4(LpX0#U6YA`{hxvyN|O8oXy?6mrbOdWsJ z$C4QnVt_kxi0xkxl{tU@Fgt1dTduk~vMy(@-)8_NjCb-biTHt)H%HkIv(Vr0G`u#c zW*E#dxLH$ls&J?M2mhkU6)#B7s9%AcgVEt=xMqlL7yi{`hXl_BJcWTgv^Ti6<6E`{ zsx1;(b{U_aRSZah{KOku9=!e{BoyI%Y0Pi38*>%m-iuyudj77*UTHjT4n4viG;Qf!Yr_|#Ab8j!uPcMb1{CN?)6GLM@{ zKk{AS2R~QK&b?Kjd;_8Y1ZeY&?^O7-KRyWwd9S#xouk4=JQtHf5*fI#bT{v9Ck_dRvJ2C=hElA%b?q z7zPw=1?i;?&jEvo3wL<2tFxh2RjtWF-Jv&Uv!x&Q30Ms_RkTGU$q?bD8F# zFZ+G5$rY~{Rdd~tp0<8H=*&>J)Ua&Ej@{3O$>dCXLvcC?o4Z8QVB^NIcEX;h-Mvj3 zk$LZ9RXvc@xX(4*kwn2T*3HX|+WkG?3r4MRZ$h(SmJD6n!fjjLuEoojhT8o`G~=-Q zKIGZJRH#|s0Ag{Ht^f1Ppvs#pnY`2uO1?c6W}tYz*9J;oZ)3`I?++YT4i ze^}Q!E(&Hsdf2QW`A|P;4X!Ow)dQ%F``oi@A0~1a&6V%ipMD?`#ZO{n1R@Q;Ej2ccYUmBDGPpX{%O=oW3Nkw`4i94!4 zL_r=gnOz+^(FXDO>Bqa<>vz44a_Udq-wcCG``YEO7Khj zq3KG0abaOa5c|B`{P&XLkAJo=jraU^_x={>zd@tYx-2+?-IOgnO$~IG?E=!Ucl)2G z!?Q+YLji?6A#1F=xZ?q4_!X7^EqnH%O%3CMz=kaQ^Q3Wk$~eLt}d3cz!h7XTRsxqS}|1EZ$D&>CN{! z>*gtG{_Ek6kxjEj$2J0@DAMjNPbaqgCI*sNwlizbTPGhHX$$t{)y`kqEFwlb)O%|- zyxQHS69Frub`P=c3ME|$Yb!vy)I6>qnwQAS^rM9nXSJT{cTfK7wO&>I5fB>?4rwtg zUHuwlo)T{Njf$Y$|AE_{>du;5zp8;77_R|MP92YYchR1mK%P{i$nKDL+BdC&SEKx7 z^5H28_b`bR_dtuQSGbV7cjWyTKCfc-qR#)3=RIvcr{nG*1K(61zzMi}SFUe>rM$fW^~_qT7OdVAl;ozQxn4~Z^p<8FAE z`>Gx$L~PBikMBS;))~>B!$Bh7dUD50KiE}cd@eP^8*9O=fmZK%YpbHaf4aT;RBq?- zXaEEHy7N{&ET90^c=RoEo39fc-Ff0#EVrYezGpe$axy*EpcxC79e|#?_@@)O8ILmE zE7DJOCftRu8eu|4FBP$k=;d7{D}f^mq08}xTjwD?1XRZ4nd9E@ZjpGRPq^z3{1Ufo zLwx70^PpJiN0ZB~ff4;%BC9;wVt4#v1=42U-`oX_FY$|P%Ph@TJ!5%TFHsP$q_A4;GU|I~*_ym;*jdgU6N6Kk~ztp#UjRs*yOLTsiBy#0C&I z7H}tm&NDS6a$tnSP(R0o=eUheviZD|2C}H~kJMo!aM>LPWG#dp_`Us!d*2XjC|8Za z>eVv<%CPK>X^phF^rL8$U32&22Ek!u;+$*-n{66wvzU)UT{Y- zPc7JNVfCyP>6=BL?3PY+Q)`lufp~^l1(bZXHxy0 zAno#Ecg^0f?B{z)80Cul-;qdE;aJ~=-qFg}7SFAjlkV>A?C0@$Phv(oKCeh@=qKT# z2(or9%%Yl2!|;t#_W0h^!=dWYElMPM_nNZr?B}1=w2XoeDsJ>ifhzD7-D9Xfv@6`V z(KmaxD~6bqC|-xx{$2W{X{~)*$homd?oPj)g<=~F4Gx|u=g>y8yNZ)6_Gh^e}Dvh zUiTqYgr6sndC|2!^FQf3qp61)gn+9Ap$Dp3qZ~^N@IQ|p-SeVII7zP?p_^ScDLwg| zhh*=n1Nap^8GjQ>sQEol*^9U?v3@Yah!oYwI=cozL5QOJJ3V2cj#Ti1sucfHtZ$$N zZ_V&}TAECOQD%azsZ*Hk>&|F^rlo=aBFVF7RUI*g>P(aS#F=x^May68(L4**Q+ZF_ znCj%=b!Ubf=7HU@Wh1&S56<-Tbph>7bq3x1&3o$0d zpUoVx;PE16AjyL1d$-X1aXkiaguYOI2g4zs7{zpC6*5B(tfyMTc%CMTWF|t#Y@`J- z)mw+exXyg&9@dnF0o4>UVBRN^`goGK$2su@01+X@y?JH}kXz~L7s+(m*$tRm+fznN z#JWlGv@tG|EPUW@2Kxz+OPu*8Tw*jjDEC%OYGvulRe3@^^J;0HleTEe0@l&7UJ5aP ztvQW_)AVS!AS5ng6lHs?8|5*&wt5P0G;MG0?=$o7U64uRm2|%9H#3%z(Qr@f5E#HT zGD&F9eV0W9x%7~!{Y%Ire#km;(=x&F@6~h*vQF(3WyGWU(?_7PW-4x^gd+~D-<3jH zH03F=kT&mVY37%G5UDHdp)4{|q|`x?FRFjZOQ!&zE07$|5BE|UQYiMK2Kp~A==J(( zE2v7Ak4+RCn9V5PqDdnbZzTwfc#rSBm(gRw-H>mAlyrMHfR45#;Y41jA2>`LSZy;w zh{(ZTBsA4dH%E&iK$mrjj~_nAxa|rN875^4!NrIy`20x7X;W9@{?iyr#-!5tcx7^X zyCCH32?M<~=K}6O|HsoNTn5l``5z26gV(+@fp)xm&nA=3s<0d?!zNqQF$KYZ-KBJ^G+PUmSRJ~Gwx zhRKe@LaV_D9p6viFHZdOo(ISExtj|u__)U{rA~pEp@E_rxXtv6lRde(ug5Hqb`lH^ z>*+q@!6M=eI?x;B`1&}7lNi8=iuuMK=nu$(3{xRI;rmSj1?^nlA&}@o4c^Kp)INMF zc(pKnwbNYY#^dthof9_{)4SF6n6wa+=z(WVfJxzW zQG?=#X(114vMedm9%qbJAc?!#b$uD>5)FH7e2Fxkp(gE`39|!}sAbpl$boJrF+a+9 zO(4;mF5km7=kqE7)U_Vd7rG})=rulvfS_N2cUhE7-u@mqjYW*dB9N6tLM7T3GvUwt z0|R9X0zEA>r0E=(5z-SWJ%vF2FVRN=8mMh2 zLFg1E18=&sXg=YeATl_=yNdNv`!VK(&QggkuEjUdsQyN#M^?sVdDR1Mr2 zZ7V6caS;w9wVb)EN@Jc8hDsUXQMkFhA)b!Y7ib~y0xp)omK^_q8 zqCJ~_6-d^iXTK(iL|1cBoBSKN4F&M8>CYV&R0W_L&Du9f#MM?PMH1>YL)#=h^)Azl zr(4xI+1kAbijzEn8b+k{Og{LD_^N#R@7mbhW+=6<@!N#6!R7o-yQBl$& zG(k;avbHd({DIR(iquMAdu-00TN8aE%D`-UAhgYv94yIACbj8j%*5MT9aZ2-DX&5w zrEErh4m?7yqZXlT5mWfP2q^ai#=IvUSB*kcQc>3OhOz+FZzXg+1Mh)GcaUm<+7VIb zAP<=T&bGvgQsVEeDdr%x+!GlO^)8u{tz2y@RyL#b-xNb8aZb)Vqz**@18fV|l?a82 zm7a1aS}78(*`EVrSFb3Wpr`U(nDnC@rc%7t2DG(vN~w#m=15e!)lTe?Eu(L|*Wu{K zWI3pa@<5dRo59Q;i?b|4H&<)MN_Ec_=+xT+S>e6sTZdZ6hFA7zVd8{3kLv$GLHRXX@9XUa}SZ@Dn9Cf!(1 z7H8+Qr6G}yqA1J4I0>UG{gi-`LKv9TG?W(Wnb0C2(7QtyTrSa#BJgW3KpQ(iVG@;S z=QCt!^_*$*)TnOP1XP*QnN;@uk>d`*6`KqtJ#aLSpoAhtky2aW?)a=^ruFbHbxfqv zEbcv0*D-}`1G%mw+e4OASk4{RAdx+KjH@&GV@R|DPR8_@6#@wqlD1jbdfXsEKz0f( zQfRe9t$_v_#aE{2tiZ4qze3#ko`@{32`A#UpW9P#+td@1&B>(8D!zhZp*#tcgaCts z@H+qmnYad(QqxacFP6N$B2UJ+W?$#a z7?ePX)C-8)?;%fE#;FkN3yh0U3IVuPQ-GcQPA7Q z-g-UF+=g`gZVsu^x`bZ>#7&ugrx-V{^mAh3iUuBlexO} zGeWT=I_0PKhmf6NuxK`9bWh7r2t zMoLud2_v;YArJk<$Mri1Z=Q;YB1){P9#NeFkM!mV!3UzJc6b55wG!9M7s00B&0KPt z0tvUtK>Qe?Mh82Jg)C2xcSjGkZp99IaDxfg(_*P7?9A4T+kZ{hx#qg%VW2Ea88go8 zkilL*usoqnq^6VA1!=K5k7L*gA~e!FFmJzvBT^iNNRUrwtZrCo5y46q^!l- z*~CK+56bmq439VudY}SIEs3`$sdMLgMC$`3OplS`;}0>&;nh06OK>5bCtWG38)u=f z!tjDs!t}iBF_)2;`2CcI)8FfZg*pk#$9G{8uP67U@K8qNJ33{3*5$uo5{jvt6cG{c zrBBUUh8g1HVFJVMv}9g5MX@FGBfw-MV@1ID_qx`@C?MB2T?f9M?#vamr`vsOo5-sj zx^U5xBrcAvEi^S7-LL>PTe`jvmXr+Kqs+}^Bw8|?=ISQ!cn9{KODx{`#NC`^!!$Yd zgKM4q5I-&j)vwQ%5h9`Ofcc6`V{1D)oP4PlG&LSnR>~9;n8KLBZ4ySlZ*Ex!ygO98 zn*q1Ys1U8zKd0%_^hJ?6eZbV>!G|3d@J<-Z_W()CMN5i1tZwiX;7YI&b%6wJJ~SLE zKHF35vSt4*EWtew(B&;SflGSKWf~!&gCx6bh;gJpiUx($)`?4$(~dtNlf;r7&U*u& z^HbE+ry2?;bkp>VI}7&B$c*!fbX{`YHnD!Slm?rOZ(uxgDNNIm4mgxbZ7n5`sw1GI zEVlA0kS(P2pmsUZqGFIj6cojydp;3T)SwkJl(>`Y=HS(SezGT2$M01QrekuBRoffOLV&D zkWpO@-~>IOsLM;J4aKP<9qjCy*n}dg%>y{d4w7z8@mO##l}~qTE#&9GLJ?-5lB7=D z50ez4h7qv9YaJ~uWA zFIHsZD?C!~Nd*m>w89dp>nY!7mBim&alJc9N0Cfx7(;#FPC_CHJ>8!t)+^I*cL?;9 z7>pIh14^^jRL1P%c!#fx8fh#J3euTSJuI9Nk{2LJ2JaDQlwgDk;%QjoCv&?k69>kU zN)k`CBPZT((o;4ACGtXZmGO*;P-9YBOFPA#6LeI}W-422mg%SsaD^HG+srcXsU;qv zQ+!ksP(**+?KR9ON$%()f_)ao`)SC$`G(p69#l{5)r=f z67GT2b;LNZCl=tgkWO0+io{@MEUg92v+N)Y;WRy+vM7z)a}zu%X)dceSwdHKIWU79 z-Z;g*Ed%g0a->WmWC9!M$|1@k7Q+g;6N>~1;P#2`hlhkd-x?n4*RMX9KwN`x(D)J!9R4*bH7QX(R`WyN@a-;hfMP+$< zB!}HkIgQ}X`E`Q#0)B}v^D30Iyx0SH4Cz9(UJHrzFj)t{tw6ex!D`ybJto#8^gHmY zu-7UUU3W@<6{$J8d619nun@g|2ymo6Kq{TblA+;v#6AEdYngK6;gO?;*_ysclV$}DDewq6#wcn@NGme*U=3H8gQbv zv?8IJ#{CZKJ?H&X7SY#VkN||{5lA!=1{R&0Vc>~l@)O+KzGk#;h5Pgrm@xwm{2if; z$!`Z^DU47a#o_G`@IL^U!c{A-XBILPAO)bJ)%QH@umQkJi*6wBiWp8i0k)w`ELBc6 ztX9Q~$n%OpD%&lHcnE%4kEkkSM2mE7+1X&JrPBZb!4m{!WNhUN{$HSs!gT7xmI>>TL61I;o5J z+K!IcB9Ean+{Rl!ApvI0;Y~=im_AJQ0{Ajgaq(>t;Aiw;UtC!AyEcOU^pLI`O$T%C zB1Y=!L0YYU{7kwLMbK3wN=p+#l8-w&caK_LYMNvs?eb(I7_KhOo zhq&~TVK6!tXstm(=YT$vBU7Nca!gYl;&p+Q{RJ5ti$p7b(~4pdawC^e=HY-JRh1Gq z#73$b0b@@{j9s_kl=5uyEO2rXq60IRVW&e@|6ZDZ0<0 zwZNzL&xm&H+t?;5pQHDX?o1n)#9*yKNOg)zSFx{HD=LrfeSl)+z}5}OED-C-PD9rz zYoA;!l01BX>Mw$9)*R1D2M~DStGyQ_TL4r3g~!_3-b|RWvFXSvIZ&blt^?bBktBAP zzNlu7%j!l;9y%--PQY5}=xt6RMUu@rcZZ@J%`Kxa?4Tq;Pw~6A6SDe+3p`aBktm`B zfHQPDT|og3{d%@>a9Q?_2|rwmMQvKqW)HMr?oewg#OM4T(MB`21-dS|82y7AL4*bs z@~ybhm8PtG;o%K;Rv1*^#EQrw3Y;!VbNnxaREs!N>sM!kcck*pUnZ!*Hcb{Y&I~3i zy&yS~X%m5}dEFWbB|BQU;R>W0kXtdy!;NkQlBcK^WYj}k6^Y7s9;9t*4-5t@FWd(f zOjO)z6ODr{X|4Y3ZbGjv`1W(qXM9h>J*h#1+QIc1K<$& z$d4V1EQa5TD)^~1YhYmk@ysp;vk`%v3*U$yB;Ugbutygb%k8-&@O-pghX>AeFNd)Z z8QM^h6}nFji@i9KTjHU4E53J;d%^LgSkvw*=KvoRDcm#RUdnsGHINSJpexaTygYyY z&ll+Er|N5<6i(0aq>qsapauW+0$J^6b5$rJ1-(FS;BN6B=nD8H@;KG*FtTmW+JA50 zrXu1XD>zOb`Aa9>S0Rxt=h(NLb}Ayv;Y;XFYvh_&Ruzj1d93sSKB8V*h6caf{7X zYLinUS8mZVucu9dy*$-Cu7kIN%b&vH|zL%QhkoO89KJM55*LsR zi8ih%S&N*uF^#m z%TvVSRk_;SoUwbuBvYQh7)F8<&Q*}C0!E~Qa;*}C3|4&r&bQcXq}IcEuC$_kE^WE? zeQk#}LafSh!Ki`}ov%t#T~B_H3_Foqu7aAvwVATm4BvtGOgmWULg~4{^jq%&UJry~V^RA8H{fciB8qjFDpkt2uV@v3($yl`@c+LI z_?U8C2ikxhSi2CeLGFlH;HBdJI6bH4xZVCE$QBI-xvEk(eTL~~p z@G#n9+b@>(cw7pbI%2aH9YD$h+748(K&sPebFJ@6Hs-_^ZQr2aXkZS&!$kvDF$mj% zSZk!ZGW!F-Ol#}dle3WLF_b;$%f7ceh z{}YIPPJ!~Le{&K=UIIy-3bQ}*pswisz0hm9=pFY8087&<|J^nnSY&#ES6Upo`R{G6 zv2MAv-~&*aTG|%0vSv`jBv$(7&Y#U5=Ebd6f+avg|J%U^pnMRiG}@6mda7AXsUb;Vvsy8M=W zjL0q4efpaCfmJM)6_%$J6ddq;>6x_8t^3v07V$xDwiW7&8(X)fOkZ4L|F%0>t!;x% z71cfoZf_2j{9MtzFLHCPXnKov!#C{_W!>{H=SgVut!^CleCj}VZ0Fi_5$C6+|LarY zfU4k)Ag~h~FcGb*8kc7%ssm(R53o3v@{EH#nJ#}sfX7=0^9Vy2KqIndk`X8zn1+yM z&YGzo`ZrngUN!(pKE&r&5UmDqaq%s~nBmcjT+ZJgXdo7J4s{5&6EpP&Py3Go65;F9 zO;`j&XBbWQD9cDo*)9nzU-er6PsH3kWC8>(qM9&N$momT$hW)&kuZHi0`1{}r$Sbr z>JBvg^N5B&6|h&!h;Y)84`3?;c&n9k$zA{_p2T0;Dv)HB`=&D%h;BclV-f{+&y$u{ zm6cn+Xk^@{_~7UFJ8^)R*=c0t6c+u!;7%eG0{|D+jL$FZxL}M4SMydqBE9II15?#f z5YdwX3#TPx+{=9yjqlUNrxm}xYMkl-U!M#-!4O0DY)YAn(r@n?p#_Cbh-Fd)#Z&Xy zk(AP95M1!433uoJGRVP_(fosrDh8Vk%I5k*ymtx%SXimSt3?q_9rG$OAPz6&+^P*l z^k0SX5Rsr{3zhL^mI0*fkbh{-E081gAFBZ5f+CctG!yVPuoD_@rq-PFK>a)k9Q1%# zW(dt=oSv(A7(VWR)WE!|4+T$}7spntbbM!|+rmv(LkMF@YxF;Xmkxh`2ijz}iTFZ_ zqVK2ljh`S9`-8kr3<~ed2pzatbSnpZW+!I5D^c?y)ZllL&Dair1oY`z2OOUEaZOX> zd4NIBQcInJmOe}-k;KI_^e8a6h#fK+Et{XnIQvHhAxK~VRheH%HP=vptBJ?yywotm zx1@;g$|4dWVPLcy`jKa3D4)6hS1bZ@mZXU$DG;HK=Y#K#^(1v-Majf@eMuseH}{KU zYQx7<;I1Wz!gz}GnE`^^4hejvnVuQ<0=(S>E0}T{oiBs(Ps-Atfh&b?uEc$T0J7#c zVRs2VPv$VOl`(GqQQ*FuTN>nrM>z2lSom%k?J+t;G~aeeQ@VH#yqkxmc@#fm1efk6 z3h6;-(*x`yYJ!7cX~0YM4v+(Y$bucbyF}44n3sM(1RSXphM$$`P2f!MJ2h7^MMwJW zg9gar<$LMm0gKo~#54ZE@k9K-jWiQ6K@NeGA!Ixm9pLqp-NGOhr39!4c~-ucs$A7~IUtya=jkCAB}wo|7TYb{f0qeX&`lvc|~AUnrk5@c*d zamI26f)SBGF{V-rb!zZ2R6!esAZR;f>e#AK4C%wFQ6lPCO{5CNT0@l@5y}1TplxUF z?{ojX=cDADefHVUwbxpEt+m%O`FdI!F2Qmn8lFe|0vWHM@5TNWevwtm%JYYsyww3d zyxjzw!n$31TcjeMyujEOKEJ7CZu&eZOS&MGV?T@R_s;0|e!b~L5nQnLe*}q6k+ffV zaLS}WON!eiIZ+}RQ_wvLQ{^u*2QvO;g8S01-`u{2|CuE29Es(^q=91d-GouXd@p;a zm>>CyK(0HVGRcJW7PJ3xPx8v<_LKZbKRsynY@C*ZcxN=yIb~0?Yi^6hUM!FoaHA%Z zp;&0r{s&C+1I_HsW(&XU(r$f{09rr6z~wmR1bp*5U=TTl zI*oV~La{il+sTnw$}k|81`amqHU#cEjUTYoUmn432WZ$G(j&eWOW+AYsiQ0ws4=)$ zS^^R4av7u%@OH?m$u($l!F>@0_Aun$#sqhipMlF!6}=_krte=23-%U;7*(|1Q}>fY zzephJSV9jLdz|?5%f%^>*+z&x%|H@q-M_iq7O@!op$5AKMXK1tfujpG3|TaYah3K{ zMq*+TJBFaK9u;-fnn=63AW={S=oj?Dqf@D!15f`KDNijlnwyWgrLuo9DLpiWc>)uh;_9#U8*SdVk zOMKz0J#;TMSBtGHqz|N68mQKLX3bT?$#Hi8e8QE%CmRpH(B`d-qMjhR_tCJ5JpaTUr{zVEFibYuJt5kWfCGU0es`iyb=? z-SC(311ALiMM8(($pA^I=6iQ`SmzN&yw&ue88ZB)5q8P<%s|uRDY3+YMXP6tNS7cF zJU-B-bdt6RIU4)e3uO9<;@uW_%{>DzkV5?#h!?n2jgK(5+h%#9Ej8WMBVa9gz8KZ0 z1b1itsY|)GQ%mN0lt~KfiNZkBUX^93&0&G+8nIE^@U8I(%3Z=g0Am%0o@l#Lq36Oo z0ob;hSl#1?{f`8S-=3Ael+8_WV7GL8L9% zB*O^_B*DZl5RmEbGB-0iE^Pt?Ti#JK>E}NlI^Zq&Ifdlbf1db4^)m%o-DJ0y(N#65 zb#QK3%=(x<)y)zCQS5qRvR-#Hg|xkHWBNfdQ$}IYnP5ubiLCz0F}}cv7Aru)g?+Oo zZCE|u)!z)WI=^js9%_}y^!fdRN!-IAJ1e3pV@sh(&er>lfI zHoS}#0P*HJeC(=5)ua#r3+!3dewCQP`&T> z0oK<%&t0uoPze^9OFtv<1S|0Gw7AnP;(;QojxoYg1f3_0hY)|Fz$>)*&qYWt3`xgW z&2vK3>xOMr%c!4Q_<xXJ|m4#5%#3vLcmXodwVL>1~{_LX|P*swq=Di2+cDVy>GhucDL37n) zQk^+VN9I1;SY`dGc$1Y~Pbytqk%vwoHnmBi*QP?Q=!UGvDs=2uYnr9;Zb2-^DTLoX zI?u#$-x-{#bG0>&{a;86d~-?0Ws6Y%P7;kF45XCA=+Af~%x5g|?rH=0_DQjvv)V39 z6tbdNBR8q1S&$1KxTmX`LQbJ$)E;uinQ9}cj5R)>tXGi?eqpvX|BM^kkRDY}3ejqF zy_-nJJS=raoUbJ36#kA;zzXiAOoeWYxNo-52pTXCOx>FF-0XbvB*bXnD~OS^%xnA{ zzSunB^Gu^6%hLB@2Rb9JW~;{MQCiP2VoZ`D@mY>Q1emLx z#EJ5%S9V#xcdITFdQ}T`rl~|5yFpw)Q9Y;eDf1XLNn9#s3N>+ok0DWa+aLk*sI(@< zQk%Ngwsw=6s!!{=sYlpkyjDAwgi3k^omdH7nh=Z=&+Cj>kEI)!Av`xLshebY7@J4E#2ESvGCD#c z3gKtkqBn{BJFN!RZGv2Zk_b0)B>DL5v*pq$0joPOpVwklHhc zBu!N4OfW@D3KZ*b0;h|qp69W!u!2w+dm=H;cAYxH>>o0at;kn)r7o@2ZP4d}rGroe z*Qoxg$^I6gykfzRz^og(EvKDWizGLez!Jp^$qEh#<%gNMsPjx3JJ-}RTX--9W9(%q zGc;VjwRB*nJ%59VvUZGzDA>j|V!iTItlI#!lrT`js)S2nodrB=pw%hi&CEJt&r}QbmiT|G5Y7|J6s#5oOcB2!03|9E z3+KYq-GW>NMwbgScSQha=5tl$)6ogHZ!QcmBIG9JbXXgr_SGvpH0$5L{5HIWmPRQxvH>m9dSy1vYc_i56l}v)Ww3Y$9$ARv2)(iX^fT zsIj+Lz^Y9Iiwm}sXfl*EDgsQ(!V*BQl0q2ngP<1pHdL==-jY#;(AN;kC!B{l71x~T z!Yo1&otp%8NpboVaOOUyJG@XS_hZ^k_8h#KNSx_(6DF2&1H?m1V8}1~UhR}5aiYtuMC1~z_g|V0wwxACV+G(N z+|V6!=$HQ7d!x8N)S)EGE#PV;SpII(HpZC3wtLj*q{&) zZ8B8a=!ZZjVBWECRYD``qnA@#X{dy--B9_ZMwGcfJn4B&x4r)?NE_=$w3NrP63 zjEZlRh-?y@qYh<<)Sk3DD{W3KG!#b(_i~QteK+NhS~&!VuQdEcJ0`Odx)gWJ`_3p& z)HiOZD{_x&IBg{uL1aM%?wFjHzlli|W60dl0FcEf67LMHPEM^E!*W|Rno76G6%+gX zH(P95kZ2&>Vq_uCE!-HF6TkKf$*su8&sW~IyWZP zMZhHj)o zsJ7N=5S@zBIk~?bje6d-g@Zy=3w;p7wz{?8y>U!J=~8A!y{~bDYooORsBAHhvD%{q zz!T%zBGQ?h5Kf_q%t|~*fgu4*v;wrCOX1pL5LcVy06=IK>Wg7PW!zDT6b7Mm%2hL& zOyVi7jcV1XMLcLM$2pNlMIi%f#ot`OKMeR_v1bD;|LL5oUmJW6vLCupVX}byu&Jc0 z3)(vT&4t|!g?7fn*=PZ12v$6>Az>DfTn;J1R7#(Kz<@)D7E2^#vcO>KFchH0m_pE9 z29h0U!ZGy({u5CIet~1)Jk>&Z2t^_oAFMkZPDYUw%eg5Y1SYlt;Q|GP?7%EgvSR=J zC9n`sA*P4{`or8qgcE`QCpJ=G+1{ti7#S$a=M)|kj}0aPszfee8Y8vaxm?2Ls!bdQ z0^xSOg$w+A(w$Q=(JoA)>V4>rj&@ z`S4(#2xuhenE|8pc$w{ol7|m zOafkFzy>K8?v%6;0EF93c@_{NX|`FoL>_lyOI! zX%A`5YRnI&mA03mql>0-9Bm;7(4^QLQ-hpNn;MiBxtz@VSP9s+jt8)!9hlTy1Nvvg z%0SQNBzl-lIRAsPLO=t6qeZI~=pdZ@Dp?T)1$2j&MWGCH3hpg5CKy=IzFbO(Aq++X zw7Iluj5EprdBvdG>1ZgEJXnIX=OP_vKw-Kl;Wv!fIL7!gCJeQOMwPTGghuQKFos}R zaXA&4m_CIOZKX}RcR8I(4-&AFXxBlQa41hVhZsYXWW!((g8{f7VXuspux!E@VB*9= zzyUA<&@9dn4_?T{2Xb;kWMBCgPP5{s+Tn50u zGgp=9QHjMN+nB**D((jrGuj3p(G`$yBhX@!v5mvr4PH)V=-24Jp9^dZ2+!b?aWEGH zDA&Pr4Z%j^mkWjhs?^X^2z3soYw3r^!TZo(F#7oQs1gB*G=UKs+psmk5WhbN0iVF-gCGpbZ46EtJc6uhI82YSB8_AEASU#2P^h zIS?x+;23{H6zP6O+sjZ)(BXm|6fVvVGmXKaQ39jhyO>Z%l749hl5K$H!MFEPVaEd+ z4ardw=%fKv-MbhVK#^1gOM|=x44sXdnV=O@VBlgK%u>M!VQoOC@zfM?s8W#e7@-i% z=aeLmVQ@t{4Y^toWjF!a+WQ=fDDg3mh=z&-cd`lJbI5TDBpI>U43%i3fis9QDU^fQ zY{DE8Fk!j5qEjkys<9GmhfPB&Xd7$>SO@`#EAU?lGMpQNvwN(rErbD3T zl8Io*QEDi$RdfpcCEeYEt3<8by_rkAH#Rop(kfiJQ|Kgv?l^7S6qkz170EA)B~%dp zL}4(nTm~OwpQlC8mJ_mAw8@5_dlQYYUh0=!Q;-mA%!Pgk(fzn6uwaR&RIwCU)6qtQ zK&)Pkbwv#}lL9g2D}e?zM3h;{WCAg2I928tR}`zRU=qP%Rv@Str!mkos|cAVd`j$s zp_h|$V_oNpz#M5Xnz+|uD)E(zuKh9M91-M(Xjlb!XRyMYR^5sz9?S{kp%J+d;!UGf zix8kt!(o(>1FSAa8=(Tp%VHY0(16KvAwZddPA?c?{M&;0LwVXUE(5wpxT9PYtT!+~ zTVgW7iniho<)Vw=?SS*NFT21z0}DBA27HG~w4?$-&NvR8)i^=&(FiqHi8>MfOsmBR z!gR(4&X5~JZEKuJ5^dtN6?sTJMNr0oRaWh-JbD>(F#Xe(?ni7ta? z40a}r%SNXLBTL7;lG_4Q?)(xRsKET9-A?Ry7|az~hNxRu%3IJ!441aG5-rhSJ_!d& ziNS^)0s2p836U5v513M?A`z{`t_H)!!AuU^H=;hGHENJ0n~k8S5Zj=SbTTkw05q&i zO$FmJkV;rTfp^r5*+j9RdNHJ(Sj7xJz*J(4HlgK|r2?o@dPx@yFcqf(uxvtyDBrAs zd>6nLML!wC(j2&D2HY^VWk$8ch10M;S%#0pS^!NofU7J?jAJ!AWb!9`tY zVFemoK}4Zl8pg^1utG_6)HE=E#Kh2HH2_Uj0{-YQJ1aT#atmtLiqLn!Ifx~S0T@TI z=vf88pEUq^TvEzH8G zv{s8%fN2B8w%IgV>}LRT0BjB*C&D7Zw$n`;Y{TLJh-t7(r6bacUSiZ*4Qhj0OIbi# z_shWQ$i)DELc@+Z&&52_El92#>JD%oZFF8h4N`@9Z7L5o(~Ie&A`vFV;NBBsDVqfb z2o{{!+{2g~6T~TXuTviyZA&Qee1TKtR|{FNyC0~Hm|}%3%gUmR5A124q{h)glS9uz zYFe>>DGM3)63cE+sz+rpIe>s4(`v-((RZ(Z?7S^GuMmGKC8T`bVgQ8DdWue=@7Rqx2BGTG-rCxk=uRM3gqN5lm zB0V=Z4(BUJOY<{Ww~c5Z*b~LOEy9v{d5}um2xk#Ugz-4(>rB*R(EdJVaq#t zZtNdv0_@n`vxFsVzT3bl(64xt?9h=>`X||f43`@@kf6MMWQ6|71p#!J!RVQ~xSNj( z^`rIQTLyWrfY)b2%QvKD2_=cb_BIs~0yyTUGG$pIsDmAQz{>?x#5A_yZ&vV}jcuy_ zg-Br3V;Z{bB$bV=SH+o>I!2(caX6er=Q%kA;z`wuq(oRcVzn>R^YND{u+_~YaK7T$ zqc=JQFw}+=4-2{4zQ^%GfsbjQljM2RzKg6hq-rJ<_%B^>uuC3|{;J{UubxT?n-u8Q zlb804mLNQqCLc(!&oS&Y@Xo;Ajr;j3!Zd1PYant59CzL!xq>$@zg zx|qD;^v~wVPYlz+4M4H}Qe=OTJdjlA<=2mf(l!4JVb_EGeq-QKdEk})+{X6oj1%=Q#kC^D$b+f5N0CSsS>n3%3Uz2rr@*75$F?@VYFaMN>NI}&Y(bVc zT+mekF|Pp!Tqg!`YFNP@gjM9IfE&2ZU-fq6^n#_p6peK_1G>g*z4Q4*f7suu<^68r ziQEpkGQwX%1tJX;{j=-sU~*DH_P_i7Q4}dE+TPB@JBzy?@AJ8SQcdi+X~NOHFtp8A zTvFWG(cM#3>v&E2{0 z@;|#n_@V^f)q2Feel&VYpMNP!VjJ5W`s9*|n)GY0q*jk>=x#8=YrrMr)z!rU*|_|G zLT3omjDPU}t5dO_1L+ady}WKm;z|Wm6MZ0SZ$3K3UXO^Y8nUb7ot4!OI%>NAmag+0 z$YTG4#G;cale$ZB*_Ve@8?W+%t_nY(9M48NK5n7!?5w)$^&!u zYS-;?)aAw2!{xmvBJM;&?b7m9glr)Df8bI-%_3?1n@z=E?bfaG&mi89e2LfhIbKhV zMckVa7pE2rBnjo41Q(OUSW(jcV!<$(%a?J@Xf%uU33Y(dl8-}BAQ{2!U?GtJ%^PBZIk<;^+I?6gZtP&gQMEPY=wJ`XACMnhUO;Y`k>0S#C zE9Mi=M^YS^t2+EGKbSl-JHqCXo?ikqd+-l9n%u{ls|BS)pQ)|rE0Jmw^F0lG6MPcY z$$g`edAoOP8>mK%n|zNxVs%r*K({XA_p^)M&Z=8oi@4wUo)v(J;tSnuR~S>YbI-2B zHNU^Q|8(!S!vamSPS@$HBQ_MN+;xXeM%QmyaqSa+LDdY;0d?(+M-mho-6~J?Rfq14 z;F}WJxZeHt%_&2ZH=b+T{x8HD_YB1TFk{4o@_&>@D|m`p$Io@@#=5*u&CLRB)kj%& zSxVT1jSdIq|LVE=!-%dMZrLr_@v5R|cJ0e6uBA0D_@po0UlO@-YyMlan6O9f(cgL+ z8W()~W4b?Fuu-j97tIWziH*w}+Z*pl`m0JTWob1jqu-ico5JqZU(;QEqeW1V{9UzW zilX>QRn|wFKK)l=W4j!Fr!8U=V7F>^?VRa%v-Yy)yE6oN$xFVNMZ86ij+xZkQ}^j7 zegAo>0Dj;3liI2toms2$igHuqfmQ9x z-{^HXsv;g3uj)DhANc^-3yu0u(oQiWrz96w%^LYhw}aFz$n#tw^Xm8fu{eDElh1fQ zuB$(gha+Z=1CCm|BU+U)(^59A?es^f8FT=x@&om z9oMGRByW7hR)hR?4K(rRG)SnPj+nDyW^@WeNV{X%)x5^`Wo*4lk+Meh*2bFI*pfCL zXk5;I`t3QA#Ee(YWM-~QQ4$ZP{D2WNe3~$}N1s+b`S&M?(nIR&8ke!3o~~DWHbifD zLh*#X20N?91E&w&`Rr9=otoH3Ti}DW_7x1!)wHX| z`u2J-eJPL6xnFrcfa^bvNSgx(e(N^w2=)Ei>Bj$fDli@&yrS5#kv6gpJ+J>yqeJZ& zZGS~ky0LT)Y3!y$r2fR=NZC-T+VBJdsAAaYSez#HDU5vr;?&tn>F{>vH8z~a9N0@$ zis%%(qoyIPei@Cbz+zhFkc~T3n3=4`19_hAEVR>6qf*q?sO*j`xKw2u8`5B-i29V6 zL0t6>7{`VzLoKr5pdn3bbkrHq9KaaHLs5%%Agvp=81)B`R*EbtM@=-McOOVYK1Tzh zg(FQ_i^k!qgKcM{qZ@#rqQHb-N4EnR;mH`63KJMg!)JsAVAkO&l(>Vwu1oWvN%Rf_ zhbGgn5!3`ko~F@^#1T#J@HKctniEws#E$6Xs3w$1vm%iwD1hS1BB(r+6=l*w@1_1m z>Y}`tH4TvV>!l+1a-#lUE+w&rQq`eS?8FfGHw{80M^IzU#pzhxr@84jK z@85dv-#{sF|MoX&|5w$_|3^Mg?){f^G6ydpkY6vGh$O{+^P611zWV?3?l+?yYR1#4 z(9`^8w6R;e*Sz1%>-_;U{`&PVAiT|(Ffy(KU0p9wrria#H z)_)}`?k&#$O1!^f(}?lcCf#50j!+`-$RNhJhaB!F&cO!?EMg#+I)|FJ6G)8aRN6vl zsKKE&QhbREgQ2{Kg|aY69-4;Fk@gD?YXmBb24cI16)6R$1vb>sGz4m-S6v9Dq83n1 zg}sy(3yP#0M7`0`lor!Q)zh>(N{^66F*&eDV|N-h8V(FrX$puy3dRSR-H2@Xz+Rf7 zczOUq$X1$CTe_<*t!@EZzYGmj*k57npzJ#u zvKkwVVB~b@z!PwxO{t8Ul8>udsGxQN{Dg;+K!CC9z`WLiNSD&qq6r?*GE5+HZA9xp ziYSe#TaI_M6@z8fEjNN<0c2ItDV7}{lmhjK2wNQv{HqkDAp-rC!?B=#8GDt0PEw-% zjyy~e>BR18ODb>j|4aDwK-L=#89!6X{8npO>C&(0(e|ov@({E9U;^_^q zSZ3C~!T@@&o?G6Y58i?(U#(8w@JcB-4)7t%uj;Pp7GRv7-Y`?~plydr=^^#YLAO`@ z)ri5HjWSg`kX6^%aP3@uVV$mV4)f}h;0~UiLkq26_NlQhU6(_Y<2O(eKS)OFko7`i zo&jtOIF96}9Vq~nhJP*lWUzi3CTW6wkQ6pH=;~KA67n=t4JN_$BU^x@I!bAmVk7PxHyO9Xrdi_Wbn4?<9Bb-L>PV-8|8jl9Jq<+Nm8`J7C(c*Y%Ax_b%XR;3urbqA)wNb(o|4(N z|I%0M%GtUFwi1z{=F&Q0q0+Io8NG6LS6 zuCk2Xx3Iri9-NrzSWIe9IHoPvKQ}xoA>ne19Pv@=O5YqF_R-ygH&lEr=NiO9rM35agG#^q< z1NI?I#_gZNc)TFu;oxKj+?T zmIs=w!ykY2t0r6Tva36V`G#J9`aqay^2%7Kn;g5kq{bAa!1IbMCj@mEx7An{!)!i=XfGv7Mv?}5cZ`SplTw!2LzODdV!;ODnl#S>v zuh~&!3bZ$-%&kejb~)9o$=(-DBK1|#^^OZ}h4bAphYIidgu^8BzjmA)y{}4HCznr3 ziYPf%e)z6s_Dt=W8hhl3NvYNCor%FKioS4ZVD=+3hd$O7mgsc_I}XS5hGX(v<{%Cz z-UtS7L`=Z+wg=n!%$t{77Z2|(9&#luzXs0WF}L!tuyE_Sa6y0Y#;i@FMMb==*Mm|) za#K!PxVHuG;b@*WY@k1pAjWBW@q`DMjK?glrB0Px#$4 zh=xbw%$vuAfDTZK!1wZ48pScR#85AVNB`mA2tXOqg2;mWG-L3NbS!TIN}^ftLm?JF z{4icqClUeV0NRO2tfa8cYr@klGz4GMRv{-6=~HMa1uV*=s(V_?Us|I$_=BfWH~f@9MUy9w>jdeR}@pIgG`T6}?QQ?z?>O;LPzU zHsX19&uspaBet97);peE(aSEdN2_K){u=$k5No%4@6S2c0&`b*MyRWYs)|b<+AyYm z3VX0!+WwE@x|?$*RX-a2q^0KbSK%3G?yA$DojbK@-b>{2Tb3uB6P7t@ca%o&`Jp?% zQ*=t1DiX8Pw@qz*&LX7Nl@`mcv98UZ=mD{!9IdCvV*NdFW{mAT-yrjE*~m;8QTY`sYI{9@6fD?j*7i58vDPCXXYvEC=Dgu%X)?Rm)B^3=8wR5j;a z*CE@svT{-7@3&Qs=$yaE>08Tnn7*4T;Y{bVf0S+HUX#SXEXphsbgr@HltD=*NYt&* zSuB?X*Tv<=dG?%~?Bguqq!m-UUIWWUo+$zdheC%w@3$0@4 zw>s8O|6}X^sF$v6h5~JB>t4k8N&g{Y;kA>XW%# zJ)0M`?l&1a{6}R|pKsmL!c9HDd68+ccB~u)7k6ICHm!Z}%A03>iR-O7t+Hc_@{Y<( zf%Tgg>DT|hyo2+;5PwA5|FFDuy?9Zl?2*jBNS?nWnd%Za7x^<5P7A-mwKrTkRu%}r_j$>fX^5Gj0wgs^*jSCq@Zn`cV|3D#XZ9@Dtrp6X9o|{y ziPE^yUHh&;HVaMA=1a8(!otjq>dK(pMH<*ZVXDxm!9g-;owzoohw8D8Dr3dpKrI!@ z5c)%vJH+;(Tj`03O^g-)6JBEAg~925EtbHTl#=Sf3x<}^f3YEf`@) zVH{IDN5SHLLwR9!^dBiRY;)|=G|~V&4O_Q{1TMC(Y8<;9Qca#%Pw30 z%=7CbGyhzfvn#7Crn9y6!=R*vDL1>N_JlpUYgl_^5M> zdn#8M^TJeD%;L;TQ>VTBCvD}*^*xm%%blL1--(`giTIg|kNTh>kK(2+E)z>6Q~%^j zlI6H$V_f@vM`K(#$7H%9(~4en!lQ(&Lw4D}+0~`Q5jYkOaxR~F-KlgjiSMLl9#!V# z9)((ygRK_BLdmGr!e|$&XyoK_l>!*Macf-)u@P2X_(TYYHogtit&NX^b(~nhnl4qg zj1oX!-SS?G2w3Z_7BRxSdXHb+&gAmK!ugW8c$qisy^2B*29`mTD=$a{h*A-luwc3Y zvoQ%NIwO}Mm_L^QJ^u{!sFE(ifs0+JcRJ7 zh}qP0oD!ySLF;p+Um;8%8^#+~c#D?Z6cj(S*o5LKzjZN~j@qvC#}%$J(>w_O+lkM- z7b8L>4OyB{F`5Cgd%kBrh0(IBOxs6SNOp>^?+d7|c+FACzr?}j=Sq~SqPoxE3$QqBILkhd@l z#TTQRrXYU+rAu%l^i%G5GQx55&V=#&^4Dl{vcExbPxHdUj@F%D(Hk?A*E_KHKZhS3 z_iB-2(m(Q741fF&j$r*&Ho~6#!OXg68}wwfD(l+8J?RX#q96P%`s*voMW3tcFFb$M z%5Nzp8zpJl{I2Q~e?GM;@eMnF&fKKU(@cNq_BA(uZd)atE-hGyfW*EQ>n1_uL+~CO z+<81)z!UZR@8UT9kRg&W!GSx{Y@W$m(C^D>;=MP$a5e9({2K%2>;!Mq4YRC(*VG}E zN&#MXI^h#xq1WdUh)mi38{v_W;0ocGwLd&E4z3vxBLWWd;8Rv`OmFJ>C*F$+{BY4B zkl?s7+_n|w`FmQ918x!5qL?p{Ac8{)Ke903@398MB9R*8gmi|7 zQhoPR`P<9|e%~#=L`Ho;g-axHh&+pz1LhMgod|$n@&`KLm@zJ(Z4MJe27{Y@nA@>& zfqvU;lc;X1_}#{=d2kq;aU0Ktp)W#1wSD|B#IwceQ0*fTf?HK6dp>`=z0%+T%@eF z?A)2&nL0kwIbnTiUEOZGvHs%8ajIhLS1<2vXa5jMHca@^QNP>1RevXSpgeDqk?y#)t-`l-r}E5bao1@5sy4Mv%Rl9m3(K>-95#xIuh~GrOr-v4gc{6ET;~y zI0ceGg1h-c`TQZ}X6g2)C2#UJyRP?ncB(9ycgh7k!9zpK4@%W?I%(2zspyY~b36?IU z5`IXFAh2=l+Eq*CSL%(?-N`5-sqO$3b=5h(hJ@_HXONOqZSjq!$zV z3!}JP@E7+*%f?*yAV&bRSTGt+P=DA0QWKED%iyGj@jAESuP_d=8DMiu)14pEB7S?p zJkrBJRSfq{unC6&1id)u!v~Fy2D93jYwr9AY^?$|nTt^6XQGvcz_{-maut0t>< zV6}Z%eeiCOCNrb=PD5%{MV38i-a1YdxCK&>_TVc_-%oW2kC{-zV&9$2YtBOYD*Nz< zYY|%xQQvqqKL>-!2n=rn)SC&fx;scH@K#6mQ} zk(PxFhiyr8;ED!ZXjuYovg{rtrxOdXOi@)3MHgeBl6^aoiW!Iiy$i`H%0qM~i&njR z>CO=lnjm}&s8Jl6oYCDGJZ^R|W?K`si}9d3aRngAHRpnUb5OFnY5HVu0@-R^B-F&){l8W(<9p_q*+D9z_e9UF)1R$lSAPqahizf{gi$Zd5OmFqbu)Ks*j2{HKBsGX zobQpFMUgQPBw4Z4q3-?Hzw(9hWztQ?f)grb^%JD{wc$+KM_EL!zj2lvcZpXA##$x* zBIWB3Myo8}Z;1a)(%#>8>X>-?F<6*2@go`G{;Hi@qqmvLrvG?`bLGT!oRyVDxh9nL zB$Fdge>EX8^O^XY-VRx3e*ARVjrGsFR$e)}Xl%w?&1+h|%l>Y2PT5O)S4yNee)MnY z9D6L=o8TPVAX9;vjq9k)6dsqopCyv46y;2D`b@dL%~LBoGAiGjTHt*rNA%+Pm{y!E ziq9P>d{G-X;j8p<>pRwq3q+C|^QXc+_eQ=X&(yI{blmiMB@9wKx;D2g+SanUWolW6 z%*AzN_hh$l>vPVxjJP4o%{FPfve$D*TSSv3D=Jebt&EHNn<(~$GENjJL3}Ooh3v?l z9)GrLY+~6WNf{?`QI{Cm$GBrL$1`L%AL)pR>=^5cDU(;q;^I1F&%*iO6&c>P^z8Tf zvY*q($^N7}85iH`_doZJ$2Y(AL93wEhvHU>j&X647MbW6f_urzZpb8( z2v&jTHJJ)fWQXtQq8r(wJF;VbuMYv``FwZ@23rzkl_E-3f!FJ6>5$1KtK-UK zK!0J9)|j#mxDI-1TSrDmbw^2yKw8d;$`^@R7D)tSM9;vF`Hgp79s8{<X4p*|0el*l~yJfmbcC06EA=W0P1zW-P z-MBSqwiyxMgj5@G)D9dD2Kd3|bRaXXm@ebj)rI|X>eCA18atLYa7A+W?clu0MLgM= z5EA$UUF2Q3rP()!kRioQ38(KRjm2-U11OP~K(P&e-wk0M8}5p(AO+ulfgeqX+dR_~ z>@T?$++-uW_yxHekO!zdIX(z=I*dX}B^|wz2R|n+jC&K+arYii5@_LOq zAP9O9`%F|U@Rxr2g&f|i;g5_zrD!sBa#iRR4A{*@f`@tWaD&!v_Dct1 z7DkM1f=!ZZ?2XMqxP|HoR~3cJ;LN3pFTDzXUBP}HzbOpPeJ`$eC1pR^I0u%3@U~S&$I(mY}q~P;gLy55@$8hxu+ux%-H+MXd!Wd1xb@GevpYPrIc6`mV0p85yv8BG6aa7D=A&?w1dSiwZW=;k-Vl@q92))5=!X}sg1e&X$jz#o*DaCevj_ag z&0(Vh{BgYCt(jc29L9YJ1R;+kvFH88^E}}L#SuF$^84SEXO9CMr}z4c4yi_M=^e`2 z%_jueU;Hj`dsR`aFD#JW)0`UN5TETL))66~CG{WC3olHiF;dL+{4vhN4 z;{9+ahbR--VP-@TE0}H9BMc#YP8T2~8_Z=*x0|S^ezQCQFu zju0YUigR$S(}l1cJFVwnjt!|e+m_)Osh_*LNWKtZA8s5Gz?DVQZk+3zo`PeR`IsY| zlUdy~GEn?ayMbT0LwV#cIE@FJXeN*OwrXBi z1e}6(G1ETG&$#_2qF@wyCqr5ZcNm#H;c27N{eZ9xmO89p;RR$=U>0kc=Oq0_dUOcq zOL3Br2=kWYD_qsUD)C(y0RALsW8H~fl&Bjb?QpXA$V3Fyj~|ezD8Uj zmH4L&>v@&10MT-~XAW+0n7pc!CnGz82*iv__qZbpcCdhaJe|MtT?(Q{3Kl3;U5#IS;O7YirGJu31h z^=*S^kL$4F<*yO+KO~>uysxy-zrgmCwuukct>>{j*NgZMJzU_I7kHbBqb{_h!_Qcl zK)dp`d;4wR%CS89s;Rgsa@A#Nxl~p(xohRm{@r)eo5F`->n@c0p(k10zqdp1FkD<7 zIs{jWFeT*$;HV3FKhufw;BA9t&E}@g0Bi1-dZCVy4hW<&o_|Jsu>C)lu;?N3pVIH% zNC#I8oof2N$oWNK+wYc}g=xvWo6Tm3hJeXHJKCjwUR=>g^R?ia=9v%7*?;R$P=Llk zjuYG|Pl(7a+B-1sIu{mED*N#cu=NPuP?LZ1z#j*Ad~f(bA9?BI(@fS`;*=KbTjmWH zhwt6d;FX#p%wAai+nmg05{rNtq;c4Er^ZYC@RgGeH_t?EBW;Wk?~-sJ)dC^(9v#3C zkWqrIkpi1RBb`}5oRcuZX~OfCc<*EI@Z!WlFM?CE*l=T0io;n(uc3tPqHbaQ3{nTL zTP*Z1PN_HX| z6_L)6??-h#T?i*QXhY~Y9)rkuwI0RR03cLagMcLS2;3;A8L>sCyJR4;w8X9N=&Cm5 z7q{E!bEx^2v|4f&jh)Cb#%9*7NJ`U?_Xz`o3qqS)?Fd-kFd^29a|?`w8{RH@<>$qGQDw*@ij$F$G)F>TiPF!)#NUWmi%GWrO#XH z#@@IhYM1;iaN^aLZ$%T}1ybj%nb zxs>d0Dd{geuo4!RFfmZ6aH#0V-`({-@1N0FB;507TkSi4{UPg|Q&106lP@he9rNiW zJG+GWxGMUCwFTdO`OiJe5ypFRq?pY2A^y_pz$mDy_f!qvI;J4oS~qucp@x+IWeQHC zGVHZ6u=e#NjM)F~?@s=%{v%kF#7??ab5ey9-JSzw(wlFRnT%}BMAe8-9PG7~v5jTZ z<^a{j9u%(rSm~Xqc+Q%ABq5oHvx0jatBuhghNBpKrCNJl-~E z>(x)BlZQo4DBW?jueaBsQZl2L?)c!++{Oc}VDdKonMq2=1V!}IOKaaa<+-4&6~clx zVoYS*iEq0-Kay+2Q*E1o_>PwhEJ+tg#!Rb<-Z&dRL$9l^>fYB+pU6c1ftd!$Xiv#C zox*N=MOFF$Nm3nLHuw7U&(3Wc6Ddi~hO+2@k$fuA7&pwEJ9@&$Gi`_BK?Rb`aT!8b z4R74B$Ie;{R_na$7v?d;(Cu^#4`J`s^)JAvlyeWFoCmrp& zH#DD5q}ugb9B&Nv_kr$5#P1LEp8k(?Ieeuz;f;#CU<`D2ZsHfb^+Q3=bu%^k;vxWw zbbDwuA65P3caXsbe9C>YvjD2GN>pR$u?rb2MM-ag%HCO@z?0hfQ--w z&6KyzvVGqnJsfUo`Vh%9KNw6}L(NXq5Ln=Ck^)$eo`q-)NKe>k&FYQyC#nNx=yhmz z3zZe|_|w0ebsheh!w>fb@9tfyu@h4fU@y0AmSDBnUn1YHzvT=zI2^U(hlzLzO~qK` zcW0CjlpMH|dbe}C!@kSrMJex|`?s{;yul}Vvtxm4^~HbcYi*y?N~?Aio(S$8Uifa9 z`Ro8%W2@LoS40sGq|{DF>~mrOK!;jG)gvJ_%Lde5W2ZY@IS#jlGSjt5yGEso@>o!j zr}6ME73_sWcIXHR!Jxf-{d*+y)*&+l>PV*x3H|hZ1I} zvGv{iyG}&I))(_9B=3#suIX-m+ggsJEK?wF4pB(Y3CimehvUJ$7U2c>SAe10^f~oy zkA|otT1<#rVcAqOE&q}g2W=4;GG&lOQ`*5H>cBtNNUqR8GYB(#@4^Yh7_p7uC?n^D zPcUc^p@2Drg6YMLF)H5&1;E`GwM(s%tCI5`n(U3HJ@L}QI;DC9nhKi5BL*iu2 zb&>7%g`oNH@(Kq z2$|E34uy`IU1_*8Px@vGeWLOXDgCI<2owhFZ3L|zCCyr8h()Uu%W|-mN_caY2^FMw{8#o?3;dk3*%}YJ4`5&JsI%I z{4uTjtuJ*?E$?Y)X(@jRs<`HfaWd~%LFAR@mYyb;H15Jtfi*5JF55ZIC3~ww1Q}ga zQ1&BNKI%C1&;dvc*S2sEQQ2gaOC~=OW1Si)_sgzuM>@uK_Q-sk=*raf9U`j>HYLY= zBRexhi^_6Di{i>wnz)uIemPgtQog8?>t6`@TxMm52>)EZV%Hq zdEA9;lSh;zN_CDBe3D(}hQIQFYW8N-S1l+c-U-O znC%rW4DpFgEa zc&f3m{)g+lcyAM5YKG7H2R@q?$aIwr{j6%Pnf$|1#k6&k_PPfHLnG4zy;eJ4^+D+m zy3c+{Rz}!84(W@Hj@iU+)hE?~WuCAMTruhKmhh$VaR}<@u3q=lHtH8u38Qitd&6NU zd}kI=k5Sl4C_r$sh|q|T&p5qH6RcK#VVfJV-8|UBBxyyu{cx0o3O&5$38nu^fv;wY$Dz=Bfe4o_H7ePE z&Cc;f6uLu4!#M*yCm~E%uKU&Z#PKMBZsV}9sS_l)_kkM&h8+Xv%?M0F8?1nT+W&{C z?}2Nw+W&tB;>^@h`Z%fm(eCw|VWyT8Dl*j8N+lfZYz)WHTLYnPv0yq8*$CIl^4~9q z=_Qp6gAv*v`RcWl5suwknogOhm28rUS}{^$>e%yppV94mpO>=jJm)#*Jm-AQ=imAK zL8y~Df*{Cp`PJM*!G9 zDRLH3#(Fc@jvRBtH{%#<&!xnyJ;TyExvoe{;z5`E7;hkZ3 zuY}>%$EdWbl=$|7eS-%cU;u>Rv#7rX9<6ttQDV-Ayts;dbb5y_wXPHzzW??oF}!F( zd{Ud;t~YxrUkX7Offgat8&~Ek6`jWeZbZIi6P_FPay`QO7o-qDdeiElzJQi zBdPS*>@9cK-P!Pb{Q{=)(d6==t9HJ_X}H+bd!u*Vg~9vBjW=U!FE=6peB%ch;m(Se zOw8WnSrz5CFvAcR9ppXRN&6Eg^xF zVbN?ccnUPi^;QXE(l}m4kV$2rEDTk0JlJD|c*90i01Wbc9nP3k7?b;N@&qnx#Lsmh zzXcP5AevWLM}~vFHp7-D6^FVY_OiKv2+9Us&D@BWfaTQfDzG_2=hL`Fd5(<_HV>nc zVldQ&6X~=EuA+=`rPF!C51d)M;|BM4Q*Sn zD$KPBB35DecEOboN7KV;SLNn>X@oO{TU%e}cP{oVn%4Z8W-zZx$lNoc90$zqw>TU$ z45oki@@LPvYd0h&E&e4kwtVS`G=I!-$92Wv<_dlPyj%aSKJ&Ca+4(3r>Es02pDo4l zuXBep_4mAp@$Pp$g2ttb;yRv2F1TryyZ`tq_I|KifFz%i>yx$&WaOFIS=M`|WV^q( zbED;{BZq%Xqq{`A(=Ks3Q$t|2Zo;>oVJ35t{;s_AX?T){;{zPdrzSJjhATKGla3k3 zq}{;;@6K_u_b`J3%<+sKFL#?S^Fulx(1a5G*D6gX-w&l!(WUDz@kCZh=Ii7 z2qjD{zo2164Nb!1yodY)TnS}6=KultnaFMaAk+{zcE>2e4CXUwVd`M9+|Ro+xLM%u z;({^bn5X51MG&OW1Sx_?>;^gy^-g{5wN~NxU?)4TI~_Z#onX$U&8K(lYG;wt$=&Sk z%xlp&)Xp8xD$l^<=1tL>xDiU<#-?EAtM2I) zKO?68f9_qDF+J=>rr!*madi(bd7N-d+`)e*cpb=G^u=tG58C@sj(uwoo33mB50N5I3iyM9lz8E^3_@gs16il3?L!d11v&L7|LJjAH-$mXlJlZX9yXUH&xVzy?m2^7jv7k|IyLXxg- zo)tGJpi@z74*USA^n4*RQa5REY_iA?Qx2}-TUaEQIAC7{-4pY`2o)?PVt4K64hLTCYVI0%0;2J|bvEG~YOdrWxbA9bE{lE3pT4R6cJGScNz$YaUqRpaK#%bi(v8%f@NzLOPdPjNd zqq(PM_YMHo=ti*??Q?d$Y9WiKkF(c*R`KO;CuVb0UqL|**sr0NGp#jMj$zevG`rVa zT8mIm(OdLg$YB4CL;H^?HR7z<9iclVWZFpv*a!ykPABxjKXkt21KVD=fXyrS{r$7` z^J7LbQ{H~;NYBL|dRMPKWcnOh)5po|^r=(HiwkV8KO64=EBVtvDjkd1 z|AEu#e0H2F`>p-zyunvH*DljEIy03GnW{wC4c_za2TRX<)ppj@bO<(xjmRkONR%TC zg!@BheMk1EAMAzK;<+Q|;E3u&9C-4UQ$9;Q(e91$a%8GpM#nT9@u2)swyYbQEt@h2+Q|C%GbIXz&Yd;DHKmD{)FlI^i z^7&(T?CkKK(#QttA3ON;TR*O*Tf*t2`{>Oh*g^Y7PGkTz{n(eMoR4W8bmH~cNp@E1)9 zLlE5@I=KF$HGrdIP_vcSKhRu3ZtZD*zZG-_7eLZMASU3HoCd>_i2Vp35S>@K5pltW#3-z` zwzRrb{<(41wFxDWl77B(g#JVFsBf@+Cr@(>p zX8Ik{l@AfqquNcp(<@K>TIPQE?n`;s+0gxMpGf&GHUX%!hvBrM7AQ4Vrg(jF%IU(~7 zsG$p`el!Hi6|$s^jN5Z5q)1LXhGjdBRsoo4%;q~X5O^#ow<1d4mv5SK5CIa1P>sj{P-9Q1M7|ww2hM!&?hSeqiqzL0W!FO*1DyQQHpB;I7P{6DA@8; zw3iks?NbJj4bi`7jc$@K{T>s->x{tbcVS#1P-_bK{29YR%XZ_b5Z7gd;Z+|L>=<+x zz%s~1Vn;Af2W4BnLNmLuQ~cbeJPc@$bjtwh43*qQ(_jO00JB^X=r^PQ?AtV-lG3_7 zN|1ZHxJvNc4OF1ucJBo3i|4o}Fszjd9|TlO4)#VGcZxC@<0`UI$8wg^`83Xw8poVQ z9y=73&@(Y6c>C&xn2Cupx`xlUK8)w4;Lx#EAffXmYxrdI#ebn}A}B`B6#A4vni~A) zdOWyCA!z;QW%}5^rk1}Y1)@l^$`EQ8B`x}Euitnbeedzx?-dNEG7^_HEoU-Va3*c6 zH01YDzvD4$VTdssMOM<#SKm%sns;kyTP+oIw!Bcc&sjqk2%wrpSUS?;LXuSW;gA>W+W%CJNF?hAr+ljLt+#? zpLHI|HzDo-AQ^_cl^m%D>=mt49@Eo{UugZ^MYuuzL<%54+_PS zOVDtNUI~}%x*85(R+;y34k?tFC$8W6`E==+G}2vxxfLJ3(nTpk7>V>I%4#ij;CZ?zz#ViO57lxy%TSa@8;lZE8W4iwbqFsc zdepeofj6cA2bRqlH2UvAnaWfzTQ)XMip!`b9+pJzH(TDLw5c4MZ*4 zM$3mzCq3)gf`CE$qGKVxMbRf3)KMe@zVQ!sAW)}93l=(PJYani;e05tK;1ob0_rUK z%!l83NrYTO1={D(+cg}H`Y*lN7>vVx?j?imBW!Yp`9SZaEw<=_zON}o$c8clyg&ER zMU{Y}uryLPc^R!hnzyO3w-}qVL5Drfz54EB&Cx+3d;rx8aC;6p7p2ot+trEDKBdiz z=3J%)Sq*jX&@I&BOsQE(cjHRrL81i$*|m-iRA4TD&={q&h5vS5-isQHzZBv%YBV|* zC2gbyHp$D6(MNW}Dv8Q3OtG?|+KB>7k)yeTuH^E==6^p)XK!D1jwAZ=FYI$9;_QHX z)sdBx^8l)BA=-u=v`T)V;Yv28{~zwFp0ksJ&$6WFcMPrU4nuz7MU?EmlHEQu>xDTv zg$eXAO*JCEQjJ5Jq1sTLPiy5>Yj+yd)ZX*WI)`>=;jvyWa;%`RT1zGkdzLq1<~BnS zIdJGe-ckLs+|Luq){$=^4#NgyH`9Xg`G-bxBR?0b>m28p;-G<@5g5E@|P`c5n< ziS9i|A}YYI@H%1`Ekoh7lS7;mfm=qQf%s^}|6EG?1zaFO%=14l%1+?|b@Rav<|ET=S*nW}C*BnU$WEm7daWL}KiK|7;sy z77hhkWBH5xRrc61qe6QGmYP!)p%}Q4QpvSD!R(9J`Z=-5;+p`H>;YQIKN@6YDcxx)<$O^MPVRQ+izK=$Q;Sos*||Y! zq?Mc6|14$C`~`xb;L-Ewfb;LgZ-(oQWzIiG5$;Ei;pce}Wov*M*mBFF5Hd(LTF&5yF4vJUkh(WkP@3!RNcFQ!{T$Bh?nU1sL9bNdu>jRcsF5^{#2`|_1qXfAH zJHeI5Sj~YJylaY!x7>Q^rTI)f-3I@Dh+$d<2bdRc;nx8dFIF|fZa6xyglc|UXf zi@&9%y?`GTF8-*A8!QuG9YV(!Yvl=oFuh3Yp}$6qVtAV^VJ6Ls-eqH~6PcR<=yCM4 zl`@P}$4wu_xB|38jLbSfkCMkkHys9iniBc?4WOvp*yvkf5}Y-(Sxll8jvAjZUr{_@ z!A5g&iZwAf0LRZfOoS)7#^cNho5*)Iq!(arX-or^_nfIKuHsuwp zr{IOQb0=L}4MoApmI-MM)wJ@EY;R$pAs)I*Yp13`Ngl=W21-7X_Bb2VLwE78l@D?< zgr3z7D9}b()kV=WU2HJ}I2CX$e>&Pk@glZZ6gShYhTC}BL3^Isn7Np~C#ut~Ufowz zO<#m63GvfHs_PnP?a!P&wCm~98V}N)f~aH^O*iHg5lR@d8~$j!@w2Gu`{PGGrVj@l zQGE-LIPLjBU10BJR89-=zMwsyJ^1nCv}uV5nm%xH(*1nkv9#RhXvf@!#Z50_2ARZi zKV6#7r#4-u9WNziVEZhxlueY|WLzd49Y=HKR4x6ve58d!(`LK$7_FSm<~)F(T%Y zAo}zdJysMvDKggE+GO-`zKk;NduktiYUJ3anR-kyE9P&<^02`5$<;6int>9x&6(UVG~FAS15XChl4k-77U(z;++Y_#jZ)u z7bm;gYyvLaa!R_(7@GOUeWTXIx81i%nj#AO>uv}8&Kfr(J$LZF&1*OHeG+iZ+|*}$ z$Byv6=5PCozb#H#mD~=mWr1S$rZ>7Lbi>O;bal35P0A)&%D2g5Jgp1wEfA&t4A+)# zTU$pz(cboBTf$Gt?GJ96`#ZchXQ!s5-b(J6J*IEwriBto@Nk>4eNFguw_PFmDLL-y zB!Oo}GW=I?M9cRiZ@y`M!E6rHv>}MX*`NKvwiJ;fTs-0G1ds6woL%{z?l(P~#Jh|l zkz!1OXQs$(E*43z2D*)sr^3l1xR*#$E(hK*`U4Z%x?kA5M)ZOR$H_9$fau$lps1VQ zEfVZ55vBNxC$z`g1tM8_%1^zUTp3Qlzi2_wTi!blvI-9 zxAId$p}w}w-~mhiXHy%`6SPVtV?^;Q%5U{8yLz-+Alr2_7?(O@xkzQ5;i}y0+*H9; zSVDb$0lvjHJ;l!~wc_}rAvLr*bhQiT0tXr&b2?qIR=}I!j$Z~d*I=iGJL7cz50#Xy zITwMwt78N~$oc1n;YdsM<(=MvYi{9}aj79*sw>va%<*@*PH}Bq1mSD_6l_1Kv*4i+ zGY)6IVLr#ebpU6fFy%X>d3(bmfTycc?+5h#BZYa%c9%m9!E*2~UTK({5UQ-g9m|K+ z4~#=gn^MDp-2&biRdf$Myx)ZpJrc`Fxrlh8i&=kZH?V!@b_q88a#tGyy+|3+#M3JV zuL3PZwmggmPJeN=S5RSQikUrM`&$64Ev`>7fS8m}YB=brvhqjJU??~w@yG6BlC6y3 z1n5CARQ-Fe@j2`+elK&3nXuf-_roz`O?+_Tn$uThc)1EuDoCuACkaU_f`Nc5b__q2 z3v(^OXEi5&kB1d76NG1nba+Z~FnHU;W$eCLGVje)7mqhQKD9j5=W@kf9wSBjcUu7_ zA)btJ@m#HZnP8ZC?5V!U)!x;7S!8G1OxQNS%?c;T(Z8W($5}enHkK|VC?RTJn4s6M;Vvr zk`87W2*y;*j0jap%dOJ$HwBSX7Ad@P5SP4`KVmr(4{QA}Y~}j|ksyOE6vG+%yQtKanf?X^yd(tyCRSUt6J_%|B@<-`Api={r;+mwM7=n z`~C(-lEZy9cUBXF?#DSLbAA@yzQO0-T_+Az9kMhhlZH43OcDQEd)=LdTt!g&{q|T( zwq-4=F%TFwK$~1v@38n=1l-njh1bR&?bINPWgKIsHl~|$?(hc(>SVWs>fe_ih$MbF za(4_fhDobCrzC@|mUXx7cVaiE_ADD5Df@IX?7ZWbv!?YA%WlhLcdFK%-n{$!MonclQhwry&A)&gq4} zbVGs8wN;&p84T^2j&f#l`Rm;W`Kgh?+r2p2>yaFJplm)RzAk=6`3isA)w|fXdCr~< zZHW>;#G&PtZ+|o+6yO8kxansT=lQcvzYgY(Ns|IAwdP%KiEv$2g7Mdb@RFd-+p#Z~= zmPJcb%1hTf1BX8VPT+cruO!c=qK|e`U%9+*mV9$&Nt9c8ujT%_!_J~8XZ7USOmg<|XdBLpzAX?= z4%0R?=}FYU%77lzc2;Za=m|cGTN)f{brSS`v>YiBc2JR>zDj;kp#eq~SsR#``1m2Q zqq_fh?w78s`A(|cPtcA_R8@{!q{2~wrtzr0*Z0Z~&T67Ym_;RmiPcXb&g3Jog>9x0 zXknxe3CT(I6mnu{*a=~Ynr|Qi%zsHjD54jVn;4*JMwT)IjWdD@M!6W`5k&Y>`d5`( zT59yl@eRWR*A|ti=r>#{Mf8K}3jWCb68$Y#K&4z1fGZI-MO@r`=9wf!qzNFSfYD!T z7lh$HK#WKTi^>MMp$;jf<#nwBnqGV;6u*P^p{$kaRk?2D3kcz`0#%WM4r&%sJN{0o z`(43sX{a?Szajh93JtreH11bK{U=}^?1E!dCiD`~M!l;0N@j=A*s5XmW+M{#`cw-w zq$k+7J{6X@UYo)$K9=3*kJHp;;E<(~PhBU*X<)=7hpBh@IDvG!O;I;I6126%Kh;-> z1ej25X29pSRdDAW(`maf*A%QoCTdZJ0HKEi5A9xK(_9&r8Y({edWNq}`A*4fzg-C2 z7Z5Tfvgmt5*9P(?>mJgayBPFHG~OnR*@_gsqm01&aB+okQ9ol zdZ7gQyU}|>F7_xJ3e|-^YOzn}#pre5PltRHnL|!~%4+b7j4vR_zM-4t%O*QKOOP`N zsa}wnQA@KDA$23H<4QY_Ev5uXtdTxZ*P(*~i)O*n))=diZ5AnNXzoa2$Y0_?G9;wl zKne|N2Z9WZUZqKd2u4p(Dj=KfWtWP&XJ1$cF{1AEB@W z;6ep?+Jf7wQi#Rkq$Cq={&}&&Kfd}pyojA3*C09OpEnWi)ZtL)_>jyqYTxwd4LTph zp(g2SWbOX56mT8=jvjr;r;NU%mr4jFJ+g3#h{@ zbQX%l%MN|LVn^HoacXF9bXZBmZ8O-A*rIfW_;_k4usFJ^aAHX({M9{eUR%kOJ4oVz zXnu4sOUSuam|gXq-iGw`*hQsu(%3l{Ywfuy4v=lB1{q&-Ln=iQ@dv)*bBT*}U|MmM z8NJ@ySQM~J##aO@uU7FZlBoZoF<>*nUq~tJGX`Labu3e$^Sv0b37=~ADs6m8`LSYw zRHgItrMb_|GuV7_0=-7(o@UdB_6Wt2?v|n@~Nv;)KpE zH#rc4E1)cZ8b)O{ie4*GdAx9p)T$Hg(3-jzD;4Kj5ml?*?JG8rB~MC(_>rKvGHx{{ z32?%0_h$R#B^a6NdOZ!xl>{lECa|PH3-B{+>|TFrrUwaxXr7*E(i-o~O~|N{TVv1~ z5(-E@HDF5sj7JY>kaX!~k>;JV*dfvF0T^-P3vx~UduGWJ&!^rRx2V7Y6R8@bcZo-S z(pck75I-z7p*{@Vo_Qa+xsY^knE_T($O42TAB95f5v9|f(LW%}o!~2_(^t|VI*F`P zj_69!zoqR;Qn1A52Kp9@quD8=w^$7}VDy_wWI~=M`ZWsDfYJhy*fa~jlcE`cqm}Rn z$3}7?*+_SsDGEjZxq;+S#H>n!%JvUJGNeL722qvR#ID*#uK%YdQLACwD7O>4+C+N1 z-dX@;^g;qDrAe;N$z3Vb*o0?o|FJm7$|HGP_0G|HA8EClw*4QWLYOk=K6Tj}n%Yf1 z)!+Z@0F>>K{rj#XVYsoU^}n!4t(`Pn%odibNYF0OCsCg*G)+86<Ry`LTGXG8Cr}XvZmUR$3nGFkZ>(!MR}!E-Jl8iW08U+984s}g&8^rd#zGh9yFq~qQ`4Hpu+F~ z7Hkh#a9zsFL3najJryk@uMKZJu}=?Bw8g^A2W6!WcbxRFZ7tN4EW#m~Tc0AnQbb5x zv#lhlx%i6TW|ve1osasm+m({*$~8zu$L>n52u;XH0(=;i8#UX6tKReZXV*nD5rRA* zS7x=B^>`DKsBPv6_hb(#1!?dayZxeaHP7?IH| znk)@VMKAO*bQx&IC(3!ClO@EXeBZ$?OIUUS2Cwu!g7@|k>-6O4jl{7 z1@yxlS9C4GgFI(I0FxCP6~NVW@G#LJUR^Xx6!-=Z(o&T;2U#+QvdY5Bk(TL1`tt_3 zAevyvNaO}nfb^-5WbZsVVK8=}9ppmw**tFGG2`(P3`M@3$V=ox{TH*5ogw4e?18I~xK^2XZmjeD~J72HB&Na~%@q|`4n}{S5O4byFx@Ur$bAXI` z-A0O-(Hv`nCJdaIk*LH9hY5wzt8^C9#Hz&f+{B?_u@R#)L=4EiYV06AAF96=`;hAN zj~#~!NbRbEJ!(ph80>{nmD|&n4yRE}fm)TjQmnCw&)Ra3GzB?s;go(0TLVs`0Zg!2 zTY!=1jHO;VA|jUuW2JCz2gjz!(w>Ws1i1vUEJ^|w>q}?W+p8d+({dxp0()1sQdn+w z+w5>Qf>&a+KHaz`xu(x*ulScR74lH4p!Zqqq8)Hu)sn4o($HQ&JUmmRn$f9n++>mS z)TElM2WzNhL*Vy@T49sQyl|c|_t@vTNwAWpEW%}Ak;YmR7^Ml>rn}itE0!gCAzhWu z9Y98UTZTwzhU+UW1vX|irQ0rkBK+N7)s2q*86ew0J350+>{gW91gY=Af=3WmkthVP z`W52xY~iXvl`jtRYBUQmjQvVgNk}n_WL8h=Lw-u6>B}4C59`5SVcGDDrZYWZpg0IV zH@Z^fTou`cn=~hkIwUsJA&;F-muy1*F%i!Cjo{2m@Wp|5@vQJ+=84y67M0=D-{YN0 zTL;jcMGsz^CvG+Eie?YQ>Z|m~+lO4;-L`XTbj7CoP!|^FS`ql5C5TG^SU@f{fCQio z39|yB<3=w*1~OXg9^#@pNU1pmJ3$nZ19||G1PNaWndI;3s-sK`-D;JKTt z`%;DdfBp~Vl-|Vn&>tqiSh_MRS6v4J;6oueeI(tD7T1FSbpV%Q7+!2Xx!6i?B2p|Ky~U_eR( z1kF{8%?N9Ur-slUI8fx26R%oX82Go{F4UXh5`dQIe_Z2%1=XZo<#^tNWblr%AUhA- zq6fSOAtD@^nTY6|O47|v*Nra=#L7?#jvT4aeaaG6;{Y>aER_qB_!T|yi)K$oTh?^| z0O$hgRYH)v66}&zO}=4BZo~}-jU|A8ee3Nx*yL?P1HlbkZa@gZp;fJ2DAAh{rC_KS z4j{yK^idC$Pog`(2x$PEAn1@% zvC*XRl!{K$ZHqxE2}Ppg$(*v4raJUv5|uq<f@UpT*wH>((+1w7>lVN|LwMvi|j1C&TExDq_ipT@8(u$N6a54XZZlzH0 zRFYPC4G6Zh&)-^wIOL!WT9AZy!GoEV7g_}ZEN*eIJGM)OFt|zZd0)YS+KTx@u zFBu{ScpuDzI{=>*Jv8BgK&>5g9Bi~#j{MG09eBMf40bqVnM<{97B&W$MV)&l$vx4L z0P+ofUn%s^Dhtyg)decIOF~(cn;W_u6cfoE!0Sd3omAj;!yk8|pK=8455e1kM$Rhr`MSSc#d*s^n#0om(55|F)9Pp(+Dy5>{Qu7$fw2ta@V6Tvr-e_>u2eM zf!Zo*NG_yc071S6Z5owANs_(?6DZWfm&Z$Ig3bed-smtsqY&pRNs?IH?1i)nh6dXg zuZDU`p%D6~v)a;UJn+&`M>iD`0c+S27=6+7)}Sef8+*`;r_^rXP=G5e(AvQ~oq&J= zI~VzbxklA?HY>UzC{`#1c$<)(o^&WZEDp)4^qs6)7SJ7vHfrv?^ErV`zw zY2MAVv1I}nx~ZeXt+G2H%4>Z%6NjvZ31rpj5_7IWNl1=*O(^(uMie)Kwx9<5T|Zi7 zb|Yq9g}LV&fGV-f z!c`QS00Clb76L`bHgVauG9zBpL7+=|#zb#=!3}6wWaRDWpiP}4A`@6%c*fD2gq)eR zN@W81U18g<7VGJraDc~vAOVUfv`flnmG!IuMMPYrq5Aj>s5N=z3QB!SG5>#-ml`4W z3DfnZ7`qpK(9s)F48f9B+2l&C9Wk8C%z(u|FFGP(G8Z@0)%|x5T1xxGWTT`kTYD`a zr>mnj8h3#E6HBt@sL2|$Z7--a<_5`cDF*}^#0r-|?*sJ9mxdQ%Hc0?`L4*0Kyb6XB z2TTEeOGjd}3Jd_yJwgq&-fGVsI$rcZ120tRc;_j3CW|+;RG#`iZ`|%3Y#G?F zvsG_rv4~>>EeRmKFc8QZ;`0setg*lptK?Z^sV{XKum#Hf2cYDynW@;Gq;|U}ee`^}7a@m5WuZ#h z=S!$0m;Pn8!Dinl2?g3>VF(m*Nilq2jcFHDQ6R^1RZ7Po`mn}9#-R5L#~pwhteMXNhmBe8er)ysJM#&Q8 zZwjESQbrA!AP0Ulv{}#~F0E+j6Mu!K{{vydMvDtUs(c-P)&OweyMq)q;B3J3f5lim zJE1G@lm zdC0%)mTR#9E8?%>??PjNSQqH&e3x#UV! zMoP-9;>x#?U|>9W1>Jxb0*xXTPt6kJTgxch4lFA@mPxb@D!+jlE%R4> z%a@srK^HSOY@1XB3IUWOsn9hq`ZBnP2T*=i2u}SMyCJ_?-iK6%MADQT(2goXW$MJ&XBvCsk^N1Am z?wJzYy8;#moHQ^MxPK^A)oMoq@;Mv5JCs7=5iJwFpHNZ?#jhrzK=*)0>p(nzPpQf? zO953a*d(}3gK)wYn0>fFW?rm>Ni0`}{eL{|*Oc`c~h>{32U|B@6N?Ae~7qmmUQ6!&d#RVr`1g6uUFt$?x zD{9;io5>x@lhoY!3Xs7`WZK5pp$l{|`UU2Y=_OER{HNT((r*R_?eF33^!w2D40QiP zR}v-`gfJ@sKyM1fjK6P$~x7K!ZtFKB*1T~{8 ziix{^!^5e$TCZ*Lqjy8CH~7b^GD?xkTy6g9?(0bE-4hD1gK^VBenQ>`Z{h+jCjcOiCf(BIk(Y2@_sR(@W144Hdt!D4ru4n6_giX(H$S)#3OcA^!i<~o`AkU!7{2lpNE&zpRrr5NEh=snH zC*kp-gQf_H=ATI?CY%wt6NH5F;SM!aapw&+hOG+Iix{|pRo4l9#K2z#t(npXMM8ni z2RO@W|5xtT+$*tqn=qtQn6NcjWH_;D3~?1UQ$S$0N&O%%dRDl~R^}aDmag+_RtO{3 zdBMuHY;F%w%Dh@}|LYnD8$y6LY4F}uzsD;t16#Owr7y{wM0l1Jno#T|7r)%3dvQA{ zHOh&GRR~J_P!-Dd2*NI+@IeTb3mZJdm?Glm)d~l#PX#Mimu}O$Z9n+6x_kAl_7FQS zz%PUTK(z+j$8GEzrxyvYROJTAd78Mr4g{-7MaDN=bd%;x=u7l#D0n4cH<{@6TS?A= z9U@-Qko>L07N_WmsBv0H)E&?jsntGOK##s5?a*)HBy3>1TOdM0j&3(5lt78?hK)0D zha5stt`;XdhIW_%L%9a^2k?OL(Sn!V28fu1yrwlmKUeDh)NOPmlmKHu=G>>;Zd4nq zAv-w|gdS9fzD2uZ2Mb9HWh~B1b#ARe_l(D3KprD#EZPx;#N(#fV-h?y_&}fP6Bsij z+3_ADBrr7NFzj$3`47&8N}xzbk`Sm~Fq(El`}hKFyCJ_CVwX;BK({)y1A%b7;t64a zHs7EdUm)7f7N7~lOEE%?UPng-M}%*nMJ&+G+-|IKyFZl|)Myj7*8q@C;Lz%|69%?G z2h}6Hy`3$Aq8;KwemnG#BD@beGvdi=BlRt+VN1pr=yWHb=YP$3qI$;(3?FwrP)r&z z5X@)YOpQ_W4+rG_6Hs3Qm7Z`r45hmKe4LFzx}528pkjg6ZA2222Z5G%7%;;?+PV{3 zl4wbSQVQCGE!cPqj1YSlgp(TL3Jc4~*?T z;V2wmf^%yv9>!ZkL0VF?BVoG(%LNZAca1v%P+gFZLj$3wJs~%tKvkfw#(U}v=uul* z!xp@Zx2?gf7!nE+mbJT$`OwzpgBon7=jZr}wheS{Pn-bi^spXcfaayZZKQyM^}}Yx zNuZl(YjFF)Ty}ec=ehT>>Tc}`&=^Ch5lynf?V|0*(o!&jm=2u6*8r+Sxw=9C4~QtD zaduGN4@b=+MF9m{wLt}!7w}#hgO&1%;z)uhrCx1P)0I^F_vxOepQ$~>NU)RH$J$(3?WeZ{a^`5ejn+a+63Lv}d69k8B8Ryr%TS zc`D!~*R>SfR*8TKC!vvNg9>vTUq|uvduJ3*Sk8g zVa!*b2X>^>BPTxSudyv=d3In9H6leWHC?EY=R%LZB=-cC3JjG2z*V@4Ak+dYeG-c4tp(s~W7&=>g7t`LV-7<)v&fb+&3hVcr859L|!mv+2{ zagZFKKWLW?Csm2EZf$FoLL{#Z(pShTot2BT`z!X>CDFK*WA($POA#wa#R?(g-&%MeO*lp$qB2V> zseS?0U97%`y@W-CbyW|5I(;_q?Y1YVCK_u=XBujj9CJ?K1x1#F>~vtY#U!7IHBEDV z{%T=5j%SQYL*0gg=S|?#y>s@xu>Zt@Y33JumbcXkzg7PlG&MK+;POM1hX0qSL$14f z$4E-E%R*<$eE-m_owFKg=9vJu;ZF@(07ENn9 zayX}<&H&T0p-T?fJqh}x2E~3E^cu7TH^4>!T(KEzARj?L>Y#|OhAuz08lWcn?0ApY z>%bWVfXIzI*o#B=$#`KwK6soRY{^WGfwoPb!Gr&~5YIe42|mc41Sr?3^F6L8gQ4|O z(-s5W5ZGC8Tc#YqOb#m^>(OGIYo=~NCcg*t9vja>SCcr5AJVER^@hKQT zqN|~{U8u@t>Ce}{KopAi={V>m*Zf$!5vakVec9WVpm~0_8uKfk{gZd*w_BeOD^mJq z_Mb-Ruv}x38Ug{cqCcjq=Rcv}yIp?_Mgo zF@?SVFYi>ox#j5{h50*g>RT=~-)KUX?DiM81wXDr^e`@y!`YCT#oqvh(xRN7cDW-=#B8 z&wp!C|GHeFoP7VHrbBC+JK6cQOE-M{-I3g*CB%IqdEe~ewxtg=&bd+YOwoj_C%)(` zQyXRsGqh{hYBrLSjSUx?$1U|G^6E8<9XCvWRn6O9*jeJ3k}luk>^GMsk#{;@Irq~d zo^92E_@zw~uAe)#_3~^-(V_i`pMCxGL!@NCiGZ0oK<0hJ)P@G{WtPN|yA@fJ=DdCV z(xt6S$<}vvzLcaTllOPdePW0D9`}V``OHMm7vFZqGFR92n(OBORg*C-?uCw@O+=Y{ z0|~QjnZCO`=GnXYGGblY%N0GKs?R?(bzF?|P{p*kGrwA1TD0w1ozH>@c${=FjYd5n za0P8y2j8;Zil#+r*CSp3Q~7`|(PDuyHK(|D5B#<)Ol7r&Q}Phow|U{P%VBP{)hhkH zR)(m>A&$?Bg~Lr;Oz=QA!O{Scmxuz<@w#<(G%}OGDC}&dgB7U-i3Vj!5BahVXe- zc$^8$R=B#Z{6-KgXcU=l~Nv~L+NIXQA^^EixIkjg9|oIftqDlKCpJ*#@M zi0h1Cgv%0PhMD246pNrbcVAyn>Ez;;yD|o$|D6^NruMateHFfZy@EH=7T@Hq^M>E% z_~R#5tvl+B*%q=tWg^m7YThTxUtwx);r1{!-Y#zJFqehP8Zoiqrk>?>{0bFM<0Yl0 zxjO$C%(xG5Q+T7g4{@g$>n~hh?8FgS;U`{TUg#>*oGhs}ed#D^f&qC7mj~1C#1>8y z;|g;p_l}!C<<&t#eymmhklJPZDX9R%0JMjq$IY&`{eO{#YoGM<9}9;JnXyoshdcu5 zV=3m){AQ>>1uum@vGT`ABDaG`IwvciLvzo`mJCjWT2U&IL8}(DOJzY9|0no|ra=$? zZJuNFbm-~&1gfzLe#QO@t6cgzBAjI5pg6+J?iXQn?S9Xy^h>E2RNwP1*S05#?{9H)cB%mhoHOeXT z%H}T~99;XXsy`P2)h32HxUIf2n5UUL=jl5ATEQb$=a-ZJ;%j&i*7!&5nH`-;aCsAj zEhNqQ@?h`#kFYzm2j;%J;J&?6_dBZ{@4eR5)v!LXVzml!C=jTaH=_6`cQjG;2I=ga z9bc*PG#cMaO!|A*UFRr6|4+3s!EBPO~AB8`t_^1dkBoytu9d7u8xM}S}N+-=TO5{nU_`g^2z1Y_;u4jfq; zSN205JO8g8_B?-WYJI|>uj|ax+ht8@Kpl|*#6^;U1aFa z8}y4qYk!3s#Tkyntd?b&P9XH1YCXZZfa7ewl_S zAA00c#acB2H5@vG@%&EfI6Eze7V?}H?h)SB50)7eWd7tE6|chj<4V&})QS3W-@MV) zv}nXNY;c4ME;9I(TRw>VuqZO@2}hr1-g53=MdJSYF?Uo* zBL-cB)1Zs`bEkcGw`+eqBId6ikyihcGZz`4)^f`fd-vrW9r(`_cK8sSkU^Lb1#`Ui z>qZS5|MA^{AGWZXABOUz?q--pT!?FB7QpX~Sw6#4;u$?6aggh8mGdoO>N&;9;3d}2 z4GLl?b>;D(nLs#QGb>KNZ;yq_Y zf82YF3V}(ogZ01O*bI0M(ZFSW1BifTZ3PwPSvMVsByV8?T^z{?zIOK1f#?JxXvAY& zWOw`?I5iGS+tU~9Y~{W6?cKb|bLTt|iNJ{qXbqvQry~UsT=}@XnEQv%-IbwZK0cQB z1%fdfde@<=JAfTVH#m48jz&_8V-m0TTqIlf)N@U{a!f044+7r(w3*YZ2D!=17Pu@< zocLRhkH{vWxMG?3W&PY;#`+s)iF>xb{_~4uT;{c9rykn{Pj1=_Jn9jN^I{j5Fzn5{ zoHXYCDNSYPl=JJF@_xx74TS@*zyU47-NS6@IK(yHAO8wxxi5Z$^GKnhVX5zq@9)Im zG!0;Kf93?kn7X5P58cZ{*o`{IR*#c6vf*G^ZqqVSw{vw1MspX-Jq|%-_~=FU6}? z7CIaD#Z3=|`u4*7z_N~3>Ebb?I*)aIzSMP`v&0v>+S=@bG2)6)|78#V$?0(Vcdd(5 z@rD6wam5U9u4E$8?QZwkBy*0Ai4^0Uu9pvj6R|L^7#Sx^We!KUs<>p=q}1Pjb5*rT zEn(&1YpVe-K`w)5b-p1B_f=MTT4c#-uEuZp(xPCG=2cD8i|yQe#7PQs#a3Q>#4#pUm!`?*dsfkb5eI*^AsB0?ok;b>TtGQix?ZG@A zPo=w?*Er0znme#3t@3}H%08^FUsm8dlFKSA)1qW(7&EReGT0yg`Zeyrf~DJv%5?I# zoCQ8|G@Wc%yB520kQ>R1$@*d7(4x3(3%BS^)rZa;gu8SWL4io#y81ri!QbNk5zmn3 z&aO@4mJSX!#b?%Erd*fP>1*Ck_BoHP8Ud8mGHJw8!@91f%!$q1(fb$F*6&AP_jjf) z%RL~@a{Qh%nPwb)oS8(L297S8)N%Kce3ZOlL(P6Q*^vVPmTS)~TZqB5+&gLF*h2%C zGI_+(#m*e}Y4UYQw)U<94wUEE6lx|0j8kVWo&VIzc zUDE#u6*~^B=Z!oxJ<=BYh5&Iig4Ug1*`@6C!|L9iy04wb)c3%L`F5YH5^0?xQ?i3s zukuH}ll)~c(7xf3yr)8KNSQ24VXQ3I%~bKj$1Fj{dGmnd9<>qa8h4kKhJv39kcD}( zG(JAmUo|Xd`myjGUdZ2lKo|>i?m~XJwaPA);dHyTX=MDK$Q9{`8KGO(7YkT~_?AvM z??3w&e&USZt~ftW?Q0X}<&I<=?-5q^ftn%6F;hl6z)GO4-F~(5D_CDtH~`~d0EbO%`uTTF~_cbwMb+Qb8;UQes?cwoRLpA(*7})yiePbe5!q5|YLc zqwGp$*U-h~R^?S}}sLwCc?5G3HXP-3{)tw^zce(i^?i~u8 zu3l(lqOY7g#=Nlm)aSilO)Dnp%TVLr9U~3ZuU!AYwa7!rS(d(K($_<0HP4TewRXnn zdDn-YyGcQ_=f5Pz%_sI;`PZ8DihIAAzeCV19I@~HyMDN&`M77`;^vQc?*8VhO;G4( z2Xsb>^rg*S}nK=fb6_fghiIg#Fz-KsG`D zR0m3R$RGa!row`ZAEeS|E4|B^zWx?gB11vNJ3nNqmwa*d+T}pUD~(_Me)3r3LhAwG zA1RRU1GxE;J=Tm@&K!2`*tz0F>Gt}figukgZ=6pE)qI|%>)*{@YJ3WMe)K4Q)iYKF zl_!--LDe=^=UZ~ivt`>nahmYW&+^E0Qs~ABpOn@q4vGZM3a-}kM&y>BVO2&*B_2rtW^v%1@ z{bSXh(PC?9GaxSS-o3lj4KdyGxX0Sa+eS`mxK>s0wnFvokB6*ATgRU6M~P+0yMyJq zocr{gZM%r4Z^W(RR(?w|H{7S)x1B1XJ-jQr-uj~T+e&ha;!kgc?o@NWP zaze`+u2sPl}PrFc~So-ql%z1ANrc1Ne6{d#iIm>Qbq+UTNTmeKKZJI?z~DeKXKYsIe77`>K)xd#mZaOX&yD zzA5mKOoCXa=c>h6j=#^EC^xTdxwZ1JM%!p7!f$jL1l&%>+y6EJ!v}SaL_?!MVO8=+Af4t?t4zM6! zdRvhqGZ*}^DELsb_K0G;)O_}g7HB4^G&^t9T_RQnBSyc?r29LqMt0!GA0HpKv6T-@ z&-m??fUcpsHo!OjSClk=_ho4okj=$F&d4bl?+&Hk89DlztL5BFR?;#kQLyG>*V1>6 zdRXBHlym0oA2?fj9yT{0X}SLH4p{`67rZp`jX=7wIQF@}dDph#EJicg8X)a%Ek;vLZ{+mW-G^9V6pZTj-zDhSOoJR@*QxUt>GU zdM=+`n0ep#kAJmZ4xKvt?WOr>io@?01xLMl`FgH#$K3(vRNks)pL-5AbA}LTnSbYt zul#t0H5N6tc+3zszN)k(BKPB-tc{ai={;OZ2RD7^Y<>q<-f#IzI|-%RH?3&WEAIel zaME&q6`6ujGH_yzthQ2T=PY=5T;ouH+_{s#fIV3Zg{J3PAQo?@n}2)nsJc^W*7z_F zBfoJWMnYBB2dFHJwW1ft?MnN}oz|u<9=>bR{QG@fH%-DwFlYZ}lx5&D8y>x<%Grzv zZ~pxsPyBwK{Loa(i!WN!@E(8uZ!KGM)JiV(I_GAO!^r1vy>oqq6kv@nHdQ%)Xh7`M zLuVK7gS1@pzq{b!Q6_w;Zu-_P`=z(7(T=@eIq#SRW;eE^Vcahwfa99DySt-#!(+tO zy!XOtbgp>4!!rKG+XgSQp@*CHI{)>{g7Wiy7ccNxKq|jZ@<-qFr|Z}G>3@26W&9I$ zx!1w}aI768)fd<^J~V#5VaQqW;`yt6pIWj_&bdSS%P6{I$Wu|VV^sQTH2C)_&olpO zd^j(8{>+6nXutk|BRqe!I=!kSbHC8nRkIbB<% z-|*iy_5e!q@_-q||0ZCrxLGkdeW~#r&yhX9d}z)KNOoF%L0;Ybzy|-kvvY9O6na-> zSeFM#f~Z-y<~%b3;?z~V@zJ-x0TY?()z7*2UFMOQWCs%eB3FVmR!4Q8&cJa6Z=5WI(+a+Imz{MD@2_xPT0a?=7C+a5sk~>1kR88TFmT1W@!WyM!vak9 zJhO_Qic4$Ri93Hazdh~T*wDMe$-ns+wrwsw(}mJ|uM_&ib@B^$%9olkAaa|&eC8_@ z@l_QG$A_(kS-yXKz3r9&8y zlOLwjhsdusR4oRAA|apT`M*3k5|<8JjrZR4U}}vvIe9PNyyf%R8&>9ZeR&XumG7D{ z8Xl>>yhc->EIg*&+s>qtfFw+3 z24WfBXnHmI>k7v8R`>DZlAtaygjI8OO=;CFjXN4IyDW{3V*Ii=+E>wcpWzUkY9H<^ zB`^Lt!(a%I>?j-3ndeqWVtyd5yAM81e==UCc>RMl10(bZuV5)kvbOF!%lIK~X)Cdg zIw&=)*#d-3a2)mV2j=Pu{%JOYVR{bfuntdfn&WUt;M2Z``U9Rqyr%^CB)3qbiOBHvwlx5DW8E8Dz~INS&OujFNn+;OOs zAFmog0Te0u&w85&vRF>uy)paSP2X)^!bzOGe9X7Oteur*`NV_wT; z77wY}Ju5JZnpR!G6^G%wa}#!sb6s2GAoLR_9G4FK>5onA*WiPieeL^l=g7Og->o7w zjaL3N*}Cxs>wsjMl+l@Le9JuMw&R!9Al9B(cr$XBa$Ec@F#v=D$>5&wh`fIrz>w4l z(1rU4j&C^h+}wE?lQvvAP;x%wL#b;o!hg8F-At8u{Q1BjkfX+?K74bV>b?UVtH?dM zc>pYqbg6Xx^p%@c86WHWqlF}MwDgbf`#O$f>H8Kocivv=S*aL#@8BiGh>sroyMu=j zyYmGXEO|*=4{vK6;yR#x3IMZm= z*uV;{h0p7PDlI6MC=DrcV&n8bTzapxdBlCO5ufRFzLXFNSXA>y3|*akZR1^Z<`|!M zP;84w^x`e=C)xBF*9gUqp2ELmYK7@NKctUP-g(Xag#lu1*wuBm9|poC@p4x(dt7WG zyr53&KdsNTh{{LrOeNb7SC5<&)TNvDS%ZzwzE|3#9J>R1sk#FPoSixThN5bI?|bi0 zb}zWAr}W3sK4HlZyvq6Z&S&4d(lQO}jy09!q-Atb^3qult~WG2vxjZy+~2>JY#uRw z$NFz;U5jp>T>RX1-ip=Ow_ft_#+|)g|N07i81vkR&-C!tve~_rq`VmU~kJulNKZwdw4c7E+cVmTGi^hoyDJg$2Wbn{_%a~#?04lE$SKQA$7lMv^HPf zHx>|3d{xT|PgBN->bIWL9Jse`{^1<`0m;jQwY7fb7{!61mhmG-Jknov&0^a5@%zi! zORG;8XS8K= zOCq$|J21d)SiEg{`7Wg-_AMDHdIv))rS8nygO)MvHQfW#y}mqkbch&p}@iRn@;8 zy!yzUR9;FFLrOiRcb9nMYpQkA-;laz|tYQG>ng!}m^$Ts6 zF9j9nJ~Zg_9AcUCd{9+b*m91EDg9U)RcpoMg?NZYEIlH%KOg(8V(hcb;rYtl@3=&S z7Eb6wZlIhtgXEhDR6xiajHxciO~43>nsN~~A8T(@)GXC_D|!Ga$I=e(QcR!Czf6fH zF+(S*^wYNs$)uzi;>Xe77wU>e33;FBreHnv{h~3v_dy*XdNcCl#r4g+0|2 zA2R5PL+t1lV{PsEln&t(Nx%=P_O$7AG~55VRunqKw#l>_wrnf2d*}NSFT<^61JVmF zMiQc?YY-{nYM_SptB6sh*XQLqj2#`yu?P10#pi7wQbPxSy&nK`6qQ%Dw7(5r`>wfS z?1^&`gZ?)=LfdOpStq!I;)lU3y&lOl8^2FdhFJ1^>l0(@=NzhtKloRru8Yziud7N@ z{bCuC`zrrB%bWaS#-di;8KvIaP*rhNESr5A8Qe%H;}4Ew#K=BDrR^Cj_1!PU7(H$9 z#tdR{T(Ph3j%Q*jwJ#;j_9okOPgghfW*c^6qAdj{vSLWQ;FbrpCsp{!|FR4<`_IqJBSg7Y_TU&K~D&3ChfgZF6 zHI&SDB17n%RZ6Sa`dp_{>mBD$A-J!WngFks%Gb~utl_D=B|>-GTNE?F@5@Umbe-0? zQeSOIDG_bDFJf4G+$|{$Z!ba~#~EsN44|M$#qx=56mrXvEu9>QDN7YpiZ_VC5&&lU zX6FfQESKd)kf29=#np^x2_R3A+@w;a$L(~B^@H2SUTi83ne;uaIh;~E`_$Q!^MNgQ zB^gm@^?8yoX2ZQ09V)HMaB>OT*WId{J}GcQsr6NVa*irJxCBW~RI|!g!QY}4mm^h5 zC*F;^%rdg4-?5kpEhR%rLzPApRBM7r!MZ~da(Sf>U_1rhm@1$|0<4S=PAGjv9ov)S zg)lQ#5-(Q+-oybk-hvS23p>5Uf%s?O=~51Xam97MqVn_WTwZI7)##zs!uIPyfW4BG zpdtdrXcjxZvU2!p$~RY3XnnxgRYun9bY5#!-y?jnsL%~%>8q9LuPOh$dMQrP4^(2c zGg^y{{1`R;pQVGX)EhSs@e7SnLh4N`t~c$EfK zB4%XZ#Hdo*P!VhDi5RSP-cuH4IYH_ay+KT_`dX=7L4N!?pQb;vBb|3EULzpQ%X~E! zBK5jdQ5*LNi}*XF9MD?fet%+&Pk2IVqs(EKt%Tczct(;OSt`-46)nwEcreeZ?e)= zJ8Ie=bd;0k=XKtmz9(VPZ4(d{XrsIOGjv|@KzlB2$~(8*Bj@7tzmSr`6RfSou`J?o zv=Q@pz<4q?+wYKjtR~B&?Q&BhM4NFWqexnD)5|y8(09$&nk=7C7FX$?wn=r&3J^2z zxo@p-1apqo>0Q>U+8!yqbaN^e17^9x>P~w@$Mf#Hq44tCX610 zpGiVpOtJW0!`qYBd^oMi9B5`eCAI`ItPu7tgl5jxO5U|E>9i&nI%Z)3DacJ`wJUYx ziGdH1Y4U{|e(f0u?uNmHMC0iaySCxJ+ork5z71KxFzU*$dFS=rG3Bv{f#hF|wGEQF zZlFGK<$UKKtL_c&+~CU5ID$;?>-#!y1vnBf)Uh37AKDRme`hJ78z;Yi3TC4@B`#Orb2$^2_(5pY?sG~Bf;;_=aBQpPMvYPl=L`g*RnfO zLV-72nD_ESk1bkakm6HLDu5D(%ud$~-RUPuGQ05IvEkdLxXzKOgYGX^xdhX|f6abRBpc-0a_U_P~DW*uK-e>k7SLRh4hCa*^g9aZx ziwm1P1^2u(*6+xXswuBfV>ptjPpb5utXau$SLX=IMH#HwY$g(1XC*_0GUgMdUt;<( z7HMyz97*F>t(2e)^eJ7fs-dro$EfsPX|<$as$Mjt6pVzRri@ZCysuxSR6mv$m8_sj zi6ziZehH&>hLmioie;86OTDqkV3Inxt`HM*`eDkOS&DzG3Q?{&YC*Zex&eh&2nCYa zT}PB!zfLi2~`&qHNJh8C}3g zoXsGQ6WRxYDh8B4$%3BheSofUM|1hcRTUZ9R90ZR0=q;84z^&yTq|9O$im)-6&uc$ zs8$^B?m7R-Bg&c+)YL>d|8+6xyVWaPy4tEbiA2NXlw>Q*Tj&Ee7dLfaoLA5diQ|wV zKltPnZ^N8Zm`cJQ!*Wv)MYY@sL1!lG!Y$gyiW`3d;AQF15rdP103`ojvqE zE2T*-$%GHYC%l*fCK8xCEVG~#QbiB#7a-vg1H@0t1nva^V{+7-$4?#rXWq6Xg-}eN z$mo;V?>%35`p;%>d@66rhOw-df|T?kVmWjB7R*f``PAqtFUa*KV^;uOyJSKt8ES8h zRE1f08GKspPp?x_+jaUy6|lc3hSK^R2aktq<0aDuM*ZOxe@ZF>q)wqho#z#SOHoW} z&9>$_vEWc&en(6dsbyS=WHQtxggx98-8ab$l@u{Z8M=e81FcB4)IB!FWuKa)pBt%_ zdIExi`bHIy9_C_i0p84;G&|^hH-*H{(7jldNIg#gT8C9JPnlZwzvCO7>D8tc)CM5b zB<*i!ZZFjQ&g*C{{^Y+^T0z=3My<|EiSJIEukz>RVE{urJv42+Af&6NtFdHbb7}BK zKfooW;p`a1$R6%4S|ldB`CaSi6gTkUkz_vO$=y>?-4@_60kwtBzB5`|)pt$^BI$@c zG)1gdr6W{cO!ZcrVb*`ox8+B`wB6jlqE#_=2mmTE)ul+`SgqIy90y9DyQj0WRiRJ8 zQp@lIgx#7YRpj)q(@K`wsWqLbJF?w_z-1DpFqPSl?Lc7d;)$K{@N-PBLL?F6R zO7cfSCO&&#|J_oxDx%vrQYQwtUm3?7=<&oOC4b4D%TGgU6hHzfZBMYKG*jnAkX;G( zILzNphCv$XqO^|Nc3))k8SQX-3}*3zx4MLvN(D;iz0D`_#n79Y!h=?`*SK#T<68!< zZP?g;DLGY8m3EqeL+Rl52ui(6jfM(EqV0CgVGJ?eq zyQFNh5Y){Y$)t4l>4 z4eGu+l6|U-<>Guyx!s9Dkg-ps46`SAB`z0AtDWTKdSmS@RuD4)ehI5s5}36Dy}HbK zdc0QXz5tWgG3vtAHkB%((yg?Ya9_tu0K%|Z1AL`EY;h}fr(;xAnU2sWEQQ`6daKdswM^x%h(uYLVY$T*h<78+Nwf1%d$xuDY zQU?~H$~+NM{4KJ!m1bkHk4VDWYbIY5D6R*>j2v?L*Y39$1!zkYv}9|6%&CB z8CqP~9#Wf@4*!zmN^F#s0i8hbTLlRmE4Ru0ahy%4izF9s}lp55J*!pzdNWp3sq9*65FP7VIRP0k|Z=CMRYSO z9=Iy}h5SiV$$xIGi-N5a2BXj#fIH{wtkj3pQH3F8b%+4H1RjGq)8&&hZ!uW=;8tMc zMy#4D<22c(m`@N z-dU$gC3LVB)WDE5yliHveDQd%hV1j4T9pc z`S5M1rIX|fE9q+`i2`?~OQeQk;d8AQ-VM>Oz03mVI;qr_Y5^vzJCzMjoK!ZKU-z1X zqyT>Ztr#(VG3s}j2C1wAi=}Lx;|&V6L#iwRn8IgaP+!fwfm!KZb}re0_Kb4P{J$K-@s3sr0d5H0ya2NQi7G5Sqv9CC@)NcSo`^P z?KH){$|J8Yq1LBAC! zp%~Pi$$w$Czi)iu7?&tqfWDB92ibpzQ?bH+C4CU+ORC%``%m52*(ovEHif`SHNB_2 z{Tn)!%tyOpW$ishnif)d7GJD}&D2Vf9BoFaT#T5VtAOJz?qqubzD%6*{x%K#j2_j?A3pwX zPA$H)-HS9SZ_0=HT>&8>MMy_tY?v@K_keApKRagveYM;H<6KxB{j^v(?{s4 z+~(q`%Ni?bzLh!pOMn05+_Kd$=xSKMF}K?z#KB4eua_ZD&}t23f58g>u2q?5NYhx&z~yo&4CV z=XBT67m#i!AA5dF#8@pd!lU>3k}O{o!IBuOHEgNg>h$iY^>B1_a_>cwYx&E+@Zp)* z>nSN9Cx!4O3qxzaxk#FiKsK9p7n_MAo_SC2huSq9U2^+(+@9VdjM!W=32V1hdA(vV za)H+7Zt%IA?u&=ng5Y{ zkdS_><#{R)FL2b|{>>MBaW;^}a)Ayf!0F-$=6$Zyb3{h9zGn)&BXwW>ca{rlQzIj_ z7D~nDa-&8{0Dgl#8P<4=P7W_zM4WvVzz%*>i3A^u$vLC28T+b)j;`M(Mv&WYsmJsp zADA!+m<#BephCXrtf231WaTDzTUd_Yi&PGmS}zI4k1|X1F3MPuKnNgw;{sM5D@w!c zomFBtw%}aAN<;O^k-VSh<&TE|#O6%`rG%jd{ zOo~83iqe~;WUz^0-CV*#R?FG1IGU~AvT&o$)$m8#%hdf5*h?ypm5^>yA$9LWhM$Ql z{c`V9fP{+JcD*TEr!*VIMKotvv;6MIJ+uk^F{esCfqpcbA8@FvdW@@uh$c#=Ilblb z1GcI3T7;2rY|qx^)!8m??D*6kW}JXYA^iTyGH5^zWhheptr6muTLRQKljd>xF`$xn z5`G<{eqVxn2mr9Nmm(+3`h*QHHN!@o(*0Ux`Ib11X#wLC@&yn88_7LtMCz?)24nJc zPB>=CmEkM__|HX=hz$6Om1-G`NkdGm45;?gA=ioig6ruCYc?^JR=Jzddp9m_!nCRd zW}Xn=2!R8v%t{%*@uwpZ&yN&(#jk-wVA4XGw#tB-vQ*`o9}wCQfbUXkp0ImP{(S!y zOfTznvn3HIoLaqikyDm&H1!{b`?)y=NJF2u??_Omt^83ao@Si;Z)@DRbu&SPt4epm z`&5Evoc0+KyjHmmYrBQbmC@g5X#QWmrTv#zMlE4U(wv7FYa-)}P^ z9Ro~fm<7ml^!y?cZ7T=fdeUOwMII~xvd2%;qWlQ(L+o_rqN+uvT(f4idpKqJMh&8I zqw^Pj%tv7vLig+8!pr^s(=pKptWe~ztIyXx?o|V%lVKjWBe#0^-56w!gGaJiIN{>u zMknB;%8@e;A;YW>=+;mq!UAIxo-2;7jdM|;ymSJm#R<|7V#6Z3%$e^zX}k!&a>4^9 z-0pr%XAW3tD$BsgSu&%`r?R|Dx(9!32A`+%#__%UP- zFeJM+PhQd3_~xAM#uYZS__5u+2hP1Sd(MNCVb)k)?rymKkFPJ^(9~FN@8*Wz4YV5o zeB}YXAra>Qp<`2<3?rIqSf2RD`dewHaO%ND^c@k? zO2-xpdAWV#9Z@(j|3$NP@M2W{!5ubj+CWwVZ`!KWl&qYw6qwg&2lHr+wG}P$;I0)fx+3xLeM>o%iaR27q zPkjopx0O3S{YaK5_9!G35FA>~Hn01sO=vYR*7A#h2E;i&0_%oG)5|667|rUxC*s4+ za&*R07)^i%YEJ-c#{FqX-f4@6YiDR>`t=7V++PXYUAhV;JFS1({dL^7WnvXK@qSQw z0ElU#XECOZ2n8tod^C*CWw1@vQpbZRUTzq}$>wKk5*AD*o-` z+y1fsm(86Ee1C1*Wdbb1^uOk~^aHIMCYRW9K>=~g-jz0Q{LW9G^*II}{lq$zpLt86 zx9)HEFtyysnh3MK<7lzj9xuprRqgl^L)UKEz2ZP+t}KtF`BraIwKr$3HMcDIP-oS^ z{2WK3ud@*gzLR|a=&*LSu(pS7DVjoz`#P2SK7}956nQb~f@-L9@)sjZIZB7z=tcvQ zr9ad?9XVWG7*_-c_D12SmHM!|moYR)pTZ7Xh4{&r)!BmTxq98f5m=R^$(kOOD9~N1 zzG~g^#}6$iv^I<|q>_Q-szOA)%F@_&1m9P@XF7({-_K&SEr-Mv14vg2bVOQ`3})he|l z76z)%38BIEnhjb^U(IVWC@I)IP)+$`z+m+6Fo;LCTGl*@oiN|rxneQ{o(eHM;R^tW2QNebn(V8#mkzC!Tg_?Qx~HD0+P&2=*k^k7CX|Wn=RD_In(4 z&%b;~;@?%k&p*^k#Z-Cg1Cm8hO}^;o^L5s~Y6DyZ(odR;j6L+^D$`VAKD}X3R93WNFH_J787@V7 z(6n|wHWyL_nXi<6-Vf9^N>pq+z#3Bhr|u;nfm!hdZb3D8xQ|rtDU2 zaf^S>%)^d^V3_I13#KKdw|eaVlpeH_*uwvLT%i1d&Oz1|QSim>Elm}1!TgJ^tNC!y ziI{EW(`ZrY;vOZWK3!IPGvRErkJ-U^6`@ztM=)di}KPyWXwRQDn^GGaKb z0}_lNUNBv{IZMk7jY_quka%CC^TN&IUEFs)*s6-0(Yh4aY8Yx|+f*+`bkcS2@xEBH zX?cF27+jqK2K`Bd`&r)DE%;%6%|5TlK{YP zYPL5eT#*zZ6LZF(o`-;eYu#wajDRFu4>o_TQX^(bKd)LZT)uF#0=~O+GQUgZHtG)g zs^%fR`7)EUXZ+0q+_gGgMV`Q34@OiY8xg>_wkUb$xe=*uU0QkTX>zaz>7M|`DWn{k zk1VFHk4%fIp=#9`oiD=>t4`PD@QOD=hSb!xqf+=pE45cO{uP6m48&+r5!qh4cFujM z8`wNSW?48$>0i-Ri2bdHFRGpvvSPZlNKMa3^|5_Qm8jZw<{@i){}S_sv2dgUIO>4G zR}E*vP;2RDDr=|t^fo`Dcoiwp*cW1|b$QZI|IGu6zYMnNaz@3JdP!%l4 z%$zE<6(`!Y$3xl)zTTF?Hn{({N&VAMvqV0xVsNQ#P@njbX*gZy*|{ z8<@)gM3e7_iB@iR!}=n?1qYt`|Jof3 zXD1L8mbU`=jyB2F+_<7~`7RU8RIIZ!Ff?&0UT&$yL+YwUi&wnP!sS7e#ejI0KSg`W z3-}N{`~CSj-`J`aePJXkWE)Yw;_NH-z;*U!=#PgMvm_7iL3CR0&JCTn!j=DRPqJuP zQn{9w*HQ%zEM4J!AVHl}=i>7VY%gjLHZ*D2iK;5`?cVcf-;n|Am403vX;)HWvKOmL z^qeWG!SAp>8T!$hr5|{ECKiNVNnUX}mqiyZt_r)7s=;;atG)10POAtuVe-X_ou0h+ z>AQ!HQ>kjE(G{mLNm&;OuXjfZ39Wg}dvgFj{8(1K_98tL%bA%=!WgtJmZ+Wc4APxL zot8N1%ru~|cRWDm9uK}1p5`YfLxmNL>m=L@T!}qN=&POi{N!*$Z(SCmB~J(O87p;t z{_lD$FI;et0^VXaMvnWX*gk7`d9*Q%t!vOjbmCdh5xjSq>U{*OGy+z*rv&?4xJE&8 z8giX?9u{wrf`7~}UCve()0JeIbD*ezUl%ny1va&$WqRGtDf>TR`~GaEE8#1UTN?oz zNg`4dnfnUeU)FuD77`qO*+!S1-am3k2>l4u{XHL=9;my|x1yK4CD6_tdu`4n)GV8% z2d(`fiWuL#E63&RFD9K&M(Gq(W^pzKofn}5{MfpW8}IgcP+}ugI5U_(b>rGaUNN8V zUl^ZC6s3*p&tM(WhrI&$WShrdJ)+vc(v0DDTEFagV^brW$nwY7lVzR~9ucK(xAzO{ zo_oO?-kXr0a*CZ*{Pk#d)KIG`wYdZg6=Cp(xrlx2TtMU{WG@QA_CT!EYh=xi zxWc8rBR|N1U_=ks_!(p?N|?6D2TF@l>Yn%!pF7Rbd>i-UMQ++OmIaQ%OfM zw^cPnuz@g3UZ}3dd9VPQl87rZ!FgG?{=0a%l2~~Hs7RneE&@wn32Hu-CeK(`*x@2c zGK{H)^pr6^kO+TqD;m^lwm1Cc=IcEPsdGNUPT*+Xkwfa1<~vEjwB{X=?}N1w_D^I> zd(YTI$IT?}HM$%n@GBxnRp2W)l_C?=>}jx#b}-CF47xUT^?U*KqHJn&DQFIhm! z&I3~CWwT6Af=S5?j6ESUa5Ah<)Rn_-2kv*guAVV5tUA}jP3>!?+%&W6L>=wtj859d zlauk1C@G;MddafKO3GCJib&PT1ePIv*1lpOUb=-^QdWqePHU{eSWa(p zPS6Z4U_8(Pg)r*YmAWgc$gki=yJ#dHE?n6BA@~`1WuZ5F?1s{}&y_D<;jx%KG~1W2 z;jK~GlY>1YuHiL%lD9-o(HeA8xoH|l-~x0zrgG}ay45}5iwWy_A|G`iYkiP7ayM#x z@>I{+la@-_Moh~!wBMd5?T1G_5rqecw>rGW+aYYSMvBtVFS{Je zmoMiN77hC!2MnYi2b!sV)9=V)@G*Xhy?=t_$O2&T5x)@Zq{{3-rZC>saq06G$gO`v2-;`OsXS$<$M7E$rU$IDpzWY0dvscYL5iyl$;TCVS@k#p;tR(MeCDY+;HARnV-u?2d! z(#>^RpvAecGdb}qS&g9nurttPTQLqZ^?#`Mp)rgQGaMMXK#T;gT~Ift(Y2@^c>nUy zgkzlWPtqC}hOYE5b1L85OUigU%G;KCh985Ej*v`0aHhj9uUdRPQqCs4@GHnFB7r;1 zNmbVZLxqvNu059w*VwePm36GZY|RFmt((@?V$0ob&m|>d=skf_t8~wA z-zl@Tb&rv^5Su19eN%)Dd#v9a_2yvdE(8YI_=Utg#pv`R6wNFJoyfrHq3a6yFpDS% zqo;2y+PU6o%M6GkhANCzmY$O3yPO+cZkTj%ir~mj?Z^?^Fy#fQ?=Z7&>gRQ?7-1&2=>sWVm^M`p^K zDaI0~)ze8{gqgYacpEV90meq?T9UA1gkdfRlLniKFAfAL)&@c$@P9cSC^9x_tOPSD zi%0;MRR?D{SYoi*i@}HQh6|Tv`>|g`WIN$B!l}4cU{kx~jcB(S+aDD% zzkud|vUAI}a^{eb?V%eZuCiIs8ZOa+JzGW#!X^k+s=Bm?n&#l%03*!lVo*PVZ7~Zo zaxxBuL?DOj4BjLc{5|~51)$lx#Sfb=$RPH`4Fr0f24c$_n zxgBnD^4oTD(v2RaiHH6oPUy;z_5|WUxH>k>=7AT@vYZ7o7PjT^0(-nCOxbeslJOu5 z$1pLrlQNjIEHsELF!E*<-6FK1ZES81+J!kL?>Et&L^-tq@Vur4_h z-g4YDJjQSnn%Xieku;9+J5Xv`>y#y17GWF?J322^Xf1Sr2&|So;3dWgLp-v$fs%=V zRn5_ZF%02KF9%Pf?6e*x7lLqLTC||6F~q~pMYG)Cr$O&{2|f&7031fP)93`^IHIZD zG{Wsbe~$2Jd=k0gQG6g_aXvOYDo_BI75O087<6zbKVdu3Fd9!nUepb%Hf%}oV^E#2 z(+;zMF*!ROXaH<4%HP3@;oY>XG-8Eksg>s>yaPL9xZ(j2`tU7Zgc-s*I%!$e;VQZe zKN-wpKON9WmVqPqS||M81X>o2h!;bT%kis5_DM#I=P~19r91paG#lnUaGJtuwy^M! zKO&a}A9UZiELR^@l`RN)$t){ZTxJ-cKI1StXA;jN1nX@1At!hSusnxt2J+i@g3!6L zH9&az4K(@By4Nw&tN~oV1;o)9@Bb+}W=r|iuuV`T`5*F%dHA>d>!&NmpPPF4lx!{F z0L3{-jY#JNPcaLyMnKpD&=ztrTmyMv$Y;^aHV6H96dMBS+VU+?`9Vx4Fy1k6t&9iX zlaIIqnE!CLmv8w9yyj1-S-|p_!v=z$j-uIs=!=~unTtW~F&?vkI5l^rZTNP0?Ln)( zB?=7RC5VS8M*f#+Z^4DljVea3b%k=Ugi>p zvwnsq7YMrGKtMrh7J%6@l>qn-04Y2ZJ5rjCiCaPL-~b~48tCX|ut6nYmzh?&A*la* z*f>Y0TK>}`H{<{Jh|Alu9xHi9wq$?aj{7@ikT{tL(+8wgaH+_T06JOC12gz3a3m~6 zJG9g6)7WgWmaw!(7F@LGF%CR?iJ90jVD4EN#a1V0bI-^HABJ3~&f$UWu+ONqKL#je zY=E@?-F_6!`FAd^W}`It49E=3Ji`J5)&)X}*%_Lp2@o*L6a(ePt(@649~PDJ=)!Ite!3BNBTGBYb5Z#P zC!;bRC)kx)@yuy-UNhgPm}6Jpq0qUV-13 zF2L^=mTd^535E~G9g>srN_mz`$nzj(;wUCuOhLnOU}0>sV*ULQW+6<4=pq`^ANn3H zoM8!wV<82TZL2(taf3YNgJ2P_#{!dJs>EHGX*_b=&iN4Qws|=;gqlSiQ6UH3gsS5n zd6txoyCglZj&Z>O2p=KZ1zO;4m(%?$U!va*&JPiJL6FsG%fCm(_1kTuxz~>!isXBQ{CmLp9doYHCt%n z>00Ff;9bK)1A&uYZ8M^RW){5)>Ja%$@`3`@#M830Lz3}DG%R$VTUNwy2BQEDxBO|e zGu{F9ibk!MTLbvM7=m)m!9`t;mpLag$7qdbg69!*7``^#s^qAV@nAiGHiXHFBW?s8 zbf-*k>XD1|(-Dtbc$~mUlB*8Igrq#@LgE?jq$nDLl$S#<#Nj#Kg2*Pc0Xj~@Kn{>2 zgJ~8y#5WGyMKcAA=P{>Dm~F>{;I^h=aIXZd>dwH2gn_s#%qTUxni&>jrW6n3A8T5;wWDLXgxO4vE?2ez72JN5F{Ly zj?P5lBUx8r{is!~(o*Q@3 zkaDMt?tz8Ie+~o+SWAZgf>``~IOGRCKmUc_F!b@0x0)b{@@bm!bYf|OCf<5O0!ZgV zSf&<_+X`C=7k(}mL_)rwxQELp6Ndcs8JvbS#@#*qI{6OHVv>L1fN%eQ56mHVmZOh2_v6n8m{?e3X!CqwVVquk7PtL#@K z{~0X9FTxL*WCFwG#-F+O%de12PRLX0+9-bg)X{M}XM3c5CQjsf+}IxiFBAtJD8|%b z&6Ou>xwTOsD68M*%2b>;4iFl`uEaEGCtwMpmttbHbJnF`-ePT=XcJ7#O(5vv?4W6q zH}IOgTEQJuWkdp?hV5sRzX|d(VFJDZg0ju{7K}X>HHMWh z^LXLs#HAcL3Tm7vZipwqd}Rmu4_MjI3z#fHwgx#xB|-kh*$}OC6xClUmlG2&yJ-ff z#!yF4;Y4Scz&$kqD-*gsDt8T9R&Mhx+-6MW@sCh}P3T{gJB}3(jlM$3wh%jp@@CW# z&E+_{1tqbgKf#^@7Pu%@1gO8d-8k^Z8&@$0 z{yZk+cR1v6j+H7moAGsr8g+-9Ls{ZAGItw`nr(vkv*i$7+yPO8gw)Ct1zs()w%~o}F7yDp5AuXL z4gW(BQCiT@pwY1wM$fG*cOWcG_SQNu3eauP*wLunf%Obz4uZ`=Sav4l0!J}8 zAYx#Qk*f0fBO;4>bQ%>{D~cQ^tl`TC@(?W32b-3^611vs1aSl zRCZcvz@oV6N}tQ7d*SIPFUj>Uor_R&ugi~zQJbFe#EAwM3mU!*i-8hVJ1{q39odNaA8Wz z=#l9gH-XPw*3mejMd~lp_Htzc>qq$n;@A`UOo**YlygSZOYfb1=t#EfSFEoLR6qDE zXe6&5$#VVbaS0Ws(R$t_p0v&) zA!dEn+T>Dx|3}4$)vY7|UuoR!^28|wYQu|%fm~O=yYT^ElI~h)=AW;BldLW;vESe8LI>F@(6&}rPk2oaT^TGrxX^I?CXnrkLD#vlscM5{_6w>#ZZ$}cri!v$##zf$k}{{4K^A#m@tz8DdOUltUffw#NBObmoHd1ivp*K15N;EU z)Y`fRW0ALtTEv*CV1jM>uJVG1{HNVWSrLhz-cksUJcYcHXLlMi` zsvUFO$kl27Xqs<@prm>>!OdHa1lK8PWDOhH7DPp6O9{+%;*LL#o$CXm9cgYt4(K`| za_z$@qT&z#kGQvwi>liG$Im$8m=6r5BUr->_HZ-I2Qms18Pt%jN%AmfMu;argeZM( zF&EGgkr_mqB!s#-DntSr2#1hv#mzKjkYLJ8B^fPCnQ=-HGl$R^VVM1W?*nR|&-eTK z{rlT5WzJdq@$9|!+H3E%_FB~nS0`)nti-vpUhIGfMDEmo+VeJvjL6OSV(@*vr&M2g z9_|S9duI;X%zr3n_ubOs>Ye~?gSW2ytM=Z$s(S8Ocke4EaU^WNc(<4YHTw<@o@Ha_ z9Iag?&MU#f~lwdiWuKo!?{rA!HdW-z)xSSt1Hut7qU~lMUk)f&A zRxIXL#FZcHRUhHv;w+6&Y<#EU@QSAR?H_Rs8v+|)^4{VRd?vJhed%VFeV0A-nTxdbAu{^4W0bBs_jcxg_^YFk$rZs+^Lol#?wbD7*R zDIqGvQO&AvJCIQ5y5@$X$T5qpg}AJk!&*L(gkWa6yS z_lx|)n6P^8&jwX4zhn#rHox9{zIjOIswyZf ziK~mA_SOsa(dwqe8wuCnXcOl~{!(4|Oj!P7%JffmANfyS^LYjAP8a%WfxA^N)UQ}P zoZh6?4KERIh+OyeGS;epaQd9veGNxGAN*-iF6_RG=5$p(xU^nr*|2%b`Jq4O{w5Gj z^JnWGkVNl1!Cm_O_uGGFzi~!1ZERpqev$vQRIc{eu}e2TKl=I-@hm@0Re{l8sbnp; z8TLceGRhD=C-+d(Pk(xT}teOv>JG`O!_4Da$Og)lT zM^bO~jlHVt=g`;&mgS~V;C28l+-r@msE=ef#?^2yY*&8xVtw5Tw&8FbQYK#H*qRln ze*3?QK2fsG2mh0!zMkCxPjb@=VS}~)MRd^hxa--C=iyz>7(H{v-O6)-Tt77fwgLwH zw(s1>fBTJd%|BUop+7!+F>K#X+QgI!S&{0HvQ5Zpl#)Ig`gK)fvWVmQZVa;4a zHktz*Lw~@}>k10%g)TJLMj8jcqBzkx`HFQR`&1M-iCzZ4pE z7iQtpkG#=BN5WrH&bSNvYn$$8zZZ*+y8E1c_W@&k_tA3q0YZVhkAH#vzp9q}f26Zy z-HoJ!ITAoX?gyikjR^eiFRAWF{r~y&m)_=^@nj6-G=J%B?AAt`_m^?K+hN)FbKmQ) zza;yA_4VB`$-e*5_p(~aXe=6~b&NLiNu zStMo+cJBWRh?#&+_+P;PYj&V=I%Pn&{zudKd6@n`fMKJP^M3&E&e%9M`+k$|&UlUo zf{u((j8Won7q|i$!Z3+JTpBnPZ6}BrO&Mk6$e}B3b(?&H?SOZ;; z0Hc%~)T6mK4jT;)omCW#MIaje1InI_WXMoc6dm^D3V=9xv%(^Pu8gXAgx&cF%M~5O zGL97%C9+B+D~hf!s%?mCctzd#8X6c@^P;2%EBn5K>CFeT!N?`x10I11ZMw>+=<;zr z9Tn8if}L<4gasJ84vcF(7U?3|S~S6ewG0D@R6Ef+EJbvUX?PuRv=t*|HN2jU6$>b< z^p7sw_hAu8Kfkaw;KIK$tcYKrPjK8TjjyS%gL&ZSqWxI3Kd3qwf!Ed7Esbzz8vR%_ zoUsCi#qN6cjSG$E!hGvrcqD8BK7-A+{1$g4;Yh-3_=YFneX;P7dI0eO|ADV7@D^;; z->W0vUHaq-Oe%H5PdOKR&u@Uf+=ttihD|WmO+(7Y*TJ!D{6{trV48o|gY(Y_6QYcR z4Rf}rlRo#gurae{Mn@Gr7EJ|G&HipX98l>7g;J|f$_NNE(b3k@Q}g@h3QJAGcMpzL zW=&ZZxquwX#*HbP+}Tf#!^n(imOk!JLG(LAO%ohPh>rP;;DUkWhi}6w zFia`VM@eFV9v&fPzR0w|afmf(j!WAsgf}eLHs5t0J|fXTn$`o5lCt?H ziu}PpvM+sm>r7kkd#k>T4g?ax@BkKgkBD_uYYxODCB`&RbZ6P?sRr@nr|PO&mx(WJ zKk?DZ+^!=@-A9JHwoiY$+NPfvpZ~~;ozbeS#*4piu!PCtK62V(w$!D6vg6s=m<|>$ z`mL>#o`N;Zd0c%%nfG&G(V$=xDtvyY*0DdSeEr(9Eb4BkQLl^icq%BzX3#;U)653; zeSf7kp>C;U)+f%d#X1lS;Bsn2!@n;K(XF_g@-jSc*qd?6Q;nJj|z3j!pd9Imo+rZpG64;&phhlTm=eJhffw#X_3Pw(`KciojRCnxFzq`LQ z>466_1TcgS=P%1XW2SvHMv1{Bx}^`W>{l@0tslgj00@CAUT_4nZTg40qk8WUhS@sL zC6`u-GxSN?CiRf+XMu7!$koB3z**`XY0}A)i*p)A`zoe0{v2l z;R0UT#Lh1r$fh?u@W)FoGH^RTn;DnkxJ5s6mDkco;1-6d+q{0N8}BW0AG}pX-svVf zco&}=hd10=oQ*Dg-&5elJob|M;$Sy9(rXjx_%8o=tAgee`!UQmxeK2DND;Tf|9d$9 z2<56h@k*$(PUg()-bFgXTAn!Q1efn z6^x0twGbP*S?R_e1>R&3{v-|}x8=ivJxXoa%GGZ8W#)s77h}B`?Y23HAipwlxP>Tu zgCiqeW;bJm8DeVf!l*g zX2uTatnfpr7u=-q*+FA&m=$g`nL0-i!FQyS9RmD`PIJpeHT>RDgXN?&RFDI^H-J|v zT(2Yx)DO}0mx%&a#C^{QY5$OoRo*+{&J@8(V2_R2N9b4RT-y_^!jAx@NT(MwV|7lH zKkrwe!W2zioie#D(x$`EN#K7A?!4wm6P*;Pf}BJL&xkMm__ic_XILALH&kY#l&Qn8fHhB>j8d47 zmBbO??DPh`8<2}}H#1+9%LuNFfnhOc_^${{A#S!5GVW29B@a1RD4S=@-j z7Y*(HB5Sv%Zi3S!(2FK987mrhSH|ajc}Fp@ccZLeMsE9&|BOLfL$h|Pq9zu5cK4m` z-#g&=z5nX|lHVd5{l)O}!&svi9e(nXqwhw4cZ*!{=44UO2Cd^a!4lE9@j*LPy*#L?9@4GGThYxtTR3?`-}rL zgC@dnWIg(;yTn`G|4tZQj{};7Uq(hpTAUa>&y$v|$D0nntDW?LRn^S>FTB0*Cn08x zU|}4cE2Uos=62EX{FuN=5yN=>b_P(QffH!)T!6Ejkt?ew=k@TD`dk0l8de|%xTioq zh)a!fOrfNjXSLf8z$`Gp%&K#m$(!a3pV0y9dqf6Lxr>2ECFXKrj$@N^n>^R;9wxIb z|B9*Kp*2M@jM7Usn4b`DYwy0Q*fNa!V2Y=PJ{AT&=%rtpA6|Ya*YWGIMLL(gUtE&X z@%4gBQBO!)$1|Qm?<}rJbGG-pd(ztU7(&AnvTc5FHoF!%DS&DPD%`ByWF1N3X8(s4Pf4gHlQ zb8m`NW;Q%*NC_%Q$-R`4>+|OPF>h*4`lLt|S1V2rWLDTWNlylsOfeN__WOLAG3i6I zP8(d@AGCKMseQ6o&*+zIO^kYvvwzt#K!yt{THoz6lxaHjOV^Goc(DL#*$nz6BC zO>%L7{p3Q@SMglRselDnPX=u4|9Z;IaVM9Y3fl0`Qvqu`PA=Sd<>y6LIzCv?q4)9o z>g2+wJHB%*-l#iuvVF$FCpu161f)FDq4_x|4N1S=vv5Jm+EXXL2*@;_tXR0{i8jB0 zzb${Ez+kvS0=S47ti!6UwG3+hIHEate&96^4Qc#7$C~i!oBBv z=3nmI9B?V#;3aMphpMpO9{l4fvD*XY2fGR72>wRF%x7#&q9)?go1@Hg+o{iiLVBNM4Vw!;W*@`5RXHQDoI;AJ(CxkLc~d> zs#NM3ZyYI#|En@Wb3sMLiP-6B)*2z@!~-Odsk^A89qHTIGAbP8<(R2Z;Ej#t#m!Kw zg;*7`T8)vdK-E;Xi-L_ckh;c0`vMYFpD;P)nRv&?rCWw`-J28R4vhmd?wOo#NG~&Q z8Ezq!X!|%}C^KeVIRchnew13V((BX9)62{0vWf;tD0Qpi>dX1DrIPM_6j006r(Zw{ zU?0U5q$scD=uju&(<#z2m=Iif9w7Xf0-&$2uU~%`LntPLg}|tl^RwV?u5>zzd^sqF zFFBb)xVuw@I@F}Ius)8TSTxaSZAi41GHE=BZ&Gk-OOPzrmki6gR6Tfb(xSRon0y zJVm{aZ?a^;o=%Vwr>-^oR>ICs?-z83Tuv{E2c)&{EIOgY{?{K4)0%OH{2GK$wHA$J z7rS(7k6>bGZ28)_UG=eCIVCHpu|_KKX4!=*@DP+f@(96GoEYfgKuAxAa$Ov^KE1rQ zCYA61RLmG7@*sU9lN`4z6`A;vhm;?~tkTW8LexA4wnK^yBPie#(vs)+$tp_pYI)TJ^e1&ASa$+uabf76C-Eg?RpPT;@5B&RV}I7(#- z$N?Iodw;8~JBgJzgmT2VC>w!jheHivFD zmk3;Dd>xA=m+`zn{*#Zg?vox?f{|jDbK)Frb@?c{`y!gHd0RCT@Hgpza-8AP$QPp& z_Q`2a&Wc12*QnBK(lNmNCsWNF_Hn;ZhQT?U3iJ3L9fN^W!I-fOWY2s+dfKHlNXCYS zGSysdITy!mAj3n$^t20Msn^o+a6(LzU--w(-xJ6XB=PtRq`l-wh1@tS9j2c)RJFrD7}W9569r`E1LwWq9Lfj#5RPo-(a zZQuDUZYwLxT%Hote_1o>e1AZPrugAMg8n(_(XlD77QYvK^538KSHAIjNv2`pIP=2d z%u{Ph0!$gjefE;grOTy;pprKGrIP-DVsMC8Pk!@bz^R3vD=Pv@{v7}wu0j*!DRXPI zm+*3G(dmU(g3?aTXF48O>S>;FC8$Gl$lSm8s_#{er}%2nDHz}uNFS|Oczk@D=d*hj zJFQo{v9Z-k(gK9ywL!}dRV$;m*OoMFfZinc%t)W`9wTx3ScLP%IGo0@?0QP-E%-m( z7k_Ag>Mc}01KI2>`bIVS*_d#s<=|2_RhjN=hcaZABon$lRIeO5)v#p;l@i=vpy`nV ziqRHmFd-}bMxmKLSL)!bGL+1@<9mz67ysu8PT*zl=0eVW`bmTfWdh5!f)jW z{iE&S;Yp+M{31`O82xlwJ1yYu?-{%&;oXGaHy*%44<6+BMa4QkC*?~gGBCnG!1N$u z9hvwgC1SBPC_l6gvB*tR8&eUh-{mHMR$X$7b?iboGh|!>w>Y?!kef-VDx_y}*11LQ z{X?W*{qhyOGHZ>4q8>Rm3q)`duPSznde24hPpPUB_KGqVS^PdM=hm;iFm&_tmd{~s zvv&St9xL*r{Y&hJuB>i&Z6WT<2EN3y#r21Z8j4?wJ;esbfF=as@R=*=<<@2cTP!#c zM^MhVvX6VaA*X_E?(+W>woh5<+W)%pk^gIK0un`h>i?aRow0-C4*7p-+rdK6_}Sl^ zqbI6aX)5Qx|BFNE5WWP)H2TLNqlAs+xSpcjyL=OxyOv#lQA`obSnrSH=khpc(9Fhc zQL-zy`)rNmYIfD`Dv#^2qoa~M7@i=d|Ah+Dmc_DhsUBX;9&Jd~6utK#xjMp%NpdAl z2_tqWtYSt0+8MXL#;qrAVs2q;a7;z}R_Fpo*oln}q29nDB}U>-l6E@Y9q$Z^og!eF z&LfHOV;Du1&LpSfu8!qVq@Z`%Fh-SB&P}HX*rOcQ<5-AaU}$_$UC15`4Br&`o>Aw^ z$p(3}V4vjQW#zS_@08or3$=CW96dOqdW%5#dw8dGmyUfsmtMm&i-B=8gP&dn zO3QN{7&4lGD+gdS0}p^ifc+H!x{C0~M>mo8NPi7&b{%)(KGVz6bCufl>*@MWGp&W{ zEFkZkD61{u2LJ`qGU@kJmH)eaMmN%3rRZT<4RpoIwX3YG9xEg%O)Z0@WF&WLdD;3= zjvbkI8CfP2DLcTE*Pf&G#FkL4@6-pp^o-Xo8^>wN2U=Rl8@mEiBNos_g&9-*(1G;y zV>fT!+NjjNI}sHzH#QG|Jiu-=s6XuoDepx@U3a^V)(1&^Tdl^s?MKCfs_N{ zmq*ztC+hY^OVr;TPXF$UwYxv~H1@{7*s0<`Bg7)?hjmXGxsQqtYhxQ5Eb)Q29q667 zk2%Lqe2_Fe6MupAEca2}$_DPg52wee*?;6-{->=P$L>mQU->8gO;qkg1yuAPekJ#` z=fjJi`o|yDKT&DX35fFNpsS2UC36pRk2mml4k8vS=QN)I{*Z17j{DotYL%0!;={Y6*a6g znVB;Y!j$(pOuJ&@F`~;E#;eb(e zb5GeG#`Mju={#=(QU)~3M+yQ2bx>Z=35d=mp!9I$PZf@vVrirT#8yrTt^l-90rFou zF}~70?3aP#O0g%-5CErX283FiRwBLAN_@Qd^iIWiJ$XgoFw3nsk<)nxPIO3%Uf={k z7-G_G6F9HQ;l`^41pf*S@W~K7Sip6O2q&J*7$@Vl3tc=BMnhW|PlpJso&yzmGRdw2 zA(%ik95Zz{atR6i{}Pxgqlc)if?zn%rYlvx*eW0jDU)nPIbI;wqG#l8oseQj7gw{H9k3$ z=LQ$JLw2a(2;&fpg+(w0cE;e7bFCoqmH+uV;E&1hsAUq?4Kbej8o84ckUMQ8K4NZc zHUsHGh}A4|GF~nucF2QWNl6#hrOq^=8$>RG<5#`Jts^e+P^*Br{sm5-PDwXu#pkZR zV!&sU#~8VZR8G$o1c5+B5}j4fSVhi(ZemXA8KZE{c6ex+v7un-+lVt?VUh<8i`=W^ zD*ExyMIn~o8Al4?iD`~&OBbO0c1yZZn-AaVPA%5A_hq&{XQSd?)X+Ydf6ljdaH#jBFwzdFWv6hj)F`q!HnB+N9VUVIm78BcSKu~ ztwYWh(>xc7gK+06$?s?ErvB5U)RLb+)JBA#zlH7|XA)HskzG_$XwaDnq=dF^hiFKP zWrh(ZeQ;WQTI4Azt!z=Wi$v!k#+Y>(;>hu)v2r5+QtTrVlO1HWT(noNb6Ve%U?>=q zL7{NTePqFILyJu8+bSpKhn>n$#>B`>u*s+k&edWmQhb?fs!UpMJQt06^fO;+t@I`j zxE*%+!P1-`3Mv&F_p$YqandU?X23k(b>fs0)7#Vhrm2o64W$jU9+M{OnP5GvME!LB zrr6yjcNQdFX!zubM7=m#Fm0M&KCDXQw00*AH6=n+cgzHT3N@-T@77J5^?))TP9uly zq_-vaM_1M0SWLt`t2|cu?TNF5^A z_f0>YKk{5-T>Sh$^0{cavrYkf29X{gF*UGAzk>884bQnzonH0$+e&uv>e<8FlETKZ zeuXd8`v+P!G~E1r_fhU|J*|+uO}z9?-nz<24_3fNMk$*e^%qNZO^XjiXB>~V_-`I) zir}c+=5K>7L@q*I0Y1J{1hJ04gg8cF_Am*6 zj~PrcX60wIkh4zV6fs^}y2@hCfSeADVQ#o}J4~1i875*AGhPbNAxvc-{3v9<<(RDa zoUu-t&q-;robeMmbwkAQEjJcoA-xcsA|nj0LKIDDe32+uFLw%@;!6Zh z8mq=kaD7M`h8@_yE1XZfPbCAk9~`(bdj z(XC^~1?h>%3L>spY@K5@SH9>QCCV*)*#1_3Jb6@Rn(Qpa{$DS5tP(RW=W{MW!Fe&e z$YH8^VA08db8R;dDs~FuHAJBopd)hOb@FNfjD))S^9#gMy&~7jW!lcm7q8psdLo(0 zGl@c^$&NcPJL{=%x!{6O;5j(f1Xa>ux1^o#@g%rc)0r@g>lD$XOD(AgrFNL=B* z?(Ta#B$R=<-%|0oNx3cv*XV(TERvaTB{Bi|w&mu6pa8~dwcFc-%vhqxbC^s6q=nLZ z>`yZLuI5#)RRNEViFI<|yqjDt5HVN*fH6#io7_~}9s9d2y_g$5A>>QCA8I*0WM&*L zR$nEOQ}h$%rFlQyGt@K-Il6!f9`Fjk`40I36HJp*UGnU-tlw@XE#?lhmPWGgr3VC$ zmO)+--77=Qa*%jTOmz9|*U=6+UnTqwide`nFkFk@VOx$5>a2VQH~o4DngdV_ZL zXUW2Fc3SYEsso3(<}YOG#RoZ~k$vcSWvtD5e7SLXS^4uh7JAaB%EqmksG5BNEW2D{ z*w20RR3m5SQnO()8C*&Xe_Ij{*xE+Jk~V9`h0HG8#i6V!J=|rpQUkt=@50R~7&r6I z#I>HNvte}Gt=<(MABL+Iqx)z!mU6NQQne%oHzX6{+i6~e)UfQ49T4t~vPeDxrGF*# zParJ{o0fY)GV&DjUFSUz9`0U2M1%iQ!blM`UHDo0*XRL%W4P!5pFmd&?cxx)Rh!c!P=vqau2M|0Izfm72!vm?WSFMM)O$HoTKe#?@t3`XkHWGnMrt<)c2-I|u9l*fl z;Y2rFNCbmAnBoDLlC?efRVm!y^5h-lKr6q+?j}TwZJOU8>Bo`VL3gDIxEyM&BswSd zXI?osh+M3zxIT4POZH^v1WzI?e*{acv#s)J9>ZU$<=C$eu2O^3&DD14=BYc}nK1%T%07+ev- zC0I5hCh)A0#s{KDaWJ`44fPr5DM+ky5i=2(Zb<8rj&B zC)(FTyo5`F?GPzpXTfSDY9l=qN{xk42}pz_?6;lt{r?K>FfMy`p<$ye)G`T+iFhxlaR2mV0DTS2zB}<)eC~AIIH%AA+yJM)_rh{-R#wtm82(#+ zAJm5&;t-r|4_lYKj<_B zCY@6*H3?iq91JvV8hTWui;M{ztIN0yMGVn+*qhE}a;;ZO#g4J?5 zB!BV5fxP@$!XUa&DD(7j+1tdPu0;;R7$2FFEctcLF_Lk|!za|#Cl&{VI*38;Im_MG zDH2F?^R_rV$q(JnGMJJ$d)6~DGBi|Ws>x5S=>;e6Dtw zh!UBdhi+Uv0x6=1hk}LlH zvN^t@OtU8Z)Qpteb1Q$A%Gwr6_oqCSw)WNBV#B7A_ZF6yy}u_VckPB}4ouDb=RdQG zGyk<9M)T@_JzxB7aq0Wtto^Ob{`7{gG$|{ey&7chQZCe#Xx1*+5$Ic@nV(XkDXI9j zuXxeR-<~Yqft%z33(5leaZp_R#dl>Do$V(VwtW-uW0~gVxzf{XD!##8&62br^~o9D znM&_WUd9xN>0H8gbO!7&udcyW&iYzNhVCsWm|WBE;W5jm{pA@-u6IMs{doY8Bzy#p zOaHuasgbu`xV+4ZlIdcDNrDAOGCJGZvj9LdaM?D7xA8J^M#JZm1X?;Vt9&<5>l>Yz zx}!7BD8UNH!f;F{D&)`WxC>vgs)VyfaS0KTz)eLeVT6Zl%J0VApba|$2Ew!C z#mOOXetLD@#ucz3px7Z8Ll8@irSx zjtciq_`ABN^_s0P+|rqUZ&hH~AC&8_!Hy2RFTfotT=^j}4X`-^vq}3o7UpNNU~%K6 zXVF2`-Wx_@r>mv(96tdz4Gb!F2Q_NYK2;2-jck|<{%KMn4&V*!fN#OY!LKB~aWnE9 zYt#~4b#JG4Xj4I|DO2LD@=ehGQe9IhrZ#`+zyb^+-yXmpDlLciXV}49+eMwo(Gc5y zGB)+!xYj&!A9x0C`o(ufrPQ>+qTbz5CIPZ!R%qI1&|AatonbqEeOH!^a@n;b=(Zea zWBI#!ZGd@s+I00@x{j;L0Z$-8X_1;|eD@by6R7nYU?+m*ac}kLas~B*7&eeSD~$-m zja=OChEW!J$sG5;&qjpI9fgl|`i;H{jrK$Y`9`+fz? zMC9I#UUjX(eI302jVgZ%IxS#ARoF6Z&BiR%)f=%cv`}?M{%kEBo6svHE*AVAm2QHG z19OJiiZd6w4;fFVEf_lna%`sRGz1v?puB@!M3CDNBJ%qIr-Dv0eDMpcwUDPcoc2wg z*ma~q0*dV8@Q8B^l6zXnoTTMa4w0T@VMo(V7D8OoVxX^hx6(g85QsBYXQhbApbgOD zkHE`KW{fpKpOzj!%E#kRi;$@x8^>dlgQvG>!jGWaOUrq845H1EuuuVU=9kNP$M0xO7ME!pqO3~U3F_YXlXwHam&41Gj;}G_YlI%TgQ%X0z znI<)8f-m=p`-7G*JmqK&+iMFbh5eD%aBbVB9$R0AbkJJdCQ^LqsOWpg2Kxl3f|tX? zt+qoHVh&J;+X}sd&AxEu$4bPRlajQpF{zWqa>Mf-eTCuA^#yeVh%Y%hqgkoNR+uJ@ z&3V;4L!1z=McWs*OV-A=FZwwE_AJzWXWHPR@Q3yS@#6TnioVsB)zbAp+X~H-&F`MG zN!5WBnmy;VyKIx;Q5>jY@D|B~j|E#h+glCKN!3AV@wn8!pv3Ok;UiZ|#SW{%o*-I~ z08_Bv!Mkg)EEpbiCEn^_o75g;*i?~H(KcCTFxv|Zn!Q0kuj$d0qy(K>SZolNERb!u zVud?v!>5_?Srv9iTY#n_MY?fPrdE1IGwJFKL#Y8QU9sn>+>8>qnK$}$oSyRVxo*Lk`!RX9L|P) zFJBmi8%Z(pw+r+G!Gf)ncLLTK)xAhn7^bx{yDJJKsD^e*`$V1@&_s=q;=m5cQVdI&)GEGR7^l>~g`57jURp$)4MCH2JM6o#Mh5;gP^3POTp!7^FNRUvgA zZwv3kF_|o+U=dtNFH`);nBhbCQmd&o2nSeJbH7cjbHW0IP&`leG)~3!1uv&>KQMi- zwzbWS6DX22*V&7ktMHmi8Otj1mhJAZVN7A7D+&h-q=`G>&l=;d6&x^+&%vQQdm4FGN?{AOeb(2WLpZU9>P~Eq+^kJm`gIf(zF0j=s;i;M6!YZt0u<7!kf-as8tTU9W{7m8V<gKr%^0y*Z@Pr17o}`G${?8Kyuco0@g{;79Pa^K{`I*(qZT5BmYC;^(xMYPN45E z1=7E40LmDVz>a`%q{YMIY2h5zh4p5$dC170sF5FUaG>Ce@q!OUN;*+!8ziwtep#c7 z7#5AN`t@oh9PwPRd5mlqURA@ev&0v@4ackSP7QN+ltX~0p6YDAWUPu{@1kn3WuR8+ zpM{kbT*ps@y=-u$f#}yvZcqy3xqYAg(Q1$duYgBUuJ>|bX}SNPb-y|Wy1><4TfK8>FW{RVD(TaOB!u6t0R=-3bo2Gugm~5$qYwl8pk5V3MAIWU330HO-?v@ntmX*|dm#7GbnQMG$8 z*AQ|8gz~`zGgRZRh6A|;M~|d8$AkhPaOvoAFy)dN3Pv9CIbR=zP^mw7@|N22d)ahM zD9R>OaRxuM0lGp`X10G62{L4K4oAdyoEabOR0UF9x zczNAbH8b%M6#zlWmA0I(P{$YS$q2{OhN4XT;4dMQn8%VK&Z9dQ^cIT5+JGD(h`-L~ znTPWXKCJ^?UOAEs!(ydrwZ9P3O;5d151LNZC&qt_Z|N4%UKy=N&Ns7Cm&-SV_LqxH zWtelQRE8cy8%El*gwg+m=lapX;QQNS{MSDM#v=V_ItLj$X(upJck03Wu$%c~><|?s zrO-8Yq`Zvo>hYOJv4dMp7tWFPSzD$}P#-}$UQ-EQi0{z1Jn4V1cNjyJigY6|ro}(| z%a8sq4b^W;mLcJJeqL>DL*>FUkj`1`KWu*`w!VWjvvbHAG)Ey zbp9_~|9oV5?2#GbhSfKGuKxJN7eim(IaKk%jA>uJ^|a*Cv|YB0;`J5T((W(dQFHs- zQ!=GjPudU7P*!`5OPPP_WN@b4wdHEsv4y7sN-|Cr&wMl`rJ^99TvMD9AF?3mxs-}e zGZ&;)q_zEf{mB=LuVt)#^Wg<)CxbGjpDxIJ_GxoP*^bUV@v_Xb3p#>3%*9c~nvx&4 z&q(=XPn-5suJ(0%F6_)5{x=Ta|Jf1HQJh(vx!kA2zGp$eCksvmY&@m;xg_BCuLClR z18~==1In-+0sVVUM+66#u%4^z+ny+yaj@i9sd}|J@YlEZ8|-yKsg_7zFm`4oY+xr8 zV`BuW{X;BFffmZR_PE|KG3<_2rx`&;u}msqlR91kqiwa`xi$?pOnE$^oSwcb@rMW) zC~P&TV!h$Zq%B_@;w**9(ls`?Ih}27n`e73V)YETRDcFhhy$kf+QscL;%YYA);>|T z?}@=yd2oD|Q?EdAN}IQJ|0^<+Sn-40b;ckHmO7!X_d(xru`HL-I1FI9an(^FO=gZS z#Mo9w@JP~vnJRCl_p9`6l>m2-VJ5jq-jZc5!Bs) zj(&Bu<+zYVlAs+D>Xf^o;RGz_<#5S*ot5&u?Z~GW5r^0Z!UN(Gj%A#BIq`GdlskoT zpKUggw!%DRFz>6=POHzjjn)9!)z*Gd-Y>%Tj0&OLt`&(0+?O~qJQdaysd!MYbF>v} zg2q+aHu=a`t#JwDcAG7zqTqB&uz8w!vFXu7ZG}N?Te#zi?~p(5)k5W7ZufjTVu~=f#Kl)@sV`F&K}_uv)A0M z9cd}276$iI8~9YPg~(dE_(x^J51o8=Ng&?&9I2EaL(tGRrYBHioKZNp9Vrbt5nzB2 zf3m>a!pJo(8LT_NkJs?loLIO{GEhHKU7dyex%`@%4QS(3)(AI|H2W_4M`AEuh(eEK zNfKy%VF?m88!RNwH(*_UDwxC{G^uPCHOr23=(zMi3-FM<7IuL?KIFwFp5A)6q=xr6{!CE9Ztk}-#kzor;Rb4iCTcq(0O)u0X z15rEJ_5^L`8iQ{-n+q4_yTJoGqT3~_sMiiKZ8hQ8_`yj74okW;uz9ELj0*P-gzsdW zT)~PfMC+N~&<#L*R#yNlb!*B3e0|kfUC>0Q_Bo9}k*q9D^b?=LLBovQu^ni9St<-; zCMdDNo`K^p)NiCk&3M8)?POGh88%^2Hu?yK#cEErKgDLk=L7XZfwI7R$G1mA+>i4y zHmw7$8eoJIci>YkadaDKZ zchz)(p$rFq?~vZ#MIw+3Eq`uVg@i27KGHMscZyy%-{eiRaB7%a79+E=vw?0LvIOH*@>Ri18hPyRuBuER>Cd?z(NnlOFe=LJ6*l<;oa`iG(49MEW*#(b5LOx^@CDFDY{ORB3Btit zgFPUh`%_AJ3494YaFE#X-AY;tz0`|N1Scly%X}^-*!f+S?6IX@>EJge)#rg!RdYj z+5O_2IvBK@S+%Ji*3Tx)J9xxpyM3pxbmDFO(xrv$JJmT$L`}!Vzo&0;1`hYN)OuYE z6)K}1uiN*$GVJJAvt9LX*k95O<Gnj==z4 z$EjO9Y0v=x12&7YYo-TjXVR+!K$jNE+TD#|9s-0Wp)n+uD)aME_(|sX2_pzcbh}~} z;w*weBCughEiL#7JXrCYq)XiV4(DT1$2VZSWf5EZDPiZ zT=u0{gu-|&6eC?mXEl6;4|C>wJKKm=)G3&x_t~;#fE>WpJIa?;Vbcy~?bv*EXY*&t zsb5FKD@D`55p2y>{0UGbEb#F6p$6#osfMe4Xw1%{_v7AYHLphcfq_Fn0(W=!rJpt% zK_x88$G7=Sdt|#3XI++tW|+8vMW1+yFD@X>@~1Bg-P$+n>zUEp|=TX-_}IeeRDB>q$EA4Nbz! z`+LAmP8l{-PGx@H{AJwH#&bLIS&XM*7F3YYnYrsdyc7cmv1wtpy`0@@1FXeqy=H9< z`J{~d@5bJJ6GAZ-27gaoiSW7*$V14H%ljrUg7IFrFhcXPkZ~-k0LF$=s{?fK`L~gS zEJ!|>WPs`Tm`0*$_m3h?69@1u@Eh}d_-Hv=jLdX<0D?tY6l4F!ghI`s75L|XE|G|F zU&U?&(TLU6VD4Mp#45l(u;1;J>t|Z|eG7vM$S=aNp#*A740KIV-+XBGDi|+NIAB*v z5iVT>Cqp;LB!};CC{m(%sF>)cBxTHf+KSe>3J4R~Bkl$H((;)9he@>RaT;?A+HuST z9ll~}{Wuh7H|Kb2lT9F*4rnx1osb_Q3Ply}iId^iioRd{qyu?OPq>6u4+T=|m>`FO zB<*_Mv3~-;gUTlilm5^UDn~LfTP?tuF=&n+cLLFMTDliN30|~yxITgIHBnLv%%r`I zt_Y>dP`g=)6);qwK<6Z*cc^mw$Q&xKq1~5(ILy!0add9bK|)`V%G&j`d9=eaP$j)q z$WPiTTI+zgl%FJFaxu@+iP`X(5|4UJ4LJ(a)AZO`;!|j3tSTPkNn68@ z)omS>q|@Yl8JGolrrnLtWU8F>J7(i4@;f}VbVbuy=|oHD;-#l^n!g-1vdD21Vf5T3 z0E1~}d}zy?G#&k_rjg?dmOcZ<(Awnl@NfnXY9j~38#oFfcZd!h0vo#|AN$)N3>4jW zjhCXke#8(>buP1#Rx-eV8g8ZEb%3j7w5Xzpe%5UsQ|`G@O^}vdx1tmthQtISjSd6_aHc=_y}w&*FMr!mES1*9+c=Hl*z`1$$MWOdj23UqRKpkKgD zW2SvrQ`CFukCtwoY|y&ILzGo#d*x=smf9s9f=S7G*d=~gfwS^s7B)-&Kz07hHaXdn z_lGci+&De6gf*-k%o+aa=#3It^b}>?zLN99n{Ur8d2zg#z;CAgP|@a#H}h`1ajI>~ zvKOZZ^=b#+xGgh}9~a5^Ro9o-UfH~b%Ze&!^!3{%-8|x>qOcmor z*~E>19!uKX#MMR?y)fZ#ZrlV;Wa;e)=9=ijOB3_@y3Y?kku_02A+q~AArOL1W|EoY zZG+;Vw_x%Xm_yGP^iE8CwXvL=z=Sd(K_YP-$665A@&MzdpLd3|1E=R6K7>MpTnelv zfh?w%4zyZNp6?#KxaFm0f3Og^P$Fmcz;qmP;!uq-=!WBN>t;9m^XuRI9tCrd8@XPE z8R}m3yX`oIyUhMw z%`W?>9_MAlD(%k8)^3!WB@k<28Csbg-${C^#eR&R9-f{TJ6hGle{N_>jE{PJ?{TrB z=iMIbGI^3b`2i14?Z>;1%l`Wvg|k3sT(www$F|WiE!Xt+T>qEitq(NhL;cy_+IC<` z-e8s50)NqLJoIIRNl;-eC@>`TL|_SiaMce}df}e(=dY}Wg7=+m;>Fx&pt|u@vqkf| zUoabII&C5%dj1)7QeaQJb*rN1EPOrYTAjA07uk4AMxj`8Pe>v4wjpydkxnk?5>C9UUK*#!gLW&v^2BVIo{! z$7>zJBwkaey>S1VNj<1CB34rk*{oV?&nWcPuFW|^kNA-X9=hR@LE`&s0JmOdnUO|0 z5Vk!fcDi>0<`GmRDqsXQMbDfxP@Mv_J*=h%0})o!ijyT4E~>BxM3ET3sOr+h)d}tJ7vQ9B zWwG_9dQk0b_4L84_V>i&zc2suf8nt9YmdEd~`p@>6YzFZ$%3MOxXGfya{%drX zM$<~S#2Ps8wJ4XV*&avVwh*WZVB2r-J+`{f>Y=V#)z`KxU!=3DEz{JH>4d2zvfOE6 z`MkpLnsIJNVT;#uefe;J$+DAINxToWiU*6c&j5q69r-vxkggKL^sw!b%1wppU&n?x zGmdUuWoe5l&Rl3UctfMWCWf!$aV}@}t#`s=q3tnS)tV_a_|p|u!amP__iu?B zZ!EUv@V*iMjAb=jW?l)OL2&f~>o&1eWectwF$1!?;4KEK`Ed4F7T*=$0k&dr;qeJjc6ugI6c`m4!+O*2 zyc;?KMxVm7JAiMg@P|cZMBbS|7oY@RLVG9V=f1wsI78&Ufb)-$V8L;Q1d5q(j(IOK z3fB`LpS3`Se_t+2V`+a-QDp?Q$TakMH1Kd*BhGgqFCT#_z2UqAUbv*V(}~j(I3!7H zM;oa&4~|#c1E3Md&k)eIRF+oBo<)P-m8nL>rL>gJ52?{swZwZA{VK$1dug-~ zX#^|U*wfZom^o_@PCT$1qD8M{&$VK*_np}Z_w|@XycUq;`3u#CgkU3EEt0Eoc9h^$ zh6l1%+i?-WQlYWhs6Q1N_UuTv8D!J*9QnAPk{3v6u*O!H4S{Bqcb~@AYVbZ5EsnRm z3cZ8pnmeNkMY7yu8DhCI-YSwO{C#n1p~XX-sE%)+QwR$0?JEm%SqqZj8GZVtF31ZD z&7G1yE!H!M)8Vj9Rh(#R1-`|$#n?J~tVWzf&v;Yr>wV1H-fmmi7ac5>IV_zs60<5& zgJd#kUKb9&3%ym7^G?RMhh-aCQ2MAeO`k)l)ky!DsWf*=;g?r6!(fMxn3tl$&$arR zao}XhNM%<(EAz(7jPPHlZA2#lPb9lLS6jj|(K2Ok9Sa|?fhBg_?O5jl?p&~UFewNs^I4EtO0UU>CQ!E=NHUBMD7oWup;im_1q#X|$ zsQL$Ft~CF;mi91A4`1FpC5=H%n1K9KwiNay zMsSqA154ASzS+;(T4f*=wPKw>h~j52JcvR? zMzUci+si}gAC)S;3%-b1gDRWt>FliL69SH7N9dEO;vffyujsRdygCcu7kW7+kB$c~f0oVp0BsLPkOu`{cpeUN{Wb^tAqkic}le`U|VQbCv&x zsrP|vs%-zqHwVo>=}0|JYiwHiWSIY+BuR0@KWhaN40dmV+t8=xA1Yn`R-Tj08Et;QZbPpXc-Wo!8S7opW~1eeV0Z zuj{(6`?}t55_XA<@kl7Z?OehiqOu>#ti)d@loio4xhcj)hKV!x;=DbD$kxQ^noHbi zG?B8D4L-$`%^*XWVBODPPr>;mVjX789Fe0rh33ncpg&$7ei78g1%&>AIv$Q?)QVu8 z@aKl1Qy4X@4|=hmiaqTvwnl=lb_YwRAj#*y&yaxA7IbY!hFP#wc2<@c=2DoEFsCXi zk!cU=n4ka@B$03&G0#iWyQ#Zyufk@WwKoTxD1+b*HwEy(B7Ne!Veq+^&gef!-hZO< z`~f5s`{oi3?8?0Jb^cvdZK zQLh2w8MQmX&WuirN1vP3pXj!U3qPlWua@^S5yCuxD|35*@(0GmBSVp#_l@_H0+@z? zIS|MK{Vd1ug&bi}MC~#mq-@fnvIQKpAbFC4V{R$pzf1KX3`5Gj-$%i_Qu!BLKwMc2 zZ|3a#m(<9ckM(OVn?Jst@X2NMIq)rk+i-fm8H{HAWN8>G?!Y@9A103RiSuFbk_E)C z{?bh?8nfs;c)Pgkoa|~jM+q((g7a?##G;^#xOEgJVt)@I>%@RQCe2@Ie~hI;b^7lahZ{icssX@3VsnIxsaF)RquB*qXHrEzz5iew3!Cickk678k-} zQ)Omd>2C?R1TidX5-ye9ytKhpDzbBq9Sm$H+&kNHago*MbP46*kT9qJes1Ezg={Z& z+5aV$1GuzK)b=`N(N65cWRb1WGG;#{K8&fW8!BhcU>fN$EaQ!E4YMc){@&xKQ1P|^ z=%K95uGv0I>tH0M*%tW@o5Y_EEW>I3Y}>Zu{B)U-xO$LN>{M$ z`ZwZ-!P47!aWD;L8)`>ya>n{pMW`uMv{Jk zCLR>SNI!kW$OJhf&3(LC`GOJt6^0G}#nG9bH*q=$Za0#U4Q7c;yjgc18DJc-A6}?W zuwaoQ$uB4{!!yI4PJtVnO8zA@dY%N#R*8*hF)OEWPlwQ5#v1}oe}DE7c509U2EWG$ z-ac@3-*#R>tX4;*(zusUbe05u&;pe>8?pc{HHZYH4TM=C=8QQ&z(B^G_C5BZ8c2aP z5i>!;C?P!%Ndm%GLS@I!Oq4@Rp$@rc(j41o0ilo}r9Y{`{J;8d=ajpM_Thc#0CU0e zOoO%@27ty%c={mS?LS=s1JnRrie>~b`MCMvQ=0yVa4k`j8ax?R1HaI!-R@7I#EE{o zVIi(5Y3?`r0`OM*NodKnB^LA?*T1-b%^0asi)kn>gxiW=yP+#I%R=V%46E51^uO&^ zNiCR8pHP-~t3HvE#>Qrg32hGfhKl9zRzzZPnsbK|5}Lt%86;6-3)MSaqW>4ltb>*5 zZ!CE63JLTq%2+L@nw5B7fO`^E9;@@w8PEr1v9Kbv<{C*YFf=-@8Ul4>Qmd^*CZoj0*KAAAlJU6jH&UiEJ9lHv%PgLvCsxzD z>U_-(a2X=6!1+pq%kCECg!>zfw=KAng%MGP1V|H4gctK4=~jzHGvc$EBoS|E+Xy*D|Pf5K1Fl3V|7IMh74f8$+RiCx@U` z2*2aJGwwi%M1V?5O*E@Rco-7y>s(y0gOG2{A!HZeT~@U&Bs5MphC^k5ZcvIjF~CB8 z7oKTWi>2|#W^|w!6%FP9*ArYnaKAUZ&95P~KuzLfV`~Cft-_(f^o3aCKDAg3&f&{h z1+Sq921U!<50HwWqw)!bU;#X{e5?xeM+5kk)(0I5aW(nOXW=}Z#{xq_bjoK?gRz6k z?4J;vRw#gYTg*_p4QfAyq-A1&rUy}Of5)K?go@`J3QRcs4~*Pg1qe6NnDb)P^Jf=I zY-@B#v4&Bc8dpLCA@4m4s7jD$TruJ|aIh!<@j)LLG+B28Av^%FDeJ44G9fhG z($L`3xZGIEXVDt?$U8VqOlec4R)a~6L}%?9COki_UpK+3?Rk3_=_X+8&0 z1ymC}Sh9S@K~JF-CQ~Xe3VrR#AO+Jc+$utSYsGUid!8ASLB>ox2j<6uER*OnN=n(G z;zjZVChVNj?_E(-uI06#QMzPStGUkAFV_LijKPJ#gs=CFKx8W%QbVk%XJRc7lI>$G zufeDGDX~a~{|24KITxey8ycDe7(IBa4P`1|4(b6WjM1PLX+#y5re=nbU+wgV}j-r%{I3$c9jpaGn~a6 zCXWOsaqrzhr6pPsHE_Xth9KeS4TjT&TClbUz)hL3@T1T3Q1CACerH7|ih6eITWp94~B2`E*Z^(jFA|K~I*Fk{^(PBj*w?Exod zA9wU?2#ORgBzMYO$g;CpA&dWea4jMhYu-UbHvfNb$l`2YEcrxgTbOk>q~u0NYc}tM z_ZKV8oT(*itj_(g(&!tL4{~6@N=Z$L7a{Hg^(&M`IIuDj!d%dyze@gq!NBMLE zmls|Tg1V>V!McvREh4$Z%G4?Td=?W&YK*sp;V?+$5vH!LM5Krm?bE==o-%2cH5d%K zWU@p!D0Q;N`gxQwk!ko%AjC45VS+w58PYYRX1W<}uE;Rb81~&&VnO1uS(Rzf+(pd&q}yFJ~XXHm$^Jr{d{K&wl84_^cV|#CQN~%VD+U1WY;v+j(DxlH}2~ziX#iSm0aq{ zg(j!#fRqW<3uK%FCqwh0H6~rt^b0wLt3)=e2(FKt48z;6opD2MFlI{EF#GbBpv%Zf zS0dU(LG%j(A?GLCrM9a}O#U%DP=f(4reAXfAdRuHmgU6licQtM8|W80&c9iPV3nGy z!@!~X`tfAp{)Sje9{(HvFSh)j2otLR^a_|Ny5WECfN#LR$atG)B)w$_ZEs zGXL#d^k0Jwa9XzB4MiJ~0Z9M*b~Hzcy4YZ;P74B26zZX$hv+87Q&S}9o+T#YlF}NY ziam9aJ~OX#j=xSUb-A}^8y3>)@%NRT!xb9gmm?Glv zq{266i_FO61(5~UJtQ$aPnRhgY6GT@3zggjL97uc21an9ek`!Ok>>glqSzuPxTwRM zBEpCSOM%}t8}2Zabws*gU3e}rmk8xU986x;5~mn3`6*A&I*QDux`{@2A?AQkB#&6> za0Ws>NPEoAT@iAAG-OuG@sMjrYAUb?U$4|CKl5zjY6=d#Tv@2E$-h&YmYCR)SMm`k zmtKrR9RBG3cSyAry^}J45A3zq&QR9MYnuS?dK zei>5DM^MZ*+D;ZSJ_%D3|8q`E2N$&tNYflCC8 z2(b5{I?~shgc^5gS}X&%O(ubbfXb2D^)<;S!^uQ6J4i7lvLM#6(A2keCmUWfp+*xC zWAO^1;;S^K`0E4ZoIXo|h-D=bXPTx|;WUIxc4*7-+1%_SX1T^GZYi5mmd1GFEfwNl zE~ZWw8|rk{5=EJ)uNY^^9fYigiv3E)JoI;=u`Uf!W~REvpUvPkmfnEV0+esyD(>7Vvzxy`$#`3p4u=_-V3;U*#F z5rz{K<IuGxB ze0)nJDhrH}Tbp_O2v)Tnaww52z8X5v+&IeoRQW+8L8fwoYzKTsR z$PHNm=lGX;n7UTsnbNcZP?>A3KlH2zsdqCIqI#nzp`ev~1mDC9T~GuARw}c5)F}*H zxJlOFoXaj5)Od+Y#-z*&2j*e+hJ$stu^PF!xK5Z88AfJx%uVq{OHX==LPAmOC|g); zKYBQvPAH-Hq;Jp13dOEqdL0gV55Lf+t5JHY~b z#FKx8(1-720WPC_f%@+m%4c`JPNoyfuiq}Za3q@s{pxlLc^R~!&yvw`NS^!R3OMcj z^mPBOS2w>EmqMu2r3aVh5*j@T2GLy4w3o?ic;!-#F#tMS?VlFQaZ!lrX&20+^7V)m zp|Jclz#L$Yz&A!rI6vI2MJVp7X_slM%JMcEZlbj1Vw#wQg@~G|X*h+;oHS-)=GlK4 zwi@mTj7~A5R#`ALDdZS9b*5;$(-IO{ow6Xzi;)r+I&FcWwp4vkw?y1mJUd*nmNGO$ zrOYmi?Od;O1G(1*#_S;gybLI9hybQ6r{e?hgzs3QV+1$Bx@OV8y#wx(lISRvC_ji$ zp<=Hn;w35?i%_Nbpq~IiL6}n}?k%1XE?Hf$&FFL92xjSr80%aNH9I7Lvh`zx0t;l}5 zcuUsKofKADI7eZ>v_I3}HNV>=$=4%dahA(C0H751ru+b&@Z+7@^Jp_xvZMTFtibRX zw`r#vKqJ@}%10o54EAa<-|(3+3|GxSB_MPX^d|dS-Flpv; zDbAY9r|Ha+{{kNhIgjuqROxx2+f<-m3W#@f&Dm*wH*Q>p+69SN{0!9cPNbf5N?U(E z3+MF^dAwlhuFx(#3!8A~vzD$nJ5Bt|GLA<@f~Ark=iOBPS@YR%v!-!vJ=;IF%b>-V zLSy^RyH||L$G&wIevGe1fHZ&C&M`aO7_Mm;oL#;#km_Yiv1uUopB-ZuvrMy0yB*)D zH{p#)Qm2-^i?7{?Xt!9a887H<{ljcp%aENuLEN+nmljt@PsAa6kRh$N+#98h__!C3} zi^5%}Ms+VyH6|1D)?BQ_QwWMmX=F}>P&_VQDE2#NfawXdXPUw5%DIY)XX;OKl;@6lK)BQWqhdPPMz@;wiQW_9PUtlLu-tlM}D$vF&P6P$)9aPGr1-%ObfPPlJ~k<}booOmsx zeI(~1&>AhdW(~Sr{*+yxrBXAp0wzjKhrV*DVwoi-nnF;;gtZR$VbkKX+=v-3x$_1T zvf0g@LKkG2)g+#*S(r*xhVxt~s{b@J?Ve$Ro{z@_-#V?4(aligpSQ}fud=)Yt( zalSAPOM|+9ayrB(22eV_tJt&`h*z47^9g zWHGgtoi*>`&i5Z#lKdr~WRk*$X;{@PgD_&K@C)-O-C1t$jkr~``CVvsx5;h74&qMJ zD3yxF`OGg18s0}cNH$mTLb6QfDP$m+8_w$+7G&=D_UxE1r}?2-xilOE1x(QGlK3yp z)4830H#WPrBVqz*~pU&z)p_yLoYanfNE|{V*6h zX)x*%wdtR6`cO&fkYNC_v@w@#^ndBr&Rh)|`tl#wi=QL~Q-2Gs*OjLpmKqIu`l#nS zWM;>io%;v-lP6W3IG%m5-1NUdLQ2T)1=uGoEcUyw*RUlRQn(QiS4_rTScxD$il&-i zj4=F|YLFV-f+^<@1l-tzfDrj`1#|K7b>KfPTM8d%CzU@rJq`m}!z1{3dW3Oxt1F zNjN`e8D3&C<6!^+0PC4VybK98rt=NHckwUs?oxzHxF&#;ZE3@_{OJga4yEq5vQMBI{8{e?>c{Bb zd{vA7RlfRrVA@YxUyfBJwomK4i2Y@QIbMqe0mhshSn>2vzO1F#mW}sIDi3MgNOth; zJUgcGsv946cFd~>b{@E^Htm4-_E-%CG+&%ec*jaqnX2*@tgv8l$QPz8i^Tsih|InK zUG$2=^V|OMq<`w>&8si`@=kv11ZwzmAD3+WbpFm2OTTzvJbkmKwF=x1XW!lyl6-wb z>!0w{$c-CsPe1q4#MIQ96TdHNJp3lftx5Is;LUAD&!wY;8>=H3yW_hkiL>sLdz7^9cuD zeZrakbmh#}{MT|vXTJP>qfKj?8f7}0wO02DxlnoVTFuCGI*wnVOL4bap4ZGiyrMDR zJt0;3si)Iwizgp9uDtSlGT&KP9g|))y5-8xTW`JU&OLTG?zaIknh@kA#bez`=1&Gyg$~p zSjq&U5e&3#%^vGmx)kpn!(?31D|-FLi` zyzO;8?Er>1E9*_-C}jxG={dcQ;w81&tCEvi`kMY$@-!XiKyJ8~RSnsTG8qT2WV?e^ zgXe^;nHO~{!mchZmOU&}fNPOqg?s^OEl?Tp0EJcnDUZ~NFABgxm3PJwe)%*Wa#{gE zZh+n_j_GT2B=IDXpM`v_ZDyYkwASbBfFMO7hm4o77-cU}-mWf@xL8=k2-6u^c4G!( zf8MxfzzG>@S^D_WVpOz!FmB(A#EvzV3R5$=n9u)LqOO|`Lf}fDkcXP`~v{@wQ z%_VFwnyHi7sJ`aH=1k(fBpT>-^zovsD2Ed8jldo z!3Rc)-*6uxp30kQUCs8Tr%PnWbpyN+_QL*=b0)0nCFHjkmJth?Kn&6i$vXkHYoB$%Ex# ztVqf1aE1UubH*={O-{5jb7~O&6urZIQ!E5g)uV7-sZdb_>R0@0LGM_E6=hNdqH3sb z2g{rAccCJZggE?9IqsoT5T|PwX-24o_QUpK(cY2vZbA>22Sc5%c|v(!Vz)+?5dG)k znmt_aGe-N?mEcVfWNXG$Nfok<)60$ht?;o4M3AgS7u6 z6AHRXi#-*!M2giJRvE_q_ zC$66;9~`%!AaD;6<{CTe$mGfb8~VNmVa(R!EjQTH&yK6OzP38r`6-@!vwQ8&aaGs3 z;)<)N%Ht)`T`Sq{On$MJb!;duo_uI}Z;NW2$-!37ytF@#n^#=1$6sB?bjN09R222R zGrag4qfR|xwrx&IZ|~aIHJyf8JPxd6GLN^iH%B*X=KONwTG5Neo|EIBqYpjRF%7eQN(i@FBWCf4`~e;D$K+YK?&By~tMc2j~zqjp?^Tz*qz_{^6=-2L^nhZ5@m?5eU``QNb ziksN#6Y0^m8#&aR=Nnu(!7_Qpm|nW+Qu-rXRT5N3Usnvzdk%ci^P`Qu)v-|**e0wI8^W3;^?!6JK6#54-f>dYHc?gd8GE1vW{V+7g~FR!eI${ zKnIg4W+pNZR6sPx>-f-N^&;uiqR0b~RDa(0s6?Fbfvn>}Q)GZK{3=I^-A^gbbUF4s z`_!L(wWh0&A3&Gz2%1Bc$su|Uz>=ZgQ9N7}j; z3x>)2`W6?@Y5gQND=v<-wxyA8${RPM2T)ZzjaPh*-7`y57H)Jr7ZsJ0Xs|8`u6H>U z*yjm%cA^*iu{Arku(Ok+!vL=oL?uSv7Jpl^f4f65dwR2K^&jZ(PSypmboPGN+~`|5 z?7XOwMKsb(E1uu)aFn|b#JiA*YK=ySZtFL`M#(Y_dGsIx6N+PuGo4Dcz0JXib>i!{a5h3|q&W%hhczp6bu{4;>iS%XZc&f#Js0 z9D-wm>*`+70M5Gd`G`!&#L^^t-)&LF?xL>S=$tUSg+K7g2!jfEC+Ojly!ETr)d7Sw z!nO%ydqsT_3_9yTF=JC3TQB5=K|RKgDc*8Qx1_k}VWa2Lp>oFVo7%R{mVaB z_je$$0VcD3dt&yY{3|MHZ+p10j{o6LJvrlN&3wAA4|SGMYaqj!!m@I%EH!7q@F!;N zPSf)aoyz&%vt4UyTZdP5b49B9-rnkHu8uRB7uV8!oowA(!B*|gwk&_d(KQFT$6PGz zWyf=z&$6*&|7xa*vZUhJY1;}Y>fTxC4_vkbV?bYK8~@?w*X%WwOSLq; z4z~bUomc$+F}8Lt_og{X6`KyPP>t7I>!v-6wA${6kQojMiMPD7`}7e0#XbmH*$*G> zHjesyd28c;6aRsgixqkx2omXDlb8HA7wdv(NX9afN$flzAFkXiX0uGe7qj+d4Pt zI-4`-^)kdIObNA{k>OVXU`Zi?gI>SibMse=bl*>Uh+CycFh!{^z@Q10ku6(e~C9gliE1OBm& zeJ4hsINi-aZR5Qyu`b0Iqnp z&oLz`Wvpdr#oXowZj!oEX)Ya-Tzgped-)sy}ea285JCFIS#t!Fgf6Vt? zgFj9<84jJ@^kU8ord}x8qeuiV8he{pDvX?Rgn6C^)$T!BGobGG*b12N5fM{YzeN@k z!*rHL4VZE&(#>arx2wehq;szjM(RpkG6i#7FF?CrZF8#tBeXh{)KOs7jW`fBj< zbHcc(f8FsMk+;{2a||PS!B*YSPx*3G)(;oR`ZVe>2M$~6qn92!VQV1Y|8)6^U^cI$ zs|k+W;$x?q$hZbuTIzyB`U{*FJgeijU--*H2h+JKy2+`@KAV?e$8u+Km$)$wb!;_5aIzAxA& z9DaDPrtPqXzFBosnXV?t5~x4x`lI9rWMA0bka0MGQDdwAe5k7&?(aE0F#|M{xmEY6 z^>I~It5><3=Q>8mFp62xyMm3wQ;p*`_Bqna_HOFlQONh5+mpFPCd{$0-FS=_R-2P9 zcFJ_vk4K9^g=?s?r%=4B-D^YA^kAc4{q~=Q4W50pope@c*giDQ#sGa}dY>Y(cJusG ztKXq1fEqYf<6)=Rb))&kz~ZCQV_I5uWYm6fBfHkgOONCX7?7mzeQn~Vf6}K;Yn+~A zIfx(vJ}{C)50`%0eRKEUbQMocEpMuc<4>wO-3Lr_rYUDa%-%m+JsZhEy6d$)+QO?n z$2M{Heac{%&tF*Gz~ePdD^=-b*9m<;e%^oyeU4v?la*rkr?)PMKR9&#Qp=6W8H8U~IiFtbX-`}F2%!`^+lS9120r|0=) z(!?0h4Q;tJMAmUg*XmgcJ3n|Jz4|>3UzEt?FeSp>I$6=;r&cc6ZShfru31T=(upsN z37*R-}p>zP9b4E$y7Bx=yXTmQYfYH+wN2UYXx@rMrO6hKU?7FjeNS{pUC zqQ{o<4PSWg;VF$$d%5cN>qNcyNVh58T=476-3N)KeZcUT{CgyN^Gnj|J)%s?LL1$i zG#fSd3dvK9RW6tBddawHetPr6SDuBkvmU$L)_R#`L+{T8yY2_W25vfBd!rJrk-cc- zz){ASCtL4!u?}0h=eozsOXvTcmrz9Q=5RIGgG;}gKNi;g374R*{&tJ*7|xyEjyZOb z-7~jz0Pj{8+Y=L&Jm{-lR+lzp%0QmClWm(eHht>UE_Udk*L~I1x@ztAzFs?=Fy1#e zb%Y;PcD;vvCxd(@N)c7ftL$pS1iHwcj!TZ-IUF%avT{?wW{JgnKHJ2c}m%Vrzz{fAf7# z6@HX@ue)zbDQ5cp*$a~3#IZR;$||Z(&)od-`M+;zY+Qxqx|gl~+lB!nf$Q-^X?kaO z!Dh_|vAZAGtKk88`y7(_WA|QXPrn#dab@*|WXhdY)A_K=$xYt2r-uhQcSSbZd$4Iz ze8Up|oiCcYcA|;(r}vaRF(G`f_X2n8oHvPiuQ-aONLWaNf{)>B}1kK5MU zY48d}MS4f%GTcnC9SBG6U3`Uge8L;XFpWZ?)XH=|sNTW#l*5x=JP3q}qG5SK|LV+? ztUA@PR`wP2Z^SQ491F2#XG_A~DfV_vz?8bK_R(rDt^qWMpH!z~bA(T7`>yS*{CI%~ z%hlU(AbEYKg_@+|2dCK;G5@M;6xkQ&1zn;(#~!?lVYiGNoPM>3jUAj9ezBuoB>y<= zzrVKk0zjpR-JQ;lj*mQ0py7Qr(lh)$Oij~G=}68e(j^UiHjI_QfWhC0*^UN{QrG$L z;i7&YTky(M-Wy#GSw-;<2krU0o7CL@C1(g=PQ#8VQ4@Jb`q=NH2KN|iZ+)mCwcU&e z-ki6G9XD_e-_EknMnC<%p|*KWYR#G2-XnWC5vZB}VboU+)|27AWUrY#Go56~SRH~P z5UGzeNii)=Y~0B7s+@Q_L(PzNr|eHe@haHw=SDyO=?%6rIfs)lj=@aQC1GlyH#w+)ZcNlmDr`D1RVWVw1wJvTPtA=bH`)SMR9I9mdeM8N6xN@TQhIA}iS3Nm>?5E!W zvvlkVdNrAdS<-oBEoZhOO*7}uiShI~$hdvn#x9+Bdo4@r@HZpv6u;|BVHV+?rhUJ2Upn)HOTO$ zPdvQxP7?Q{N$QOoH7ugXmwuP(ww%?F))vF;5iywg^zd<;@)(Csxv|n_cu;}dt65Fi z)sU7R`;qx`2CDF;vZ-G-X0?8!abG@s!|=>lp0`VvSrPN33y7y<4&A<7vv~p0)*Sw0 z4F)&dds#hlKJM+Mr+$1S-*--8vg+vv z7yOv1MUJYGr6cDm`V4s+?>uThuO6W?%Y=OiA3IWlr3) zx)wxIL3YaV+QbwlQrAfVY~2A}{Zy2-__jyWxdp1LEr*m0AL;4sp-`%Sm-Zyn8Ix)j z)p7$9v6H8g2a(>JWb3BGT3w|kvq9bHS-l9K7VOh0_YK$3T>xyk1uw2f<0EuS_fjA~ z?d>|2;e2)weKUtV-%` z1MW9N548w66(fW{Zu;C^=&3V*Kb)0zFP&bPdZcmoO0!S(65{dd*l35BXLYk{$mh9Y}W!X)~%lp0KYiJh&*Y{UyaI1l4{3hSJ7=@)QaO8Q}(|d+O{wCOpsK zlf8tPrak0a!r%Y>+Rg!Tq*v%fB1ThJ-6Xa{+*l3K3_QtH>WEh;liF)u@`<#x8o-w;D)b%mxTL!`*5 zMTfMmwU%Yfod=bfg_Qc)_Jy~8&`iv!eF$giUT;IRYyES*Jx8%4FVi__m8iUEU?$R zs)@X5R_9tKRlbx;w=}l#_`JWSbT@pwH>tKwhaX9FRk@f&m8-jOMX$JjYt+6NW6xSW zq29WpZ$19;N0t5_#Gn#-{xTV&##`^NCR;oj`d9Mh)(#Qub?E4et!t5M zPt$XTD*hJ%Pur~`G=5cvW$4!qWR!jE{kRs;w2Vju-iv@}Zxw3WY`>n@vY6iUI z9q_YERul=k9BN_GfWAj@JzJlpqK6h)yTkQ9mpuH`iI9%HX&k`c+nn}Uv@|#s42Wk$ z)})$_GzZaC9BgdrfP*kL+}0Qx5#vop6x5*kmu6LMSn&F|NXUP>IBIN(jIFHJlz3Ji z%V`!2+l#$aP|X<{rr0aei|ND1PQ(?=f3`X2;ozd+;s>a|iq+HI-~FtX)$%ApOPMmfT}QqLVaTYYkO#$_b>i_8nT2oz3j{ z8=s$^hdnH6&Nu?k(?UH<^z^bDU&PF}q@+kjXN^<$u0tkWg{|>0DqWMJw;k?ld4CR} z<{n-t_Ou|6Kuc;Sk1T8WgHV#h6URFb*Z$Ag`JrqJt#ifj0zH#$Ys&UzoV!m~{?DdG z)h1>17sJz=JDW+_^Bzr2TlFx&gVVO!TuUWyK=IeBVvkQKn|peS{5WH!J^L%m^M~?} z_tlOZFyOTgTaQ|`@5d7>bggTC&EVDDp3#(dail6*v~K5jR;}eMWPY$*pYSV@k1Ps? zLNoS6XO?BTbh9hHYM0>lQGce3l2|)C&6~4#uP_}HFyZ#aQDJL$sZb!hx$dNTsDI1t z&Z*X-L`iXp^}cSxfCu0Fass)p?SEwtlqp0q!7%Uc#;9R4CtI12-zjt?mYuupI{eK% zYe^0*l#jLs18dzWsQ<5f6f}2!Gg-sm(ykF zVQZP9AEM=n_UVawsw*rkexv)*YvV+T5hh$Jkc;F6nO5K0V%gNMnAZ8rhQ(i zu&8A%$g!L45lK;=`i2lx?g}!cAtR6J^a`6Ra+uJABuY^%voeKY!IX;ionn!-WX~<( z=?q~hPPUiqpya(gX~KPNq6ttRa#3V)N$DOD{HJGiso}cYbt2gZs_tUh%Atv2M?$(T z?=D@B^;0 zz5aUsmSwTlyyjr3LPzPX%b-4Mo{NN4VV;Z;%BPNu1aoxJ;s~h?|KsVRqN33YgJmpV z_@vm*tRYKEb5dk8*UMx=+1vcct+eK15nZZ~6Mgvd?Xb7rKTjk>It92-yuzw_nT*nP zT#|-^m&5gOlmxzPo%qnc6AbOqP`VL-^g@UctS3`rktt!U5cM4u5~WZsPfXM+FJBf6 zJAT+6Ua$Q@)OYf4M~g)YktlJ=vW|L0?Hgx@y>H!eDdaEiE#0$4IOK}?WcY`YA#yp2 zX}10q5-Gf)J9TdjEuVQR&-d!*0$HO-ezD9J5_N=^pt!H_^BLCAwP_3MWH$wJYlSWE zQFuwhuc+WgK^c8AMjUok2Zhq+VNCnWj8`nD6jrYSfZ+V<_GjMn3MEAmCczr2m%UqD z*)l?L2#PjGD6{hW!hcwjw%rPeL`7L^z!dt#egC>Tffyi6^)3M@b2Z;IXNh{7O9b*p z5OoThZyyT@B?)#b{06mXRf47t)bg^uQytCd4^dxegaH*o->nvC!gZ?}1X62^J%Z%E z9imZ)Y6*)f>PoiIqQu3)+x1_I#G~v*i9oe)(D(%MVnsxNY}0C&V%^08Mxgj+A?i48 ziW0m+7Ni{3qHw(kwdJUm4t073IebxsR)kA38NQ+@Au(95GY_#MNzfAh)L4UT2_R3A z_>e#-$L&{;V@83jyj8;vpMrolW!9BetK(r>2ppXPb;@E8c4Gnl11d*cI zVZO8|)*cqPHpygGjjjDPIwQ=N^$n313)tU8_M~#gC!$^{#A;`-6dUuT`|g3>8!b2zm6H-R*lJp64QMg0sKLiLw;Ob}&WsgJy+q+AwBuQ$J@L;f8~ z4k&5xWqV*~QSdFGP^LPK+D!9y^Ry{H<!KJJgFREf7%Sh!kz`bj1fd`qXz)Gv2g^z|h5j;6C%tku4W z%3ui?VEtTIB1K!Q54lmaQb4WPsm0jUXtoR~3NG;payx!YF1#UD7XL>XBJXI@57ymL3dKYC==C0P%|U zIMXhx>EIFzYTD3|u?)&`M#MU0Sn43be~HBk=7ezB?T{)HWpb2Fy(~21a+zT{v1tr| z0rQup(VC9%e4{cJMm9S(RGzzOw`Wi!cr+*=F|tTX&c)jge^ktH6$X?Rq@OXtG9c?u zP<#`&_J_%psg4?*B~u$fg_RY>&ZW~6q>OdlhccdixdVbnNp%Xj+^c?B0-3Nr7mx4xUqE&%G2*+e&d zWSijJx7j!)R$n4+*AAsQ0ImChnMVK#SOi~_VvVwuY7%qbv=3&o9ZQ#yC$NLix!V~(%b0#VQhk6vI?s%nH{GOZPctD4s9lyn6A7kRooR`m z%v!K;v4ZhUyvhek7%DrB(`3KCO+q8mjtp}?&G=;cXc=t3NoWkJI_IYqfKYIe%ko%Y>-= zuNUb<${Tf}puo{CFxCnCe#;mtlv}|Y&llS^Dk6L_gQO;2PS{!9Arwd!uwj8ND2#+N zVV&#@X6rO2RB7`@=LmAFURQTWbaF!)6f-+VWR1?jAFE46MjyUHWOT|p`O;viBQ&D% zj6iCaNfSzR%}8&Lmg&XE)D?A5^oK8y8vCgcvK`* z>aTOzoVtP~h-vxX-5?O{k;xb4!T%D8L2;x%dC|GUmpQp};QOE2BTPCVb#xArLlIKT#U~8N-WJ3Df)*pmlUY@lsXo(eH`|M_Z*V zU$hwrHKD9;qW7f5zG>ChWSsklP#R>ahe{-gk?@hpbA|TAL`+~t8X4nEvV*{yN66R=YI&$my!}drheTc8 zQbZ>l?yXFSK2xfqM^tx=XNrX`S#^{wT(YMtMtr>4;&WwwHexnC8KqGG2@pw}OSa@h z%dAMU%fuc>>b*EPq^?GhR6qLAT^*=|`^#gX#ZL}520zRRie%Q&MGTz*yBV8yQj=;` zR&Nj&Etdn_&dRqlp-DkuPD3hiDD~#5pg?YvprcA%?sCW$(TB)oH8B$lq|ks>S-q%S zC^G_KN=f@tuuH0|36{ua3@t+38pw}Ur5qKonzUEQs6t{b+4A$Sg5cfu64!$b!oD*Y z@pxJd+Fm(GTkGJ%ewjji0+}&2Q%##lrVmVCVM}LFAPtKmVYM~5zj`5MlqeDcK)jSk z5}7$AuCE(~qO&Ek8)rsbU!pVnXs=+80h54N9Tq7PMp+qiJdBo~B*t64ejQd2(*S-6 zub2sn*9ECHOANn`lm>7A0hd=l@Q+9TA93#=*L1c2fsYVZS+2sjZ>jz0m$xqF53ZtU z2r901HG;v;-VV1Rx8@J(7Vq3>5&{d?l1lRCAPrNj8H}(pDX*E1a8Rb^lDEGy?>cP4<1Bf!4j>&*S^=_mpEh@AE!CU$1js=XGA^`Dzo39b(0DT`qstn+p(z6*Ax} z_2P&-R&mNBDJf78=BPT$YGcd5&qbC+@n!Mpp;>A0j(lR2RxXiSt(Rd@?UbZiyCJBn zOZ>|%^B5~u_Wb0TWt_)^dJh(9@4STQ-$T49Gt>S4(p-|{>!GZwSYZJ>aOVg%HXM~R9wwPo=AT9j9 zCJ0GdQz^4{J8SLo)YA)&cV$@pTQL>(U~JlPW=~L@f(z-PTPU=MRDL^*WF+0O`FdR*mGjN(!(l+dZodMl{9;?D>L zMudXHiUaJPMdAsi;(_3O){2+Pgv$B8$__z%)|T4G?ZygkOAm=xR*1{&3OOSwZkGgL zx=unK@z0ftfg97t%zz-#mz^BsA$eB6i6I;K~s12#Am zPzkHD;9*sp7McZ1;PPPoC4VJ_!qWqeWBmBm%Kz*WvkuTux{-lD)pH*9O7{HToa$lJ z_P*%-)Sw^2i9D4{#U->{2FnTYd%5poSuwQm^8=6xm;rwVu*HR(+&BrumE9GJQfnG^ z;a!z*U`ip|5I{|Vj4qq_KUhlYjls6@yuB3QGyzgMI!qK(il$!nzeZk`6$@W$>YbS~ z83aauYdO?8XGerTleEXAhc)^jKreyEkQrwzr8jTEti4bxa9$;LO~tgB6yS0TrNPPnG*zBk+L1F_4fO!*);vF zWlIgI47Xd;=g$>lr5B;64KS{e{eTVj<>q3imKn5X=_OW(1fGuXR&_8EZk>R8eLiWL z8EU%9f*104+f>FE#AQ=Izh_#>r`ZrckJod;>Nt6SZ_a$O)DG|{y}tw34OcKFt=tbc zjxbsQPQ?Ma$GG$ZYd5Z4^W;RUM3!8C`@q++X~BvQpXeB2Txtn@mMhE)+7zcVUPvkH z9hG&nG3Y;s^&)iG#(i%Od$RgsncYBN5+^&k&lMw6!tf?OjzCIPeH?rHMJ61`K)+*W zZ9Pev=1Ef3rJiaoP9AbhwAw9p?%x^22Mmii?AOZ*vUXR92U?^bX_&`2d<0$a9LKk^ zkdRya@lWr};elLqo~+w0FSU}l2|(w1bH*LFr5~IF)gW|&Ju&a~WP*To^JfOR=;ClsgMpEckf>X0RJ#J~R@}(NmKtK-seMdIa!bzmrS4)z zXl2{)DeFs2E?5D99>wZ_$)!Sdffm*MEO#U3t_mZSu7doaDFIV^tRNm6=`ro-O6(Jje~Zi{@Z_yFk)}2WJ9f4p`1*U zQWo+7euF!1ms#Mj8W}DihF&#b2QL=mf{$8dNXlx#xhi3tRc{6zxZAIGVS1qf6DEP@ z0%katkQ1Fn%vd)^yWFhicwrl^au}s)A;0pAxct=f6e|)40Yq@m9spa3z4)tO203aO;?DP(&aU0Fy9U1AVu;(IKBv+*xo0>7AGqfr8{@ zYC-{96U&)-pPH@hGm{|-5%YYqmUU?jJY#538SE5g30U_*T7bH-QD(tkjSHW8 zTRtWhkY}z1+eU(YE}k&wm1o2X>_?|q)NUO|N{f8QQQ&xCF2;f>^AWQh-KWN6&&uc& zkLoSh?&WHr_|hyp;&sv+QyS`Ko93lILoD7*n1kk#K`qbU2Oq#&xA7>1!USy~a}aSd zX-ErXckk3001iQJ=a$nfqPNlMA12Uh6yiDG+QKiEQ&t4X8jj(oph@>^TMS4jhqiGm zl};JXiHGP;yKLFmg%(DI@t9FUBQTDcnN#)Bl5XV+zeDCE6AV@peL*{(SqU@pwH@(_ z)OzjtwMP!sbmZ3Yd|IMB*H3Ix+?_r5CC9P zmf%j9<}ocY&4i3Pu4_ZFsm{w_S^$57z5oKCCCTkdT)nju_hE}99g5XrcM)ZKh`Ix4g#jr&H?1v`P~BIY%>9G zJ)nkD^Xa)j_86KL=_|kw(J{pfN*1V+Gi58x(JRY?EpU33hMUSTAK58{?%8PN>9`Mt zgi>II;tsp?yZVJzDL^_|cA*Y;tD|{?$@IJT#dA=?c}+?K;G|5rGY%rdtPkkcN{533 z#wIjZJX7oCoj`f%1Wt#s0GM!{`4O4HiFfgjD4{K1o+&j6 zZ+8HoTo1h|$mak!8PA|SE*AQC@!(_yt~N2OwiG=#)3~=&5!*Yv`|wc=a4*pPIbYm^d2-q0(%xWj z6$`}6fXV!jO0HT?VT>4~`Rw7Ywn`RDY9Knil(2#N<3nM=O2>LOtvdi{R-<$UPjJh= zj_)Lfo>gYI$#gL_S02 zP#GRFQg~({4Rz`P4np`_H(9&Q&h<$S{(IiM_yEXWYtkS1f>IRM4oU?Chg|li)x5X{ zy{03N3JZV+#OuF+*A1DhhY!@VvK1frywPrHPg(+@3D7_tK7h@b4^+~VHm|)lN!|fG zqv@k37Xx>fDS^n&q&;aq>($mJl<*0Y;mQL*ObM1eOdSq5#^y87HAX-d)k%%&$@i%Y z?M!JmAIO-dH=Xq+A1Bs=jsmd)Fqo?+v*+zBn_lFcZ!*;d)&*{^6|85yKHwnb+9eA4 zp2MqD2{TIETf3A--iJk%H2-|#k+vJs>%7BfP&|zP`@d&(?Px^9^JZSr-OM*4u zU)PmOf$Zdb!(VE~3sY{*vev(GA6v^0t9G!Pjb&#gj3t}D0qg42 z?-uSXPNwuoT5huj#M>s$)FcyrXO4+`D-?$p?wOmVX}B&u94J35UMVW?6Qx@V z`eP-j_P#}mvUnhkL~H;j(|E-BinQ#%-d}p@3$E$$+*V2YMaiViio<14am7^rCNBHo zZff&)N6?1*C6_v5Ur^j%S{696Kb9ksr!y`d24mUg^x(dY>gOKDNm%L3nZbYvnu_$6dBU)=f4`LBp6$Gn5CYb-_}AdXS+VZG&mH&a>z{vRPe}MM273O1R*6TPT2&rW z`^Aap%Y+Ptrne#;DuPKxou8FY9Ay+O{DBLTGaj*_*^d)F`0&KOclf;*D)X80kusM zjCpg9AtW9LVe{!tqDPCai(saPR?Dy0+c{x#7S7@0s9N9XWmB({gN`jLQhs^OQ4I}mLJaMZ5ii{mouQC4@yeQZdnv+4SXeumkh5< zD+}FMdJ8mZVTpJ_p68wNpl?*gS0feWC5IFLeJ7fGUNX#)eo6r(7=Q4b>cR~pc=!*4luP1P1_}t^n2_`5?cmQIi|?p*5n7^w9YZZ#3R6lpc<`55a!+>vPcHpiv*M++jk=WZ#k=@m}{s~~5EQvnup*+czVUeJC zphA3FQ7TIJR7C103Nde2riaI`ygrN~S|!`Wqh3u92Fg85FvhVdf8~q^(6&G%DDuZ- z^-I!TRTKsLTKAq8Kj|OgQNUUKBvH7R>x~r$#c!T|P}9-3DD&J%C{h6&wKKi60?LGe z*8H!;n$FBqZ!h+&FS zLdruTdra8>Uc?sb88OhBzA`)28t84?b_SLsi9rd9P7#&%PYbt+D;x?gy=0ixUmp^e zg<>L}n4XUJ+7wbzda0#9c7dmIets4XOS++y<93e>`)7y!U)CP30K!jrJ2W~Kim>|A zDdR(JIld10;Y#`F(w^}cs$fNVsNf@O(BJmu^P5(Qcgs^x0%Sf$5wewEnHA5%vHR~f z@yLfI>4sA|UftW;F~8030&a3CA3u={ z1EVRz*IO3=+_$gQE?#ry9b={hr+$)w1(KP!uf=_I=CU79?fW~l4wlmvNcPO-9yG&o zc|j%?4X?Mg@*NioOD(pfbz=B1P^oZi>CIKDTvgj@0DMf$1>bqSf|@{Xegy&|4?jsn z04BIBuLmeJ$y8uKDxD8F(%6PjnBTWKGgdr;-43Q0WLW3)c=q>ob-Sa*v&LRn!Xws4&p5`v1n+yN3KRk|005D zlYt9Nh~UM?wZJQp*hz>h&je&Il>MjRv&&?V4|UizD05{34~Z^XF(lC`@y5>ufO_Xf z6I52v0Qrtl(PpkKbT4aEK}^LyO9nv`QC^d}7B5Ll7UUJa#X;r45V(zwigS#`G+(G> zQg+Rmcu`xj;DnMCQW+6}G4$qGpgP-H`O=;|j-(N270io#K@_f zGW@lt1uB2lj7Yom{uFEots%POG%R)I<(1ft0dfB-Ze0&FloN_20GPV z(ixYI%HA=R%sgy+$3CHq9IwnOVvWb4Uf^?e0m5AF%n%ao4L$WEU@dvdhGI05D{~(0 zR=;pgPv#41IO{xI7V^BOu`hGF?KrxIdx%cFYuSfaSl^VmKrW)&lgrXGYx(&yy(+O^;^d6_>$}WS0+;oT>AF2Z|yGyBcH&voV}5|exOwxUY`pO6?XUyGZG#Axv~Zy)uIp_4|wveN-k4h zpQQ)%K5uu(RH|Yi-?iKpvMGYD&~Ejd1DQY)#0PFAo_g-J*%rYJ*nwrSSP3=T5}?g?>$)+}GWQAsseWIlZj zAcJ6tx9q-ryKJDsVPGt<6hY$&BfvwuO5$go!IN={)7Ryrud=*Q_4;62)fWG2n>e&D z?#+@02M!RX(T(Z~#KQ}qDge786_l6tRX=*|#Y7_zKt%!#asj*q=Az}}8S+m}p$;mN z0L!YXNp}HT8j4LjaT_{Rlc{TX?S?DezEI~Jn4Lh;ym=z2Uy@-U^Cz@ycKmFsb#O0} zx{mIVdk$w3uT^Q(=R&XOgRaNHx_4@IaG>auB=fwI{r0vjE6<+=;QV}jgL~)aiqgP* zQt%xhbzaG&?ny8yWddW*A6I_dp607JL2d``x3}KKs#s2%Y~jcEwo1$l+jz8|DdUv} zMk|ox-drciWgKZCb+d*Ph|7u`CC7c(hV*KBbAWhh_ScevEU-EwD^Zh^%3xPKW(D6e zrp7Q@)<2iEU=7HEP`4`ITvS5tg&OU=l2~|qR?BDb&mhERS>s2p$$$ThX<4B~ooQjX z-VB+baZ*hV&W!km4Z47!cAR8n7$lQw0#Bdz5jgyW>HumXhLv$}SBCvCQ*ylEF}T(+nDG`e#cokLeQ};!dp_Z4 z=b)Y?*@CMewsSo;QYN$(YZNw) zQU~0V82IB(=^OARsbrVH!JH!-3MT2tCW4rp~{s*J8nucNSBc=x{$&9 z@(vAlZ|^2<=yExeEwp|I-*vBPOx-ccSnmqmwXl(#scI^;pxWb-Q4K&oI!T@y>u#}` z?^I(I=k10-!nbr8LHi+RpvyLb5989Fah0Molpr$%a4rxdfoo?|%y1hQxPbRhSrdwJ zB0SE>j9}f+Z1!YEW)CS47^k3JYKguE9UUQYWx$!X8?DmdTMiTFvqG;xmk1wHWCp~? z=B5`Z$y@R>0eiJpK8;!^4Fx~DaFycXI=Q2CEf=H*VL)TI%K@S3^(F_!AJ0`-*UJC0 zaQ$o3C(l?RMb%B{(&Ok;zhlL)^k;HQ#~3%TCC=$sI@U}FDl=4d3*yR-GhtZH#Pz%- z+@;VRS_a*RupoC$8(DTU%t@bD6xVZpc4IuyY|V_k7Dw(nT{6iHR(|Z4NX3fhH*KNb z+PZG0M~F>{O&7CqV2}Nq-j!*~Z-ilxR+vXJ$0-d~n4)EdYzExG>1OJ)1Um;S2&JWW zB>LH9(8iSquNx>*mZ-aPmo*yJ8qE;tpcFxf4{x3rY{Qgill+L8b#0IRs299Q%*h0n zD1K;Ga6zafrkqbW#pH4Gt-W*EPjk@6K*fbHbYuF4s)0GKlC@SU+A#uAaxJT5M)i?o zp9#lOY^ajcu*+bbg?ZLQi&Gowkj|h(D{T2zyFpo^RjYY;4Zt9 zu~5KI*x9V*;_|WT!NUg@8sam-iJ;N|8?(4@0I^Wv?;96T;;4+k7l`$7!%_pyQcL9LvUk4 zcE`y|Nl2|N|1&_ScRSE4+K@*pbDi$~h`y`uIKsy6V7wv6)Dmgvsh<(12vl}2A z&)2ItAACV_PMVA;nKJ)tp-Ofm#ubYieFL9*3#zhYK&@Cau^m&2RJsxQwTYxZibaj)Cc3`8!#-U zxJ^)#lfQS6<7SK~LoCb*FJX!+MQi9;*v`ke)X&7M}@2tH;@_QLV800`=4l1-vd9 zd{z?@MR^Q~(ADZ`zJT)PGCgX|$PJXTDG4L!br`(LEKQakj=*ZkR4Y+BSYn~%2A51M zq-vh&_ke|qtvoc1RB0V`E(GGhw5Y~VgT?KJ1=Gy%PlM615)=%-00>I1Q)vL=IIOA7 z49xA|{v77hC=z$WohZPkHarsL3RJ+T!F>=M4C;B*pKzV%7@5UKH+9ja4M!5f&1jC@ zpo3VzstlcabO4SQX*tLk+D-LxC3bk~S~@2o51fqQi3LFD(IhAAEaCK>3|;E*6hnqj z7W3Fpz>1{4v=60qLhntm%AymIG1hTvzpCUOXXSVwGah!j(HzljnD^k*6jHOAgNFPe zS{D>(9(+ujkET)yf^M1V;)=&C3)E)>rC|!OJVdb1rY{-bX8_xC$YyYU>-7;PnMwmh zpgAz)+P+smB~u2tel;9NgWs=J9kV6P8nOwhM8D7-bM!C$GxS7xwX361R9ZlQi*qlm`)(PgK;&i1?AD;)dTY% z%63!T7w~JoSjqvG-vk*5>$DTy21H++G*Mp+Qj7AS8je$wmusWRp|yuw?K&qge4RYN zyWu2$Bb*f_aKOzrY3oc+Qsi2krTCIIdJ}|%gFYNrm=C~5K^;BEr~?Bm0TTa12a|xB zOavcJ005pGeP#k4zE(GymSxO@v>JB=9azeF;NZpCn5Lf-Za@ zprQ;1z-;PD0R9dDDLe%yQnDin8{ynR503!op!W6f2IYfXrdn+9JGW=oCHg!fBTdzy1)ja|zWgLKXe4uMbcYeTo zrJR$2KLe74nI}px@VY=q4wocb;)4Tb>SDm8+{kO!CoD<213n_KZezWv#krtUYVev9 zmYDVJKAjGJWPl5eTNdp&PGUAoR&DqvkRC}ec;WUTVKU(HaUcrhX!L2j4}Mf3 zM&Yxj0-!AwT2W8+`@lOHs4+A+^ zCai_!KOJ-JBZJSe>_@+7Fj$!Uu&Jcnh0{8GnqhZCshtscC(QsA0mnnzMVN)e%p-<{ zb6%{u1k4EL2a7~a78nd2x&mu4h7jv61I-Rj!ZGv&_=(5@e=%Laznh)P5K0vUAMhP6 zCnHNb%lYU$h?&@l2^UjP)DFy!Lssm+zrZYnsSrcNVEV(@LxmHi053LD5ZN|THbw$E z<-@@uvd0FKV5&qa%rq8ixAR>kXVzMIbcB>c8_^&=azfLQhR%{yxC=0sRo9Y7gqEMB5R#Udlr3Qn=uHp zO0QFkl@_VI%tmkmwyk49tf&VD)oeohEZ_{ZY@SMBYH|Muc}0l^1V^*hD$&494x}G>GOR-m#t{1!78R+KBWT_dL3PHXu#US zclxFXKJWwDh58^4lW3=p#|;4b3&8~X_nI~E86lHJZDR(bsk$Gln8i8x6HUSLZNapd zY3bxKc7wsIj{ddyuBO5mW8oS6Wf@GxfXWRN-2)qqYXOD=n%w9wkj2%Yr!QKr{=#1f z`uG$yDo`SgW>`xnwkGJ}je`_GI_E($Ra?v&$Vzx{wO$|znx2@W^`j0$hKfNnq%nSM zG&`DtSF7kB1nBnv2)zCS`UCg$I+f8_%K>ycn)2rm-3Jdf7FhaMA35RfASv@22|BSL zbw*QJhAMqEp&qq^{Sg{SNU{ZMA&yphzz1@Il`KfzCNJ$60LJ+5khX*4{L7MFb)<&Y!D)hp5Qw-2|I}E9 z%~3iV5_O%?835Tu0~~2hk}>Ys?bO2p`nR1lVQpXYyp41+6(Di>0+r{23Z(ua4I~)G-AS$rdxt zhu{~AhaV_bbwra)Cu`cP&Qase`G} za5%%mvPZ8U-2op}=ZLbk)4r+*0k#^6e-1D?3>9tzP@ zZ(3*%8mseS$*0aY_&SuS)#<1^DlJTBoRAEu#~TnPqTqu@Ujr7`q5nqHZNg}j0S9I4 zQ5J+f4lRb1PyKk|Ghqo&+Tj|S; ztd8iw%IncabeF!p4mHtXJmEbDUf`VA5up8alyum}(W>jbN)>8}T@AX6hnXCtZ}@;h zZM0aHoKAw4LT!UK(!s!pfzZI0x*7(qN$Ozz1ldtX{Yzp!UJPv~xR}8U7)ta}Eox3h zDv&B&FDb)drs8!VmRdB3%FR0HcR_3k^p(*ZO@S};15|^C4Su7alx}IDq)Kx{)dmA{ z9DIs7@G4KxJoJ>$k(jzjr!UYC6plCPkN*kI=x;CTi;WGozi5~fC7|x;PK*r5I%=L+ zgB4+rc}K%Skf%q_*gm3jQ5I@gg9_IWxLyM{p|4CJE969bO$YNw3=Hj76NbMI^hdkd zTgRi7>ruL1infE!u~;G->bs3Y%W6RWoC&0h6d*NFNG+WxkTvz%g8VRC7y%3)=m~Qg z{(%rtTezV?r(-XSky~!k!z_$yYxUp)3>#K#r&FiLeg-rL!sbD8QZNa&ojzJ&Czt~y z29Ghcx$ww`j&-6*T9Z~!ML=5iLzvZ(ioyJe6LyTb8RJN|AZ8zqJ0N*<;w7|*$z_W> zH3Bx%i|J3L3MR#n-c`v|%z^*}3r=kAVa$yIf@ku_DTYSpQo49fJjos?T1bm0?^{G~z`Y}`^i!1E@ z`lAKhzvprqmr)JsWDG$&2di{kOTu1;Ip$|d1ElYH&T20XFcxK&6`EG2Y>~uxE7dSV z?Fr*gW~D#g2*s;*^8R@8iLULh-2vBx?!hzQ}DpT=6~fT9j| z>>)oNf*1HP+n#Yi=4|QIgcl)#(T?8M?IO8ca`#Lp)%?-gNsXrY50;%W=S z5Zl_4%`?ontJCtugwjHPtfadJYF-mAxQ>h9*07TM6jqV(As^fa2J3?E} zUHyTMpEcup`>eRS7lXRNTbJ!zS5NQeM)%Z#o`oJsHn3mVy`C7?mTmnwTjBf0-U7SI~3A^&+X8J`vZq*7U(~!8U@Vyc=iu)-p zb@O#wyIxsQe}lWB=b3ziu&a>!29XtC=S=LWN^EeKoOrgSr|=~Cp+cTL%XEI;O!vIJ z4cmISPuzKVLNg2-U#;6U?>+tMcim0J$<2Vg7vfS6&uUy&{Tv}{$?k9yLPu%CR z?SIGcTyQq=Zx5(`df)wcZZiDdjQG!Vn?ydVx>oX^Oc^*z5w=MlkgUXIe@|1uF;MTY zs*ZJ?u!-lx+A~({e=ATK@vrVtecNja%$~2peQb&6rSszQR`HL_Pjkxsv&n0U8`J%w zH0#PBPQwj-u@QfE@7(voF=A`Q9eZj^oG>z&KR#_ipi_z4`7*dOYR(U3D1tW`)M>$b z!d(g?VQl#P031bLH`8y&WyKOAY**mI+~&RCiX+)`isGDt;?z=1v!DJ2SCjj>@_I?t zum>7z`YRQBRf(`oYy~D!Q+gmiTlCJBHwWr#@<@qbj9cl68|X0<+%vc0rNX9_jqZ2d zCBn0y3ESx&t~-XQcJ$}G`^-iUne%NfA)uu#ig5P z3%j(9vu~ZH)ES-=5-+$7Pe-1Yr`&mIr|b2cVcF|Wc5eE}y{ktUNWM6G#QoK8R3$1! z%0~CEP1=^G;!nz3CHl?V3tcHWG54=?yD|P3PB!nAg*~zMcjR0CuB@2b_|UUI5-wNAW7JmC@mHhuDO|2Geo0{2}!zH{?!a~d^5@pCJW{r>BOi!tI+iKO8M zCTHD#_vs&hy!5N(>BHht!;-sgRf(fa?yYa5we%8|R?&r#R5?0W9lQ%_%VyEn&OKUULy7#R5=*wZb>kMoW&H&4m7ZO*v) z;~qC@T39T6PqLcd{hKXz?7a^NJDQqz72}GTdzZV>2yn%&#?d z)T{rV*}UrnX<7qtSf$flSSTPK`k%qmL!xxS)u&c~|C1l~ySI!(BCM!zCj*deVVC8H zJc>>NhUK^J%^dII!8?e4EZh#M))XUoVWc| zbML?ICTf8+H?=&$eR8x}E38did$;m#R|9rdExV5HDsFk|SRu)6MAG_f>aD)HM|%?Te$N zIfrrGPu{-YSw*|Ir?_R?QH+7BN~47TRd>U-yyhpUR|O8kGLNj=qQS@%w(KevdJ0ib zcY{XR*r0K_3jwLhwQS3SjUviZV+0YJx1k@m!SN!J;i4gpYjHPOP#w@1`U8Gm=h3(x z*kUyALR=M+Xxt5n@ZP;E59!?7-0m%iQ#Yb=2u-lFkL>ChtjF%Z@@=H2vT&n(1Kp zQ_6&^aeuDUAFp3~ijKPa-E#E{#`x-2;p!J03S9mAr?~&CXy*STonXHDkPhZxzy$I~ za7syL^1(l)`s306pWpt}+tF(LH5cbJf9h@Q)`qJ0r*Xa7VU|DMzSduVO7?&C_0=)4 z{L$!ZuL^&}G1tESQI|jB{;x7D*WS3+|Nljc*DCX8vbkED|E2H2yoCSG5?q6w`~O6O z6VM6&6Z!w*4irvV2J_Z`RXxgwh5r?)9AeJ@ioD9PdBpNZm9BEUI~s|3WN^k9njEf1 z&ch2zFfk^VCbyQ>6O$NCsdh%Ep>1xhh0d1<=nVDHEL4b25@;M=N8GhJtOZk9A||$> zS&^>bG{bETG|rVs-@pV&r&N@JRa5DzqS<0aG7L_=iHUSArj=@@aZPkRLL8mRF?+Q1 ztV))m3_;$!j^3o2yzBA;BG)@(^W=GmyZjDD4_9v;Dkq` zumEG%fpKlbB3(smiz*0M%P@dQwGOqzQbgC7rl;_X)?zTPrl%}eu|Tq##2ovUx2rJq zM;EpxT=>^0tD+0^ez$vJ^Ap?!2oG+$Xy5yuJ5KyQy=iZ$9hfxFyUHFOR z(#htdjI41K*5bDtG#U$9`HA5Z;}dB8y!waj_q!U_sRi;$%M+hI@$pd{|IE89=fw>7 z!(`p}{LEud%)D?6LbT@I`bqYxhK7CcHgd`Oi{;a_WBj9m1*6VnkIG58X-UdazG>RP zzkh6zb4SLs&mN<^@%FDLIUbW8J9PQfFD0eM1CL#QgZS0i!(V7iIb_`wDciL7T>0M5 zM##sAvPHMF-8rhAf8m_9`uF~Gmph)jspHO3jzup9^uJi&Tq6CcG!pp+12DE8o+Lz~ zY`R(s?r($vc>8#7-o5|2U){K4UK1ei{TnPT+Hc+NpRYvr-mh_gyWMb8gcuRB!UnL^Z z1~VMVL^kChfB1m_qA>mz(qxi<|LaD4XZ?{#xhPAtXkWp%_;&Oqw}!gVp#DjKDP1w| zQwj9|acRf)8%2IxREc~G{BOrw5x|?%`p5VqORf{05~qkFEL#Db(O`L46utz{Gakio z>Q&Kx9WML$&sB<144{p}kt3qdB53L|nC$i}}(Wyt4PVOOYlxJP-x`E2<= zZ~I$CcK2NXKt6{>%QUEEe(kmc5XS~-qZhs!5o+9of!_W zcg@XqHrD7Gw(ruGU#dTJi=&%OANc$AjC;#2H#6hirk*d;w#@syVj!q0zk$5%ZfGjD zy>n7oE~xawq?;At?xwjn2stg=#sBQdyUbnj%=d_{;9|wy%GDG0|7GRo%wMYpev$Nv zGCjEY_FlF<&$Yoidqd&4D^2D8jO>{5KxKJ0j@F8UF?ronL;2VZo~eLJWFXsKtU)Bx zlNUO+DIf_{d<=lz1@*B1DW2u}hkW4M4^PBDpuyFQ+{%;nhCu8i_1_1oBURYa!rfrn zZ6vBD=k9Enuykx%_or5I z`pSkrK=n9=GiTm^{>zX0x>b_!j$mtf&{jL=-hVZ$BEJbgD%ld#rQoK47{{=j`{%vC zzv<|6ymF?Mhv%#CUA7#}Ki0)fEIHcaH1y4_C9*4iHc_K=y^vT)gl!yg-kh9wd7mV| zJ_oDY2Xn@~Q34%;b@NN@if|`)2J$!qbh)0zoVR}T_MJa>Ng~-U_ve2jcikI1w!R9! z0G*L5f%o9*2x0CGi?_IY=3mH$8&Ysb`7BoJ%v(+QL8Se}J(aRdB!WGP^YC>eMAzRU zx>CSUo{0?ffxbY>XOVDG#rbcaiIj&Ufok}H0r67S61k#YDSxMl)A18-9`RWbD2Lm( z>%BBKg5L)s5x7LChzwN1N2@Iwdsj4zukf%}GSG`sD6>ZPM#-7-vH!UWniZU=AjH6< z&Oij%{{GaqC|`XRjYR}}YvS45mDCHO2TT%)e27?2q&yipkM2jE7WsbzSA|!DgW*N4 z5Cv2YM7l*%TAt*)Sg;z}2X}aQD+_I4uY6)obyEhS2~f$nf&NJ3f@DplLKLI1r|-DU z7$d>u9}j?dBGazes)NI?*tlRU5e)=m%V#+kjR@N&{!kt10z#vBb~%i0{V^o_=EJkA zw||wM-|~%r&J|omn`rfn7;|UZ&bI*)+yCkvK}9$qxx+3A#VGofzkMd@i_H%@0yc@> zGa_%cVoy%FAdYM%q1IRA?&}NvRfWkE>Wu7E(4ip{OqA&dLBLY2rd-}JKChVO4rW)!cOHsi=e-* zPW}23UYh&p47vWyhGpO3-~|#+=L5O9q)6KJ3S0aNj(2qJYaP|((PS7B741tX{iXXv zTSCYBwqM#)x~^BfZf#Hc>cK-vFHE0yh(FXe=COT#Yu!0s4=3lL5V@cg(2a=Y&+;!?~yY#i`U9UfOam=*8#jis;uB2ZMOi3|Ze6{-E!-x2Fd}{mo$JYF^`itI# z4Id;;=u$s&C`mr@&}4S<n2Y>k=j0e%^20~ z=gu!Ormm5BD|6Q^FygnjBqwhyz7EU9BtNT#q3hVaedVF7^6+!OqfEKE z%md<{)m<40$1bv^N9nuFGyIBwM8lo${u(PUs<=N4%VR~6KRwK?tYFO*svgHme_XhC zM9XF^e1Tj2xV|keKO6%XPh4+awE0T+#J-A&^*7+^T>8FEiXu2H2U@4U626*jlG7qd zxqVa4h&`KOBQ7pa{$W5dOC$-}$}x9V{AIuaec!0i^8=TdzU)!{-2Bj&O@|{f_v1Qp zFdw=_+nM};quds^dvk8YeMmlhbJc`?WBC>FVbO5EZSTN-iG1$Z#PQ7>ZXrOFu$bxT zmlpzL?8M`7#xrl>at*AZSe(MkuU?GAIg>I> zb&Fy2Ooe;%7hn!r!iC#|v5L;PGQaJ;_Z>!@%a{RY7Ive z527ikIQ}7(+Lc@bahAYi*kQ<#X3f|c+qPV+novRx;$&g_JiJiossS*=@8jWh#1nUS z*NFbJ@3^^6zk^tsJG({~)xUb?$gcj96F*!KrTIm}#~d%mRa$B3W}9M@F#<&VVJXj7 zMowS(A<)D@4_yI#R7E6|VH3-P`TcF_H%}7H`scC8mEWEqOt2zWRG|p{_S<1e%B-=WuJkLC)LC&<;M!Y$g~X)>G4T!` zh#0~)@zJ=_ZVtD`^)~rVN11T!H=9H%y8dwGu`|`>Wb&oi5AHw*GTOikD|&k`ULK9< zR=4>9t6i~sWYfHfr2(1AA=j}+=Bq1m)C!|^8?f3L$;fVO&!?MxzoK{|Ksb&^vyjFbhsPWe{tac$?+^VSy*6( zMpf(HI`vT9_iH8}OZw2=^LgVV$&V6d`H2IX&f@qU;E|tH!_bT z9eH3fd{5{>Sz3~e`$X8M6YSv%)=XG4{>x>;kky2KwaoR!;yfp(Pagl}ehqnq6z)tM zxAmnicita1I!E4WwmRRt#1+hn%N8}c6Pxd0MiKVoy&t`_Q1A*R@6E`3?WR^W>Fd8f z?v~cJfdQO`&ZvKOrGV|mB&Y@#%Iwg+jWr6)u>mohhopy&DQ4GquQm>B9d6UOx9>3? zc{8s*@dxbxV5@p%RqUiKwYz$_=1$P96PtZ7AlMFDVp{2g(cNftkGb9LKL0Mn9r`#L zOw`OInmQT3)vl_yzy)2{6aHxvJ(v=oO869ZyHh4K)sT%e606l<7&6sKQW5P2q;R_z z6C5B9h4s+Ps+WM7qhTzzcXXeQV`rQ@4FzvP^owfY&~IvKWpe8B^0fb559SU>u1YmI z8Ro@~cI49C-MwXA>I1Ld;BYMl)4F@8>=Df)0TRXLXjQ(4T!C9SG+@3KL2s?o*0=^^ zYjFRmMoXhNY<22PS|r^|O$TUY<3ytt-IWfH+!by}F0HTr6dLtH$Qbzvr{OW8ZYmvx zd!3tOdVYxdvsQFzkfxfQWWg63QKNzxufG?TWmv#{By`~qpa5tl#hJA_w~S) zl;_FF&sGeiPr7OJs`9kz-Z7u?sa)?UN8tW#kx2?oQp%fM(`D7ZF>Ah9A$`-UK1qQB zy>tbj0hR-5SX~M2R}H12vCPnrTcW>)KJ;}UxoEIleVaH3BcwxiYePQ=BbBPbzxcHH zs6{Vs7e->E*Lu3K?H2WwaUkvd)7?b70x124a`y69nzyXT3$)$ZT_i@mUTZf)GU z!39<--_?N32bs=Y=>G01BkD|KELiTpRyH zms4Bl%5ys@zYJz_HF+n^7?(2!M;-KpqZ(ILB6Ni<+n_;fIw}-G+m@qrHMr-&bH&xy zuKvX><>;(RKj>6nc$N6_T$JUtTHI2OhFn%~MyU^x4CNPUF${y~!KcJb&EAzN7AC!F zi!ztxkOtOoFvo_Oc_$J%opt!6E3qCpcz|eUTVQd{d!0%ahW7LV06R#s(U}9Orhwv+ zg->aLK{qZnnSn%0Z^XgW28;p_4BD}%Ei9}JFeRdo%t*~0z_oNR8iUEf;De}&cX98* z%Lw$s6c5uHlm{d5WJ8Vh1B`#U>yvuac%>bZ-EzOk;gws$AbeC<&VLnPFh1GnC0$|ZFJ^Q72Duy z1{xToR#5|V&(JkQwOJrm(bBO^^j*5EE~f=IM(~qRT91qn(RHfAF_?POd(Th;mta>O ziK)1(2vAxND`JrFE39Q;h?wg=d_)pY6G%jpb_Xc8^#8}_kkK7`%%nB5Ly?Ih|FdHT zeuIuK^3%*!vA3L#OdsyN^}yx)R*m|`yvPc%UpoAk^1{1F+=siHG{m&3@R&|z8Pl#a zemCV{hE9644pv|$DYT_aaQB^%^=L4GVdZ*dW@hF=+`nnp!CG@L7IuW~bb6EKcJR-% zAAqeH%<8CREX)|SNw6ij>9Cnlu=p_+QxsPC`#S139L)#pkM;J^9U@`FD ze}~0tl>lrSJcI2AWo7z`iM~RdNgNgxHNIIiu(iRsIn^6YHO!hbH6+h9GVSc_N^y1S znnjykd5z9OcMXnpHxzETO1#b}N4##OGdFGD;EI4e+%6C@7{j%AYa!OUDBl#ijz(hc ziAICsMI-5sYmku`5q;YmBkD}1#2qV&L=r-ncs=+Eilr0z=_nmTF@^V|Q#vR-u{=Ek z?r158oQs5x#2~HWmRIM1NvM9x*n1}^UlDU>C9=3#G-;q(A)#vJJLkIZ><2?tSoa($ zhyT{SOR_WXEG(~9cXecr<`6cA640NbUImiOIuKKjF$$ib*fZmiT_Oi*;ew> zV}96i()o(;Q?!!>To8xRWWwpTDGZEeVY;nf*CFjVp*g@m(qYC{gd_<8wZZAcg#`<} zO9$&<+E;aq>J@eg|D=*QSc?-82d_UHjno}k1w9&_e= zg?mED`|d%RszK@g0qn5Fp?JY6bmSnn9XJ&7Rlh!rW?p4 zh#*e0x&xO^h?=8zzq}6@b6G=ZE*HSgd@vvt)hs@i8`6IXg8pO#DZ&MdX0b^^MGLFyXoDnwT93ttPNC}GW(pkaikW2 z?+7p&K=QI&Xs!Wfn0QLBGg^GOb0v7qSPrmU0EgV3rD4O1qJ={(LUk6JTmk$6jtmCu zk~B45=JX~;U~^zW9J2G&>~el#E+?x=YZ#uGJ^;@@-HjT5GZ z?gD);BFh@xV{txcguE~!Abe2;6`Q6-e_{EV z)s0{2SAU5*22=W@!p-x&kw_41Cc-a|NbHG}Blqi2KfVHQ4A2uAWEc^L`Xwk=j0fqW zKn8>*#e{9){n@pmC-((eRsweWG zXrLhO^nD{dk*?uKZ%sM=pVTqs6|LuFuYVS?J(wbH<Ujnt2diKddVSQJv&p) z_05T9pd{=GweYq~yFuurS4V;E@Y;whJyYTrKf6>_{5Vn3c@qJHN^lL{y7YW2P~zV= zb^{*>IS3le=pb&pah=@Q^0+uXd)np0ZSu~^a;tjxauxD9w8C)hd%d{GU{{$lm z+u+XVL~?ITJ|G=ndd)g1#&D*20nA?+;6Idf17`x*QclK#3vrST#}rh;7Y2nL})wz&z%(Td!fnX z&di;eJLi4QJ?Eht{`|sE?jLINCM4fqZ7zRa&)o9<#XQA#FRiz~`Xu@6Pj>{lZx72& zdWH3!u-yD|i9*qiiszP`cKzxcymzb!(LI)_#g665HL3D^Z$HPTfomA1LP{wu0 zoWj$$N%}#H?Ye-w{cvBGtU$8KW`g5oom#$R)ra)0+E!|}8 z^i?wRZ*#0^e`E5o+nVOMWA4$G;umj0(Wu&q6A$;k`33R0FTQb1Huek!p5EDiFm!)= z;8b>Y&pVM5uLX*$J+{eKMg!w{z!cWot9?Ees|HFHCT4*VD3Qzlw}m~9l2%|Gkd(lI zXFyPg{GUw|f_I@nh5}JC)#%VTQ`MjxHkwncb0L8LTQ%>jZne`IKCk%Np7F?$t5aF z>6{oGAUtx+4X;P9P@X1P0e`M|_!!gziR2p`-Q4ipcj)^SfPWOGE~+K$;YExg$Y5e>W zxXE?*$Ax2Smg;&F$I`!^@yh$^IL`mARPuu$A8pMj{4SRKNorwQD!vhlAI&bDW*q$S zuK!$D#JrP8xVovRfygkzeXB*)K#pu;Sg)7gU>poOkW(Cs>S4-+q8UcCzOrU0E-lY= zf)t}qY@D{ln`tYHvrZS-J_8BflH8ZtXOz>!Q2p9$j#q>z9p}YUsNF@}73H$5SpB7k z*pxD(8RcCDIRq+ZD&hCS^*rMZZja zr#{1%yZ^5dL4Wy}!SLlR`VHQhYEj=+=ts}^AkM1?o5Mg<1F6%OSaW}Qb9!{rhUXK% z=?BkPwfKrU40Lf0lo>9Jr9gCxt^mXqP*We}kmIGqdywwO-~FZtk@scJUitDS4f<9jD&npG8Wl9)3@|zu!QFkZ9Q?v)oWnnu3DBSNLrk)Y z_&yb}vTP22t)!M>*!9S1+?+_^uaP1W#%fLq88e+g7QuaI0^}d4@Mq9{;M1Mx+p=yy zXN5Y6WZ^l%Jt=MJLY%%A^YTKO za43D+x|#B^LzdnhGathP-#nqP*>~QiAoe$Juin3;Xa4I4|6l0t$>gPFjCxRy#lXJJ z*_*fRYFiDkFBx2f>BNdVVJ7VjZP;F>CUFX z!96t4*m-$4d_%vw+O7f_fgVQ2(Vb#P$#RH)O#3((Geu-EG+*SJK#m?@_IN{LCg|A| zV&T@bh!A;smo~LggjKayp&nNkGs|M1GeU*5ab0fwBoXwT`luc@*_P{XUg%?JZ-pU~PoIZd*vE!#%9jrjwBuLRZ& zV@-{H163+aSee!BDdx+Lrmv$6<<&CvW~|Ww7^g|Ty#Nr+XcnqA6x5zV$|+o#qF0%} z#z$>sA}H_P@K`Kxy7d~$kalEa?|~1m^&9!N)5nDK!k(eyf!|U22>s1%{>?5C6?}K1 zYcIW6>CapJ)MzFgM*t1ARso}**Q}A!pq6qnCj*GUZiQk*qU-%p^sSrizwH`{d!2VC z!r(A75HW=+fA(Me*Gi^&<9Gd0Qk&cg^VxT!d%rXo%P87UbPCsM|NGvjXTH$5&#WHm z{oSs}QVHXEAC%3T+qdNJes^Rn)|PyM^fdg`3f9h;41 z)os=BPI!k=Wr+l{phH*VWf$F1#a(`V8;G1&G{!;JW^AFR0Hp4x?`R-MbH0?7ISp80 zjhs=mkLP)g8%8BdkC#0e449zDI-qvLb%QbEWO8w)QmM2%_su@Io^1@YhE8Z%l;>7H z*yqI>vRZ?BxHg_~k;+>ISj3pmYLW}ry;V>#&$X1<{Kg`$3suw3wQl()T{9v@mgfb@ z!Z|U?{ND77F>;vPrYk>n=;@2+QSpAGQ6eo&yYGPXqkB~6e(mntD_kg_KWBd~y6vcDe&}3C>-$o(?=Z5fHZXO-HvrdREXKi zZxNnMpIO*lM!Vg7Sv4s{cU#k#py`FZv#bn67nUKrI0SVMPys~(hJo&KvrqIZptzeL zyAC%~Bf2F@b{cMlxv3dR&=FaY_Dq{meDfHjgt4VfT!GB>0ZpPM&EHlwhWjqx8Ck~I zTGD2sKZY!P(mc{V29Togo0ZI%x%yBVa@nq+FP zFgm>DF>}dcRM6|iap@>Bi0t)S+`S1&;_Mf~mZ`Shy%J3#?V8(>(;uZ^#(vTy)6%84 ze;fF(C%agvv1DUMDP!F+U23zLH5|(y^G-wc>q2Xi?oR z8E8qY(~KNT%tK8~O(I>{JVBXkMV|fS*k0V)4Rp<$bW8|nDC_h7}lsT2kA|*v>SR+YA;>W zd`w6LRJ~AJ{~;Yoy2r}Xza5Y-CGVj4)o}eEkZ0VofM+4bL2;=QxFDH1PTWx@EJo`p-i;`HD=T02~fv! z-?d3;A}w7WlZ`ZET4jjG#epbPKV<~aSJjff6)&r>nU+j+#iS!K)rgP=&@321?O;JR zRx25CO8~>D1MEi03!vV}&*@{h)mX0^6Cm`ZuegAjmLvdc(gG+@V}ZQ|y|QV@SegVh z^l2QD+sZPz%fD!>|+iMeXljK;T&9dIWqGw?GX!?mP0HSZleuhPUQ zN(m#adz%hwzDJyvM1t@guc}t^(h0#m_70S+7U4|0d+alxhu&IV43L{XRWbvim%>k= z2r&U0~x|JxJ&gfyi{{{2IhHb^I0JvohrFua|*E~lBcn;yPJOo z(%+=Ss5==*lPtC4#Jxas>i85MFR{N*`RSOjPLl^3Olhe~iH@c8sP2FM4>n_anO=&TE?=b^Vh=pMg4=GUovY|3z02)a_KL*4Ok}am7eT9l;*wYB zJ-Hcb%G^q~jt>DU`iT-m1Bf^E1*bsfiCZ0y76Y)Yw zb_r=+a?yQJNKa3bD9dn`+fHw!<{~5%Hz_k_*5X&!Sc{-(WTqt!^a#5J>5MeV%r3|u z^x>la3&6q=+b#;jk2invt6;f%ba|FmGRd<~_(8-J0_U4VQtcnp2r@(31cHmT`>$=D zR@j7Dbeq-Yzd<{YY>l4+f&WLLMC;rww2x*K{#s(i<2=5gG&zLblCrWR)b2B5<}2rS zxZO`4Xuf`CV>0DvkJ4b-(&s_8WqHko8A9^X*_G0nX@4to3&Jwud+<(r{_9F%>I9eJzw5$!T#4V{x5I7)!h1-j1`v1>4F=(iw+F&a7KE70``yW1XSb z-0v@Z^~W8U)VzBn_woqIjkU^T07FUh?^Gi{hYKfH?Y$sedhfnp-6Q|_;)PJFwA@86 zt3rA67v9~cJ$tFi{j}%pt=FE7?%u&PxHvk=^2P*B2vBw5;NBmci^!XAd{Dz`oQg9G zJ13-FyJiN74l2)=eqs5%DZ2b5_t5k6cOeML7+ps0_1@k&p?`&JOY(nC-+sp5V>3nn z_Fn&qw~6xKr7u76tg^QB`IE)gU$i^CA3jn}yuOSD)o%2_t+~EGqf@Ezx zfXYJ+bkBI}SYkyY^0=1wzO1AnlTZqRWIzv*JDOvSRnROx^TP3P_(NlQ*le2Z4 zC7c!2zZTAfW`WC!yTlQV;U&l)>2&Ck9bYkSD29HEBifJ?gQ(3U8b+Efcs+(iH9;Jc zc^IZTr(rNWF8TB5#q%+^iHKHLWQ~N!g@3xkf$lruHsLtrk-(#(3mSwY%;~Ax6V;mF z7{Vo{Us1>ThyjlSWdS}Ht?n0@w_r?1yb2n2>xdK9UHU_8jFrI&dZ!+VG_esL@21u< zu|7u>HeVA`N2h#PslB`$3KxW0nlS3>NLQ=|aAv{4d>EF-tApK7RWyV`n4zv94G+rh zCt>hZ-A;_GCoHO$O#eDH*Ln#4ZMQ(D*{+(!k|5!XKwj#!wAZnLk2jQEX8IYHRXRm53&-Cbl?VP5pu# zGuXMoh*B+xpg>whJU!0^^)$NjQTd}V+aRtemEWHg&%^-c0YW+Q`$JbYk;z6Gy?>tOAG^#=VJDhY#xskH_YiGF}V= zK!P0;5+)**0*ia|9F1o{i9mxdvlB5BP9z;<|&VPWt1n-8RA{Ld2`uULs!V81EI%&Rx7dwA~=Aj zV~6EV1FC-_J9Ie6{DvLOVv+N86H;>7Ep5o^L=!P(0aYUQe%Jy!Xxb*DIf#E|nsm(Z zKXpjX1)FHNdJ_g~18j$K_9OQiexzD|kWL<8iPi`DMY{}r<4|^a&-l^wXY_I({ifgq zBL&Z+|LWkh-`rM4VbZ?AXhjstc*E%anrfe#7>{-m_6k#@!h_LF5kN9?Te!f~+^%(MuZ`gxR6>*=Ym^^>(8gda zjzN)wQr7B$ueY2M3A>mPgK;7V2evguG7!b-G`BS37qrL~X+2_ad6aYj2PO%bzZt?K z>VSHMQvd~?8rE7@*&8}-`6y}(_bhFoI$CQ5S*=Am@iL#ZiB6r_g1{w+1;|)x)Sg5L z$&nja!lOcCeDdZta%#gI6dHglwrCDxihGdbzRUGhB3=TXs6@i6lfV9Y->u1ss`qP7 zIlvsQ(IjJ<{K&GfM>g^a3KKjT^GN3_n^5$-MW$-(iL7Bwc@5xr@&>a|>Z`^(Q-Z zK2~WoHn^}N;1h^sV5lSq;YuZHyavpvC9GfjAjB1TyfkR_0vj3ZCbM0+_%Xzhr6iJWK_8gFJNsOV{w&qfeA zrMQUI07!Fq>mA`p1bCBTCnA``EdyZ=fJ>)7)##c5+Wrp`;q@<1p%?Zz>F&!7@Ah*0 zB~MDRBn5>z-Bmx1h+Q~bp;kkD`o&eRjN&{D-z{}4rCO@rjvr>A%a!gFzKDnLMI@ER zYy6BX@tYzBU|akYKbWhVh+6x_4~p*;hr8{>Nw0IIr7jILMf*QLMejG0%~SoO#XORvr&J(H6j z6w#tsHkt#m%^vnnMU)~fV@2**bec<%?$^R75iEO3D?{F~&MNI7j>VYBNo|4IPqm$G zjC1kUaU{&FX|o-Mhr2!CHI}icWdh_VNUnoBt0Imvr?$DRR3l?tr*|!tFA=f?A>=jveoA~9h>!-rw#A;S zQ|w2*9V46u)P#(3K%5*vcL%=e5HD#)NGzvkLy)uTazWhMC=emJpS%hI-$hYc0s|T4 zsZa^zLdr^{z=vTO0f@+Wih8gduqi8rFbGzI9EW_V$c_#aL)(<2##^MV?#lZ!4q#<` zmhdPjL^va5ot&1@16mS{mW*wXQqDs0*!)yN_7>9)qllp(VC8}*-or2 zxzg-c*%>A1mz)0b2A0QM-TX!Gm1`NnsNsVI{RS4`>7Yx{6P)8`;rSrq0t9J8AjNp& zabRi_Ti^s&8;xkHeaC9*_yw*pTwSh8|YA>xL z6^VOv^t1{e#We6Il!?T<Nm)6ybW%dLuL~ zJ9L9GtTsY!#c|eVGywNZdjF8mXOcnajOo~q48+dxkJNNW2~k7rNBor?`gf!LbU@nV z!bnBL9PUiLjyzx4ajzmOwjeg zoPPEo3N&Q>#oP~v%qA+2DTrDT%0n3fT%V^y<;+GLuD&QlO9=oA5KjYj$}temC3PM4 z0a}HEr-z1t1iB*Pq@}Ifh`o*C3)i2ea7N@&OFzPOjW`Mc&K7f4JCw#M##G7F<?F=Bqj!Ctk)N^j#{f~B7XcpwC9^hnv)j&M+@`n*MNK)H6C$%n! z?Fw0?zgVZ(M?V;G%c=kD{|u7q#o&-oQg=%a!_~&yYnaW{CR9+`M5dX-F>qRX{UWMR ziVw=+DkjUbWxVnzCFTG{kzC+R7NKf!{VCKs#}HyCzCFHEo+G8!L|#KJy#^hbF)^&u z<2&v>#i91W zD-?}-+i<$l3-OMFyv&p-8V{qgBcyoQQSH+)GQ7qVtnkv~xgk8XwJWpfFdt11#o^6l z6ix=_kRxG4m>UrlN>;}>SHOp?T>;Ts2BAY`di(a>Uo z{Cp%FX66z#4%T~X{Mb)&y8YP&mu*j=2Q~28xo!n%GKn@PQd!`Au=SOerBRo=VkND8WS59 z7a=n(w?0&gqB;oiXG}(pw?i(?jp_%3$SjMfSmYc<5?FbiD-wh>#sMYdrZ6(eDn94T zj(%wQOvqxF-+`Y`K;6M;{rEz5TDt?8myz(f9~!@WkV8e5Ai|;{`k8Q!93?sA&Lv<@ z^mts^$hDz*3K$ckLxSy4M1NOHlgDbj;#@T%eurabD-?raKs97YlN~6`^N8$)i3W*< za|e;^7|OB_=y|nSPy+{Zk49mRzRN3(htVb~g1^p5@SYu4pq06Dj1$5J>JMB#4>6Nh zo8lK7QS1c~z?vY6yjKsx7IziJeu<>0ydoY3o?lwzoOSsUVjl*9ZZ@X|V}V9oZ3ePh zuU4B}1{(^lUAZgDAx>#ep$OUPWb+{`qfw8af%#V!+{~6|yl#|^M8sHWx`)BC8r1bY zK^o#*tk3q43BVUM%(0OC!;In@jl6xZ6=o!ws3+C1=pf*AUE|JUlOE|h*<9q`#SV*k z#<^p|}7&RI&6e}1AnAdGu|6v z`35m$>k5%L~(SuA*e^AWAY&JR==oSvkr&N1jNvL%9?ik(!z^ zINW*20Br@*91i^jUJL}~x+1&NV7D4dzMj#DLZ4y_ra+QFmjf3}^?~|<^ee!Zpx~)R zy@v;;a1b4H70xBFGhx}u6=nsHl4*QKh zfW-K^*2}wala^9azl#2*=2E);fi}lR+hHxNb6{u4Qvhv)%0e)PVGnd#W_wrraduCO zsgq5LPlU6ytK*$tWi+8`AQF_oGOPxYR48m%=`q=cBJNlS0`Uy5x^u0+`jCF{96fBZ z?q!Ua{kk#G@)KL|(M@3#;?^X?Ge|Wx!u{h#+vc$Y`hZlaYD!Fog%1mk!Vkq^g?6dq z)7xQT%SPE`gS3h1KHV#I2YV8KOMD{xa9P|_rZXix&rAQ#9}PpxLBfhd`7@y5pYAxe&h$-xpgPVCicx+l|~ zvKjkud%tM+)9r3V(>O6NR~pBZ=oD?Z9srE$JQPnkyPaW8a)lF52qRb+B>)0)Loc3k=-z71wO zt2)2bUICE=)LPNdMRY8*lW?4Ybx404-8wVM#Di}GRXVLh0h1%^qZleZtB2_d9jr01 zz+U%>4CSP`m{es`9Y&F0SDYZ(cyGZ_s|F5?86)v`BL-@ko`qnjb zkKH#Iyg3<{3K@5cFLp@V*;+n?63mE>Ksv1lh$ULvDr0uJKJls=T#1&DOq00PFekbX zCB>70=T-BQt`?O{G1mLj(mBYvUop3fcy4qUJ<$3QTrsvor}j03Pahr=jfgotHW z&+N$c57^HI21KZq7RsvPUZ!svLl+gTG5Qckx3K#?Iux-+`9w>^(hm-TDp>Hzw4vH8G#02QsIgJGB!pr}D7`_+Jsmi>DXe$OiMr?x z@)~{X<1MoeAPR_5mk_GUk-dGkzrix!^060OUW4w_R8Bw+S%2?z5^op?WKn_anF|b%& z0ObaDMJ`Bq=ydQq35RbfGX}ruYFiiMO>d}N6zq&J8 z(N4W`v;~>&>>Znr>P@T2(U`Mu`WBE}G-$WLBHq@e+mx|eQIOmw9<7FIZTFzCg`+~T zuOJy;JU)oLh)ACt>I-}7ZoZiCU{)P;j3wk?0LVUkU?a-c1B)DV(wO;2JH6I?o^&vKL#pSey;fa|wBMZB5*(%!EM}Stpy+lm>Hgj}s0}Jv%Hq+dp0= zvqT|Yv3K=^^&Y9R@nfu0G+4lrtbbZy_e3*fHj^bd#{&w_DwKI6vDR`ZrJ3JEV7Kvv z!pyKM0pvt3%J_86r+opyo4Kzf9v+JEutaA)t5UEZ$AZE5yy0c}P$;6|ESsalo~KmG zn<8Xtv4=HIX&SHuwN4)Le_UUM0AYiRlRr^s2!-XS%WKT?o`9gUSg$)6fXAah7_GIF zC3h;}jK>P%lQW*gBmqvC_Hb!bTZcO{obDp1@v46LL|#XH3GBuUYhQa}%@;W#C=HaY zKu?gP;ONWH=&T(Oud=F0B?tK}3otH9RS>5hk(*u`1cr#{0T>Bl16JjK=F}|-y%X*T z$|;9JJ^1jFkaj=U5zbP~Ryc7yvOC=Wnw?m{ESB48wL(NZJLFhZ9FiB&E93fruwYiy zL8q@SBB!2Dp1vqTKOOygQne%+)B-&eVs%Qo2Uh|Did#;(6Lp&CrU=r2(kh5Lx%jQN z;-Xg?+(ufKtfd&|6rt$y9u$uvE`z!ozf&@hUc_E3$Tq+pRKJm&zI-H-V^|_sr$W3& zCm9NdJH-RB7iLF@P{uOrD%Rv-2d`+@xV+w}Z`(Y@79|0%b7N|JIvj^&PTP$Q&zd@4 zjv5}laskMOx9r+}nj>)zp-Y#Chp^s?|WdE%NK1KSaw74)Rb;DN-`@xct$`<|y<9xyW{oGo{es3VWa zS8uFS_tc(@dAu;J`Tr0t?bj<$>sO-`9rJo#Q}TvlHRhbtuQhFC>tBt==J~{UD6j|A z%4`cWp>UR(N}mJ4Sy=QB))3~xVKd6l(h6TF)`SvK9d?+M?MAs3#hg$(Os+(Yxk@gx zsuH!gKu%G}3??sBKwGjOzJ4lq_doHa9s;)_WEkXLI+3?_Q2!a~Ek!s-ZXJwiP`rT~ zYk7GzjqLXaE4NF4@68Qf-~;{YJ%q{9#IOOLwZmk<&P6Z|)c>dl86x9hZeJa4McYmjT|iex;zmYEZI@KJruWVeXGJs& z5O&pKB_`w_+6RNMf|W_vd8IZTFxQDbQJS>OgKVluZSn8l})gkdX>WDQ4D&@V8K9`2(k&B18PL{&NwF6Wv;@Vz&0P&Vl{Xp zqS9Hm9uk|b#C%Y^lc2+a*P4EkI?Sfb8r8z@kk=3%S*N9u>|9&Nbf0@vrt0BTLCp@ zOpc95|H}S1)_MXLjunG#gX~!B9z{^s2m{)yR$8jaKtu>&Y%s5vvi0%SXa@8nEXt&V zS2_%8lo&=fhdXV_7-iD*;W_PWWPjlB+VIP$M?Gabr9lw8Ee_ONm3!HjO#@iwLJRxh zf|fidloUC9{Tw7SI5ZtRoJygJC}y67IhVWvUVpGCIy!)E5LXC$LNxk_gKY~TV32QY zsN08H-6uQ;jkpw36veTGiJIk*gO=!6n)lp-AWqRmfr44_#SR+U(d zJ}`hNIw9$!=&sn^1qKue)2l)kr=S4f)!P3_=$+_E4@L&pz!^q8&#wg$rSN z=U5!5TOA_tiX#QpD;9c)*C{cic`f5q zyDa&PQlThgNtBBRr@&``SIn}-o^~xDbQygzK%$``-skbk{=axhKr{j3W>FW<;Rt^l zZ?(Eyu{huyw?-R0hvJY**H=&t*i=v@o#i5iWqk)J!Lm3Yl_?r&)KxjG)OO4%9!TBu z-a}d)170xP+bV@=D>a@S`(TNLl8@oq6fReio|PhhkU)`EM^V43I{r_um$kVNQHGJ| zA6h1;ppo<&_y?WH7r{3qm<5m)Ln4`#6KZvrA2cXWFmo-L4e@jh&VWP?13XfzF(w|u z2#2IpYH8C@D{gSVII;z9P#hQ3+6*k%T^+C_V5+pI^hWI9;fA&1|L_`b8IZg$btBk; z76gP4m|{8+qG@x%+??vhNmOr+8gxY{=`6lLO8?A|jKXk`$g$4ZnJO3#u!cyE$74~A z^bgd+H6UUD2WteU6N7_N(h+JfN9hmaVV>d~ z-6T=`nZvj){idfOQk0FtKvjewW(M2`4eZCkV;fA07>r6q8FWCA2jk(4Q69jcRTwF0 z)?&Oc9f|QNOu^_f(1T6|xJcB{O+uJLP!NOSYlGaHSrcNa3?{~DAxJ2rbTzc7R0!O? zzoD|9%))Wsl1>xnd7TFNu9yo4nf(zY&}&C6LoE9A+&L19BYj7CLcD2QZOKW5XdARx zRMV874=Ls{bn98!U23!b6bP(iI2LF{9&+#oGg!g~$Y3u0k$_Bwms^`Sk$%h&JQ?ew zv|q1FIci0_h*@7<1g$RK(ymOFP-!mJc%Uk3J%FxrU^)e$>-OGbWM7M+(Ox zt^lty=FIHChs9xlBnP8b9OqH#j5Z4`k6m1p&*|eBEI)zhWoqmo$moUKzd>9Jxr*Xa zTdpku=aVX_Whodyk?+8m2xn2MZ9|wqL||LEFr5iH5A=Mv%)AC*zXBmT_p#WDzp!Gv|fk$xXT%AnZhcqrA_uwr!!qw@0tKJnP z84yE;J_D$t$|fXOvI=>M>Rn)&%7VuDTUc4`$aPXJLVvvacdDjZ4#=QN-ufB5Zw|9v zwt-PHO(5~Ig1ltHGZ&-`_cixO?eIRWSLJeX0W7}$8vCRi^)dsk2-Fhy;BL%8OC{kWdaP&(#xr1n zqfje0d+vTaW}5-z>0okAA|xxdBck=1)L2atP&FnKF@!%hB``I1P(IlLZg_>)H?;{a zj8@syf|1x9dfj%WI3I!eShZUKR2F9gMKkdlP_;cA)apz|AVudksY+=}u3>d-J%uJf zfC9)uVCdMWXxP}m;kkGMThjebx-$%Ez{Jq?2N62dK_YiT8%hM@{@MC3(E9gj~ytrOOM%6%M||113tjwa43vN>??VH)Q^ zn@AxTQeR3=c6t>`WdjWFR~x+};&jz^!?O8{Dy)`D*zN0%v|61m(Sv>>dLI z0FZm68VZ~XtdkYUvB*L5{Y^j|rA_TjKwwZ7j3fhr7MW(G@eKoH?74I9cEw^buS%5< z0VSY1)ORmq%TGqWO_xFqP9|eP2pP)Nq$igHYnEAO*b>20S|}v`2A8&&s3B@7W$#+7hyMZJGZ>>AZi(gE03}{(x%JT4+06H}3Fn1I4QG;mk z57y%n@|teH4e3#U0*$fVUoIgXIl6YWF&O;qTMssd`&wo41~}^8T|zavq7O^$9`AN# zGTxW2q5_+*`@jP{&h@9_ z88%W)qT`3-b`ZRM7}*VsC?Kkbq!bKJHqB8pbLE(x3On&CqXwc=e0(6f@80tZLjhLl z<=e`vrBVH?AGGJM*BGR)P1lsF_2l@kwgBRX*7#Kmk_}5yjbe_PbOjf#Q`wTWvEyF$ z;^h3qy`~b`l!jRB1Qsc{95LvKw}z)vQ$G}}-jSic=`uxQGPe9&?_wF=NUT-*ItGiU zgIJF!mpq-ghj1;@g30b=t+~R(!X`iW#=GA$aH|5h+W30lfK*m6;)*7g!PJ8=sj`~t zxaY;mcb|Sg?rkqBQlC#eu*0C;;C}(BJN(=4*imoksXN(PoS%QLw&g|S<+vpqcKG+U zJxq4HFguIq+RDx+o>8Jk%?rqDN9s_p&x+Y!ws?-3GxssJAh!(Uo{&3G)+)CIc}4!o z+;&?-B1j1sEQ)w}Muu?DFQ;NVs4U8K5Hk-jgG7idYptInV1i5ZdR1df2QdNYMmA%} zV_hm3SVL)`$!}p6gD|dH8iD?@sT%6!YmvE=bqkSP&GzAp(cW~gtkE^v+t&&YU~sgM z1g9&D6-kI~Dmgd=NRG0}(zEEp#3CYFAZCDyL5~HcK4JPWa=$$|#{!EnTP@YRS)6Qs zYrBuqv&8^0b3Q>H!B&mOidr>BA0C@xAK?lN9`3rm!JxlAH2xsVz_pE3->)kD_Xo!R-0;C~6!Sx@z9IP2@ueJ(AP8(i-gw zr#Y-w6C(aZ*K7DgC3@HaN*Z3`S1R`tBTt1#l%NmhD6#J(L>x%cpj43lVNf+1`79*i z;li8rED6b%%U{c?L*^64gvi7jLuQ`q$O$--@b%hd}9U16)5e`z+>7`u(s1<8ctx3l}yvQw@Ak+(51k zxG1mg;2GMDO!N4h-A=bt?S9z)Q%#M@gM5){@6Z&HU`D*L=tx*@68mv!Kp-h)`S}eo zqC9AD@{}&&8fu6V-?|bRPs+>8C;tRWpfw>nD*ES<-Y}RKDNDI8qw9+;b5`Geq1QZ| z-oD#)~MU#djyd_X2wpvA_vv zBL`L>Bj3nWa`(A=76&twANm{PQkf#NA;C7iw=1!fFjDqIS9SF^>FYy7T_He-*m8;4 z-(BOU#R9fHdvc9EZmPuV0#Jl<5Hy55QBkaP%B-`%QiMYD_am?tJ_5vW5GsfBMwsFb+dJ&*bxuU5 zK@c?h*eJ0}>tQw1MO7bIGqVyr_TDGNFk=bth0OcHB#REf#RZWz`gVl%RMRa6~T zlQegQDVhFFue8x=d8nN@I4v6#Z6_gAj*ESf0|q^+0h-o`@0NI%15#R%A3rX$M4U0&RzGDbzqaC2WiA4qE?_3SNOe)FbH3^XnDG4Pj)kp}mNc)PsL0*ghz9E*8^2t|X@ zx&vRhrf~rG3{5sO#6bhYFuZ*epM{uGhrAAk^ep&lf$uog-k(`z?zdOA(J&pO9hXH2 z1NfjNQ+EejWv;YaGOOh6OcjQZS9KtK6oL8J&I)CH1}kEfC8wS12nOHLR&^j6y90nU z0H@Ux19k*Q!1Tzp_cL`cv_oB}M1X_^i|}yCN`$mlwQ-vuTX!&ZnN=3c0POrva06|d z25|e>8-ihyqp=kIoDZ27<$vL!_Yc5)2~s)`~i zL(eJEwhSPqw#ovK#|0`o;vEX26Z9di!7*M9Nc zR)LCFLevTl@YR`h@LR)uhb0|Y)PaLGWwrBoU06XC>l!Bjnhr|rP3*t4p#miJ@%F08ec(AC9SYE1v zNLW08SA|)F8V&D+xdXd@V`bX2LVtP7r@ zX(((d)v+;ec~XiXaaTwhvYSg;6C!U6EJ?PqBk63EX|zlS^b(e}+OO;2%n{l_aMbH;!0@2 z40iqpuDG|Tt?g}B%^)ecbw~DsTKLj!`9H77*m13@iBq3H@H?_@4VzqbF$O&(52CNB zq(r8`ir|=3W?PV->`fn(6%=4J2+2E?$zGV#AUMZjed|oO5iC_MIVLf=Vu?BrTRiFM znp30%FOfvOh)TTqsZ;AsSBD7n%uJ18L7sl~bAPFKglBo%jP>$H7dNsZ|H!i8 z8B|1w8jR$KE9Uiv7I$nYV(v1B?F<`@zvH!dW20Ds8!X^ zbvag#k$r;DP$**?I~bO4b7OJqq&`#b$vujPb5S!oy!i~@GhcDedBE|+@#c{sb;U@-%g zvs>US#Ujwziv3)FIEw{6=h~n&g2{A%gf7uNsIbb}b{;BZN{lnwBifT;M_7&tAw`O4 z>LFlvwjJ)AZze~ywg?sH#2GPE``V0j;ve!6`n9B*Z@`4uJNX)M<_!-HLCwCEL)pK2 zBzQ+wG&!+i8M=e=>(f{?$k?taPcV0({#Gj}#K%h~e=04H!&Pc+S?3IxER!@JuhAG7 zRjhCI?aBg@?EEn{#l{xPp|G57Ssb5|pG1=JRd`#u6vIQkmQ}k~rCy&idFcBpY(~rb}f_fbfFvH3svdMgP7lxDzH-;VJ#$j zr47k18=`+PJvIMHl%e;1`V4y=aoqlG{27z4XqVDvwIH1&s$2Q9InTChLyP9@{NVkv zZl4{YWvQkG?CuADGJ<120)7o%f*lYe0IopB4rn5U|g`u@_AgFw9{Z+G3{& z0nEbMODX~6guq(mRs9fg!N4tc@LgbE?rDF6cqC9n{w@MU2i}3;M=TvQwhMbF#hq#?P^u0d84!NWSB31CL;b;HLhpLx*`hSbx^M?VGlr(%ai1y`{)d*s!@j z?_n3wmFRq@p<#jJkj-|pQyzMW@Ahv-x#;TpfsKE@4y7?)escf69BBi}o*80kzI z;XTWum(nB;T(UKg=A~zani~yWm3wZTF~Ps5X->wMKe!)WwDAE;6j{BR1=VOF>dqkR zm&d>NX+~0bwrS_0!qa2N{-@=}Xtvu;v!UxIZ$)x3x1^=bE$GuEexc{yiN}%Ryt!HR z-%iZ}n!Hn*mX6%%850se2{ad;W+cEKNEd#R)$VgA?%0b#_G+dzOA~^7#k8@r?m}d( z`$C##Y?wbLMgF$Wni`RB?SPw*f;BD;GU5L>mDM+GLivR z12Z;MKU6|`zm!etb&p9Vx{&TJUGlzg>6v?4{6fZx-r`Z%f9H%O3WfvIA4k5ov$AIk z7yl%jPP^u3L7F+U_34lN6E-HjcR7jbv5wb>{s-hQa|>G~9pPib^ohN0p=8p`?w@Q- zTI2_qcy@fFH}$ktevBMlyM>$6t~;?u_(IbBAE7*b=A@F5J61|o9&0e|uWNID$k**e zqO*LOT(~)VuV9+cJ0k4gHe=znv7&>o)MWeg>`4>OEw%~&gl5toM<$rYb_U-zeW~B4ZnDn-h222* zB%qO!1&L+pFq$VrGSzMQuH?cVm_KC?C;!?kovIxBIT2`;Y8vM!>DQ9cnJ_D=lp0vo z5?+-Ci>dxC)r=Iv4*z*MKV>fLbi*>kbe*(mS5vcW>x`z0Bzk>8EPmd5ue6{x|Dr*a zm+}3Ip6^J8##P#sw;&OKEA;1mCBf+(SU?!C;d+Q#_g!S*A{#w|3({HowA?4JMSwrq-5Ze&;e@xmU{ zp83nV8ZSM3ee+*!CjHF|8Wt`d9ewHn!+9&J8O$6JZj(qJ8!b28J^wzR?J3zU&HfK( z{Vv-58)RPn$h$0ZNR8^u@)0*FY<^_)>}$6$o6NiK-f+*ax81tS-^RcC#Ia-DYqFc3 zG$04%0bzIAq}q>!kFpKVl0%2)O=~fPc5ts|s~w{J%RVOq6^fESM-sd@PW~ zdf(BWEew$3U%b};!kwS~>!X6sUzLAhy-y;s2p1;J?7c9yuJghz6c6;tG@uQ!pM~_aX?ulBcVrl1UV)j`G31(VTM_RIu5*vM66c0xNUvC! zJO*5QT^RXU-`gsx@0RZmj)WvCsW?uIPw!xHNHCb za|@gItm@oP$3`aD67!J7QG%p{xcv+6EjRu8`>~I7Yb2^hqzz4%yg=v5SlF z^n#m}6efVP zR!?zpX~vwyP}8Vy``ZteJ3(lEph*^2jhwx(B7JJX*w~8Zg=f|(%-PxG%-Le{SKpzR zF$0C8LXM>QGhxf!hR(zx_wOc7EYG*PDzK!{t%08>asE7Jk=CM+oLeU>Sd@`S3f}aI z`6Cap@3d@db88ml4(Xo!4)c9p@S^m&@WX|BGLDxE_fBkC9z~dG*YCHv-9CPM&Ev(O zR2NVQquGD<7@5-&8FSx~*7Ap^i1C(edr#AU{LJ^&Pl7k$S_+Bez0uJHi_&V2jg}O) z?7#xk-)46oZF-t`kH0^<6UU&S6L9Kdp=Z&|2XAVoZR^lju9)Z|8(Zq&P9_>0l^Eq-mgKD zpjX})`+E7{L)Fo*!KT1CkVta%g=1$Xr2Qbc?~^?5-&IdCe*d=c5zG6_&L2e;hhCbI zv+!S+j_sPZ^`h|Pq{6O$`>iBn+Ec=E-L~yzA6>XSg^{RmRw_9@D(EEpIzQcEVy3-) z>B85qFs83jxdAC_w@4(5grpFV+(YwYuDCr^7n(9DdsH|d&`RAS$iLVuXpp4yyf7-8 zK)GvL8Y~kkR$16Ic0$(mdgFx?n4E;LE^X3vBT3=jG!H6h754T${&WDjQ%8ie>8h== zu@PG6#El9L$Ic=(tt2rfgwm!pulv|k(cJjoL;f${{@37GKpbc8L`m&=!Hr`CVbY{m z{Y~dHUX>UGVL@r4>xVPz0MB9u?%@k47SS947fx$_dG}b}E0Xvzfs`el82nOhZzg}#S zy!~LRV8Vi_IXok43{WJt144;>}zw{{6TUoUg6`gs)a9;3q?s2>$( z(aK1wnKOSJiV|&0*Pgu%)gaWPcVm)Muj)VUzfY4~LI(V4-Ts<}SzaR!k84Juhe{t{Rv;(yAMdv3k zzHZBWb=8?e|Br;8Ke7Y&0pLoPOj~|lxFl)*QE+EG(AD+sQ8HuMspVhX_PT#a9Oi(a zNt1LPJtkyLeD0E_tNOa=%c9B>%4%;{a%nwl=wcnv}bY}vaI_go-TOa$P4c^Sa&W*mi{OA;%+Ws znEPt>2xsmoJSvp`>VZ!G-;5^xO+An8d8~we^@czn3aF?;8Qw@WUD?7UX@qz73H1cZM9^?=0 z6*My>j&na>@=y5l)562k46CY9FEnFrGC8~r;Ro)g=^@9`B-b7K_}IHkd-whSRJ{v) z6J^>y+>q8FEFGi_5zPT~T@{4FD;30&ASGs{);4XP422}6uT~E0p;?j=N=O<)45Cum zHL$pxidIWXDXVm0kwR(--BnqM?NCsJ36-T3m8rHelr;ISDZ20fo1eCHj?ekNpZjoK zNzdr=aBFLTN>{pt{!4AL$1=5PDdDvVpClElRU?-%&1{KgUP4o{^e4r$4EZi z__C$hr1$T--M;da(V+{88}~_840_~ujjgSHSO4(AO1-83!;PDc^jpMb-E-&g(Vah( zd|xp4NV4Raxf?#+w14maE@)W%&5>IDrp8WDh9oDZgmbGshvrvZNVxq44;@``&Y+yN z$;vb{MenWZA1chlV3<6gJoNPNP*O|gBAU6F4*l~;MN?nQCtKSL09jt_Nw)8n=eMaF zfY3f+e(fjfag)pql`N@$eXA+C6V)Cpkw}c@TP5|W;Z@1T-E+NvZ>W54OWoq7>=6sC z_e>cQL#ZiaYZHV0qt{(cHqI+}dqt&L_gZKvOPce@#x-j&D+iM!B*Tinxp8Pg+Conf zd=Br076n5S4;7nH5N*ibm3DcL+`UQONp!=ca{lNVbWl|{jy7d-%O+2sGEOe76Aniov$xOGAI z8{OWG+xMHuwnZ4gy5cj7b5NM$BPUMCICSGep@euY($mNOZB`Fw}w;fMB zfLks;I$;9oztH(K%IhJ&H5wwp?IuK~UTyz?etl*C!{WB1alK^3q0B_9^i?XUP3NoL z`6QsGGY^}tch`OzI%c{vWtMQWH|+IN$;3ko`72jsBi@*Gl#iX<_;ATgp;boh(q^Yr z(aEk9pDcdN!>5FPY7E|KvT8d_W>_U5#=n!nv2r z;w`>_S_|)XOT&oKyAzky!>0*-J-HMu^as>;pXJ)`mra`X6{erjf+s^mK-{MkxcBU%+GsfpZS!i z1wYZ()h4?)y{@pRYWNKgJ#5~J{_BUP7B1{hSkDiiGIwGs&6K?Sa)pV0mTCMcb?n`q zUB93Bvg10L2x_C`4b|v7AKLtL!b0i|S!+!4#_J*nBzIjlX8#D|_5DWnLc;}J0YFv= z+j=r^#rp}OFWfsgv)hog7d7isR3)&~r zwsW0h@~jg#Bs>K*yEhJOt&l`M+f`JpmX$b?19(jsQd=Bd$;=s$A2*lO7!8&NcP^cB zc3@3RRls#h*KPSi))Csnx=DYXF_}Q&Dg|1VG9#hQZr(Ki*s4FUG@!0MtMIa8$+dS& zs^Up4T`;=m8bijtEALFM@uw8TONI@bYaV=R^2R^0$BrBQp+hCGAX0av#7o#Qs<#F% z?ED>5ch|Jqi%pXxQyPvZK=2}5EO}`3?(eRJHjusSji+{*D$d?Iv{97rnIj-RzfLm4 z4>w(WSzl1|6=8qK${F@h!gIcAfleNL>(VLttNXtCvgezrg(P_$V*H0wq^|0%!H=yA z9fVwD=({F-o4BY11rDTk%80pxiC6BB(9GqpiEi7Oh8zE0vr+QUck_00>IK6ZkKFgu zHRY$>{a3erx@X^a-)wmAOKgB#d7pw=6KUJO*HA$)Z397>Ul%Ir>CL_Jqk{tX1JCTG}^5IWuiY4bR z-n#B-e=GFOA10;i78nn2EF==-`;cA^R1GO_T{v#py=TRll3le0w*k?^v$AUsp&YHNvwnODJU; zChz~MXwEq`41JuKdDrfHG>5DYAm-rKjY)W>KiQu4rz+sEd#0xt z-OR2nBN{s1Pu7DOY;H0+Pa-LFh(u#^&#n3XK3IF3Ze16_+(CSFr)1cPTgi_{OBUR6 zi+gi(L-L~dzU1+H#-_|?2a{Vz?|$J{!(@aSut$BCI_Va_vip~NLiM%L6d9G|`E(a-;bt{xFHXto zC~dp^&cz$sP{h{byS#Ti#D70{N;2Z6ReR+3W#-4#@m4jod13IQvFnFBk0sU8NpBDK zTf$PxW%k6|p=O4YU&zMpUUDYsc{3$l5ISWtAUXH{)VNh_DNm@N>P{h+q|(c|wpB&B z#Vz_n*OHH+edBHF>oayd0M$7WnHs4$o#x+koCYjs9Buiw!F(uAztAFDe z3ft8#D3B?j;4sdu`ssLb`RISvcT(;p<)cLM!_*PCtj(8RGm_>3 zfr2&{zLlIf{7H#BnY=IUo{uff-B0E375NfujZ5XjnN?mJRb>XIMNOZ)9x-z4i7%q6*=DTv+aAjvao z)aus7$;Jr<-PbQJNPFbR#oufcL#Hl&e{CL`;`osQ@9?*;4`%6hKj5)UVT}srl~@= z`6|iio@AlqhZbNaRCbC)fKb*7HjLhzbd!n3`c4+MYtrXSxtt;aGaV>D(yJ7(g>a>2vsHq=*I zeyT(4)e{#NHDa{fa(^`c$>Dl@sb<=a&f;qajKTK(-&pRQkP^PZ6xEIXO(0o9kKfnT z-n8i%VrtrdWi>jNA8a>_-EjB7b;kE({eH{8@6Ro}+J^JeCW4EI5oa6A?K(Iv;0)a*ITX-iTxeAg8{6|?b?HJ$mHDJk6-WmGujk$7@I zcK15%ckK6}ZlDoe@6SW=zw_jk-zk}tycW8|+DOCwPt1N5$xf@Uh`XDg81J9@>&P>%5qO!1dQ6OYxC=dT;CyRn9;s|(dz zvOdDd?m4r#5k|}MTSfGJ51j71ZmFp|vcht0<0M>K^hz_9^6ms7yMH^s|AuArrNfJc z1~6%OX%#yKm)0`l_xyHVThg+*u4jdXeg7G_ZLYo4iPAd<3H`}>@r8TDOHG&%S@mDP z^bLyfvWINmGn^iLh1qcb$019T7*|+-qoM)Z8kBnT@7EcxUmqW;`>42c-y|f>ywmx0 z6Bf{mCFH%|d!vJ$h;rQz8}N`A`q>1NQx#136KBlZj+Q#{Kl_XGzb{}H=6%#T=K?Mr z!-SmlB%M4)e!Ho15yRrC&$8WLA5F!j<3`;>cRU_nql!)1&o*uUa@MAm*_~e>g<|Ep zr3?B~71!4&YhyMCn?2h|Y(-aAUqs<66LesnueEOtbN8li>zV#pk7Tva_;|>Irty^h zCTE&6eoHxH*3J-fZR3YCKFhwcL)<$K#?i24!OG~KaCspQ>{*Ypq5AiRR1D8bm$cv0@ga7!AA zarjZ8o*`kGTIFtfBtn^3&yPitlml+YUh_L{kB6gF`^1DQ+4ldm|Hy9bhd}wlGs3!T zBG>vw_2YLRX4fjLU} z$tRnfmfhFLyclvs_011WCZD~3qlerJh3G~t{o?vBf4s)ffuNkJpSqxk)W5uz6_ThfdMxwghxQ#daNOJ*@b>gTu@Ui!p1xup4LC`;cD zcBBQ?-9LEiAUyJNrU8lYC(Zrr);m+?{@{V|kpzCY_EEXc@fW6P0WsT;_T9)%N!@*{ zgdHmzMjdyP*gtDc4vfVz^3ja}C{lm9(M6Ma5A}Ag(#aRS^B7Z|o<~mY-*p|O(0H(-BDmedEFKdd6v zAtQU9?AZLOv0u}@|WQq#MjspFm!$4W`+Lj%_kBR(Si*`vo1 z7eYp* ziA@Ys!RB>E2IkHs;NBx=Hc$KGwL>LM!yX9_`$DaD#kqjTAe%cZadXnG&G*r1qg>7b zzBLli@OK@FG06+oVUpe5`F~DRanrhgN}iycbDR3|J;YeIxAS5j6od)<_0Cwv=R)PL>N*bgttH!rjorQR z`>oc6cTOsNWso&uH}<`gJh^#KPv^hCF^x!>Yd?OW8|c}ydMZe+ZqH}$w-K;}Y_4ct zT|cbg;T1hA4vkEkYrL_>(lAN)5b1CJ18ZEgNZ9&2iKL($J}mmli3FObgT9ZL*`?pS zGkU%wH&=0Y@kGPmT13*-Rd()2rt93axA!M{{`e%J=k0%49_m3Hfr&It9b40Jh0u!Z zBZvFrUQr%?sAk^rOwD1z$%fvouU$DxayZdEcG$3|`YLZ3^m{%%vYffL z`g~zZOV`Yc<)_E$)2OxEK6IKKCo$$nXw0+D6U|r`;PGefN-L@<4lr}-!-jyg>tI_^ zfL1vB`)!*R?Oa~AS1RzmOHz5~fKMh>Us!w8FsiM(tACo)m941qI)7ju8urtHua6-1 zwfDzG!_`_!Elm&a>`YCcJ=H11+Waz4cFkv9f&B+^zzM+0G=$c?I^8Z_Ia<={h zQ;m{c{j%><)Gs>XEjhoL74PSbbL=yyntujv)%YGxUn96aNz-JzXJnh{8@#OQ>4BS1 zO{B8p0`HS*D2=_y8Cg@Mp7x&5H8We8&9$YeJ+rcfw~9WKxke{ANm8nHP7uJ#rq$d% z%i8uR=L@uH$EIlnq;qA+(mivs4;KvhsBBv3&GE@xJ!`;|*X@ogT;+yuWMF{PlFW|6 za-lyg>#i#iVn5BLwV?bHDtKvT-MW4`<@D~lBs*Rx^WkK#cPp(KOi|7H!IWJFs1FSl zU*h%c0*?WIACt$obb&PQRsBGf`sGpCyk}McQ+}0g#r}!se`+bMqEsGFm}A$;H2x%C zvv^6GOL%bYk`_d9RS$ca&x&(I_*4Bs*;t;x)g?`zrMN{vsZe3abVi#v>R8pQt=F%4 zC6_+YYO>9IspYa)mY?5zNgkHEu{Ekv@v$orAB|XgL~4JT{=FpqW%==W(tRIVd4v{@ z>qKs#m^Optn{kwfOB)Ewu1EC12ny=65H=rfYn4H64`I$ZecYk^_AqRXRlMMW$Nc8@k{yLRTS&f z0@0Cg@8ZL)Z8;$J8=V06Nm$m}<2Hy_vCA#bjjEk}tUU7gU!>|zN^`oVGDh|B zrAY3p_{&UZ?A-K)E$RzWjkB(@{3c&I>pU{Jkx<4S9WCbrjhsx?oi6k~Dum@4TI&pJ z0SGQ>?7jD;uuS2K3$vWDR`rWj^*tHdeOPEqWNN1*!C!IAefv_3qFlwR0oixQ4{d8( zq;h~TwFab=+hsh^T}%yjd!?FA5Ch7(yAH)u&&JC@)sngDTD;XPmA!=PYW;wck8``S;}SK1XQi4d zZCr|I)5d^y?PAzM1uAC{I#s5lFr(jq~kbS+@^XGC7h&n{6VN0%VUiE5I$%GtYA{Bop9srd&` zmzg@|{D%f$nhG(WR9mU!IoTR7Qn2n7xGYu*j#7876Of`(B*3~jB)w3Y@*1W)#&Ujn zy1-wr0=$Vi&P#KBlnYRJfB|JVsaBxOoZK2wy9&xKueUml%|@MrR&cupy|Qe9#5oz^ zD7kWx`5Pm68KiO79A2VwDc!s@uu-jc8Y_FBVheeRIx$jHB~5-yx#!jj5sH4S0=u0N zDme1P)UTvt-UB5+m#ab-85M&m-rA zz3v`LZ5Z3fl3X#YjU8d-T02{)SzJBdOx9Oco;!ilg!N@Oui`b-(Meh%C&Rx=i7Jsi zWZ;CU5?WgxuI~;BZ;M!2q06sYv&*3Ul_*!$Cg#x ziipcB1aBh6Bu(8t!hzCCXokjcwIu)yK%`qnT8pOCPuf4hEv&zq z7MQHsSy>Fs{JcY6^)o>KD2wTXwd6(pYH}@%P*f*3lN8ZH`G076=M1T5$&ax}y^*fm zUETJ$xr{WeQ#-qRpNB@blS5dbiSFzJDIkBiEsNG?Us~=EbMe{V2r=$C##Cfp7I2tb zN#12+f0f*1dKQ_%3bH)dCN?EPwB_bl5J@X`digdJ`mV`XJ<`RMMr4{7O+t-)MZiiL z9$Cwsz?!47IG44^b_MdU-5C#uyJT9CSs(^4`;NYXZeL4vzHKHj+n1!D92j8i6pq8>_2XcE!e>p*!Q;K~73WtK+#Pr@MasR68?J0SIq| zp9x$|ShDCL?SV;aKABpd=V@XbMW!e+tPu9j`DV;g3C^{zsa1L_I%YvG$<2z51aS#@ zuKyEcnw+!4u00*W-B6g2Xgp0|*4908_f#us+%ysxMx8m;AHKUUEIk#_lANpI)&Vld z4%8=G8QbxCz79&VZorQJ6X6rwl3TT(?8okqBVkg-P<(<#dOt5~eI@|U}NKXaE z?N_Y^NTy$YieyF6@R=RM++lSBOtM}z!2ToShww^GlyX5kX85Se^d0+cXhc3P*a&p%IM8TlWj`|lAVYI7QBfJ@3`R!-kPKi{rn ziplo{ciaPK8SPxB1}|=m27Jh|v6;e&Qynr_7$mpgK8830*e#{BW@jPBnB-F5KJMh8 znw);SlIM!Q>G%ym2aa-i=NC`{-vh5Y!fzEst6F4ugNO5(JdqTK1P^}U+ zjJ!xP?d7JU9Wcz?p}LUeo;$>tE5&q9EX;H6R$nNjNSel#=RPe3(`@3Ck-S&yqG#It zdPnYqucf=qnL-uiL}`}je+~!Q zS}Ai(_e~4MNj<$%Yl|%LZQ&@H#wn~8B=X7)+PFk6AgC#&g!ec0$)t*BlDw4RWO2R- z(#b7gwoVsf^_AhY5^0Gu92kgEN7v_LVNO0tInzq;k5xX(8bK{6Fe3I#RGiNf%ji5I zRk_uwSze|a;q7T^v;5FHEMy?ol{D;ACk~8I)u}Z^QE_eo3FdWUmG`N+u$F7Zi#^D8 ztb6yBFBdpEq!zB-Qzdaj9P*U2Mc&MbY0=$&rl}l=@}pdpV51@(BPmm`LPQtP5lhoL z%Eh(ydu4Jj1bA+DRU@El?7=KHw5mKs6(8xD1|n;})&^ZLcaD+HM`U5olafsri)1TK zcXeO>>?vvW8EQ(jjQzHd^p0_I*KW4R&LYt;HaXV9um<`tcuA-9k9KnE1V0)X@&nIL zcGk`Q3QLLKLZ&nqq`904zF^tu*VV3tl}>JTANu6zBXbTe$mU`+EGY=PVobTWz{Me;+YJ!Q+JG`9kC3?CdJ58$0d|&gF3#%B1}+M`Yqjbqmfd^ zm!!c4;^H>Mfr(T@xePNQ6ygO>9ON*<10ar83u(Z;AfU4d=4G>!`cJQu?Tk?f#dPs< zO)TTky8QEh%5z4hu!amM%Ru_3gbiBA`ri3-z;(&%tYx`b&RF;cplg?mi^qIzEdhWT z+e=~7YI||Ll-i}%EG&oqMae0Z%Y5{-e`};@YX9&*zU7V!1%TAa*DA7|Ja8!r$<{nm z)9kP}(VNpAmIb!Tt#B}TuJsuH?A zoP_!gB+gIT!XE(M42%F~y73Ml{{^}iyAq-MIY8?$GWiSo=7S%)Mx;4aNeQ(H2sN?d z18KYRmCriOO@*KRuS~@WjiVHb>^T3?)Oj*@b~Yw3q|*~q$8ubp0U|H+A1j@*&eP+ryQVX*+U`YwJrLRHy&iSr`qh&(Zw zuaYGLRCZYQK}0U!_#@kz6Ofgdn)+6>NYWDkPzlSf1@hBXdPGXJPCx%FLy1|0NlS+xI4}w=*p; z(*&&VnWJ2=TLbygsnZ|>)|meo8CL;{yXr5}?cCK~Z{Vl(vcw7Wcou6QF`$10zG#6C zyCauGq-twkk%28EMG-K4@s55D?Cn&XH#oU>8yC`6g?3gHh?kmpw(z7k@Ij}HI_Xt^ zb0XubQpOfx!_r+AOoEg~p3=@5=M-#N5L#^{JIfhvW3Ypm4)9B8#R4Z^%h9V#E$7Fo zxUMTudCkMG+-#M}0y6c=;v(C(ks^RFtX2YFsTVG8srr1Fsw`C#`ivpp>6N=NpUWLf zGTa$jVXlU6$v-#Nq@q+#=S@UZ2dQjlHxzY4CAZSCfObN%mt@VcbAZcGgO-nP)dOQD z&Xw|AHXri_;1Dw0T#lxNN??-0YpB2iZwt4zc}39MzJ*O(vH+ajAeT@ZxR zr3+(BuUDqJsn9&Gm@S+|wivZArimXg^3bG>KBcoexYe)9zOe9YSB{fogwq)Ux0KBx z;4~PYSR!|s^UiljL3@VHiV%a+Y^$mkwr28D%~|>wFPnvgbYZjzEuv7}gCH5ITUuhq zCRCcuV~M{@l(xbwY?dslY_6RE6S2z01>77RM{&*BLY3NzSbiJdBJUjOUB5k%Z>WlSlPGU>^|lw zBs`$wWoxTsZogVZQxzwv7(&;H5SIPuQzu4f?w$=rqOTx}w?Xr)-ia=}+r{f==87_R zPE4O0@mqB&zUE?B2H0RBrf1jZ(<;HF5#}Ni*u&TKb3PFY&kQ(@DN|Z}7f;CK0gNH7 zl?I>cm9TuUAh)-$I#rClFF%mYb5KrH*-SQ)(28h?6T(H9%Tl=vR(O!2Yg}}K%K^4H zTUeAvL0vgorFJqL90h}gAeBo7nd4OI5k0CG3>Jl?=Ft*q%8rp&am{dT}BN33RBgs@@=31^L*77b^A!95c*9VEHH1>tlR0*k;lYB7` zwhe`FmYg$^-WC$gwWnEmDiQWyYPs@}kACM(1~}I-sj5T;Fj@6i8L-3&rE}Qz?+8c= zU=NPLi~+ODvmnSQZO3LQLv4PKLhX<$3$8Km7k?{Y7*WYf%1V;@(94#usPA!iI`8ef-N)T?lyuOX5 zn73Kv^+gpLJIr*x(pO84diB;AH<^rgnXKNVtwKUa0FF0(L`P~B0rQ48h zxSFnPVZI+R(&_{_6$9iR>$1N&yODNnBj;KuWme5Si7%xZzUretw2ibba|oXlu?u*w z`a;gDv)sL7^G8{E?h53EaN5iK#~%;p_etraKwpw&1(|=U(`Us&1v;5POVuBe-t!$D zkL94{KlKU9Ih_dNp8x!%IbXT91}^I#f;O|VDO*pr6=T%0?H zUohF*m&Z62?}W&^0p(tDNEEzHBj;eo>{$gIZ+;Kc1Mp>H5&hdV@H4t)Z+^1)KQ;yb z+Ab&3Sh1ZuA!D3P7_I)_y{@Ss3ci*>o(7E|A9hmlW~-q#CVw9px!6)e%{zaBuFPsG zoU$xbL9;FLllQy(CS{ebhC+|e76X$@kKzI?tS&ts!7lqvCMyewpO|VmV6k;N%gQLU>)~U4^NKc%{P;{3iQ4GZF_d6R|LFzr&n04Xg;%x)O^3vpzl%Lc zNT1QLj`Bou%{BLYcaAO00J2yX(BU{3UCiF>FVz|w5mBuloDAzo%{Tu$(u%#QPA;_M z3x#=QI;9W={03;E6KhpVnqTWfUu$Yj5t@M+F5%l z`7XHNtiVb`^~#XEpY3E%`vAn|i~*&Ed7Iu3Lj;aeU=j|Mz}#)v8&J)z=qPQ+{Xr~> zKtT%9TZEXmUe4HUQ3F{mX20TSGCE8BA+@#cb<>;hUWqqj`5`TGP@1xD(MLjCD(zyz zt+?*w0xC{`7B$jRlO8uR-3BHS%*%o*MC`d>)T%XEY_z3LZ}E#LOTfD4#Sa+v?o~SQ z+gOXAW^V}=77WiK2eyp_`&?Y1uj)X(g8k?WhaptV5LbEhEIv4eosYht-BHjKq4^A0 z?Bz;viAV7kei&i4!0=^U-W~~x8B<1}^x;*6HeVu+NFKsL7m?dmo~LhLAn(0qJp-k1 zyeXD<8*y^_FIFIb=y0(G;1J{K`WzjFBliygEc{V}^zJb`}9%X`eMsO;9Q<^swfnQC#Ci4T~j z&}$J!zPT+!on2$Py1D&x@XlBOlS0^olSI&fYD!xm`)dfpEvpEqZ+hio@iCy1cMx{H zTyaEzc?bZovz8(!%=nxMFU^CFI=Snein8qy8p{IaC&m{*08AtcJi|okm@e0Y0sNF9 zON6ro;J+=1L}b8MtW=0#OiH3>L_oD)4zW)3Ia_zPU%5qIVHCRwy?6WK7A&hOVCHd= z%@}Zim02m`H~w-&BROET;lBkAfnJ5tv_k~c6h~E7-eX)V0`RR0<#WZ3v%lWI9m~sl z^(=u03a3irTxb!;IGXy8L;c(o2Be|O*?YpPR#p7W6;9R7`HwN8+p&!x!d0d|<9s1X z%Pqyz1z4@J%*HkYlO>|R(UAQ2f1vueQ$#IcNGvZKG1f%H8ON(p*s_i?;C^fyuRjHt zPCo;X=iudqB-mO8y!Du&crSUp2*@74EQ{hJzz->=D;8ER)Mw=>SKEhDmT%V}7|~gN zI1sf7YH!G*o5T@l!6gk5GXGlz-h67G=!M2i7vI|SkCIM>L7_&z=Rju zpHW(ZcozQ?9jxUm^Au(5du>2jG{bI+;qy6WGOodTX6q}DfY>K!Gc<|B1?ZhD(mtJ? z0YEK%n9rQD8G*mkMz8$8%D~1{9N8WPJ+N&Co*}FPNT=c~Vh=t7T#eAD7;}Ij z*}HAhicskN*3OMl@)i{hTaXd8vuM| z1HB;%HlHnku-A)k2RN_t-gBq@^}tj$N71=JrT`2hnrdh~vCs6i(DM8#M;Frf2J|b< z+YRK+w$1kjVZ{75&D6k(QSnE+U%zD&Sq;2tqe@w{a{5wWUZWx8=erF{F$`v`6iHJ5 zJFfAs>}PG@4|QOK;43FlmY{8X+vflx!nL3ckP~t}0BKNQ(6HD{uLinG0n}q6A~qPR z@+|NRBH*9|b7w3j&J8nK>Ljk6v~9x+FpO+~O{xwsPMg`U2YQ^DoCI4q0qP8}dH7f) zGD-!skEnc2%J zL(Ot>`cf!OfCg%d0&K?qxli=8Mf_W*t3>+s$HzTd0o+}>5-K~bdC~rD#I${UrEUD9 zpz;6^(|E@sEFA$5W7~4jG*&!YW1KPB{>(YXtWxh2 z9hLp_GR@K6ju19{XW70He$^~)Z8y_gFq!BYJEWRki5tum*Z8N3D@l?y-7=n| zJ7v99>eGvl&CfU14b#SBp3}0mDW1L*t+RAMN@e@|mZ;qsKpIJU0ZwKN%SzOmf`=b+ z_5X{hf4-=N(tbxx+pRwBhKWn!yCHLbf1eohcQ5Zneo23a^i}mkE_bZ`Qz=8JSMsW4 z3W3k}R9)hH18votR9L>6)}&B^x2wO3a)*Jz=-#d6PwX(P`8_;gt~qn~SPCo^+NK3; zs{0@BmPp1GDC5=Yu}rv>qmsSUX%OXV?|~6dl~{XPswxN$ju(LSEc=k;1a|&J3l)}SZ}bQTPB!VPo6S)hd#kiC5lk!Z_{5Vr)|#^TdnQgUg=Llo z4jw%%&tuebD&rgPw6=*!r}v1jC0OTcw{u^3HD>;HBj)@MUspF2yQI z4(Qj;gL5ICoAy@emwiBOqj<^AV-`U+8Or7>yHcJlAC|;Q4XYNXKHf2PcRu{^X`)%R z+0OqdEgK#QPCLV#?M(_&XI1*&OO6^zc){NnbCjD?o5|V&3bwfYCGi5AH|MJLW)2MW zJmqqaULv%_zMwLwJGN`w!h^2Su%yK)*}_HP4?KKyY}FU(YER|qN&lFD>RzQ%1KRUy zAi;3_75%k4N2=tB;qew367Q?kPMBGoi+TsWEwaD`l~n>)L!yOgm2C*9g+b@(-f*n_ zj^pF9Q?x=$l6$g6+ICH*RjFoW3;eCBuuKjN1YSFBuF!J*mNcD6-B6V!n$2f%M? zmNU-X5F|dm{DM|77Xbsey3md(9)TP5Hhn8oAZAH3w@SlZzjCJpw!363r&DIvsgJrU z=OVrNx;(RC?42CUwQ6;FHpdKl1G3Z*0{GSz#3o)E7VlCgrDM*Mqt!_N1TaoMWlno) z5jB{aH5!y^+d+O-AQ&RB2j{!54)nZ#50^sE%uz|457tSX>pw3Vq&u11i# z1xYe2>1k_hRVz}oF2{g$Vc3^jk`HG|H;i)3(eya?WSskK>**>W{KP+mMW;#~H#E-aEcS>TRr?lwqSKj=a;f{UQ9Hbnr*hhyfYT(ZHC^Kw%k^KEpU@vwv0@YiixI< z4|gsExNlzzXh$!7V9lf8^`jCCsX6y-Mm{=ylLJ)yr){QyoH3PB$L2Fn*!gm2X&!_| zB+}yhpjM7ZEqP^2X8bfzso=JZ6zTM}8~1Mk@G-HMUXDaq1A*TBCKN;)c#;SUOmO9* z9-z=vNmXRLj}Vv#X3CkV=18C znQ;V#WsN|-qxE7nH?IgS->Zk3ihY(6iY87)$_!iakfL(oq80BlFnQ2q(JvH>w4*GS z_0hAA%**`FRJrh+j;s)ML>#oGx6lF8+55iNk1b+IHr|8iw4ObiI>x}1|9y9?U|CGM zmKFC>xn^u#VSON8wNPVab8<}^R7dOTmCSfqC4ZpjGTJxQ17GQvg@HCH#m9QEt3=P~ zgG&7NYhu2ijUzSv2WDVH=oG{qr)61i(V|MQxXK3BGjI36LOHeETaU#TJ9c`~{udue zoTlPc@{lz`W05j0HSk4T>)Ex*xCr#h!LKm z$eg$6zS6EsTQP$DZ<^?m^9NHCobP9#?l*j*f2`&a*NPtU0Y_VQ?>AXu5VK5-9x(R# zD587+zD%p7uaI;+AEe_DnS~jcbWVg4u<13Qh8}P^P+}cKxO^aI%I38ToqP`4w;(cw zNJ>H*FJK?i3ts_jvQ1-eo{()~Xu0+tTC?nQs6NC*N4mqz*-}Rli-=OY-FeQ~&?gCm zKHanGZA&Dh!YAKnH8Al4df-IqQUcp|75&%lORuSqtyeq!ME{i^92ziq>bAnK%@)%8 zM8CN|^ZfjPQt-m9k9n?RV4V}KS>;|WFHQ1e_4$Z;bBg0R11O3NkeBmpW4l4YoeyhL z1`x=wy~RbJ)i$1K`gQ~}JkcVHZz}>rg&(|OR#Kck2M~Et(TYOg9tf8>bxfYQCf^L` zeVad^)axsNeAhHa@T&RRm3H<77|sG#n!!e>M!rR5DQ@~u0xz`(7L+OW&5W~-(K$q8 zkqN~$I|`$)r20gHPC4s;3?U)eSfVULt4)J(4xeg`-7he)mi%aqRVP}oNUr!8Kn5`( z-t|XI{K`aCz(P9^DT2xqnk9tSQ=B}=f0d@bFsuY^l@Ai{;wWOPS~Grbl?f-(c2?E} z;6RuuZd6y}JXiqrF~k+=VZ5x__(Q~BL5v`uEy)HN_+tr_J^)0Oxbfb)m!mRJ&rir1UZ% zb>7Sq=}E9C*b6h%VC?++d|oC`Q9@%wA-e$&?c6g zjT8k*5gpJ7h6W=kmAT6Um1m>ahV&YHLG5d{b6ZJiKBhXYtTd3XbbMC^R)y$tdW&V8 za$vsP0U3}FrEYzRy}XkA7G|`oI^wYT^P4^aKLabxcV?t-DmieeZ21a@A}5}j10pK2p80ou(|Y>JAS)!qK9QR8JI9yK6qeVmxHHY;7? zQg17c87gQK(Jxoh?&56WAS~+9AS^(v(d^VM51RG{UllnR#7$|W7=uleNI@F%Wv_Yp zau9_Zl+1q(Fc|$f&`h;ko+XROxo+_bzaB-RT(UaBolx^`sMdr)B^B2EtF64qz6d=qS|zpyA|x;p+$ z$89@HRuE#=1Z-{~n3`4_gJq_&7ue4sY|Nw`=tv+ofsiSR)Xw^B`QdHYNR^?skWtt; zDgvMjLccYnilb}Ho01@uKKSjWqzTNKMlmng_c z9(&M;-P^uN?{w7$vm9diPVEbA+M9iFthJ_An7DW^xwNrrfc$9KZ7U; zoufA$?ObayrFr;aiE>?~p}T1LUdv{y9V#7+A~-VQyEFM#EO}n)2du1{d;Di2n2W@o zMG%R?!Lot`p-PFzHvT-lh{<*K&X+eAqK$!y3uS18_MMH1d9{_BouX<-vqZ-xTWNRk1@)ZBRUJ~Y?=5ugJnDJvlOEi-V&$ZqN~&~v0RKIn6}Zs1PhKM&CSzz z5R8L(z)TN~5dxxT+5#3U#4Es0>>pw^gU1SHZoKa*mVD7MftP9#tVd%iM~h(2#d`_p zvO8#p2>6LOo6SsG38WqvJ|JjFva8qKKsdB7ae?DHR(7qDyRT{M0dKlo9)U9pkq^ zH_kO1m?*d)nV@(Z(a~=1&w@|B1N{o2CO(0mW^@DXFj$P2WbQg`xecGxQ5TFR8<`QUu z*~g(dAnfd-uAG+OG8}X$U@e^qsbS^K@Y%{$AZ)^*idU6%Q&Y{h_rM5qzEC8hS67V0 ziX4kTAQ6ni^;&1l=KTZg&AFi2yUPuo&nrjliya8`Y988et4{n=myeB)fu&)p$Fzh4 z0C2@FLn5qe6I%~`W^_OwfdcC{>4B3+P+}Cz$DmuV9Kdagt59;vx@oyG)68e6-a)sN zrR{>5oIKq|&f3wVG;z@9B80B+sm>q{#8$)jnQZW)8J06(#)4Z8FDQ<5`zcdqb}Zs$ zU>GL4Hc|?8mVpEj2aM>fqMNx^w2jGbgLILf68%lIBU*;8HN!V+HK?7@SdBtYg0%kVuC96Zl#O?A`=Y7LAA(Lyn8_t2*X+xeCu?#luc_=#6MLtb5=zh1P6f zU?G1>EDJtpzkOM(KB_8e5aO0u6t1`|mjm?~ht4vCIG!TdXNwP6z%zjDIdn6S-$tT@ z&Jwi&!isO8$$$5~<{5cP!1WtI9F6(@-=br+6kiS91Vs}6A?}!mev7|;xuW~EsfSL9 z+5!$xoP*Sebc}NpG5~7?ggpRlF)oH`AWjVNESlM5rWXg{5KwF_+a44j#Bu`V9TV3m zci?;C5itYvAIA2w?f(L=`3njLu>57vfgq=YXf`1F!qX&jF(@3mQw9*HX00?0-43fg zXtlQof#Dmp0lXU|@jF0PG@b!&cA05=*^44_Eqp1_={q9h+3}~Ma97wr2S>qnD1x{J z9{>{nQ>Uf_HJPwccmM#NJanxLc=)E`ag1$Saq)Hl?@rHp^whTCHk>RYwij><*yTko zVHoSDE3<&03l0Pnlx6^!Em8@9?*Nd(GvJX@wvXQdatAXQ0nk7vw}A~R3cXCf(vE@p ze}~Ct?ofz-I>cuD{~r<2E$c9nmqbnWS9jdsu!2O$c&I)gt%6BKd<4+R3Kp2bFMuOq zDcYfpW?qD|#aP794sqb3MNiqlvlpEKkAeKbl|i^VZ6^ElEbw87b?O+J*yiHtTZ^9o zlrkJ3ZGS61iRS#9Euvt8H24h2bgVo>0|u-MgcLH1dRZHA@ecN9mVwTWNDpbAdE7ksq@gJ*i%Hig9*fpH2&q*vqb z@lZ%GCQf2#!Ixs|n7$O=6B`B)iiPh@XCP&w+=qxOL*i?$M3*I{Xv?K0D9PKn~ z3yLp5K``TC?IQGIVz=Rp9OS%^xdf9DlOI!LC}e>~*P$sOi_wLUyEH62@Pwo53Gfr~ z3jD@$0e&~Xs6*)VP<$}&kerNHimO~yTnDid2eIH{2^xw6^TWxC{rA7H3SlWk7tvV$ z(DyLm42^&YHd0X8c8Jp$H;79<2o~{rY%mFyO5BB&#v#V-T=p?`lhcNVP%x+?DrCl+ zP<7lRu9Bj17o+>v%dIc~!bXU8ffRTEDgqX0v0|tyy2PTh!bIuE(?dlP#RrRiB9M`g zXJxosd@a5ijY5($(C<(+nlUhiV!=TRyj9d3(6!>6`lZ;|Yd~h;BPP43ai9}$5e;@* zg5h7_pvH$8xEe*B1p*Z}wx*iUW6Cg%3X(4r`f*aJAkB_9Vq z-9e)bFgf6-wTq`P;lw#-j?fUN5L`IWO*E?$_k#dtcYxCzU57GYWT3KmNbD*(UW8JC z6kB`@3pAXyWjHTN%ooL%5QW2z+T0dm(5@npApUzwuG|sCMNW-1Z-O$z+go=(5dz^)X#yL zftoGQv-DQv|KMFig9Zame6>l33g$8BRZxeBUlKPIs3x8kM>|F`zKDi}?6Zr47{*`} zz-$*kjdsR6AYRd^wPI@k-xpI*tU0)-%kVPGc=;(>=@{pD3LS>84YevcsgpafA3z&I zWyKNEfeyMuBsg`5Mf&B4L<}rWU?z!GhhRcdo@D`X40TcvjX}!FAQvLA9B)Tt6WRbB zr<7wHAV&tvEOLl%AGnK_=gJ+=SVY3?Vmt_LYZ?kSqmUEA40S&43_>|pI6k*wc4M&N z?a1@N9ZE>$&uzA+hvvC>8&+sD$Q@q9YljZ8V$dmdkAi&(v@S!#QM>@qdN|VIat{vO zhB{ynM9qfwj%f5>qSzWbwm^y*R?cX{g1%jpIN|}>V(W;`V5681s29qEb67+>qBdjz zh=1WI!}yQbjo^$>Du-fYZl4y-{g7gg;O#$A6^L&Kmc=|rhYfvq`-m8ZemkPS-i1Df z;JN*m@E#nZIh(SfZA zns~?U5kNW?Kr=Ns>_+HHxbSPaFeJqLiG8SiB4NlcpTTKpW3~r|UMJpRGw8)%IAGiV zzr$w!oA?Lv^g47yXC0rT(NUHE_ZZp-|590C>Hm5u2)cvmdH)@PK?tOdp}QQv6#Ca2 z%_tq>k5EBEvK)|wHVCT-#xZ`1aUTCYf=|IQAvPD{pm5k~5vFmwX$)9Ve>v!(isb#b z7&sloSiXJrm$QiDfsBUbC=YV744?Ytpb-E?ibz`&_7*5~K{3n(rI>*Lm*DMNw$LDM za){m7K0`V5QHb&BaygXG8F_5k?HL&XxspOuI5D)%ziKQX9%2;?<`}e-t$5ysJ3yoD zP>?pTLXcpY4Gc!&D2K4wiasPz!t8cMyHQ!>*bcQLSWLEvWeAobLI{I+3;s7i4BLms z*)OVYaA*a<>xK>xY0XfIP9}mT$6JR^o>a6$zZ7@3&?@m&+b=z*|D|n$xXY|-v(FGa z8FD8Qw9RNUigrcv-^nucBK#0ZCNN!Y|C#lu_zJP)guI~G8pN+(IyzEpGdzbxn)tUFU5Tea_k`FTzRcsr-@3J$I7n)o6gOmYWWEZL z{D-V;tOCT6WNW}FgCzNv=Eqv;Aj4lP`w8Iea`w4GqF!UHTNbF`hFOOXmtmHbj743tU>0xa7Zkd&K)=yw6OI{C=LfV_h*@()nM zz^dQmUkSIeNKln6(zR-##p+dP;4DtaHbN55xml)2mk-E4yqqWHkAEmB^LK{+vawq_QI^(hG+=0FsZE#fdwoZ96OZ?hS<*la{#sm$k{;> zww*cI;S|ULh>t2`{8kx5Bfm~E&nq=w&#)Rm z+k^L|t%ffVPeXt|6#UMWaZddd zsgcEny)b;FBk;ek5BNqRUZ7J6ml6T2(s4^-FQXhSD7{7T+MR)TqPwW*?v->xDf5 zw#Wyhh8eXd#-GYJ3JW4AUK4@Xg762>#Ns;{L9;s^MjH3_7K=!Eac?*020O%SPY-Uk zMf_UPJ<@`XjiU5U7PO^mkN5boL|9UsdF`=SBmR{ax_UYSxs(W^*t0j~66(;(ZnV-V zp(SiiwFyt(jE8*Yl1EeF#PwG_a8GxR{iCeFjy<+5{>GLBWy}8VQ6=p9!p}ls28o4lXDp8faNaP%+=Udu3Ri{Tin)gvr#?8+c z?@Xeo!;ZaN(8^?izi8hbNo3B^ysvT#6^ei1zKIdh8fe(-Ym9rtiY>A$oz94`@!Q3y zCw*6mA$8OF-zcs%e)_A`*y?r*g0G~15YaO>47JhXfyl!nKS*EMTU3rNYccK|c|>fC zwgxZjE&b_*bYR^Di=Nr{w`VS0UHi%M>4^B;4=!|)Y|5~xkG$`85%8tb69Hj-_w-mo z9}Z96rSE#r*LVB7#pR=Stqh6#3yOa{GLiWDgwj3O{)=VJ&%Kjmd!@n1pXOHvn#(PH z1?%1mIdtv$Pj%wmm6Be*pt*cwW!3o+_f_kxWy=+(RlLY2SMTi-zrQeWSySnuo?%-b zXU^weZanhZ*pLl#o5AFE|IssJ$wyZ`Q5y3sU+Dkz?&$K*_5D7E%Sx&E=z=SrxOUun z@^siZ{nuiRYu7vboUZaaoi(mAL;b?@cTT6T4HS~s?1~fy#qLX|v^}qt#%+~r7nD0N zLMva}Jz<-=%k_&-y!DYk<9}FUTif&C)iHc^Mt}9G-p+!>Hn9ygZxjdD%ct=gb_bro zDsn+N2dyhT`0e@E^pep|jPAh)^sYkk@4vjfRC~v8b0sH?`46C19=?Di;f8BQ;D2Y08hoH~8; zm~9oYU(~0@YDXU0cjmANe)5S&R@%D8<~{SMGkVES#@0S@h?B_P5WwrciS_?b+y7b}ic9`NJLt75MLYjSrsp$ccM44!=9S>+~J%VPk)1;CECG z{C4#fr#CIymF{`|Yon(-kBe6ZoU5*lo?3QIdRg0d_ni*>Jl)o2?8UJ0Uw7_b_QTNK zKS=NCZrDr6dt+YXbJy-(zxnGzY!Q$DS!?}yr)aajHa7Uoqv5ZYt`miy6g~g_qx7w< z4dlH!|Bs&?v^lTcyxsQ476%yRstnpbVfzNo{$qQJ$*JLF+;jBA^MlsqSbJKmh3^-K zrVDqU_WWToTD)$#2Y+na*tbtv`^T++QU3e${e|nqeXjR37iyZ~-zae!9)8U-U05}F z{SPa(*7(4Op4{G(!pLCxC!5w3^KQKJ9i%hb+g@JkD!n)CZ7L0m!0RP$v{X(_ktp)K zYYGXR6?=s76BiD14?gt=>-4J6cg;%~uHUbN%s%lkT$9fP`iE_s-tmdu+s+KRLY^LD zpEXWQqCL&U1*>Wvedv2r!`s?Kj}e*ojj?%Cr^6lpbp61$JNJBJclrnE9^-4k#NZ33 z0~58%!1sUf$Wy!i>E*|dy#9xGmdBPJ*%KL_w`IVW+wvERS@ zx({6I4u-#OEP6Q|{_6Cd&Ltmy{qd3StbWI;t;h2Z{4Blyv@zB2=j+bDZ1cZwTI8;A z?@s@1kAHMe_s{#sZJ`H$(mAqZb?s$a(`nZK<>Pywa#Y4FiAS9e-Q*s)e)kPud!=pk z=Eu&omxktV{cg{_{rBN_x${^Gr#*>FLB?kpUgja!RL4TjP9?0wnX~`keK`cQi~4Zd!C3LUPd)?sB{QW;#?cF}Q|LaF@|LW`M^n>%>b%}4{Ib!4k zurG{89&0zGn}29#e4TnEqnJrFZSF^a9DRL-PvhSkN&56dMMl@r26z5 zQ zE|*&Uk!70SHU_I^obRS2*w%f!})e5_38=>BfwbSM2x@AA2K@A8eLI|->87~R)~jUw;! zvVxSo`sO`ir3d=i-WOp^mvXUy`dj|DXAcuWKU%su=vD<6`V_p}*wNq%GE z=(2p8q$V(VStoB4=|%DzPa_-3J9)JtM$$ZfnxOAg%3G-vZV8~2PQlB~TWM1^I#bK7 zv&B1eYa5Vuw)n)%oxFdpcty&r^_#8ER4V|xto8rH^JW9wbI$WDzPy!P$T{zKbI(Xx zHujH|+{cLIpP9n*Gv%B{y|ZACqj=eGZ8u4mUoKRf8TM~$;}%G}qpeK}kAKfObrdtz?>-v*0w zojDh5W_$CG@Lg@oczcsz4LkRLs00(3gny{~e_#hMmnZ|>dRx~`JnVd1rF#ZB-&Q$` zv28*>+of5IPn(s{kt)TQAr7;Z%Xq*I5<^_}r2Vp=5HWeDH)WEceQCcg=_Q59@Xk=7 zPA18abv#bp91RFuG?TSyHB4YN^8;nqxs3-#Hm!Dld>K_~vRT0dm`d-+ z#bWElBE4xJY#a_ti^9ikn^y1M^vIsJJvRsTeu)mcM{ZO`;Or0W>m1#uBglmrz{P~n zmR!a!*~iPBykPfb#0fX6V8HA;Sl8V!=}oe?bisg^v4GsQmEOUMB#+s1JJ)0{s%`DL zU58@Qg1zr|c?MW|k-|hS8YMNu1@X42r zJ)|>T{n6E1S8ZC2&0P9-r}bBk?|nY!PG5Mjd-$VE#foQ*)5rIPfA|6~abL3K#>B;! zEK^zyWB>jy9qmE35I5YkW!3PFo0ioB(tCf`^M}*n--!lg}UAFRpm42mP zAI8|w5+|fcMM>Y{!o2B)SKrl)=T~Xq3VeDB^Ij+|h!FJXPC~EX@N{&H>eYhQHs6s&dvO5$8p!k^08RPgloj`4vTlC`g7?JroR|5(BG zofT!mk6HTVgM{GWiJ|Gju+JK=VaMjGjN=tXCkW2j&ua;WHAXlx9N1iy0j_hut5C}Z zj+bH*-i(V@=|FRZ+Xe^|V=H5O&ZC1i@^s6%aPo0mWzbqK$}VtsKb`I(|B|JdPzz0j zwUSi_XpFA+jkQ~x#2qY+yBJ`3hU2{v^u)Irn-WqEz4etAEpx-*h3=QJ6!$4Pd&385u9h7m5*%+#PPfatC zR!R)3$WQbC!DcyewS*W#3(!10X)O%6reD2?Jg)tWgCUN)Dy#w#O1a)&9y?&M|Gtl= zNW@#PRK{dIf!&xlp0`aEta3fs7+RSFo1DZ4ritKYC7SI;?=E9^h*dohCH{zg%kD3YM>iTK^ z0|N)X{e%AI#{31A?GL!7mcGj!UbpL0^S}MM(}_R+*80`4!9U{`clT<=>f+G6VEO7P z8Iy8X&70Zww?27ov^ezGkFBw9eQ^J`zwTC3550Jx{jrt9*P#i2?H!B0u>3FGhktqB zJnLJQ_KNt?pxCyuvg*R$4n5HHjWI!(F(Mt=8cXxHo!{K`&9;aBd{}su*k#jz=6hV_ zRgOtZ+jHlSehE#e`kpDJ`L*O_#FYbo{~5=#IFW(w?gSc=^Fz|QY~H6n(NxJT|HX4_ z2=i33eeXHzvv=A`gPZ@Yxi=BP#f;@YHE2EZK`^TL?K9)erKJI)Bn?fEZ(DW#nSpnn zvGkwx6q3pDK2WT5U4tgN#^)Q~c7-)D{Q0+rZBtjqpF2M^&{R(M{nT>iL1#%u4OxzF z=AiA&_|(&$*DTG)9{rQW^@Hb>w((2LL+!f@WPa=x+3 zmRZpB`g8Thd1_-%@l-}B54MkcR@xdT$C8n6+RD3})~4TQik7~dKwtXFC8}SI6cds6 ze$97k_$oV|mg9#C`0 z)=~hUZGTm#23!SF%ncDF3SvBUL0{QYslm|`awo$>j)7rKW$>-!(^o3JS=(eMn0d1kg$v^#%;Yt6 z(TVb=Y~k$|ZYmeYZM_9afyS~m{R7iA&G@v|LV=E0%LQ9AF}lhZ;UxBym58p8!cxs! zg=S{2w)}T!rq$WiG=@_r)3q7jYuqMrxV2Vlnh02p?`3ZnA>D|9Yn_IG#G!-K6mwAOBFG!%E}2z#Va+g_@ce9RFAJV5$mp-9(&6+-{g9w;*e`z#ae!=W{O*w0$5=gUSe&! zWz02yYH)KiLDt_}Ar9QCDQjiP*l+5~mzD=zW4z(BV=tk{El-cVXLO?2CPnI{?ANAZ|T(iIg2@xX5$kOhS5t4LG(K*1J`T*d-hwAX6fNcP+Ucct03iRyRjG*=2Vr;vu5ZbJ-bA13Yh-mKLYKczQlK&0 zJNiqU4*+a^U7v`$>;^I3%g z7>sj1%dw#_PEz+K9vg#mHhsE0_{(Wn@L9JZXdE#y7 zHRA!Fbh*m6l*j%^uy2?wDK=|tO9<3%b=nKCRk-*3iz;Q@^O?ZDN@>gj(JL1QEK|Sk z|9z#lu~d7))mR!Ea7~q`Yb^Gf=1PC5fa`T*WdI1Q{HCdpLq&vVO!1<2c*JLI38;--#$+cr)8f)7Ji`Ne>q1M*;E>hYtBS2SQob`c5j6vUEQ3tq4UeobGYhgOa9FC0> z*a843xSIRs*CO&+r^eo7Ms1Zcp^=-q;3?#g9Lrjp$Ci@ZPIhEIAtyIm2M`wfuI>Wb zU9P_JEeNl~zT|YKncfkTz65#^CbMW|>S~i#XN5oo;6<~uaxKl4CmDUCoDEk^FC0wH zP2o*e#aXVY6kXpLAGh=~M;0j=6K{i?8TkQ-^PR--tPqgR*4#8T;963G#lH8`r31gQ z^%rFD*M9nIvAHVcAt(cp7Kziwn2X8Hj2ad>o`f$I-e3sj!J`LQ^TIeY^ZGdP&)GiM zng|HMqP)K}HkozVTuW|YO>D4B$QLj>m}O0foCGzSEHc_9bf2V3HqD_AgI z%bo=!u8Ef>vsq$6l?#J%q?~#-S4xvCg>!oBf!g;rBJDT3-qEzATt1PsSbyE#&|g!o zCHBZ>gd2J#$IBAKh@gLT3(#Su0WGF@{*+G44wt1;Ah;=f7GP`cCHjJV+{HLcCr&Vm z0oQ{rdAGB_iG(%tK^vLr!vr5FGj}kIGV< z+Q*pl>Ds3VH@%7&bO2hp#%YHUx!C4foztHyTWW0IoNiCr-ft@vijc&{F^KharBG`r zofzK?XB=Xx$}mey^FnUeV|JbB;iij%%R+AJFeHmaGYIc@8YMS3Q_2#(E`mU(~x(O&Zy}z6- zy6oSzzN49mvpi|(eX~{u7%LpL0$L^L|3y-Sn9?R;mIKpQl|0YoYI~t?St~;s&o;w8 z4p_iF*l6=uX|P}N$N|?y&}sSKR5l_jc%nhAg3j>u)fYrL!U>W4~} z#w8W@^riQ9fo=1^L?VMWk)g>#6UBndIWe(vqo^-lV_N!Zrp~Ke)Af7n0G&mgI&aEyCsNkN!U;>+Rrt*y5wibe+1y^r zKo3gYrL6N)uU$K$7F>gWR5p}q|6(h@3|!r^5qw2dqrJ*x0gSGUWh~`DA$y<8DW!;} z^6S^x&Swr@Y@XO_S-G&MpeCEwyi$950m(@++4oEh>==K>)om;i3mm81#&YGW7na8h zoADYhWD_eZ&%J1Q+*t}7wl;s-w`%{@mDis;UwQn46M>bL1s9ZSOFumQjrg^JnyJ#8 zyVW0DSa_hOKVBXJ-Aa>#E<2P7B%76oiOpJUwKNAy3pnIv^E+i}1dY9euE(21%ZCZuXyeAp$|_S ze)WmAwjBeh8!PK4ZOgCe8ven@D!6S2-dB#}%_(9+oUcYcT^a5cPSLW)QI5r4IgjPH z-s{435uvBNbh*pt-F;_s{Eac&<)H_MoDVd;S$vO8=_%aZH++>44ZBX)K5(zve5aZ#m6l-csYZ{An&8J4TW z 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 literal 0 HcmV?d00001 diff --git a/other/FLAME.NES b/other/FLAME.NES new file mode 100644 index 0000000000000000000000000000000000000000..54d977694129457103150e44b946bcecf57ab1af GIT binary patch literal 40976 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 XPJI@AznB9d?uA4ieG++i5;gTd`S+ZK literal 0 HcmV?d00001 diff --git a/other/GREYS.NES b/other/GREYS.NES new file mode 100644 index 0000000000000000000000000000000000000000..12f4282cab18ca7b557cf20c125423ab92c90375 GIT binary patch literal 24592 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 uk6{Aa`N&b&7t{1)amxjcL2 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 a3Kq9Zrp2lO%^Eu8G+4Vk^RW5#`}-d#Yu>8> literal 0 HcmV?d00001 diff --git a/other/LINUSMUS.NES b/other/LINUSMUS.NES new file mode 100644 index 0000000000000000000000000000000000000000..a146d2f415f5aa86aa5c39d4e1b9bacc72e69bc3 GIT binary patch literal 32784 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 T0|5{Gf9ruq-eK=N^3MMT;j+%u literal 0 HcmV?d00001 diff --git a/other/MOTION.NES b/other/MOTION.NES new file mode 100644 index 0000000000000000000000000000000000000000..f9bcd0ca0593cda2d4b5ca81e01132b06c0955f4 GIT binary patch literal 40976 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 Y?&Z64aekb(cl&7k-lO@PpXRvpAFSq@i2wiq literal 0 HcmV?d00001 diff --git a/other/NESMPROP.TXT b/other/NESMPROP.TXT new file mode 100644 index 0000000..a5e211c --- /dev/null +++ b/other/NESMPROP.TXT @@ -0,0 +1,108 @@ + Proposed NES music format + ------------------------- + + +This file encompasses a way to transfer NES music data in a small, easy to +use format. + +The basic idea is one rips the music/sound code from an NES game and prepends +a small header to the data. + +A program of some form (6502/sound emulator) then takes the data and loads +it into the proper place into the 6502's address space, then inits and plays +the tune. + +Here's an overview of the proposed header: + +offset # of bytes Function +---------------------------- + +0000 5 STRING "NESM",01Ah ; denotes an NES sound format file +0005 1 BYTE version number +0006 1 BYTE total songs (1=1 song, 2=2 songs, etc) +0007 1 BYTE starting song (1= 1st song, 2=2nd song, etc) +0008 2 WORD (lo/hi) load address of data (0000-FFFF) +000a 2 WORD (lo/hi) init address of data (0000-FFFF) +000c 2 WORD (lo/hi) play address of data (0000-FFFF) +000e 32 STRING The name of the song, null terminated +002e 32 STRING The artist, if known, null terminated +004e 32 STRING The Copyright holder, null terminated +006e 2 WORD (lo/hi) speed, in 1/1000000th sec ticks (see note) +0070 16 ---- 16 extra bytes for expansion (bankswitch info, if needed) +0080 nnn ---- the music program/data follows + +This may look somewhat familiar; if so that's because this is somewhat +sorta of based on the PSID file format for C64 music/sound. + +I have included a working sample file of this format, "linus.nsf". The +".nsf" extention is short for "NES Sound Format" and should be used for all +such files. + +I will attempt to describe how to load and play the above sample file, and +I have included an .NES file for use on the emulators that plays the sample +file. To change song, hit start. This will increment the song and re-run +the init code. See included ASM file for info + +The header for the file appears like so: + + +offset: bytes + +0000: "NESM",01ah ;this denotes an NESM file +0005: 001h ;version 1 of the format +0006: 02bh ;there are 43 songs +0007: 00dh ;start on 12th song +0008: 08000h ;load that data in starting at 8000h +000a: 09a3ch ;init code located at 9A3Ch +000c: 09a8bh ;play code located at 9a8bh +000e: "Linus Spacehead",0,0,0,0,0,0,0,0... ;name of song +002e: "",0,0,0,0... ;who dunnit +004e: "1992 Codemasters",0,0,0,0... ;copyright date/owner +006e: 0411ah ;speed of tune (see note) +0070: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;unused bytes, set to 00h +0080: data of song follows + +The current version of this format is 1, denoted by "01h" located in offset +0005h. + + +The way it works is pretty simple. + +1) Set up RAM at 0000-07ffh, and from 5000-FFFFh. Now, load the data from + the NESM file starting at the denoted start address (offsets 0008h and + 0009h in file). Continue loading data in until EOF. + +2) Set up some form of song selector for the user. Get the number of songs + from the file, and the start song and set up your UI accordingly. + +3) Set the accumulator to the selected song minus 1. (i.e. if you wish to + play the 1st song, set the accumulator to 0.) + +4) Call the init address denoted at offsets 000ah and 000bh in the file. + +5) Now, repeatedly call the play address, denoted at offsets 000ch and 000dh + in the file. + +6) If another song is to be played, set the accumulator and re-run the init + routine. + +Note about song playback speed: + +offsets 006eh and 006fh in the file denote the speed of playback in +1/1000000ths of a second. For the "usual" 60Hz playback rate, set this to +411ah. + +To generate a differing playback rate, use this formula: + + + speed +PBRATE= --------- + 1000000 + +Where PBRATE is the value you stick into 006e/006fh in the file, and +speed is the desired speed in hertz. + + +That's it! + + diff --git a/other/PCM.demo.wgraphics.nes b/other/PCM.demo.wgraphics.nes new file mode 100644 index 0000000000000000000000000000000000000000..549daccdee6ba4b454b15e5488c6b9252f5e2c2e GIT binary patch literal 262160 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�EF98K6d&OmOW~4Fm-W+f#Up+(ye<|$nTmniUWm#YwdGOE6uX5Iu`C6|GG6NxP1nDVzD@yNq~|rAK%zkE8w(r{8yVIcf_gXp@-p$X1v@zxq+;#*7I7jGVl_t|19 zQ@;^Me0y`3FFr8m2UmQiU@Lmn--vT1^L$en{C@7Gg8+k#nAaQG2HS5R&o9r%k1ccZ z=+M_pGtjIK`*-B{k3avq2m%-2#6fPp=$PT7p)1!7e!BGtEh=J?DRZ*rtoYw-t(~qQ z>X&1{i$hjUXH0!E87-HKqMhj&<|w~M{QdkK{vtf!W<3oW4@z7}wNzO2Oeaiy4GW%k zCwXAU-RZEB$%>&X~Zi8T7)3YCWIp;w0Ggps!hMWmXjL141wS|^jt{q5oR zUz1;NGKGXZYZ&Q>8bhB>fKbIb8*#FlXwC#1j5hp4lx2;wu4FVnJ$pf_Ehh*o@JSaL zo7tn07#Y%RB#~q z$8OC#JW4zeGKKqxO1)UjvN#12#}rDnMy$mcRLmWN3n0{}4QQK%@xKm0%_KyU<H`fBSaao1mjIF^5^Lic}Egl&!-S&Ef_HN&?d2O~>_g zGL=mxbM_o|D1pKm>Ma~~E6cAYnnWb{-2+t!DxBeTF3qzEhR}6b;r-+w3Eot_z#a&P zdNo;zyuHM<;Ux2W!V0U?R;-Q1%Z=tr8Kj(*RIEKGA6~1gDTrf&zRJ@JsKJt52e`Fa zSq8I29tI`5k(aD1#x!4FkRh5A442qd(u^Px`6eC)&6C1kmFd>>s(O_{1%C$sh_fDb z9tRYS^I&EABjuJ$QaKwDHv=v=d<`A5GJs~9AoG)OUL}%Yl1ce~S}nRpP()N^!amI? z2)EasZ$^3!?X44%xhpWaj`ZtuqueQ?hplQ!NoNbE^Cc`R_=~ho)vCuZVmZ=BBGO3n zOOISn4ZbCTI#y^45`a{GKCeE=DZQ@gD|}%JO@axG&~V(AY?;)87)~&`=K)9 zLXTQ>K3+wlIRPt=nRM#@_Xnp=n(qO+m_}1g6wG-!tMn9`epLr=+%XAj*)}B&V5RZ- zLVCmPvfba?hP&f=Ki$8H;NBdJDqCHCEPR70AjJ~KghnwFiQ{2dj3pRSZ!Di&GnW-e zf^t)Ja*o0CTQ#aiMc=&Qc_kj2W||b*JY#_Rir-2COX3Zu{G>l>D2VwF2qV-8W=+}| z_-Q4Ax@eg(`@_NB;?s}^x`E;A9Q5K$QHyRLf53+`?d!{lRDNyNQJ%4t=xB`ec`g`- zy_D{`(%jf0QlOU{KsdhJk+6kN$R#vP{pw>xgBdJ z!i1JrjJG|YO&L@*z%2DuZ+UIJIY?8risJ7sLRY6{hFbRkQe4@aD8qt1nl-KkNTJoF zLbpFG<2=x9Va%e^_M9Yrp|r5}mJ@o4UNAb$*yfyw1m;K$=Gns2x#;YBEU}i{^!Bxkm?Sz6XV47FxvBXqHtV*j6V{ zM{o3cSRVzwr0O}Y3Wo6QIxp<;b@G z`tCtzZL%b`R4`v>h#*jMhl{hw_q%Cn*ppCuaIUl2*7MV>#jUnW?|`E=e%^0CE}QVW z52X+t)wG(0rt$v6wOF5s7Z88^V}-0~Vd*}Xxs&NM=M{5+bVu5Wxsb+R{w8BP!VOor z-{T(h{M+**`=nN@Y~E2CPLEd;#bp#5Fl{O6$Qs!q#1{{bGuQcfFOV;y3C5S*pqg#8 zlfR|#=EicUwuaz?I6Dj%Dl}FFdQWKyNS|wxC-M=LV&kh}+3Cr2jNADHf$2r+CP|2E4mkOa0s}H4b z9n8lJRbb|f&bnjbXg{FC&~_U4(r`a)42U8Mm6-fFFwL?DoGPE$xoxNtEl_wk34#L% zF>o$Tz!n+Hq$U)p@UWyYgqIom&{HW;ESjnI=j87!w^sJw>(0WMVlh}Lj!F~!?+VtUITki4VA`YQ_7Gn8wiiW?_S|r7`ic!MEod2g#6-p@v%zjJw7b zql;K4+D8W)BH_2%o71)0Aez9T^ozI>xwTOMF5MG-L9@Muc7k4hYCZ zKh^3(mPw-wTY*CA7i>>WS|i2+C=bO7k1jWZFDz|xC-!MQXi1sv9bVU!WTuPoB7)>v z%QAdc0fgE{*@INZ#RUoTGwLYoCkV+U>_itHH-=OBzs%^{iMk3i&w+|F|N68ywnKz0 zOTEEC!|@r~GHSZX1oMj6eY?GoyafllQ#2;(;ehp6^Wsd-rqx+AkS26dt>QxoH|q>b zRyShv^mO360qzT4CPNyNBZ3NkVw&l&QlX~_umppPD4G*+gx0_=7=ihC*x4uqz4`U~ zb8rk$X0)255bVWaYm5n^>WbHT7>ARMU4~_1+|PzCAxf!_K4ueQn{Cke6fv{}y4Pkk zgqdb?6loDRy*bA>!|q{pB5Ir(L9JV1hcV2jtp8@woJ2#nrXHyg?NhCtw!(|JUeVdc zylv|jBTX60y4hl!r8y45=v9OG#O3rjFdSu^*A%4C;8K9hG>j z5?qnt5G-!U$P;KCfkvn6VK7`?u1fK>g=yxkQecW`8!Dx!;4oIOcK0JWC>XdJ7FrGS zK0{}NSQEz>*cwj_i}f;tJ$?Zu70f2lf9+xe7gUNlr7dEgvs|O!Yne9leLxI=@0q=W z(%st4p){UGFhL{v6fEiOqTJEQn2~q6<1; znDLuydL(@uiVmkxBqQ{4M;i7XrlvC;dPg9F-GDXjaK*Ld20S;bZdrso+da~kXKOTn zF*VyuG@wR*yfs8In)S1z8w7QwpgPp*qYd@rQz-k%FC~l)Sn{CV!}c5s&Mbf5Sv7#x zg^`sjh53~QTn5}37=mgbQwDkRKt72ZAYB8^h`gGvP9IMv^45!bEXZyqZq9>A-5YMT z*|>NS`mKm(Vd+I`4(j>@czr`H7;Xq7mW4zGBpPv@(?e{vuvk-ppmzk@sLml8=N}H# z2heaw!GPDXgJ-w}VErtl5=xs8QxslVcp9}5o<*KJQk899v&y7T|L5NbvgGU&KhXGy z<3VSk>VyL+W=WVRx_$JPsL-&kAZe{@WvxN7N@g(Oyx>C)g#l@TW8Uwb>!Rb93+O>U z4LQm@P#k75o}l)rUN=2MQ7jbYyqSDz3jF`!d%`y!L)ggOazPT@3b~71yoq4@aMkt{ zhmxiM@B_~ZSr9$OuItteZE7m1o(6uibCuv+c7yfSo^=h)jZmQ#BNnKTga#IDF;~l5 zdHO6CK*4W2f{Z-?Ji;Xa!k18!#gINGK5%G!;9#7&vPc}cI>fue#jwsHOaA|9ll0U7 z;nakdAyNP@sIkE-s_|eF;=g$kfeVq>c`n$3m;?S+wSe`c0s!E~SHVz<@=LtZVS6+H zcLc<&)Lfs0Ralcvh&0$9h`;jyL%xlO1tN9OC=)sHZ9Fs%vJsMD;t`f-yt2k(ODni% zVY()ou22#|P>ymCmdoK4`((rXb2k6}(GlEn-4qw=JQHOxa)pO>>Gwn!y!H0IM84BV zmmfJdl9w6>?H7mdtHG{3Fpr}`v0k*ZkB?#yZtpw4-DI29N;22YC2m;*^Acv?wK?zR zyDQ55fy<7)6XYv9Hp@qdZKV0zMHp~aN-~aKGl3VulV*9$K zHds>GB1XFXs<@@?Qj!^IfvHU+(#=+|>3~X}8M>H!2v!n6KxEe`XAadSI~2=_I~z&Obz?Evk~+f85oz zEd)nyrh+bM;JSK2>)S;PF*CT{j>$su`CAP!_krkE`K)vpoj`~dtmy^8jAvXwRb!uG zVu7u!V2z0IAeb~7BnmwD3=OFytP$tVnw*${|J7{7d%B-&qXNESDVrd^V5F4J0-4H% zp5Lzm#4}-PTMncUUzzNAc|E*c-(=o?|9;)?RvcC7Fd1BpnVs2hBYO~@F(%!T&zz~N zN;E+zG`x}(O{+15ak*1rM%AGHDj4l~r=4mcQZ@4iB#~-1VEQzW7Qfo=4ujE|D?1|& z$GRhB$)|@ZWq*Et+Kwf??ew5}J9XXl`T4j!Fr$jXV9?c))bhWZdZzBvEqskI18Wq1 z{q-(ScbZHjA2a!6f!hue-k4H{#UO)Dl%htau`p_zzy0IK+ZD{~Trm{dE&4>-XfM}q zKmK^z?qA;lG0V#(awj7nnPReq7kClsUQRvwH&fO8?>D#UhlfYynF5=$AhB&FTjS%? z%skxx`mZ+yMm&NrcH=^h(yiW@ASpU5EXdXI=XwzQG|rR&Suef~8ex@LP9?r%DAdG*Y*wg|w_k7m-hVqT z&h~BFsmuv49?OJO#sJ!YJaWmZkB%pAMw+TGe5#2Zov0;RrFTnw#L(i=J4P}WMinCL0Qj8GH^z(J{PhQ*lCCgP z9nd1W9LcNmBggLN_bYCPgmZ%Zh^hr;AieSC!}r0|ecs@V>M>Id!xeLdYC79rZE!4h zsHR{(L=P2vMpr6{C5T9%)t>GAOJ&oX8rW z-NH`z{%}(gn8%RQw&gX~sXhw1+q)X;JR*kt!@Y8oJuE?t8oX8yMJ%YC2)4H*7r6d- zp3h(Y{)AFCLRKFEYuW&)YR&Zi^6fvr@nSbD!V@D{V=2mXpC-7mKkoAoBhZ4w{Co$5Y(RxQ^pzDvC56C_a$!UT=-m zYzLt6AXzq0Fyvt6mqI|Xt ziSqYk*Pk5^S$ZdON+bHXG8)w~dBJ!EMaFE&27ebeUSlUDwS2Rh%ttJlwZ@EKu${a2 zDMjXjb}CI7IeozA^!WPi%&x!1L>t$%Ehs$ec0pvlzQJ%9#N`cCg09%eG4j4IM?$Dd z*qkN8a=0ysjkv!DML?StoUDqXi5hvzW51Z>hH}bU->+X@u18>q5wA?ZIe?#o3u`51 z?#sU4?3&S3Ym?Jv-Y)xU<;rw(KI~|y;g`{9DQj1bXP*r_i9Hab5b&e2nLN6uy(y=D zV8c#|GHed(1dEwY zp*^4*;TW}9W-&+{Le*fOO^GlUjuvdNC?iakLPj-cn#1=ifDa`}3Aop7sZbchBY`UP z*vGE8duvGQY{cA+%SyKg?xUYOLHPNJelIG_bft5B7z&5#BO z@%42cc|paDvQ(puFI}l*%X%%Ym7kU{#BRsE)jY4to#K-ObmI>|5L$Try@^4?S=@b( z#xQUbIE1QN8-{D7JY~o=WKC91=G>J~hLg5gQ{uJgur&#D6ESjigX&VM zz~8XLF7SkGH|?Qq)Mw*)c(>b=nM}JUTC3TWKi*dyg1GpK#Wf+LbT8j@#}LqlFSV&Q z*CtY9qDJ;eWH5vb2s;uZ)M^m=c9oSGt?PQYzAO>+7#Bik8}|wGXMq z=86MG#7;q|({@JY$VQ6_BVnIRA}9(Nk2=^IGF(3YllwLjs=>YObRMN+PWVB^Em9)@ zvtlDMDWcsXj_MMV!sTMLU^L3$MJZKC$0U39^nI(~HB5lS6w?il7w>Nm$Yv7bBu1YH zURPQ0#GVKpot9S|K!|?UZQ3+1*Gz29fycDv`064lhV@vJn1vlsU`;~QBd)mv(>FVSX z^$3?_n!{})GRuS1&DuwgN<;*y^);_=&rg@@XTX!4)*_d%auwP{x^9K88tZTa+i zp8xUv4R&wpn^D=OZ!t`g87Nt+3rnHWUGV60^{b|r(_#ra-)OI&7vd;h=7#ozcJd2{ zCjsOt}=7;vlxYW?ua=v?p5%p#Ee#TD?DO zQbY}m2c>Gt>!O^JU{b*oo7FqmJ8U6G)ZtmNd|7jxERVb6Z1wzn8Vq(DG1pX)B2QS3 zIe#5pgJpj;7Di^=FTMSD8u7>9?(2uv%&T1Y$MOb$!`67q zcyYAuq>{Z+Jy$X;V;h72xZ1pIbqRaP$Q&d*i`BShmy&7HT2EI`PurlDO3K3@s!0|q zg`#RKd$PaNh#YiLgH}Aw)(VnV+@ zzFvJVawLw~Hx^HV(;}?X`FLVVH=5Oi3JucPlF-&p1E^33(S$n|y*!+7@BeYx9?x?SqzbVvFA%m_Hkd0GrsqB1$+fGkEWhs|Lw`+iF{VP1T}6KG#cHqc z9RqI~;kU|Iy>F5shO;v zRRy^I9<6DI(->W6++Z*bh$HD>2p;Yw`4oktijq64GG539x1hyIuPvO9gonSBSFagW zL(M26M#vtehc89=G2x&+faEIXB=U-6M8ky_?g3f@s<%)CN@?2bFif0_B{T`Xi97WR z)R3TU2pu8f2Gt^YsC1f4LHq!UNd{kybUK&$*I&6tRGL1zGYUbWYcxESMTdAcJH1?v z#@YgbdZC?VzwN=b`}I^SvO)MZtBBZzArql|VV^ngXL{om?vX(|(EwZWtrTBw;lD5m zK$8s(y8VM)OgtvDDwE_#+?~S804UzN0qD&A%aKrp#czW_%PIOjf>pk;3v>G|M?U2| zHzz|a3Ch*Fxe9WK+c2xf0hAdAfHTZ`d0#N7gQgGaxoUYhLL@kFHB$g78W&+MSScrd z$;DN%#LErN5bVsXz^w(L(&_c4J2PK|uX1g@W~_6W4{Djr*9;;%Un$H$vquoR@3m48 zureXHn(X%^rxRp9caNbI05^N{HN|qDfD%S3IHB7Y4v9ad$TSjAP}!f6gWXgXVlIPBP}wcy1)Kd`OsY9QLs*rsJKt&x`?3>Xwp#cS{`3ly}et zT6L=4y?lGvFNiz{Dm0CRtUDu6{GsaOLn4_Kzkn1%!%Du@Cd&yvD2a^_p(C-+{vc-z z1~}MT3NI>$3SOv%8(Sge{1sOYD2@;6i3-onzuv2r1J@gS9It(Hj}ez35E1cYFV)^i1PjZ}&3 z!>>s+1t0@!l@f&sLzjq|6!NVB03Fzw4kSj$q!}hnE6n`t!PnR@! zY$S%Kg1KuEXikVIDfw_SOjFpxWgj354gg^|Y#E?@`{p z&UdK#CPs6^9Mm>G;31!#aD8Y~z?ddqPJ?LSI^{$e_a`AfV%R1uG)~ZCD98+9=2 z{XgU~Rof*2$_m5Y?Cs?`(?_jF?apDtRLP-%qCM#(R8lU&%j@MlAEJx`Sg@!QcR8Az zK9%nn+XQHq9 zCrp5TsjDiUU~Ay~C)f1TtEK3I)#mRIoxwyriaFyqnK zG*s8DNbw^aM7j;-6-gnp>bw#X>x>|^Q4w&QxC0sCEcsJ*HTw(6b}~m;@qlJLF(b)d ziGG2D!|eKY9x?&zFdpZlYaSK{_b^nFhi4pk%ud*sIi0aoHwXmujMI&<0G(ewpDfbV zV;EGj#Y)!D!;7-kh|5RnJZK`F*q#*5`mc2lhhdUqPWqQeiIUvu!RE+kWM}kmSoI^a zYWJCRv_@w+5?5i&Ls7gfokT$P=awA?|nTMiW*bC zP-lwXUYt0WnXj<|v-L3<$sX=*@6tGLa&(PfJT$2a`$K3&ISZT7veZ#v_V`u-5=bf3 zI%cuVIXFTyHzdY$B4S;_(g9u2|On&-dalGf@EAtZW6<4fFA0h2|0l`X|gjSMvpL9<6>TL{;+A` zG9)3$k8U~CJB>K0wdvw$4aqbb-^Bg{QG~dq=3=UWOzIp#LV6tHYsHg7qUBc;&W6Ji z3~WB;ZG{!33&nKrZ`P*AdQ9nFDD7ZvL5FfQT&ELm6-!?E=E?2`3zkGnM_wa^IASlY zrcj<@m6uH}m&kIQO(Vm(0m4iK=T@Vnh=kJh;Sj0j2xC`r58;K*lvpJ4V4)%w9SZQOe7veD+C=v=ejj4 z*_>X_Jc5jGDSG(JMHECAWw?gX#NP8RQ{}^wW`QW4PKVQ5VN1Yh7SY2k4kYF;;j-0ME+iTV2kz399DcC6~u?EdTrCzWRTShIjRw zQ(^H8v;2K~SyVZyk9zVe4F!AsN*4ruKkRc4LeESuUka0VlG)0FTS20+NZc3aBKE?N zNolndi2kyyO13@yy;uLo_sJq#e?1NhQa{xPEEu_%uMQuOnV< zy{M~h&{c$fz5H=-wrppVLdk5io=c_D&Cz{HN=8~*LG&|NEg& zg??XO|Kq=rhc@l*T&>HLEn7p>1MB?q^@}Lo9C=~uwn90uZipu*fvLUrX8W+#+_eM~ zG)G^OvRUVPjviM>3@7u-?a#OW_(?|;I*tfz2Ss$-jeHOV()k-PMPGjT=YLBS9v&*i zEN*z`c)f0-}Jc{u#E=d)IOO|2ca63fo8f?02vYx426 z$RCX(AJf!y^&!=&ByTdU+GD+y(RfL&GfbzbACJU$pI_OwO8&ji%fdqcE;m$w3bIR zTt6Aa_7AvnShxB`vBGk^I8E0_>fFm4=7u5-RmK&+=sCv4UxPvMb)k2{%kBG+%q>hK zR_nKKr^O4Z=jKBq4{su{;rDF_4~E5n*H~VRhqd-{+MNsWsbQ@RGZp@ngqFDG`NVGt zHd!pXI=TCDHTmV&FG`wpUdKz)#98;pfr{-_p5hA<^WLoW&p&_uZ~$J03nnZzJmGda zH82Dycwc`%Dg<|UC9!O6h2Ca*1T;V zC5I(P++Wi_PS&rY*;AeD?Vtbcrce+_5U*%&V1utQcFAD*w0-rrs5NWnF^MoeKRUGg=;BjQw?c7{30 zd@7YnWbWn3RvxlNzJt~&kN+O#x-LEp-%1r$<5*R~aqE?S?jDqu&$uD+l_!`5AA5}- zCXh$8ogCkMve!S%p;w3ogrS1kSUycIhs*b$e<7s2K5a3dtnzaRfAuF!`^FN~kC zSmJE@XP9ROL0frz!i0AkGXz?)G#O5D*+Ckxby|m|$yXPPdpf`F5DN$&FpQ~C4FJypMK4xbBT=4eV3JWVnBp=z1Xx#>10ao zh@bJH4XU=PE719f!I6xd6HT--Vt0DGE-vpso@rN~UY=M-`xgK+dvo6*!`r%G8FPa5qwxLq7geR_+Mx`Ww8X##pMc@rqnXB=I$T`^9XPER}9cV@I8cPRZN45h|wP=F4op1xusfGtV`BZjba zlfjvQ-gwY;fk@+{6V1isZ(-1Vf^0HN;nDj%IS0ZEikHd_1A8!b<+Cd)Ap}EA!h=hwfkDzn+=h}5 zd)w%W%`~hTC)^1`=ILGQU*ipOS*2j%>4d73(;exxjn2#^@ENEC8XU7)HRn?pU!V(e zm}UKT`u-n(|C1PUxiPtzGt)LaCXd(fFOOoxu*f{bK;u^4yZS;;HWK-#c_l!K%Z@H)TwSa#b;aC?oJh%eyKTLc+H5M0{_x!$o4~gVsQeV zFht=;t|bVg8uNaBWYW5QH-(P}qJnW@M73h=gXiV@ z^Y!}t{*I&08UcyJdqXg{)b$}C+nE4f}XZ*Pkbty zR398$6+~E?u4$`EFb=*~o=N;?y{_L7;Jxu|4Ua8O=y1?WQP=F!fQk{M(U~k(_=e*W zF-ya45Q#SHs>C-BOCFe%uc*F(C3XA&RA)AC`ZklJg`;1X7F)w05x^LP6?uJDnI%YT zP0tZWDzPU5zsBDiLiY4OzyZ|2U34{?w{ESNU}f@{#6pU#5$;0)feKROtOh@H_9X6; z43m*VCBBHAozBlY5|d?2QQZZmCkWq);#m9K(T3d#FL@XQ77KSnhLMmB0xw*a6p2^8 zSO}|M<4yib;d99X(b5-lsOAZWxSK<^yf z@W_~pSd(DoIQ-%OF|VaEFrP9cHK363 zORLQO)4(4pz_}5TM6+D0$N^sWfMBTVK;38@!#OS}JqiyaIrAI6CVrz+%d?}`Udp~X zeEa)P4i`(_pV;3Z6}Qm9X9(v_ohB(k%!oNvg>ag3(OC}DVR-DS3u7t@7jHHkFeB2) z^zSHtf5`m}Ll0OQ-v zj-a*#Ut!6DW50W)dL(N^mBWsPR4q*C5x(m&78N_i&OQ2VN3a9d00>+pmj>7z+-p8SruEM5P2p-Q) zy8fBR5P?yfcOiuM3#k z96o=R&KAyaQZBgbc&H9)&BG>X zjyv=5?d|Mr)=Wc!U00!&ZQ(*(xHwQ4xA@%fa(U2!6w=Pj3C#z#cL#Bt{>NT)aZ*~Z zcUr1RuaPzIg4;!9XadO-*=Y^`VJL?-umzjA(73WI0OUf$sj(344TrF@9`>)+0uEFYm8sKX__wPEUKAhZsR#NX(r2B=NOYYz=|FihfpJwyIq% znxU#~U!OpB zlX_n1s=}BJYsK)u#VU8gk|VT7=yQ%JhjReoW)3BySaB^()=V9Gg|-ZVY(4z$W)RP) zrMTbw39cI#Gog?c&NdI>hiNziD?OtKkInb@qYM&9Qkzagae=AP>bj z3wYKcSW#q*yP5lZG4*(#?iiy@+Lgz2;pTy3ylNxT$BLl0uIMKtPbq5Q$-9b_4j_7G z@%p@ObB^UFQtdy#l0idZ(|4kqWu%0%rVh_`nSjs`2tnI!dQ%!poH54*y(QEc)l9ND zy1vW=WMHX1685=(ohd_Gqw4<^u}&~pLDAt*%*Ta;=e!p|gB5tD!ljAp5UN8=2Ed3S z51_m6P-*Y*6J-QgnS|WFGQ%E{0zoOwxr9l3$cibnwTSpBSv_1qpdvyhCPFSJJ+567 zf)0ZT<9>#1G455D_QdibMOE?%tnq@NI+ig*Vx&LdE!R$`+er;72cs?nj? z?lWa*_cr@UTLXl$+uXk#!_|%1brBeghi1ZBNy<1K7ERYxk;d(7q8>RCZa&1m@cO}N zgBvBwZVPLT#dsPTcw@-a#Pt|2(f!z z!KqosALB4-?q#!(3nSIZaWf7=x6wB9pG8a2 zG>Ma{%GZd8TCHN#BDTU+ME-0XVlMN?6GV5=Lnx6KC*?t(pC|;J33JOb4r1<7zR#P69X(C?%W!f$Q2O_U8pT$nU zhHC@}SYk)#AR8m!32vBWc_XSA!PhN>&JD&vk!W->kMy1)Yj#dS2+c-hr@&(1bEW0! zvT?jSkeb162qML}B89Lsb_WCTvIJu4X#7W9S|ilU&+kY0f4!LUiW~_1{?jFERwZoh z5d=#O$NU&g(PmXvA<^c36Xus46p`?jOFyK0+g+%%9m07><-9{v+NtJyCRf;%e$LX+ zgh@+`Y*p9W-dN(M0d%|EgCVY%fjHv~+=0+!-DSQ=t%i`Z!Keo9b5wn1!L~3^Bqyz| z!-yH1oYd5iMgxN(%MSwTe%Jk|%W4&MUv5$xx<|n$Pub{PmdoJuyzXW*a8J~C={0rx zY;PT(BVxN*4^O(OGf+`n*R>6*x|c+j+$4E}>%>@Qr}jb!p2#;4Lt4ue zFq-6Xx;QZ+L;-XDRM%6Wj}CzK%hbHnv2Dl!^my7K;##+S+6kRVRi~-M8T9K)yl0c2- z{w?=RMj5#X0qp^kIl}ld9Lkox$e*KdWA0CxPY%H7EYALBUq)Q9F+UzBTp|Q@HKkxe zmL@V_G6m6qVWA}ItS)Ot4{2!UI=gI#qK7qySg*&vq!FW;!b~JG4dlL~7LEW&nTB!A zNa*B&P7SQ~R-p(U3mZ;WHeP8dYtR=+&|#0qf(L}rF}%F4aP1Wea@z4%!0o3sJD?ef zzDmg|^NF+fS$R2C$#(}qLr4i^vfM|_M=0_#4>=THM6BHw*2!k8kRI+&3=H_7<3-@5 zJ1$7@I1r9FA7c=W_vbmowt_elyH&Ch!8OM)Z52ijI}&!_$ONMaJ00>gH6;bMYE=vb z)pEO_w#`*-1&1fHi!ah#uKSqLv@B&K{5S_9D=?C$VU*;b2}Q*HJU#YHI_?3Z2dityK1zF5 zt_}J%ZV%}C&Y@63v-jv9U+CuK!8Nfohpolav1^$tMZh7b$}`qgny}6w-T>zrqavea zr9xCHa--6{ zxhX9;jIMZN1k0hz^cJu=f>70imlyQAPd79Dtp^$2;|%7u=Uu;4#p;)2e;%_MPcQ6mHXcv8@re2O^J4)O&R71a|u7 z3K&5)d&ENoz=o_edj9*zh(ko__Ltm z;2|Bv3tiuL{luL;St!5a4Q_h*^rN0`dPa|%jq`|$LWP1Q!%@Je)mni*2|l8>SP*WH z7R|d97bdY0TjZ9)U~@g4UjO)5l#_`>>h__#L=kb)=(b6GI|UX_3L0Jvb^@kJyR*2Q zFmP6bGHMex^YWYp z_%RyTcAdMMltpehmQlEYdcuYQVGDo|@33nOjbxQuoxIef&%qlx6K@vgcs5Ga!o3 z97;VCKd{i=ppZi+m73I6JB%AuHOm=;BiP;%PY_o`^(V1IWn&>@$Uhy2bVnuxE>Uxv z7~q&8O!tEvZE@=6_nfH#t%;0Hcp|AB-dQ8@z!xSZtsKaYODxR z)yV=U(%Fi;jzKK$qankn*h9Hq z){IX-e_Zy*^Q=Z|%-Orqt(#=JMzP;mgE(TlY=6`bInD+P=`_)Lo(Ndpi|)=>I6@qI*k0Flr%iMvYY;gg6SJnSDBDYSEij#L^j8CR6xAYplO>I{IoI|J&eqMM0AtB*EarkaXSIPW-TWl#j zn3bB6=+31a3p6X_`KIuYQfFJ=)b|Ld>w&A107^I|<1Mlof%1uTJ*XfGUL^GR%2Kmo zG2(B%aiz1$KWu3?XHIv4;_=OFdz)K?UL1zYv$PC`%nd!VCqv=3n{wBXkBhyC1dP`0 z(pa3#9yoG@s6oT1Mht^k>>zFtY|e3UEiB{)HfPxfQ}z3dbeEzT6N4c()32u;9I{;# zEp4YN1qa;P28*5jv*(ChqTU)$PcJVUng?0Plz@h`lZ9h+asBb_H4Lfelmfzy%#XFW zEZhuwRmgTHoavuBl_JpuzC7Wd`F#jk`Pq1k{14Ox(w-ZQ^h16a9*Jub zb9N-eDmnOj)3jF*9ua{#7EdHEl_9?qPL2s7oB_<$9E^yTMJQLf^$ERXCh&%+rLC4|6gC z@UV~V0>N~i1J+lbdL6jh?v~1vtK5bS#|1D{w8Nn}4C6G?lV@fVm$x?~Ls&I(T{v2! zU7`uDT-0P4yl+&Et}}R2(|O2I+)<$ICyr8OVu`ht-oSK2>4<}>Yxoi9&3(O>$o~-V zM&4M%mJE`+55+$T_1ct%Rf3`OLdiV_S&q8SC|lHA5ivJ#4`;J>3|)>*_4CPt>hqaO zQ^WAU!=-0Yb-HXP207YrjF_B*&=`9fcVjIJ1*g_-YC!Zjbe~wmwZi>xsgitRL`XA0 zy#JH3o@Gyis72IZj}PCL84^XvkZ?u-IEYSeXJo}jj12<|!W`o(!yH3He1u_ty(jS{ z+A=2O^eh6)D7b0L0iAarM%CQp1+JO!2r)+js8x0vipYvL0pw;}q=__-8)Nu}-Hn@* z|69K)h^baYBeamzel+K0K)F-Z%h?#QK0m);5H3em7q8&iYH%b#RW{DbOn+i-6w+VR zam-RcsrS_Fv14>UhF&8i0-V-;43=oPnZ^)dA{!k4fpRb6Y+*&bFu6-bHWlWb`J33f zF5uV~^fk;IR)#Ih6`$;taO`Nk%%b@S@b%8f9+XhbJD9ap+;l6$cmmpt zAP4To_q_C~ZCE@xJ|WlaL^ za`|NH{{A+REvx+9aUMJNc#ze!skjUp7nSNkI>yc?@VRtGVte3c@)|ZW4TCywk1Fb?`*Ux1wSE=shJU39|=0f zzTURNFbqiNLB|cc0d8?*My>eM`Ie3f!~iMx6|M{T4k#wj9R&+30zG2L>l-bgKJdtO zHDB+pXO0UT>wP8TX(`k6UM?eV($O4P7fx@xf`ybxC-evi1641ZIoZlza`d2ah(iwj ziduotInMZC&gdK6{Bmb4F63A5#D#`1fHo8=GfRNu5D#F6 zr4l8|1-^vud;&g6xVGy7{&@;clmo2C$Lg~ zs859D8RyXcJ=y2uHRlTbad`3ro*Pc;_MR z{{DJ=K5zR-2tj3{z))(GO*QD~%+*@Hq9b}U%(n*N!k>+ zZdJr*J#+gt#gtv2JDZ>JUL#YiT8q=qkGZ+NHGD&Y!?x#n z;D}JG8H3DaAk#}tS6)sfPya1|yO2}^E5mA*FWzWG0>aiLi>q?ISp#R>&|IyD|rWjvF_+<4igfWFTyAjGl`8Y>b6Lmr=Dx z3o@T$$T18?7?IwS$F83+XKb`)hqo8vD{6IQQ&cg}m|NBB({p%GqHnvKhw#$(xz4J&tZ+E9J?AuNoYjAewz>vjW2BZV^k~^2W?+5V4VyWf zGs(~b{-S_7ACSmb>+`q&{IAzxb8ISedRi@cw&@sW%y;FA0pd2LTlyd}?pm|sv zHU<5iORY`1qql}Wi}RK@j^jkfqTL#7&}LAlkdiQ-hTPvLeZEX39*dk~7FMDA^~~iR za_j}cb~;9~$OJMB!e*Mvj-2ymF;zc?l z{UBs$nXnceb}DBfp;nW@o^mOkd4P-fMe z^D2PYR%?m`VHMWuXz24s245X$`PL0|}abIAs44vjnT&-pzS`-f#wDg?L2Uk*ECfl?8bY;LAK ziY_1$Fbu7FOOm5ZstV3(K>R8yRK^Ph-*!g8CG*My+M522y`?=C zKvc|YEOviSB?`yOo5L7!g+V(`4S`|bpfTL=iT_2Yfaa+9KG{n>ZjDGzNU^N%v=Z2% z`8)~EB>CGzoyak$s-^;(b#^0IlZ6&-4t~8s>H*hGDXj0lT$YY+?I#P%h>_KosSu}| zWB1FyCrJhR$};8*XJ9pla{=SLfEE%4E1hKs#Uukb%TZ^oG?+w1D7|rUQ8}*JC0La! zljaMpA9aAwpIBc52L}zMlk~?{RUhnG>^A4)M!69lMMhicNB=GQX{E$;U{c6-m+N{) z*%;bDhB-vze7RV^1^3ixFRwT3w0Q-{#Mn*RMIc)+?0jK_thPSVC{LK=V#+wsq|hV_ z_G7XUt(tL^8Dy89P}@Qj4&G*epdN|LE!7>a6=Y>zdth=lG|oOO;Uj8Hg&Ajj@ZC9kf$752c3g5A=qmZc4c3Qfc;0+Qz^SOJkzs?0CnCW^QY)k)Z)9S+K~$)dwg-Kb8Z>*&Qv2wQC*-^d$g zp|1uWwK-G{!pxbr2In_NJEOv58(tZ)?(>d@2-;-b{;0CSg?8E^?2MSTVOhhj%_u?_ z^65dlJ&bbjIRK|LjDQKao?o6;Wg!hCINb_2#bvWvU$%2JE~U+8p;Q;qQfmls$ zk4t(S1fH-&VByek6+3KrA!7>@fK`EcAV`1P(n4)CEQ&Z8<+>{g(bYfZ=s$*;i4D*f z>Bfzi31@g)Vj94xhJuCg1XTV^2?L=~kVR@GCM&p~1X82Q>VLNq%LlxU@u$hK?%7C= zi8s=tWy!M?^kL4$vD*sU5#f5U!Al722=fjvmy^U!=?{sEcq&Xu)nWw8lN6n2Jdu!n zLU!Z2DCr=EJ>ty;w%#UWslJph-X6t86qJm%7=Ed$1SMV27xggFf~h?*XN_(uqPG#? zjApESL&V@nk5L@i=!Nn^{m|!+V2F>4Mi0zcqZ_xec3JE1wu329<1lWwY2t^68?fLr z=#wBZ6lbJ9hym&zTjU_s)}<2eQJ3C4QSxo{|s+ z#oqcf=i?O5j6hwE$^+j5zzq8!7dT#+)>z=dWK*vD`5Hk?dUKONRQxeua!7W=!X?JB zKn+XG4MvRY;$zteMT|(Gq3s-&E)$4KL^^rP&T9xcNHoMI;R$ag>iuAsT*Fmkkn|YT z1Z_O1@bRnwg`Srm$6O*9sObFgng})Ev+mPb?-5fC_2Lfh_%lCu5eTL*Japtx3&=-T zu16;cq)?TF6@P%?F{?5saqf^!J4`Cj0SgkasnwkOEFQVv=+p^niD5Jt87rQNHy(#= zWP*wVrq#ou1;4q|!lF>Mg$ffC0;7Emx5ed~^oNzl$>gcKc&eNZ$YY7&^q+paVCoOv zO0SF2e%}1A_Y-E=wB(*HWgpX|ZjAz^;h=r|F|HmKhadgk>%P4YiPEf6-!`}w7aj`z z{J-T2%)iu5qz1jGkHydT{r5xf)SUhGijnJ6X|M{vWIEgaza|>LKO`FhFcLkD(*S!< zH9&$vrm#M=lvLNJ)8()0UKj=cDm`8=m5}lDNCuftvwHc)OGnU- z^_F}Tz)Y(Ih%q2GT zddU$Zv3ZYG#vHBX8sj2&S#gx7^&OD<<~ibeGGS3fjDUVxHSk7et+t>699efW13AfH z<~pd1yWZ%!HyKtB9U$t@L0d7Y&@^>nY$C9F81huiGDfSsr0=t-WUBb^YbNpa?(VT@ zG>E^$*{?&nHJ@MLR`C62W6ufixz%pIy}U|&Jnzqp$lsr)M`uERx@?QDbQe3-26YG! zjb5{vCYEf_q-rl9Ym21JiZV{o=uruJQ1@N48B z{_w}A=biuL>@a|oK%#n3QupUZntZf3Vo*)PJR=8o;O;ypv`1_$MMTz9S?@$Q%%Tug zn+G-*IaYi|zo5cGMyCrJA)bkBIh6Mqac#iY;QE$$i%ndw%l#}&9KFAzEYIh|<@oY) z+({bVS~x;D7^-39ZcTmp_Yd&0QME{WtL2C+tmOERut6v$#ZG7Ndi}5aM6&WJQLNW; zq%n=O&<$bn@(k&qm!r*TZD4smM<$FU-6`=nuh=5iTI5sQKMzX1UJc_8_rSIrk|QpqxP zmn$h=M9qR4cK{>`>!mG8GO3ugpF$^Zv;b*1hV9-SP7%>+#FxfN@z_O+VV06 z4zQ+8KbEsa7o5(yYhKgnSV{Pr9#I*vjFVES6nQcLaVOLm z6l;vgf?c3~ChP?ram6w@$|o~vMos>ywN)$Qh;VwWC@s*#{J6#JXvE>wK<+jh^6n00wNu2@*ZIG;chbSlVWK*Oew+yWubKP^;?Fd8jz4zSz0QZm?4=T z1n^^YpUI2bDf=XfViAPo35Mrp4a@>TXHl&~v&8+FS&)1=M8zgEs0rWxXmD7{L}5AT zs^_3)z*R5SEE#L*sMUq*U#@yp3tv^nJ0cp;x-!lO2_2;h$@h{u7L$uAEf&IzSL;ea z3svh`^v$U5RMD}(q0d3QbVM^f(1gJw{aeAskp{2bzKlO;N3nuJYgIG^Z&^LJ0jC@+ zv5*+(h47nwSo=n~>Mts_;4mue0BP;dfif6`9eo`2FP&zDi&#$~mYhmoqYq;U2;?>OnIg6WhouHsI9YtIZ6aJ_nSBYPhft=%`2oYas0lPAA@w z56{+VOBeI4hcA3Q?9+BvNhQb(+|10(3_%H!s;ldC zn}@Ib>;25FY;_4TGUD6cT5GNeFQ^;LX4Q7Ru;+?OQ0Uch3z}$J_zkOx$l!A3ZFMtpiW+CFgz0=e!K zQ73lfjeRXLYK2#;z_U?A6>IIQ{at~sN{RpCJcE#{iri#gmUksL*H?RFJ^GMnQk_wk8ZoVaR62b26Y*k#0 zwxjTl6K%s7C8Mrq5MSn$`~3d2gB1n4pd+lu+qV^MdJ7jHMBIrV=m2Sf zYeQfw*r>{6RckaNybt&c3+35RVmx*{p|uvOtdnyT(N?^;eL^U89m{~-X;Z|86>L0t zV8Q*LR$|~K1e372`*XtXfC^2%vTp;q^h20J4<{o24SUYx%!M?uBfXwxCylv@&xAzm z3vaOsXM$f-osF<|Y^&n7povm7IG&Pyb$__e$qwTRKyCNO(hZi19jvlRoy?P@26L%3 zEDW9lr#aRLFYlM5Ll@`Qst-Y7`-297UQgq8q0KZav$*8!WLIUBN>Gi_A(_^7^BH}L z>#P)*A+P(z_7gqs<*-RaV|~^~W0Hey-r{1V{ICfHS#887mDHI^r07=liuoc07b&c770uVkur>Is`3XhBjyQ~Pn zAvAmTS*1qA%t&iZ1dJsE=oM-CY;DOB?02VAL7aer4QWU^pIyGcUQFu_=T{y;*soIQD5BfJ zvOz#AMFCjIKYcdp&19i$Lpxf?aIT3UvDl@nN2S{|Jm$hIEf8s==`2<{3ju7C-{`Sv zUsqEP99V&d(}jZR3Hp_!2^3F#8j}Izs|`5m+*mX)WUf7f)le_SvWR@%LN(2#sMTj4 zI7g!|DO5x_nm0bauTUm#NnB_LYqfEVjl0%|@YBh8k)45KCKHRy4OA071UTX_4s=3{ zTwFIcm+VfX;2;@y3U_;Rc!+E&bz+?`rxOs(Sbc{KBr$@DhycPKX_c0rZw;LoQx=zl+*9oi0)zM#7e17P+XChYc1(DR z3re2JYYL~&tTC)8K;!~4(Ux31Zwt?z*5m*`O zUGj0yBH4-?FBU26l`#;yf2FCt0sxb?d}6 z4R1^^b&GgmO3{6562+)npxmMMg!UasF%pCT{v?+#69#UJ6=& zvA1G~0rDfQlNiBfvd$4fyHZUlu`+?fs5Dre)#PH*XcZ_$1fQc)ca>HV+L6P?E2Ss* zyHGd4gz`Ey1e7c!B?P z@ZQ!P^eh-ev6-+z=(%LeISxAZL5Fak|K8m$r%ErLh!ap4yMI*C0iU6*NMKNWoNFN% z#l(%RyUJDxw;OaW@cUkIyG^>a>iXrV0yX1JX@^NH);o^waE%-Okjq|_oz~uVFaw#k zou+c){wbM$3S}>p+d_X>A<3`aaoQV!VxGbqEp}jpWSqSP&<^kpPLpEyVYg~2PMhg$ z2`NX{q41c>B=0#?aEo|KsIVKQp4Q)Jv_=Kj^@hlywL@oYK85IGW<~DNXw;BeF(>w7 zy0S$yLU6k2-5`h=B4(1s6nuy_kN9Y$4Sg%}Z5Ru{61nxa7vq|}ZmF?Q-QAf=nlzMC zc?Oq2bATa2L=iGvd&ZS0CFc>kJY3H_WVb<15FVq*7gCu=^u}&rldwmUrm4?~=LmPj zNm<3x9=7Q+1eQ6T-Vk##XYI7vXgZO=Gl;xu_mXaLJr2hhW*I}>@K$>)(m!LrM`1E< zd^H$QM09gNED3S14(>9aBTzFNf@;X&>akm97tU2B^&rlFHPg-2nWVrdKI?DiIiopS z`9LqMMyu{LSa0z^9w+i3-;m$gem-5v+12dCsbvK9dR8|WO20;mmBD|Ha@B`B>4-0P0h$uZ)W)t8JxIV;TdbIGKAQ<;s_FJ!=X33$Tz>ASyCtdT z)&$^$sJ96N_<;9^gy4AISu_^SvH4kL$h}InAKRu(;e}2>b!e74$@K= z{L{d2H`oy=qO+`bx!v~Gy?JdWn=iDpN=E51avq1KNmg|Uid)Ur2q3m928(`jeb?Jj zQ68_AUcFIsR)7E+6xbJOxcAGP;F(%_hh_yTz)|U#+197q+OE0nK`!YMj2C1`Fap=& zU)TT)_QbgirlHpDuVa2brJJ{_9io6A1!y-#{8J?Reez!msn6u znkx&sXwoxUn96V4jE*PeK^2`jaSQ{CbwqAbzxQS)#o~O3$!ZUQv^Vy;Dy|Mw; zoOh=C+@8c`ueIoQmiYxF6dp-|fK8$NG)OkOsYz~c9B=GY-)7h2{Iu08?dwkKu)ZR* zJFL0pDx*|)P-x^v+0d)3O-hSm4>zTsqmtC9EXsKVwce$6Z5&4P(|A9^Wt<&kldkvi zLI@vLd7F;ArER6Qr06|d_sZ+ivaqX<2%gYJ%qYw=lM<8ELx#^x&!ApKVdS>&E{F+} zYVeYJwNYYVYnKxkT=j$|S>72b6}!n+x|eCv3@f^+OO-{fw^+4LN>k@ z4{V%3To0pTWe#02sg2RfONKcE@1xKv_p6mQ;!!u#D0WK?D*J=3EXLqWi(;0Eyu9Ebw$K6xsZM%EYoh; zWC&i((;{CU(*F|#T>HK{OEu=$Pi8I0_f9LA48ylmzq`F&ujqyJoO_GQ>ar?LAAidK zQ zo+?lnt+kSO`F=}k-(7jzy7aSfUO#{N&o7%!b^dZitq$2j1GO-mN2v;tNJ$WsX!1Ep zzY?DuLy(TwYWwlWS8je>XZSZ(o|_!&@*OUc4QB;8OSZ z+}e!od?u6Cn9~-Lir97ePyBJxUU2-w&D92m*T`iC;y{Yp+6>8FyqT*zRI0QH8z4jgw)iPCFi z5_hV1H9T&NQY$A}))ms7T<}T3OXGRX9hpYFqWCG+?>qmzn8SuC==!n`f#RC(~E z^W$&7{q`b3qUUMu3)H9Bj9H}jh{lg*6X-E>HRnW4RuG$K=hx$n@f~*auH%9&pu9+S@x$xylr z;{+9v&0fep{Pfo!K0iMvTgdCv{gq`oZgxjEew2^o?wQg^t+fHiU7la9E}+hc&PXXl zoR*uz^|#;Nj&HwRcI)q7zs#EQq+-V8QD_ZV`tA~b%&;`|u;(get->+#)9vz<8biaKvYZJ0gH zZ4~AH^7WtpMiVV+_TwM_{QLLs$4zhW_Wj$sZL=3z`^zOJIYcc&15_%JLtvxtm3|_@ zUFaFYoK@$F=C&l}^XWntX=j zkPM6^HR@qjxwjL+XO^)+z=At*$$otKn4$k6lMDz-tteRRUaT23THd#))*dW3ty@-gyfMPKECu?nLluA7CwCT< zWadtJ_HF#J4?9+$RTnh#40NP04b1#OF%^%1UzkP#&=^*; zb#n<)b||F=udly-qb!P7>(jx{1sk315A1`Hi>0dP5|)#Sfbp1-5zzgx7-CCi>Pl2i zSGqV+ky0wO<4WnzpYKxwxhPDZtH-9TTcU$Or$rRg_ZyBjNJOGB6gn*Ft)z+8RQdK{rK$-nS#pR7ZGPQrDqi}bHMkkRn2Wi&K4UF|L>7Z_#QkqQ@sRa4MKs-p5#-x- zN~KxNOHM1gsiZVn953P7xM&UFs4ZYXB|^bzCax()F>hx4p{Rt`>->eV5!!)sHA5_> zQs(5t6{d(zW_YI5lTZAnVDVzer3wb7Pyyugx}MGAryo8&YuOn5bcW0AVL#&!n)cNV zl^2`T&G{lgtZoxSCF=91PtO&%n~~*oePs4&h`2fIjs^nF78)KB6W%`7oLhi=BcX|) zD%t|NRG|=Iek62+!4(lV7uAaT5p0O=qd8+aFb5iclDWB}2*E0iBv7|c0as^Q{p;QQ zPkR8ULI^HI4k8?;zsI-J!t=JE?U~~lzM73nH-c`#(iI(~h-SmoDBOW{HU;KCHGY;$ ztpu5~pLRT7PXl{F4igA_Z7+QmbB#8~niZ)RYWA9BB44O^3T2Bi8(5aFr9A0WvXCI8 zMrS-$cFQ(eW3&%LlTCrtQJ)~`I| z(Hk_EI3V(CK&L@kDZ=WGiudB`IE1$KbYo0w+Tq@k+Yrffkm16bBTh?-S0xVsT?v7} zcIbsBFQ%-E%*w=i6w}WSDPrVhZPfM4`9ByvmCoxm``Su_1DQ^^O?1a} zUx>S8vK9GXI({tFxh9(VEXAZ=_4)2oI@XtXvaHoLC5t2#B)H24No3yMY>Q6F02_y} zdd5TrvMFT0qh+)jlxQjiC(-b-#hrcbzZ!RiQbXzUFMs`8vaHZGo!B3*m%Z(ieSQW6 z1j><&HYtL=zZ*WR_w#1@mrpwa~*o;L$-@SjmyLe-vG zJw6w12E~%iep0&s^`{?`d~TVMg-Z^8mZ^BBxZo( ztAiYpKWh6<4c-yzS!UDiEq6!kgbvk&^_qy8tiBq#9(j=E_T~NKvg(!Ye!Wi+-MQ)C zZ6GdzOD0q=M)jx9Km2f?7Vr$b$HVj2?{5e~%6bQubUz)w2K5%D2BG+m;}}Wj{xMzd zL9#1a#?H@;;Sc)Wq5A7=;wb3|>y(e!zk~pkWOif>-Cax9f_CAlV=gv8d(n_BB==iL*E{ER{arJ&C?jYKkfQ)0+&x zmd&Cc(A-I&wE3~%IeOdcW2cdP1SEqFo>Q=z%&%|nmqn}fhq+4u6($ANY*-gy0c<8s~ftKMbiwgSzM z5}E7yJ#?uXdxlo2Cj*Q;Xwp*wIPBx!>!hZ&rpp>xLU*Eo6 zsL!~$RMPkNzdV%~>cO*)(bmN!G&_J7b9=)pbWx8oj!CX zDzo-dA#wNP{e9X5w^IwnTdaclq*m&pd53IQtuO@4pRJ%|BrhYtdeK75!u3P*WU4+! z4gFJEh+M5|ROtxXto1?bsHL4^rei*0s&F9tZJYK8p)r$-QE|{!F}4D*qKqizj0GN4 zXE9?la~-iopUZ`(9MII^t=7WW&v-;+y;;%rB^;VyZj&BW4NRN;8rcu)MM+XioPE)saGE6IehdfRp3fk@}P20i`xj16AW;8G`%`aVF$=c+~h7lwbfN%!R_0 zMB5jd#E6+oY{1K6cq)kaGt5j3xV$b9M%P8KQDi?xq_nXDo2(kA)(C@K51McR#=_>>oi3z0d zVoMsFF%k*6eS;#COR5i=ao|p>K_6{AUejnqU6SU7sAmCk`>VfaF>=W2&&64lqDC5(JVLic;vrybeJ~6JFpv4NZ_SyEt@P zj2`tjoO@Y{YaAUw?_M$rg=$J23N$ejWCNFTLnTSCxC}?KN}?`Fd;dw_oqG#=L+aepX3HgHhv4u zr!ZEe&>mzC83^I?Ne~uAm$thTbq>e)C^^bVlJDZ8IS6&s5E#D zO8_UtywpJ%j7hWtviUh|KG-H06Tq9Ae+OyCEK%%+dlQtUNAe;5WzAt2xxkjYy~&N<5Qgr_TO`6{^)*6;MTHG^i~^VkQjF{# z9Zfp`v_tfD%5@50kfOU8#xnCc(FDOG2J#;C24j}n3INfihY|5gEMpuJ{Cvmab9mC#&I9S+RI$D8VSJ~OXV2lAQ7V08Wy4w6V z!P!cCLvl#Nk(j724$Bn-*T8gC_3EIX9R|D9fDs~CcU<^lRY$fnzAaR5oQq95n*{$~djg4wQ%sP6cnrIyn)sKk>?DR-Vqj8Xb zA+ak-0$kFFa7{RlVuE-%oe^6X>H4*?P43&Cy2L)Fb;@YoS6-(fU92REY37RVYk7YF zn?_?;4aRCjrdq4XL8###Kz7kNFrge)XEpN%=m;ECdwbRxbyqdM@2&i-BCi`4*`zcQ zodWfNezsS%)L`B7{;q3`3bG0GN6j3o>9RX>v|~d6;zIbXlfafKR0Ob5XWp2Z?+u2v zX@iERve2|9A1&0*s5T*lJX~;iujdgv8zx%4(ugzy^qhdsv0@YyodLqhqEAcT%ajjJ zAR@t1I(odcZPv;Oy;778@!hUja2Pp_{W$=6P|;i^i6WJ)YEL34lopLcXD0)x_X|+U zbsG6Il!aBN%ZqA9qj`k0he=f{_DlF9$R~|{dXgJeR-wydDAs|&s7{skEm$1duH|84 zB-NU<5Z^|*vjH;$`*Qou)$z!$pE5) zV_0tvSG~iszH6NpY&Bswn^?}J+0(`#b+&9AnJZLBRoh`ODzh?~G{&VqtC4d2*-EBb z=%yO|LZ?6#W;Uy~rq$)$GIJ3AG~~H|mcNrOkterXd*7ql;PbsT7d@f`h_s#KxW3OG z>iz5#d%4ytjT^)u52d4Yw?{?1)X8;|Nrgc)FkGkA#x%3)2XTFt4wv3RX_jA7PwSh6 zKaGmJVg*PoHOs6&@AKQV#Jbbk*R~A~nWRm&Ci=%xoFqyoWZ~x36&=FEhlakk9A{rp4jR6RBa=fS!*Ta>O@>Gh(j z$fVAiYwEVLdsD@6!bwNoQ5*ERyfm7JQKMI#+d}0*C)`=OoVV(`c65}7^D`xhrg@YY zS*HG&X_sVMg%S`)y(=M{tqSkmwHaOYrFE&VjV&-|d_M6|3$N7XX=L^cVdwraM3ygc zY$+F?iy7bzdKi^aL4KS2L)!i{zx>;LeHk!z8Fv%C>8Jm?fk|pF?`I7n{h99?y|r1p zG^6@tmfo#S*7a*6znqN7&;R4F{>SV4|M$*)_515?sUM*;R4e`K|L{MeKmDaq|NQhhlYUP1u8LOej_qoG zq+7dL{O7-aKaKwW+c^kon`*B(;H%tz{w4p{zx?Gsng02|eEQ}7nXpz7*?&lHWwh)x zzJ6O?53}=i_WM8n^T-;hT38;xejR5j+4}QOK%KKvHks}ohs&b@ZdJKs%r-7}(yOJ4 zA>YsSmS%poF)IF;(BaIs*Hl8MybfOb=#A&sxlYvY2Tk9VTx+_Bl%e*Q&|&+GtCfDJ zRvryO@6(mLR3n|~Dm6CiDvi8ldviD+U;0$I&%gh@^?Dj?`v;;5)A=8>l3I0GVz-#? za<^`c+a|9owb5iPx=m4lYn(zJo}M25l7Jvembwqmz4CMh&bpeMA=5*1@%5j(mqqRM z{BoLIPTlJDw4f8Xsd7;n)N*w~YGwJZfoW-4H?6AIGIDgYyw2LePv?2e81`xjZ7GW_(D{zp z$;~;e4Yvd2ok9RXnUb~|8|~9VhvZJ*g)9zrD+Uv*LAuhs?${P+T&*r&-%SQiALs3H z5BY$1(XIG>I*VM1tKEDf`%Au7PyhAj=fXqgF6gOUNVZyW?s{DxA&VBlv1^ZOnPPj_ z0}>NnC_o>{q1OkC?_WPI>}>!3|GuLTzODAB<(cR}ww>Y2*3Eyu`)t}vqbmfuqKBH# zJ}O;@2K?-}@`*cYrUu)EjP6q<+ixFM9Bbuw=PPffP7UngIE8W>m78RfYJIm$qpNXY zV2@gP_P=Z4hjsxX$KWrH5%E_DZP8tV{D}U^?&*Ae@d6K)P(OJ=*4cP zTn4zr^;?P0pA(>t_6~r0TG@F$op&`e$zxP@z5e=o(A+!DuCKrUp^x@{p3RSInTG?_ z#{vdrKaJaD0e7QX{*l&-Aw+_~6#Q5rUqu%Jc)JOt4htj%uyLw&FReYNC6jU>I63yDm* z`jFHuF#9dlsww$4ujJ!fhiywm2c=gu{Hz0#kyYxgUSHl1Q{A@N>Q!V@adM;h_WDMr zX)-&l*C!J8<>vIV8C6Z+Mnl7o5kps0eNaIch^cyO+NL(%UTq92Fj)u7ICu5z)00ia zx#a0i1CdHNLW^WLYE)vyclV&O_n&_9F)9@U{x$>m#b}NAjjBGStad<6-<-ajzkd7j z0X$9ubh>EPF|0T<4QA91UN@_;Q4Dho=AA9%^O7bP00_+&+h;TC(|lzAn0)y8Z=aI+ zT7eimN8PM?3Ota|X4Pd~P3!Qe-)6PKbB4}NpF00@swi*I+}|gS{IsnCS39GV4i^ym zS?@0|8z9Y5P|4XM&ko=JxURKWcrwqn{P7Br$ZzI^5;P58zB7>s^mI@Mv%h{S8hKF& zV(a^Q+_V#)6BKtjIDh)(SAN#zu^zf6JTbv}15!0x8_#D=!45fbzJ$H1O)tAelm1pC zCWR=%HIVX^`2sS>a(?>lb+?j{PA)H}`ZFu?DYbzdS?KMT7gE=n9lGYOX;%9jpnOxBCrdPv$vY<$-wj#Odrglfw9wyjQi@0ARG;p-5`R zc9nJ%t6i#1j;%~OBnF0C4ok`zd$dgyM(R7-Rk9|qbk7#{DZIEoLZfY*au})QSAzVK5D|zO)W&G_dOpPC z9+uRVsF`dJ!%{Y~F=06rrduhdIK%}9mZ-P;*sB#ud~XhYsnk%|AOx$`(BxUBt){Bd z4&2Pq(iH>%g{BGvGn0phW;6}JSd?2KDP*kNGshz@(=$VEt*#$0WP6XI1sxH9Ev>#r zXZ3bmb~?+=aW^SvGep?x4?q2E5VhiglWS`=9*GXYF=;>ymWN>@^_13TRSA@PX45VY z7|?0u32coTd^YhpSw|UWRsk&%=B66LMQ9PKR7+H?+2%}Gu)lykp7MZJVL(a;PR_pK1Dun)Gp_f#rA+OP$wLF-1%~iFWXkd z)ws7i4f?t1B=ywYin*r@&1LF>)Bx)mqC~bBWarDh&HMXO@i-%Sh%(TDgpO9RT_zK) z64CYj(^OF^xeOe{u$6dxE-${k%9~){A&ao9iBn0+Fi9sdb{wpZYvO$aJClCZRthoD zGo6!Olp1%t5{U)2q23xbF`g0O_zu}NYw`vQB}>(Y_m=+jm>*7i%_99185?^mS-XB9 zP7>ps#6!rQg%K0mQ95%Y;2&OS^;YOK)d@_>BVd#?fVHJpAHTl=8R_MoKQ>5oru<#( zBZ6<`Fdm>KwZ#Y-j5VUh?UEs(>nKQSW@w_CN64hJc{6ajP>V2MKn*>;Z80zu|B%we z7=1ydPij;Lt5BH$l~0w@#LnSvAVG9IwBIQZwM?t#`MStRgA7;G88tv3T^ zFg}Jh$5ewSJXbK#`jXb!`QtQ@@)pTS^J3A@<1^afeRZ8ei=tQ=Z`KI`Lt{9^kP)TE zI9vu%{=!ZhF-Qx8ynqqVblJ!}81?i01x9XhnGC`tfo;Z0=i_;)`&%=YzS8zhD(&6ygkq_an^)(3kil6xop>TE)j?o=Sk-r~X;(&=Cw# z^v6VWH+VQ}A;koLOyy=k91_*Ucc7C@x@W^`TS|nY?oH1PU3J&p(bf!_(WlhpoIvtu zY6Gr|0RCQ0Jm=%V=Y|jT(doTFaOyj1X4NwH=B;E{gYq!k*)BBcAlSO}J3>5mzc;D{ zoZnyGSHL2u#yl~Tsftb?eIM*7teBjlSHr!Ordnw>q8<-^y`#Z3f)ybT9*t9#w%_fo))9U8t`o_Bu_U6M3lnInRGEb8d`Kp}J2XqE%jd!T)?K&XN z!jNvXSRVl{diB}qtGIf(ghgT!dbCtYTc6P}`@@5c)`DmJnS{L$xrU-~cM)4sn!ucWk)F7oK-N+LG z3K+k%>j+2TCIXQVJ{n;e)2vIpL+eu84q(S2mZ@=#Kn&GL)w4H)@WqIDx7IlTiI)z1 zX(U9KEwmrBh(kRRkSltS0GIJ!iLeJ#jkT3RP6*e}@@$j!>FssBXd!-z+$1JLj~X`A zh-~Oj^Z3?Rq2P;oAZA2BF>M20d4F3Glg{VrW|k$eRSEgLOZc zBF;s6T1BEF`sAciPm7|%CF-v5p3{n*!;_Rg%g2>C$#fp(i)PQ{<@)8kCy;kooZj|_ z4wOiWpVf?iVX~4oy`^zI>!2PXkk)`xsugC$^TnR9u{@S<%;Ej(8_!g#wMBjT?0qhX z7m}_vmIv!RUCTkWd6&xS$)KGKR$cixTOgK>%c(24>}>bv5LRXrjuLhC7S3?AT(vbr zW5$57H=~CWW}4m?^dALhl8m%+SmxQ?C1*HKqP9c&M9eaC8cJT7biISHD3R-O@+d}2VV}!7*ksbR78a-XB_JDb14DxqQ@|x5MKCYD zW4dI5p#k)ic}nK-G2q1FV#tm(+7oaY+YQH~6uV6t*-nteuAMb@jA)6zg|!g>CM@?O zn>c#j^sqH-IrKtDAFdxCZ-y77ZBAisXUv^T@Rg!e;Kzg{J6uMdX!j$14qza8;Am_D zbWoLBLqa_5fvCeqP1zl@!Igs4k21pEOf7|3OK_>XO&KW=Oqi(m$nmoA^RWx1z)Ndx zX+E}?3G2Tv`Z1W$Do6A00KqFGjkCzGj?Iul%&$^;ddk&&$KZ~l^P_9Dy5*$#e$Fu3 zEM#(cdsjOwrn~d|g>*6J5Rxd~hXEao{5&EFqO|}7&)`)7=Ztrk_g8tSxCMnzuCG`{ zu1=+5uuW1u=u{ouvvxSm%y7s^nBz6d;WUgKYvYzVAMij&^d|^1s8Utnme(uA`Vs}Q~gPpTkRWfsK&+=MBH%bR`Kp4V5 zXD(qnpn>OpF)n}v_Y}a`3W0jRT1sG5s}X44d0B)VCjcl|!#jh1sd0^R_F@*9jI&VF z%Vxi)wc|$b`df`I7Lyqh5SlA90I~~2M#vQ6EQfNnU285gml6f0&5otJVmK`wG3BKa z5T;QqblnrcCAeH6(-9XEt!CG*g26jO2PQmam1D{@7&EqaK12A}XEGR-d1zt4&$%<= zb&gygSnfAt7h%L@rA1<{9yy2sgUO3SEP24jb?sREFvf=B4Eloc2A?$Wi9d4#t84d% z$&s@ic0NY9fEK0#p@fN;Ws+hJjWK?Cxds;8-UpG^cvnh%HUSQ!cbd0YT)Tfi@vKtT%GtFHUDY zP1@fEq#&j~jiCvtHjXI<&({}D8Ni0P)Ixe07Md}iMAr=u`3?3;*IS3yERqNCG{pC8 zOT)`rcS+leT!Uvi)36w<(Pm^)*ms)rG&N$JNZB1Digt(_#OtQY3bEvVnp4$7rbU&S z^q{TaMgm9>xKi7w3u8$74u1fi&?r%=yV9UVfxzdbutb&MF`F=-QhzE0AXV&X*^G@D z`eOQLh_a2zM(18$9}^`|lkk8VwtT;8M$EX@GQ=*9sZU*~@}WoiWb{UwlC(hB z1Bsf{2sB}AZHW(maF`>r7C;p{!6k{jBxuCk{tpu+;I+P)A)md8T^H83tK4wdi73dKe?uL zKMVx{?aIhl;9sVGR2Pn?Bj+)aV(2EZZQSXw-TEdJpQ!#i6``36NMk^0R?MVhzIprp zwl=KCUdPwXD>gzs0>rQ-$2G7HF}H9cag3~;(=*>3Pp@BJ3?_sQcRt}Wr zsHsF>U?4?N87Lj34WcoFVDC9jt(hMzicy5{8lsGW2*z{?X|wQUk+I$&K7;}_Szu~I zf#TLNGmD3_-)Y+c$*>L#iz4Sh+Jrwq#w!x=9;Uv#MH9xyw@%cofRVgUSB49{3)dO? zd@2qx83cT(|?*}V`aUs1R zl)@kbt&AW-a>o`fWjw^&1bmN;F;-16D?ngdCC= z0kX*8SNVxHNp1>KimG>%J4#_KEwe*zNo&m|<5g3oPOVr-J>ETK0tyonAE-fbJ;~Hu z)&6kgkM5y>b=i@u3a~LfiJ72@o+v6)31pQ1btqQo<5@`05W>&#N+U}K@$~d^xEnl! zK(R=zocU9e1-Bgd2}21P9yU8>@i%l`Pi7DnR#5v+bj(Hp!?=Vh!f!{)AG7}=ELkrH z*SWNPy>LG$+OY5*P<;ZUKTb=^zMv1`I!XyHSSLjRl!ji|$Ga=HfD5BW3$ZX}nH1%1;b-c|7UN>=x7Nuf_Fl zm>iAL*>Wva%?`KrJNOK7i@t}1HHBxgn{Z*s9sw^$ze3UmVoLIe&qws^K-H)m!{bIQ zjbAo{2nlfnrtQu`RgGW%p#KIWE5nqz8b|Pd1?iE;BNf^SN(B0XKt~~fXJiH76`S6A z#cDhAzQ&CdcarNw^I||z%T^X5Zd)Zba>$w8q~1g_GIsAgySqnC^=uH}If49IPw?wSXTYppZxONQj(U zW@p$N3y)C3b3qK2pM`=2dskcpk8QQ%>WF|0vT6g~vX4mE_`iXIkuuuSTHPyw)#ZU5 zjJ+5V>!Dd08Egn=*#Qwo%t&pHkda{yqe#Pc$%LSmuf>13;kg2MC|WpeGD4NRrwx4S z?et2j1-gKmnl=&0v5S3-2yqg$&|wzTSa$~4)20hnf-{s(0Q4!irP1D3Xc~nMvF;F= z0LRe)#+|W(NYrb_ZMZQALwJSj6!NAd*gXj!1%MftI^sbKNta=q2bgFwd3Kn@#OGgr zd3bs@$4|+iEJ_HV7;Z?8B?+=}VKO8gMJ%UX-Ulxx^l|j@GiR$vOikqRzeDoN;{=*M zgu9NX%h9W)&}23B$!mpFhPDoo5x*2Mj-V^wr_7t784*Z$<*qU%WMfHs4b9T;nF3nf z_+mPNHWzNL4etIB)G&jjL|gEQ>v@Mq50bw{-QlVQTj{~JC#qkDPTmZfzRM&o$cR|} zm!2kdQQvw{Po~)^{fx);C*?=c!HcR)0%P-uEAjw@;LR5I z_~Z3*`12R>HlC2?;0B=1n1=~%e#Ma&VUNW=KmxR_y~P?TWXKC79`5e$L%i7T1&76p zGMx7wxZEc7DpQm{5V37y+ZjAMDk4G81}FLyLR7S7Pth4wBe4e%PxOs@-zQQTs=q?0RRR=RQQCvjB=01CrS*^rx8<_Qr{^TqG!KZ` zh4OcthA?T1kx0aLz1^|m zTy*VX+)JCAvXJeGPGd3R;i9n?GEw*f`r_pHHU<|qjK|yw3y`FulEmD}sDgFihfC~> zwBsz>?HREhy$YxE7B_{^xM_ei74lvbB}d5i7-dVuvx5f_NOaBV2PB4Fyb^l#D>` zF=Dn8#T(8SCfKPv z;{K2i#{9+G+#x8Yl zBDA&$Q^&39u_C>cfW<{08LH&azgfsg_kvUykxYPgb2maq)z+8Y$y|gjxyvnVNo}NS zv6(0$+gFPEfIWvAtUnt$zF6XpjK}bGFzMD`XqARrVpp4JW$m2jfSG$&-bU0%wqGzo z0@y8J5jM7WJWxD|KGH41Nh$mun33>e5zzwbSiiCV{b|b#s~q86ATz#+Na+Y_cCp8@ zS3Hum;nw{zPmziIxrw=gD8M3fix1?JSp^>{gm(!BMo`G7a~?)AY!_GzmrsZ}guR4z zkz*P!KkB7$g7$FH+76-HI3)I-;=u=%OxxTxl>fJcUYgYotJYX0uS{y~wMW(?XAyOS za}kN7rw(CPe|OPF8WVX;7!CWWQt$Yae%(?GK}>F8fu+i!?kZ~CY93Ev@5VygoqA0- zeuOw1BDOyG?cGHxbNl56@bT@X+re|1qhThz-%8YYe0}2BJ~jpdL%cL^&7;Z4?Oo9& zCb1E;A_?vVW6lXT!h6alM7RcnV8*JA=_FGA;2{VntNr ze)&PhTMp@Mg9mFe)-dKWH&vG4q=iPXOxs~pC&bf666XMV8?g(5$l&qOBD~OB;i)+D z)BQ|qF4M6neulri4Zkx{_e4PU>4c|vvks{(1(N2YI^Drvx;>s~dfQIcgH?sZ!_6EVe%;wN+93tRBFlD4wiue5yD&K8b(y529x5 z2%kzvIxY>%>z8p*WVGUf>@vO@&F9Z=6@L$nJ16LNA4LUV0dHq4j=i7MkGYu#{4?u| zMl&LbV@piVZ>kub|A^E=p|tEa>5qSkXNb_^t;InL!B1Bf@>XzMf;Ocp2|lpNk4}o^ zw$mk|p3^ss#gXL2o{TF&V(h^Dd9IwY+d&EyEx#fP$Bxs~h$8zI!ZcO2P`pt4Pcox@e(00TFzv&%#cRp!UyY5&eM(}s6mk4CA;%c;M zopx<8TNEc<%V61a(O4CijP9AST;y9xn_} zSbyk_%gy8_;ai{><$&=@kp0adw?3-!Hyhe4>c)QE>(TT;}AG#W53K zWIHZQzLoHWrkv^cc5a{LBC_Oz8Pu|dxL2V!nNL@}^4t98rslKj8}l$b9&R|N@cmMG zU}A!s>QVTl&bm_CIlYzU8bOo6l1&SSWHz)0)Vs-Ald$Ffay%%DCZh(HE_aL!9gr}M zLmOUAHn@2_M;XKvV#OgpOEufWZ^Ul52Z;u;CTV8eBXX+Ia=bNU(^upU#bQHm3uvR; zoxu`n#PW%V8yQMKNeBh(2bKHi4>*w4pK`=_8P>4$ph*%Z62%HYg(gF2K%w30?aqdz z#aOqnH{5WnBaj|ED#dt_TaZW<0^>=bI}lsk1Q+9h&-LA9X-A8n|~yi(#9BT;gK zw6P6>>*;nYUt;S~q|2yh&5?5T@w(T^!amNj53lFy$>gv@i6Qo>)*Tqyb~gVwZon^R zQ)2}v*sKYg*-)GQw{rnZV#{XZnFO~5oGcK!S(Nv62UH!FMsTW3F6I_B;J^7$xL(T0jX}YB&J((I6s)v~GT5h$mL4kMb zz?d4DUet|Y*tYDY>$_P;^=geJ4WH9#-lSa zMMw@53MqnxxV(9nh1Q%mT6(xQH^eI7)cj}ef(IdU;VgVU9~svAM4eJJ+{z8EAzWO2 z$PNi<$|wStE1*-)RQ+t*iMVgrFjuh8a62wfK$_6S&ZhPW2cYK$sua0kT3<%B^io(r~O0E6VpSP-R`yf{ukzgZ8(5U$!dd)R( z>y@|WKF{1IvwmP-2CCDAz9z=9o=s1T>)0Sho?M`VSB zKq6-$SfSPCalxlZIagH-QeQWbdkxq^Ggok^`PSM<{M1c-;Lr`0u`KludVV{uRP5fy zaK6|%3JeX&mCN32*C^;chL)}qH6_TWD((?sVYRI*dTZ>eI%pm0CD_r>B}Q)UyNYQB zj4K^xe=ZuuCVDXkBqStiM$>lUT)W$%sR6>J(;{P+)Zk@*z|<>R4HyDholw>Wwco&8LnQHR9x!P79UEQ60`7{ zPshYL)HQA^U}AIQjOyIF)$|UfC(%?SwjdcWv<=V9n5@Pu+!bo0selmZBbD}$2GcT! z+kF|n#Bk0m&VntRGS*5$(3k_0eNLc%xmK(#%>?n4; zMb?BPt%e1mwhQ%iX-v?~Ft}^}MR6I+LFd7b^5f|e$j@&6Fm2#&gNsP6;u2GdH_VK^NSFu8#^432lo$l~(Jm#` zBiWJYfR=*Ss_hiXkQWE(Nnm!GS7R+cq+ja|HFcu!STLqSsOQRTyT_Z>dqRO%a+Fo*8yHE2``@#2e zVw*_pg8V9r$+^&*KDLtRnW-{&Uq}8c?n$$R|^J_Qx)d4KzUX=KB&)`_d{audu@^eg#Kn0bCvOGWW>>d zqxwHNpCWBV_sk+JgnD&BDq&p=#Ny|%f+J$VQbOL?NHbZ7$0(Mkm~!GO;0n_>OI8?m zV7*|9+Hm2ThApauWO$i0NgM?bhQlChavG095Ky{Q?Ujl~X6SWdroj_aB#sl1hYm)o z4KeAvI0aHkMb4O9s83$6wTn@C0^oIeIn}9Zp&y>k;1eIs2tyFPpa>*2H*|my9PhHh6115JltL*c*N<`NtCZTjB5J0 zayfq0K-lCLa$e&=%{Bpy$|AKQl|$5zGN&87$KZ=^8^8~Z6bX#LAR0weD#RUb0Z}<0 zIk*kzf>owO0qTx`P*LZ~;qziI2?Wn}Q*i=pU~EBHM~}wzRX@&5+9@ZoABB{bseC>B zazqOo((udoatdv6`K?iLlv9F;Jk9#re9>ZX_rU@S@uWdK6k}?i$8(XC52gMX>BX^# zdx7G6pakP5#H2sowyQ~>B=$Qr3)`aG0roxBUoxi{nxM5u^UT|eIe;?SZSJhc1?Wx1 zCyvS^1X4u)z+Ob(>}FRGG!Rqqs5PxrjAA{ZV`uYQ9Jf&1FV2iIOQ1kox(yb@eSIQT z%q>SWHwoK0cZt@X5AD0C^!>@GsR#u5ZxP`vv|`lHun2LhMq?yya!&`i<5xVV)%PaD z4$N!x@^zLKFc6($yQmbE9I)f;k1ZbRyyS~ru>zqOrng5S^K8nlm&l7ZP18WyABgV!OI7G~+z{nO#K} zCGG@2({lJp@tp$;99666n-7i~1L~_O`l{&woh-$`f`OEd9o9^c*s~lv% zB12%=2kGX3`Yh21(x5P3x7=P@teLlVgOXT%X}NSMI^3F`fz=TV5Ipti1ZwX)wjWRK z^t<5`SF&3npMZS0>0GeZg=U4FQ) zGE}+ypC9C-QvSQ2)3qX7qyNxq_1?h&Pb^)WE~6`H-SBX}ypUexQ`4xY9-p2+B?{^L z6f3L`hX)3>HDAmYyM|+<(5QoSGH=dlSPiy`+VPh-7n8)6SU0%i;7jq z%gg2U}~UPq|)D9>Ps zq;lU@zyHUF+1SS)|M%&YfL)ioQ^VX0Yl_%fvueZklRrKc=#M7An4j;ME*J6UFvo27 z)@r7*sPFg+ODZywZ>mCZ3iU@bqf!+lt=*<&p?8?;_v&E7 z_-$sstq?xzKzYpv+=$kY8~tqN^JBg~nG}-0q$PXU)`-5vCQTilLCzM@z!MlqwZB_! zuKrL9-um+TWe4VdnWIA&^X=wiKEqrCfsa~TzFv6v6~VFuf!!T<=qc8!t%NplQNEB) z~?9J`P)?K8=<|mm+3&*r;!>zhQWc4lggW%iH?WqtS5qLaA;2WhHx` zjB3TF%H6M-%>6Sljcgh0o%$v1HDs?Jo>Na4=B0KKnK#hL<=VKB4tvse|NGZV2qS*` z`ekQ^w_8*{+dGVV>Pzm+r#+5Ki$;8}G8hF}1eb-v)-ggT8 z@owN9)$>n3K7Y=ceM1*yif~oEK_i_q;v>Ytf0qsxOOG6IZ}Ric1;8sdeq-hyyKkq< z`n>=0GFfj>63R7p)54ex4OSxZDGE&Jduep|ZDXY7)6W#F#PjoY z)0w_~`||dmAFs>BX}$UK`*{rjGUkpk+|7QwuGeoDt;jXu%LS|O!-93qL=0Vs%ZZz58Y<)qL6f9 z_gm!-#pGPIk3a|0Rg}6PsKO5#GC{5tl~$qoK&`G&%Vo$HJSuW=(euT-r>E@aa?`NP z;H(5iP-b$Id*WVF4E*ZiV%X2rb4`88Up^B9uczJ2%2$IPC-$-M z@NoCb-}3cDfm?X${vL$_b_|k-+lV&CV0Xp9UhlyKfMDnS>tT6)IseDEx8L8`a_wH+ zhJ*EZy0(m1STn^cDhJM3+GnL@+HOs-{AMyeFR4`Ovo4Av-%52|6WVO;V&y4YZa zPsN9)#NB-z&k)j1Nm7=m%THi!8#(F=?PdT!01o%3>*XXb=L_z_snw>-@n(PFp&NI$wDa1N0!GLQ77E9`3;dTyl}T|&CVEZMzL zaPJ}TaJ72>WA5pPM=s6fvb0ijjf2LZP|?gOB?e2CR)gk(nlDtHN9~PK7VTEu>;bcv z$rKAL?(j9{@yq4B-CmWYjNxUcjkD>JONVGeo3rwG8L1FsrYv zUG|E|b}N@i6>?8h4O(SlRk#b-g(kA~QtE-~gN{w)`&sIkvsJU+TdfG1pBFEuDq(6P=;%ZnbDa z;L=yAwOQq@DTWkjRLj#2vs&%$E|bhke5Cwk3e{jp0MeAiYaJ^&Jzdw;RQf5OcrGT2 z1H>z)e4e+W>czG+IUDtP*O3%vPO)5o_)~nHZEg8kcYE4SqNPY~uuJb^WdPD$(o>*h z*rRZxMgngtNj_DAY&n&pd$&eUSX&W;U4J$0A8XC_#x?Y@1PGOpK)Og|?J z{6Z3+bG`AoRUyj1o-RA%?dkl|1Nt1VyVYVjO~ry4FIkq{Q+2>%<@9ls21X$uH=Tf` zb$8u6MR#bSQ7zc5y7dvxtccEiC@SB9K2=6OJMD~4?|&!Lp=~hR&I6^t9D>${L(S_YD*x4xPX!{PbUGo$ zvhI${edJ1qq+vq6Emnxx&kv*3m90}$C5;T5u4m`*{$HMpQrCv`cc>MAz3yBvIn=X> zCKcwy3VeO2^X>lFEzX>ZrrXzHb6RJxP)KK>f6`e+8JcW=wYt1q#xvbbI(D@VDR1d> z_K7@2y}nyP8xC64IWL}hzxa?WcAKccnr;EOtZE$YKTi9z?vD|t9;&}B=k2NpD%Iv;;e>?9Fuc&<5n6uLqQ=F;5*wHj$Xo^~c$#y~-(+D_35joXoXi%rKPle|GALC7d-UJjEK^+Lz%yc~c3 z`#;XFzy1BX-(4>Fm`6IUxI8q{zz{GGW@BC(Wprkj4%qMSa*spXq&1fdodR?UFVJzvpmv_y-?h$khtphaNH0UI;9|8 zA|14;;Wk+XaI`!y^I4n^w8lfmIhwP&g9TpQLx8YaVc^AR1`4FnM!!s>Bnhea!3)L=x*59W|9md}8E^P{A8a=*snC zRE7Cf(N{1G^W8Y))?ly4^IA&^s*M%j!5Gshg9lT6r{<dT)MqfiGHGsc-EfY&r53veT{r_1ki!N_3=l!Pza2o64>|pqDpHmRM6hB% z>YD@SKsIc-J`u*+k|#xPg};mqu~7xjm?%XWCwC(dXUGP&MbdFFdGU3PMJ3fJwevaf z=XAOq?%2heBT^VpC9Af^_xZ86Fk8{tM=!$7x|~m-s^wfoc~>SC*Q||EIP2EVTQ$D&!+K7H`^a97bLtnH;0XbZh*k2Y{$z&@V*9!>@ik!LhlPZ~_@idtz zmr^-}XqOh5mTMlDu(#Ri74nXuXow(tD7J^y&dH#kMWpjvd>-%y zTr@J7L_T?+DzquY1lz_R$#u5}&DS2vnvpkZ#c9GyO4lFz=eSpXHPRGS%862!gJbCD z=AJ)24@RMM(ru6zt}ub1(7h)3AkFQr-#$LvVm+y&I6NV}Q16zgWux!|ka$Q`*-&AV z!i?KwTe8(kZg%D?T<3U+VvV-U@O*8oe7jwP>Ei9{o@b>^ zM@O-Ve1zy;CA7FeB3@}V7m|kIb#`$p7G^9>8i5d-p9$8LtztUP1FtLb92J0^95b-~ z2w<|*n&J~3`MQ?Dek-I@Lgv3;t9ATqm!pS%9W^FxrWr(mj#h{6I#E9$(fNo+B6ePC zy1%Rj#P5;dGbOqNI&YS-P&O_;e;ii>CTY>X4=)88PtkmM8N0Brs_Y-iM!Q~vz{q6kipn{YmoX46D!n5P68OIg_IR` z4$uR$t;KTGgn5Sk;5ETbYU+w1vR3rL%@`ni=IhtPW+cy%`E{l}xk9~_=D?!yK+8Jh z=Je5P1uCVcp71uh>~cK4+F8Gg2iqBKqyhA==j_90RodEwCXBf8-*tzjmxM@+fW!|#fBOx!c9iCaqC3~5zu%X1lkZIxixnKl_cJ2)Yf>|0OZm zdMi*X`6!*WC?rpo>;o~aDDVI?PO*gnc=Cx7WCMCh%p;?D99eg#QDB}+V?uwDa6G1A zow&8B0GI<+sw;7~;pT+MTc6FVMD_Zuj2~9XxF099Sv!O9Fw|W}me-4nfxqRyy15~M zxLc0RD~5K|fTDi7k>@l=suM-5YZPnrrtqP|A$sIu%W}71kG|l>&G>@SeK-f=no@r5 zQTnH42R#{cbBVVF#cTuwq9;eUsS$1t7zpc+^ZI%{y}lk{poS*!Eef3V%EKdHzHDP0 z0{X@*6Mhcn<<&Cba=n#YF|B3QT+%%{95r*S3fK^{c(b~7+cOg$sjGEM-Nl-O>U_Lv zGr(?`tf%w3Au<04Sle;##tV4eQ*VuIPZw!i%ig&LA4wYOUvAlm^=vp?$E;H1F_+I# zO0RJrn$1q{Tklu?Es$R!7b|yLoxGU(`~c3f1Qy zTL2K@LfFW5=B?3nBI_V#B7Sa%dmV5)wTF%~Xwh!v&pV^C(_fu?`_r9PxK8>miP^&0s-O=5ExnKj|qSvZ0V z{pd-D0a~bvJXC$zV2} z+GxN;r{0Ya(Kn_uJMJr*=;W9Wsc}?3;W6Cm*CuCgsn^{te7{+T@>QP@CPM3|#DWsy zt!-31oOT)scPBC0Y@*P-do2HqN~J(i##koG&o3|MBiir{Rx*=g91;R|z9*h8egif9|2r_$stMsiRl9C3};v_cRm(Z>P5(ofk zZr%&yrVgXpL7)+9VgB-v(p8lA-BU_q<`yh?bs^6Q0L=~f=6pjTk9_H*v~Xi8 z2kaw#Mi8P{(kxX9s)V_D_>iN$9A+w!azlE%@FxDjYk+x_Ew!oZm$J{r;F{$_A71yr z0ZUFZ0&bq98Uw@Yfi0N)SeYt%icoq^HDtAP&NN+RW^cGP^sn5ofMWnSV-;x-?fkRM zRw6;gltEVU{vp@oRmILy?9c+3Y-Z9)9^t@%2a0{cV#5*IELP#N6I237S$-n*Y)T`p z#N0}U4V@TdqE$70_x*3!D}z(^(MIP1kcx^JM7f1r!+AM0 zrwm0HMG>sVH&B8Vol;;pV_%&`dJy)Me=vxpIAxP`$)M|ez?+x>w=h=d8J3>dvdKm& zILq1woj>{4S`loI=B9QU8z98+wgZ)Vwlhc2&1QRlvjmP|t|ICTqo3z{sI|ZuclQX`2NfqwTaB!;q3Pfz=7ARBd;k zd+2wWYdGSj7Vb%@nv?hiJnpVr~3}-!?NE>o82-9aJ_gOBqkpDzenYDqkaCPHcv;JNw zJ3NTA&~~rx&dahJQ0@ccPBL!|l6YEA8a>})bnXB2Q@T0&^=Vj6P3IqP%umV@NGYoH9b#X`ro^xe)ia*{JE9t~9rOtwdR@D@lh6mZC&g}HM z*M)(+)yf;L+90$#i7e^ueGo;D>~JsAr+BT$0$w?Ic$JE*f3*BX7X!D2Ay9;sh4 zp}(hXNVHsu6$BFcjC(fnsVXyv?9*LZM^M|{3pWpm)=Q6c!(8{yS=t`91v4tEre!iY zY-E3%@p^Oo$E#U>u3JkzH!6yzBDvUkHQSo3sGZX=j`kVD!v|`zi-ud|TAzVo0fNDb;wieE(wz3Oc7r z7HW^vC50{Ve|9=hNF5tu4@WntB08_H&8Ix$6poVS*`>r&wiSVAewmoH7jnPe=YIK@ zAJq05jm_-rw7k50XoLAwyE8$T>EUqx|4F*9HM`C$UCfuT?e5)@D3JhxLRGDtbIv)3 z%19)oW^db%ec*H7y5E8BC{aMwT66wkjBk8lSxn%pG|S40;p3wg^}1>{_v`T6?P>bh zhoaFAj^~H#WPCiR+kDHiecoF?jS@u}&gEM2-QWKH;f^U}RRSH}SK%W1Q`uHu z1_<&3xTSvJ#-C)M8E2cWwE7Caw9>97p=ta1pTBLEm(Sm~%ru3CijzdBW-f6# zujjk-2A!~(%U0Z7-OV)lGY)$`)5!n)(~bFeDRGxB4!7F@6VXUBySuwf6o_R;kLO~} zBmwKBl1UESmL>z&|N5`*Z!6^{A7+O48VnQ8hf}|~CTUpj$6V#R<$NG~Gf`Wiz1tZX zG;*oD?~Sm>Y9UfTv*~xg+!;4_#YWb*#|0~{46gaj-~RH;O)kQI#!rtUBM79jUI8+U zL5$!tu}vMlIFR(~d~oPWFHf(pOb##H!`H(aiW5tv_38KD|Mlmqw6*Qi!D6Vft5XDy zNj?joG9g>d-F^I2YnAR&HQ|d3W6eUf^z;AtAOH5#$8@P#$#u=vF?LIM^~T|>*G2}0 zXQjDm7Dh`qm1~6@Y0~YSe*4#^zmqWS6sxx;=L4tvZ(ra3_5HNJe*f}teB2BtM<#F6 z_0#v?4&m~ofK9yrM1{t*t-y4se0z^`a{KZ2!-tz9pt@XzHYM-sP_A+%dDDWJRerR9 z^FF#qE%WidoVocmrF|Z3&Ar6D8jMFe z?EkOd|NMQ|-%zjzm&&xvz;`%1e|`);7R;RCZO>`PcXGzySf#ElEo3u=a^{C(W5}mO zk9L=bsAw>IQ&xiH4bxFE$!ENf{q*;r6UB1&KHHdh74(@yk-aR}Ds5)IU5jbEEc}`* zcN!^X1DWcU+y(v$DrbAm~uHx=a%6+W6hPuu1Id7ke? z?`;W!{lZ;AhSR8~(^W)QT8F2@WieVke|v;5!<=|@RoeW$V)8IPo`p6)GN{3%pFe$l z1$i%@_7ff6eV(g-I?e6feV4tfhU*kwiuo(1Zfm)j7LxVuXi#fv_}`opj$G7Q@6R_+rbWS2;*x90oX z7+=19Iig7KFFTGYe0zCcig%p~)XaqR1EHfPCUZL5&F7#0IE}i??EuZEbd%}ue^1ci zn;@}|a%;0#&9~PhP{8JRUP-+FA)6Px*@j3aizDiGl#?LGdYskn2J3NoIA3NBc$b?R zBF7FHcsPG}`1;UxYK^h+;E>f(0hgiIS?>IeXb4)FCU6THv$*^p|GLV4J@4`QOKjld zvF7BtI=>la3smR?VHvLX`z>DiWy=Qdw`eM>jNuLSS*t?^v2z~Z?vVn&1K&GCBtbR2b==wyq{ej zUtZR0a*Gk%yzO3}?s}!+d^1clXwO%ty`l~+8;x7Jqs92IrP$9mBr2Dx?whUn?bYcF*>-PpHXc2=_ztI)G;Bl63G?YzE{&y) zBE28YPG26{?FD1MR=eDEBzNT%QgY#eOleUDD#dv?HE6&mb7qRkL|%#1Hu2zOY#p;H z+zH{4SW)V&=aR?AEhORwtzP>6UJEjH7{h|k50~fb_2uRBbqh?TJKQbcS5M@bmS3Ty?OciCa)iDM*@1!c1)mqLaR z$OwGAlp(8pW^!S)!$i59rVXtJlU6$MX56ID4MKIeLx@`^>(Xvs=5^~3H~s}w2m}((W%SzSgB*%)3=%S1TzN2xh~4e50!9~cg)?F{fqK-RnlEzo zz^21778lV#Jw_YGO81vz^Yh)u^((d`W>G@GZf+wPdh?MNd%TZWZl?DyS}h;!{cr>oic{v5ldmm9lWjEmM7Q6 zEEu(j?1&`vLa-tf7N(}b3C0WXeDzg64R@ko9*ZGaz_^92G?1&f;F`+nruZxdr=Q@) zYl)9;z+!4op|Qn0jM((LpQmby^)(HeoCN?~ZyGvS_qCF>%N1C^0D+yDIpU5X9Vlc- zZ}8oao0=SuAf_Wt9;IO9{z8njoxVK*1k4G#+E**E4@0z=FKYCSiFIqaxxWA_7porLmIsUGMEyVR1z+ zh^Rj_eQt)dG=4FC5q*Y?wuapXVVcaFJ|yH78Z;Pp)}!@uWH}ZJp~kceMq^1pmh+tonFjGAijGefmSw^;z{;M9QSm-+&x?q+m;VljoVV45HzAzY5RM)^e{ z51G?NlEMfI?adU6iV9}8t!lS9*e@^xm5{7FqTu2iHXR_hHt+|iEXr_mcXkL36pKKW z{ljs+A5b^fYuR>NZpU(f4CZ%K_0I_YGxLAxc$(s|8?IBLSg_q}!!SIZPtp9kL#Y5A zR0RtKNr&!vJ6@|%>r>dzVoitx)5hVWs~j$<6`JcA8bxP<7KTv)Ju6wWbW`QheP6XG zd~Q6h+A#{c_N;DA;Lp*~XzmFF@r$oKq8~Gf4LN>=3*%`-_8D?(#w**f>P1;h`z*{}Tgb$sgiaJ)nYh8(5dd4s)J% zj|nP)-$awebg=3#5q7riRMMK=YX72~j&yl4=WMFMlf8hJ?~T}nnDz8R9)L>#^xR=& zByn0M70V;XO$5Fgv$!HjM;sUCd&5x1nj^AjcCr8^i4?a!E;W*HuR{pgfnUu^chDwM z_O-jtO(u3o3eA$^Ovq&1)tm%k5`t~ffi`xGav27B?M6k|R;K!B_YjCJffx(ioTp?o zWpEOfBRGnyJ@=+ve0oA(!Z{ZfuNeZmK7R^a9=9DiaF{QUT{DPaIqp#zX4y90$du6@ zb)`+JblQioHPZ*9h4OI1Q!ND>ViJh&-@PzOvN|^%px-`K&duP{?XC1~k;YbkQ zMfnk8CC{f@E40k}WZn5g3Tmr9#;fRoPH;!~YT~ogNfVqRgVPhz`iV4maT%cD=rt=T z!JcXHyCs(vU|aEko>c|KwY<=W;oHuv@3`w7D%H{;U;hsolZ8*!ex+Ll&}6gX=v=XhI@`|i`l$8< zR=@0x`3(abpRx+$Y?0$)uhgn4jlk{I&PnJW4b{4jZoxm>KkkhTp0ypG{ZuBVE4Eaj zm2Ijfx|{tx%vQw=_QTSzI4Do6lR<52v^hF;sno}mMzFO;5>vD@|2SNy>JIQvoo!*! z=zp)hjW;j#Z{lm~Pwy^#m;$I2dXvSQMy0tdFEiRsZepui_oY0!$bcIjnk!xjvplV&nBjhF zRCSw^bjxjT6ssqBkk#QdTW>wJJB7s-Wy+CKn6$SK`*ZJNg7q-nG$yTL`L?DCNhDUi z`(n9Q{`+lyb~c!tKc0HE^>N!9EU%r@^L5b?6_d=)Pq|NjEzL@an@o3=`;hKjU3+jM zD8%F$LtTK=WWP=4E7jZl^4v^)=o~ujL``X08+(fG`wj`F#7p&4XI(Ag#1$*URQvF- zEq~y`;f`r{_KRM*b=}W<)5jO40>Xmu4p?CCmtk;dK-IYakgU{GX|4;zZJjyMO8@lz zc|V+eKRJaKKreoosYFrZTe`hBGj)s2j@R>I_Ii2P4=>l%p|1ttmo%xVr>AD?AivbV z{VkcgOJ*IA=0T<`haI14>@+NK28$5n55egH#XHv>0v z5C33jG=tWZDC8j^6RDSn{qxIjpI;34I)mf1QAl-hMv1zoqK~R<>1w40ww{mOsZ+!$ zY2ua>VBsh)aa4zn2npaM0G6q{D7y1`ZxkMH9CMjmD(BeUI3B8eb^ECt|KazEiZZrG z1%3YKKcAkz{rUC$`t@;2a9_)%D|rEDmTf)HFQz^0nntM&-H}lbtTY#>k_w9PfSbGF zdX*gw0|LuC*G}1uRBXa)|_wj#7W=NHlX?zkPXwiXI-MeC?;5dQsj>tDa+s&N^tK z6&N2W_qyhdXtir6s>5r!9$>>H&|2<9eo81b%&)u7-PI_>jnN4bgQm87d3FQ@Rk@X$H`8hvXwX|L31yzr6nT`tt43q0uO&?ti_%`G6=^P1CT9rK*Z5AA`nw zL(+T-gvs`JImW+s#a8H;}0yPHpU>|cw; z)`*dSOMb=yO!jeqYs4S3h1uz3JQG(97W+K!|55+ehA?Vx5jOG?%?}vmcb@ ze3HP8ExG%hP`UA~|MFjiXY|-ou?hC34kVIdnbVE$TRWHFi-z z(RfkD*O%dSEcKm4(SFecZ~)b}_TAnDY-tAyirQNbKQ@ z=k0X0e12X|@gcYbH(U3DKE;zJGWq1EVj_bOf+}dpI0|pmsUe}Mw%(AK)Z-v)XN7|! z6JaSRnOHLUOwp|%`}pBC`g2*-su0 zjju0n!b0A*7pXv`TDAO#)ISpM|Kt89)2Q83SU=2bFMqDCPvtTFdo6Xk~_vPk) ze7wgsyT2=xjK#L!x2NB?Z+|YIe}DeJ|L@aw3M?F4+l||Qe^<-=^6!PxPe1+j_9mAc zihq_ENFj?g%{FK~*ouwA(*j0&a` z?^i4uyjBrJJ?P{m6;e>IPg(-c=jHnsbNS&OHH?yYIBjV8YQNm&6Muh~ziF#|s>#`? zF{kzI9_e02dgt-;c<=e5uOP4RMQqgbDkl*D?xBfOjaurNfP(q|t~V_fKHjGjAAbJu z*LUweNkGn(p`DxSQ6%+dwtP5uEdR&V<>AYA@%nAGpC5Myo*Dqu2zn)yVQYaX1i6gO z7SH=}d(tOIRQXrTDn5L=|Lfg-ihd({J!-A?;xu2Mj}MPu9#6-A{r>IYOgn3bVwKCf z1THO%0P*>wWf?7|tHz*){sLt(&8N30r;mX3w1y2d55{*Ri1~6Rr=E37e|qE>y#4;=`RV1iV+b!{uBlIVzka-x zdsWPoumuY>>`_y~mRI{_J5i4uAHTl7J-oht7BkJ-U{0aw6STPVD(WD*;d(8?o8by9 za6W4xdb&vq$=f81;o~p&H-toH6LmoyAMVn55&=CLV=qQMeU17LD+_Ab3||N+ATPWt zg@pZknlYQZzC1mip1(ZurM+I(leyM+z{5yBJO^)aAGSM5*ZlE(I$XXy?^m0v;Z!%5 zqr3j};r*{4Ki(&9?vqB}dNCyJda$*abm0dXX!XUF)wwSh^S7UFZ;${0GZCM_Dup&x zy|Xq|+${p>1iyhg!P5{3ev|4}n2nOdzx~_a-izfHNm&f}fEnL~Spi-6!%@nr2@r4( z-cu$)OQaXc7en?T%L4j_?7h2|<-v z;n5`(ie-ATNC87Q1>E3W$O{arctM(dgFde9yr(iZH8hI}a}Ul%MHiJZmRM*Jc}GG& zcg2~p&<~Z2XCvq&(wb(&8A~mB5rm@M(_|NqXR%GPFo@r)b*UrDf_Yb;Bl)x4aA9U z`eMfyZRPu;zJMJ$(U=d&(E}bIANR-SE4j$|xMNncqpO1%8!Bkf!x>Om7HUSW=02{8 zC*#h+0vnE#Hyf2v)U6Y#{qQUCLL1>EPW}O%ELC$1Te@7+g4-{dYQl19&2G=6R*C8^o9S3v&!!~5)_-5C_sgJsb-zEf4WR#2Bh=AQUQLD$x9vLNu zyDc%Upm;t~vh{{tAs;w;J#u;)a~3V3dz8Ok4Fh)h(KWfVsG~8Yh1o{ViFOP6W72VW zKAVCp4;0X3|G0r@cj)LG-F{e-;O`?Q$p(rkMFb$udOn4CKj=;vmOx$sAy5&<9(|M9 zo;TZ!2pg}n?`c9@yAisf&zz7y7ut?Mjwipl$AZL_Q<+;b)j)i2HluMu6DRVYE zXAtfn`)g(>)Oc*H0?|k#=oGk%&UASTTO^D3-H%=*uZLs4^Q_6oC8G?M*^uj*hBE zhyYe`#hmW8$W9^54qryhC@N2}il%@3$-q!yy63P9$07nn98!Oj7$jT*dE}VjPLW?> zZ`^PkS-DgulSyH(vO#BvqU@bG9vKT!rjpBcFvHqda`BW0mp+bfOQP5 zlxTAnMAk(hj0BWu4VdExxxYDL!!UwOkq_*9Jl-iHr(4caBqG*`=QF&O6hZN4 zkqnpnaQAm`X;Oj#OVw#X$43b7C_32iBa$P*^*}nI7)S5QHP%7$*O}m&8qz^uT;5LU zux^Qu%@Z`zzNjfQ6plSYarw%cw(y?U4uriDGJT|jRD>9d=?H?s4}-FRf}E%x(#Emj zCn;wD_FU_!ei;_9Pvl!*Sc4YnLwkf_Ulo%V>05Ab!=bPi<2!~E$hHEvkug#zRb*h9 zZ|mTp=3xIlP7yrXO{R`s0wn`G_jE-J;m1D#YH>z^12a zl5TQPFz8LXh)Z}5MvwIrb4Y?Cmx2PSZ!xa;yR6O|mN?G&2%0oUXAjFm3?Ck^+Kcvo zd2xwIgK2>z@nicjwQ@ONIjjuLg+oRn76Um{xeFBl|`_FTOQ8xqI$yM4qZa2VTmx^i0~-89V7<8x?FZUvAZ1lX$rWv=2BtU zAm>|LH>u}fdwn{6e)tVU^mN{=<%Jy2<5rRP0NTd5St;D2>QowvM5lOGuzIIsk#42s zif1+7IiD1kJQ90763%8VV}?P?M6A!BXJ`(q807ZSMm0S`OV8ilzQ1ml?F#C5I#*U- zyDmLDgenYxPMk?B7CnmnwtIN`^6bcl@lEH=)F+)wx>R9e zJYt`BeEG5+yShj`!*qDHZg#h?pPw)5ahb3@^%0m5L9z(pigmEqcH9u#j(R64dHwLP zU0=Wa^Xs>Vy~DPiy1nJ0izH+@d$YUK!^0{ZQSaU-gvmPH2d)0;GbjiHEb;N(KR)~; z7V}nFYl9$?U(OQ2U8sN@NQ{ln7vQjX9#Z;bTLz$UH|## zAD{QlPyh3O`^$%HslC|kxPuvNb68qAWrf11kl8*Mcrn8yH{14dAAb7fT~b`GCeXo( zX)wS3{^uX-(Xd%AI4ng|nw{-g8l2D5YVzje&8K9#wE)s=IU$rXv>dJ*TCJ>~UMkt& zT<6w@$1ktP*6mLpurQrCw1A6ghZWQ5`86gCP!HSAjXoJi^T*b#nTJlW2FjKtae~TJ zF0bF9cH5P9N*TtO*#3Yg|| zaJ)=w98JWAou6LLjPlwepU|l&?(;#nXJ$Ic|N7UzW;t(Mjx%EIa-4t=Uihlh47sXR zZqpCrT{5HV*7InWkpx)c?*MDDw(Z@X$}%VFU#vn zV+;J8bjoQwXGX58CAxpILd#&_puvR6cZTcd&(GuhhnsA{yd1fGV6sh{${UbGA_3~2 zEuNmw604Jy;o|)C<=Y7}!H;&B&KQTeOby*4s4kbjyDy@vk3mz-O5(PNjARIM*x((w zTr*fLDLXvi_QM$B zWz84;Fg|dfh7TQP6J8B|2u!U%3c?ri7BK_YR3rR3^|Pu8`6C?2(U+SXE`_Rh=7-Dd z@cMQc*Wo=?`^7~W+1_{e=?Wdlbt8Uo%2vLnL}m(x_^Xe_ySV$9xzF|^%L)T>$N{at z12>&HzKIp23x^*gdHL!a^%G8k;YYRxoeye<2B)XfMrNrPA3OcbZUofmC~eBwoOzL= zww`Ap#T;D8Q7v}~fwN}@cx9cv_ z5edUwoq#mncV{g#a0@o3o(4azYLL{A+3NH}{fz<$HOLVTc0s%5)Cd1P<|W4f1Y2)G zp5HAb?((+p#I|zp@PWl3t!W?;U^m+cOJ})K;rfe;{P_B|N3BHyHkSt+qyT3Z`>Qwe^dW zaWhjT{B>?V|1QUydI=I$9MR--r63nk0L;3Okt(&-X4%`Kb~T&1k}7mNKb{5rsizW| zWVL6K-Oj7L)*HSDT8oMWsdZ zX$hIy%%llM*s#3oSp+5eTfHDG!;!GLvfqq&4V1wqn#%NWFz<=D@=mLmCd1~lyvKOy zI2C88*ejE^?f^GWd0v(U#CKPtP*c4dV)QB%KmV*F@a{p z?evpCv)Y7_rqORMQKFFzan*j1Pu$&FTGQv>zn(UyIeUeAW6U{Io47t5*CE46m9%jC z*YDpRN0rov4?o>hha4u?gI4YX9dxW({qA;Z&O04e(%FI+KUyEJ+ks-uu}2tu{`R=x z(sav`$>=9i3AtxBIp1Vbe0|2wlRe+gA_-t?a{T=A`EfI@W~rdOR9b3UvtFy1OW~7s z_xsE1!(~ulzn@DKJA-YAVGwWzVVXN|vuVJ=F3mQ{!(Fc004wTkICR`5tCQ>3r!8V9 z!s4J;Dt1PPH{}D>;-t+SESYI-FE5vVfsx>C2z`iBj!4ALLm4k^J(U5WPHLq8RM$=( zKYxGQ^|H4~^GT|a$IE3>Dcza4B2D3;LaH_*5W-SH{~oR9aoMb=6Geay0Tnw^M2X0T zca>=0k$V_4aGa~&m(&S-!F#VIy; z({=ZR=`GZ_#q8aOWT7K)c--q_LJV0CPQBBm&M4%`MrY9^fj{^;nV=&EOv7php;+i} z=$RIB7a}U4Mf*ihNW#37DehO@6>15VriZA_Vq!kTN!mqRn*j%R5<>pPXfxk@ectrz z#hag#MBs+f()qSlBtPFCzVLQFh4;Ly0>Iso6f-rKn!iK2ieL$Md{sZvbd$o+`n zWCfahWTqm`i(RRCJ`)xp4AQd=E809b7Rr%ivQFd+Aj1;nyLfp1`n=Lks$j=c3D`Kc z`D6iJ$~^w(&K`gJKfmu!bdCjqKvaR3L%>lz;q@PHWYUmD ztLxlSU}_GhJ9e$%u_5utp$}PENm-F}f^CKY0GLHIHF3bouJWV9iFaF&%LmSb`aqbe zuvmrWEDB#w#DU zzzxsR2TF?&J>gAgh(0cxe<_K;f)p4-`327V77gQNRq5`UciGhb&c|9o7PKHdL4TP++<>$l&&Y^Qa{dZ%2t{VBKF_cC))F0)m= zf#M2T!b#fq1jy4;Z9oUXHiaRc4V!`ruS zk53T-(=EKka&I(|{ak7CqM)~D0B33$6jH*BWIAWo4$I*01OWf zHzZaOYsi>&E;h88T9B*-Jbie*9(WU(_!)9+jj94-3Jt@LI0{5j_=&|gX@W*ezzI{D z>J51fuMeDZln0IiL}e~(zd_N68fyc-IPZfeMlC;`(aIrCuZWe@VJJV0#4P^R(#|3g z*{Qo^*yr<^f|1>7)VfXF-lP%?dyG^xb}ilE-{0RW5@KV8sUoy1VzkZYU`VZqVTGWs zS7+y=A0&+y_QzM<*lRX2pL~7$`n>0Du|IzP#wx=tpdKa)6#zv*Uc(4B!OA273<00B zuwu0Q;r71G!=h3A`0>LH<74N&C(NKS$9KJ2Hiu{d>?u48nF8@2J3?2P`-3-97JDYe+qx$a zt5$P)8N=p=e9aoU=d`0CjAhzy0>Q3cH1BeI33L z47(7HjY@;>iXKQPLy*ZcR(+K(b`OuQ4})4VlX@>Q!}2949GGe(lAlcU>!W2)6GXO< zQx1H}wrH-;ogy99$NOskbk@wV4?oAyo>Yw_ieIGF5muj$#o&T))jYo_BlYm#UbiE@-&Vu^`SYJ|&!;Kh zSrm+u1UzL!Brn8d1u!kvr77sUn@DgvlG_pC8~6f-)pov;1cQ(|8K}pF$esoDyI@-Y zu=nXZF0S?i|9Z_<2#w(9gk~r`3WwSLAw-ZtgSaaG@tFmQ$IqmlWUzCrbYG*Z=wJ zrxa(V-D1{tcZXl8p`QAO5`>|G^4EQQ+^C!O=UO6{6@Pkp`uz3z<%yK_jf{LTWYF9; z^%d-e1?MF@p@*Btug|?|HkmPl?@*HOoU*RXVKejbEya$3ty>Sml2C z6#Rk$!{k<*)TxWp9m#y)j9Rx{kxexRVhj{E*&Kh(KAsUJ0|$9yHnH|kU$ro0FQGX- zJwhRrHV@L$q+^YqfB&!FCeWlpraQYn9?r&~2GxAs?+xyIt398hK5iOwAQFsXV}H7~ z@818%yPrSudWXxBS+Eo30QQf+`~`P;gT&Q^rSOZ>mbP|ZzP^nr8QiCwOL}#9e0ur( z}5;p;q~c7WtK^%YI7x%5Re|9 z1PVg>i(<9-kjce09(2ED)OjDTg!cWJm`- z8p%*0ZI{5%;<<6TJ_W-PmOl=X z@Oh0WBaPE|SWPEYl8S)_z<13^fZ?e0MU{zGv5yD0cLG}Hz%#!ZkJ#|1kiyfj2}9z> z&JdOpnmi$-%WoskPpi)3J<0#*DqgB+{T>_y#Y~~uWCMCSNV!oQa6Ne{er27BzZ(+00JkJ zZk}Wi3&PPhH07Qxu{vB(F$y-gX^}&K9wW(%+=9_LV;eJ;5~i84AzK($mM|4kRikDY z+G-cYn$Js#CZs@_g0uro?x=1b-JH5TLz1GdNSf2gIImwSrSih628_lK1oU+kp16!= zPKKis7*AE&pTW4%59YVO%d0ZnOWl23PwJ?k&}mjCMv#%d!xKvRAG6%i>~LQ7O@J)9 z*^EV-F}1m}qa1cc-t(jJF?41p0Sh(MG6S_f19GJSj;SdY!jF6|pNR)}%5@s(dH!YaIt-7``fg;xbW=>In2#c z>OPS+%S2}}L$;Y?XgOY(Nto1c;d?U1kbAVXxb96&DWZZ2KL)z4D0-5Zj~MIte;UI& zEei%Y2oJ@^bJx)iRQ)!ea+9|coAnGVKZcW$p~q9lr*>dDgN$eenxxS-!pRc6VWJes9W~LuEyhTc)P(=L3xOUi3h4)XA(Pgy1E(REQEywkyz#f!^DY|SIJ__> z&7zzSb^!1;p(d7G5uw9+i?FTKf*NFU2f{tT&nLH~53>(2W*n}79QB}WHfZ^}#T@L{bNd0%1NCgi08N*rHjA8;RzYVT4ms=mv(J6nGX9h(9}$ZP6Mz! zpp4q`-mw($-$drR-;IiORldH?rMEqv?K@n-Fd8F=>9083Oq$3;p%>)HE*W;aZbOBw zyDl*CG=yp07SqYrYG-%?u$i?Q91xb!Swz?Q+L(5>Kk?Az_fi@l(Vo~JZud3=El`YD1lldFiKyKv-|^TUy>2dFh>&@L*oFDoS+weY zP|v46B<>;~hIwkotT$$Fp&&o-WmF4#E5 zzA>_n5{1(Mf+A0o{)DL=W!Ze8N#e=CV!3LC4Yra^f~_VF0*TI`rJ-_mrE#EdcP4>@ z@(g|^`@qK1vd(r+V9Y&p31dbJCq%#QvM&Bll@U1wATES0=(y~8bu&{$wkfEX7%>q~ zw`d2~#|Q*d8+f6)4@-f1mocQ%5I<)mUBZU7p)pmA+{%bNl?q?XI;`@rz2eOeCk*V? z;6krWTj_jsPf{z(=;<^I1)P#}pjjH@`A~cY3rlDwljyyj6)}Fukq*Yd34&J;NduK4 z&@Y7XvE72@g6SL14~>c|j8>dXR+<6U3PS|1mU7|1^PhpZDFnkG2O3fi%215b)&~*Z z4uf8!D4r^h4pri2WS_BYVEhZDSoG)<@CMoC#20b4tYc0gd|E982vMWN(c+BMnDgF% zMbifPcaek|!c)n6#RRhi_cGc+aKxtb$kYuFTIp6!bD^xbpgL>+DL)6!t;u{EU<0iR zUm@NCc-Oi*9G0LAarJZLAgIL9QSIYllg&kw#A6M{#gQIdaoE{}SdNXF-X^$HVM-!h zQap0Nuf{8utiG6S{0@avgm%bG4H+kUw8a*BB^petohd2ntnzxA%}=`qyz!;L*K^B? zO>mR9Zm3?}uDD!27S@>o4%IzAC8WmN6w*qh{NICg?E%uTPs7f@M3X_Hp3~IS9<)56 zI8mxmeF_@)R5&r1-(YBQ>2p3iJ-r{$j4lH^+Y1D^xZiOYSG+BlojUOA$WFl@W5bQ8 zRJoJfBBg;}qWX>n!w|l#G7(!~Aw^_a1nfCM z8PiWF+BEVcuL|=rO0x^sm*G1su);Emn^cp)g&c#iB_iGpJ;mihkMm6A1%{Wi18BJm zA-Mu1VpC-U0v!TW442H{qoSk{)T2QgJD{nm7O;ISX~#>D z>*#S|sm>O-M@UNYSSC1Xd!Fe(f>%ieP%mICwzDu)gf;%;KjM5Sol5y^!}X-#w_kqz zo9<(~ z(K8T9yMOtkNIY;jg%#o4tt>67{DUwSzG#MhQUCcYP&T1l&Nk0)Y?^MR;1_Yks-+R@ zssSpu_zVBo%i1g|u}Kt<{3w6;rKtMU&)z6|7MHF%Lit$j22?=}ubPh$ChJQCYjxyY z>@-scR#vF{dUV`p1T0orWa2Wqy;k%mBuTz*CV;E~7;mCCL0ck`%0*%G`V&M15gF}A zWAkx0ZDAEgO(TDY?Hb`Q-XLP53q>*Dk4_`V2FXzg#uVNV+b@nlX9PzgOX1?qG}Z+* zta)3)$rYh5I!i}Vf5=|lA)w$9JJAiYG>7RHnn=Ce;LBqMYP0$Io*7(O^W_yq__e~y z4=*6#sQW8^xI!YHDZlbH0L3m3hGuZ?f?9$Q z-i$^tTuU7l&O>-uq_uc#CRx5Gy}GW*+n4ugKPVgBJx+3ExzVyU5D76dF~Z`^mq&p0 z|9pb=IjkmzurziyGR_G~Ij*wj)S9Y6uo9eeVM83|t^guq9t3b>B2;^&XIHi0F)s0K z`z~8wMZ;)2xKV8;fWPa~$8rhCEkO^A5`G}blQD9jR;Y#%ckUj+h23ywL6CM1OItRm zFa|}cb)AbnciP|>5aQ5bD@mPv)@8gV{dN3f_k<5_LB{PL@)y;=y@?SYNv|Ck6J~SR zKhRqRbJiPjUbqL0&=}bWv!mq=3bz6|Zr$~E=gGSjgyaJ5L?mb=-9mD5h`^kSleOLI zPGobfSqzoYy@D;KOH0o57L|oXv`V$w97dMQ2m2lQU5=K9DWP0U3 zlZM!fR4N37{$mNu2pDNVINY$8fvOUZlyF)+QQt=iIe$EsDNGHV82BRuRtZbt zq97O>G7jg_&bXnd;iDmjZ>#UPKPX#OE(_qF65HgOJB+i0P7O`X!qN!o=YMPwxZ@~F zeqZ0KW0W1IeAE^U&6P2}u{S7d&KGviV}i2bU5b{Bx-WdBJOoum&qIj;ncwBehDvz> zIJL@!XyhWiJ?6JQsih8K4XUV0(E4%ZDtsN2+LQoRqIMZlPFdBMB7U}A0b^1)aR8fI zMh2WgBDVAu?5=me4%IA{AkQM#hb=S0E?T=JR|7;Rvs#oP3T>l zPWY!rHQ|w=TwrysmFB`Xg8lU19>66V!pcM(u|Xk>DpikNhM4~h z70Vvhbh>Czl|y?BKMI2_Kn}M%wS>VHBVg(6jvIPF1bU2VotleKOJ;p44Vl_#v0`cT z?Ht>Y%St>$zl#@wX4vO(&MHY&#-?b_CT*~jaN$EcfrPYx-q`;IIf_&a5^fa}9+0YN zXAD=SemFWsNdexe7Rxr5;995|@;xDodc(DA9NoO@lt!icp}5#6dO!7!iJLdBK%?&^ zv0CSK{g1~TY59ojE?ou@88ES;Bv|+M|G6(oiT={d@Ag?4Je}4geK#AVynsY;)P4_W zvjaHRYVtq7jJLlHzx@gJZ4xB%m*LpFn&of*T9~hkxkdJdocrVL`|`3>HK-vl1zZcs zTkK!2tLN|Hg|@5b;Qn7d=31uFL6+*&GWYE{*N5(}iF~S1uTC1D5D4n)%ApguPVbzQ5lCIr zE>Qn&4kNC%vo6Z?35EB>u^8~Fj+u4Bdv4f1To)V-ZNNrppk$QTwNQLFr2*sEVA^11 z=V;P!CVNFHnCqlv#JGMsv|fG?BR@ZErdQ2*Hv%bWPT9(~i-u=#DMykl%6zq8kd#aZ z!8DU9-N7nKxv-0-=bNahq$Rd}O#`>%LEU$Ge0z9s3eLc`ZmR(~VBXs*d@5su5=r%8+| zqN>FuVJ>IL+$Q9O>%*ul8Lx{pTn3(nEDET``+u=}ygWYdd0#2y#@ELu-OAA5Q7Hi3 z#t~B9a1ah21%+z4oXPQsDCH72My$Vl6ii~v87wPR$IRFpd|ame<7Yg-eizIY)#v8w z@LVm3|Ba(g$oD5M4GRWBJf3^JKWw-TcvsCM@AR~U+521q08&; z@`U90@a2!!m!t3z(GZ4=oHUOc;Hz?X&fMN~QgPDhR$01IZ(>x>!S=;kF_%nH(dEgm zDX_D=?hOwCu7U4B2KFq)Pm6Z$~02I;<4keN{ z=PE{k@5_pkw+j^GSRs?i1xO>)?J33vTv0-Ysg#7FU$0x_g6(GW^co3y9N8DE^YiP| z>t=c8w#n`VHVcCV#*>{;cOW!@(8Y3EY%)9yd%~4V$&k7TF%zZfK{T=r7VqU+c$8+U&ZdyI z#qAk#Mx+&k>3#oT@z;W5b$^rKrh=WIcwIbV+0l&_}y!{H)aV7%lsyt*Fs-L7}w z$?3&ZYk}tETJ>?P<8n5WgU|thuqH%Y2-+*8?+Su}2}tkna)pU}Y_%1e!A7o@%WzbJ z)5!|w91FZ0apYsRisqshm>Xa!o2QIcXAw6DUvJ|?qd~}}J)&th@vd<>FNW0Aj>KLb z*OB3z2FA-YLzJ^;8o`y7DIsBUK6Uevv3TlM@YZ;k7gYpwYPDv|PAi{IvKipr9U?yC zlYvW?SDE^}rg@_&qJ>bzo0U`>ESwi-gjC(6LTXCZvbh|lLfkhah+Q0R;yZ{Dm@tu6 z1-zmqvsb4+Ie19S8-rBLBQ3oFrdleHO51Qi~>-P`43+5&>|bk21Clg zcXC6?;w1$%jxUckw(9P9HkjLiip9=USfE8IlaSTplu&1dhOP{2LnL#>(wJujmXU)- zbOr)52|bV$Zv!r)q^mW;y`;uD8_$YUK$NsGazOMl;nA;gT?I^Y9;Lz`E)Iw56N6E> zje>Hyu}x;6Ek^T_QY3M2%n@{=peA2L`BU~Zv~6L$Cv%9S~LF(QgIjMWaw%CkhuA#gV7Jh zCNlFN*4+BEw#xMO1ncMX+mo3-H8jQMbgup{W|GA)KUeSjuMk}ViGl^J=Tcv`kuB4= z33EIyyYNsovad(4&P>iJ2<$CI9-K~5dj>)VqX4C>7Ok_-16IIP4@lkYL>e>N+RRZy z(C&GAH!ORygA@$2 zP{-r2#KDXZfc6kP1%gxmLc<#GQy-%V0}`Ut7{TxdaGdD~St)}dEf}Rg_NkT|_!yx? zF%&k_i}5$=q<;nHi=WF3IQZ_wmR^;DB~(9J<3T?*hMgf4*e~`}EjtIMySH3{R)PGG zljK+6R4NIe*myTKsp!L!9vI-Z+W!z;$0Knr4gB`dUh3rho{-aOWI$}XR1j|rheJ^6 z-~QM`R+PU3deE?V9eO{<-H!${m5_k zM}1LPm^(k13Vx$45GK6rPdQJrY^>o3hXbT7*kQiecDN&}GXfJh4)bV2+OH*hT4|+X=HfNeo;2;E4 zaAWq7Oj$7JTs9c4;bn#Mf?kAum9h&-$S7&PSy zwrI%A_xL?oQeGqM%fn(syaPGRc)} z-9wU2InbT$w{0Tw+)XlZn-gcI+CfLXqLR#xujdujPWe84m&18=HyIu*SDp26|BSJl zDc^ngHJz-84t5Fln;|3wy*@sJTxJ+Zh1*seIpPK7$(V%G@pdAJsaUvS>6y(`My;8N ziviuqJqYpSB(Ax?lVU|6bdbXa9;7VYI4&X=_vS9!$m7{Kub0kNrg)g6=t-5kT+8=D z7Mf0v`vVsU3|xFUtfXcsaj$i3pb(qDLJ~}E4^WjE0-sy$A2tux7 z(rqt)w$sc7Q=w2+yRB&f*dfV%Gwd$mmK2kjV0esYyQ8&43Cg950d^I;$R{9>@ZSrC zqxH(nJ5R=hDnydmh$)-=@gN!~ytb$W)S*JqN>am%ErSIb)suNURFlP(jsnIIpj4`!IuvGd*15@aQz zA(8<{4-AQ+XQs_|p+nAe4P7}uSTD&fXg!gzM;!+ig1osZc1E5}m2Va&qni^qgmE}z z!7LY-zh(zxQqL&cJq)kWT%d~1#Y`G`q~8x=x?>erfl@l3%A0ZFX^2kpDObDjyZCW5 zJDke;CLhTK1#F+}Fvo!foV&ucJ*+jtWfum@-=HZ4P?PB6MRurv8oGUBCNl+;0pnP2 zZE*;boQ9(pw&=||hEYu?@m{yC{|0$w=$YIkfpuC4@{QQFvtQUh?aa)>C@F+Bg{n406^n5n{0lt;E(u|b8MUj3)+SQb)QIhYx)l>9tb@41N}U7=~My!;;(Xk7H@}F9g@HKsic;>u`i%wZ}qml6p4~R%xM9y#Ve!wg{wG z_(P^@+9iCiHYgEY`$zSh56GI9H>^rbR2xkDROs$mI?$j`C_LB|y=JRfl4VfK=E;wlz=!xeKN0Np=Ohj6*;? z2xv2yT<#a~kpT~wO>E6i1E!S?7*~Hom<6WeJh%NzOVaDupI1S(%xCtn^g=g#br@pW;_3KVyG;Q-6= zd19pJc83tmC~oXYRo4IzYaA+q*qQCeGSz0IIo`=GD%G<0ARqt)%?|-Nux4q}H=%s7 zTxdJo@k_|L8L?}WagGyP54%~;H!ny_qq&N=$1D3zmLs2A1|VdYZr^CFW<%DYhzG=M z{5pf~UN>@AyBT3H?qO(y8&yt3Z6(_*Dvz)#0DdMcjqxaFIHO>e)KC6BslEKjF-mT!F_S)4< zoAYy#hwQN81DG&qJL`k$8Wg4|>J7_)(iq38!8;Sz;$j$EH~hXsFb((~t7K}!yIfHu zz@!Rtr@w<3Tt>U6r>E`q$iQtqIj%3e(SmucLL#v^JgAwys>6HN;=7{a{V|#$W{s-;h|Ht;nKG^C2shoIxRMX;meT@?aP~ z&R#CFOK&qRPOB1lAzK^19HiKzH4t)>MIjp30!^JsWo)%Jm7uCbkXQ%BHan|K>Z=YV z->S5zbf@(NiRgIO*;Y=8V`N-*N7++ez{BwN^7rwt)9fJK=WiDKeic+&D);Slx7%J8 z7ZD#TRMA!aq505}6F8c-_lKq)qLOLWHg6M)0|B)e@|s^gd5Q}elUZcJ;V zI;O=S#}yn4P724gxG65~w;v9F-{!|HumXpd_Spn|*0+BKjb&rnuWp*MCqzvxYKzin zP?{yq>3we122b~38~ge;c`a>5(Hs7>+kyvx|W?&f8JU2i<{E0wkV8SnaVWP$PP6mG#m7D9@x^ZlcYlN%d z@cM9CS#%-I^;odH|N50lZc<+5wF;(D+^$E)jm>Fc+1O^6)$ORaG@`4Xs$SWlzf+Np zjV{KQ{$5+N>dw55&ZxG}Z>&5u;36yj7xS*%ua1g`^t_>%=o}?_Nlg`&A?w0N2b9vn z_Y0dQQo-i#oSVBIJFQi9-B}Gw4~at--9b`!z;3;5ciG*0;(h94Mubj$V_z$5*4ddK zoV)8uV^Q5@kJ+`*+{(Vrc4A>!H)wmrjjCotMn<*nR8r zoo8fpWIS`KoyykBwtQ~x`GLzC=9$!A*7=%N`NDVa94`tLprS;{(kjnnQwPp2Rl$b@ zHmT2qR+Jx_qBPtd>Zx6Fm)mByEw$y^#ILt(t@+Iu@C4yvesd}=`df@P2_L;fbJyM3 zU&FZ-P+y`k_BOp$ersh^j*jV>t=4a{H0{sobC)|Zqkged>yOLjZK3bDVJ$xe+563U zOuo**GAI2KZr$t_mjyG^u1{DR%}exN!_q1}1n#yw$#JDKtMQc|!$wcz6Ar-a(t50^ z@E!fv#&hq`*>^7*E-$n@>vm5i(Ye$7K8C8tjCP|r$PW^|Odi7`(<_#`YOVUHj&-{z zol=|Xe$1^(@aeF$sI5e%P1 z_1(5v#%poW3p;A%AgIk7B3t-il&<%RvRuF3%lF3VakJnc?q6#Wy)oK$ckRiler|iGrm4L0_q9#Eeaug2xpF;lY`fT@N~v^~ z>1C_6t*j^YOL0D|ZtLS+Y1^1}Dl-X3{nnzi8TYFT1*51O7*c^{=hCZGEJ6dp->G%7uOcWa!nuW=aLv=3NE%ckabDh`59t~_o`Zda9g$wgs6 zY)TE6LG=>&GPb21ODw+Hjdew(HmOKR71mQ5THSJ3fV!=*d!s+A4$J*s33yRhmxMnL z8i(Qpld%iY^Mm$%_tLtyZLLkUC*4DH>oD8_yjJse@z}}F3d`JZR_hn0qSxAsWLLaV zb(~+&A?J2vcdbdA8A-Le?KyR>PyJ@Gg6f|`27DFMw=3WGCWRi~I?Yj|&^a|*$!5RO zyWjAr1_vEps&#$m_=yA*Y4Wh{_p(*tymy0rEtB6i`nQwL>g3^W5AET8_0U+;;A3@| z|J3k&likvx)AD#Gca40%HA{}GJF|w#xVGLtdt>M3$uxb7hq?RmmIu7gM!D zJ2M%PjDt>UjF=GG%s2<-eyQJJGgfYM@ld-?`mHM8uR;yqyDH{0!cbJw%Qs?@wU8_m zW;qt=Zfn{(os~Xk)J?J=R!ZiYP5NM66E%Eqq?FAUI@>FDOOSon^An*~w6TrZykEo| zZH|xgB^H6HiO!ta18x&Fkj#2Vd#x`8reyll)wr@mBL=V4ob1a|g~tx$&FaY1O)cJQaJVx5wpN(C+pB`v3miw#QHq zbX{LIvYTdPpvdHq`Hr9%-l&;s%fr!)(n+gLI+bKfD2vXh$n(3>68Wpm2e|hZt4=Og zQU@R2q-m%P3jO{HO?c5Mcudy=2aVOu#i@Sx(>*tL(E?5gaX5lLNXFPnJYK$k zyLOE~+x6~Rvd?Ju^12Ulk4EtH)$iLM25m3#%7m;tX8PpNU^tR2!=%f1x1Z?u3Z=xy zjE1^Y?NP6`OcaO9u!krJg4d!?n4U^u@SjS344q1M^YA>c7aX`Cm?hIss;=Gh_e+@P zNj?@Ag)OBR6Te9HBkE(lW_yLHYR)Y8dQ>ge>9Iy^vU1VCZ}!Z9G8GJULFHW90FDii zTY&+N795ilTPTwTr?nElCQtw-WHWd7RT?X~Ve3@`yd#LYA&_vrdwTo&_0X<(tuNpH zd0iQd^Y3J7zIyp0YjrE$sWF{2hgY|IREmwkYSlLl9NIm#TIS{x!(MD410T+{m11vQ z|CBV;&oox-PZ%Uy?f`E#7vov|?p;z|$9gRT!WiX+dm~C@moMkmG_0Cw zNU}S|Q3B=&z^wba%qG zFPnIuGTelOdB=u`;JPYS(YRl^`Jca(hRt8!XD8E2hfq>Z02pn#8ZIwiu8UrYPY02i z01zYkEhWeLyyfq;(m!pNlx@e=@#T71tyNyZ0Iiff!*&C27yz1bQiZ^Vnsaj5wP6|H z@^Cv24O6Se_8;fR`0i7Fz!j>~=l%csSz3Ij!-6c|uT$f+%8c|F*>+l_oh;uv>E5(j zTwad`0EZal$i55~dAf1_`uX~B*p!RQ$FoKd>w9x~UHrhJSD^&{D$ttPaKVCx&RtgvIxofPq&4;j~`0|#!%hV zuRoQ@__)unM(mYoQNVsRyXdUgB+s8ce|>scwmLQDUwas>OR740{rm)0(Vi|(R9?qL ze}4LMrVy9!J>4CGnKRG5%TGa%_SkKXqhdA(UVw;lyQ;*R!+9ciL1*f2=c74a z5C!+!5;oXy@Gjd7l%xBnM}|WnMtIby$=nI+*wH-nRHp}~hGik+E;)AQVgV*3b_djO z8i&ib*Iuzu8El_kb~x5k!SSo->yY)e^k+l2B%Zn@mBwQ*i@2*@$qriu@V|}Rt^1d1)dY@%kds| zGWE^#b;iwmQn@cqdZo(nFjl;r=W%_Rgs+C++*FW+8f zG*$E&)q1tJ|zDu##gQg^I%d_Lo z;0JwqIubq6EZ_X2ygcv9fBDN@N(%9&nfTN^^21PfOjb`@knPy3UB12!3rXa-f}*Uz zC*qZv+-f3jaB0d5glu+qFZ0}o+@#&zznu*2sYl0?rpA4*Kmy`lXE!O;jT|A$>!nr=ZV=Nys|rKBQp`~y}fND)55bv0y&u`$IBp>w8F=m z&(FReTPIK{Tp2a4g)`0*IIEGLq-sY^V;{X0XQv@z- zNBMvXW-rUPXqXVe(Z=K3pBl%cHuQe z-f>1Se5e>^t-3`TQ7CPMpO#~ma&wyvgTJm6-k^m)Kb;sX!(o-KMVuxi^Td1B4}}u8 z_;Rvaj`mN_26N#wE!3=&@a%)LLe*1KMFU%h@OFtIO?Tx!#Sr(f#rw!P-x|bJYFu^N_= zA3EH;)|^I(x%TsFYOq6OzJ zzp_>DonKky<=V&!T{GCx?&WDLd<1$Mpug@V^Eq3K;^!gTX2dA%sdM>{|9qLUc-Rrh zXxRJHMkSr%M7F3TirS|_w$|=#zyGnWX8T+dOiJ-KrSrgrhir@uBD-~72!#TYbJ1j$`y1gauK{v&JN9TzKt0(c)0Tr z!Ms77?=U8kKu4$SGDnSJao)H*9j5XK<|H?Dwwp1r?hPK-qiVXx8D+`Rr5C|Sg#__o z5D!SnI&v{OdahxuYNSZiCns@?gySXrNP?d8ebN1orM@p(_y5SMCg#)H{X>JOx+`~8 z6eXWhTq`sH`0Jr@_cMK3khq&oi|RP$Vibz}8AUSgQL$(Ko9#<^03 zVN7wj3!6xZR2Be_yV6}MqB65tV_cLJ7qMVF9yq4XZ5j6cu|%!PeTL>`CMDgWs>UOX zYF7DFaR^T5Qq?pUMAm~;&1RR^C&`7?ic#ql@fTc;5D|oqDeK?theD~5YizHxd`7Hs zkB50$K)oi|u2LAi{{>92;%(`i`xoTq-@K7U_S z9<+ldGlK0=RXDWDqNr4-JY;KGHDz}(Z>1AWg0wIw=$zg!o6T8~M6iu2Q~dBT*Hs_) zE1&P$>faXoqnNl$$Pj&%DUT0`w8_HYfRs7R7Pn8AaaKaE9Yr_aMiv2AHOsfE8dU=)|@_DssG5iWrVE+7RqKy z6a4&7553j4E8@yVpB->tH|Kt1a=6SFPZwCw{@bZ^lWMD>;7@e{f7@1Vb$z5D^krAa z@%@Lp)~cPpyB84J<3|BAq+FYwWt|Tudg8&nlPfm?4?$k?UYEK_Hio@sNN_t$2*E__ zw#77Ggq9?dW`J^HWfaN#NMcy*)~2b`Wp#!?eJ6Q{C5Fl^{O{N zeM;Qk6+89Yzui~o6LGQ}V1N7biB%7}f)OFMeY;CJa6OOmpVF;)M|MD?)Mbe>-ac|% z4IbZye{!WddwS{L{Ub$fTIF9{*jyLo0x&GXXZgxlbD0j;w$jJj7K-PPH`M(5ZwIvl zvgyzw?hk7Bf4`}3E~|RFs*XP$XVuR2pZ{^jOW$5xa+U64JILLn)Y*HoMj zXxKgRt{%Vt^#V{sSa@Dl?;DFn<Do`+F;Lp7|1#C(^It+ol|#UXN@Ml7=~|!H zWBI3F(m{BwByO^u{kG+mPp8|bB|Z3{E2DgL+;$$ay%lb@2QmEmukRbGx?X3y?WAwA zJ*{HCv!L_fW`4Ook<={z{GW`eppaZP+nGeJQM$cLnVweiH+MCrlGR*e`u6R8V|coK zdfSic6=u6^v~BZF=9l}r2hDH4dw70hc)WZ6_S<$>9>Q`JoBN|p$I0USy+OzWp4|ceGf4lt9Gi)(0;UOhDD6*gu5Sd1Fwevm)7(`e@ zt>uvxz?d}x$6MTE@cVD?@={4fO!WD1FBEi7zr7!Z*eGC72ZC`qFDG3fHeKT9dj~*c zINx))7Erp~zj*P;)2xyOiPU;{hS>2K%9us6o+zSQY9v14{y)r3DlueHnBAwF8@!H? zn{jm#85l}q#3Ko{g*rcnFuP*EW{IGDh-MkD_m`s?{^0`Zg8sRzocVIt7*1yjEmV1h zXBbjRa-vMuoFPpzVrs}~gTU9EOc8U|#4L(z4Q_aS@)^un)~-?f`-u7`BYUKfsq=X} zScK3kgqj+EsE%$J{k52LK7^(wBC8RhNblLKQR1;{78X&~37T`)6}iaO)$a28eAVzQ z&M$iuAuJ+ZMeM_Hy`|H^HJ1j^z3rF3PPlClLw;u^UO=Hx)m^kEEjGn?hjnIrW2Ek= z#U%VKiYZ`^Jn%mB8M~=suW)Zz%sREs9EWgkMDE-ADcUN-%Tkuz4d$LXA+mF&B(0B^ zH}=}I4vYZ{Vyx(g=@@r%G~@-}45|l*d=Bp@;IL~Z5F4F1bW{TuOSV~z#lVe}wflsj zF?Bq{swEz%dU_!hgfi81le02OK9|~A*GpmaIBIh*UqpYST_UAGsuqF{EuZ1qnI?_F}so2}ar`%o)%|r9}sz*X3=2 z#oMiPumdq4xV5vvYqlpy!2JnQydM_=S01b!ST(IigGjtJ$@0YWJpW@m`k4`y1VIrz zWX&+!!H$mh9OM@6W)bY9$_1r`3&Z{-sh8kpzK}A8bA=a*hFAtXS;AAgglt#|dR`0?l2^cEI{UF_mQp>Beqp zHSx-9Ee19ww_!v(2K*u&(ISEN{I?;bRDbklyGOY)^9VL%(oKMX2gggANzl-S5ylhx zTPg*K%A4zeLRh?n}D@5wB@Zh*sK7W+3V(lIH!G zOj)UT;+$01OheUWRJdbhM!0@xQ^h~Q(yh$szPYNUQ~7daM+PI(^AsWE$KkoNJErMH zfILcclOS|CF$u@*v1&m8dSJzAi*7S4s71z%sdJc1dhIg9B{+r*K8XC@Ho(S`1@D2Y zyu9iD?Xu+r_4u@>G1g?%f}`H3Kimju$pl?4Eke6RfPe%l7nRb$N#b#bZ_8z0HJW&; zU)%LP7I>=q*7>;qT3%HCTx|cjU7bt&S5YJFQRB9Fmrcmb&fKPxx7{S+%l9vp{$cj* z%kccwk7`}GlJSK!eIDlJ>_#pt?GO$Kr=!;Io9_E%`i9t7$5;np-l;NE6+X6|Ug;k= zb%W94aN1gY#nTl=!#Ze);<6Vp3iH`TL*$@BjC|_J_Bp?@z~=XAC_J)8!ngah{R%hh!!F zq0|xM!q2U0M2`+V+75ri>_&rLJWrgG*@0`WWlpo29!{IC%W(VhYWZ^^v4{Gl+hWG( zCvO_mF7+bR0g+0|Q<DY*%?M5S5i1@Kp~o<;~2lIwaofPa_> zJ3?y9B^1~pPtbHBuuX;z%q$i zznNtVoNpD-@ZH?@ekqMm&MAdM^iXEXLL+^AK54$T+sD8DdYSmbO(R$raJD8Hmb$w- znARWA&})PJfF`NE5Ro;u!|WMD(>e=@!p%<~KWB>FMLU&J5d~n?Z=V>HH`*qA`d)L1 zZiyr(-I<--H;`O7b<#H5UVt zs?Gdy-Xw@90vW3Y;LEc~*m8Tl3ip2h@;VuV=H0$)dbGo};#RDc0KE%&#Av|IFNwKUPXMqg)!pRz8(V+@zApJJW}-NSHWb zFdiTQlx{eorF?;Yc050$zQ2BZIff$TvY&Ou_V%Ta&Ia@Si?Ut_=kB_}5I;U&sp6R{ zp_eV>)~!y%)#-`L)zj8T;@si%}>&wJg zNPlzOOx&NyJFX-}A1C3-VaaEWGl?M6#NEe4wRXpxPfH~hWECprm8r2NAo1}&7iI>O z1{w!W-868Jy1V-u%KK!k$r!r5+CP5195z6`J$bE(^J(8#O~AUjCh;;6AA347Dc2vL z#koH|g2>c@i~S=v@WY%p*?K2&YOx!(ivO=RLna-?a1<-=0usj44=RT7fcZFJ1X5C5T z#nKNKlZoVgse1qGhith}zDwNZ%I#X8?;CG4?r4YIZer6+jDK52IClf8)a0OdQ zU7;rsbB?TpDr~^6r>a*)IPkx_xw#MNVzug2PGX7IjcXnXsiGvQ^_ph=e7O?MC~%~q zbvT;UORe5&r}I>Zt}ZJ_2}uHC4L<7Tcz%BW{^iRnn{(k8?h$HCW^Z&892HlHeE8>~ zk89L&<^--8Ao2(XNYEbEyCS^ENuT(?s*%~JRxJ8b6h{6VBt=tjWQT zD8==jN{EaNTnJ|9F=dtUOHLM2a-v0Ib{GN;0|fyrOb}2T*ctHH4 z5r{f*MoR1pBNNeCvi9YSP3KD?7rHd8k-9#39E$XI*X2Q zoioTn)SDv0IQERYxmVd-bS>eBDEN+thTll|py&W2h3#B#LOkmKn-Ja-ea6S+K({0W z4d<(o=Sk5t{L5`jd-r^?L)h#mwzNKyi4V6>2kG2&YgVp8NE{wxjscsNSw zu(Y=7^l*2R)P8-WYGqHW8wd{@3#r=Vr7T0%;)HsmP@wmQKbuX!=owtjUyW(eWWi}b zkHxs2lZ^R6pRh8fe8ffsK6+=m)gKKL`=N4!m>r%GT-H*V4Jz10iB;v-pSO83ilPHK$K8eL0ZHeW)c7QOID`^&Ft8U3PYM1Nwt zmW++muYu5Y`x%id8`0`4euZ=5%1iG6x8)dAv?mL=?k8e+Z8vZJgKV@%UT4empB4xY{0{&^L-U#4JsTZeP$@ zKw~^XT8si?0^jV1=pNATDRWNqKkV0d29TWieoKqq5{~JrwPLx2-o{76x(PEfMo}cU zyn?i(`pqzrWa;S3xNX9<*&Ft8$o>6?Ay$_CM8v?Njoo9|%MNVvvM20P@N8r8hm>2V z27feqVrLNUL-r9o!RTj2twp3NNpvR*z&rk7BOPm;*tOlZxth_#dq{LowYpIwP$BGk z15A=58IRLK=mNj~+w_RmmkQcm@kArl)K|2B;Z$Kb2+#;EBS{=&he!en8BxC|rPGNM zhWV4uMH6lJc=l1{ctC6eY@x0rI$#K2JFMsc7qB45gd3H7MuJ^HS%^pRM{E`9EXdpb z?fcg!9?zT^JZ1oup_6bra3N0;P$YjQ7y$J!=haAV^Kup3)K+oGI0JQgID&Q}9ax+( zvE+5XKtgkgQ1`+&ed1^$<5gpCGsJSj_^2VJHeob;cklt2NQqq!k%~ps=3>m{b@aq* zP0EEOL^IMrxc{Lv1RAFxb%aM41M_sE!9emY$S~%lAY!6Hcq8dX0kmKiZzvP8bW$sA zCXaI)5BI`?3Y1rpQY^xdNIM5(73;M96=M1bWGYp-yy}S&d`9+@nXetqp@3%5XC}to zgd!R|$FpoiXO&9c$vCSXMRyX(;&~D)&x3R1&fBYqp z3iTz>T~E`d*V{cxYYrP==5kVVag1PlTW(NFY$+!%Z%_TdeJ~=xtTJh0wtJ8RyWhWF z_l=xhK67*T@tzX2-eYaz6|2*kwokf+pMLsq|8R@Y4i=N;cDf!k^M`IWQ7BgU=2h#X z;Yon1w9YMn*et<5YO~2NCDN^9{3y;1ZEDlSew64zH~VzM;h(J?z8=8V_^z9N0B74o-bIZfHtT0oUM;H$L?S-Hcf^Tl%=aG)q!EDljvo@3YI*=)&R<5=99H!qJSB5o+! z6V*3nWmwtU{E3brqgzzri_77 zLc4yd{V<5x!-IoXa+J($BddP0|Zn2 zEGRB_lm2RlyHFi>rpM#K*seE%LT))seE#@Lx>22n(r&9n>?}46d-JIZ7VHdXwwz6b zZ*yZvmW!T2207VH3`gCz>{7Rix#w@HD}mewNQ)_h?5u9PH#!PHTCJLQca^pvl9UkK zk7+=EiBfsJ=9P#^8nhPgR-HVKE!Jte3^#589h7sS3RId|?uLyWpzqN53J2TxNYd`~ zaG8>m3N~d&Ha{#|^2Jv$*%}W)b&lk6RI}^v+sJn7G>sKq$>rwpF@&Dx|CRB&Ud88| z9Txp^c`$4j^2rZ(xrfT)u%-zp2eD)^E2KD2mg4jn?G~Y_U*OFQL_^B8RXiCtObp0( zYYEyEx2G`p@kBOGwMdVrg6!l|cb{)SUZ=O?N-EF|vFAi8hws*3O(a&}Of$df)QdIJ z1MCKk%1KCEGCMhc{pas5=P_TA%zbG@B55Pny4|Ie2c!<{J{SFYTL7Umn>E7x3`gWN$aN@ZUxVC3P?F?|! z_nBmF!Fx<0+sohnYFzpJauF>Ngo2Yj&L*P5kqLQidm0ZlA~5}C-gNwOeSKMrxV^ux zKR<`*j!PwXdsh>rVH+1st%h6X>;2L8vRn5`H~;wekGK7^U$wxnsU#}x){@?|Vwm2X zJ)T7Uy7PLm;$kK7`!Khn)vrDL<9@K(60T>eSSk=wqm!k)xsvM2c(a!) z3@{NQg}$0-zdyQ2&d2o#z#Uhu%a8##Xb`2SA~_P!SvS6&O|TrzF*FCA?%~8dcQq3$ zQG&}nANQeHkBWspoY(wf)~HffNEvSxyA8-gtC=ngck(MH>@B>J27qnE0Xmz`q!luU zN2}cNKu9?Regtw99D`({iY~Ex+-;o?KK=M0pM61u-^Ps+{-v96$^jy2>v|e6N~TyLZ|P5V7GSGnnc5{Ca8OY#bGaRpuDH?jp!# zfsSyWvam6s(>b1sjqZlET^W<#PU!#|nL@yo6_U;Sgq+%ugl!3N!Iu@;u{XK(bu72@l<;21}D_b><`x zH7p)|xd<~{9=(LPwdLz!HWzEFWEEq^0co{)Q6`jn%Q0$~jKq;!i6CAX&N^g2kPLy6 zzZpy;NwwvOuMhY8>+>5PjdbntI_g0)uxTZGo0nH91wiVK+ag<16wG*^3gBi?K#3Xo zz=r5jbm1{9X_gZO|2>xvDE=H1@?L$=FJ;1-dhv8U24UMoN@3E-r`;SJ!hAoRg@zrv zyDaOq;MTYI3O$kJLs^u>K#qJZQcpk?!N#!KR?kOjb3I=P2PqO`w?ip6nfJ5O`2<@m zj%soq>t;PlaNdO4ei)YdW(*>&jqn@Sq2&`Y;^%k}CiUBc`%?o0bQTm~xZpXoMG5{m z-+JERPL#C^w}I2!Y>2!!Fh@>iW2I6^ zq&>q{rH2BCX%MRa(_vE8>GB3LL5D+6!@}(VxG@Nx7JruekoZ)PpSsw8d&ewS<24;1 zAR#q#Q8=<=G&tR@{&p|1$oROQ1YM#>jMf)@_3>R{h&avBwQ@A-d+jy%EtzN5~72%Re=rbTze4-iQM@EDG=Cslr zwhE2;x|6uY&;xe8UQxrl9jW3>yBgB&%$c0P?5#t>_H1l0%O|5pWBg^@0NOB8xm?fB z=W#QAm+MbBs{(9Xz061EIi+-U)Gy<8|Mq^_Efnu9 zMGuY>o&wl=%fTB>@g9wR`}Abw+PhCrgvA!oz3R2u^%?9vRWjV=1HqZC8b#`lg^ngX zIjKzdugBS9-+#Cd7Seht@Lt^Z;pMuh=L=c!l#VVlh9 z$(u$xftx(Pe!t57m`0*4AYrkDCG=*3UF)2l(zP)S#(IAmrawwDHAYxsk#JLCnz5At zBs~iZU||HZIAe!Z)w^LskA&nrU1lw@z{smiC4t|13cL!lDoB7EoZl8$bO|ioPox~8 zF%r~y4w3~B25pMdhf$uEuGLuz8)N)Dc3;O}8Uukjtw4t%HYzS<3@k#;j0z2!_q%dW!$hl~btE z)=<{VJTx}@A5nm`hs^=6ITW4Xd#q%8DuKAtPsf5HlML-mFVtxnI=Zn_U#!ZaY&R35k_b`k@4c8}zmM`gk+6tlr?Z zsMHc0BJQ5FBnD^a6DJdag0r{pZ%7&4LTl}`-zwz?RuU&Aw|T9igoR86v?*T<4RJIm ze7vcb^M%oFDY#k|>wS61mhgi)8U#IFaqc_ zE`(=(mHWP7H@6&(W+BrCyEB3r)asL`W$KdwRqB&_OlqXYv*a>Yoe$wJ*+QdQg&bFr z0ty@-sfR$}j?lmaaH6*)M~`#B?B>n>j&L2<@I~u9-d2g+k$Waa=Iy8lUaac-4#x$o?GwaTTJ65%tA<=-8Gb)H!%Mi&;b_|n8NG_tEpWiQQ zwe4iEyuM$SGqGZqqZWT7A`JE~rsSmK;3U~Kmt5BJ=qV_bV>J9>E$O{C8eJ9Pr-wY_ z!Adz#ZhD)qmNR8=q#nCg%|T}ht|;m{gVidMV}&jAd}KwBdh??wyDg1at*P5acsug{ zdVV?01ifEIh0*gFZufLqbY@@9n6Qr8h6uZ6cl(4(YCx1Lb=&3q!(Gm69QJab6JY9x zpHrp8O;zhmDyYzzcB;AbovTj5=rBwB+edZ`B92KK=hNMJD<*!^sVf zZ{K&e9tp?j^!DxL4Cln1-5k;QOBFN&r4DpNYxKZ9o|Ch24>-L+JtSp2Rd(xT6qyml zZE#0?S4iF_?tjTm)}2aG*htR(RtTatr@rN=n$`KOqps@KC-l8Ac&5Pz$!F?L!msX3 zF}C~mvZyrIFZ?9Ge);*IDXsyuY2b8dnahCjw>#=`a1d?JguRx7i2<{VpcLN$op zEBv>y>_G16WZgN%?>L*xRmHnT*qLp`d>>ZasHBQTMP+yX^j(rKcj>uA+4ry5D38~z z;(K$3fg)<*1}RbiiRfv){rbEd@7}IwE}JK1qkOZ_fLHs6SM8BrN+PW}=J8P;mcVJDK$Y>F zDgyFdfbs12K9X_dM${0mC4KZ_a&sw5Vf!8sUxTbIutL9t69sW z2LrKle11AP!>XwVRKULX*Q}+RP??Xn>HDAl?Kb>t`;F9H<{`!M2yCXtwUNh~6b{fE ziib>C=j!-)CeBB5>f$0@8rFv}v&*9)uV~VRta;3|(dhj4E&*%Gm218cQ}FG14LPcs z=`#AAUpDP5o4)+)L!Ar4f>a8I~?!!&)>f+yG*9%lMO&jI%vOF&Na0q zc$0qqz)={JeIuH1gRYZM#4IJIZ#JGup7Az4H&(ODTpn`0nRDL6`Ls4L1q>9WsKp5z{=p zS!F&zvLL1MOJmxCx2AJ4wRYvZ!e)yjH+@4i>S>sDrJAb`Q8bCgos+O)CXl=1s-F4q z_ka84UJ+3JVHLg`_^iotZ}ar!?fGe^Hmy;usn{u72BcOS4(K2_3;_+(EU-ioovVq$ z4b$ND>z6kLbmG&;dj^iW^Y#AmFt_51$z&SwaW7l>G;$=FsEBVkVkqJ_2C0*EXUZh5 z>!4}oA5!T`$23T!b2-PwKMDx@)ctcNh_sg?b(c9I*Gt;huiy98bRwI_A}qz2 zQW3f2zAE@WmrN65jYa)1`G2NsidQau^?1ErkBe$5g`?Kmy}d6~!ziU8DHW22qT6Tf z-peIE-IfND7*Sr?_9_@47MlG?s@v~IjY7s@mmfX8Zfog${=@(HMS@T(61O&&i`K4p z^N)`RNz=>Q*YCfbrx4P(1qgt5=SOhapq~5nAD=UW^V{p*sgSz8$8&uA`hHX^u@&xi ztpsHelaL6mi{uH5Kafn&oyw{RNdi|`S$9_VxXy3mw_4KuP_pP z@F8Le`hnSkQ3-{n#XsdwLfL6-Ix(|Zv=aAu!iGrl8&q=lxJ5nkzX&=rxejkukv*|Q zA~z1NVMvjIeB5dcHiubD+$F$t4?~M(=2&Zwwuc#ta#H+j_=>Y)1)|kwkMFNv-%e}z z4VHhsi*0e3G!plBNpjw!g-zO=C9U9J>!cm?sa3wycXKf{v{f$a)%cM2dYQY75m?OE z^EWATQxhXfLEKvIpftt?_H%haG@reK>#?OzMGc6ju1%1-`f^#d1w}I_lRViQcf+c- zZQitK-cXA(bOA+A;OkiWgc5}W_dxIPxE|z-AkK0|L`DG$igr80I8y zj66G#3$e@b{S}VszxJ1k%ANd^Y!;9vEtv2vecUox8Gh~Z1f;=kO=ECdIS{VqXc-t^u$Aqjmel<4&kr!P^=?loi^x;2VBUj>JFW2q7FS6mi1~&=hd?-4Pq`;} zgjK%EG_H$5;^tGb+?rjUuh;Vi_k@Y}aMkaNvY1_7-=4PY+`E&@lZ=wRfDi$sUP9J} zf!%{r<&p`>OTdsw#n27^ceeF=BWb6tlwuLNdkZY|DCpJy-VrzP3IZmSCs{5eo|D@U|Zgm*dX71|!kE>Y_DR z-S0vi*{c__!gXHWt}+0vo=gB+jtI!Po*2rT${3QnKG-_D+dIM3D-{$-k``i?K@UgW z;D(J@-D;(~Q%?#G(vwAm1-xI<$W|m5(KJyY30=(8z+$MWXjJ%0!}XXd6iFd>|Ld<| z5dhxBs^l*jDMwzmLs;0m`JdZ{FZjrI4l0vy53D?vySvi@o1j!mxi*$ebnr@Qt_7sU z0FGS9l6j0}HTd8*sxHs4fjll&9(#&~lDvUxDf98JfQp2pzzx95$HxKy32TCC*slC< z^7preA`}Ya7DudJ$afbnUyc){6*p5#z!o*@T(NrC&-?81VBeZd05|BJ4F_6%EHWZT zJdtoGon4?+d=WIN?FQ{tphvPGoYPjf9^)VBIswGTzzyBStbH(x5Tmd7Rk2Pa}24 zFR(h@+V~Unz(8*)UsYppI58=0_zq`*d}z1XZ)v|7QWnx|=aM;aawrMAL9sPN2_b+x zQXGiFNxIaqZZlD>YDi{~U~?e8eZjc36sbWYM`11JOt%hj6sn9EUiA~p(Bep_M9DOl z#M(s;0?6wLO?X4d8hphX>9JuP+HK6=acGImUEb29WbCT*0Q0fJjXjvSQ;r%42*4p- z2nR#Y9ex7Ue!8q(2fl%#6k2KQ4Q)sK)zgMsIc%YweS|$|pd!hJU4U zg7e~2uquuuTF2D$^LdMNZlrcfMn>7|`RG?J56WZWWBw@oBk*f#S1xV&#ajshVnL49rHns`zwZ-3nP9?hwktpR-H zSOsxqa)gbDck2ilF?JfKG5vF(m%QXmirjdS%;hMd5$8YW)8Z=&RIr1PkvW~(L!oM5 zR)xZ<5G9%Cxezo(|532<5xira_+|nGK-bQ7A2kxd>}v}7=nR}bx=!ST2&(lgY*tG$ zh@I{LsT9o5b;+WuBU!^r!I2JWggYZd2_T90f#)20{1z^q;(HcW3L>{bV{@)r| ztBUH_;uY4(KEVfU3ny$k10;|A*ek&q-hx_1KaA~i<9#ob@C)@@ccycQ0B{Iym%5Jt z-zKrO20n2701&2!uf+l=yW==E`CLEVH&j4t?h=dBgpxr|tS$gNpg*FqQ-2BYB1*9J z>1@N@!qWU93+Ob;d@>>ZS}JEzXlo-34A`tvl8o@9tPV;5O{*QJb8_^LB7Ku%Ze+oD z<#Sep6MQ&A<%-Mf$2M%z+m9A4E?0T(+4&}<+33Jtikh9 zNR-%1q1L`m2pl5T*fywS6DbC?h}xa;W=|zxF@Q1g;x`!9xE+o?H3N)A{t9ZZw;yr@ z75PH6(;BV`L@|(!VV9|Or}}f&iq4(}^|R}sls&b68h&eUs$WOF$5ww+IsUmuyIS<_ zfFb2#PLyrAUKl*s4zmqYJc8Eh?zd& zUiM7(&VT-fR!>v@k6#i${q5oA;eY#k^5@%T{XSW!9hzpI=Z!tFIRE}%ucw#8_4(zG zFURGD$_`_xaL?hlge(U(U@cn@^va#3vq>?U6(7 z<#71Mj|wihef;uxM(xIGAZee6O3Zp9IG^$FC4IOn<&yc2$k{r!4#*^^ap4?lp+sC|&ej*vBx4s-l|n*TfF2kWv_`jAfk z`g1XPmrkp_O<;%Joa>8z>A+3+apyhbnvo72SafamfwR{y2T%dg>6lv-hmQ_hCv$WR z$Z{1SFQ1hpjG5DuC7eh%Bu|i>^X_}>^mh(DXIk+`7<#+R839S_@%0Ib!sPPFBjBd& z3IXMX=YrcgU)fIv0J1(olG|bI>k_o}2Bmaqa#`n-SrgMcT6Db(7RTgxIK)UtVaov$ zwPv^c?aTSw+wU*Tp|`uumg0m!koua6=T?8`^PK3)f#`EP&z^R>sKOT@wM>AKr#C3fGxk~H#| zJ6#S;TNy~^O4@@8E@lg*&1v39eE8*)vPUB>Y|zm`kiu1vaYVUXc(7b?D4Zh8AXgnQ z_$4RSyW2p$3~EADK<6P^Y9xVbGOu<9hl@NEuoQa8)j;eVL2g@krC#bKQvSG&>qN;USx1!{lcw5GIcFB^t) za*4U zvN^u}{>S<4>9XVYE9mQRv~uX*rL1CMY&tbO3Gl$Wy*W+5Hw>r_&oedsrk{_ywBP6y zs(ket5LrwIXSV|{TseO!sI#*(t!We;mu+`qfOR6Ov2A1rw?>)Jh1cz1n!Pct5_sJYM&*ZkLzi`Fw(kE;b{qfLe=^ zxFOqEr(ET4UoMvE-e}nQ=nPZsaju>x*v^JjF4Zz!K6C(Kq&J^*nI_8Z=9NU{PPnXgC1luNzFnWr&oAf6{Aebu zaWkTvw7PO<3te^&^xYnZT7yMLsaDp>P?Drs_QwR)Q9YR;^EYxi{n|t7PH0I!8;YM4 z(e02oa&N>dWzk=ePasPUM&<{q>NRc-mDy(V_H^E9KSzf{=v8+czj3)8HAd2o*r0bu z8(%3Zah_sipyNSZ^T%R|q-zhBVBlWsB7r2O)u)o5**2EcWaf_p(uDshEP}F>+kjD=|ZT? z7-^_n0|bvcNLSU$z&*=Tc6)iGds~4i6x5MAyluCP9J{STre-FIv!DuB^^HW}Msi;` zUYP7~K|*TRXZ>he>RPmX-F}vbeVg!}^DUP?5yOZ82is)Fk84oM)lsQRbsgOH@$vor z{q;zV4FbuU0L_AVs4ZsNZH5 zb6PF2^r>DIfumf@7jeW#tIJ$L9q;SO7#bkg!tF*h+L&`QlOQu3py|n|cUob+Meiln zv=;hgq3neJr!yN1X0VmUxSYAo^vg!i9x*8}vs&ax4Fb20Tp(`cW{tGZuwZ&QZjV=B zG^VT|Kog-pmM)JZ20tXJ{Nc_|#%U6O4MK*y!_1M8R}b_>=XV=DFYdSuY&YC9S8{pHVQ zMuOx&eY);3&t+(v7}o|I^okb33`)VMc0(x1*=pCt^TPKb>_d+=M?x38=?14++$ zErdc0rLhwVOWPkP#bnc!=q8YvHQp>zO$Auc29j}9 zySmA$ojqvw}z{>WLDM(O(qs@6@EaC_L@9^y9e8nF-Rg{2+@BL87Kiy%s4|> z7*M5b-Uz1{Q6$sZS^p+i)BSj8lJuj)rz18>??4JdxMTXjJKGEg^4_VT;?!DEYY+__ zCnjoMK_n?kGUZ!lqGN{3l8ZQAn@oz5v(<%(!Fsg!N>y2~Ufxvrmv>r&--5(O6|uD3 z0tdsgjVkL%)gWGs)JXwOeLTR+YmVLO>kWgVUZsCp+iT;BAg5V7YqaJ)({c~TrAFDp z!%@jq9T}bNvfAEBGw({cVS6Poa0@GIHaV`F!Zpw;85A*4o^R+>XHxIip)nd)n6DUc z2zn^3*4Bq>2oN@Kq$G+p3Rk^7(3R5v`A{1WCg~eHNu0}C!F6@IZgyjtwVA zyimH&l(G-4m5n<>LO9SZ9te>m8cHG`mYF`mSV>$bEQK-Ode!D(*5QY3R-;huz^tJ( zW64`;Y-d-n=JZUX^>{0L$OGS)dyh{zzJ)LyXZW$l+*nYG5@)AH->9@nmA$%GWz}^C{L( zW&}*L$?eEA4&%cK?vbbJtut>dnt17Zl+KTbJz9@M%hdvFXi;fb5;AW~6sQK%z_iKX z5O!3h`%;Uah`f5I3OclVTzOB6$^t?WS|>9z@KK5Mmd2qWol~Hsw?CJ3-+1uBT0IUj$}Y6jVuz?WVm#2&`yN^1dyvG z%FK8&)DCFvZeGlQ~#3y99g7;XrX+BW)%61z{2VMT+%H)Ndh}BK% z?zT1IT$M*8nH_X)M*}qonsOCJZAKCERBZb8@cR4Pb){4X)V7K>6P^LBXtFgmnA|-& z)xtY~^xhWg3BKlsrrYNc2Cjq6&BhI44J0=hay4D82@LUTz%@Z}hh&*dqZTScJNfGL zdID+T<_~~Kz1{16%#Q)_&fmyU^|2@hn~f=EJlcV$=|8NqKM|SRE>q!f?--pgpakbi z4mtoBl#43^nVoAmGBP?vTR~4Yx>!wD3WYG*b93*^Q07#Ps(Eu{0%o*{R!1JAGGj6H z?(k%k^YbkS#VT2BCL6Gp8xWG$DWG~$v|;2p(8t|q%2;2aF(3+!yQBSH)vj4uf>HE!Our+ehyc+O_EaiurCxi_z#PJnb&tW$M znylwOWtkH;`XO>Qc{GONPvp(c+C>0>vE(!mcZ|vKyXmU?-N9fN*?@-g8gZ~(cZfn0 zrX*D7CGh4XOoT?WolLNEj5ftiR14aNf^#DIrN#-)Mxt^9RA zmVv0qNp_Fms;td0lCaM5k7Ei(Rp7*Z1G@0#!N#k@Sw-FShUbe#vqYM5^@&s35RN#> zgCs0-ykxDTyDHI35ok45_I5M+!6#bJ!jj4 zA4OwMMTMkGFFP`)YMX5p(q2{t+20G$02(8KN5D30eOY#Eco>|so2VE;apq8;%n^NY zUhs^X)q%eFa5gQqU|RZ`pvha*rCPO7$~te^1Ws5F%*sQvrtxt(UT-g>nm4D8Z)d0s zi$Wec^$bf^ROsGt?_yTRc1vzIDMwqOk(F#c0dwJ{cPPt;_KGo?_^M5kU7 zsmPUKc^a4Sj>5jWFTipDspBrp?4drl0xY9K-T1hEICe8FsfcMje&^PA01|!m+P4$UyFNwzZAlv`kE zT56H;=&aF^xkq&Qy9xEZI)@!UW9h0)beo3g_3XHxXK+yMD^wZN8rxc&qdAI)Y|Q3b z0MIBrSLd&%ShjTZ>a#gNn#bqT@MV^8^gLL`LYF`~GyAOOJ-MG3^@JB?@U08YrGnvoEz+I>1 zA5=!JqoVJ@en>ULOJJ_Ou11_4mQ@s*)llc7|L+;YvM9FQg#IXIaWZ>5ep!R_QT)Qn znT{TTeP$r(DmQRYUGo2-cb{xdtB~2m3`ZB^Bw&tMtZx`aS?P{|VSBzFVOHBirebEl zjHjrDjNFG{6`eA9t}#PIVXs$H{vUNw#!<+aMj8iBPo^}pVJQot1irdF2Gxw)Ha4!w zpkD^Sid;H>_1A318w)|+W@I^a>S=X$jn=?)Y^=>*Z zm@$itRB!Q5WA_luE=qTVgpIWmbb-y&VRgi}!9=!35#fm0M5yK}dE!Db>9wN&%WLsV z9=S1Ij|3Mv1Wg6)fzg;9YT(G@2hxGRGU=uBB=zVK;TbL$3oO(nLU$8J%stU~6e`Mt zPFH5SW)2@`d%^{_h5F2;G#gF5l6=q>?`We@C~T`H%eU0Uty=2;8x;pG(v6e4ihrxB z=+2rnbVwz=qIocpb(rWIV6qZr6aa||<`{MHQbiYqI~dgX1{nsrc@i#hqKXPHt(|*N z`nFrAUYpjYVyw*p+QnLOQ9o6vEa%Nhv6bs^QoWtuoRiDyTE;g3b34TuppKir)X!zZ z9ScfBR~G|UV77!yR+~!wWLj{njC0GzjQz*(Fgy2NhKtsIwQTU3UNmQ-z^2`8`_kU` z*0YLX*Q7`(*;yxs;(%?y!nDSzf6x@5+?f>yj>J-@TUtmimcm`$HsHsT{!*s+Mod~$ zY_KN*Uondik+t7$NFAur^z7@9eO4!V-*(zube3Fdc>2s&1#0`ou#P37!E5uVpKaRH z-hM#eQRQ@sc2Q#g$&bVO-4#kftltaD=NH59>S(ds}#yZ+;p+^I2C-6`nvb%bbXmk57X!C{>!|-sgD}NJZ(<;b2Zh?-skG~ z{o;^)tpqa@g4`Mu-kB^L>+W?jp@`kQZr^|J3i}zg_cYW|7B z3YZ>W)&)a-V{G*9JX1+K(0U47<5ap2KYIw7;A$>Im`P)Og(ALaG$9G2o6E2U-=; zllLM}6ZuaM_cgpLmW?P{{OXp=Q9CX84RHwbL(9EA|Ngw;O&}Ysr3h>Fs&c>~0YQ<0 zfy_={-`~SW-pr=itE4MT6OQYvP*I3sc!x&l0#eer&edbqtcbkq8!Brn2)Vm+R6G?j zMlKK_cl*n)5ZM4L7w2G)fv>-Ox%8|1uaEP3OPj9cdf~Wa_8CKW=>_u8Q3O^+(nOh@gX_>0}a=%|Ng8%%>PrQ|GZtn{foh04~DjPqRVRghHM>Jm~ zra|D=GKAQ$dGK?>0w&u6Q%$*d>gS0lXdX*_nmG=Hk9jO6eeW(&M#A{ADoH=jQL zn#<-h5BRhc5)EV4M)Jc)SttM3-|jQFpOVb*_>|5!7rEVb9lR`;kgJ- z6TIxW)>(!NobHvvqnBpAjL}kVlda)GVX?0k8?YzO4~=O?iaxMxx9joK{XqbV#hLDRWaB-j!~ifmfd zQ*v5UiMwp${vS6aUsgW~GG}ANs8srMf z*YB?$)@8eYd}PfFBOde%#h_%vz!$Tlgogb=43#Mny`)JGI%$tifp_J2ESU##&u|^) zFQ~O(2)Hzc4YM=mIAoHE4<9jUwWHZYhHsthAAYZ4zt}FM($#3}+hwZ24cpTRgH!}9 zvYzroGTfF~Hoz=S=g0F_P?xNQ1D;-2rqX&lD9GX5?w`ml`^$?N%VF0q<+VZZ5qg2V zDdCztzf*6IX7mvcLTg(L%x=?lHZF5_fEHu9zHkM+zblLo(#yHq&^_uSkVOOY0LaCt zNlwt9oU2J^o@+$8cq0@ZSB-KgcvfuM&BV^nucY(LQEmIMVx`BIioHhlmLfZQ-t&9X%e~HBlh)DHK)eNsm-}p-x|H zjBYbx8(9!B9ccKO72_0wg z<|EOztE6TmO73NE*a2{l{P95 zpn^+RDCjuY#^blM)IL7GKC(byJ6ke1byYKAGX-QP;SmbUvFXyhrt|Rc7L`02fCYY_ zXznz~jPuTkRHmHLxQvz9&4FR@U{KAGcEscg2WiX~e(g@*F~R|UX$#>&9I8x(9vMEF zH8Pa7Ut&%<1n#%0LX5&<8O8Z&ORm=vio>0(TI}nsfI9jkpxjo%D03uG9uBQ;szr?+ zA&qPbVr>Rfay}?#^6GpL8k_GR2**Sy1n|@&+c^@Yq8f`^+XNREv&m2B2qGtxKJcf(4Q)EKqDA@Fd9X>F&C|>2Zs+~ zQYD%P9M2M6F5+@juHfd{z1d8v0!GJV@i03)0kAnsHKx)=h(=|zwj3tV_23M^q0|wM z01s#xj)*^yd5Uo7g&143<{}1dYB56_+z6sFFwE8oVY>1ue3s$QaX-3F*~{lDY7UVX^;IN_OXV@8+V|-XMXpz? zbB9MC4MDg!kF3>kKd3StmwmPsKU_tFbeb8njK|zVYFRg3R>0w563JEMVCTKcYJqT( zFCeMGp%cZ>sqMC=0*GOQ`DRD1T+f?#guPfek@GC@mV1R{qM&-EgGd)bD6-oV+wWZn z{l@I@v@iTB782%<7a=8kw0U}Wk(E^gQZ>?_J{KpE9Tg_Nk4GzYNW^d)r4#ueJvT)C z;2QVFt~m+0GIbQ9H-GzVxX)H~&3)e8Oi+H^GLv3z`pn$S4m(fJ^8oybB?7lArEaqo zqh3=Q+EExS-41E5u&QKnLC4}&QNChlpJr^k?Hrq=a{uw6XsRf>p*#}vU{*IWGNRW_ z=P6hHgC-#s0oYk0FkleN=_tX3H|K(lgrv+E6h`qz6uGghoEY{L&W}_AIJN7z$T=~T zUwFASsd0L07zlBNcRHg~tCI9a4N7>(46=)g(kAhg+KGQ+KA|FSkjP+QbGl@BBJpoO zFi7zLk()VDEsiuy@C#A{v(_;B2mN#%!R4wUCb52_vwQ#YvI;Z%jS!J}PhAcyHMK}n z%bVLkju6#qG#YC3d?7;ZbhMQHtK$W5@U2MI4lYH%yP~o|Yie34|O+pwlwE*)=T8x5Y7vJlD#_oQ0`Y*yOv) zx9eev(F+){G-P7g_go0G`UP%kltRPq-Out&dIq9Wxekv^br=GKLu+%^uiV@usum4y zB5$4d>!V@;R&8Qc`uO=1BVZL1Q)gsw!*rt?hS8&SJN?to_nF3gaekyqy?(<(YSq%& zwwYIn@K?MR549Efnm%Q-YJB|ZbAqU4kV*V1=2SQs2j;GP5$g1D#(_BL+4;s@yjf@M z*4j`XPMb@c__XHhA#Z}*V7@|Z4m+naM-;nvV8#d*zjhB^_6RhE%$vE3|Z zEAm;@QzCI^1nzFy&No*?N6=nBf9KQ<W4){ozx6?RL^rwhwA=4#gU9DuvLE*ZWyOB~YD1F$?bgT-i!3 z)E<0DRd^3Zp;s?bsF{ZuaTSI3edB zDhT{QJcrS8+$emyzbzT>k?7#q_>Uzrvc_fsVcO#76DMFuA+m@W;<@4Ef7#B9zuqM) z0ZnP;QBKdVUnm~MgD?hj=$eyNorwT(1}?z}g_;8Q?mi`og@%Wxs8X$Z|I9^2#bY+vzyJCBBdXYlY`_VDj$>>}h}+}PfQ}{0 z(cLg8CN;wuL^?f)hQB#GtOuZHj5kcDd;2b%EUAiH{l}NfPAVxyy0mGXQZ3KXMFAWx z1&2dasFhrSPkOq5o#S^x7JwX&F5~bkUw4$2?P{h1E)}~fH-nIJzOqvoU*JWx$Zgx@ zwv&GN__i^|@|~Ph$#gDz$M1kV%8AE27bs}0bQQyeOm1*|Qhl=S@}$SCxq|{3UbbeR z_I&7YMt(f&_!ZwkJ_o#UXu+;0F!vlS!S53GjMtV=(83r)1Y~4E$jr>&@RS*I!^W%k z6_=;y3v=4Vfo~kS+W2x@7ZUsW$!Wia^dUOU7Obd_<0gK?hTr~_ zE&8e=mYkMyF|XwtvrvNjJs*B8ATP;aM~*SCp0RT+=1e@Y_r*EZd%ZN)TW*Oq2u~Q1 zV=NIUayeQsg#eF%>1ktlT?92r?%3&N)#U2~>JKH-)D8g8wsQ=2Fup+jIvipm8H4@( z>&vlIWHMLZzML9m1O%FGP6M5Gxlm$B{qQ+mX!%f%1+iK1Hz5dv%lrFC5HGh4^C~XC z&P^s2>!l@vz#}aK968Fq{*{5#U8X9&i zt}n|<5x-$lZR)_;dWDUT>8jaQC6~h zKi+%qy*Fv93I&h^rxl}^8|gy-UeC$~IUF=h<~e(RX03O<21HlRJu5o6bHu%^iEQ+uPYC!vZMLslECxcYHNbFPOEbSJJw@AtcV+a#F35x^Ee0ve+@evw&$R_A zQr`@h$IbTO=$s7-0>X0Xl-`(eI`V)k&k0wp;M}40)XMiTFyDxm0E0R=hI#7L{gA&&K0I;hN^;VbzOeg#en0T84woX-MVOt()cLRdwpu)*kV7Kl94R^>_NeJ0)CyHD8J3JR!4ps*EA7a8h*Spnc@J+=jFi;ASBfaNug zrJ+zB;mzrGL%eBJkDx>Num2TQh#ApV$*Ob}tp-{E8%osh&}UzTrz>oyFqpRDEZ^WWALOsL_I!=tToXM$>M?Bew|2 z9eEdON@N+BqE`mN;XH#};d3CfV4B*-zMCnsOf-;-wz`jQz5w*Wu7HrW!R9KO>f^@a9jd@3CkZ>G|Su93MgqH9|{0TJScGrY> zwLhnK%VMW15Ym#7ZZVkrVuH-*Q?YDQjld$g>L&&zNB`2T(%z5M++{F>kWK1>uxlloI3S^Bqx z$M+@Gzqz?7g1{;eKVi1}LHjaUohO&0D2wIW-u-p#5wP?bG&cK1SZ6C;YGsD$+q`SwAuXjAAi1Ie|-P3w_?wy1wQ|1P$+u!U@WPp zlu=cGK||cGFS@ht?67yaXp2N{&cOR5ay3Y2X6}Mjcy+2PG`{L`uzvY|9liYi?Z?~k z{POYw9UISkZOTqKYC7ueB3CpLBHokt54XwOL#mp49?1Mjwq<5j>u=`?|6ntkEB)8$ zkC*=Vuq4M_G~1aj#H#~`8Xn%xgKY8e(k+&@?>bQI5@ZM0N+&C&p-aJ_vKj}3z9fo6Qh`=O;OJ6bNcI@ z0nNYu9}lVI%>(cQP*LwLzn%NMI&A~@H9oo#y%VRq;ph($Y^I-|Kr0gLQ3NHvy!`FY z_vw(6Z?(mPDaK zM(#e*?iK#}DHY~xCi|(1PI!Kt*E8L{tlsir`B6U@Aaq-c!={>QO(*q7iA50*%x3ug zyx9Hu`*GO5eBTc``?vjkeZ1^8uWHZjdERIamfibbQ(;zG=(QIYl*HNPJV|9(GJpE( zy_m7b>?0TKO!~Pr#Jume(zgks)2HO)P0GGWmDWGbgUa;fvTrL>cE;>YeiIn}V2}1d zZVfCetmy)s3ag#J|M|Y!zDhD<>_3-kBQDkbOa7)$M3)4TBADT^Q@Dh3VJNUlUJ{88%eI!C}ueOX`dW*G`3tk%Ku*Hz?3_uu#$sf+=BE zpI)2ckuk}5bp8Fu%lhYk{8%4eUNSNIRla<>DVpOXV(M97idV~ixxLLLpKhMyhH>je{^pw1U&&uk_9{wbFsG}Jd}ij~ZBTEUTjs_sr( zW5?6R$U#&x*-0u*1@}w|{rHf~lpddQ&&fn4`J6*`uM#FIvoN%JCWv#vAMh~bM$2?V zYC4Ot3N1{kOOCiIFM=y}1%c5!`#YoOvH_J|j|Kt~x|U zXR{C%VImhx?4KEB81yx3g&5u!!!tsd*K@XT_xYx(@@zItvxZf}Eo|a(wL)3VS=fH% zC&IXf4Vco(9|B|!FGoOxbPZg1ALQlo`s1fSTXxU_7}-9nZs@XTxQJZ1Sx@KPTDIn5 zPUjd%(Ws5kydvK-Z<5(5J>7D^EbtBChmSB^V)(DQrYwJC`J@L@98(J#AWi{U+77O- z&0;c(l`iO_HkhmISU+IUi7i`bW(Y6GsuCYn&*NecH4%A#!5N}+AXIXkq1B8SPA<(n zjf2*$4#^hVm}TW6W@;sy<%i982L%bt!;66@R;B2+GWykY+c9^dis&65SXa~ZGd*LmJqR#XI_jU&w z4A)thfw>0Jl^(kt=D{C0Ye6Q2P#e9xq~gF)L0anJipQACGLI}~p6*hJ7g)DyRF%_k z@%H`4AKxwm*-N~07oMG^;{TWl@9m`k-;Rw3b={WyhZ?E0yLAZ1Pv zFP9p8$Vpj^Xk1N3piVaJo(ZHGbl5qmf!~WGFqkQ76up~EYLMJ!X@R(wn+ldVV*5x}{GlQd# zC(A_5Bpu(awpc@i`KC5=Hb7*9b;yZ0$_!Too(N4r%`iTuQ_w`{k8utF*=yyXV_j}I zDQkcbiJ&G9Vv%5Y$Tgl#dPTz-BiR7FSgNfINc+ZT>_cIy#|l*_A-mxTM-0!H zP@Q6DjQ{|#)2m_HkYg~phFy|aQg?~@t{`_7c5lI@RI zqSA*6dGY0(9u8wJ=z|~J3D{QHTSNj=iv&O~kPVrymF<@EF_x#dv#9M0g|~V1!Vsfc zW$ppZ3bLU?0x84R37aDZs)iCKez-o*f<>(=45i6fz8x{0>`^Wc_C6Z3qFs#Q=lgWh zV3j=;CG&6vSK03l+gY<8){ubAyeR}wmYS$8feL{gn}+QjqtNY(9I3cITyupQZUV_( z*jAaYh3^=|`onXI1h&Mjk|D5O7+YGmOs_0ue$C%QAJ1Z{UP0S35)LJ>K16ptRq-j6 z%>Rh12cU2~^GqsdJvs&f#uRYAEFAx`-(N&*g?oqrD0O-!oRkqVOo=#=Mb!C(t8 za}!Zmd46z#K7GDRF|1*E&b?(W2JGN)Seyj1VBd+Y%H^^uQaH?qZWmaJS4h@}0vUuz zDw#@#NnOprl)M;S$aU_4V5o8&bjP894LW(3W9~VT!m7`6^h55HL&76!yx=CI-)a%4 z#%D-p@m_A_g~)UM$?x!y zIq5CWRa$Yp=&M;P`&E4z@>jL>N31h`#$KU+~48b;@6- zgz0kxj`YU7(*quJS~%B&mSGVTKj>37nJfa!7SgW}^jc9)Vk%b^5nZn3^WvJ66MzrW zJ}24)f5fPTR$0ko&fb~0z$-4ZX;+Y#L{4f2Xo~z6MQe=~*iqnfiAN5?EE8SFR!BIiTSlnh^@>lG;sB1z6kN#COL51DN=3gjlMIka6V65^7W@)4|<|=rNaKI(aa#k`9Ijw!sa4y1!daeWxXh_Qv#?GNDq$$CY z#hBXk`q3&^&D8mQiX6z4!BD&g0F&pa213)k_;+kM*2Z6c%6`3DI}|UgIr|u^1wui?S6k{ zUn%Mo5zw}ptGV#65W*Hkuu?_rIn6r82XPS?-krDrfLVt|m$K+OwSsAWzBW2}@eVyQ zSy70?0&!S3FG^v!JuZR~)G6X@@HyN@%p(*tHy9K!Woe}F0fJq`%Gn_?-0UY^w(C?% z>ulXaIcUb&}y%* zyYMA|CcnKAgyksVotAGsLLuXjxSW-T)G@K$wi#HOjqW z(r6~#6h12Rbb5M;#BLNh>9K@E>1XPdQb_BCEbz$Eu z!!%bJ3KqV3%LN~`{%#}kcX-T?$_yk~bI>%t>qs8U>2{*IPBZgl^bN{#ZJ%B#%hA_ou1_Ha` zaIR*Rq$`S7L5D$5Wrv#Am70}vY8QB0E@Yrxf?B0&Ga>(anL=w1<>mDFJBg~aRhae4e zrPx*lvvdTA%P4g+gZIedO;=g)2c03vZQR#`J22uc7@#-`x@g4+jW-KtiWLJH18aWW zz1dpOTb8x0nI8eAvMY$Mtw_Sgw=(Bj8_op{PVEK44KGEm5DoZrI$P}M5Xq~V%N82F zgY~S?@Npp#V8wDHl5m8R@;%o0u2#bRB;5th%`hV~+D%e~;97pe2zJR=}Qu&B1{0scr;okU<~+&NsGetdf|4uT^i7lMR2%T2nO zOeUMU|MkAq2{=YmO*K1zdu81uRxY6wXZ3-B>xvu;v;tnhpQWoehOA&hD{T~nK_XuE zphe}1BaJESYu&GiEV3U97!J4rfXEXE2w_W9crX9_@qRviKwX_kO?W9gRS z-o7}zzP@-Y17xAY1z^jVHR(ii#3P{0PO|{m$7SYR_+vbdkghWiSZlP?cGqr6d4~V9 ze8(T%9;j6{YRY%+L}RKHH+VIZ3O$Xtsn~Eww;2T@t;nd9k)_4j?Qlo&dxmw}pTh`& zd{OqR_mWB8q#=Ex#$3~qO1g^$SKbZ(w}wFokNQ?Uov)^Isb>VwAtJj|g*E`Sv5Eo7 zXYcaL#HT+5FU?k`<%gI2c-}3KUatB&Qmx>+F$ZH6Z5F%Oip{8@_35K_mpvA%YnkHd;;*uW_hZ?-bY~b9TzF;< z2jhj7VsO9J9@o=7{znVf4U&SOnAO0Z%s9HkSsg%5MoF&Dad1vu6FIUDwP{@i`ZY6H zNsB9GdCHR&T@M;6oZ=SL9VND1r5K6`MaDWV3)SvIdbD8AISK1>y3e+sU6BH$z;MUlhN8~yayCwM{7CNhs99B5TAuP?yFkpIG@WVf>H78eH`c5yuna|jD#KdhCd-Zq8!W7dS*>2b zT_WqRs0y(}*BtRgKJ^EBF2;79T&gUa0-RROen~TUbJU2brv#j+TZ)0%cA> z*L*_6Vu!bu=YvKTVpeI@mfzpdLD*1(vd?VeMU>{j-(H`KXkFg*8X})5SqP>r@L8uViM(WMsKV z=uLXfy9LlOjyDrZSNAXoGE8%-AU*~>mT=E7ytCW3DZ+F5HT{^`FV5GP8W5A(U={!! zq7B+|1unYJl5E+9op{QYDWni~85XOF9cCd9$D=twkz*X(=0JsrBG9u?jZ|!=+r4H! zLuN$hDL@7OG6eZ~f!#2bmExgj&*f8%^y72gvWQN?Q zf(}gwY0dobwi%)26q<>r0c9IU*jlHO5g;2W<(eSb+Q`9*2#rUnE569|%=Fl>MJ~fq zhge9rnAp2Y8JriSCj$scn1hF*$|BNq-YbC&V2E`XQUo!wFQ$+_OY%G*D?GBffT8p- z8(heX9gM}nlHM>#2zmqNg+mQKG}zCdwRV9cb2m%0w8s08nq=n1!VnN5bO=v^o+Q}jO4mL_4j+Nzz8;& zs@SjB$-tZ!0L!7$;~Zi|r~*X;(2Is`K)>3U`EU=3?v6ASO;3)qXqU^;;{<{_#~S&p z1V`V}1&^$I3cDs|-JB2S+R^9w_A+UYN2U85GCwb7ZiT(m{7Fb?xiEQM6~>iZW4!L} z{{BsXJDyetomwHjfa%Db#XO z1LmE=&CORF#kbx0GJ)7R6h-`OS#OcGdGHuc$}X7Z?6^ZX!cQ&LSd*7In&6O3->&O1 zmo5U@{_OJhx?p)Zwuh{&RXY=jfjJ&4-2J%_BdPETUiUJzLTUoDn4s zJ3Qx_ziPJ>Z~^=SE^pv*u?eoBnTYfdmQUD<)hx1;t4*bt?!TtsIQ;X^ z6Z6(SlK$cJeqrbBfzZLMrsyP22plGwn}&G8`w!QJ{s6 zeB3X>9xlcUUGYXdQR$=_HI?OJ+)O2sEOo~X_&%R%Lp`x}^#0lVjMJ*-xtc_p(QvyD zAi5eH++O$u25*TD!5^9ds+AMRpwnhtMK9;;GoA_{46_a75E?RHO+u_Vy@dwMIL5lm zBp&X*YQ@z&Z03{qQtWfajX2H4j3%$YoYauwb9wNS%Voq&2Ya;L<_in8?`>Xpb9I@6 zwn0^~d;9ITA3v^JPN=KXg@f7#>=lwC@IbYQISdxXA4E!l=XE?2{dS=iw%PSOu9q9^ zYi`u72onQKX9c(UO6i=jFKc2iyHrBW9*$s3Dip9v^agy8c~YcOu1|M^xOpo$#pl#IaQ(czV6R2v^xK z32GGv5*x#ak9m>dHCprSU-N?@(58`oy8rYL5w{w@27(M3Y{A&1(JVbJaZrefpc%c`xX=k0@3&aRGIns)a1aw4-6s4&^R|NYOO($X~A;~8TlZaH*5 zctI<*wDp^TMnJU3N@eQZVuDSs3Y3R&y_liL8gZ0W{sG?Gs})!>i}pk6 zWW}(a6TE>%zo&$20znBE0>?0V)3q8Yi1N@ayId!)-`A}wjD!LQ;qx5X3Tudox^J;Q zPKdl(_?EZ^X6NGV=0-)HZf`7Rueo7S?hAYA<^+D6qqOk#^W)<~!p=5gE#-_@d525@ zQ^q!_%3=p$Fax_QPETty#Pa>E?9e$2eMp}Zn+|Q#-~I7}ZbCD{OKfkMOULR-p4lJ9 z5tos#AO83*pSG75H94S(-7I+VaKc~(QOtG>HEq4JUWcQM0e?j5h0#x~R?Ow`$xUvF z6YifSE6SCW!Qs@!*T)5c9I-I0$ABpZGv)HDPy@+v)9Il`F=alyzDZKnz%zeX?Hx@% z;6XC_b~|k3`#vBybg%+p%nGXvR^o|Zv=?xTqYRq1(&a|MqGohJuD{{YH%M;+Zg}Pyen7}Jo3nu1kOh~05J2E*i z#tK|nAp-bvyq$-$@BjQp-h-(`89V~piz~xHD`v{Yr{eHLFAqDa;f0PdUhG;RszFgb z_vM#QXyu(XjO*zx4I*ioqIZNspjomk&L)ywA&!cqraXC9oXmQ+lonn(sFY(vDn@iN z42DE8p0j7A7NRVV_oLBC+teqA1zK9pUDg!0PxE z@M>kidt_Z~Hq8B#=HC=5wXkp3mVG0r=Ev zvnx(se|;L3itQ=zp+3J}#>Eut=hS`HER7JjuKx zrQjuCX2LIg*rtVm9V=DC#sIIy_$O=_Q8z6ix^UBOlaRc3KTtw%7G>zX57 zHT+pm73aAT97~)E18u$HrKggkpH=%tGTix&xHz~|gl{4#P1drf^ z7H&Tyn?z(4dv)$&Q~018i(!vALgaMym%{;qj3dn>DR*Dq?pisfC<=eIiWx3#;~k#6i*vP;f9%NSJQ+6l$dM>E%opF@*EPnciA0uU znIbvdDV#%EIKCbz8?%or4(zOOp9djGkQk3EmCV!QGpvqWE|^?hbBz?KJ52Mi;3??@ zmu+3o7px43ig5}zi(IYBpUl~O=$UHEEFhR!^CoH%Ai9PR&4;fK#T44>g_%9pD=KP< z=DU@tvunn3v$k-Z@R;U!J=A<6GYDuwqN`S?UfanLUbR3$M*=7Vj zKvw&Gyh4m3qX&cBnu|Z15@?Kv(jIrEsW}TllxkmmK^LTMkhz)^A`%GC&kNHCIlhJ$EXGrb4w( z{uCw?L2woZc&=W4|LNRqb#;!O{Zv2`4`p!!^AUbyt)3(Iby!C4 zY`9rP>rv)Aiz$3yj3_Xc1g|2~*EvdXC|HE;GTm98FX0w6rj3UWx7iK_v23Ik(pNk8 zoS`Dn7s~ny>#(r%z@#y#;G5i8pUe|-Zk6h2vfaUc;avi-muxic!y2ZlP^2B_R10Jc zRS@1<%_eASd5_4QHq?n&Y}EQ$gJD$B`dmQ0Q9A4_F&Lfd^L?hkZ@BH1dI4e+wBp_Q zif#IiV?7;Cn7W%4jN1aP)SbI6d#MIrSbh!I35&WCn>3@WQin=TUSGrvnEKW^g@Ys1 z2^xm5$KdLzH;m&IJIOHR=zR-RM@c;rkMNqSw5-pVOLXGL)vzX{Rc^{~In!gNaX_!%kAUDhsYitIuz zTwe8}PYJOHXj6w%k8={eQkaSK#-T)mzM?trBF0MRFK*%ETGeYCZBgCR*Du`br)CV8qZiJ-|b#C**CX z9yp3sYH-@s;{5wr#tStJuORM42=}rTWs_kWmtlf=8I_svy#jOH`yHV1w-~n#wS!N z+-AWmO|d;JQ1te*0jqj}*MwgN3*ZQh_=@}kgz_-wpR~_Xe1!E9MfdrX^mniNO1E*Q znDs#Ly)|Ui1x1s(l{f?fr#166UpiMS4at^R8)53WdP{YO&RJjR@WYgGjacO zpbL^261)k9LR7F>G^LFp(zt^R;46Wyp{?k`HI&nlk~PajdRWr_s zQKCW!tqISXq%K!v(N5y0zJ{zhC%YC-n{=`?T6D`{8N`&Vl9WL)>9QWWp-k>LG(LdU6RV)WRSD?xM37-Ruv$#nEJTfsw9eri5MWuGeV; z*TiaIWa15gyrQjY)Xcbyx@Rt6Pt-l6W{-GWG#HYHe)vA)-x{_9imJGm9Z{F$IfhU% zVGjjsBsgH{ql=J((e-G#2BH#I{wh#S5TuJG3PAK`EW8${h7MwH4mCp)OSIx|hToX- z9}U9e#TlOIx7=WOQ<^|IxXvuTCe~%pqO8zx8E+>Xuw^yN8s@A4u>``&&dxR3K|2t+ zV@45bYF^cVe;%M8DXYx7bc=j=%wNrR(fN%mb-sG#MgvpU^Ny~|TbE&`1n=`+#R!7n zA&Ma0&ZkogQd1arQJB_-w*i?iXJOa9tSo=W007{hlQGWzN?0?B5yx1Z-5?7<{+Uo= zjrnU_`I(UD#{ydCcn#Jf$_7ow^PpmqJVPJh>qMvlqE3V#d5!=Zrjc8sdP|?q#0?e7 z1QOl`Or9=TCWZSBkuoA;%}sR&;lmwDVxd!Zs1nf6D9PM`&vONZm7`&-48|kJ&y>}k z6wwqhPCg@4`a^*n5#|ms$30;M;iTu|L4ejrDl=_gTz^$F1oN6|!8eDNI09V<#+Je3 zp^0!%!U}_S>&g_E%x{MF3j^N0AXb+VQ$xk zyxY@N&M7ZE&JK{7*jVi6BlICO)e0}`(=i3dbQXHzexS-47NS{kwzw3lp>3P(WX9U7 z&aF}fJtvkr-VJQTf{9N7uOP9|x;P*pHQKp=0~LbHpW< z>ZWp!<@&aqUn|4^zU^h`Jqp-EaQ+G$hVM3ZT6488bINfu z*PNE`ShCbG>a+vP>GzlIKd-x=^WmY^J?+M1Pawl~{r-Rb-`(rC_f>tSpT_`uJ(*%-GVDknoFNuw--3&3qqYJ^lzIfZh&lb{DLQ(gY&Ppj^j$%jHAHgbi6RfGP-u z8x$TG7sbs|7$0aIKvXDyuQD7K{Cv;dU^<{AbC%7RG~&pEDi+=Gkd zfZ+S{<7qJ7lNO(s*SDYF4yYBc?-vI?#7No=SJLTVHKVNQUl`vQVV3B#DKH)k(ZNR# zQg7o2V@Mn8DT(7EU|do5P*h)7Kut}ji0W7Sw@rxkCY~JJgx!8XKgA#p({Gn z)IVswg)9d+e((W>JHB0^Wc{=s__GEto-DIITCnYjedJ-xLvIetj90jQJ8X_%zd13= zZtEda2^s$vMLly9)rr;07Fp^cT`5YCm4F$ni<4#( z1tLScTF67?D@AFG3gNPohZPBTfVz9LSTcJqcVdVM1ga)$;aU{056oDWU9VM9qzDhUD6~8g%10|U0sU{K z)qXo)SnzMIFWOg5HsDauO(ek+t<5DV&$QFj6o?%RJe}nsV^s6wHyV-zw^+?W^Jk&~ zdyO#N9NK_Sg1K5QL~fHR)f3AUjp@@Nhbr7Z`;sp;fkui_HIw$Z zN)9qHLdtL?YEYBw6yL6>m-c7MS>|s=uPl7Md__ebf&qu(^@)1PIM95iXJs+XUCgCr z6Cp|6k#-6C9<8Pkk;kQ#A_xP`>?*tiZM-0Y1lHMUOAWMmnkr+$w2E)--UE9AYE%ma zI2F06fVktbj4a945^q}e_D=RuNi3&sy=v|8SaQraQ(o!?bj=w@o3UKik z%sZ&e#uGV6t^mm{DhkM4kGrTo3n&Rj#hD2wP%T{?JgXTAZ3O6Zi6h=*t=hD5kU54v zHIin@!{kg8-s0JZ*J{KN`HVVeL$4w#5Cbu+d$XK@ale@&0fYQAFO>Y-_NOW2!av&DfCk`&O&6-&xRHI`3A!bdqX2UeH_heE)s z^Ks**V>9ZDhT_3~1do^i(#Y|vS9~GRsNdkv&5Bl`s+Mt@xkg(6SiTa@c!d$Avi3>) z;3L;+w2ILw!2Ue~dt^#eK?dYlMRou98~8jPV~oY7CRA*X*rLH8bSmght{^ig-Ha~W zA!mAtQ0adO|F~tb9Q9e_jSNX$FpPrH0Ch3ehobXuBQ`Q*5&e!b$;KWIwj zHvupV5S&Q?|H6Q6QMWM1yCC8#5ZbZR!kXbfS*}JbJtB#@88ix#hZvx@1y46kr{Ed- zk6Pb{@^9(i5Iy4?5Q>^f`7Bg5uAz9PA!{MxK_iJ4&@(bvA~aDn(m68>wF6Z83Y2)8 zfKiW{RM41#;cc14x5>XRVx+8HU^z^&7xoWj?gYAp`tIyQXzya25s1D)O}~J12^`8+eybZ`Ti;La)75I(A)xSPxf&thH zTLkV6zHNv%IZ(neV8Y;A>;iE-A-fL{5X|L3_6)1BrHqEbNFEG3e{i_Vz);w0(@t7Z zkwyk+7mw#ZE)>`clW0|^zZos7FC6wl<`VFV0}$w{*20y-j}xfpSIR8(qf}yw50nIi zhrm_W z5e8<3`i|lF;K-xh=!DI& z5t9W9BX_+pYic6uY~5b0*S4l8AY~gZ?lF)Z;KZT}sETy3^gt`9A})pR?J$rURr}Ik zCZ#c|LPiuU9wVLLw|ibj|BN3312HxCjz`-UMoXEjv~a>3@dl(OAUu}%b_)JJu|Q+M zJliZe1a9n*K0NSX1O!;B9cvfMrzE$slDvJW@n>bX*W0~a@J9R=)tN=UI`3v;UUgkz z`r=qX>h0ibI4Ic(8A~`%^m76ytM%LywiRNCRuqBXdZ*eb>z^!haed*F;Hb6H8L=q% zRz?E)JRe4NLCO5YoWoJ{Ec4xQO187O;xV_SS5ql+RuD5jP$f-BLzpd6bI*|B_U!GV z;&5+7rZ~^BP+IMmwWnXw(T#7KO-e9F;{sW|TseW_7o<*CeLgiA8-aMafxBb`sD$8kdWmP^p;rum#WD zB+QfZDf1W;fClg!_YNgxb2$r@!<<14Fi)2t?aVmLOht3NhY51ZBr0=3B!?9ue-vb1 zP?kJnfl3BC9=-f_>J{aFFtZ$D??go|xi$Povq3?rJUrwJ;=Q=+F#>^&bkUbpCsK8u zl59T}y9i9v`ARvyMY591scAO>X)j+-jF`M}?QkJsh|BPt|IGy0&#QaYOl8$Jf#y;o zZx2Jrpvs#tIe5tV%KSP5(779yN5K*9g(&|SGPI#kf<7=YMJhd4C$q-=&6jk^h_VsB zs9O<#(zQqPJz26fst@YS-hVrGbE)Cw<+K?=BiH5%QJ1+L;$BxCRt(^cHG=aVjLyhy z>iP+0Q(QWoN6K{{)shbx_eYQ1G*y#`HFvXd1=y@; zIlPn|4A^}`vF-|{iUk|j2WYj0=NuDb^#|}XEE~{s-RQL%bk)58xSAback-+4LYBrs z7*S0ajQUZETertY4N+;KZRfr$6#||#bCE_IB}HGympMfODb3-W#+dU^uD8Aqo*2x+`BgT3dNQ0C17EXw6^Bnw0ow$E-)~k z(XPkB=G4^@ZY{o;JKvm0Luj(61i|L~m?yNR_UjZ!|JhJ7a=|f2OM)Z?Dzhc{Q>~My1H)qH9OSg~?N*agcw3oD-^F$hAh|#AL z(-_QfT=y%dwywAABPf8nZAiRHl<5QhdPwF3ry;QwTJ-4_Hr}Xrw%SqjQ-egHtL(W# zb85bw0+>1}RF$;j`DTSFRvVKinG3GqZ3-~; z1tycOK$UA&okChjJJ@TI$z>=4f4p;y%yTX%V_luSQoDd)7RKookMu z(Hc_!#5##0FF4~8+Pw#>(7c0{aS*NayFH5iD8zlbjXGV22(8P{bbGzwc0vA*R3nTfADo8YtOeCOwS^-P;S*K~6~@E~U`iaYlPQ565b#etDvnW`9V}F(V%8lSB!=-dd>v-@GX*jc(O&9!_fSUzuY_(@NflYPE6qJ3XPE*e5PhAd+PdY6 zjAlFfRolr)rPUeQe?hYje|}xII~V&6GaF+iEM?eC_>AVgfe)e`vI8@A1yqn(h*J%$ zO^K+>*138|q99Z;AG~vggx6cq^&7iK%Vo7-eHU{?i%G#o6y&H9f1PBzs86I=ohASni-i)8b8UvlvQg{C-bTsvPirH4FV{-#Gtp@$M z$J(V?=js-Xp(%v1R`>~eh|*7az{bb+ScF4Z?SYVMO~TQ|L=R9*vW?tp1Ox7Hk-;c5 zjDaRVnP^_}6g)I?#G80CGe9U{RvGU-dSVz0=w80r$Gi1Wpa)I@(4`aBxulbXS17eh zd6>0}$)aTq_!FL6^!K?=Ns_Rk51|V$NJhh({|(3o==v2DIaP+%Gnze@)YcWEuRXhZs=C z-@`3K1vf6ZI8$*WnuF~bRm|t72@mf7`H%Ifkzegs#)^&p{$`8gvn zw^Dg z@N=Cd5CwpS37Cpz$4JClVpu(nQ2AmZ6&zKOdrU#`3>*bEg@X*aEU+Y3Q-8dBd-?Hw zuO@l@cDbBZTbx)nM0J;vBa!ajJuyPad%8`gpYOl?`pf4hM*JXESf+i!oqs%~*L=ul zMdEE%@2{sT9qRG7->;ZQ#t4ceN-?G=e5t=*WY6@QIW!uWP9?($8L7Yt5kM%|X}Rhp zZ|@UP2IVu4nFavIXxHr;<;&)>93}4_K7D;=>CvpNXeCBUfsKAtRbdQb9_ckixRZ3z z9U18Q{LdfP)qkQj_zI;KmJr4E)X_eua_pm}{Pg+r-4h6cQay-4YMnre6TjYl`t>Hs zGlWAc!%3pzNUsB$@pR-fXT@TC?zY#toN!#fVB?tX%fBEfleR==38#7#f ze|)BJ!^c%grqd5b?^?R*um9y={@V>#!CL8==N0~+kPGDlkjw2H_q!Ccy&Q@2 zPKA8=_WJ&IJyeotV(MTfgr^G=;F)=rT6EyDpg^faItRMebc43#;NXwb8D#H2|K%>3 zk-CteVhcpoS=kUcoM!ENcXRhu^a-p{K%jCFmB(2kTrz*ph1D!dF6!y++mCNXdV96U zVlxU>+kAF1bbSB$^W}QJUa)sX2!e(Uz#If|=re?B7oJjX{*qhMP(Ath6MIc?4lQ(Z79-O9p5SGnGZjEtHuW6KCt+@l|+w*Zr?zr0tm)Nh@$Ja$|e0n(o z_EmJ7x6A4H^1ebq0J78Y_nlf&@L}8d)B`)xk+Vu^~eVZy`saYQF_wfx6+UHUDnBN z23I7+N!;8$Jd_^)^2@Ku)_gaSrOI-by`Axf0?p*BZjxPYuMTh5GtU*T+{|G2x>{nT z^!kVQpKAeGUfTKn+f}uJ5fJ*l@Mj;c&0T{Ey8_}au5@om@4X~{!j6Z897N3(jy4b>enG(PUbi$_|Hj2$H`<>ciZ z&qowZ6lu*`=20=snLE7sVZd%Ti>jD@;>ZwkHiC*4hu9_W2=0yH<$$Muf5&>OTY0+A zsxQZrW&h>!b#A<+8k|i_+ti!#uq!#zPh7iW*b@Gh(rEmn^i0&0#B-x-%Ju z9XNlHHM7X)<(d?`w@uFsp~JCgJX&8~r&{jtZ0MT4y-=SVfBX4<-nrd@3+=&rzwa<# z5|)5%*6pu$OMYSMvs$@bENXH`0LpOs0utcusL{~KV?cs_kE=FRBiC|9H+R3tAWl4+ z-7`%QqlM92$;uR^AH_o%T}XDc<< zhw~4{=M!E@9wiq8HM5~Qy@SklZq?Qrrfr10iW)wwfgD@~7oBXzs6d~>VacjBs4@{U zqm+H3Sp>xo(;CU!<~5hCRiwZ{1xh9 z8OLvFH|^vT&lMad=7PxG3(6KV5xD)Jk-7i!1zf3@+8ro9iZmhZ9(jzhy*;WcZ3K5uY*1KWq7BqYP{(^|7o2Xej0P37&lpCOZ&!> ztQan;d#kkpqLe&4{TE(N8$fNU?*%$<+SWNZ05)LQS`%TOMU*PWyixVBeYvbV!pDm$ zOeEQYFRoc|?+^`ppS*ywm3|wmC`k0E~Ov^snl7IUuFw{=A^3RyC{+2ZKOrtPmdb2Pir11s}pe39HQ1 zmoh_hGT$A?_H^D$Wn3`kIU)_SZ=m$VVQh+fY*jX>ei2w3?x)>uOm@a{XnAzBQiSP1 zBRUp4TRlZ5m5;)Yo-kbVe9uEK`5X*)Dg*L{86FSND#l8T&_!0lLzO}53J@A?zALGYKQr1-7NPvi9hcf8vA{9iam*KlRJ2*K6a|Oq2x6w%g#(`f#_x?;i@9_A)?e2Qr*#57H-?9 zWljYmWaKtO1#~*UpO%~bVKbyHynn3eiXqDn^%FH{Umog*Yf!|`{^N+xV!5bm3Q6*ZRu6?R=C09=#j77%fNQfXlpDp zxAFAw=*XMJ_N6crXu0lH(g|g@N{C#EUdL;7r3(N%e1Dyb?{Rq>r~od|FUA|Nshlr$ z+()b(G!6d}R&V{Wd&HbIjxZV}c7h~^*_AFG%s4ivw}T^pT*`2(WG*^Lh|d*^XBah* z`aq~>8KV?s%c&Z_{P0*X!gi7YA1s0OAf>daJ`{YN0cK%4#_cHPrNQ-x|(kAZZbp`(V?T^ zwJ__jLCZ?>UFsqUz(*^d!r#8Fu>5I^nK=NGrZKyPc=|2{MFA6zs#+r_|Lw$;l}pg% zT3dA*06Qp-z`#-B?nuCd?76vpd_C0*9JB}xd zZYN**vC;38lNCJfH61+RpHT2oC-Ld?Ly8eAig!g`IE61+q5Lth?rb+sKUBel4C>a? z!|Rdj|K*Rj&?VN=!It~@-`BlLQ6S$ZSD;%-JDK4_%-o)hx9PzOW$3KB*j?I{ikjEa}McB156J_?Z2&c#)Cj5DI2{ zWGT1YEdu_uMK~=w9GG@nwruVG=|RcnU^k2js?KDwbp_Z1kpNFfg4Fr9Ev%vZRXz6)K2Qemm4qQQpvU?9pWS>?sk)`BcC*3^sb=pV!T#>W!6i zoJ*ai64$AO>A>~AWzN8k7eui-Z3Z0(J@QGfWePm$$d1HVis4^aN-n{Tl9iQp1-cHz z?>@D6#DDV=QEq~bYt`vi<{bN9Ql|qT7gz@irTgKD(1b~BhU!63612I%O$9l)ATuI7 zvx~y^Aos?U*vn?cJ7Ml79)7*uW9ER(?a-6JEbTW;;leAso0XMA7l>=DOV(UQq6Vr@ zRA~B-7^mT>5DYk_i3F;4Qv}}dBH1hrnghi`JDT)y70d^Mh%8-&=l)1q_lJ_pufZ?v zFU3aGgM0O>+iFW!85X($SSFol7AoNGHQYJ+1=huE0m>_K$VH$KJAx77mpTz=2x(= zM;J!sP{_B?7KHNPcQ+Va8VMnnnW?hCs&f7I09{Ni_RM4w!L~BDp#en6sCO033V4Qh zQh-npy;IW7EEl< z+|a7DP}6YS0TB(Jf*aM-!8hqE*2z2j`=7r{*Hw8<`0Xh8q}|S`rVVM9TkPCf*bfOW zDWYI$vqVzoY7A|hOuS0koK^Ak0P|rnXbRc`POHYu?~GTFZh~UN>z>HFGj(wF1&T&G z7*(dS2)7q^FD@|*Di^>YW+Ic;#8`@cBAKg=RMtvya#Zoj)b=AH$WlRt$4$)Kugshg z7^7hnf`G+Ut80U_3_pHzjZ4r_cMkWWox;5gBW!`RVB)sodqT}#*(EI&I3C$E=Z$ ztsww;$0`Bve{kdw2SV$H(|W+gJ|OfJ7^RFcz^Uf6Uktq9yZuqPgO&z_mP|CdOW-8; zS|n*_HZ383Fvi&7z!THJ7_|f~0xBP!FN+uJHXl@sU~s~B&0T!a@mR|c#zk{OS1C&~ zShNv!B=SJSO?~>-Jz^Xc2xQ#INY*^7JCT_lTWFD_K7-{jIS4vqhR&gFy1ShCXfyCw zZ7F();_^%`xh;Q8v7L=(qRa%SFLmLe;bBnYU<`NF3ACQb$PDLWj^@16PetgCPlSwO zDOhDF(a|D#ES@z1vp<489H$yXD*c!Xf^ZdY$0XN@=37zl#J$Fy!+zJ}gI*0Zsk1$~ z4^E7K-FVYs9M!uMx==H?vr70`OPup}%uulfTr)nr1Ev|VcjTTQKisa5`d&j8@*fjh z#}bk{w8ofLqv3#ndkJxez~^n6qv~C_-*Cgf+EyWa;5U2~Ox?+zb$jk-66g zcmd1AFnH=I#R2X6nK*{8N>frs$)5(r-P{DC&~Ox+vupc(7grmmiXoRC$rm)>XU3uY zGXm}7f`pBdr|wn>&Y}n7CHTy`NIL|1QX9WD=`pg8kcn1McQp;B>lz@t%5>VV@%vje zI0CDvR!xit(r&fac8$ZX$8w&@peu_pW+==|Ahv~g+%lSXS&P-Nl?l-)7iHM@J+2jP~eOKEx0@Cd>ju8c8ll=}s#Z0PLzw8`phw6Gb z-E=qHV#l0zOY6H~YnBUh>(Qh#tM2=?v6$b=v_DH1)-H^8Kc86^x{qp;ich^vH*>?n zx^wx<%f8cKGPih4z2pI?r_$SOydO4>m-)a4MQI+l$LVfySQ5nAzp+=&yH#4CenyRKg=c`{oKV|Yd=b8-3#`(wf`u9QYPoc$y(f4<~*0j(ar#GF{ zUrYVczYNumO)kWDczBidguZ3boW1@&dpS;yqv7#QNaSo)$4P59N5$dzu|7;UQV)gn z=+i@H^7!~QIZ82?$~0@E$J%yPoBj63puf$mejd-?ei|f?8?)=%>5ONASGQkme@^PR zso`)RNLQtE*UDxje%~z`lVYx!{#>4++?I3I(zG^cc8^!&kT?3{Q|pBW_{SRWIJmbb znKrBaxtGUfAVN*ulapmWrEc%||@--?u7|-wdLDevA0K z(|;dMu3ff`J7FiIk=DD1=`bceoaWN32sH;hil;kKw>CxRKG~nAZ-}m*bpW~QIP>MR zUNBjM*YW>64^}b-LgzALF?RXKt7Z8c9_I9qe@u%Z0afM|N}F+p)kK3!NvCau zd;k9SZS{?}&FcL)Dx$hnIDm7>X~_v}m2Oi{UvvFI`|&o1i3zUG^=k`ICU0+B>|j`; zYE!ST->Gb>Yn#lNsF0}-B*It4BRC$Fg2O^xlEI)g9#&8*T3qP`v$rN(5!|Hc=;*aw?g^ z?)E1Cz{bV&xa>}a0y@w0_y2aoYT-Hc{Pg7!fmsO0!(VR8WT`6hup+48@wz%*f9xpw zcQ0oy)&p@-o3YXk|JDm_GR=)X&OzPiDR}34x&6!K^1Go#RmwVxX@iYvmqFBKI&>Wx z2Dfw4eS4ML$Ghip1vxgMQ(0hgPRFI9$$tn$zufC4OUXj+?o*=PgS93_9YQGiYIcdr zX(RoP%|HL=Z^v2=L}38hEn)Zene0zMSnF4|Q3}f5X1`iSoCmv}Ek)Vr^pC$C=f(DF zbK10;xkMsGyPnS^{{7~!Y2~Gu&&Rv_yQhbL`!(O?Ehyj-aJ}~*i+uCr-1|_yYXpOk zG??$t!7rPeyzDQgK0{t`>xJ~2&E-G-d_70V@#|?6H5x{)8?o)Z=uq0GE;8DNz5Mf2 zv5BpV>D&i~K$02pXU7x#gKY9XuK>wq%6VDa-O@7;R%1QGiSz@xf*dz_9Eu>B_ zM#rmx`(RKX>}N)-7_0P=d>h+6eoW8?K{2E*Y-nW;Zf4=>^uxAqABPhC3G9J1JZF@ceuA8ED5w2J(;=Zx@X3kkkDL?=1M|?7nMS_omeHOa z3_8|Egx~-E^KUPQl+Z(6nWq84f1D4@lr5A3nFNHX`VS0Skd3>1J zjJ6kI_WGc~>~=BY0bEjKSL%t!&o`C}{;%vs%yr4yOhfa)nXuu?)`Fy8OQ(umG=TC$ zCX*vY6%_oG#}bkoGAg%c=i~mko?FI0-~RsR^?cd9{PX|$fB(TkbUfW}kFx@sZKSxa zXOcDKp?VD?*5LxBEd7+JkTvW9ot4_?C_<;1y16Nh#^uyKi(qL6=|uADbCTdtEazRK zEP*V?z^7^qzI}P$^~#I=%kOWyhJkv2B@0M!XQJ|9n+1Nt%#S3X?z+GKZq>n6UY=%0~DivUrwf6dlMRX9|5 z873+BaJ{DNO?V}g9=|-^FmBuMqvbr|_OQb+GJH;BV5sgF}qje;+N!sadXFRyy zubTIz$?UY#)E=Dp?Y!fX>m%Xk~9Pr=TZcg+ki5CkqQW%XiX zZcG4|)rYUHXC6dVbmir;$9S5(qDJ-RMwlFHMI7TWK2Re1fpvZ=n?cLV9rj@+6f1ou zkE7<}*Due7=m)qelDdd;H_1}d2iW0-Xy5wW%FX_E=piHQcXoG+Zboo+NCjDJ)kix@ zb6o_sC@u`5EQBZq%$fb4=mID)0x))p>r;=9}ZzAaikE@(|HLH6{nR zN~4i#SQXwnGEXRWmfKoB!C=2WZ?sda3Q?|! zfwdFWN@g@W@MggHb2f(AKn?N*NzJ#%PQWdPguRGEIxoYIMCvA0nsvMGLa_<2ubZC! zmOJp&u~iqcMS)hnPZiO`1f5B;(1MQSNK}MCPSyylv(xeSQ>1MnKlak;Vts0XQCC*n z!Qja1+gOf9d4?3c}qx2MG-dk#X#%mD9*LZg4}|EUsIp zTgqUymgO2ly2VZUJQ^w&DH{w{8bBK6_H*7lcR*vyvYa-5^x>5r?!5QD%Wplu^E>Bz zzNhl;+wZo+t2XpRR)CU-DPSr_ZUB%p+}1n3cke*&#Qp~l?%vf|zM0{U7E*S{=GNiu zChs;3h~U4t4Ew~#0twjs*S8Mr``}n_@6LPn?Up>H6uo6fQ(4)@3WBSCqxdik@nOj5 z;M}gs^zGg?7Py_^{t@;JDYRFx+2%cPT$$YaiMt7LFtqWz0eh!@PaRJ=@{c zZ2h1Ux#y7*wKPyo`s%h;)rvZ8t1jIv32SNTMs@}ZAv50Cp1l(T+s60rm4pV=V0^q^ zQm6jD;T8p}K;PI@x>1@oD6QbpWj}B1LO{1OG>h@^J>~#d5(q~;2SpV7^Oys+$gJBmEGt^++VFM5pTS?u=t1gcpR_F#4K@;#Bu+;;?nu5ux zJA{#ZAYrj=>IgWp;CRt`4gCM@@QV#?gM0RlGFvxc$?5CrvtbNedZuApbIo1#HQrcN zU0sf#7<|sK;Ob{X*|Gn=-6Jx8?73&(E~X|%O|NEbZ7-K&ld4?ZP~KRBxwW*VbD~Eo zx4NFud+)Q1^yAgtAz@f&kP*TN**OCYu|u#d0QlE;459wf{lR$-^t62^bF(zb5(;#Y zKCs3Wk?W^%Et0Ary{M_T#blk_ac^J~ckSPEV0$mnak~(4U^1W#5I_lW z*bPeW+MsroK@~zC?f{|NqeQ)O3GNy0h~&S`HCr}ps6pZ-)NL!QR)77LjawP=#Jkv< z4>K?{LIEB0B8goZ-LgX)G@X_2{xrm+_ek5`bD58sG)&-M$yY5YpyR z42`ICq4^Be3`Mc7yp&r=L{@|T5$44;B!4C;Bg?@~^yPiXp2it;o0wUNhbH*|>$&8Z zc-n)VL=)08vEABc;Om^&F)W4`pkjEyPFVO(Pb-T4Oa~ZrOGRt*$e_%tXo9;&wzbiA zSY%t6%jpvg2R$71f(g-x?(c6Y%{0W6M*mp`g(t;UWp7JAXe>4hCTtMVb`hAYFhmVl zJ`RG>vHsRNfoZjpw$NR{NjS@(K1IT})H2((H?-L-VY;^u*}m((y?gcyF$9lfWb&%7 zxf`f`L(RtaYHKVf9Tx_cwn5J9rk3)?MkrpXU^957MD{dM6q;pIuW7(KIcPYuturXe z^wQNTp^V8>TZbUN4gC)r8jv0W%#LPrPQ)0d=+6FzdM@MA_}LqcMrJhuoTWL*H%DwK`TWC8QW}iE9adV4O;SAthm+nm8`-{SuG$Y5%I~c zi4J@R=sK_(bXS1D z)+fhkc$Eb7S8Oc>6~ zOW++q7mXwY?}aH?i#Zcj2vT!FonhORh@{-p$(!I6a&v712O!g8K=;7~K#O@g0wyAV8t!ZZbF7M5o23TnY25U7c)Cm{zufWZ;Nk9FbZ5x$@c6B85r z_Kk683rt~{ZN^PLwwscQV9jBe)=71>@!5vJQUJy7tT%Q3n7+EU_VnnP^hrkN1i|PHOOK^WOMq6%0i?B zfX%ATo@#I=5xKG&P}iX+cCwn%V?Y7zf%*W>>h!&kE{^FguF4>pZG$}!ii)(@P6y0H znm$voJ#vSI^UQ(?2Gv?GUbw0X&v~El2BgeHa#zoG35-Of*zt@G^-2KREx?5lT@RFP z+EmpjS8GjEL)*~a4~!2ZI%BaKQhaeS90>vG>z9-+=y>3H8f4P2+64~^QAPOlcf@j!%btf*fL6d9<}+Gp!wBH~cBtb~h7_@oZ?B*~SUgpLFYh~!V;IRIN32%>>uiPeBD$ECSrCf2(V zCWMk!9qm(SHe9aBG)s z!90O$ieua>aZ-U4*cgg>7~ivV@9=<)wB;tKq-&aMB3#}OhdAax5KD_gtr875=*reI z8$^2Ks5wfYbV&|LR&qB^ zQ2i)hCbZB&k@ko-$M7}r!qQ}U(h~{B*lH2x2Nr2btD>}1PvOqQ2veM3-z<-DBNx8Bos2dY?6QXc_05@g!;q9aL-sSWLavciO5R5 zgwGIQ3IVsc*4$wy%_S)J47Vgtji)yVG+;TzL=#A%NasZ@>>3!SMR40Vl4qJtY+M`Vyje&yHPBwhX}RS^Cqz>Lxb~d;tLIiGQLmyIi?Ke zDpAq&W&3KCijXZS=S2lh7*uMMVSg=`{=*8$!5sC`1_Ax&84A-H_{6R~6P&~m=H0^u zoC#EKc)eL=3ID+Da|#MHMZabUGP@8`U>l>x~$G zcOG?+Wd2_IlF&CL6LZY0qCyc~>cYs~$U=lhQtKkV0#VYSb@q*$?!F5i%@$~6beGt) zeY>Q*3=kg6Cyx-apNIpFm~5UF0$R#l)ZC(`tFU;8R=~3mE^BHMN<$rq013mCX@baD zSYH5-0!4H8?RRbvKd^aAdGog63H+8aXYAQ6yPN$emGy{=34^Dv+*oAA^qE~8F zsIL?0LJ7CK){=c8OKDohpvgq-w*e#H80Zy+F(=k{p^~L#;$e|?(xt^-8$sK=MeDL* z*=I8wqAUS+AKo!0N|quFEm4DRk;t5z?-)9 zWgG4ko6$g8hBV={LaE+^z(QGtddw3BFSPw0q zHyTIYPKz=(a0KpKf&+0t+p#Lq5;>JSR4F2Mp*{(5MpAQDaGzMR1cVX3e~(7DN3*o~ z)kHygL7%SQTDl1jP%vmg%8ZNXVm=qB6w;Emi0YD_Z#V^@j#?2rXodA(pbP|!B>W|i z*Fv1^IE>VK%Y(=kQie#fgVJ%fIo0iZw_{9bkvnEbSMzXJD@0^#@9x2d?jf0LYr4ux zL3QnAW!tIk<}K*n)jB#@+u2!Wbr+CLeOAxbjbjn}*1WBvubXwOcKc)ZqLr%Oy5W6e z>&i0B^L2d_qq~u#?r-QHWG!y0*;0Fl*ax8tBYmTNVv2`4`fBBp**4Nt-dMV+mO-RC zVw<;*wpMhNHuN@+Gy$oM3(D;p*g4)fKtH8=1 z(wLZN-*exOViksM9sSU*2cb%g?!IyHh$LR+53Rp@b3>-ISoA^gHr3V9e0w|h$!RpQ zN5aY0zUEr7pjg8<5Xg6j>9NeTl4q8gi1$0914S`*q3{(>xMz>JH!$Y$PC%HE-qF@t z`2vG=(q!1WX#?}&?P7G~aBc1uWo3f)bk&V^PK?^f*#kDVjr0))rS;v_)ns+Umd>&5 zv=#sSqW5*R;X222*4f8<3VzZY@uKEB z%Rx`q$mnj4iUR{5n6Q@a=pUEMiIc6SO7u!u&4$WS#J=4vTWYq3mM2Y3ZB=V&^$-A6 z^QO&JogFnz8#_QAnDlz(ei`h$XYY8|=vZcKWQPrno#G%7i?$4*6ZlvL&%@4p_YT2k z?&t~lEocEG2%D{JQK1=c0}8mSxvRFU7EnG@w)O6R-qW;L*A2qLS}5VAzoluB+}*HkCLDQ0GL*OhkqgmzPp zn01nC3`9YYCd*2&PzZ#D73B)wF|srG)Wnqzj(cmL=&TObr5^G}l5mM{Wo2S(17Q!= zFeo{EF--CTqgv#buc+Yrg^pDO5sMtOP#EnsGZi>rj=&)gXf& z0q-ACoPmk$WdFT8V^zcKi>@K;$9BJgG$M&*LKzaek;G96MXYO)unQUx01i$TlF9aW zvuxeCDy%}~^Tl>mqF)i2$`})5;8v^JY%R0Xb~7gtSK^y#rCbc(H;c!5}?)U zjpvx@3GdwKt{r;>o(+$TP3+#oeA}19lCddqBu|jesP%Ny;dC*QUvo15CVv6E%h!zjdQd z0+Ys#iChWiZp0Gupt63zy5ZU8g$x~^Wk{}3JqYk7=!otI0?B&BcB&NpedDkwkur_v zL#E5%vyFxhmSKnSi@}C93DVBUB&GXzh!lh0uPZ63yZf&0(cbd0{hj-|OX|v6Yu+h4 zWToVU_dQ6r3lgR7n)j`z>aG)z#Op035(7h5ZArD|rn2tt>h|{9n)dp^jzJsS%s}^e z-%wlk_{2_L-ukXu_QNJYsMudyNoU^1k%@^%9{S+!ecQuyA^yI}cI+PseYk&uP`$`Ww6I>t%WE9JchJ%dqjxY^!BokibvY&nnFIaMad25XN?^ zAx6=jd&YO{=^5J@s|=-GHj_5kNv3zH0wX0?^X;3PS$P1R8l_I@*)Ddwg<%{%rbjXW z|JhkL%C`=LC_JRMD-sxv;OOt`3+gQZj5e&Vd|(`pUEAzm>lizI#aRvNf`(;aM6Pm( zfWg*sDU#V_4WzoD10!-ky6ejtN(FWHc2uG5t0>R(n(x6;Ixx0VVm-OA#{tS%FPg1< zCh#yKkX<_lY|#-HWngW8L@kBF+S+hu!g#By-QCZeyJY7Q>Iio%aIxMO?(cv#xnR-1Fs5hmMqjC@!E zL1uMICs%v7^@bHVb^!bVAgmpA4b&woYb9rCe_uC$#*PE`-m~A94ZTr)^%hdMx6 zjvxy{cvM_$>Cz=susYR?;IU!cwPzom6aXzd>Lze1sacdGqH#xu`$E;00B&3xT>KY0NK3m+D4KL%rRgtrgC5yrvh%f13G2LfsDtUk9 zpJE-MA>^>yqJJfP33E^oIonm)55XA-?nbB%&#!lxTCvqJ#><*y6tuu^^REO0oiyV? z@h$z2U9p#AUY9dUnn~$pn9CxjwKI%mG%vmxTT`a>;NfHN)*q%f!vJd-gOiR4#4`cU z{Dq?;4C)C{9%eRnR)G21=qP>wh7SyQ7H3;~h8V6Z2OZLsVeSpEwLb3=Ph%yitCaj8 za!$t{6jK=E7Ak!f3mwF5$C?`qq(dV%u){=)?P26K0Xt#8AmO3MV~xRkE3ZzFHAe;^ zJ4jK_e&9Qzq1ZhN-;ll0)}P%6v>{9-aQUJwtoTBF@wSD>*@Uum8uIM$tX4L!u`9O7 zaqh8n2(b>xJiZWWbyyBV3lBiOux+^?!j{J-gWWo?cENk0=yp=U85bcWJTmMrrU2`< zkJ#oTN^BqqAS3In6+ydef6XYD?8iwPdwKeVP=3H82==}R%*2xulyEKf-OX*)L1!l) zwB0y!QJ4aQdxb@aMb2%w&GF0(iUR}O=a=Z(2ExipW8uAJf8Pfm7#nT3sK0mJop+IWofu0;M~9mRx@-Ge>+i&5!CheKA(w*f z*l6*V*t+ypZv%D0XV^c=gk+CzXjNs}cS_$lEE+WfI%8I}bRt67RKLlvDdRe+i}Xme zLvfF|G(a!<$A@?Bqi#wQ(-UDP@&zJBY1tIC&-y@sJE}7oq7YOKF_Bdpl^Ad`f_t05 zpCev`^_o)Af%Mf1FR+1XWt395Or6vtH#^ zv6h|aSC~&CAg+rX1OMON)zj38lY#L7d@7=~4d8m-Q!$BM2BHLY?LJ$PREtjKgcH*X z7vx4L@j+Xv5DVl|S;dyE&=rkDT^rLc+j%t}zN*Sn0Aeh7M(;pxMnIBX*g(L`0yf3C zCQ%Pwh_+a>May9fbiHWS42S5b%r-1PgX8-URBWrOt1PXS46_Vg6>l-st+T~yKB^j> z?d;})LPEXe7z&gMhbbg3R})*BeQN(0lfSJYI#N=txuyR3S+eC2*Q0S8OxJk-g+L5fyjltZ^j2df~P_A&;3Qg${zY#oj;I0u3 zo005t)0Pb=fy6=qr}VM#sE=T(h&log(l1o>ur`7p5#11ghLuD?B5p(%GBio?Vnm7n<2+Ps8;AaUk(;)LCFM<^Co;Iay%i_w@@*~2A``Y3cI-ALGM77CK@fAHNpgm9}O0vp%E|@ z%YN_>#~NY_RT=3K8!SXN*Qi@|@Oy=G!6G5khX7|$(QH9hcacYp_M~1)jjA(sg{+1v zCF*akh{n}VK(!{17qh+%Ha7ZKqm zziT8PK^o9@mWW)L;eG`=mxL>5sj17`V~sTgW5$Fcu6ew^_;#5o1WGTntr` z*lgFD@g%CE0R+`AEf)O--GT0rNIEdy)B@275v>(O2P6@pf@h_%UNEC9JMOmpMp6|% zRU32zlSqwlQ%)q5pqx%#Ys%rQVE0#MuHE3X<=~3YJVPjg=;gx;w*Bz?h7X97fSzjP z(`JIyQ({TRv1tB|4E-)~6OkjT7=k27mJuu?i>DMqM44OEFY7`^cN1EVHS zpmyPZkiIi~irh0Cc*tovx{QH3vXfxO2m)~q-GM&lpFvFfeL+N~IE`TA8YEbhMc5nCpMoe1aLr47&_4Y}Y4fNB->Yx>A~fLUQ1WQi=-qgJZ%At7~8oS+i~f#leV z$E`x@Z)>j)YH83R5{6z5W8DER8f+W7Nq`%Gcxscrp&z(V6g#cJZo z-cAP?6>1fZs5T^*G#%?htVmsa(Fs4dF>j<3U$%5Y)ER%}&$bbB2@54GshP%hh#9!4 zGaQgXWC*jmrj4D&l zdK7aqq+>{6XcYram-)x05N#H_RN`$)Ml92}_*7y}gW?Gees9%`WKtey)_a}hDzfj; zK{R7Dzo{HPBhtc~Y%vW%E&N8F!B&7 zaaD-Dl54aUMmUyyt)vPzK(?7NS3}xGn0270Lt}vV)RxqHuTN5PgYr}S35Zy}tj9Ld z);0yVBFAPRBxZO3B958hidDrVQkfWD(%29l)St*7rL9a~ASbmAZHD7JWLs=FXl^7@ zbehYgiDtPCcK;v`j!QXnj9y}j%(be~gFzBVD$9Jx3#%akuj>4!1Ons(?ZTp9erRS3 zwf1v>aM@}l{NGHHfy{PSA`(<9=*TT$0kk6bf;q(K!Xh31Ua}WxNok^y!r%;k;W8!D zq1wr6nP7LMl`uHNk?-lT?k9p!W5l|M4nT{Bp)iUO}Iw?KuFz$V=5ai5|jDo9{3 znrp>wB7-qej9&$g9oY<1H{*z9sAQilx*RfoRo1 zN@sPVcgrUjZXKrQm~19&GH6{@ZwN@`hO-p{hNy*@F{EQ;>tmyuPDM8g=${wIw^qr} z)unP#>Atp2nWmn)*6|7)WlfpJ&t`w&v2UD6J(VhXDqV8qok!mFYs*Sjzn1)SBK6tS z&!?VArJqSHdnQ%zOltWvsau{&t#~F?`10BFC(=*-V22yi9Va@TdT+;5YdT5}pE`1D z$@{)^qUgx-lCe`I>rS2cnIrG?rCTzxeXc zJYRIS=y>7U52v3mSiS80iX(*{vFtOc6H~*#H~qO=&#w5x@j}w{Crk+|+^05^q z$Cqy|^48+x>CLmO9fL=H{Z~({{?M-<`HkN$dGV>jl9wId{Ef5UI=}qjXHuVCp499` zHM`5*Ubv#<^Q&F;m9tmQulefPSCUIo$rrDF_3Y(?3ypmwDw|TPT%C`k}8rZ3>1j zp8DKMO}gUCE5GXR^DAFIzT)}cJzFq*>zAVSX3xIk_&W!d<@!kHd@Si4jrs23KbqE3 zN8aW&QH5uZyxptb7O#4nm%RP>+n;~&?8Sqr{|}CAHY$<(H~u=j=F$^u);y6tbYa!w z7cM-WDp<27{?E=`xDfxla_0Q`^E2mDsp8viyRG=PZ1&9L@WAr}sZ{0E7rt2k#ccMK zS86^v`^i-5)?2^!NYNu%M<(-lYdm}U)Zu5Z%+8#8BDJEZs5tZZeD>;WLAuEmFI<|N z|FSDeR?W=J%+CJl+&lfY z*Jhu4_La+*FTWJOcceO&#qTGxC$Gi%>ebWAoy}gnn8{8SuUx*&Q)gzc%+34m@R~Kn zYt|fA-wQJrE*x^*;ZJ?)Q-?p5N*#Le!3PgLn9a`5|CG&rDwR%u^z`Y|=d<>u?4-A) ze)BiK@WtQy;;?5le)3(fe8GF3d*qLAt;ueTBlES?H{zIXy)rvHJv}w`T-10nn=P80 z%(x{xJ2f>OWxG0aC7Zo;>D-Fq!c=P2s`Ybov$I#O%)L}lP*hY{Sg_VjlaoK8)jebC zr&FmbS1vs}J^kclVc{zKjK`)Potg5Ksp+G|9-f`dEQ^PxQU%xICE4tp&T}OFcOm-E z(Q&XOdOUmb*b8w<98**ALmZz<&QqxebEm1FS~&mc!g2&(sOH=+xrPi;VOrCW3 za60MpLx<+0d*V2DtY}4Ca`52n)!a8K8ecf3vI|$Gaw8?x?mI{7lxrN(zv<#!|IW|o zU*~Izi;APaFU-u&Xa`S8&nFF&Qsiv5VBNu~)Ot-AEqX4Soz`M^-IdCC^~vA=eLa{e zS-o~`O1Hgm@uio18|85L%dv9h>g3Sf$zcpf7iNv==)%<8+}st%Y(atM(LlL-Q|a8@ z*=%cOGXH1tnVOzW#%cb`$xKmUYHH@n)by+pIMjbKlX-8{e`jE8{adyriV#iFB%CI+K~qb>Kq}T|Bz#)^(|;pI-gwrB_~@otcSyQko}u zonaCUQM6FLZ2Gx4(%E_WOd1>KQ5gXpcDmx!*aLoc~Dq z`Wv2`d&11jxpSwUJ$xiNBdS7J#1Z9;qp(o*mlqZ#l{Z&CPWv>)^R&;GQ)@o?+$VjP zz3@omBhepPYgw!(A*^Gy%FXL1Kb9}=;locn5fUwb?%pRZT}sOP_^MThQd3`9(m!h( z=WhHao|;Y{el~yqcm8~7YRUJL*Uv*9UtJWOZ+qLC+dGwr2qKRRhJ_=kynpn+4lT}v zjB?DRFP(e#$s+S{)%w=QX6I8$KWB?`<3Bay4#iux%(CNCCtto3iIdR z`sP7uMaR_qoC>S4QYJ^fTubYp$&}a(PDcHv9oqFJ$HIH^H>J`>Z0;cX)>djtB8*7O zOcGlBJSB_$?PZC8%a`Xne(Iw9_j8^_ATG`yT0KHdNck5J(lPYR?|S6N#C+1pQONWco*%XEL5P7|{{`se- z3qooY!zlT(P z-4KpdI-Oc~eSF7-lbOZ#n#|w$2A?`PscQZ+6rNZg)Yn0ub^gSqbIJMRtJZ&)`X>cl ztgrg-jV8#yHeY}9MSpkq>hF_r&^bB|9(?pMItYF8;^q8x`TNr8shQbF8(Tw$7ae^r zkz?-7 zTwGij%Uf~2HpyqE=*ID$&0cwOGWYwHsqEY#;-0iiTDwx_a%abB2BU5WE6-?jfkDCFL2f3kM%+AC`t7tf=0LXaJM;e|72&V2pr z7cXA4-MV}^e|`QlHZM^`zrGd?lFX{&gH+JWh=Q0c5`QY(4?{SAo?DH-y}tQ!Ed9*i_eP)j>yyFZ zqWpQT{@2gvudKE@(tC2-)8x99D|2%2^5wbYd|7H)N4)1+_S(tRy4Fex!rJVM&z>;` zUdlap^}FJCz5d6^`Rdgl&z)ZU(WKofGLwluadvuYddk$zzIHS-`G8B8KU!Q=c=(Cb zL7Mj5K;NT2@5BOkHC zJoL~*g%8=SJpJ_3SDsGZ>z`b?zP&w{{_eVEE0!nMUAy|)x8K*1d(iaB+>M!4g)vLg z1(y;Xc7Cq7_~^3*1?T2xW*%*wn_HhY_UMU96>8g>R4S86^n#bBrzul2(`%0v7H6|Z zk3M}E-XBLnwQ{U`{wrrryY@xI z5D#U)^{whpyz>)Jr+(lEPJiT2w8!M+edu>Xv-|WHzVL-?_7r=@DfWzZ_KbG+jNB3L zy75^0eg6DVqS&QVhmBT;$1mJJmAiZ4y1e{}eeBh%vj^kH6)TF4Wi6Fcabl@V?tJp4 zoa*t|+K>_q6ruS{PEJ~S6J<0tJv&tr5<62g`GWcOO+RKbt5?6DQZU0bv^Kdbm0B2h zsc4VrwP=qx?prwjbnf)q>>0_=*_@4G;gaMd_x)o3=lA3DX?exh=Evn!{+moD6DoBPU6abGf@h~=2xW^Z zGBJeguWYUyVHJww#xj3De=n7PRPf};mnZf9+!ikT&D@f7GCO~0+7%tC^x=$){H?Z= zi*h{ItNFX%{8KkZMHkmQ`=;dms+YU@{Q1k59<6Ll-FDl`RY%V}XM6R;RBBlPwJCX( zi>EqDN><0G2jw>R$rHY}f0owYU1>6EQQt}xW?ol`;@6%1`A?E*eS^NAT2A;l@=v}k zIZLI^FMRRDf?;cN;r!1#9+uX>u<*$z4?lbAmy*ZdpqDMY?)&_hUtHJB@I-IPKj_L7 zu{U$QzN%Xg<0*ec^`{P>I(6f@o}SL1CzHVfluQP4BCdZc$I|+L{Nq3UlYje(sVP&? ze2a30yg7C(|GtIKoUmH_@}<0dSo|jc$IP^C$5gCaxg)i9T_%%1@tJyfazj8GLTZi9cF`4%HR*$9iSJ>ppKWB6!g_VWeo-0fm>FBRjjgQXc z-=AEUzP{fkx+n9$#pjDJp1YLOxNrP+GIQhEcl$eEj{G%0_L!q_?YjJVvPdL5PQ}(Z z`Rl*e&o`_8(&tQ{dmtn_=Gp>sYH|D~KYW*Ymeh)X%s*h= zx^=hSdh2rIGItPtYj5?;SSmu*&Xsp+W@)+K==`nLKN$q(MgDW47?Vpr7fzE8((Sq) zHpTrywOQQJu?xpVOXgE?aeNtvYQ?cw|9m}izh<+y+;U4|ZAx?zUp|&8K6dQr(W4dv z+t5cJ%{Ns3zNP2+iJSjDH~M47eQ$?BkTga9GheR!=aPzLC*z0txyAZ~7BQ7-TwMQ( zHOP%q$dFDXNd9^GQoa5>y-J{=N9^fAu5i!*~R&A<;u*oTNl^Mg9mdD zI(96%GFK0;OwQ)7y|%vfZ+-NYmo8@QEl*DR^8RoB>D;wzSFc`6cB9w#azV_NHue|c(KW=wzJ9_bA{`;hR3Eup<`mZfsyY6-UKcy16{`cO6Bk5c> z<aV9&fGAvBj<{mez3ewrhV;2*P%KV{qPn~)(Uo77C zut?6#y{wvE+)YYu@>;cmLpf-n;g;_q~7J54~1AzU23k+wZvZ zt_^o@+_ZU1>DIE>Ub}C}?~lIffcqD!6WkWB{n&T-9Vo7^e{OC_>WiDhYkz(2v5)?Zzj^3yJwCbg_bI>s z)Gk^DIpZeI*rN4jt)mK0H_kRBG|AVJL^$Y*-7oYj`v8BI%=9fPEkAC_1 z=l=1pocPs$@=t&5)!$h9`)_{!pMBw<|BEmF*1!B$|N7tj+gD#bx%BtxQ(t=a-~Wd% zKlhdAzxp4)_Ufx=mi~VBcmC6V{xARazy0nv{`>F!{{MLO)fbljK6CDWzWB}mb^fK7 z|KJb*=#T&8!o{V(&tCf0D}VaG|LijF17Y{Z_PwR|-8}z`X@S%C53C-$|G>mV`T9>R z`-!iAKQBF9aesRM!vkZ7zn`1m{GQX9`^(E8e&7=iA9yRJJH4-b-?EAF`yaUBrqg5T z`_m5}xPKtM|AucO8NSMhi~{M?m4||B7J`*^SWUc3LmzOMA@v4Q=suksDozS*BzXWza@_76NfQ2xOGqoMd_MY#F<%@(-X z0ykUWW((YGftxLGvjuLpz|9u8*#b9P;ARWlY=N6CaI*z&w!qC6xY+_XTi|93{5e|S L_^H(NZD0C793yUo literal 0 HcmV?d00001 diff --git a/other/RasterChromaLuma.NES b/other/RasterChromaLuma.NES new file mode 100644 index 0000000000000000000000000000000000000000..d6721e42d2c1366b11c4fa7f92a9d19d69586d09 GIT binary patch literal 24592 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 e2ZLQ?7w{Atw5FRX>iJCnci~3BjX+bkjDQ z7_hDDhio7*81ljpW5=-oCruZ&yII)QM1&?WG!G}cY18HY#72&7H)}j}C2wwL3QhFqxxr=m?{pJ>f*w-IE zkungp^?!i##Mrz87oI1udAYH9zqshUo^Tgw(TOdB2(SkFKkg}RAwrL)MI(S4t|LZoJljDd{$uOnaG;?`=9bh-8}(@Mm*dgKG#64PM;a9o(340ftcfZAF?t@E8 zr)Im!^zcD<^IEsA&8=(IMTxLIU(-LKmk38U?8|8s_8$CZW4lJ^7OwhsJ-cbao6*?K z9s+6UF~c0dm|Pz+9jb^ zBed5EJzeefLZi^D6S_?qYe`edJ5smM-XQb^#E|Z)dr8x(E3dpVN$?44b|(#Abk&-ZCojC>iR29%0;K;j4{p0Q8v%a$ z&v+2Fi*Kb)a?nO_N5asbh7b8|aNnPbm+^Q>!%I3|Cg5cvUM9iC86`}I*%D71;hek1wlI* z!~`-9#0Y}69>f45fFyx@UOREUcz@{sLy(U^LLeW2a2qk@IeVh%z5^RlOi{Ki#1f2*^f}i^OI>}pGTT{J$-MV#aQP!6XFU1B^o1Qw zweqQh2htvSbsO2gE4hn&Ew3wYujrJ&zVl1>ZN0kY`%|9{2J^c2yqEpZ+|(D=F5Z09 zx9%m~z&Bh^zELOl^+#XY(G_Yu{Nm4i4<0#rzVp{l{jvGyzP*n$AGq_mregzv7Y`jd z+I`^gGw(kBTKCSwuf5p!o5tUL^s7xLyI(%qD{UYfrHy2hw29m)-AV3}?jkKx3)w7f zCR?N}q*ZDqTcxdJo3xGGE!|D-k?tY)O81icr2EMI(*0z+w4Jm`ZDfbEgY1-ck_V&* zNW0Wdc1gQPhtxqjrB3po^dRYyy2wM)L!?{kCVt6Jc1yd-9%&EROZLKb4_Le5t{+Cb zVb()1y9=Ir5T5RYRXSj`U9f69to{Ia*$LiufY&zgz8z594`}WKRQCe9djRF#fOZ?8 z-U{ejA&M;!&1Q(I1){qPqP!EL-2_o@gy=O|osgtA7?Vxo%qbSDEp>ca`hs=twyAJpxIEAYY_;KKDkg7UwB|HKWLxc?Hj-$-^J-L~-r#CL%B z1`xmh+fCmuz$KwZ2AEY189(wfP)*pe-VUGd;I0mrUi!S>u+Y>ETo^ice%$Pcm_cORcHhTpa!7?fdIQBJ0}<8SNxYQLGmH@ z3gppN0Ki~0nK1**zX<%#MEYs?rAYp=(XPDsAP_(@5J3G;&0^utqV9`JAo#KMj!3iu zqyQK|0uTVuPyH7yhUkI&v7&y61+4%SSZw0~K&D*;{=xr(g+&nlWpNJ_BpFO8*750+ zres3=GxO)nU$CgSw9I)qf@d^nlZ@jmsQ@5L%$WiH3yVsYIxAL;V#6Jx`@*kudQ(bj zdd5`8wCVYC3KlM20`4z7bByi^MzbwFBU7B7KX*YW2{NQ_`nS%bQ14vc-jS^K!B>(k#is%(=9J1Smt(?Eh#Bp2<~U+L;Rv0{7+0zwWf?q9%}%VE0Z92mdptBLP`cCr@GkfC9+D zm~a5zm$`xbB_)fC78Mqtdq{uov}^|yfa2d`h8oZdx-n=*l`B^)t8iiTCB;Pxxqsvz zd0T}hbz-S{-+|%%j7cE>+FptJR1NnDkWlo)(F_8gC8HXttWeTWwx3j!# z2}Tdek8=155+fc?rcc^49q|9kMTnS(o$`h z0R%9bDM0s7dQKpph7at|pEqa7Kk^R+Knbu}Qm_O@6F|&8vd_Xt`e(!LWAVcVfCOLx zq>TpxQp_d<04W%iBBbtN-y{35^NWCf2p|0C5BbLe00O{2WB>>N0D7pw(Ey;hr^$!# z(LJXh{O9IC{#gO?1jGnP5=Oy4ch8bf!$e|{d&&-_#Vp#WF~QUag?MuUJM|E&0V z{8;{!e*}OVfF>Xwz^IhKF!!u&jxS~~{GBY!)7UdCQ%q%Obg8Kz)%Btp>2@!9tD$B%G)|AxFLVatsliEg6 zy9#Z+BZAAoOktG`pU*5Q5W%#$1u%)|DJg+vz+OSpQF}_9M%046T13so2+#4?sKt^J zI*;EIOUj1Xc;8@Pqg=}}v$+linH>x+$Qhr@y6pgZV12|mYxA_W3e{}o*{ z%HH9B*F_^WATFmY*Mc}*#;`=uDuEM&Ri`r;tQLokYHRqd=U#3t@VMnjC>RV#()G_1 zx>SdiQQ9eb0=PgRAfdVhsj6DH?!z;LR8?13N5Yq|z~_3zNyXuCQE@of$DryImNa#l z<)uHq{q6Vq98PC-RX7wnyv1QNz(0*>AlX<}p>TL`5CDh5kq82Y`@_bAp|j_rk+UCx zhMg9T0MQ*T`A{ZkS$4S`#Nnu@tXO`8I6Ah})ivl&%X0A4z(8LZhVc_>I$6#>m8{W# zmQytvO&}N?KnVnKGz4jan=s6ED0KSm_uzTJ1!(EG&S15}&eMQqbsA3)lrD%BMwnh+ zS$Xx`2%;{AHq@a=wKY-Ks;*kIy8^J;(rHo9XW2rQ-H`()-kq7Y$2r` z5RW@RAB7USpuju|z^VX%^=OXxddr$?+`M5hQ7Ow*o6k#|N2}dK|DD;;|BpUVdH7Utpc;B$wGqbWL%PuHuyWReT z{Z=SNLLx!9fWUgR(7j5}ksim2cDu2lv1YC3bkIK_zXqn+b{9R$b|-dc+1mAkgM$v2 ztF}54iMWESvI2B<>gtEr^;Sv>;MIpR7RL`ctcM=P~ZtTymB}gkjQb_`vyR< zABS#?kl^U1TS#JXB#XtI1yTz83!e6Pz6l|dOs%M2+)u9!1fhYR;df{ z`mT-+*V0|PAVUuNJ`@s!^#%f(9<~OnQ_(IsZu{^J8ZHkQBswqd^1&a>l#^(fEpdpj z76R`?sCWY%RLd@A%Y;GWorNUybESO~-k+hK>4Ut8WWpAr%)&_GdWrTqEo)s7rBg1{ zvqCPOiR)$ z8#ivOBwQ1cA!O$6f^n`xt5>gn4{WZV&O4!bA8f7-M*X*b05;dQ0$bWru(`e^&z5%! z*j(>Ex@E)DU~^qyELn~JBg}Q?^lblju(^IdH#he=u(|fMwzeXEuHj{(I3}<=T;DN` z*<3qq%;x(2o0-k^f&yl9eY};~Tn81K>m$Ep<6IwlnAu#Pt6(s3{&o<*DM z)}VA4ZLYT--}(yLT+cY3yBKY*jT<&(qRsUWD^{OFn`<#3?nj&JHygHnj5gQC%|`aT zqD!-8cph3XmbrOm0ZL$4#y<%^Z&5{7T#;FW>m)^@-!2Z+-haH+=Vd|GMVJo4$YZEkF3T z#Bpx-zwqM!{r^k9{tdSib@2F`Z@vBd6Msm&&+X6$AAWTDPiH9C{N5#K<@{>n@`X7no`}Y6m z&;IMbAN!vJ2mklyzvw;mc;a~A@DoRV`Q%ei_Z>a;OlkdLw$M;WhJ5h(v4xWpgr|*{&hepFz>-W=HRQVYNesI5kp1qIr+3rtDvYMvM zg1==8;CD!b^jvG^oHD#&1`S`#EyJ(o#(wA83g~^f_v!G}QI!Fe0hIxj0hIxj0hIxj z0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj z0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj0hIxj P0hNKjdIlsx(n)^?{f!y? literal 0 HcmV?d00001 diff --git a/other/RasterTest1.NES b/other/RasterTest1.NES new file mode 100644 index 0000000000000000000000000000000000000000..12ecc6c00f3053109127f64e3520bb8fcd982bb1 GIT binary patch literal 24592 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 literal 0 HcmV?d00001 diff --git a/other/RasterTest3.NES b/other/RasterTest3.NES new file mode 100644 index 0000000000000000000000000000000000000000..bfcf45da08fd7e416ab2d65f67818f298825debb GIT binary patch literal 24592 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 AHvj+t literal 0 HcmV?d00001 diff --git a/other/RasterTest3a.NES b/other/RasterTest3a.NES new file mode 100644 index 0000000000000000000000000000000000000000..7809084ed465409a73664b0f817ddcfb1167662c GIT binary patch literal 24592 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 YhuEMy-C5PjcltjMo&uf%r>X+~1E>B#b^rhX literal 0 HcmV?d00001 diff --git a/other/RasterTest3b.NES b/other/RasterTest3b.NES new file mode 100644 index 0000000000000000000000000000000000000000..37740c2e114dc2ffe65b72ef179ece5d8ca375bd GIT binary patch literal 24592 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 literal 0 HcmV?d00001 diff --git a/other/ReadmeCMC80s.TXT b/other/ReadmeCMC80s.TXT new file mode 100644 index 0000000..55397fc --- /dev/null +++ b/other/ReadmeCMC80s.TXT @@ -0,0 +1,31 @@ +This is an NES demo that I made to show off some of the NES' features. +It doesn't do too much that resembles an actual game, but it should give +you an idea of what the NES can do technically. Besides, I'm proud of +what I did, since I'm an amateur at NES (and 6502) programming. + +This demo is called "CMC'80s", and it pays tribute to the NES as well +as the decade that gave birth to Nintendo's great little system. I +tried to emulate the visual style of demos from the C-64 era. + +Technically, this demo _really_ gives the NES a workout. Therefore, only +a real NES runs this demo completely correctly. Some emulators that come +close, but not perfect, are LoopyNES and BioNES on the PC, and DarkNESs on +the Amiga. Mac emulation has not been tested, but should be comparable. + +If you are an emulator author, and want to emulate this demo correctly, you +should note that this demo utilizes of the NES: + + · "Colour Emphasis" bits. + · Mid-HBlank PPU writing. + · Sprite 0 hit detection. + · Sprite / Background priority. + · Split-screen scrolling. + · Cycle-accurate scanline timing. + +Please E-Mail me if you like this demo. Enjoy! + +Chris Covell +ccovell@direct.ca +http://mypage.direct.ca/c/ccovell/ +http://www.zyx.com/ccovell +Powered by Amiga! diff --git a/other/ReadmeSayoonara!.txt b/other/ReadmeSayoonara!.txt new file mode 100644 index 0000000..81031a5 --- /dev/null +++ b/other/ReadmeSayoonara!.txt @@ -0,0 +1,41 @@ +SAYOONARA! By Chris C (CMC). +---------- + +The demo. +--------- + +This is a small (but lengthy) demo which I programmed for the NES +in October of 2001. I wrote it because I may be heading off to +work in Japan for a year, and this may be my last opportunity to +release a "major" demo for a while. So, basically, this demo says +"goodbye" and "thanks" to all those who have made my NES-development +life so fun and rewarding. + +There are some scrolltexts inside the demo which explain more. I suggest +that you read them fully to catch some important tidbits about the demo. + +You never know what's in store!! + + +Compatibility +------------- + +Because "Sayoonara!" does a few tricks with the NES' PPU, not all emulators +can run it correctly. Forget about NESticle. Get something better if you +have a PC, such as LoopyNES or FCE Ultra. Even emulators such as BioNES and +FWNES have some problems displaying the demo correctly. As for other computer +systems, I can't recommend anything at the moment. + + +Contact +------- + +I'm the author of the demo. My name is Chris Covell. +If you like the demo, feel free to e-mail me at ccovell@direct.ca +Or, look around for my webpage. It is currently at: + [ http://mypage.direct.ca/c/ccovell ] + +The music in the demo was ripped from "Ferrari Grand Prix" on the NES. +Sorry, but I can't compose music. I'm no good at it. :-( + +So long for now! diff --git a/other/Retrocoders - Years behind.NES b/other/Retrocoders - Years behind.NES new file mode 100644 index 0000000000000000000000000000000000000000..fdeaa24d5c5150c6d52150fa800e646f5e05de41 GIT binary patch literal 65552 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 JfBt{>=fAypOU(cP literal 0 HcmV?d00001 diff --git a/other/SPRITE.NES b/other/SPRITE.NES new file mode 100644 index 0000000000000000000000000000000000000000..ef5fcf23d249342cae9d63156865665dbb7139a2 GIT binary patch literal 24592 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 vc(c{6INvIEionOL97Vh*=2X%yf^cP&mXW? zCa(4gK?ft&abKNx6=;bJw_J3~XRhb!`CF05oewV+c|qU$R)3k4r$>|{ks~EXYK~kv za_7jCBX6Zt&exupWRNt3lus>F=TGx22iJ!b8QkT^jQxo3mZ>cGQtYcB^7Woey=$eP zm34P%Cr<@s?;MvWEm^SSJ4q z=1ipV;$Zk5C{hXMCn8_noOjL!ZIksMA_(MY%-c9k~}z`iO1tk%+&!W zpX3#s=WvkYbRv;V*l{=z9yn*OPeyOv;5ftuA)?GU*NKT%27x94Jv%*}wTJ$A<(01MqPo3ZwTI~JKP`mdj9tJPry$E2yMQxJLA7Z+gb;uL z1X>CR)$8jYOIL;B>gblSy+4P9GMmnV(4~jEwZ66T<8xMzNG;~-o~?eW-L2KCn?lk& zk!baQm6rXGfB*y_009U<;GYTT_0Ie6e|8Wwh5!U0009U<00Izz00bZa0SG|g?+g3_ DTNoe! literal 0 HcmV?d00001 diff --git a/other/TANESPOT.NES b/other/TANESPOT.NES new file mode 100644 index 0000000000000000000000000000000000000000..9d8e0b4d9ca75fa88f27480d80ab512799a7d56b GIT binary patch literal 65552 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 literal 0 HcmV?d00001 diff --git a/other/TEST.NES b/other/TEST.NES new file mode 100644 index 0000000000000000000000000000000000000000..ab9c268e6116fe8e6cf61662c94be1dd6f621416 GIT binary patch literal 32784 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 + STA xposPtr+1 + + LDA #YPOS + STA yposPtr+1 + + LDA #CURRDIR + STA currdirPtr+1 + + LDA #0 + STA frameCount + + + LDA #%10001000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1 + STA $2000 + + LDA #%00011110 ; enable sprites, enable background, no clipping on left side + STA $2001 + +Forever: + JMP Forever ;jump back to Forever, infinite loop + + + +NMI: +; LDA #$00 +; STA $2003 ; set the low byte (00) of the RAM address +; LDA #$02 +; STA $4014 ; set the high byte (02) of the RAM address, start the transfer +; +; +;LatchController: +; LDA #$01 +; STA $4016 +; LDA #$00 +; STA $4016 ; tell both the controllers to latch buttons +; +; +;ReadA: +; LDA $4016 ; player 1 - A +; AND #%00000001 ; only look at bit 0 +; BEQ ReadADone ; branch to ReadADone if button is NOT pressed (0) +; ; add instructions here to do something when button IS pressed (1) +; LDA $0203 ; load sprite X position +; CLC ; make sure the carry flag is clear +; ADC #$01 ; A = A + 1 +; STA $0203 ; save sprite X position +;ReadADone: ; handling this button is done +; +; +;Re.byte: +; LDA $4016 ; player 1 - B +; AND #%00000001 ; only look at bit 0 +; BEQ Re.byteDone ; branch to Re.byteDone if button is NOT pressed (0) +; ; add instructions here to do something when button IS pressed (1) +; LDA $0203 ; load sprite X position +; SEC ; make sure carry flag is set +; SBC #$01 ; A = A - 1 +; STA $0203 ; save sprite X position +;Re.byteDone: ; handling this button is done + +; Clear old and draw new tiles during VBLANK + LDA $2002 + LDY #$FF + LDX #TILESPERFRAME-1 +DrawTile + + LDA LASTTIH,X + STA $2006 + LDA LASTTIL,X + STA $2006 + STY $2007 ; Clear old tile + + LDA LIFETIH,X + STA $2006 + LDA LIFETIL,X + STA $2006 + LDA CURRVAL,X + STA $2007 ; Draw new tile + + DEX + BPL DrawTile + +;;This is the PPU clean up section, so rendering the next frame starts properly. + LDA #%10001000 ; enable NMI, sprites from Pattern Table 0, background from Pattern Table 1 + STA $2000 + LDA #%00011110 ; enable sprites, enable background, no clipping on left side + STA $2001 + LDA #$00 ;;tell the ppu there is no background scrolling + STA $2005 + STA $2005 + +; Advance to next frame + INC frameCount + LDA frameCount + AND #$01 + TAX + + LDA TILEINDEXOFFSETLO,X + STA xposPtr + STA currdirPtr + LDA TILEINDEXOFFSETHI,X + STA yposPtr + + LDY #TILESPERFRAME-1 +NextPixel + + TYA + AND #1 + LSR + ROR + LSR + STA tempVar2 + +; Move all dots + LDA (currdirPtr),Y + LSR + LSR + TAX + BCS MoveUp + + LDA (yposPtr),Y + CMP #231 + BNE NoRev1 + SEC + SBC #1 + STA (yposPtr),Y + LDA (currdirPtr),Y + EOR #2 + STA (currdirPtr),Y + JMP Sideways + +NoRev1 + ADC #1 + STA (yposPtr),Y + JMP Sideways + +MoveUp + LDA (yposPtr),Y + CMP #8 + BNE NoRev2 + CLC + ADC #1 + STA (yposPtr),Y + LDA (currdirPtr),Y + EOR #2 + STA (currdirPtr),Y + JMP Sideways + +NoRev2 + SBC #1 + STA (yposPtr),Y + +Sideways + TXA + LSR + BCS MoveLeft + + LDA (xposPtr),Y + CMP #255 + BNE NoRev3 + SEC + SBC #1 + STA (xposPtr),Y + LDA (currdirPtr),Y + EOR #4 + STA (currdirPtr),Y + JMP MovementDone + +NoRev3 + ADC #1 + STA (xposPtr),Y + JMP MovementDone + +MoveLeft + LDA (xposPtr),Y + CMP #0 + BNE NoRev4 + CLC + ADC #1 + STA (xposPtr),Y + LDA (currdirPtr),Y + EOR #4 + STA (currdirPtr),Y + JMP MovementDone + +NoRev4 + SBC #1 + STA (xposPtr),Y +MovementDone + +; Calc all dot and tile updates + + LDA LIFETIH,Y + STA LASTTIH,Y + LDA LIFETIL,Y + STA LASTTIL,Y + +; Tile Low Byte 1 + LDA (yposPtr),Y + TAX + ASL + ASL + AND #%11100000 + STA tempVar1 + +; Tile High Byte + TXA + ROL + ROL + ROL + AND #3 + CLC + ADC #$20 + STA LIFETIH,Y + +; Tile Low Byte 2 + LDA (xposPtr),Y + LSR + LSR + LSR + ORA tempVar1 + STA LIFETIL,Y + +; Tile # + TXA + AND #%00000111 + ASL + ASL + ASL + STA tempVar1 + LDA (xposPtr),Y + AND #%00000111 + ORA tempVar1 + ORA tempVar2 + STA CURRVAL,Y + + DEY + BPL ContinueLoop + RTI ; return from interrupt +ContinueLoop + JMP NextPixel + +;;;;;;;;;;;;;; + + +Random + LDA rnd + BNE .skipInit + LDA #$FF +.skipInit: + ASL + ASL + ASL + EOR rnd + ASL + ROL rnd + RTS + + + .org $E000 +palette: + .byte $3F,$21,$22,$23, $3F,$25,$36,$3B, $3F,$28,$29,$2A, $3F,$2C,$3D,$10 ;;background palette + .byte $3F,$00,$00,$00, $3F,$00,$00,$00, $3F,$00,$00,$00, $3F,$00,$00,$00 ;;sprite palette + +sprites: + ;vert tile attr horiz + .byte $80, $32, $00, $80 ;sprite 0 + .byte $80, $33, $00, $88 ;sprite 1 + .byte $88, $34, $00, $80 ;sprite 2 + .byte $88, $35, $00, $88 ;sprite 3 + + .org $F000 +TILEINDEXOFFSETLO + .byte 0*TILESPERFRAME, 1*TILESPERFRAME +TILEINDEXOFFSETHI + .byte 2*TILESPERFRAME, 3*TILESPERFRAME + + org $FFFA ;first of the three vectors starts here + dc.w NMI ;when an NMI happens (once per frame if enabled) the + ;processor will jump to the label NMI: + dc.w RESET ;when the processor first turns on or is reset, it will jump + ;to the label RESET: + dc.w 0 ;external interrupt IRQ is not used in this tutorial + + SEG CHR ROM + ORG $10000 + + .byte %10000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %01000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00100000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00010000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00001000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000010, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000001, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %10000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %01000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00100000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00010000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00001000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000010, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000001, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %10000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %01000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00100000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00010000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00001000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000100, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000010, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000001, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %10000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %01000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00100000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00010000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00001000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000100, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000010, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000001, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %10000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %01000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00100000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00010000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00001000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000100, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000010, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000001, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %10000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %01000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00100000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00010000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00001000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000100, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000010, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000001, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %10000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %01000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00100000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00010000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00001000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000100, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000010, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %10000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %01000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00100000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00010000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00001000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000100 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000010 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %10000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %10000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %01000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %01000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00100000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00100000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00010000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00010000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00001000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00001000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000010, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000010, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000001, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000001, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %10000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %10000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %01000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %01000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00100000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00100000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00010000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00010000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00001000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00001000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000100, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000010, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000010, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000001, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000001, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %10000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %10000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %01000000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %01000000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00100000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00100000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00010000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00010000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00001000, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00001000, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000100, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000100, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000010, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000010, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000001, %00000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000001, %00000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %10000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %10000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %01000000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %01000000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00100000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00100000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00010000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00010000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00001000, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00001000, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000100, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000100, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000010, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000010, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000001, %00000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000001, %00000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %10000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %10000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %01000000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %01000000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00100000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00100000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00010000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00010000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00001000, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00001000, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000100, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000100, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000010, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000010, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000001, %00000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000001, %00000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %10000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %10000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %01000000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %01000000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00100000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00100000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00010000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00010000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00001000, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00001000, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000100, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000100, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000010, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000010, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000001, %00000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000001, %00000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %10000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %10000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %01000000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %01000000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00100000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00100000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00010000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00010000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00001000, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00001000, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000100, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000100, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000010, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000010, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001, %00000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001, %00000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %10000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %10000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %01000000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %01000000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00100000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00100000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00010000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00010000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00001000 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00001000 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000100 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000100 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000010 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000010 + + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001 + .byte %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000000, %00000001 + + ORG $12000-1,0 + .byte %00000000 \ No newline at end of file diff --git a/other/blargg_litewall-2.nes b/other/blargg_litewall-2.nes new file mode 100644 index 0000000000000000000000000000000000000000..9d7c9fd4a19d6feb441d013212f34ff54802a897 GIT binary patch literal 40976 zcmeI5eQ;FO6~OO%`|;i;saZmjeM$JZkgwe&U_{ZNsB}hU!>oqZ;L5u7 zs#pJrih(A@pH6&kS`LCmPg5mhKB&1}~w=-!R(PePc4~>k} z9TyVgP}k0TF_+<|2VhRBE;85u8@G&oXWU*p{cp{yAl>3Yi?3Cmq$zzP(x5j zkUo*tl3Jn;xm4QFqSK(ALb!Gsvqs6@$`-{>f)X9rM-!hOOneeez%hxQ+uIYPF&X?8 zw-`=x;?%)JGS;AzZL7s?GsJ_=RBU>DVe2-+tGd97b;3&Yb~at_U^Adz3PpiZL`kzs zY&N?fh!%_WQVEA(Io+{r$A8nyCT4dg1B_>wGrJvPjvnr?^WX*&U#Rry7T+r^^pzH^ zA}EN8-yQsps8t3<5hiqvsFejJ!#Gvc%7ZdD=8OHMYFTORS@mnC^=rGanQio$S+BRv z&Y%Z`7OJ=LMW8_BvU{jBIkmqOmZ_aD(|N`+_1)hZtMm~uK8Lf6R||kMzKm?^7UTB{ z+wKCMN5KWsW#jvhqD`+C*>r6N$Qk@J2{Oc2j?*$yMs$8TEP?VME9xs; zm~#Y@@1aSOB>XCiIeK*Oj`(WPBiN?1X>ZIB_mp@yD*mzEBl=S2fizX=5_9`LXoZ1e zx9emRz!vy|>7CufoYWiWt;+PCG0{8trWk*W562A^FkJ90aVHV_1Ywsb)EMh%lSDft zN*D3I>rL0W+;yKAZ!--ya>Lu=PKVHE5q4QG?7M{b-DJAn#$DeLNWlD<9_?a_%74%6K?1i<9{#>E4kr-*e40Qe;>S1WAZ`Hmis5itGKwT>gKGh?2_WD>RYn2vr9^Q~ zO{=L{CcV3HmQ)bPcCyHWT-t5WRGBs~@>Gc+iW$M(@((A2OYkq!N*$tO! zTS0zV`FyK2qir@@K|y)>eE3l+EGVzI(QdaF7FJBwlB=+S&o?vg+&Oay;l&9XrM0LmL-?suDr?2zr!IbMILwEd7a6BR+givxXQEOyw2o5J3Fhmq`Kg#1t7e8S`7zy z{-d4{{YQw-4fU^2jH_UX%Dj_ISBBtFG>2>Bc+?7Zx`O+SMx9_*V-5VlYk)tzs#4H-zfzlG>$LUimmxx=&4kQ{qQMiCg|+*n z%^Fku3mMbe{Die>&no^W*t1%@pLlXvyY`&oZ)eYG8+p^=WE)kj4Q_kb^NN2d>v+Ab zF!ofBZew{bx5wnYfz1Q9=e-9Lr(fP^wAyVQyrqG&%%0ae;C`QV^yel1s!QJ9!XA~t zL$%drho2>z)x!Unxv0Gp!t8_cM<}WmRQygB)HeC8Y?GQfv$n}I7Hd$}{cW=s^2dji zUi;UvR4TRj+5^WVRFDFl?(y7;;%{14%2G(>cU3rYlboyAXl$Johuo&(Ip|<#O z7gWIV(zUt#(9Ff1gm|H>fWqtdLHWg``Y)lbYA^86UeH1iTF7WEGFmckg*;=vwVhhX z5cTOy;5_K|PBZ9hB&SRq;`>sr6K*+$w{mlxPT4X3+gz8TIEC>oxw$hJImX8Wl9bx_ z@#tuiluiy0A0Pdmlp0GWM@PS#PK}KvN5|)Vl_F!w@lOx^2ZA~ZSDkhr5JJ{0@PQ`_cU&Skhfk z!m8HA=hLNyVLoA1Z>T#O-r;+{t2Z1U5RL0Nl`;DM4L;kKz#l9-CXTc_PpevZaA`=? zA!oc|GX_>`!-On=!oyt*`Y9-rZ9kr{!TBRlx>YTr_~)^R)(tUqtI-Cn8?K2RzWc*_ z2gLS+5JloNd~s;q_31jl!#MOPKQsVGh7T_deXeTVgAViTv2+jo>9$25Wm_o;(fUYc z*FRtz^e_wP&8$`LV$bLz9S_s{L$o85IHP~eUZhWlVDEo1ahkd#G#U2&E_@OK<>jAH zCaz5qYk(}D<=2J^1AC-F`|cD38+S(b_ar}IJ@LERT3> zSO%z&01`j~NB{{S0VIF~kN^@u0!RP}AOR$R1dsp{Kmter2_OL^fCP{L5?+W)z8FZ0FM44=b?a#g+s90hb#6#NDnLB&k-qiYI+BAQxKk%4)QHK)b@ zzHZdNsfqR)gN}lxi8X~=5)j#JTdrH}#`dP6`7yQ{XeRG-?g!!^_PSgD_uc)^VdnhK zdCqg5^PK0L=gd9lUS@Kp<%P-!KO}`SidIGawd{K2^vHHnRWb)+T9JcbGOd52W#xss zq8`U(iP8oXYY(jx$QPNjw*;o=UojZ0Jq|)gM^+5HHF5b z6%GEhM@5T+?A#jgUZCUB*Flc+)=(f7U%%TiDCOHS5p;qKzcfFX0y3;5J3`1Rvt(z_ z#%i2=iB$<~){|$?8qN@otB~eya=UuZ`=6?bF(T5Q;%6@5#GlZa*hwZ(Ku*`FUa)4? z*-OYc(j%E2_10jrVPxhuT~T-aS?erzidDf*Hjdi@9jHmSBG3x7fm*vVUN}8T=;N+Q zLgf^(a@2U!+ob&wEDw{SK^~CaA@?A{Mi6^tM1lf${8 zxJ^>sB%y8-Y2PZ5Mhm2)(N$+<^ z?TM;@wg$<7Pg7 zAIIY88_p=}Sk2ENuz9MJG=9Q1Pu7#dEP{zco6NsU-!+k&kRdJ)KVbLxL0X$=RizbA zF~~zife|c&A+4bKl@YSmgx=CEbjZ^+xmE<8X&wx&*i|#gp7s!Amo!+{gO}19EDOO+lFHh5Gv$!(VS*c75+NOJS(bLdUOB3VxyM=)%3T=Wf z&~=4)8T?D3rAg4EMrlEfZwahQ$CWmRlR+}i0MaXvQ2Y0fp$H)lpJ2JKj`9xbA43sB zN^PjhFHE5c=^sN8e1uQEx9&pEy>Y&E_79(C(-_oLG1;r#l%sL%m=pemc}c6UL&1&% z#~u%#=Mn7qLUtU(B^*m|Ugs?f(am+=nhqwkbO=jO3w(^xbfs}tB|WQ>GnfccR}^dV zCb_XD8Cir(J|s8Vq~MAEBsa#S#KZuyIhDD9WRa=*tH0QK-ERT=Ckf6zLAoaT{|Wy| z^SP`4i(9}~p$HC+i5a6*D1(DzV+~5BQl|q{DOEaMT-?}RRH;HjAg@-bLqg)?$MvFG z9U2OGPqk-g=r&m~5LPDCCmsfZ=AVCmX?T{fOC6o~|t#;_pQ8Jm# z&#w=XGSbg)*sx@hB>nvXDT)dRh>T2eMGwj&ARsC#wHG}+0s|p0_mBq$Mn{j9%jH2q zeNZ7+1O-8V6=J{jF)_ixkQoyb6BGo6qobpPf}m0#3=9NesZmjZfgTFegoN;LFcx4~7#MH- z@Zn)$VAMVs8Vbf97at!Qs#dE3LqcFMBpe$T7ZRdUsQ`647(59Lv9UTG3@%`BFbp>I z7x&xO7bPO3(P%`_2ssTcAz!G0%?R)S=j>mO)s=BBxr1BpwMDMLcN%{ zTa@beq9|VkB>BHWsnF^0Iw1PLQl$(D!RvvDFr|3^SE*H@p?F;o5vCyT|7uTlSQuUh zT>RhD%QHM2)`NlkpMb*%KUfc3{a;4P{QY4)aPfa>9gr}E@}L3(@wy-)xG3-c9&(SM zAiNH^_`h5s4-SU)z}5f3--Cmpu#eyK>j3z9P!I?Mw~=iCyVPqFN*#T z{_gJ&o$2HE{5k;s?&k-cm;7Er$^XIM!^6RNef*wZ2f)w6!ob*)|AT*rhQeUq7RwjZ%GAxl(&l&jqiCbw^C} zt^*=LFB0w+UFAsf#by$fo&2A&^M5^7cETU%DdEqfw^A@b=Rb|ST3|&9e=fPdtQ_2J zcta2XVw}Sup_p}{N~J%Ey$rpHPAnf@JV9!hCt?Z&p{P#+2ufVgTk_w}->#Zin+IjD z(7x20P2Ftic9J@87K0!Nx5*0y{YrWXLIQIsd9w%!oaQMvu^+*eVSu~~Ss^HNxUEHvME+A!j6zklqdP}MDr|7*5y$PrxiICdIs)(UqVnBja z@Du1#EM^5TaG9sFxvW$7)W_9mqo+sDXmiF#XGUjP%i}X~5v#?8wS{L;)!#TRo4F;c z{?Blrn8{|b)7csLPSpw0)JC#7Y%V*?)Jj@AStA^(&V+&wNo$YkILRfL{y=hxrjJR6 zo8=_wx)-^GTEqD^67Di?ZzF4UTu#1`&EazMXR^6fffxQrI>-y3khT+~Q+fOZWI$@A z8f9-AACcY;(iw02lypSFx$+-LP#c>5hy;~w(DKKa@DYwc1_Bu% z)NuX}B%2L#&wos^_hhp(xa^heblV?EHq-VA$!5{$MQ%oGV7*tXtV+pEXN}wpb|wdX zeU$_@7*^@MP=ZLm`8SgW2LZ6(+-)+bG~DF#k&=__UB6eO?(&_t-&!JpI+FD6xpwzmg4IYvED&bzk_LsI9PUW); zx8`&AWlx(I=R0lQN(k9e57ss?iSsG;0d7I!T&lKVv2Jx9#V*q2Kfo?yVB+7xt;^R+ z6__S@y>-yp}8}*}M1cm-!GAz?q_;Q}z z(b9CdzSdG*RasuTwvd@WD>K8O7sPRS>}qZ1=YCa8xt9S-(VJ27Nj1=VgfWufQ`kV!1853Ty z{t29j&-3mCg@x?GOzE-Q%G+ICZfWRQ63keMiA2b-zLxv8EjEY9Faq+_w5|faA12@_Gq zq{&mJPMdD1nQ@B_23SWffcGnSZLY!kA{5I3bVY)W=NYMzM8&nv_pOy z&PX3KA|@i(*T>t-Q?1g542c^#RxsPd(Mi#Rg8~Em{X&PvkHQvBO^g~89yV-va!Nwv z)=j$}=gJnZe3gBidt&j*-?3%(l^pxTu1!o%iht4K81&fDH(xycaqX|K%!>EkIA!eM zNtB)ZV?B`|>dqv$)7VCFjboYd=2y;+sb=J+tS;SJm$v+e8gpusT?ueR1dhmg`$z z`J4%zFk`(cX>KSpV}fe^+@zfsTlR0g{`o7^rUk=-S7+;=xpZPr^;gH<`Sq2LYhOHl z^iA~G;u!y;oRl5kwjbKu{UtYe`INEV8)wDqvsVWXTd;|G=h#=(drn+>CTZ?^)r1*L z=qsOJ-@3o$;!f_%?#+kVzugf(YoqtrDa!}HdGz#)wI5&kbxKZ=f6U^?P$>K*r6i?H zUo?Huy25pZuQtBg_?+oEQ_rcMQy=`{gFgUyI*`|4Mqo<tJ47 z2g|}Tu`DbT^Wr*~7uUhEuuLqAZ(NiswIj)u+L82<^py0H^pxaE?MQN^b|k$dJte&) zJ*}A!RgqtPKJFWN`d?@6*|{P0lk;9LZdhXM4R#9|H!J{vGzY@<3Ibqk4>o=={TeOG{yVe zlP|qC{lTY>ENqF>TuS)xa^Th#OWwH=5&iz$gWFfv&o2B`=nuaiHp%jQ>9^|Sk9{xv zX*4(Wi5LHp=JEB$-|ox#&ANN)#-98eJj&FtS+8#OuGh9`t{B-})o^_zuWVlk51m<2 zD`M!CyBt0iWJNnRw^)02Y&LG&Wm-bf^}Fb(I{Nr7t~`!%US_Nm{X(6JgnQNW(K>n@ zTsqJyeEskMMQ^TSfJx)@v@NEba=1GWB|xB^{y_L}303b2tJsGNse01L7Z6URZ4q3C z7`fMgEyL+y?J>^B$#O^%kQAy_5m>BDVzy%rC0wQLSxhx-rbk-o&AaJIyFmqlra!6! zE#PCNoY}jWI=6(X^30^Szg9@kf6X|q7Aoi-+N_aTy;{9-pF!sxo1qP;P0y<}K2W!3 z31xi#waSLgEju<>wlAg}moI<;M%6O5B^2llihwZN0~83_u^IY~>8)hFs0xTPo_MWc zb0yfXrF{w1KF-$$My#I_9w4h_1E30BSW7=pCv?ss+KEA#n2Dwb*A|)ZLtL=)yWs5iZdEtss@&wu^p+w@F@pasILm^xCBxHsr4>Sx+x5Sx&E6 zw>*Cx!Zp6JLjSCezLglU#`2}myaIu^-dBs`5}sK>89;`poYlfZcX4DZQJ}550!m2_EHU(Jun64d>CjHc zxg+pkXj?~*qnm!T77WQ&IOX(VE4|f9k37V10hyeCCZr14yh3&^?KHzxYz4fN=rflpM=Clg7JgS0ya#}fCUdUE3^y(Ms^)E#h z>*e%c&Bn{SY2p>w7QR~B_~UK{UroZjXSnwUx7pw(Hrzb(fE#9TZwxN&;f^030=S_E z_wKyCy?uOqd?CPvzgDaD^Yiof_YZ&&7#J876cijBtkda2AcTg7hJ}TNhldXuG-xn{ zh=>T9reT9Jbm-7w5F#TZqoSgsqoZSDVqzi0#l^+P#}6MqJRu z!9yKY9Ez;>1OaT7WyD$S2n00ik4sX7Br8Ukz!0kcuPC4^juW#3^=eIampC zrPX8S7AplvnhU5l%@+(X)gCXPoI@Jl-KTqaORKs*nAJAE59!KQWxeOl%4(3nX?Jd6 z=-Pe8ihbB+v$NyKA}pXfP6m@v_XKXJmgzwRLJ;wjm|LV$uzocpUAph!7MMhVm9;Qy ziZra>^Z1;ovw5N83**LD@O=GoA76u3)zd5LnVJmyNW90hk0Q(?341bO9!1zw2y-%F zPbJJLgncw&P9^MP2=i#dK9Mk|6ZQ#&c_Lv?Bg_*B`*^~fM%c#@=JAAmEMXo;*bRhv zEV0dSMpLKZ7`RLed0Cgg2(sWVx+0}%1|Q$Y$1C`FBaW>~fe}=OogzGS3Ohv{&*$Sp zKE^(z7o?8HyTUu_BtDF42UT~8s4Xm~(gYzpwFwIW$)65s{f2+{dKlujxDpkbQ z_k)6Ani1c<5fq`Ll~=!eE;u4Kqx;gOa$jF%)5*V`De_TtcXa;kY?eEsGnDi!i$3KguCD)|w)+DGf7Qq;*+{$YM<`EN-NzYKp5vi!#% z&Np57;m4KNzQ1tleAl&kSG&Hu_}%x{reEv2a^*_b)$!M^c6D`Kz4jO$o97#ZvEdqM z-F~J{*0)5@DZBn6n7`0>V6-urDRd3kW;x?3WVuhX`{KVSkh`KSZ>(X{v4+FueU& znnv+)3LlTYb*Pl4NBMzyoR6R2<0tt+!hOl#&nWQ_}@2i2}^irn$y5 zoDdmuuod9+0W-kC%AHOgq=O@dyI-BvW5{32uGNsn&n*l>iUZLHezz8XG*n{$sMK6G zY7SuXgag(m4X4)D;^m$%YUwSSk85l>;96siRAa7KB-Y>$&G6v^A)Pd2$<)H}!sKky z(;uHLjGuB3!QzQhgm|J9Bc3RY5KolGh$l+v;)&7>>GT9^ zu;_Krpt7F^>t7eGHeW0fZ9phxDh;XD>L^dY5Zc4bKXgc}+&ds_Xq;Z*6Bs@$ex$)S zXi((vQDZZL2S+6&kDHVk5uKPaesWe!Qfk_i>=C0UOuc8!#A(L#=`&~K@HY4>*5Kl; z8fa*J2B94?a+1t%=%~r0|FGmKR6u0PRFA-@)M@gd=+V;^!7*cI_(qIK&-EFcG%?3} zP~wD{Uf~I8M$fR}R zR7FzEkZhj_y)tk@R6y3u997u(AP;)9fBY~*XmDcg&`HGfNF5rSnLH|EoP4TAJ0pC` zaPNe%A+mcWlCjagBh+Kk@D*EJ1nfoXzt5y;YhfMde=N@-=K_w+b$-1KEfHBs}Hfo#>1AAug`mZ z_3Pgr_~gKx14Reu17i-PAFSzlfzF1lBi(Tju0`pW4;f<*(N$Yv5B}cMboz_*H)i@x zGac~~-EF~_t%zQD$U@T39J0vZ?4L2MrRwaf4#B;Ew;n%aOnn(HD;4-@SqTwbc;Yvl zWqROulcHX^{UNHc`VhO4L6nltDDSZ$*|f*uD6KrZiZniR7{|$P;5dj+Kk`O)y*j%- zB)dK#yFQiSR3dP&tUp0z(lfm_TMV!p>F5Js9t%qH-X#R*=n_i7KVqht)#MgOe-naOu=b(O)mTs8!VgI-1d5zH9bp@ z{{sTfv_Z9pDcdT_quk@kX-~$HAFhHE71Jt;zAEUc*z*w80t3zKhclHzCc~+^@G!OK zVG70{%F3N8TOJ%BXyDcYWR*_eUEA9m2$?xT(6^j-!Oi5*ow|=q#Pc$N2n|cDm}ZA+NN9m2vxTYW;-47 zh9H}8?8gIE${X6dl;TrZq8ua|{Tpqil+%-Epd%U~Pv6%lR3uwT=LZZ}()=i8dx$c# z6x=8=|BB-B%ui6b*P% z1#YU?;txCfkT-Uj?2l3~61z-qu@qPh@K@MeKsQlrfqe(XuCVW6|8zS+EzrK|GS(`!oTrF71;JT!f2 zadA<}3OaAY(sk>R5ci79+pw-^ZT@=Hr#*=@tEgmSVSauwnzQC%INzB2a7hWy!1=|} zk`)gZFI^{*CKVUc4;C+7whG;@CvKYC0&WYqE#S6*+X8M2xGmtefZGCY3%D)dwt(9L zZVR|A;I@F<0&WYqE#S6*+X8M2xGmtefZGCY3%D)dwt(9LZVR|A;I@F<0&WYqE#S6* z+X8M2xGmtefZGCY3%D)dwt(9LZVR|A;I@F<0&WYqE#S6*+X8M2xGmtefZGCY3%D)d zwt(9LZVR|A;I@F<0{?mzm|K`n7py5RUb7K@b;q(b%k$}?_4LE*^Ow^PK1wgoe`MLx zbsLiCtPPl4lK)8lIy%2Jf7!zu1cnXy>o?GIa%UzX>3cARAMUNdU+4+H7Y;vIY*ANT zGnU^Nz%-UU)w)MN`SJOwsKwD`L`0C`wd$DXwpYeKn7?yb`nKt3EHe$BpT2)Z8@K)O z!Cs#(d+|4`PjwD^JtlPXZ+dFy$A23O-}jSWk(qe@;De`^x5S>!U$*+?0h;PZ&KgLm zew_ba1n~rC{CoA(-J74XfXnbB_!d{44#A&@#l^)ui-f57MlrmQgu01L zn!F77MSQTpOQ$cGjwB2p9d1}vFdj(=-zCe-lThvj4SC6tgp3~YdIm{|3etMg3ZROF zI^8Bv5P^aMVrhD)a1%H2X@n$1h!Ki0%Ag@VlhKO?&2G~Sk^2L*CRd17ci}$WMv66 z5lLt$Zf?HO+>9gyF;m+^*H231iL~g!}jG7_X~Q$_YWhcf7bp;FXD3Co`hx1O=Wm|CAr;>L{&pii@iKrO?05eo_maMzK9H+;ekYhnILIGDG~U?gD%jJ}s#h9ty4 zv<$xDQZta*W}6eJQq&ga`qD8BA~y1-b2_{C4nV@MhreMPVsgD=tZEo0|B62YvxD zGX%a8Mug7YIC0`cA3S*u6okBlY1p)omk|2b4FeA|SU_GsSfnI8c@EDDTwlP_rc$qN z$cv~igJ#1)Ul9?s_C+z2_rX%E7vy;a?eO}EBm`u`v5<0r|aO^*P&cMA6OlA zIv*q2NXh_=O*5!e0e0v~?3*<^Ljif>iKw2f{v$`bMNbnI7S* z7zq2Y@<|fD^BRYNP$=yaYYb)havv7L+hZSAoV@$-zk!!|sCRpG5ie%Tn}ozbc(YcA zv-^6tv!iJsyvZp_6ba=6ph*7ZfPmkYho22Y1EEXHqW?z>gf8qT!q-=Ur@%ny%3mf9 z=s@VofA`}LHOj$ffZGCY3%D)dw!pus1*GeMpBsH6 zl9TbZ{6Og19_GDM=+B>=9N~-i{kKO~{+}AYpNGHyb)V3#t8}<7b5>X5Yx;rEwFc(B zQ|QlMUG40^`~BOaEC0`(7p~@geFs9<_VCp_0UNr3(3Ssg^Z(fR-w^K*_D9$D%gPJ} z4eb91LRWs_YQCdmAavyyuI6F4$Y0g>M_2y;>HM918JD^02Nbc&?Xf?-BgRB`4n=UHReU56j+{j}rfX0bP%?lK=n! literal 0 HcmV?d00001 diff --git a/other/demo jitter.nes b/other/demo jitter.nes new file mode 100644 index 0000000000000000000000000000000000000000..a1091724d2434387527c74f0d0b271f94889879e GIT binary patch literal 24592 zcmeHPeQZ zrit6;rHCykTiZ=c0!3LL!`YC?s!dv@EiWN-F+!V1yHT}Bb+;A>-CD2hwlsuz=iK*h z;-sLqT2ZU+p4jjA&i&nU&pE$${bG>v?y6ru&tidTYkldMRSsNcha~jD({Ko^hro6S z?1!M>5I7Ej^J03eFZYuqbc5V&k>x$Q{J5UnhhB0a`bnEwlq^tv8`v81ABN@IPsl$T zl7BjK-qE;DZ`j|^pgFS6=N(CFcUg4X(QW}Ea_5Rs#`5p%W*7#lZum)TA2)}OXTt)bp1*% z3hsCtWt`VsZ~jcm52OUM>3~YsiDz< zpt=+f1p###1w~oV&Y7SkQmjM`VNj_V6jH19OR-{1qE#IPtG4u@#i}hkXtipggEngh zvbM%WL&_yZ(yZGps#UXX2i2xo*Yi|b3;lE zj?%G0^QSCnCw1I7F_etXX}o9{dsj54TB5ns(mPAzCHZfyP%YEkYWbbz@v{8)XKh@O z=bzB*X^Vn_B(nD8S=EbYt}Niu&W_e>akb_dv!^ZutjP1(e>r&P=exUgM19-#6NC>uxaT24mcPIMg~X$eJ)TBPx9)v`uv6`Nf{^F$ z`N0pL%-7(lr+@Tg@_ByhfBgOTC+6yq-+%U>@4P!#hfk`1mfP$-UkBbl{nu>^@KBAiILkf=bAkXVYuG9n6*a3k>rB<3LzLSi`)9wfX- z%tvAY5?@5(W+IA^@F8&n5(|;I1&Ld6abZFMp@2|8C?FIN3J3*+0zv_yfKWgvAQTV^ z2nB=!LII(GP(Uak6c7ps1%v`Z0il3UKqw#-5DEwdgaSeVp@2|8C?FIN3J3*+0zv_y zfKWgvAQTV^2nB=!LII(GP(Uc~c~fAM4*G-o=dCNz&;O=?ga#l1$9O!>7M#IcJcna( zJQ7MZO2pBI^G)0w_e$aToxm{?k5q4s*8)d}7neulh_l0C$qO9u+>7VH5#o_tgi7Ej zN$pf27HA+XCSkw~wzG2pj>H>7gf`3^R;Do$-?1kik6?WUN>Vkp-i{##M&b@{SZPOo z8W%X&dU7vgsC-d_zIG1o541st&o zw02;C*z!=veJw35(-_~=-j0cYBkGFA^kqnWVJz#9kns`UG!jqwIAZ+~%UgS;03&~2G#z45EBOJiL9yXD-7B=408%+?B3*pw*S=h3BH}g4$BQ@>X#9Cz=2 zm~1D<+vgazj8UASgZwZbH@WA#hW`HIMx`S5a8Hmc1%d|AEiby=Q=8|c<*w26oWz; zB2Wf4d;&ukOE+&ZNYR9z2H3>>4V@t2J+Jd{Gc@7j9@zY4jLARDj$eIvcKq<({JEcn zb9@p7KEndiU=6?)xQGwASX9ftI{5)=AAvfZ7kPa2^%vi{^jHtg58!huqAsX{3VM>o z5(IDfwP?c)G!UME%fXUY#k~C z?7^jpx*K#^e=yohmH8T^K+N~0Zsp5sA8D`S9$u?n+V?X)$W?&~yi0Hk z$g#pV&u|Z*et-VH2l)C?+V?X&^d9LsyN>&V@G8J5eQ@wqG#t#~5AXsUW|sHy9pn4tOx&FHv*R-qomtG^!scjp{A2R7S3@uRfstzr*qnZ! z&+n%v_gJXNY&Osv2q-#0CYs445>y)*Qp{Q>Cr6HUj=Y3UbyI7#Y|_)bNoPztYI7Q9 zL<5ZPYjW*7p2@(j-t4YuR43NwE1GZe7L(4HH1Q7KfZU?$*s zuZ6h2&1OL}``0sQ_&-GnJ*w*%#MZ|N_z!3%0;3Z^te!xgrMFpaOb7HSTJMDf(Zu^H zfz|FL713qiA(tI=l#r~zh857t7R-P^@fkf@ kjq9`eX^t?VfKWgvAQTV^2nB=!LII(GP(Uc~|ER!!0ooP+$N&HU literal 0 HcmV?d00001 diff --git a/other/demo.nes b/other/demo.nes new file mode 100644 index 0000000000000000000000000000000000000000..9b44a78d84116c6880463a7d0f99966ac8ade116 GIT binary patch literal 24592 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 literal 0 HcmV?d00001 diff --git a/other/dnsf2_enginetest3.nsf b/other/dnsf2_enginetest3.nsf new file mode 100644 index 0000000000000000000000000000000000000000..fd9649ac8e19f4a8e8440f98d43366e796766729 GIT binary patch literal 28801 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 JdX&0Z@t-)Nybk~X literal 0 HcmV?d00001 diff --git a/other/fceuxd.nes b/other/fceuxd.nes new file mode 100644 index 0000000000000000000000000000000000000000..e80b0ac5caa62f512fbdc073efa62389c897171c GIT binary patch literal 131088 zcmeI*O=ukF9S7i<-Sz6jjq2wL zF@fiYcJ%wddS^8Iug^61gI z>y>_Wx4eDFlj&Ig&8(W_QE})+{jqE;S=j0R-?p&)qmN&H=Hr&%duM$2!l2dLy1M(( z^{5qY=Ip}L)ucaP{HNdEn*6B~hKXb}9!dV(=`TD`ITzNBy*paFE&0pdmSgYkZMr@A zYp2!zMcn>X+}?=WzmD_Y74NW@Zg%Rm+QhY5FWc;_PIc>tis8_WVWw8SHq(nXJ5NQY zC!%wEJFiVPx1TE)(%a8fM#l@GUkLqT=odqOKJ@29zZCkV&|e7sh0tFN{l(B< z3jL+fUk?4{(6>Y14*iwTUkUwk=$Au(HS||Q-wAyu^edrX3H`OuUmNw-+gE>?H?#R> zAyjJ~FD1oK?SpX0qjWO)Xg&G&deJ75->k20te>6O`P`Ffv{QTx<8~A+d_T^*)n4>; zr`jw1pj+MORNs52^OJw&aXOygk?zmWWSuyFFncD>ei~;#i?g4{#kCF>uep4f&Lscn ztp2gMdUm+kD%NW0bUKqBD*iGXK7Dz$xI&a3NN-6Gwl1zWij+o~8XG0lQn|9P8pg3W zq1Bvqfl?2f9EK*yG9B1 z&c*uDav1MA8gl%LUpV&pkTBLly?OrKqcrXrCDgmW^yRO7HH`P12>Hf+U;o;@Az^HU z8qUA*E#Wr-0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB=C{y+H9S^mZvaRXoZ( zN{YwL-*}Y#>J#h5qtxq@wesr2-IX&d&#tU(t({wIMzy5TJlT3Io<4fw{)ZlU{H@^| z!}o{9v(6XOdb*S@xB80@4AZ54y*MuCaW>a{uz2;x&d)WEmEVk)7thb{mHO4%Kl_VI zOQXF@%f*R5T>IY1Z{2%5nH~S|`rqIF!|RvU|C{b!KJ}JvkN^P!1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C7KDz?#C~B9YQ+bp{Nfsx)XlF3o7z|gRSU+A$>XWtd z>cicYGb_)otZl8GTWdzOq|rRtdMutkdgA_v9(nw&;TyyEho9ZI@6HJjAV7cs0RjXF z5FkK+0D(^`Fcbm=2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ Y009C72oNAZfB*pk1PBly@CgL|1DM3d@c;k- literal 0 HcmV?d00001 diff --git a/other/firefly.asm b/other/firefly.asm new file mode 100644 index 0000000..e2f863e --- /dev/null +++ b/other/firefly.asm @@ -0,0 +1,379 @@ + enum 0 + ystart1 db 0 + ystart2 db 0 + ystart3 db 0 + yline1 db 0 + yline2 db 0 + yline3 db 0 + IRQline db 0 + fly_x db 0 + fly_y db 0 + fly_frame db 0 + light dw 0 + timingtoggle db 0 + ende + +do_mmc5test + lda #0 + sta fly_frame + sta timingtoggle + + lda #120 + sta fly_y + sta fly_x + + lda #0 + sta $5101 ;CHR mode: 8k switchable + lda #0 + sta $5127 ;BG bank 0 + lda #0 + sta $512b + + lda #%00000000 + sta $5105 ;mirror + + setVADDR $2000 + ldx #0 +- lda brick,x + sta $2007 + inx + bne - +- lda brick+$100,x + sta $2007 + inx + bne - +- lda brick+$200,x + sta $2007 + inx + bne - +- lda brick+$300,x + sta $2007 + inx + bne - + + jsr clearsprites + jsr setpal + + lda #$00 + sta $202 + sta $206 + lda #$01 + sta $20a + sta $20e + + setNMI mmc5nmi + + lda #$80 + bit $2002 + sta $2000 ;NMI on + +- jmp - + +;------------------ +mmc5nmi: + jsr move_fly + lda #2 + sta $4014 ;spriteDMA + + setVADDR $3f13 + ldx #$39 + lda fly_frame + beq + + ldx #$19 ++ stx $2007 + + lda #0 + sta $2005 + sta $2005 ;scroll reset + + jsr readjoypad + and #joySTART + beq + + lda timingtoggle + eor #1 + sta timingtoggle ++ + lda #%10100000 + sta $2000 ;8x16 obj + lda #%11111110 ;2 + sta $2001 ;screen on + + setIRQ mmc5irq1 + + lda #$80 ;IRQen + sta $5204 + lda fly_y ;IRQline + sta $5203 + sta IRQline + + plp ;"cli" + pla + pla + jmp IRQwait + +move_fly + lda fly_frame + eor #2 + sta fly_frame + tax + lda anim,x + sta $201 + lda anim+1,x + sta $205 + lda anim+4,x + sta $209 + lda anim+5,x + sta $20d + lda lighttbl,x + sta light + lda lighttbl+1,x + sta light+1 + inc fly_x + lda fly_x + sta $203 + clc + adc #4 + sta $20b + clc + adc #4 + sta $207 + clc + adc #4 + sta $20f + ldy fly_x + lda div3,y + ldx timingtoggle + clc + bne + + adc #7 ++ sta timingdelay + lda tbl_sin2,y + lsr + adc #60 + sta $200 + sta $204 + clc + adc #4 + sta $208 + sta $20c + sec + ldx fly_frame + sbc light_y,x + sta fly_y + rts +light_y dw 31,27 +lighttbl + dw light1,light2 +anim db 1,3,5,7,9,11,13,15 + i = 255 +div3 rept 256 + db 26+i/3 + i=i-1 + endr +;--------------- +mmc5irq1 ;12 + lda $5204 ;4 + plp ;4 + pla ;4 + pla ;4 =28 + inc IRQline ;5 + lda IRQline ;3 + sta $5203 ;4 =40 + eatcycles(113-40) + ;--- + sei ;2 + lda $5204 ;4 + cli ;2 + + + + lda timingdelay + jsr timingloop + jmp (light) +macro flame1(start,end,third) + lda #%01111110 ;2 + ldx #%11111110 ;2 + eatcycles(start+4) + sta $2001 ;4 + eatcycles(end-start-4) + stx $2001 ;4 + eatcycles(114-end-12-third) +endm +macro flame2(start1,start2,end2,end1,third) + lda #%01111110 ;2 + ldx #%00011110 ;2 + ldy #%11111110 ;2 + eatcycles(start1+2) + sta $2001 ;4 + eatcycles(start2-start1-4) + stx $2001 ;4 + eatcycles(end2-start2-4) + sta $2001 ;4 + eatcycles(end1-end2-4) + sty $2001 ;4 + eatcycles(114-end1-12-third) +endm + +light1 + flame1(17,24,0) + flame1(15,26,0) + flame1(13,28,1) + flame1(12,29,0) + flame1(11,30,0) + flame1(10,31,1) + flame1(9,32,0) + flame1(8,33,0) + flame1(7,34,1) + flame1(7,34,0) + flame1(6,35,0) + flame1(6,35,1) + flame1(5,36,0) + flame1(5,36,0) + flame1(4,37,1) + flame1(4,37,0) + flame1(3,38,0) + flame2(3,18,24,38,1) + flame2(3,16,25,38,0) + flame2(2,15,26,39,0) + flame2(2,14,27,39,1) + flame2(2,13,28,39,0) + flame2(2,13,28,39,0) + flame2(1,12,29,40,1) + flame2(1,11,30,40,0) + flame2(1,11,30,40,0) + flame2(1,11,30,40,1) + flame2(1,10,31,40,0) + flame2(1,10,31,40,0) + flame2(0,10,31,41,1) + flame2(0,10,31,41,0) + flame2(0,9,32,41,0) + flame2(0,9,32,41,1) + flame2(0,9,32,41,0) + flame2(0,9,32,41,0) + flame2(0,9,32,41,1) + flame2(0,9,32,41,0) + flame2(0,9,32,41,0) + flame2(0,9,32,41,1) + flame2(0,9,32,41,0) + flame2(0,9,32,41,0) + flame2(0,9,32,41,1) + flame2(0,10,31,41,0) + flame2(0,10,31,41,0) + flame2(1,10,31,40,1) + flame2(1,10,31,40,0) + flame2(1,11,30,40,0) + flame2(1,11,30,40,1) + flame2(1,11,30,40,0) + flame2(1,12,29,40,0) + flame2(2,13,28,39,1) + flame2(2,13,28,39,0) + flame2(2,14,27,39,0) + flame2(2,15,26,39,1) + flame2(3,16,25,38,0) + flame2(3,18,24,38,0) + flame1(3,38,1) + flame1(4,37,0) + flame1(4,37,0) + flame1(5,36,1) + flame1(5,36,0) + flame1(6,35,0) + flame1(6,35,1) + flame1(7,34,0) + flame1(7,34,0) + flame1(8,33,1) + flame1(9,32,0) + flame1(10,31,0) + flame1(11,30,1) + flame1(12,29,0) + flame1(13,28,0) + flame1(15,26,1) + flame1(17,24,0) +- jmp - +light2 + flame1(17,24,0) + flame1(15,26,0) + flame1(13,28,1) + flame1(12,29,0) + flame1(11,30,0) + flame1(10,31,1) + flame1(9,32,0) + flame1(8,33,0) + flame1(7,34,1) + flame1(7,34,0) + flame1(6,35,0) + flame1(6,35,1) + flame1(5,36,0) + flame1(5,36,0) + flame1(4,37,1) + flame2(4,18,24,37,0) + flame2(4,16,25,37,0) + flame2(3,15,26,38,1) + flame2(3,14,27,38,0) + flame2(3,14,27,38,0) + flame2(2,13,28,39,1) + flame2(2,12,29,39,0) + flame2(2,12,29,39,0) + flame2(2,12,29,39,1) + flame2(2,11,30,39,0) + flame2(1,11,30,40,0) + flame2(1,11,30,40,1) + flame2(1,10,31,40,0) + flame2(1,10,31,40,0) + flame2(1,10,31,40,1) + flame2(1,10,31,40,0) + flame2(1,10,31,40,0) + flame2(1,10,31,40,1) + flame2(1,10,31,40,0) + flame2(1,10,31,40,0) + flame2(1,10,31,40,1) + flame2(1,10,31,40,0) + flame2(1,10,31,40,0) + flame2(1,11,30,40,1) + flame2(1,11,30,40,0) + flame2(2,11,30,39,0) + flame2(2,12,29,39,1) + flame2(2,12,29,39,0) + flame2(2,12,29,39,0) + flame2(2,13,28,39,1) + flame2(3,14,27,38,0) + flame2(3,14,27,38,0) + flame2(3,15,26,38,1) + flame2(4,16,25,37,0) + flame2(4,18,24,37,0) + flame1(4,37,1) + flame1(5,36,0) + flame1(5,36,0) + flame1(6,35,1) + flame1(6,35,0) + flame1(7,34,0) + flame1(7,34,1) + flame1(8,33,0) + flame1(9,32,0) + flame1(10,31,1) + flame1(11,30,0) + flame1(12,29,0) + flame1(13,28,1) + flame1(15,26,0) + flame1(17,24,0) + +- jmp - +;--- +setpal + lda #$3f ;set palette + sta $2006 + lda #$00 + sta $2006 + ldx #0 +- lda pal,x + sta $2007 + inx + cpx #32 + bne - + rts + +pal dc.b $0d,$1d,$05,$07, $0d,$0d,$11,$31, $0d,$0d,$13,$33, $0d,$0d,$19,$39 + dc.b $0d,$10,$18,$39, $0d,$0d,$0d,$0d, $0d,$0d,$0d,$0d, $0d,$0d,$0d,$0d + + align $100 +brick incbin mmc5test\brick.nam + incbin mmc5test\brick.atr \ No newline at end of file diff --git a/other/firefly.nes b/other/firefly.nes new file mode 100644 index 0000000000000000000000000000000000000000..3d2f0318ab8f29aacabe42e8a15b570cb075d0cc GIT binary patch literal 24592 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 literal 0 HcmV?d00001 diff --git a/other/fun-n-games.nes b/other/fun-n-games.nes new file mode 100644 index 0000000000000000000000000000000000000000..c1fb87a610f29ce764a8b24556777bb8ced417ca GIT binary patch literal 24592 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 To{+@v*|J&I6W#Lt=H0&mEYSqp literal 0 HcmV?d00001 diff --git a/other/litewall5.nes b/other/litewall5.nes new file mode 100644 index 0000000000000000000000000000000000000000..feb334764ef1cde3917a0147c11fb935ca8c04c4 GIT binary patch literal 45072 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 GqyGZFQwz8N literal 0 HcmV?d00001 diff --git a/other/logo (E).nes b/other/logo (E).nes new file mode 100644 index 0000000000000000000000000000000000000000..b413db1ae2764b31600b4302ef72beb86b4e90af GIT binary patch literal 32784 zcmeH}PiP!f9LImVJDJ_qO=ha1+cw#KdNBnLD}}nTm03i^L(zg4j{_C8hn7IG&Be}u zM3S{zb4(mUk&eIe8TRsF27zecJO*zx$4U-kp}iZEB79X@p-M>QkQg?upm$X_%cn>77xp zi%rive*C!Sd0{quou^mNoA$hd%*XlIR2l~=p|oXLV`JqogusBk>mF79nU?jOnRb=< z50m3e;WPDI82YHt_nm_W9p~Ww{i=QxQE$jm7up)}g9tyJ#fen@{^y@j_508;n}Vf! zU2HnefddB|$5Cx`-@V@Ra~h75lldf%M?N$TgocuSMLEoVA16vZHC3-ar~FA~sCt}6 z9Z?lW%0rD>Z5*HR3QCiG9@Zu%YPE^oyH)+Ds4^}`#nz^XPawQ2i~FSVckg`+so3&; zX*Lc^^}g7s)%Nb)TdUOu1GLd#(APeCRp*n;CwaVl{%$>_uDn(&s4*BQdy=(QD$1Xb z;j4OT;}t}qwCjVfXfD-XgMo_@T^GFuT`sHoQBiqJj&eymA`V$DW%1Bg`Q_0anx8b2 z7V3T7erQ>vqoZiyC|X-vi=u({(W^S2WImw;nXl^s4s`dc^V8)>a%x+DES{pJYCv1evb}>H!ZV6^mJB91qYv{SZ-Q2z#RY@>M;3?fT$r z)?I}{952T4@?u46ToA%kLMyU|P%TMA#ncZ}7@%4Xt6exp^&)v`*7YmoBAg^6&Cg9IiJeHTemg#xGT4U;V54LOu}f7me;%Fw?kW z8Mf8;SIOi;A+d}N`#Z5cuWH!gql#wN?i9|M;;f0Yb{N>{P-UI+ z?V?!EtJzSqspgWJcdEIp<}o=h9<$FcY`~@a7^cd4PK63;9#L~q%{$cmh?+;$Y{@x$ z+|60lXZAPWc>lwNm9Wy#Fg;cUDVzS~vx!&I!y<6f`OKi1pF;yct)2jLa?(WbckP7CuYRgNvp(nac) zk#jY)d*2TG$HmRMeka7gdfC9UUHXX5k=RgK9m0*by2X3%7Rb9-_N%f1&lSawt$oGb zts5xxE7AMG?K&OG8fCq1;IXTr=>3U}tX~x?w`*PgskKr!R+?zEKV0jDoqH@{@3EeL zVvkj)rI~K}Dd;`f{6d0KllW}@@UD*^@+-vYOn?b60Vco%m;e)C0!)AjFaajO1egF5 zU;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5 zU;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5 zU;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5 SU;<2l3H<*E%-wFCoBIczsVyJ? literal 0 HcmV?d00001 diff --git a/other/manhole.nes b/other/manhole.nes new file mode 100644 index 0000000000000000000000000000000000000000..3902ca966709440b65a5ee4638f53a0aeecb82e8 GIT binary patch literal 24592 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

    H$`K~rKSBn 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 NKoOt_{69tDe*rPf%@6

    UIV@hFizH%$ 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 QOn?b60Vco%{>ub@2OWB4I{*Lx literal 0 HcmV?d00001 diff --git a/other/nestest.log b/other/nestest.log new file mode 100644 index 0000000..92aaa89 --- /dev/null +++ b/other/nestest.log @@ -0,0 +1,8991 @@ +C000 4C F5 C5 JMP $C5F5 A:00 X:00 Y:00 P:24 SP:FD CYC: 0 SL:241 +C5F5 A2 00 LDX #$00 A:00 X:00 Y:00 P:24 SP:FD CYC: 9 SL:241 +C5F7 86 00 STX $00 = 00 A:00 X:00 Y:00 P:26 SP:FD CYC: 15 SL:241 +C5F9 86 10 STX $10 = 00 A:00 X:00 Y:00 P:26 SP:FD CYC: 24 SL:241 +C5FB 86 11 STX $11 = 00 A:00 X:00 Y:00 P:26 SP:FD CYC: 33 SL:241 +C5FD 20 2D C7 JSR $C72D A:00 X:00 Y:00 P:26 SP:FD CYC: 42 SL:241 +C72D EA NOP A:00 X:00 Y:00 P:26 SP:FB CYC: 60 SL:241 +C72E 38 SEC A:00 X:00 Y:00 P:26 SP:FB CYC: 66 SL:241 +C72F B0 04 BCS $C735 A:00 X:00 Y:00 P:27 SP:FB CYC: 72 SL:241 +C735 EA NOP A:00 X:00 Y:00 P:27 SP:FB CYC: 81 SL:241 +C736 18 CLC A:00 X:00 Y:00 P:27 SP:FB CYC: 87 SL:241 +C737 B0 03 BCS $C73C A:00 X:00 Y:00 P:26 SP:FB CYC: 93 SL:241 +C739 4C 40 C7 JMP $C740 A:00 X:00 Y:00 P:26 SP:FB CYC: 99 SL:241 +C740 EA NOP A:00 X:00 Y:00 P:26 SP:FB CYC:108 SL:241 +C741 38 SEC A:00 X:00 Y:00 P:26 SP:FB CYC:114 SL:241 +C742 90 03 BCC $C747 A:00 X:00 Y:00 P:27 SP:FB CYC:120 SL:241 +C744 4C 4B C7 JMP $C74B A:00 X:00 Y:00 P:27 SP:FB CYC:126 SL:241 +C74B EA NOP A:00 X:00 Y:00 P:27 SP:FB CYC:135 SL:241 +C74C 18 CLC A:00 X:00 Y:00 P:27 SP:FB CYC:141 SL:241 +C74D 90 04 BCC $C753 A:00 X:00 Y:00 P:26 SP:FB CYC:147 SL:241 +C753 EA NOP A:00 X:00 Y:00 P:26 SP:FB CYC:156 SL:241 +C754 A9 00 LDA #$00 A:00 X:00 Y:00 P:26 SP:FB CYC:162 SL:241 +C756 F0 04 BEQ $C75C A:00 X:00 Y:00 P:26 SP:FB CYC:168 SL:241 +C75C EA NOP A:00 X:00 Y:00 P:26 SP:FB CYC:177 SL:241 +C75D A9 40 LDA #$40 A:00 X:00 Y:00 P:26 SP:FB CYC:183 SL:241 +C75F F0 03 BEQ $C764 A:40 X:00 Y:00 P:24 SP:FB CYC:189 SL:241 +C761 4C 68 C7 JMP $C768 A:40 X:00 Y:00 P:24 SP:FB CYC:195 SL:241 +C768 EA NOP A:40 X:00 Y:00 P:24 SP:FB CYC:204 SL:241 +C769 A9 40 LDA #$40 A:40 X:00 Y:00 P:24 SP:FB CYC:210 SL:241 +C76B D0 04 BNE $C771 A:40 X:00 Y:00 P:24 SP:FB CYC:216 SL:241 +C771 EA NOP A:40 X:00 Y:00 P:24 SP:FB CYC:225 SL:241 +C772 A9 00 LDA #$00 A:40 X:00 Y:00 P:24 SP:FB CYC:231 SL:241 +C774 D0 03 BNE $C779 A:00 X:00 Y:00 P:26 SP:FB CYC:237 SL:241 +C776 4C 7D C7 JMP $C77D A:00 X:00 Y:00 P:26 SP:FB CYC:243 SL:241 +C77D EA NOP A:00 X:00 Y:00 P:26 SP:FB CYC:252 SL:241 +C77E A9 FF LDA #$FF A:00 X:00 Y:00 P:26 SP:FB CYC:258 SL:241 +C780 85 01 STA $01 = 00 A:FF X:00 Y:00 P:A4 SP:FB CYC:264 SL:241 +C782 24 01 BIT $01 = FF A:FF X:00 Y:00 P:A4 SP:FB CYC:273 SL:241 +C784 70 04 BVS $C78A A:FF X:00 Y:00 P:E4 SP:FB CYC:282 SL:241 +C78A EA NOP A:FF X:00 Y:00 P:E4 SP:FB CYC:291 SL:241 +C78B 24 01 BIT $01 = FF A:FF X:00 Y:00 P:E4 SP:FB CYC:297 SL:241 +C78D 50 03 BVC $C792 A:FF X:00 Y:00 P:E4 SP:FB CYC:306 SL:241 +C78F 4C 96 C7 JMP $C796 A:FF X:00 Y:00 P:E4 SP:FB CYC:312 SL:241 +C796 EA NOP A:FF X:00 Y:00 P:E4 SP:FB CYC:321 SL:241 +C797 A9 00 LDA #$00 A:FF X:00 Y:00 P:E4 SP:FB CYC:327 SL:241 +C799 85 01 STA $01 = FF A:00 X:00 Y:00 P:66 SP:FB CYC:333 SL:241 +C79B 24 01 BIT $01 = 00 A:00 X:00 Y:00 P:66 SP:FB CYC: 1 SL:242 +C79D 50 04 BVC $C7A3 A:00 X:00 Y:00 P:26 SP:FB CYC: 10 SL:242 +C7A3 EA NOP A:00 X:00 Y:00 P:26 SP:FB CYC: 19 SL:242 +C7A4 24 01 BIT $01 = 00 A:00 X:00 Y:00 P:26 SP:FB CYC: 25 SL:242 +C7A6 70 03 BVS $C7AB A:00 X:00 Y:00 P:26 SP:FB CYC: 34 SL:242 +C7A8 4C AF C7 JMP $C7AF A:00 X:00 Y:00 P:26 SP:FB CYC: 40 SL:242 +C7AF EA NOP A:00 X:00 Y:00 P:26 SP:FB CYC: 49 SL:242 +C7B0 A9 00 LDA #$00 A:00 X:00 Y:00 P:26 SP:FB CYC: 55 SL:242 +C7B2 10 04 BPL $C7B8 A:00 X:00 Y:00 P:26 SP:FB CYC: 61 SL:242 +C7B8 EA NOP A:00 X:00 Y:00 P:26 SP:FB CYC: 70 SL:242 +C7B9 A9 80 LDA #$80 A:00 X:00 Y:00 P:26 SP:FB CYC: 76 SL:242 +C7BB 10 03 BPL $C7C0 A:80 X:00 Y:00 P:A4 SP:FB CYC: 82 SL:242 +C7BD 4C D9 C7 JMP $C7D9 A:80 X:00 Y:00 P:A4 SP:FB CYC: 88 SL:242 +C7D9 EA NOP A:80 X:00 Y:00 P:A4 SP:FB CYC: 97 SL:242 +C7DA 60 RTS A:80 X:00 Y:00 P:A4 SP:FB CYC:103 SL:242 +C600 20 DB C7 JSR $C7DB A:80 X:00 Y:00 P:A4 SP:FD CYC:121 SL:242 +C7DB EA NOP A:80 X:00 Y:00 P:A4 SP:FB CYC:139 SL:242 +C7DC A9 FF LDA #$FF A:80 X:00 Y:00 P:A4 SP:FB CYC:145 SL:242 +C7DE 85 01 STA $01 = 00 A:FF X:00 Y:00 P:A4 SP:FB CYC:151 SL:242 +C7E0 24 01 BIT $01 = FF A:FF X:00 Y:00 P:A4 SP:FB CYC:160 SL:242 +C7E2 A9 00 LDA #$00 A:FF X:00 Y:00 P:E4 SP:FB CYC:169 SL:242 +C7E4 38 SEC A:00 X:00 Y:00 P:66 SP:FB CYC:175 SL:242 +C7E5 78 SEI A:00 X:00 Y:00 P:67 SP:FB CYC:181 SL:242 +C7E6 F8 SED A:00 X:00 Y:00 P:67 SP:FB CYC:187 SL:242 +C7E7 08 PHP A:00 X:00 Y:00 P:6F SP:FB CYC:193 SL:242 +C7E8 68 PLA A:00 X:00 Y:00 P:6F SP:FA CYC:202 SL:242 +C7E9 29 EF AND #$EF A:7F X:00 Y:00 P:6D SP:FB CYC:214 SL:242 +C7EB C9 6F CMP #$6F A:6F X:00 Y:00 P:6D SP:FB CYC:220 SL:242 +C7ED F0 04 BEQ $C7F3 A:6F X:00 Y:00 P:6F SP:FB CYC:226 SL:242 +C7F3 EA NOP A:6F X:00 Y:00 P:6F SP:FB CYC:235 SL:242 +C7F4 A9 40 LDA #$40 A:6F X:00 Y:00 P:6F SP:FB CYC:241 SL:242 +C7F6 85 01 STA $01 = FF A:40 X:00 Y:00 P:6D SP:FB CYC:247 SL:242 +C7F8 24 01 BIT $01 = 40 A:40 X:00 Y:00 P:6D SP:FB CYC:256 SL:242 +C7FA D8 CLD A:40 X:00 Y:00 P:6D SP:FB CYC:265 SL:242 +C7FB A9 10 LDA #$10 A:40 X:00 Y:00 P:65 SP:FB CYC:271 SL:242 +C7FD 18 CLC A:10 X:00 Y:00 P:65 SP:FB CYC:277 SL:242 +C7FE 08 PHP A:10 X:00 Y:00 P:64 SP:FB CYC:283 SL:242 +C7FF 68 PLA A:10 X:00 Y:00 P:64 SP:FA CYC:292 SL:242 +C800 29 EF AND #$EF A:74 X:00 Y:00 P:64 SP:FB CYC:304 SL:242 +C802 C9 64 CMP #$64 A:64 X:00 Y:00 P:64 SP:FB CYC:310 SL:242 +C804 F0 04 BEQ $C80A A:64 X:00 Y:00 P:67 SP:FB CYC:316 SL:242 +C80A EA NOP A:64 X:00 Y:00 P:67 SP:FB CYC:325 SL:242 +C80B A9 80 LDA #$80 A:64 X:00 Y:00 P:67 SP:FB CYC:331 SL:242 +C80D 85 01 STA $01 = 40 A:80 X:00 Y:00 P:E5 SP:FB CYC:337 SL:242 +C80F 24 01 BIT $01 = 80 A:80 X:00 Y:00 P:E5 SP:FB CYC: 5 SL:243 +C811 F8 SED A:80 X:00 Y:00 P:A5 SP:FB CYC: 14 SL:243 +C812 A9 00 LDA #$00 A:80 X:00 Y:00 P:AD SP:FB CYC: 20 SL:243 +C814 38 SEC A:00 X:00 Y:00 P:2F SP:FB CYC: 26 SL:243 +C815 08 PHP A:00 X:00 Y:00 P:2F SP:FB CYC: 32 SL:243 +C816 68 PLA A:00 X:00 Y:00 P:2F SP:FA CYC: 41 SL:243 +C817 29 EF AND #$EF A:3F X:00 Y:00 P:2D SP:FB CYC: 53 SL:243 +C819 C9 2F CMP #$2F A:2F X:00 Y:00 P:2D SP:FB CYC: 59 SL:243 +C81B F0 04 BEQ $C821 A:2F X:00 Y:00 P:2F SP:FB CYC: 65 SL:243 +C821 EA NOP A:2F X:00 Y:00 P:2F SP:FB CYC: 74 SL:243 +C822 A9 FF LDA #$FF A:2F X:00 Y:00 P:2F SP:FB CYC: 80 SL:243 +C824 48 PHA A:FF X:00 Y:00 P:AD SP:FB CYC: 86 SL:243 +C825 28 PLP A:FF X:00 Y:00 P:AD SP:FA CYC: 95 SL:243 +C826 D0 09 BNE $C831 A:FF X:00 Y:00 P:EF SP:FB CYC:107 SL:243 +C828 10 07 BPL $C831 A:FF X:00 Y:00 P:EF SP:FB CYC:113 SL:243 +C82A 50 05 BVC $C831 A:FF X:00 Y:00 P:EF SP:FB CYC:119 SL:243 +C82C 90 03 BCC $C831 A:FF X:00 Y:00 P:EF SP:FB CYC:125 SL:243 +C82E 4C 35 C8 JMP $C835 A:FF X:00 Y:00 P:EF SP:FB CYC:131 SL:243 +C835 EA NOP A:FF X:00 Y:00 P:EF SP:FB CYC:140 SL:243 +C836 A9 04 LDA #$04 A:FF X:00 Y:00 P:EF SP:FB CYC:146 SL:243 +C838 48 PHA A:04 X:00 Y:00 P:6D SP:FB CYC:152 SL:243 +C839 28 PLP A:04 X:00 Y:00 P:6D SP:FA CYC:161 SL:243 +C83A F0 09 BEQ $C845 A:04 X:00 Y:00 P:24 SP:FB CYC:173 SL:243 +C83C 30 07 BMI $C845 A:04 X:00 Y:00 P:24 SP:FB CYC:179 SL:243 +C83E 70 05 BVS $C845 A:04 X:00 Y:00 P:24 SP:FB CYC:185 SL:243 +C840 B0 03 BCS $C845 A:04 X:00 Y:00 P:24 SP:FB CYC:191 SL:243 +C842 4C 49 C8 JMP $C849 A:04 X:00 Y:00 P:24 SP:FB CYC:197 SL:243 +C849 EA NOP A:04 X:00 Y:00 P:24 SP:FB CYC:206 SL:243 +C84A F8 SED A:04 X:00 Y:00 P:24 SP:FB CYC:212 SL:243 +C84B A9 FF LDA #$FF A:04 X:00 Y:00 P:2C SP:FB CYC:218 SL:243 +C84D 85 01 STA $01 = 80 A:FF X:00 Y:00 P:AC SP:FB CYC:224 SL:243 +C84F 24 01 BIT $01 = FF A:FF X:00 Y:00 P:AC SP:FB CYC:233 SL:243 +C851 18 CLC A:FF X:00 Y:00 P:EC SP:FB CYC:242 SL:243 +C852 A9 00 LDA #$00 A:FF X:00 Y:00 P:EC SP:FB CYC:248 SL:243 +C854 48 PHA A:00 X:00 Y:00 P:6E SP:FB CYC:254 SL:243 +C855 A9 FF LDA #$FF A:00 X:00 Y:00 P:6E SP:FA CYC:263 SL:243 +C857 68 PLA A:FF X:00 Y:00 P:EC SP:FA CYC:269 SL:243 +C858 D0 09 BNE $C863 A:00 X:00 Y:00 P:6E SP:FB CYC:281 SL:243 +C85A 30 07 BMI $C863 A:00 X:00 Y:00 P:6E SP:FB CYC:287 SL:243 +C85C 50 05 BVC $C863 A:00 X:00 Y:00 P:6E SP:FB CYC:293 SL:243 +C85E B0 03 BCS $C863 A:00 X:00 Y:00 P:6E SP:FB CYC:299 SL:243 +C860 4C 67 C8 JMP $C867 A:00 X:00 Y:00 P:6E SP:FB CYC:305 SL:243 +C867 EA NOP A:00 X:00 Y:00 P:6E SP:FB CYC:314 SL:243 +C868 A9 00 LDA #$00 A:00 X:00 Y:00 P:6E SP:FB CYC:320 SL:243 +C86A 85 01 STA $01 = FF A:00 X:00 Y:00 P:6E SP:FB CYC:326 SL:243 +C86C 24 01 BIT $01 = 00 A:00 X:00 Y:00 P:6E SP:FB CYC:335 SL:243 +C86E 38 SEC A:00 X:00 Y:00 P:2E SP:FB CYC: 3 SL:244 +C86F A9 FF LDA #$FF A:00 X:00 Y:00 P:2F SP:FB CYC: 9 SL:244 +C871 48 PHA A:FF X:00 Y:00 P:AD SP:FB CYC: 15 SL:244 +C872 A9 00 LDA #$00 A:FF X:00 Y:00 P:AD SP:FA CYC: 24 SL:244 +C874 68 PLA A:00 X:00 Y:00 P:2F SP:FA CYC: 30 SL:244 +C875 F0 09 BEQ $C880 A:FF X:00 Y:00 P:AD SP:FB CYC: 42 SL:244 +C877 10 07 BPL $C880 A:FF X:00 Y:00 P:AD SP:FB CYC: 48 SL:244 +C879 70 05 BVS $C880 A:FF X:00 Y:00 P:AD SP:FB CYC: 54 SL:244 +C87B 90 03 BCC $C880 A:FF X:00 Y:00 P:AD SP:FB CYC: 60 SL:244 +C87D 4C 84 C8 JMP $C884 A:FF X:00 Y:00 P:AD SP:FB CYC: 66 SL:244 +C884 60 RTS A:FF X:00 Y:00 P:AD SP:FB CYC: 75 SL:244 +C603 20 85 C8 JSR $C885 A:FF X:00 Y:00 P:AD SP:FD CYC: 93 SL:244 +C885 EA NOP A:FF X:00 Y:00 P:AD SP:FB CYC:111 SL:244 +C886 18 CLC A:FF X:00 Y:00 P:AD SP:FB CYC:117 SL:244 +C887 A9 FF LDA #$FF A:FF X:00 Y:00 P:AC SP:FB CYC:123 SL:244 +C889 85 01 STA $01 = 00 A:FF X:00 Y:00 P:AC SP:FB CYC:129 SL:244 +C88B 24 01 BIT $01 = FF A:FF X:00 Y:00 P:AC SP:FB CYC:138 SL:244 +C88D A9 55 LDA #$55 A:FF X:00 Y:00 P:EC SP:FB CYC:147 SL:244 +C88F 09 AA ORA #$AA A:55 X:00 Y:00 P:6C SP:FB CYC:153 SL:244 +C891 B0 0B BCS $C89E A:FF X:00 Y:00 P:EC SP:FB CYC:159 SL:244 +C893 10 09 BPL $C89E A:FF X:00 Y:00 P:EC SP:FB CYC:165 SL:244 +C895 C9 FF CMP #$FF A:FF X:00 Y:00 P:EC SP:FB CYC:171 SL:244 +C897 D0 05 BNE $C89E A:FF X:00 Y:00 P:6F SP:FB CYC:177 SL:244 +C899 50 03 BVC $C89E A:FF X:00 Y:00 P:6F SP:FB CYC:183 SL:244 +C89B 4C A2 C8 JMP $C8A2 A:FF X:00 Y:00 P:6F SP:FB CYC:189 SL:244 +C8A2 EA NOP A:FF X:00 Y:00 P:6F SP:FB CYC:198 SL:244 +C8A3 38 SEC A:FF X:00 Y:00 P:6F SP:FB CYC:204 SL:244 +C8A4 B8 CLV A:FF X:00 Y:00 P:6F SP:FB CYC:210 SL:244 +C8A5 A9 00 LDA #$00 A:FF X:00 Y:00 P:2F SP:FB CYC:216 SL:244 +C8A7 09 00 ORA #$00 A:00 X:00 Y:00 P:2F SP:FB CYC:222 SL:244 +C8A9 D0 09 BNE $C8B4 A:00 X:00 Y:00 P:2F SP:FB CYC:228 SL:244 +C8AB 70 07 BVS $C8B4 A:00 X:00 Y:00 P:2F SP:FB CYC:234 SL:244 +C8AD 90 05 BCC $C8B4 A:00 X:00 Y:00 P:2F SP:FB CYC:240 SL:244 +C8AF 30 03 BMI $C8B4 A:00 X:00 Y:00 P:2F SP:FB CYC:246 SL:244 +C8B1 4C B8 C8 JMP $C8B8 A:00 X:00 Y:00 P:2F SP:FB CYC:252 SL:244 +C8B8 EA NOP A:00 X:00 Y:00 P:2F SP:FB CYC:261 SL:244 +C8B9 18 CLC A:00 X:00 Y:00 P:2F SP:FB CYC:267 SL:244 +C8BA 24 01 BIT $01 = FF A:00 X:00 Y:00 P:2E SP:FB CYC:273 SL:244 +C8BC A9 55 LDA #$55 A:00 X:00 Y:00 P:EE SP:FB CYC:282 SL:244 +C8BE 29 AA AND #$AA A:55 X:00 Y:00 P:6C SP:FB CYC:288 SL:244 +C8C0 D0 09 BNE $C8CB A:00 X:00 Y:00 P:6E SP:FB CYC:294 SL:244 +C8C2 50 07 BVC $C8CB A:00 X:00 Y:00 P:6E SP:FB CYC:300 SL:244 +C8C4 B0 05 BCS $C8CB A:00 X:00 Y:00 P:6E SP:FB CYC:306 SL:244 +C8C6 30 03 BMI $C8CB A:00 X:00 Y:00 P:6E SP:FB CYC:312 SL:244 +C8C8 4C CF C8 JMP $C8CF A:00 X:00 Y:00 P:6E SP:FB CYC:318 SL:244 +C8CF EA NOP A:00 X:00 Y:00 P:6E SP:FB CYC:327 SL:244 +C8D0 38 SEC A:00 X:00 Y:00 P:6E SP:FB CYC:333 SL:244 +C8D1 B8 CLV A:00 X:00 Y:00 P:6F SP:FB CYC:339 SL:244 +C8D2 A9 F8 LDA #$F8 A:00 X:00 Y:00 P:2F SP:FB CYC: 4 SL:245 +C8D4 29 EF AND #$EF A:F8 X:00 Y:00 P:AD SP:FB CYC: 10 SL:245 +C8D6 90 0B BCC $C8E3 A:E8 X:00 Y:00 P:AD SP:FB CYC: 16 SL:245 +C8D8 10 09 BPL $C8E3 A:E8 X:00 Y:00 P:AD SP:FB CYC: 22 SL:245 +C8DA C9 E8 CMP #$E8 A:E8 X:00 Y:00 P:AD SP:FB CYC: 28 SL:245 +C8DC D0 05 BNE $C8E3 A:E8 X:00 Y:00 P:2F SP:FB CYC: 34 SL:245 +C8DE 70 03 BVS $C8E3 A:E8 X:00 Y:00 P:2F SP:FB CYC: 40 SL:245 +C8E0 4C E7 C8 JMP $C8E7 A:E8 X:00 Y:00 P:2F SP:FB CYC: 46 SL:245 +C8E7 EA NOP A:E8 X:00 Y:00 P:2F SP:FB CYC: 55 SL:245 +C8E8 18 CLC A:E8 X:00 Y:00 P:2F SP:FB CYC: 61 SL:245 +C8E9 24 01 BIT $01 = FF A:E8 X:00 Y:00 P:2E SP:FB CYC: 67 SL:245 +C8EB A9 5F LDA #$5F A:E8 X:00 Y:00 P:EC SP:FB CYC: 76 SL:245 +C8ED 49 AA EOR #$AA A:5F X:00 Y:00 P:6C SP:FB CYC: 82 SL:245 +C8EF B0 0B BCS $C8FC A:F5 X:00 Y:00 P:EC SP:FB CYC: 88 SL:245 +C8F1 10 09 BPL $C8FC A:F5 X:00 Y:00 P:EC SP:FB CYC: 94 SL:245 +C8F3 C9 F5 CMP #$F5 A:F5 X:00 Y:00 P:EC SP:FB CYC:100 SL:245 +C8F5 D0 05 BNE $C8FC A:F5 X:00 Y:00 P:6F SP:FB CYC:106 SL:245 +C8F7 50 03 BVC $C8FC A:F5 X:00 Y:00 P:6F SP:FB CYC:112 SL:245 +C8F9 4C 00 C9 JMP $C900 A:F5 X:00 Y:00 P:6F SP:FB CYC:118 SL:245 +C900 EA NOP A:F5 X:00 Y:00 P:6F SP:FB CYC:127 SL:245 +C901 38 SEC A:F5 X:00 Y:00 P:6F SP:FB CYC:133 SL:245 +C902 B8 CLV A:F5 X:00 Y:00 P:6F SP:FB CYC:139 SL:245 +C903 A9 70 LDA #$70 A:F5 X:00 Y:00 P:2F SP:FB CYC:145 SL:245 +C905 49 70 EOR #$70 A:70 X:00 Y:00 P:2D SP:FB CYC:151 SL:245 +C907 D0 09 BNE $C912 A:00 X:00 Y:00 P:2F SP:FB CYC:157 SL:245 +C909 70 07 BVS $C912 A:00 X:00 Y:00 P:2F SP:FB CYC:163 SL:245 +C90B 90 05 BCC $C912 A:00 X:00 Y:00 P:2F SP:FB CYC:169 SL:245 +C90D 30 03 BMI $C912 A:00 X:00 Y:00 P:2F SP:FB CYC:175 SL:245 +C90F 4C 16 C9 JMP $C916 A:00 X:00 Y:00 P:2F SP:FB CYC:181 SL:245 +C916 EA NOP A:00 X:00 Y:00 P:2F SP:FB CYC:190 SL:245 +C917 18 CLC A:00 X:00 Y:00 P:2F SP:FB CYC:196 SL:245 +C918 24 01 BIT $01 = FF A:00 X:00 Y:00 P:2E SP:FB CYC:202 SL:245 +C91A A9 00 LDA #$00 A:00 X:00 Y:00 P:EE SP:FB CYC:211 SL:245 +C91C 69 69 ADC #$69 A:00 X:00 Y:00 P:6E SP:FB CYC:217 SL:245 +C91E 30 0B BMI $C92B A:69 X:00 Y:00 P:2C SP:FB CYC:223 SL:245 +C920 B0 09 BCS $C92B A:69 X:00 Y:00 P:2C SP:FB CYC:229 SL:245 +C922 C9 69 CMP #$69 A:69 X:00 Y:00 P:2C SP:FB CYC:235 SL:245 +C924 D0 05 BNE $C92B A:69 X:00 Y:00 P:2F SP:FB CYC:241 SL:245 +C926 70 03 BVS $C92B A:69 X:00 Y:00 P:2F SP:FB CYC:247 SL:245 +C928 4C 2F C9 JMP $C92F A:69 X:00 Y:00 P:2F SP:FB CYC:253 SL:245 +C92F EA NOP A:69 X:00 Y:00 P:2F SP:FB CYC:262 SL:245 +C930 38 SEC A:69 X:00 Y:00 P:2F SP:FB CYC:268 SL:245 +C931 F8 SED A:69 X:00 Y:00 P:2F SP:FB CYC:274 SL:245 +C932 24 01 BIT $01 = FF A:69 X:00 Y:00 P:2F SP:FB CYC:280 SL:245 +C934 A9 01 LDA #$01 A:69 X:00 Y:00 P:ED SP:FB CYC:289 SL:245 +C936 69 69 ADC #$69 A:01 X:00 Y:00 P:6D SP:FB CYC:295 SL:245 +C938 30 0B BMI $C945 A:6B X:00 Y:00 P:2C SP:FB CYC:301 SL:245 +C93A B0 09 BCS $C945 A:6B X:00 Y:00 P:2C SP:FB CYC:307 SL:245 +C93C C9 6B CMP #$6B A:6B X:00 Y:00 P:2C SP:FB CYC:313 SL:245 +C93E D0 05 BNE $C945 A:6B X:00 Y:00 P:2F SP:FB CYC:319 SL:245 +C940 70 03 BVS $C945 A:6B X:00 Y:00 P:2F SP:FB CYC:325 SL:245 +C942 4C 49 C9 JMP $C949 A:6B X:00 Y:00 P:2F SP:FB CYC:331 SL:245 +C949 EA NOP A:6B X:00 Y:00 P:2F SP:FB CYC:340 SL:245 +C94A D8 CLD A:6B X:00 Y:00 P:2F SP:FB CYC: 5 SL:246 +C94B 38 SEC A:6B X:00 Y:00 P:27 SP:FB CYC: 11 SL:246 +C94C B8 CLV A:6B X:00 Y:00 P:27 SP:FB CYC: 17 SL:246 +C94D A9 7F LDA #$7F A:6B X:00 Y:00 P:27 SP:FB CYC: 23 SL:246 +C94F 69 7F ADC #$7F A:7F X:00 Y:00 P:25 SP:FB CYC: 29 SL:246 +C951 10 0B BPL $C95E A:FF X:00 Y:00 P:E4 SP:FB CYC: 35 SL:246 +C953 B0 09 BCS $C95E A:FF X:00 Y:00 P:E4 SP:FB CYC: 41 SL:246 +C955 C9 FF CMP #$FF A:FF X:00 Y:00 P:E4 SP:FB CYC: 47 SL:246 +C957 D0 05 BNE $C95E A:FF X:00 Y:00 P:67 SP:FB CYC: 53 SL:246 +C959 50 03 BVC $C95E A:FF X:00 Y:00 P:67 SP:FB CYC: 59 SL:246 +C95B 4C 62 C9 JMP $C962 A:FF X:00 Y:00 P:67 SP:FB CYC: 65 SL:246 +C962 EA NOP A:FF X:00 Y:00 P:67 SP:FB CYC: 74 SL:246 +C963 18 CLC A:FF X:00 Y:00 P:67 SP:FB CYC: 80 SL:246 +C964 24 01 BIT $01 = FF A:FF X:00 Y:00 P:66 SP:FB CYC: 86 SL:246 +C966 A9 7F LDA #$7F A:FF X:00 Y:00 P:E4 SP:FB CYC: 95 SL:246 +C968 69 80 ADC #$80 A:7F X:00 Y:00 P:64 SP:FB CYC:101 SL:246 +C96A 10 0B BPL $C977 A:FF X:00 Y:00 P:A4 SP:FB CYC:107 SL:246 +C96C B0 09 BCS $C977 A:FF X:00 Y:00 P:A4 SP:FB CYC:113 SL:246 +C96E C9 FF CMP #$FF A:FF X:00 Y:00 P:A4 SP:FB CYC:119 SL:246 +C970 D0 05 BNE $C977 A:FF X:00 Y:00 P:27 SP:FB CYC:125 SL:246 +C972 70 03 BVS $C977 A:FF X:00 Y:00 P:27 SP:FB CYC:131 SL:246 +C974 4C 7B C9 JMP $C97B A:FF X:00 Y:00 P:27 SP:FB CYC:137 SL:246 +C97B EA NOP A:FF X:00 Y:00 P:27 SP:FB CYC:146 SL:246 +C97C 38 SEC A:FF X:00 Y:00 P:27 SP:FB CYC:152 SL:246 +C97D B8 CLV A:FF X:00 Y:00 P:27 SP:FB CYC:158 SL:246 +C97E A9 7F LDA #$7F A:FF X:00 Y:00 P:27 SP:FB CYC:164 SL:246 +C980 69 80 ADC #$80 A:7F X:00 Y:00 P:25 SP:FB CYC:170 SL:246 +C982 D0 09 BNE $C98D A:00 X:00 Y:00 P:27 SP:FB CYC:176 SL:246 +C984 30 07 BMI $C98D A:00 X:00 Y:00 P:27 SP:FB CYC:182 SL:246 +C986 70 05 BVS $C98D A:00 X:00 Y:00 P:27 SP:FB CYC:188 SL:246 +C988 90 03 BCC $C98D A:00 X:00 Y:00 P:27 SP:FB CYC:194 SL:246 +C98A 4C 91 C9 JMP $C991 A:00 X:00 Y:00 P:27 SP:FB CYC:200 SL:246 +C991 EA NOP A:00 X:00 Y:00 P:27 SP:FB CYC:209 SL:246 +C992 38 SEC A:00 X:00 Y:00 P:27 SP:FB CYC:215 SL:246 +C993 B8 CLV A:00 X:00 Y:00 P:27 SP:FB CYC:221 SL:246 +C994 A9 9F LDA #$9F A:00 X:00 Y:00 P:27 SP:FB CYC:227 SL:246 +C996 F0 09 BEQ $C9A1 A:9F X:00 Y:00 P:A5 SP:FB CYC:233 SL:246 +C998 10 07 BPL $C9A1 A:9F X:00 Y:00 P:A5 SP:FB CYC:239 SL:246 +C99A 70 05 BVS $C9A1 A:9F X:00 Y:00 P:A5 SP:FB CYC:245 SL:246 +C99C 90 03 BCC $C9A1 A:9F X:00 Y:00 P:A5 SP:FB CYC:251 SL:246 +C99E 4C A5 C9 JMP $C9A5 A:9F X:00 Y:00 P:A5 SP:FB CYC:257 SL:246 +C9A5 EA NOP A:9F X:00 Y:00 P:A5 SP:FB CYC:266 SL:246 +C9A6 18 CLC A:9F X:00 Y:00 P:A5 SP:FB CYC:272 SL:246 +C9A7 24 01 BIT $01 = FF A:9F X:00 Y:00 P:A4 SP:FB CYC:278 SL:246 +C9A9 A9 00 LDA #$00 A:9F X:00 Y:00 P:E4 SP:FB CYC:287 SL:246 +C9AB D0 09 BNE $C9B6 A:00 X:00 Y:00 P:66 SP:FB CYC:293 SL:246 +C9AD 30 07 BMI $C9B6 A:00 X:00 Y:00 P:66 SP:FB CYC:299 SL:246 +C9AF 50 05 BVC $C9B6 A:00 X:00 Y:00 P:66 SP:FB CYC:305 SL:246 +C9B1 B0 03 BCS $C9B6 A:00 X:00 Y:00 P:66 SP:FB CYC:311 SL:246 +C9B3 4C BA C9 JMP $C9BA A:00 X:00 Y:00 P:66 SP:FB CYC:317 SL:246 +C9BA EA NOP A:00 X:00 Y:00 P:66 SP:FB CYC:326 SL:246 +C9BB 24 01 BIT $01 = FF A:00 X:00 Y:00 P:66 SP:FB CYC:332 SL:246 +C9BD A9 40 LDA #$40 A:00 X:00 Y:00 P:E6 SP:FB CYC: 0 SL:247 +C9BF C9 40 CMP #$40 A:40 X:00 Y:00 P:64 SP:FB CYC: 6 SL:247 +C9C1 30 09 BMI $C9CC A:40 X:00 Y:00 P:67 SP:FB CYC: 12 SL:247 +C9C3 90 07 BCC $C9CC A:40 X:00 Y:00 P:67 SP:FB CYC: 18 SL:247 +C9C5 D0 05 BNE $C9CC A:40 X:00 Y:00 P:67 SP:FB CYC: 24 SL:247 +C9C7 50 03 BVC $C9CC A:40 X:00 Y:00 P:67 SP:FB CYC: 30 SL:247 +C9C9 4C D0 C9 JMP $C9D0 A:40 X:00 Y:00 P:67 SP:FB CYC: 36 SL:247 +C9D0 EA NOP A:40 X:00 Y:00 P:67 SP:FB CYC: 45 SL:247 +C9D1 B8 CLV A:40 X:00 Y:00 P:67 SP:FB CYC: 51 SL:247 +C9D2 C9 3F CMP #$3F A:40 X:00 Y:00 P:27 SP:FB CYC: 57 SL:247 +C9D4 F0 09 BEQ $C9DF A:40 X:00 Y:00 P:25 SP:FB CYC: 63 SL:247 +C9D6 30 07 BMI $C9DF A:40 X:00 Y:00 P:25 SP:FB CYC: 69 SL:247 +C9D8 90 05 BCC $C9DF A:40 X:00 Y:00 P:25 SP:FB CYC: 75 SL:247 +C9DA 70 03 BVS $C9DF A:40 X:00 Y:00 P:25 SP:FB CYC: 81 SL:247 +C9DC 4C E3 C9 JMP $C9E3 A:40 X:00 Y:00 P:25 SP:FB CYC: 87 SL:247 +C9E3 EA NOP A:40 X:00 Y:00 P:25 SP:FB CYC: 96 SL:247 +C9E4 C9 41 CMP #$41 A:40 X:00 Y:00 P:25 SP:FB CYC:102 SL:247 +C9E6 F0 07 BEQ $C9EF A:40 X:00 Y:00 P:A4 SP:FB CYC:108 SL:247 +C9E8 10 05 BPL $C9EF A:40 X:00 Y:00 P:A4 SP:FB CYC:114 SL:247 +C9EA 10 03 BPL $C9EF A:40 X:00 Y:00 P:A4 SP:FB CYC:120 SL:247 +C9EC 4C F3 C9 JMP $C9F3 A:40 X:00 Y:00 P:A4 SP:FB CYC:126 SL:247 +C9F3 EA NOP A:40 X:00 Y:00 P:A4 SP:FB CYC:135 SL:247 +C9F4 A9 80 LDA #$80 A:40 X:00 Y:00 P:A4 SP:FB CYC:141 SL:247 +C9F6 C9 00 CMP #$00 A:80 X:00 Y:00 P:A4 SP:FB CYC:147 SL:247 +C9F8 F0 07 BEQ $CA01 A:80 X:00 Y:00 P:A5 SP:FB CYC:153 SL:247 +C9FA 10 05 BPL $CA01 A:80 X:00 Y:00 P:A5 SP:FB CYC:159 SL:247 +C9FC 90 03 BCC $CA01 A:80 X:00 Y:00 P:A5 SP:FB CYC:165 SL:247 +C9FE 4C 05 CA JMP $CA05 A:80 X:00 Y:00 P:A5 SP:FB CYC:171 SL:247 +CA05 EA NOP A:80 X:00 Y:00 P:A5 SP:FB CYC:180 SL:247 +CA06 C9 80 CMP #$80 A:80 X:00 Y:00 P:A5 SP:FB CYC:186 SL:247 +CA08 D0 07 BNE $CA11 A:80 X:00 Y:00 P:27 SP:FB CYC:192 SL:247 +CA0A 30 05 BMI $CA11 A:80 X:00 Y:00 P:27 SP:FB CYC:198 SL:247 +CA0C 90 03 BCC $CA11 A:80 X:00 Y:00 P:27 SP:FB CYC:204 SL:247 +CA0E 4C 15 CA JMP $CA15 A:80 X:00 Y:00 P:27 SP:FB CYC:210 SL:247 +CA15 EA NOP A:80 X:00 Y:00 P:27 SP:FB CYC:219 SL:247 +CA16 C9 81 CMP #$81 A:80 X:00 Y:00 P:27 SP:FB CYC:225 SL:247 +CA18 B0 07 BCS $CA21 A:80 X:00 Y:00 P:A4 SP:FB CYC:231 SL:247 +CA1A F0 05 BEQ $CA21 A:80 X:00 Y:00 P:A4 SP:FB CYC:237 SL:247 +CA1C 10 03 BPL $CA21 A:80 X:00 Y:00 P:A4 SP:FB CYC:243 SL:247 +CA1E 4C 25 CA JMP $CA25 A:80 X:00 Y:00 P:A4 SP:FB CYC:249 SL:247 +CA25 EA NOP A:80 X:00 Y:00 P:A4 SP:FB CYC:258 SL:247 +CA26 C9 7F CMP #$7F A:80 X:00 Y:00 P:A4 SP:FB CYC:264 SL:247 +CA28 90 07 BCC $CA31 A:80 X:00 Y:00 P:25 SP:FB CYC:270 SL:247 +CA2A F0 05 BEQ $CA31 A:80 X:00 Y:00 P:25 SP:FB CYC:276 SL:247 +CA2C 30 03 BMI $CA31 A:80 X:00 Y:00 P:25 SP:FB CYC:282 SL:247 +CA2E 4C 35 CA JMP $CA35 A:80 X:00 Y:00 P:25 SP:FB CYC:288 SL:247 +CA35 EA NOP A:80 X:00 Y:00 P:25 SP:FB CYC:297 SL:247 +CA36 24 01 BIT $01 = FF A:80 X:00 Y:00 P:25 SP:FB CYC:303 SL:247 +CA38 A0 40 LDY #$40 A:80 X:00 Y:00 P:E5 SP:FB CYC:312 SL:247 +CA3A C0 40 CPY #$40 A:80 X:00 Y:40 P:65 SP:FB CYC:318 SL:247 +CA3C D0 09 BNE $CA47 A:80 X:00 Y:40 P:67 SP:FB CYC:324 SL:247 +CA3E 30 07 BMI $CA47 A:80 X:00 Y:40 P:67 SP:FB CYC:330 SL:247 +CA40 90 05 BCC $CA47 A:80 X:00 Y:40 P:67 SP:FB CYC:336 SL:247 +CA42 50 03 BVC $CA47 A:80 X:00 Y:40 P:67 SP:FB CYC: 1 SL:248 +CA44 4C 4B CA JMP $CA4B A:80 X:00 Y:40 P:67 SP:FB CYC: 7 SL:248 +CA4B EA NOP A:80 X:00 Y:40 P:67 SP:FB CYC: 16 SL:248 +CA4C B8 CLV A:80 X:00 Y:40 P:67 SP:FB CYC: 22 SL:248 +CA4D C0 3F CPY #$3F A:80 X:00 Y:40 P:27 SP:FB CYC: 28 SL:248 +CA4F F0 09 BEQ $CA5A A:80 X:00 Y:40 P:25 SP:FB CYC: 34 SL:248 +CA51 30 07 BMI $CA5A A:80 X:00 Y:40 P:25 SP:FB CYC: 40 SL:248 +CA53 90 05 BCC $CA5A A:80 X:00 Y:40 P:25 SP:FB CYC: 46 SL:248 +CA55 70 03 BVS $CA5A A:80 X:00 Y:40 P:25 SP:FB CYC: 52 SL:248 +CA57 4C 5E CA JMP $CA5E A:80 X:00 Y:40 P:25 SP:FB CYC: 58 SL:248 +CA5E EA NOP A:80 X:00 Y:40 P:25 SP:FB CYC: 67 SL:248 +CA5F C0 41 CPY #$41 A:80 X:00 Y:40 P:25 SP:FB CYC: 73 SL:248 +CA61 F0 07 BEQ $CA6A A:80 X:00 Y:40 P:A4 SP:FB CYC: 79 SL:248 +CA63 10 05 BPL $CA6A A:80 X:00 Y:40 P:A4 SP:FB CYC: 85 SL:248 +CA65 10 03 BPL $CA6A A:80 X:00 Y:40 P:A4 SP:FB CYC: 91 SL:248 +CA67 4C 6E CA JMP $CA6E A:80 X:00 Y:40 P:A4 SP:FB CYC: 97 SL:248 +CA6E EA NOP A:80 X:00 Y:40 P:A4 SP:FB CYC:106 SL:248 +CA6F A0 80 LDY #$80 A:80 X:00 Y:40 P:A4 SP:FB CYC:112 SL:248 +CA71 C0 00 CPY #$00 A:80 X:00 Y:80 P:A4 SP:FB CYC:118 SL:248 +CA73 F0 07 BEQ $CA7C A:80 X:00 Y:80 P:A5 SP:FB CYC:124 SL:248 +CA75 10 05 BPL $CA7C A:80 X:00 Y:80 P:A5 SP:FB CYC:130 SL:248 +CA77 90 03 BCC $CA7C A:80 X:00 Y:80 P:A5 SP:FB CYC:136 SL:248 +CA79 4C 80 CA JMP $CA80 A:80 X:00 Y:80 P:A5 SP:FB CYC:142 SL:248 +CA80 EA NOP A:80 X:00 Y:80 P:A5 SP:FB CYC:151 SL:248 +CA81 C0 80 CPY #$80 A:80 X:00 Y:80 P:A5 SP:FB CYC:157 SL:248 +CA83 D0 07 BNE $CA8C A:80 X:00 Y:80 P:27 SP:FB CYC:163 SL:248 +CA85 30 05 BMI $CA8C A:80 X:00 Y:80 P:27 SP:FB CYC:169 SL:248 +CA87 90 03 BCC $CA8C A:80 X:00 Y:80 P:27 SP:FB CYC:175 SL:248 +CA89 4C 90 CA JMP $CA90 A:80 X:00 Y:80 P:27 SP:FB CYC:181 SL:248 +CA90 EA NOP A:80 X:00 Y:80 P:27 SP:FB CYC:190 SL:248 +CA91 C0 81 CPY #$81 A:80 X:00 Y:80 P:27 SP:FB CYC:196 SL:248 +CA93 B0 07 BCS $CA9C A:80 X:00 Y:80 P:A4 SP:FB CYC:202 SL:248 +CA95 F0 05 BEQ $CA9C A:80 X:00 Y:80 P:A4 SP:FB CYC:208 SL:248 +CA97 10 03 BPL $CA9C A:80 X:00 Y:80 P:A4 SP:FB CYC:214 SL:248 +CA99 4C A0 CA JMP $CAA0 A:80 X:00 Y:80 P:A4 SP:FB CYC:220 SL:248 +CAA0 EA NOP A:80 X:00 Y:80 P:A4 SP:FB CYC:229 SL:248 +CAA1 C0 7F CPY #$7F A:80 X:00 Y:80 P:A4 SP:FB CYC:235 SL:248 +CAA3 90 07 BCC $CAAC A:80 X:00 Y:80 P:25 SP:FB CYC:241 SL:248 +CAA5 F0 05 BEQ $CAAC A:80 X:00 Y:80 P:25 SP:FB CYC:247 SL:248 +CAA7 30 03 BMI $CAAC A:80 X:00 Y:80 P:25 SP:FB CYC:253 SL:248 +CAA9 4C B0 CA JMP $CAB0 A:80 X:00 Y:80 P:25 SP:FB CYC:259 SL:248 +CAB0 EA NOP A:80 X:00 Y:80 P:25 SP:FB CYC:268 SL:248 +CAB1 24 01 BIT $01 = FF A:80 X:00 Y:80 P:25 SP:FB CYC:274 SL:248 +CAB3 A2 40 LDX #$40 A:80 X:00 Y:80 P:E5 SP:FB CYC:283 SL:248 +CAB5 E0 40 CPX #$40 A:80 X:40 Y:80 P:65 SP:FB CYC:289 SL:248 +CAB7 D0 09 BNE $CAC2 A:80 X:40 Y:80 P:67 SP:FB CYC:295 SL:248 +CAB9 30 07 BMI $CAC2 A:80 X:40 Y:80 P:67 SP:FB CYC:301 SL:248 +CABB 90 05 BCC $CAC2 A:80 X:40 Y:80 P:67 SP:FB CYC:307 SL:248 +CABD 50 03 BVC $CAC2 A:80 X:40 Y:80 P:67 SP:FB CYC:313 SL:248 +CABF 4C C6 CA JMP $CAC6 A:80 X:40 Y:80 P:67 SP:FB CYC:319 SL:248 +CAC6 EA NOP A:80 X:40 Y:80 P:67 SP:FB CYC:328 SL:248 +CAC7 B8 CLV A:80 X:40 Y:80 P:67 SP:FB CYC:334 SL:248 +CAC8 E0 3F CPX #$3F A:80 X:40 Y:80 P:27 SP:FB CYC:340 SL:248 +CACA F0 09 BEQ $CAD5 A:80 X:40 Y:80 P:25 SP:FB CYC: 5 SL:249 +CACC 30 07 BMI $CAD5 A:80 X:40 Y:80 P:25 SP:FB CYC: 11 SL:249 +CACE 90 05 BCC $CAD5 A:80 X:40 Y:80 P:25 SP:FB CYC: 17 SL:249 +CAD0 70 03 BVS $CAD5 A:80 X:40 Y:80 P:25 SP:FB CYC: 23 SL:249 +CAD2 4C D9 CA JMP $CAD9 A:80 X:40 Y:80 P:25 SP:FB CYC: 29 SL:249 +CAD9 EA NOP A:80 X:40 Y:80 P:25 SP:FB CYC: 38 SL:249 +CADA E0 41 CPX #$41 A:80 X:40 Y:80 P:25 SP:FB CYC: 44 SL:249 +CADC F0 07 BEQ $CAE5 A:80 X:40 Y:80 P:A4 SP:FB CYC: 50 SL:249 +CADE 10 05 BPL $CAE5 A:80 X:40 Y:80 P:A4 SP:FB CYC: 56 SL:249 +CAE0 10 03 BPL $CAE5 A:80 X:40 Y:80 P:A4 SP:FB CYC: 62 SL:249 +CAE2 4C E9 CA JMP $CAE9 A:80 X:40 Y:80 P:A4 SP:FB CYC: 68 SL:249 +CAE9 EA NOP A:80 X:40 Y:80 P:A4 SP:FB CYC: 77 SL:249 +CAEA A2 80 LDX #$80 A:80 X:40 Y:80 P:A4 SP:FB CYC: 83 SL:249 +CAEC E0 00 CPX #$00 A:80 X:80 Y:80 P:A4 SP:FB CYC: 89 SL:249 +CAEE F0 07 BEQ $CAF7 A:80 X:80 Y:80 P:A5 SP:FB CYC: 95 SL:249 +CAF0 10 05 BPL $CAF7 A:80 X:80 Y:80 P:A5 SP:FB CYC:101 SL:249 +CAF2 90 03 BCC $CAF7 A:80 X:80 Y:80 P:A5 SP:FB CYC:107 SL:249 +CAF4 4C FB CA JMP $CAFB A:80 X:80 Y:80 P:A5 SP:FB CYC:113 SL:249 +CAFB EA NOP A:80 X:80 Y:80 P:A5 SP:FB CYC:122 SL:249 +CAFC E0 80 CPX #$80 A:80 X:80 Y:80 P:A5 SP:FB CYC:128 SL:249 +CAFE D0 07 BNE $CB07 A:80 X:80 Y:80 P:27 SP:FB CYC:134 SL:249 +CB00 30 05 BMI $CB07 A:80 X:80 Y:80 P:27 SP:FB CYC:140 SL:249 +CB02 90 03 BCC $CB07 A:80 X:80 Y:80 P:27 SP:FB CYC:146 SL:249 +CB04 4C 0B CB JMP $CB0B A:80 X:80 Y:80 P:27 SP:FB CYC:152 SL:249 +CB0B EA NOP A:80 X:80 Y:80 P:27 SP:FB CYC:161 SL:249 +CB0C E0 81 CPX #$81 A:80 X:80 Y:80 P:27 SP:FB CYC:167 SL:249 +CB0E B0 07 BCS $CB17 A:80 X:80 Y:80 P:A4 SP:FB CYC:173 SL:249 +CB10 F0 05 BEQ $CB17 A:80 X:80 Y:80 P:A4 SP:FB CYC:179 SL:249 +CB12 10 03 BPL $CB17 A:80 X:80 Y:80 P:A4 SP:FB CYC:185 SL:249 +CB14 4C 1B CB JMP $CB1B A:80 X:80 Y:80 P:A4 SP:FB CYC:191 SL:249 +CB1B EA NOP A:80 X:80 Y:80 P:A4 SP:FB CYC:200 SL:249 +CB1C E0 7F CPX #$7F A:80 X:80 Y:80 P:A4 SP:FB CYC:206 SL:249 +CB1E 90 07 BCC $CB27 A:80 X:80 Y:80 P:25 SP:FB CYC:212 SL:249 +CB20 F0 05 BEQ $CB27 A:80 X:80 Y:80 P:25 SP:FB CYC:218 SL:249 +CB22 30 03 BMI $CB27 A:80 X:80 Y:80 P:25 SP:FB CYC:224 SL:249 +CB24 4C 2B CB JMP $CB2B A:80 X:80 Y:80 P:25 SP:FB CYC:230 SL:249 +CB2B EA NOP A:80 X:80 Y:80 P:25 SP:FB CYC:239 SL:249 +CB2C 38 SEC A:80 X:80 Y:80 P:25 SP:FB CYC:245 SL:249 +CB2D B8 CLV A:80 X:80 Y:80 P:25 SP:FB CYC:251 SL:249 +CB2E A2 9F LDX #$9F A:80 X:80 Y:80 P:25 SP:FB CYC:257 SL:249 +CB30 F0 09 BEQ $CB3B A:80 X:9F Y:80 P:A5 SP:FB CYC:263 SL:249 +CB32 10 07 BPL $CB3B A:80 X:9F Y:80 P:A5 SP:FB CYC:269 SL:249 +CB34 70 05 BVS $CB3B A:80 X:9F Y:80 P:A5 SP:FB CYC:275 SL:249 +CB36 90 03 BCC $CB3B A:80 X:9F Y:80 P:A5 SP:FB CYC:281 SL:249 +CB38 4C 3F CB JMP $CB3F A:80 X:9F Y:80 P:A5 SP:FB CYC:287 SL:249 +CB3F EA NOP A:80 X:9F Y:80 P:A5 SP:FB CYC:296 SL:249 +CB40 18 CLC A:80 X:9F Y:80 P:A5 SP:FB CYC:302 SL:249 +CB41 24 01 BIT $01 = FF A:80 X:9F Y:80 P:A4 SP:FB CYC:308 SL:249 +CB43 A2 00 LDX #$00 A:80 X:9F Y:80 P:E4 SP:FB CYC:317 SL:249 +CB45 D0 09 BNE $CB50 A:80 X:00 Y:80 P:66 SP:FB CYC:323 SL:249 +CB47 30 07 BMI $CB50 A:80 X:00 Y:80 P:66 SP:FB CYC:329 SL:249 +CB49 50 05 BVC $CB50 A:80 X:00 Y:80 P:66 SP:FB CYC:335 SL:249 +CB4B B0 03 BCS $CB50 A:80 X:00 Y:80 P:66 SP:FB CYC: 0 SL:250 +CB4D 4C 54 CB JMP $CB54 A:80 X:00 Y:80 P:66 SP:FB CYC: 6 SL:250 +CB54 EA NOP A:80 X:00 Y:80 P:66 SP:FB CYC: 15 SL:250 +CB55 38 SEC A:80 X:00 Y:80 P:66 SP:FB CYC: 21 SL:250 +CB56 B8 CLV A:80 X:00 Y:80 P:67 SP:FB CYC: 27 SL:250 +CB57 A0 9F LDY #$9F A:80 X:00 Y:80 P:27 SP:FB CYC: 33 SL:250 +CB59 F0 09 BEQ $CB64 A:80 X:00 Y:9F P:A5 SP:FB CYC: 39 SL:250 +CB5B 10 07 BPL $CB64 A:80 X:00 Y:9F P:A5 SP:FB CYC: 45 SL:250 +CB5D 70 05 BVS $CB64 A:80 X:00 Y:9F P:A5 SP:FB CYC: 51 SL:250 +CB5F 90 03 BCC $CB64 A:80 X:00 Y:9F P:A5 SP:FB CYC: 57 SL:250 +CB61 4C 68 CB JMP $CB68 A:80 X:00 Y:9F P:A5 SP:FB CYC: 63 SL:250 +CB68 EA NOP A:80 X:00 Y:9F P:A5 SP:FB CYC: 72 SL:250 +CB69 18 CLC A:80 X:00 Y:9F P:A5 SP:FB CYC: 78 SL:250 +CB6A 24 01 BIT $01 = FF A:80 X:00 Y:9F P:A4 SP:FB CYC: 84 SL:250 +CB6C A0 00 LDY #$00 A:80 X:00 Y:9F P:E4 SP:FB CYC: 93 SL:250 +CB6E D0 09 BNE $CB79 A:80 X:00 Y:00 P:66 SP:FB CYC: 99 SL:250 +CB70 30 07 BMI $CB79 A:80 X:00 Y:00 P:66 SP:FB CYC:105 SL:250 +CB72 50 05 BVC $CB79 A:80 X:00 Y:00 P:66 SP:FB CYC:111 SL:250 +CB74 B0 03 BCS $CB79 A:80 X:00 Y:00 P:66 SP:FB CYC:117 SL:250 +CB76 4C 7D CB JMP $CB7D A:80 X:00 Y:00 P:66 SP:FB CYC:123 SL:250 +CB7D EA NOP A:80 X:00 Y:00 P:66 SP:FB CYC:132 SL:250 +CB7E A9 55 LDA #$55 A:80 X:00 Y:00 P:66 SP:FB CYC:138 SL:250 +CB80 A2 AA LDX #$AA A:55 X:00 Y:00 P:64 SP:FB CYC:144 SL:250 +CB82 A0 33 LDY #$33 A:55 X:AA Y:00 P:E4 SP:FB CYC:150 SL:250 +CB84 C9 55 CMP #$55 A:55 X:AA Y:33 P:64 SP:FB CYC:156 SL:250 +CB86 D0 23 BNE $CBAB A:55 X:AA Y:33 P:67 SP:FB CYC:162 SL:250 +CB88 E0 AA CPX #$AA A:55 X:AA Y:33 P:67 SP:FB CYC:168 SL:250 +CB8A D0 1F BNE $CBAB A:55 X:AA Y:33 P:67 SP:FB CYC:174 SL:250 +CB8C C0 33 CPY #$33 A:55 X:AA Y:33 P:67 SP:FB CYC:180 SL:250 +CB8E D0 1B BNE $CBAB A:55 X:AA Y:33 P:67 SP:FB CYC:186 SL:250 +CB90 C9 55 CMP #$55 A:55 X:AA Y:33 P:67 SP:FB CYC:192 SL:250 +CB92 D0 17 BNE $CBAB A:55 X:AA Y:33 P:67 SP:FB CYC:198 SL:250 +CB94 E0 AA CPX #$AA A:55 X:AA Y:33 P:67 SP:FB CYC:204 SL:250 +CB96 D0 13 BNE $CBAB A:55 X:AA Y:33 P:67 SP:FB CYC:210 SL:250 +CB98 C0 33 CPY #$33 A:55 X:AA Y:33 P:67 SP:FB CYC:216 SL:250 +CB9A D0 0F BNE $CBAB A:55 X:AA Y:33 P:67 SP:FB CYC:222 SL:250 +CB9C C9 56 CMP #$56 A:55 X:AA Y:33 P:67 SP:FB CYC:228 SL:250 +CB9E F0 0B BEQ $CBAB A:55 X:AA Y:33 P:E4 SP:FB CYC:234 SL:250 +CBA0 E0 AB CPX #$AB A:55 X:AA Y:33 P:E4 SP:FB CYC:240 SL:250 +CBA2 F0 07 BEQ $CBAB A:55 X:AA Y:33 P:E4 SP:FB CYC:246 SL:250 +CBA4 C0 34 CPY #$34 A:55 X:AA Y:33 P:E4 SP:FB CYC:252 SL:250 +CBA6 F0 03 BEQ $CBAB A:55 X:AA Y:33 P:E4 SP:FB CYC:258 SL:250 +CBA8 4C AF CB JMP $CBAF A:55 X:AA Y:33 P:E4 SP:FB CYC:264 SL:250 +CBAF A0 71 LDY #$71 A:55 X:AA Y:33 P:E4 SP:FB CYC:273 SL:250 +CBB1 20 31 F9 JSR $F931 A:55 X:AA Y:71 P:64 SP:FB CYC:279 SL:250 +F931 24 01 BIT $01 = FF A:55 X:AA Y:71 P:64 SP:F9 CYC:297 SL:250 +F933 A9 40 LDA #$40 A:55 X:AA Y:71 P:E4 SP:F9 CYC:306 SL:250 +F935 38 SEC A:40 X:AA Y:71 P:64 SP:F9 CYC:312 SL:250 +F936 60 RTS A:40 X:AA Y:71 P:65 SP:F9 CYC:318 SL:250 +CBB4 E9 40 SBC #$40 A:40 X:AA Y:71 P:65 SP:FB CYC:336 SL:250 +CBB6 20 37 F9 JSR $F937 A:00 X:AA Y:71 P:27 SP:FB CYC: 1 SL:251 +F937 30 0B BMI $F944 A:00 X:AA Y:71 P:27 SP:F9 CYC: 19 SL:251 +F939 90 09 BCC $F944 A:00 X:AA Y:71 P:27 SP:F9 CYC: 25 SL:251 +F93B D0 07 BNE $F944 A:00 X:AA Y:71 P:27 SP:F9 CYC: 31 SL:251 +F93D 70 05 BVS $F944 A:00 X:AA Y:71 P:27 SP:F9 CYC: 37 SL:251 +F93F C9 00 CMP #$00 A:00 X:AA Y:71 P:27 SP:F9 CYC: 43 SL:251 +F941 D0 01 BNE $F944 A:00 X:AA Y:71 P:27 SP:F9 CYC: 49 SL:251 +F943 60 RTS A:00 X:AA Y:71 P:27 SP:F9 CYC: 55 SL:251 +CBB9 C8 INY A:00 X:AA Y:71 P:27 SP:FB CYC: 73 SL:251 +CBBA 20 47 F9 JSR $F947 A:00 X:AA Y:72 P:25 SP:FB CYC: 79 SL:251 +F947 B8 CLV A:00 X:AA Y:72 P:25 SP:F9 CYC: 97 SL:251 +F948 38 SEC A:00 X:AA Y:72 P:25 SP:F9 CYC:103 SL:251 +F949 A9 40 LDA #$40 A:00 X:AA Y:72 P:25 SP:F9 CYC:109 SL:251 +F94B 60 RTS A:40 X:AA Y:72 P:25 SP:F9 CYC:115 SL:251 +CBBD E9 3F SBC #$3F A:40 X:AA Y:72 P:25 SP:FB CYC:133 SL:251 +CBBF 20 4C F9 JSR $F94C A:01 X:AA Y:72 P:25 SP:FB CYC:139 SL:251 +F94C F0 0B BEQ $F959 A:01 X:AA Y:72 P:25 SP:F9 CYC:157 SL:251 +F94E 30 09 BMI $F959 A:01 X:AA Y:72 P:25 SP:F9 CYC:163 SL:251 +F950 90 07 BCC $F959 A:01 X:AA Y:72 P:25 SP:F9 CYC:169 SL:251 +F952 70 05 BVS $F959 A:01 X:AA Y:72 P:25 SP:F9 CYC:175 SL:251 +F954 C9 01 CMP #$01 A:01 X:AA Y:72 P:25 SP:F9 CYC:181 SL:251 +F956 D0 01 BNE $F959 A:01 X:AA Y:72 P:27 SP:F9 CYC:187 SL:251 +F958 60 RTS A:01 X:AA Y:72 P:27 SP:F9 CYC:193 SL:251 +CBC2 C8 INY A:01 X:AA Y:72 P:27 SP:FB CYC:211 SL:251 +CBC3 20 5C F9 JSR $F95C A:01 X:AA Y:73 P:25 SP:FB CYC:217 SL:251 +F95C A9 40 LDA #$40 A:01 X:AA Y:73 P:25 SP:F9 CYC:235 SL:251 +F95E 38 SEC A:40 X:AA Y:73 P:25 SP:F9 CYC:241 SL:251 +F95F 24 01 BIT $01 = FF A:40 X:AA Y:73 P:25 SP:F9 CYC:247 SL:251 +F961 60 RTS A:40 X:AA Y:73 P:E5 SP:F9 CYC:256 SL:251 +CBC6 E9 41 SBC #$41 A:40 X:AA Y:73 P:E5 SP:FB CYC:274 SL:251 +CBC8 20 62 F9 JSR $F962 A:FF X:AA Y:73 P:A4 SP:FB CYC:280 SL:251 +F962 B0 0B BCS $F96F A:FF X:AA Y:73 P:A4 SP:F9 CYC:298 SL:251 +F964 F0 09 BEQ $F96F A:FF X:AA Y:73 P:A4 SP:F9 CYC:304 SL:251 +F966 10 07 BPL $F96F A:FF X:AA Y:73 P:A4 SP:F9 CYC:310 SL:251 +F968 70 05 BVS $F96F A:FF X:AA Y:73 P:A4 SP:F9 CYC:316 SL:251 +F96A C9 FF CMP #$FF A:FF X:AA Y:73 P:A4 SP:F9 CYC:322 SL:251 +F96C D0 01 BNE $F96F A:FF X:AA Y:73 P:27 SP:F9 CYC:328 SL:251 +F96E 60 RTS A:FF X:AA Y:73 P:27 SP:F9 CYC:334 SL:251 +CBCB C8 INY A:FF X:AA Y:73 P:27 SP:FB CYC: 11 SL:252 +CBCC 20 72 F9 JSR $F972 A:FF X:AA Y:74 P:25 SP:FB CYC: 17 SL:252 +F972 18 CLC A:FF X:AA Y:74 P:25 SP:F9 CYC: 35 SL:252 +F973 A9 80 LDA #$80 A:FF X:AA Y:74 P:24 SP:F9 CYC: 41 SL:252 +F975 60 RTS A:80 X:AA Y:74 P:A4 SP:F9 CYC: 47 SL:252 +CBCF E9 00 SBC #$00 A:80 X:AA Y:74 P:A4 SP:FB CYC: 65 SL:252 +CBD1 20 76 F9 JSR $F976 A:7F X:AA Y:74 P:65 SP:FB CYC: 71 SL:252 +F976 90 05 BCC $F97D A:7F X:AA Y:74 P:65 SP:F9 CYC: 89 SL:252 +F978 C9 7F CMP #$7F A:7F X:AA Y:74 P:65 SP:F9 CYC: 95 SL:252 +F97A D0 01 BNE $F97D A:7F X:AA Y:74 P:67 SP:F9 CYC:101 SL:252 +F97C 60 RTS A:7F X:AA Y:74 P:67 SP:F9 CYC:107 SL:252 +CBD4 C8 INY A:7F X:AA Y:74 P:67 SP:FB CYC:125 SL:252 +CBD5 20 80 F9 JSR $F980 A:7F X:AA Y:75 P:65 SP:FB CYC:131 SL:252 +F980 38 SEC A:7F X:AA Y:75 P:65 SP:F9 CYC:149 SL:252 +F981 A9 81 LDA #$81 A:7F X:AA Y:75 P:65 SP:F9 CYC:155 SL:252 +F983 60 RTS A:81 X:AA Y:75 P:E5 SP:F9 CYC:161 SL:252 +CBD8 E9 7F SBC #$7F A:81 X:AA Y:75 P:E5 SP:FB CYC:179 SL:252 +CBDA 20 84 F9 JSR $F984 A:02 X:AA Y:75 P:65 SP:FB CYC:185 SL:252 +F984 50 07 BVC $F98D A:02 X:AA Y:75 P:65 SP:F9 CYC:203 SL:252 +F986 90 05 BCC $F98D A:02 X:AA Y:75 P:65 SP:F9 CYC:209 SL:252 +F988 C9 02 CMP #$02 A:02 X:AA Y:75 P:65 SP:F9 CYC:215 SL:252 +F98A D0 01 BNE $F98D A:02 X:AA Y:75 P:67 SP:F9 CYC:221 SL:252 +F98C 60 RTS A:02 X:AA Y:75 P:67 SP:F9 CYC:227 SL:252 +CBDD 60 RTS A:02 X:AA Y:75 P:67 SP:FB CYC:245 SL:252 +C606 20 DE CB JSR $CBDE A:02 X:AA Y:75 P:67 SP:FD CYC:263 SL:252 +CBDE EA NOP A:02 X:AA Y:75 P:67 SP:FB CYC:281 SL:252 +CBDF A9 FF LDA #$FF A:02 X:AA Y:75 P:67 SP:FB CYC:287 SL:252 +CBE1 85 01 STA $01 = FF A:FF X:AA Y:75 P:E5 SP:FB CYC:293 SL:252 +CBE3 A9 44 LDA #$44 A:FF X:AA Y:75 P:E5 SP:FB CYC:302 SL:252 +CBE5 A2 55 LDX #$55 A:44 X:AA Y:75 P:65 SP:FB CYC:308 SL:252 +CBE7 A0 66 LDY #$66 A:44 X:55 Y:75 P:65 SP:FB CYC:314 SL:252 +CBE9 E8 INX A:44 X:55 Y:66 P:65 SP:FB CYC:320 SL:252 +CBEA 88 DEY A:44 X:56 Y:66 P:65 SP:FB CYC:326 SL:252 +CBEB E0 56 CPX #$56 A:44 X:56 Y:65 P:65 SP:FB CYC:332 SL:252 +CBED D0 21 BNE $CC10 A:44 X:56 Y:65 P:67 SP:FB CYC:338 SL:252 +CBEF C0 65 CPY #$65 A:44 X:56 Y:65 P:67 SP:FB CYC: 3 SL:253 +CBF1 D0 1D BNE $CC10 A:44 X:56 Y:65 P:67 SP:FB CYC: 9 SL:253 +CBF3 E8 INX A:44 X:56 Y:65 P:67 SP:FB CYC: 15 SL:253 +CBF4 E8 INX A:44 X:57 Y:65 P:65 SP:FB CYC: 21 SL:253 +CBF5 88 DEY A:44 X:58 Y:65 P:65 SP:FB CYC: 27 SL:253 +CBF6 88 DEY A:44 X:58 Y:64 P:65 SP:FB CYC: 33 SL:253 +CBF7 E0 58 CPX #$58 A:44 X:58 Y:63 P:65 SP:FB CYC: 39 SL:253 +CBF9 D0 15 BNE $CC10 A:44 X:58 Y:63 P:67 SP:FB CYC: 45 SL:253 +CBFB C0 63 CPY #$63 A:44 X:58 Y:63 P:67 SP:FB CYC: 51 SL:253 +CBFD D0 11 BNE $CC10 A:44 X:58 Y:63 P:67 SP:FB CYC: 57 SL:253 +CBFF CA DEX A:44 X:58 Y:63 P:67 SP:FB CYC: 63 SL:253 +CC00 C8 INY A:44 X:57 Y:63 P:65 SP:FB CYC: 69 SL:253 +CC01 E0 57 CPX #$57 A:44 X:57 Y:64 P:65 SP:FB CYC: 75 SL:253 +CC03 D0 0B BNE $CC10 A:44 X:57 Y:64 P:67 SP:FB CYC: 81 SL:253 +CC05 C0 64 CPY #$64 A:44 X:57 Y:64 P:67 SP:FB CYC: 87 SL:253 +CC07 D0 07 BNE $CC10 A:44 X:57 Y:64 P:67 SP:FB CYC: 93 SL:253 +CC09 C9 44 CMP #$44 A:44 X:57 Y:64 P:67 SP:FB CYC: 99 SL:253 +CC0B D0 03 BNE $CC10 A:44 X:57 Y:64 P:67 SP:FB CYC:105 SL:253 +CC0D 4C 14 CC JMP $CC14 A:44 X:57 Y:64 P:67 SP:FB CYC:111 SL:253 +CC14 EA NOP A:44 X:57 Y:64 P:67 SP:FB CYC:120 SL:253 +CC15 38 SEC A:44 X:57 Y:64 P:67 SP:FB CYC:126 SL:253 +CC16 A2 69 LDX #$69 A:44 X:57 Y:64 P:67 SP:FB CYC:132 SL:253 +CC18 A9 96 LDA #$96 A:44 X:69 Y:64 P:65 SP:FB CYC:138 SL:253 +CC1A 24 01 BIT $01 = FF A:96 X:69 Y:64 P:E5 SP:FB CYC:144 SL:253 +CC1C A0 FF LDY #$FF A:96 X:69 Y:64 P:E5 SP:FB CYC:153 SL:253 +CC1E C8 INY A:96 X:69 Y:FF P:E5 SP:FB CYC:159 SL:253 +CC1F D0 3D BNE $CC5E A:96 X:69 Y:00 P:67 SP:FB CYC:165 SL:253 +CC21 30 3B BMI $CC5E A:96 X:69 Y:00 P:67 SP:FB CYC:171 SL:253 +CC23 90 39 BCC $CC5E A:96 X:69 Y:00 P:67 SP:FB CYC:177 SL:253 +CC25 50 37 BVC $CC5E A:96 X:69 Y:00 P:67 SP:FB CYC:183 SL:253 +CC27 C0 00 CPY #$00 A:96 X:69 Y:00 P:67 SP:FB CYC:189 SL:253 +CC29 D0 33 BNE $CC5E A:96 X:69 Y:00 P:67 SP:FB CYC:195 SL:253 +CC2B C8 INY A:96 X:69 Y:00 P:67 SP:FB CYC:201 SL:253 +CC2C F0 30 BEQ $CC5E A:96 X:69 Y:01 P:65 SP:FB CYC:207 SL:253 +CC2E 30 2E BMI $CC5E A:96 X:69 Y:01 P:65 SP:FB CYC:213 SL:253 +CC30 90 2C BCC $CC5E A:96 X:69 Y:01 P:65 SP:FB CYC:219 SL:253 +CC32 50 2A BVC $CC5E A:96 X:69 Y:01 P:65 SP:FB CYC:225 SL:253 +CC34 18 CLC A:96 X:69 Y:01 P:65 SP:FB CYC:231 SL:253 +CC35 B8 CLV A:96 X:69 Y:01 P:64 SP:FB CYC:237 SL:253 +CC36 A0 00 LDY #$00 A:96 X:69 Y:01 P:24 SP:FB CYC:243 SL:253 +CC38 88 DEY A:96 X:69 Y:00 P:26 SP:FB CYC:249 SL:253 +CC39 F0 23 BEQ $CC5E A:96 X:69 Y:FF P:A4 SP:FB CYC:255 SL:253 +CC3B 10 21 BPL $CC5E A:96 X:69 Y:FF P:A4 SP:FB CYC:261 SL:253 +CC3D B0 1F BCS $CC5E A:96 X:69 Y:FF P:A4 SP:FB CYC:267 SL:253 +CC3F 70 1D BVS $CC5E A:96 X:69 Y:FF P:A4 SP:FB CYC:273 SL:253 +CC41 C0 FF CPY #$FF A:96 X:69 Y:FF P:A4 SP:FB CYC:279 SL:253 +CC43 D0 19 BNE $CC5E A:96 X:69 Y:FF P:27 SP:FB CYC:285 SL:253 +CC45 18 CLC A:96 X:69 Y:FF P:27 SP:FB CYC:291 SL:253 +CC46 88 DEY A:96 X:69 Y:FF P:26 SP:FB CYC:297 SL:253 +CC47 F0 15 BEQ $CC5E A:96 X:69 Y:FE P:A4 SP:FB CYC:303 SL:253 +CC49 10 13 BPL $CC5E A:96 X:69 Y:FE P:A4 SP:FB CYC:309 SL:253 +CC4B B0 11 BCS $CC5E A:96 X:69 Y:FE P:A4 SP:FB CYC:315 SL:253 +CC4D 70 0F BVS $CC5E A:96 X:69 Y:FE P:A4 SP:FB CYC:321 SL:253 +CC4F C0 FE CPY #$FE A:96 X:69 Y:FE P:A4 SP:FB CYC:327 SL:253 +CC51 D0 0B BNE $CC5E A:96 X:69 Y:FE P:27 SP:FB CYC:333 SL:253 +CC53 C9 96 CMP #$96 A:96 X:69 Y:FE P:27 SP:FB CYC:339 SL:253 +CC55 D0 07 BNE $CC5E A:96 X:69 Y:FE P:27 SP:FB CYC: 4 SL:254 +CC57 E0 69 CPX #$69 A:96 X:69 Y:FE P:27 SP:FB CYC: 10 SL:254 +CC59 D0 03 BNE $CC5E A:96 X:69 Y:FE P:27 SP:FB CYC: 16 SL:254 +CC5B 4C 62 CC JMP $CC62 A:96 X:69 Y:FE P:27 SP:FB CYC: 22 SL:254 +CC62 EA NOP A:96 X:69 Y:FE P:27 SP:FB CYC: 31 SL:254 +CC63 38 SEC A:96 X:69 Y:FE P:27 SP:FB CYC: 37 SL:254 +CC64 A0 69 LDY #$69 A:96 X:69 Y:FE P:27 SP:FB CYC: 43 SL:254 +CC66 A9 96 LDA #$96 A:96 X:69 Y:69 P:25 SP:FB CYC: 49 SL:254 +CC68 24 01 BIT $01 = FF A:96 X:69 Y:69 P:A5 SP:FB CYC: 55 SL:254 +CC6A A2 FF LDX #$FF A:96 X:69 Y:69 P:E5 SP:FB CYC: 64 SL:254 +CC6C E8 INX A:96 X:FF Y:69 P:E5 SP:FB CYC: 70 SL:254 +CC6D D0 3D BNE $CCAC A:96 X:00 Y:69 P:67 SP:FB CYC: 76 SL:254 +CC6F 30 3B BMI $CCAC A:96 X:00 Y:69 P:67 SP:FB CYC: 82 SL:254 +CC71 90 39 BCC $CCAC A:96 X:00 Y:69 P:67 SP:FB CYC: 88 SL:254 +CC73 50 37 BVC $CCAC A:96 X:00 Y:69 P:67 SP:FB CYC: 94 SL:254 +CC75 E0 00 CPX #$00 A:96 X:00 Y:69 P:67 SP:FB CYC:100 SL:254 +CC77 D0 33 BNE $CCAC A:96 X:00 Y:69 P:67 SP:FB CYC:106 SL:254 +CC79 E8 INX A:96 X:00 Y:69 P:67 SP:FB CYC:112 SL:254 +CC7A F0 30 BEQ $CCAC A:96 X:01 Y:69 P:65 SP:FB CYC:118 SL:254 +CC7C 30 2E BMI $CCAC A:96 X:01 Y:69 P:65 SP:FB CYC:124 SL:254 +CC7E 90 2C BCC $CCAC A:96 X:01 Y:69 P:65 SP:FB CYC:130 SL:254 +CC80 50 2A BVC $CCAC A:96 X:01 Y:69 P:65 SP:FB CYC:136 SL:254 +CC82 18 CLC A:96 X:01 Y:69 P:65 SP:FB CYC:142 SL:254 +CC83 B8 CLV A:96 X:01 Y:69 P:64 SP:FB CYC:148 SL:254 +CC84 A2 00 LDX #$00 A:96 X:01 Y:69 P:24 SP:FB CYC:154 SL:254 +CC86 CA DEX A:96 X:00 Y:69 P:26 SP:FB CYC:160 SL:254 +CC87 F0 23 BEQ $CCAC A:96 X:FF Y:69 P:A4 SP:FB CYC:166 SL:254 +CC89 10 21 BPL $CCAC A:96 X:FF Y:69 P:A4 SP:FB CYC:172 SL:254 +CC8B B0 1F BCS $CCAC A:96 X:FF Y:69 P:A4 SP:FB CYC:178 SL:254 +CC8D 70 1D BVS $CCAC A:96 X:FF Y:69 P:A4 SP:FB CYC:184 SL:254 +CC8F E0 FF CPX #$FF A:96 X:FF Y:69 P:A4 SP:FB CYC:190 SL:254 +CC91 D0 19 BNE $CCAC A:96 X:FF Y:69 P:27 SP:FB CYC:196 SL:254 +CC93 18 CLC A:96 X:FF Y:69 P:27 SP:FB CYC:202 SL:254 +CC94 CA DEX A:96 X:FF Y:69 P:26 SP:FB CYC:208 SL:254 +CC95 F0 15 BEQ $CCAC A:96 X:FE Y:69 P:A4 SP:FB CYC:214 SL:254 +CC97 10 13 BPL $CCAC A:96 X:FE Y:69 P:A4 SP:FB CYC:220 SL:254 +CC99 B0 11 BCS $CCAC A:96 X:FE Y:69 P:A4 SP:FB CYC:226 SL:254 +CC9B 70 0F BVS $CCAC A:96 X:FE Y:69 P:A4 SP:FB CYC:232 SL:254 +CC9D E0 FE CPX #$FE A:96 X:FE Y:69 P:A4 SP:FB CYC:238 SL:254 +CC9F D0 0B BNE $CCAC A:96 X:FE Y:69 P:27 SP:FB CYC:244 SL:254 +CCA1 C9 96 CMP #$96 A:96 X:FE Y:69 P:27 SP:FB CYC:250 SL:254 +CCA3 D0 07 BNE $CCAC A:96 X:FE Y:69 P:27 SP:FB CYC:256 SL:254 +CCA5 C0 69 CPY #$69 A:96 X:FE Y:69 P:27 SP:FB CYC:262 SL:254 +CCA7 D0 03 BNE $CCAC A:96 X:FE Y:69 P:27 SP:FB CYC:268 SL:254 +CCA9 4C B0 CC JMP $CCB0 A:96 X:FE Y:69 P:27 SP:FB CYC:274 SL:254 +CCB0 EA NOP A:96 X:FE Y:69 P:27 SP:FB CYC:283 SL:254 +CCB1 A9 85 LDA #$85 A:96 X:FE Y:69 P:27 SP:FB CYC:289 SL:254 +CCB3 A2 34 LDX #$34 A:85 X:FE Y:69 P:A5 SP:FB CYC:295 SL:254 +CCB5 A0 99 LDY #$99 A:85 X:34 Y:69 P:25 SP:FB CYC:301 SL:254 +CCB7 18 CLC A:85 X:34 Y:99 P:A5 SP:FB CYC:307 SL:254 +CCB8 24 01 BIT $01 = FF A:85 X:34 Y:99 P:A4 SP:FB CYC:313 SL:254 +CCBA A8 TAY A:85 X:34 Y:99 P:E4 SP:FB CYC:322 SL:254 +CCBB F0 2E BEQ $CCEB A:85 X:34 Y:85 P:E4 SP:FB CYC:328 SL:254 +CCBD B0 2C BCS $CCEB A:85 X:34 Y:85 P:E4 SP:FB CYC:334 SL:254 +CCBF 50 2A BVC $CCEB A:85 X:34 Y:85 P:E4 SP:FB CYC:340 SL:254 +CCC1 10 28 BPL $CCEB A:85 X:34 Y:85 P:E4 SP:FB CYC: 5 SL:255 +CCC3 C9 85 CMP #$85 A:85 X:34 Y:85 P:E4 SP:FB CYC: 11 SL:255 +CCC5 D0 24 BNE $CCEB A:85 X:34 Y:85 P:67 SP:FB CYC: 17 SL:255 +CCC7 E0 34 CPX #$34 A:85 X:34 Y:85 P:67 SP:FB CYC: 23 SL:255 +CCC9 D0 20 BNE $CCEB A:85 X:34 Y:85 P:67 SP:FB CYC: 29 SL:255 +CCCB C0 85 CPY #$85 A:85 X:34 Y:85 P:67 SP:FB CYC: 35 SL:255 +CCCD D0 1C BNE $CCEB A:85 X:34 Y:85 P:67 SP:FB CYC: 41 SL:255 +CCCF A9 00 LDA #$00 A:85 X:34 Y:85 P:67 SP:FB CYC: 47 SL:255 +CCD1 38 SEC A:00 X:34 Y:85 P:67 SP:FB CYC: 53 SL:255 +CCD2 B8 CLV A:00 X:34 Y:85 P:67 SP:FB CYC: 59 SL:255 +CCD3 A8 TAY A:00 X:34 Y:85 P:27 SP:FB CYC: 65 SL:255 +CCD4 D0 15 BNE $CCEB A:00 X:34 Y:00 P:27 SP:FB CYC: 71 SL:255 +CCD6 90 13 BCC $CCEB A:00 X:34 Y:00 P:27 SP:FB CYC: 77 SL:255 +CCD8 70 11 BVS $CCEB A:00 X:34 Y:00 P:27 SP:FB CYC: 83 SL:255 +CCDA 30 0F BMI $CCEB A:00 X:34 Y:00 P:27 SP:FB CYC: 89 SL:255 +CCDC C9 00 CMP #$00 A:00 X:34 Y:00 P:27 SP:FB CYC: 95 SL:255 +CCDE D0 0B BNE $CCEB A:00 X:34 Y:00 P:27 SP:FB CYC:101 SL:255 +CCE0 E0 34 CPX #$34 A:00 X:34 Y:00 P:27 SP:FB CYC:107 SL:255 +CCE2 D0 07 BNE $CCEB A:00 X:34 Y:00 P:27 SP:FB CYC:113 SL:255 +CCE4 C0 00 CPY #$00 A:00 X:34 Y:00 P:27 SP:FB CYC:119 SL:255 +CCE6 D0 03 BNE $CCEB A:00 X:34 Y:00 P:27 SP:FB CYC:125 SL:255 +CCE8 4C EF CC JMP $CCEF A:00 X:34 Y:00 P:27 SP:FB CYC:131 SL:255 +CCEF EA NOP A:00 X:34 Y:00 P:27 SP:FB CYC:140 SL:255 +CCF0 A9 85 LDA #$85 A:00 X:34 Y:00 P:27 SP:FB CYC:146 SL:255 +CCF2 A2 34 LDX #$34 A:85 X:34 Y:00 P:A5 SP:FB CYC:152 SL:255 +CCF4 A0 99 LDY #$99 A:85 X:34 Y:00 P:25 SP:FB CYC:158 SL:255 +CCF6 18 CLC A:85 X:34 Y:99 P:A5 SP:FB CYC:164 SL:255 +CCF7 24 01 BIT $01 = FF A:85 X:34 Y:99 P:A4 SP:FB CYC:170 SL:255 +CCF9 AA TAX A:85 X:34 Y:99 P:E4 SP:FB CYC:179 SL:255 +CCFA F0 2E BEQ $CD2A A:85 X:85 Y:99 P:E4 SP:FB CYC:185 SL:255 +CCFC B0 2C BCS $CD2A A:85 X:85 Y:99 P:E4 SP:FB CYC:191 SL:255 +CCFE 50 2A BVC $CD2A A:85 X:85 Y:99 P:E4 SP:FB CYC:197 SL:255 +CD00 10 28 BPL $CD2A A:85 X:85 Y:99 P:E4 SP:FB CYC:203 SL:255 +CD02 C9 85 CMP #$85 A:85 X:85 Y:99 P:E4 SP:FB CYC:209 SL:255 +CD04 D0 24 BNE $CD2A A:85 X:85 Y:99 P:67 SP:FB CYC:215 SL:255 +CD06 E0 85 CPX #$85 A:85 X:85 Y:99 P:67 SP:FB CYC:221 SL:255 +CD08 D0 20 BNE $CD2A A:85 X:85 Y:99 P:67 SP:FB CYC:227 SL:255 +CD0A C0 99 CPY #$99 A:85 X:85 Y:99 P:67 SP:FB CYC:233 SL:255 +CD0C D0 1C BNE $CD2A A:85 X:85 Y:99 P:67 SP:FB CYC:239 SL:255 +CD0E A9 00 LDA #$00 A:85 X:85 Y:99 P:67 SP:FB CYC:245 SL:255 +CD10 38 SEC A:00 X:85 Y:99 P:67 SP:FB CYC:251 SL:255 +CD11 B8 CLV A:00 X:85 Y:99 P:67 SP:FB CYC:257 SL:255 +CD12 AA TAX A:00 X:85 Y:99 P:27 SP:FB CYC:263 SL:255 +CD13 D0 15 BNE $CD2A A:00 X:00 Y:99 P:27 SP:FB CYC:269 SL:255 +CD15 90 13 BCC $CD2A A:00 X:00 Y:99 P:27 SP:FB CYC:275 SL:255 +CD17 70 11 BVS $CD2A A:00 X:00 Y:99 P:27 SP:FB CYC:281 SL:255 +CD19 30 0F BMI $CD2A A:00 X:00 Y:99 P:27 SP:FB CYC:287 SL:255 +CD1B C9 00 CMP #$00 A:00 X:00 Y:99 P:27 SP:FB CYC:293 SL:255 +CD1D D0 0B BNE $CD2A A:00 X:00 Y:99 P:27 SP:FB CYC:299 SL:255 +CD1F E0 00 CPX #$00 A:00 X:00 Y:99 P:27 SP:FB CYC:305 SL:255 +CD21 D0 07 BNE $CD2A A:00 X:00 Y:99 P:27 SP:FB CYC:311 SL:255 +CD23 C0 99 CPY #$99 A:00 X:00 Y:99 P:27 SP:FB CYC:317 SL:255 +CD25 D0 03 BNE $CD2A A:00 X:00 Y:99 P:27 SP:FB CYC:323 SL:255 +CD27 4C 2E CD JMP $CD2E A:00 X:00 Y:99 P:27 SP:FB CYC:329 SL:255 +CD2E EA NOP A:00 X:00 Y:99 P:27 SP:FB CYC:338 SL:255 +CD2F A9 85 LDA #$85 A:00 X:00 Y:99 P:27 SP:FB CYC: 3 SL:256 +CD31 A2 34 LDX #$34 A:85 X:00 Y:99 P:A5 SP:FB CYC: 9 SL:256 +CD33 A0 99 LDY #$99 A:85 X:34 Y:99 P:25 SP:FB CYC: 15 SL:256 +CD35 18 CLC A:85 X:34 Y:99 P:A5 SP:FB CYC: 21 SL:256 +CD36 24 01 BIT $01 = FF A:85 X:34 Y:99 P:A4 SP:FB CYC: 27 SL:256 +CD38 98 TYA A:85 X:34 Y:99 P:E4 SP:FB CYC: 36 SL:256 +CD39 F0 2E BEQ $CD69 A:99 X:34 Y:99 P:E4 SP:FB CYC: 42 SL:256 +CD3B B0 2C BCS $CD69 A:99 X:34 Y:99 P:E4 SP:FB CYC: 48 SL:256 +CD3D 50 2A BVC $CD69 A:99 X:34 Y:99 P:E4 SP:FB CYC: 54 SL:256 +CD3F 10 28 BPL $CD69 A:99 X:34 Y:99 P:E4 SP:FB CYC: 60 SL:256 +CD41 C9 99 CMP #$99 A:99 X:34 Y:99 P:E4 SP:FB CYC: 66 SL:256 +CD43 D0 24 BNE $CD69 A:99 X:34 Y:99 P:67 SP:FB CYC: 72 SL:256 +CD45 E0 34 CPX #$34 A:99 X:34 Y:99 P:67 SP:FB CYC: 78 SL:256 +CD47 D0 20 BNE $CD69 A:99 X:34 Y:99 P:67 SP:FB CYC: 84 SL:256 +CD49 C0 99 CPY #$99 A:99 X:34 Y:99 P:67 SP:FB CYC: 90 SL:256 +CD4B D0 1C BNE $CD69 A:99 X:34 Y:99 P:67 SP:FB CYC: 96 SL:256 +CD4D A0 00 LDY #$00 A:99 X:34 Y:99 P:67 SP:FB CYC:102 SL:256 +CD4F 38 SEC A:99 X:34 Y:00 P:67 SP:FB CYC:108 SL:256 +CD50 B8 CLV A:99 X:34 Y:00 P:67 SP:FB CYC:114 SL:256 +CD51 98 TYA A:99 X:34 Y:00 P:27 SP:FB CYC:120 SL:256 +CD52 D0 15 BNE $CD69 A:00 X:34 Y:00 P:27 SP:FB CYC:126 SL:256 +CD54 90 13 BCC $CD69 A:00 X:34 Y:00 P:27 SP:FB CYC:132 SL:256 +CD56 70 11 BVS $CD69 A:00 X:34 Y:00 P:27 SP:FB CYC:138 SL:256 +CD58 30 0F BMI $CD69 A:00 X:34 Y:00 P:27 SP:FB CYC:144 SL:256 +CD5A C9 00 CMP #$00 A:00 X:34 Y:00 P:27 SP:FB CYC:150 SL:256 +CD5C D0 0B BNE $CD69 A:00 X:34 Y:00 P:27 SP:FB CYC:156 SL:256 +CD5E E0 34 CPX #$34 A:00 X:34 Y:00 P:27 SP:FB CYC:162 SL:256 +CD60 D0 07 BNE $CD69 A:00 X:34 Y:00 P:27 SP:FB CYC:168 SL:256 +CD62 C0 00 CPY #$00 A:00 X:34 Y:00 P:27 SP:FB CYC:174 SL:256 +CD64 D0 03 BNE $CD69 A:00 X:34 Y:00 P:27 SP:FB CYC:180 SL:256 +CD66 4C 6D CD JMP $CD6D A:00 X:34 Y:00 P:27 SP:FB CYC:186 SL:256 +CD6D EA NOP A:00 X:34 Y:00 P:27 SP:FB CYC:195 SL:256 +CD6E A9 85 LDA #$85 A:00 X:34 Y:00 P:27 SP:FB CYC:201 SL:256 +CD70 A2 34 LDX #$34 A:85 X:34 Y:00 P:A5 SP:FB CYC:207 SL:256 +CD72 A0 99 LDY #$99 A:85 X:34 Y:00 P:25 SP:FB CYC:213 SL:256 +CD74 18 CLC A:85 X:34 Y:99 P:A5 SP:FB CYC:219 SL:256 +CD75 24 01 BIT $01 = FF A:85 X:34 Y:99 P:A4 SP:FB CYC:225 SL:256 +CD77 8A TXA A:85 X:34 Y:99 P:E4 SP:FB CYC:234 SL:256 +CD78 F0 2E BEQ $CDA8 A:34 X:34 Y:99 P:64 SP:FB CYC:240 SL:256 +CD7A B0 2C BCS $CDA8 A:34 X:34 Y:99 P:64 SP:FB CYC:246 SL:256 +CD7C 50 2A BVC $CDA8 A:34 X:34 Y:99 P:64 SP:FB CYC:252 SL:256 +CD7E 30 28 BMI $CDA8 A:34 X:34 Y:99 P:64 SP:FB CYC:258 SL:256 +CD80 C9 34 CMP #$34 A:34 X:34 Y:99 P:64 SP:FB CYC:264 SL:256 +CD82 D0 24 BNE $CDA8 A:34 X:34 Y:99 P:67 SP:FB CYC:270 SL:256 +CD84 E0 34 CPX #$34 A:34 X:34 Y:99 P:67 SP:FB CYC:276 SL:256 +CD86 D0 20 BNE $CDA8 A:34 X:34 Y:99 P:67 SP:FB CYC:282 SL:256 +CD88 C0 99 CPY #$99 A:34 X:34 Y:99 P:67 SP:FB CYC:288 SL:256 +CD8A D0 1C BNE $CDA8 A:34 X:34 Y:99 P:67 SP:FB CYC:294 SL:256 +CD8C A2 00 LDX #$00 A:34 X:34 Y:99 P:67 SP:FB CYC:300 SL:256 +CD8E 38 SEC A:34 X:00 Y:99 P:67 SP:FB CYC:306 SL:256 +CD8F B8 CLV A:34 X:00 Y:99 P:67 SP:FB CYC:312 SL:256 +CD90 8A TXA A:34 X:00 Y:99 P:27 SP:FB CYC:318 SL:256 +CD91 D0 15 BNE $CDA8 A:00 X:00 Y:99 P:27 SP:FB CYC:324 SL:256 +CD93 90 13 BCC $CDA8 A:00 X:00 Y:99 P:27 SP:FB CYC:330 SL:256 +CD95 70 11 BVS $CDA8 A:00 X:00 Y:99 P:27 SP:FB CYC:336 SL:256 +CD97 30 0F BMI $CDA8 A:00 X:00 Y:99 P:27 SP:FB CYC: 1 SL:257 +CD99 C9 00 CMP #$00 A:00 X:00 Y:99 P:27 SP:FB CYC: 7 SL:257 +CD9B D0 0B BNE $CDA8 A:00 X:00 Y:99 P:27 SP:FB CYC: 13 SL:257 +CD9D E0 00 CPX #$00 A:00 X:00 Y:99 P:27 SP:FB CYC: 19 SL:257 +CD9F D0 07 BNE $CDA8 A:00 X:00 Y:99 P:27 SP:FB CYC: 25 SL:257 +CDA1 C0 99 CPY #$99 A:00 X:00 Y:99 P:27 SP:FB CYC: 31 SL:257 +CDA3 D0 03 BNE $CDA8 A:00 X:00 Y:99 P:27 SP:FB CYC: 37 SL:257 +CDA5 4C AC CD JMP $CDAC A:00 X:00 Y:99 P:27 SP:FB CYC: 43 SL:257 +CDAC EA NOP A:00 X:00 Y:99 P:27 SP:FB CYC: 52 SL:257 +CDAD BA TSX A:00 X:00 Y:99 P:27 SP:FB CYC: 58 SL:257 +CDAE 8E FF 07 STX $07FF = 00 A:00 X:FB Y:99 P:A5 SP:FB CYC: 64 SL:257 +CDB1 A0 33 LDY #$33 A:00 X:FB Y:99 P:A5 SP:FB CYC: 76 SL:257 +CDB3 A2 69 LDX #$69 A:00 X:FB Y:33 P:25 SP:FB CYC: 82 SL:257 +CDB5 A9 84 LDA #$84 A:00 X:69 Y:33 P:25 SP:FB CYC: 88 SL:257 +CDB7 18 CLC A:84 X:69 Y:33 P:A5 SP:FB CYC: 94 SL:257 +CDB8 24 01 BIT $01 = FF A:84 X:69 Y:33 P:A4 SP:FB CYC:100 SL:257 +CDBA 9A TXS A:84 X:69 Y:33 P:E4 SP:FB CYC:109 SL:257 +CDBB F0 32 BEQ $CDEF A:84 X:69 Y:33 P:E4 SP:69 CYC:115 SL:257 +CDBD 10 30 BPL $CDEF A:84 X:69 Y:33 P:E4 SP:69 CYC:121 SL:257 +CDBF B0 2E BCS $CDEF A:84 X:69 Y:33 P:E4 SP:69 CYC:127 SL:257 +CDC1 50 2C BVC $CDEF A:84 X:69 Y:33 P:E4 SP:69 CYC:133 SL:257 +CDC3 C9 84 CMP #$84 A:84 X:69 Y:33 P:E4 SP:69 CYC:139 SL:257 +CDC5 D0 28 BNE $CDEF A:84 X:69 Y:33 P:67 SP:69 CYC:145 SL:257 +CDC7 E0 69 CPX #$69 A:84 X:69 Y:33 P:67 SP:69 CYC:151 SL:257 +CDC9 D0 24 BNE $CDEF A:84 X:69 Y:33 P:67 SP:69 CYC:157 SL:257 +CDCB C0 33 CPY #$33 A:84 X:69 Y:33 P:67 SP:69 CYC:163 SL:257 +CDCD D0 20 BNE $CDEF A:84 X:69 Y:33 P:67 SP:69 CYC:169 SL:257 +CDCF A0 01 LDY #$01 A:84 X:69 Y:33 P:67 SP:69 CYC:175 SL:257 +CDD1 A9 04 LDA #$04 A:84 X:69 Y:01 P:65 SP:69 CYC:181 SL:257 +CDD3 38 SEC A:04 X:69 Y:01 P:65 SP:69 CYC:187 SL:257 +CDD4 B8 CLV A:04 X:69 Y:01 P:65 SP:69 CYC:193 SL:257 +CDD5 A2 00 LDX #$00 A:04 X:69 Y:01 P:25 SP:69 CYC:199 SL:257 +CDD7 BA TSX A:04 X:00 Y:01 P:27 SP:69 CYC:205 SL:257 +CDD8 F0 15 BEQ $CDEF A:04 X:69 Y:01 P:25 SP:69 CYC:211 SL:257 +CDDA 30 13 BMI $CDEF A:04 X:69 Y:01 P:25 SP:69 CYC:217 SL:257 +CDDC 90 11 BCC $CDEF A:04 X:69 Y:01 P:25 SP:69 CYC:223 SL:257 +CDDE 70 0F BVS $CDEF A:04 X:69 Y:01 P:25 SP:69 CYC:229 SL:257 +CDE0 E0 69 CPX #$69 A:04 X:69 Y:01 P:25 SP:69 CYC:235 SL:257 +CDE2 D0 0B BNE $CDEF A:04 X:69 Y:01 P:27 SP:69 CYC:241 SL:257 +CDE4 C9 04 CMP #$04 A:04 X:69 Y:01 P:27 SP:69 CYC:247 SL:257 +CDE6 D0 07 BNE $CDEF A:04 X:69 Y:01 P:27 SP:69 CYC:253 SL:257 +CDE8 C0 01 CPY #$01 A:04 X:69 Y:01 P:27 SP:69 CYC:259 SL:257 +CDEA D0 03 BNE $CDEF A:04 X:69 Y:01 P:27 SP:69 CYC:265 SL:257 +CDEC 4C F3 CD JMP $CDF3 A:04 X:69 Y:01 P:27 SP:69 CYC:271 SL:257 +CDF3 AE FF 07 LDX $07FF = FB A:04 X:69 Y:01 P:27 SP:69 CYC:280 SL:257 +CDF6 9A TXS A:04 X:FB Y:01 P:A5 SP:69 CYC:292 SL:257 +CDF7 60 RTS A:04 X:FB Y:01 P:A5 SP:FB CYC:298 SL:257 +C609 20 F8 CD JSR $CDF8 A:04 X:FB Y:01 P:A5 SP:FD CYC:316 SL:257 +CDF8 A9 FF LDA #$FF A:04 X:FB Y:01 P:A5 SP:FB CYC:334 SL:257 +CDFA 85 01 STA $01 = FF A:FF X:FB Y:01 P:A5 SP:FB CYC:340 SL:257 +CDFC BA TSX A:FF X:FB Y:01 P:A5 SP:FB CYC: 8 SL:258 +CDFD 8E FF 07 STX $07FF = FB A:FF X:FB Y:01 P:A5 SP:FB CYC: 14 SL:258 +CE00 EA NOP A:FF X:FB Y:01 P:A5 SP:FB CYC: 26 SL:258 +CE01 A2 80 LDX #$80 A:FF X:FB Y:01 P:A5 SP:FB CYC: 32 SL:258 +CE03 9A TXS A:FF X:80 Y:01 P:A5 SP:FB CYC: 38 SL:258 +CE04 A9 33 LDA #$33 A:FF X:80 Y:01 P:A5 SP:80 CYC: 44 SL:258 +CE06 48 PHA A:33 X:80 Y:01 P:25 SP:80 CYC: 50 SL:258 +CE07 A9 69 LDA #$69 A:33 X:80 Y:01 P:25 SP:7F CYC: 59 SL:258 +CE09 48 PHA A:69 X:80 Y:01 P:25 SP:7F CYC: 65 SL:258 +CE0A BA TSX A:69 X:80 Y:01 P:25 SP:7E CYC: 74 SL:258 +CE0B E0 7E CPX #$7E A:69 X:7E Y:01 P:25 SP:7E CYC: 80 SL:258 +CE0D D0 20 BNE $CE2F A:69 X:7E Y:01 P:27 SP:7E CYC: 86 SL:258 +CE0F 68 PLA A:69 X:7E Y:01 P:27 SP:7E CYC: 92 SL:258 +CE10 C9 69 CMP #$69 A:69 X:7E Y:01 P:25 SP:7F CYC:104 SL:258 +CE12 D0 1B BNE $CE2F A:69 X:7E Y:01 P:27 SP:7F CYC:110 SL:258 +CE14 68 PLA A:69 X:7E Y:01 P:27 SP:7F CYC:116 SL:258 +CE15 C9 33 CMP #$33 A:33 X:7E Y:01 P:25 SP:80 CYC:128 SL:258 +CE17 D0 16 BNE $CE2F A:33 X:7E Y:01 P:27 SP:80 CYC:134 SL:258 +CE19 BA TSX A:33 X:7E Y:01 P:27 SP:80 CYC:140 SL:258 +CE1A E0 80 CPX #$80 A:33 X:80 Y:01 P:A5 SP:80 CYC:146 SL:258 +CE1C D0 11 BNE $CE2F A:33 X:80 Y:01 P:27 SP:80 CYC:152 SL:258 +CE1E AD 80 01 LDA $0180 = 33 A:33 X:80 Y:01 P:27 SP:80 CYC:158 SL:258 +CE21 C9 33 CMP #$33 A:33 X:80 Y:01 P:25 SP:80 CYC:170 SL:258 +CE23 D0 0A BNE $CE2F A:33 X:80 Y:01 P:27 SP:80 CYC:176 SL:258 +CE25 AD 7F 01 LDA $017F = 69 A:33 X:80 Y:01 P:27 SP:80 CYC:182 SL:258 +CE28 C9 69 CMP #$69 A:69 X:80 Y:01 P:25 SP:80 CYC:194 SL:258 +CE2A D0 03 BNE $CE2F A:69 X:80 Y:01 P:27 SP:80 CYC:200 SL:258 +CE2C 4C 33 CE JMP $CE33 A:69 X:80 Y:01 P:27 SP:80 CYC:206 SL:258 +CE33 EA NOP A:69 X:80 Y:01 P:27 SP:80 CYC:215 SL:258 +CE34 A2 80 LDX #$80 A:69 X:80 Y:01 P:27 SP:80 CYC:221 SL:258 +CE36 9A TXS A:69 X:80 Y:01 P:A5 SP:80 CYC:227 SL:258 +CE37 20 3D CE JSR $CE3D A:69 X:80 Y:01 P:A5 SP:80 CYC:233 SL:258 +CE3D BA TSX A:69 X:80 Y:01 P:A5 SP:7E CYC:251 SL:258 +CE3E E0 7E CPX #$7E A:69 X:7E Y:01 P:25 SP:7E CYC:257 SL:258 +CE40 D0 19 BNE $CE5B A:69 X:7E Y:01 P:27 SP:7E CYC:263 SL:258 +CE42 68 PLA A:69 X:7E Y:01 P:27 SP:7E CYC:269 SL:258 +CE43 68 PLA A:39 X:7E Y:01 P:25 SP:7F CYC:281 SL:258 +CE44 BA TSX A:CE X:7E Y:01 P:A5 SP:80 CYC:293 SL:258 +CE45 E0 80 CPX #$80 A:CE X:80 Y:01 P:A5 SP:80 CYC:299 SL:258 +CE47 D0 12 BNE $CE5B A:CE X:80 Y:01 P:27 SP:80 CYC:305 SL:258 +CE49 A9 00 LDA #$00 A:CE X:80 Y:01 P:27 SP:80 CYC:311 SL:258 +CE4B 20 4E CE JSR $CE4E A:00 X:80 Y:01 P:27 SP:80 CYC:317 SL:258 +CE4E 68 PLA A:00 X:80 Y:01 P:27 SP:7E CYC:335 SL:258 +CE4F C9 4D CMP #$4D A:4D X:80 Y:01 P:25 SP:7F CYC: 6 SL:259 +CE51 D0 08 BNE $CE5B A:4D X:80 Y:01 P:27 SP:7F CYC: 12 SL:259 +CE53 68 PLA A:4D X:80 Y:01 P:27 SP:7F CYC: 18 SL:259 +CE54 C9 CE CMP #$CE A:CE X:80 Y:01 P:A5 SP:80 CYC: 30 SL:259 +CE56 D0 03 BNE $CE5B A:CE X:80 Y:01 P:27 SP:80 CYC: 36 SL:259 +CE58 4C 5F CE JMP $CE5F A:CE X:80 Y:01 P:27 SP:80 CYC: 42 SL:259 +CE5F EA NOP A:CE X:80 Y:01 P:27 SP:80 CYC: 51 SL:259 +CE60 A9 CE LDA #$CE A:CE X:80 Y:01 P:27 SP:80 CYC: 57 SL:259 +CE62 48 PHA A:CE X:80 Y:01 P:A5 SP:80 CYC: 63 SL:259 +CE63 A9 66 LDA #$66 A:CE X:80 Y:01 P:A5 SP:7F CYC: 72 SL:259 +CE65 48 PHA A:66 X:80 Y:01 P:25 SP:7F CYC: 78 SL:259 +CE66 60 RTS A:66 X:80 Y:01 P:25 SP:7E CYC: 87 SL:259 +CE67 A2 77 LDX #$77 A:66 X:80 Y:01 P:25 SP:80 CYC:105 SL:259 +CE69 A0 69 LDY #$69 A:66 X:77 Y:01 P:25 SP:80 CYC:111 SL:259 +CE6B 18 CLC A:66 X:77 Y:69 P:25 SP:80 CYC:117 SL:259 +CE6C 24 01 BIT $01 = FF A:66 X:77 Y:69 P:24 SP:80 CYC:123 SL:259 +CE6E A9 83 LDA #$83 A:66 X:77 Y:69 P:E4 SP:80 CYC:132 SL:259 +CE70 20 66 CE JSR $CE66 A:83 X:77 Y:69 P:E4 SP:80 CYC:138 SL:259 +CE66 60 RTS A:83 X:77 Y:69 P:E4 SP:7E CYC:156 SL:259 +CE73 F0 24 BEQ $CE99 A:83 X:77 Y:69 P:E4 SP:80 CYC:174 SL:259 +CE75 10 22 BPL $CE99 A:83 X:77 Y:69 P:E4 SP:80 CYC:180 SL:259 +CE77 B0 20 BCS $CE99 A:83 X:77 Y:69 P:E4 SP:80 CYC:186 SL:259 +CE79 50 1E BVC $CE99 A:83 X:77 Y:69 P:E4 SP:80 CYC:192 SL:259 +CE7B C9 83 CMP #$83 A:83 X:77 Y:69 P:E4 SP:80 CYC:198 SL:259 +CE7D D0 1A BNE $CE99 A:83 X:77 Y:69 P:67 SP:80 CYC:204 SL:259 +CE7F C0 69 CPY #$69 A:83 X:77 Y:69 P:67 SP:80 CYC:210 SL:259 +CE81 D0 16 BNE $CE99 A:83 X:77 Y:69 P:67 SP:80 CYC:216 SL:259 +CE83 E0 77 CPX #$77 A:83 X:77 Y:69 P:67 SP:80 CYC:222 SL:259 +CE85 D0 12 BNE $CE99 A:83 X:77 Y:69 P:67 SP:80 CYC:228 SL:259 +CE87 38 SEC A:83 X:77 Y:69 P:67 SP:80 CYC:234 SL:259 +CE88 B8 CLV A:83 X:77 Y:69 P:67 SP:80 CYC:240 SL:259 +CE89 A9 00 LDA #$00 A:83 X:77 Y:69 P:27 SP:80 CYC:246 SL:259 +CE8B 20 66 CE JSR $CE66 A:00 X:77 Y:69 P:27 SP:80 CYC:252 SL:259 +CE66 60 RTS A:00 X:77 Y:69 P:27 SP:7E CYC:270 SL:259 +CE8E D0 09 BNE $CE99 A:00 X:77 Y:69 P:27 SP:80 CYC:288 SL:259 +CE90 30 07 BMI $CE99 A:00 X:77 Y:69 P:27 SP:80 CYC:294 SL:259 +CE92 90 05 BCC $CE99 A:00 X:77 Y:69 P:27 SP:80 CYC:300 SL:259 +CE94 70 03 BVS $CE99 A:00 X:77 Y:69 P:27 SP:80 CYC:306 SL:259 +CE96 4C 9D CE JMP $CE9D A:00 X:77 Y:69 P:27 SP:80 CYC:312 SL:259 +CE9D EA NOP A:00 X:77 Y:69 P:27 SP:80 CYC:321 SL:259 +CE9E A9 CE LDA #$CE A:00 X:77 Y:69 P:27 SP:80 CYC:327 SL:259 +CEA0 48 PHA A:CE X:77 Y:69 P:A5 SP:80 CYC:333 SL:259 +CEA1 A9 AE LDA #$AE A:CE X:77 Y:69 P:A5 SP:7F CYC: 1 SL:260 +CEA3 48 PHA A:AE X:77 Y:69 P:A5 SP:7F CYC: 7 SL:260 +CEA4 A9 65 LDA #$65 A:AE X:77 Y:69 P:A5 SP:7E CYC: 16 SL:260 +CEA6 48 PHA A:65 X:77 Y:69 P:25 SP:7E CYC: 22 SL:260 +CEA7 A9 55 LDA #$55 A:65 X:77 Y:69 P:25 SP:7D CYC: 31 SL:260 +CEA9 A0 88 LDY #$88 A:55 X:77 Y:69 P:25 SP:7D CYC: 37 SL:260 +CEAB A2 99 LDX #$99 A:55 X:77 Y:88 P:A5 SP:7D CYC: 43 SL:260 +CEAD 40 RTI A:55 X:99 Y:88 P:A5 SP:7D CYC: 49 SL:260 +CEAE 30 35 BMI $CEE5 A:55 X:99 Y:88 P:65 SP:80 CYC: 67 SL:260 +CEB0 50 33 BVC $CEE5 A:55 X:99 Y:88 P:65 SP:80 CYC: 73 SL:260 +CEB2 F0 31 BEQ $CEE5 A:55 X:99 Y:88 P:65 SP:80 CYC: 79 SL:260 +CEB4 90 2F BCC $CEE5 A:55 X:99 Y:88 P:65 SP:80 CYC: 85 SL:260 +CEB6 C9 55 CMP #$55 A:55 X:99 Y:88 P:65 SP:80 CYC: 91 SL:260 +CEB8 D0 2B BNE $CEE5 A:55 X:99 Y:88 P:67 SP:80 CYC: 97 SL:260 +CEBA C0 88 CPY #$88 A:55 X:99 Y:88 P:67 SP:80 CYC:103 SL:260 +CEBC D0 27 BNE $CEE5 A:55 X:99 Y:88 P:67 SP:80 CYC:109 SL:260 +CEBE E0 99 CPX #$99 A:55 X:99 Y:88 P:67 SP:80 CYC:115 SL:260 +CEC0 D0 23 BNE $CEE5 A:55 X:99 Y:88 P:67 SP:80 CYC:121 SL:260 +CEC2 A9 CE LDA #$CE A:55 X:99 Y:88 P:67 SP:80 CYC:127 SL:260 +CEC4 48 PHA A:CE X:99 Y:88 P:E5 SP:80 CYC:133 SL:260 +CEC5 A9 CE LDA #$CE A:CE X:99 Y:88 P:E5 SP:7F CYC:142 SL:260 +CEC7 48 PHA A:CE X:99 Y:88 P:E5 SP:7F CYC:148 SL:260 +CEC8 A9 87 LDA #$87 A:CE X:99 Y:88 P:E5 SP:7E CYC:157 SL:260 +CECA 48 PHA A:87 X:99 Y:88 P:E5 SP:7E CYC:163 SL:260 +CECB A9 55 LDA #$55 A:87 X:99 Y:88 P:E5 SP:7D CYC:172 SL:260 +CECD 40 RTI A:55 X:99 Y:88 P:65 SP:7D CYC:178 SL:260 +CECE 10 15 BPL $CEE5 A:55 X:99 Y:88 P:A7 SP:80 CYC:196 SL:260 +CED0 70 13 BVS $CEE5 A:55 X:99 Y:88 P:A7 SP:80 CYC:202 SL:260 +CED2 D0 11 BNE $CEE5 A:55 X:99 Y:88 P:A7 SP:80 CYC:208 SL:260 +CED4 90 0F BCC $CEE5 A:55 X:99 Y:88 P:A7 SP:80 CYC:214 SL:260 +CED6 C9 55 CMP #$55 A:55 X:99 Y:88 P:A7 SP:80 CYC:220 SL:260 +CED8 D0 0B BNE $CEE5 A:55 X:99 Y:88 P:27 SP:80 CYC:226 SL:260 +CEDA C0 88 CPY #$88 A:55 X:99 Y:88 P:27 SP:80 CYC:232 SL:260 +CEDC D0 07 BNE $CEE5 A:55 X:99 Y:88 P:27 SP:80 CYC:238 SL:260 +CEDE E0 99 CPX #$99 A:55 X:99 Y:88 P:27 SP:80 CYC:244 SL:260 +CEE0 D0 03 BNE $CEE5 A:55 X:99 Y:88 P:27 SP:80 CYC:250 SL:260 +CEE2 4C E9 CE JMP $CEE9 A:55 X:99 Y:88 P:27 SP:80 CYC:256 SL:260 +CEE9 AE FF 07 LDX $07FF = FB A:55 X:99 Y:88 P:27 SP:80 CYC:265 SL:260 +CEEC 9A TXS A:55 X:FB Y:88 P:A5 SP:80 CYC:277 SL:260 +CEED 60 RTS A:55 X:FB Y:88 P:A5 SP:FB CYC:283 SL:260 +C60C 20 EE CE JSR $CEEE A:55 X:FB Y:88 P:A5 SP:FD CYC:301 SL:260 +CEEE A2 55 LDX #$55 A:55 X:FB Y:88 P:A5 SP:FB CYC:319 SL:260 +CEF0 A0 69 LDY #$69 A:55 X:55 Y:88 P:25 SP:FB CYC:325 SL:260 +CEF2 A9 FF LDA #$FF A:55 X:55 Y:69 P:25 SP:FB CYC:331 SL:260 +CEF4 85 01 STA $01 = FF A:FF X:55 Y:69 P:A5 SP:FB CYC:337 SL:260 +CEF6 EA NOP A:FF X:55 Y:69 P:A5 SP:FB CYC: 5 SL:-1 +CEF7 24 01 BIT $01 = FF A:FF X:55 Y:69 P:A5 SP:FB CYC: 11 SL:-1 +CEF9 38 SEC A:FF X:55 Y:69 P:E5 SP:FB CYC: 20 SL:-1 +CEFA A9 01 LDA #$01 A:FF X:55 Y:69 P:E5 SP:FB CYC: 26 SL:-1 +CEFC 4A LSR A A:01 X:55 Y:69 P:65 SP:FB CYC: 32 SL:-1 +CEFD 90 1D BCC $CF1C A:00 X:55 Y:69 P:67 SP:FB CYC: 38 SL:-1 +CEFF D0 1B BNE $CF1C A:00 X:55 Y:69 P:67 SP:FB CYC: 44 SL:-1 +CF01 30 19 BMI $CF1C A:00 X:55 Y:69 P:67 SP:FB CYC: 50 SL:-1 +CF03 50 17 BVC $CF1C A:00 X:55 Y:69 P:67 SP:FB CYC: 56 SL:-1 +CF05 C9 00 CMP #$00 A:00 X:55 Y:69 P:67 SP:FB CYC: 62 SL:-1 +CF07 D0 13 BNE $CF1C A:00 X:55 Y:69 P:67 SP:FB CYC: 68 SL:-1 +CF09 B8 CLV A:00 X:55 Y:69 P:67 SP:FB CYC: 74 SL:-1 +CF0A A9 AA LDA #$AA A:00 X:55 Y:69 P:27 SP:FB CYC: 80 SL:-1 +CF0C 4A LSR A A:AA X:55 Y:69 P:A5 SP:FB CYC: 86 SL:-1 +CF0D B0 0D BCS $CF1C A:55 X:55 Y:69 P:24 SP:FB CYC: 92 SL:-1 +CF0F F0 0B BEQ $CF1C A:55 X:55 Y:69 P:24 SP:FB CYC: 98 SL:-1 +CF11 30 09 BMI $CF1C A:55 X:55 Y:69 P:24 SP:FB CYC:104 SL:-1 +CF13 70 07 BVS $CF1C A:55 X:55 Y:69 P:24 SP:FB CYC:110 SL:-1 +CF15 C9 55 CMP #$55 A:55 X:55 Y:69 P:24 SP:FB CYC:116 SL:-1 +CF17 D0 03 BNE $CF1C A:55 X:55 Y:69 P:27 SP:FB CYC:122 SL:-1 +CF19 4C 20 CF JMP $CF20 A:55 X:55 Y:69 P:27 SP:FB CYC:128 SL:-1 +CF20 EA NOP A:55 X:55 Y:69 P:27 SP:FB CYC:137 SL:-1 +CF21 24 01 BIT $01 = FF A:55 X:55 Y:69 P:27 SP:FB CYC:143 SL:-1 +CF23 38 SEC A:55 X:55 Y:69 P:E5 SP:FB CYC:152 SL:-1 +CF24 A9 80 LDA #$80 A:55 X:55 Y:69 P:E5 SP:FB CYC:158 SL:-1 +CF26 0A ASL A A:80 X:55 Y:69 P:E5 SP:FB CYC:164 SL:-1 +CF27 90 1E BCC $CF47 A:00 X:55 Y:69 P:67 SP:FB CYC:170 SL:-1 +CF29 D0 1C BNE $CF47 A:00 X:55 Y:69 P:67 SP:FB CYC:176 SL:-1 +CF2B 30 1A BMI $CF47 A:00 X:55 Y:69 P:67 SP:FB CYC:182 SL:-1 +CF2D 50 18 BVC $CF47 A:00 X:55 Y:69 P:67 SP:FB CYC:188 SL:-1 +CF2F C9 00 CMP #$00 A:00 X:55 Y:69 P:67 SP:FB CYC:194 SL:-1 +CF31 D0 14 BNE $CF47 A:00 X:55 Y:69 P:67 SP:FB CYC:200 SL:-1 +CF33 B8 CLV A:00 X:55 Y:69 P:67 SP:FB CYC:206 SL:-1 +CF34 38 SEC A:00 X:55 Y:69 P:27 SP:FB CYC:212 SL:-1 +CF35 A9 55 LDA #$55 A:00 X:55 Y:69 P:27 SP:FB CYC:218 SL:-1 +CF37 0A ASL A A:55 X:55 Y:69 P:25 SP:FB CYC:224 SL:-1 +CF38 B0 0D BCS $CF47 A:AA X:55 Y:69 P:A4 SP:FB CYC:230 SL:-1 +CF3A F0 0B BEQ $CF47 A:AA X:55 Y:69 P:A4 SP:FB CYC:236 SL:-1 +CF3C 10 09 BPL $CF47 A:AA X:55 Y:69 P:A4 SP:FB CYC:242 SL:-1 +CF3E 70 07 BVS $CF47 A:AA X:55 Y:69 P:A4 SP:FB CYC:248 SL:-1 +CF40 C9 AA CMP #$AA A:AA X:55 Y:69 P:A4 SP:FB CYC:254 SL:-1 +CF42 D0 03 BNE $CF47 A:AA X:55 Y:69 P:27 SP:FB CYC:260 SL:-1 +CF44 4C 4B CF JMP $CF4B A:AA X:55 Y:69 P:27 SP:FB CYC:266 SL:-1 +CF4B EA NOP A:AA X:55 Y:69 P:27 SP:FB CYC:275 SL:-1 +CF4C 24 01 BIT $01 = FF A:AA X:55 Y:69 P:27 SP:FB CYC:281 SL:-1 +CF4E 38 SEC A:AA X:55 Y:69 P:E5 SP:FB CYC:290 SL:-1 +CF4F A9 01 LDA #$01 A:AA X:55 Y:69 P:E5 SP:FB CYC:296 SL:-1 +CF51 6A ROR A A:01 X:55 Y:69 P:65 SP:FB CYC:302 SL:-1 +CF52 90 1E BCC $CF72 A:80 X:55 Y:69 P:E5 SP:FB CYC:308 SL:-1 +CF54 F0 1C BEQ $CF72 A:80 X:55 Y:69 P:E5 SP:FB CYC:314 SL:-1 +CF56 10 1A BPL $CF72 A:80 X:55 Y:69 P:E5 SP:FB CYC:320 SL:-1 +CF58 50 18 BVC $CF72 A:80 X:55 Y:69 P:E5 SP:FB CYC:326 SL:-1 +CF5A C9 80 CMP #$80 A:80 X:55 Y:69 P:E5 SP:FB CYC:332 SL:-1 +CF5C D0 14 BNE $CF72 A:80 X:55 Y:69 P:67 SP:FB CYC:338 SL:-1 +CF5E B8 CLV A:80 X:55 Y:69 P:67 SP:FB CYC: 3 SL:0 +CF5F 18 CLC A:80 X:55 Y:69 P:27 SP:FB CYC: 9 SL:0 +CF60 A9 55 LDA #$55 A:80 X:55 Y:69 P:26 SP:FB CYC: 15 SL:0 +CF62 6A ROR A A:55 X:55 Y:69 P:24 SP:FB CYC: 21 SL:0 +CF63 90 0D BCC $CF72 A:2A X:55 Y:69 P:25 SP:FB CYC: 27 SL:0 +CF65 F0 0B BEQ $CF72 A:2A X:55 Y:69 P:25 SP:FB CYC: 33 SL:0 +CF67 30 09 BMI $CF72 A:2A X:55 Y:69 P:25 SP:FB CYC: 39 SL:0 +CF69 70 07 BVS $CF72 A:2A X:55 Y:69 P:25 SP:FB CYC: 45 SL:0 +CF6B C9 2A CMP #$2A A:2A X:55 Y:69 P:25 SP:FB CYC: 51 SL:0 +CF6D D0 03 BNE $CF72 A:2A X:55 Y:69 P:27 SP:FB CYC: 57 SL:0 +CF6F 4C 76 CF JMP $CF76 A:2A X:55 Y:69 P:27 SP:FB CYC: 63 SL:0 +CF76 EA NOP A:2A X:55 Y:69 P:27 SP:FB CYC: 72 SL:0 +CF77 24 01 BIT $01 = FF A:2A X:55 Y:69 P:27 SP:FB CYC: 78 SL:0 +CF79 38 SEC A:2A X:55 Y:69 P:E5 SP:FB CYC: 87 SL:0 +CF7A A9 80 LDA #$80 A:2A X:55 Y:69 P:E5 SP:FB CYC: 93 SL:0 +CF7C 2A ROL A A:80 X:55 Y:69 P:E5 SP:FB CYC: 99 SL:0 +CF7D 90 1E BCC $CF9D A:01 X:55 Y:69 P:65 SP:FB CYC:105 SL:0 +CF7F F0 1C BEQ $CF9D A:01 X:55 Y:69 P:65 SP:FB CYC:111 SL:0 +CF81 30 1A BMI $CF9D A:01 X:55 Y:69 P:65 SP:FB CYC:117 SL:0 +CF83 50 18 BVC $CF9D A:01 X:55 Y:69 P:65 SP:FB CYC:123 SL:0 +CF85 C9 01 CMP #$01 A:01 X:55 Y:69 P:65 SP:FB CYC:129 SL:0 +CF87 D0 14 BNE $CF9D A:01 X:55 Y:69 P:67 SP:FB CYC:135 SL:0 +CF89 B8 CLV A:01 X:55 Y:69 P:67 SP:FB CYC:141 SL:0 +CF8A 18 CLC A:01 X:55 Y:69 P:27 SP:FB CYC:147 SL:0 +CF8B A9 55 LDA #$55 A:01 X:55 Y:69 P:26 SP:FB CYC:153 SL:0 +CF8D 2A ROL A A:55 X:55 Y:69 P:24 SP:FB CYC:159 SL:0 +CF8E B0 0D BCS $CF9D A:AA X:55 Y:69 P:A4 SP:FB CYC:165 SL:0 +CF90 F0 0B BEQ $CF9D A:AA X:55 Y:69 P:A4 SP:FB CYC:171 SL:0 +CF92 10 09 BPL $CF9D A:AA X:55 Y:69 P:A4 SP:FB CYC:177 SL:0 +CF94 70 07 BVS $CF9D A:AA X:55 Y:69 P:A4 SP:FB CYC:183 SL:0 +CF96 C9 AA CMP #$AA A:AA X:55 Y:69 P:A4 SP:FB CYC:189 SL:0 +CF98 D0 03 BNE $CF9D A:AA X:55 Y:69 P:27 SP:FB CYC:195 SL:0 +CF9A 4C A1 CF JMP $CFA1 A:AA X:55 Y:69 P:27 SP:FB CYC:201 SL:0 +CFA1 60 RTS A:AA X:55 Y:69 P:27 SP:FB CYC:210 SL:0 +C60F 20 A2 CF JSR $CFA2 A:AA X:55 Y:69 P:27 SP:FD CYC:228 SL:0 +CFA2 A5 00 LDA $00 = 00 A:AA X:55 Y:69 P:27 SP:FB CYC:246 SL:0 +CFA4 8D FF 07 STA $07FF = FB A:00 X:55 Y:69 P:27 SP:FB CYC:255 SL:0 +CFA7 A9 00 LDA #$00 A:00 X:55 Y:69 P:27 SP:FB CYC:267 SL:0 +CFA9 85 80 STA $80 = 00 A:00 X:55 Y:69 P:27 SP:FB CYC:273 SL:0 +CFAB A9 02 LDA #$02 A:00 X:55 Y:69 P:27 SP:FB CYC:282 SL:0 +CFAD 85 81 STA $81 = 00 A:02 X:55 Y:69 P:25 SP:FB CYC:288 SL:0 +CFAF A9 FF LDA #$FF A:02 X:55 Y:69 P:25 SP:FB CYC:297 SL:0 +CFB1 85 01 STA $01 = FF A:FF X:55 Y:69 P:A5 SP:FB CYC:303 SL:0 +CFB3 A9 00 LDA #$00 A:FF X:55 Y:69 P:A5 SP:FB CYC:312 SL:0 +CFB5 85 82 STA $82 = 00 A:00 X:55 Y:69 P:27 SP:FB CYC:318 SL:0 +CFB7 A9 03 LDA #$03 A:00 X:55 Y:69 P:27 SP:FB CYC:327 SL:0 +CFB9 85 83 STA $83 = 00 A:03 X:55 Y:69 P:25 SP:FB CYC:333 SL:0 +CFBB 85 84 STA $84 = 00 A:03 X:55 Y:69 P:25 SP:FB CYC: 1 SL:1 +CFBD A9 00 LDA #$00 A:03 X:55 Y:69 P:25 SP:FB CYC: 10 SL:1 +CFBF 85 FF STA $FF = 00 A:00 X:55 Y:69 P:27 SP:FB CYC: 16 SL:1 +CFC1 A9 04 LDA #$04 A:00 X:55 Y:69 P:27 SP:FB CYC: 25 SL:1 +CFC3 85 00 STA $00 = 00 A:04 X:55 Y:69 P:25 SP:FB CYC: 31 SL:1 +CFC5 A9 5A LDA #$5A A:04 X:55 Y:69 P:25 SP:FB CYC: 40 SL:1 +CFC7 8D 00 02 STA $0200 = 00 A:5A X:55 Y:69 P:25 SP:FB CYC: 46 SL:1 +CFCA A9 5B LDA #$5B A:5A X:55 Y:69 P:25 SP:FB CYC: 58 SL:1 +CFCC 8D 00 03 STA $0300 = 00 A:5B X:55 Y:69 P:25 SP:FB CYC: 64 SL:1 +CFCF A9 5C LDA #$5C A:5B X:55 Y:69 P:25 SP:FB CYC: 76 SL:1 +CFD1 8D 03 03 STA $0303 = 00 A:5C X:55 Y:69 P:25 SP:FB CYC: 82 SL:1 +CFD4 A9 5D LDA #$5D A:5C X:55 Y:69 P:25 SP:FB CYC: 94 SL:1 +CFD6 8D 00 04 STA $0400 = 00 A:5D X:55 Y:69 P:25 SP:FB CYC:100 SL:1 +CFD9 A2 00 LDX #$00 A:5D X:55 Y:69 P:25 SP:FB CYC:112 SL:1 +CFDB A1 80 LDA ($80,X) @ 80 = 0200 = 5A A:5D X:00 Y:69 P:27 SP:FB CYC:118 SL:1 +CFDD C9 5A CMP #$5A A:5A X:00 Y:69 P:25 SP:FB CYC:136 SL:1 +CFDF D0 1F BNE $D000 A:5A X:00 Y:69 P:27 SP:FB CYC:142 SL:1 +CFE1 E8 INX A:5A X:00 Y:69 P:27 SP:FB CYC:148 SL:1 +CFE2 E8 INX A:5A X:01 Y:69 P:25 SP:FB CYC:154 SL:1 +CFE3 A1 80 LDA ($80,X) @ 82 = 0300 = 5B A:5A X:02 Y:69 P:25 SP:FB CYC:160 SL:1 +CFE5 C9 5B CMP #$5B A:5B X:02 Y:69 P:25 SP:FB CYC:178 SL:1 +CFE7 D0 17 BNE $D000 A:5B X:02 Y:69 P:27 SP:FB CYC:184 SL:1 +CFE9 E8 INX A:5B X:02 Y:69 P:27 SP:FB CYC:190 SL:1 +CFEA A1 80 LDA ($80,X) @ 83 = 0303 = 5C A:5B X:03 Y:69 P:25 SP:FB CYC:196 SL:1 +CFEC C9 5C CMP #$5C A:5C X:03 Y:69 P:25 SP:FB CYC:214 SL:1 +CFEE D0 10 BNE $D000 A:5C X:03 Y:69 P:27 SP:FB CYC:220 SL:1 +CFF0 A2 00 LDX #$00 A:5C X:03 Y:69 P:27 SP:FB CYC:226 SL:1 +CFF2 A1 FF LDA ($FF,X) @ FF = 0400 = 5D A:5C X:00 Y:69 P:27 SP:FB CYC:232 SL:1 +CFF4 C9 5D CMP #$5D A:5D X:00 Y:69 P:25 SP:FB CYC:250 SL:1 +CFF6 D0 08 BNE $D000 A:5D X:00 Y:69 P:27 SP:FB CYC:256 SL:1 +CFF8 A2 81 LDX #$81 A:5D X:00 Y:69 P:27 SP:FB CYC:262 SL:1 +CFFA A1 FF LDA ($FF,X) @ 80 = 0200 = 5A A:5D X:81 Y:69 P:A5 SP:FB CYC:268 SL:1 +CFFC C9 5A CMP #$5A A:5A X:81 Y:69 P:25 SP:FB CYC:286 SL:1 +CFFE F0 05 BEQ $D005 A:5A X:81 Y:69 P:27 SP:FB CYC:292 SL:1 +D005 A9 AA LDA #$AA A:5A X:81 Y:69 P:27 SP:FB CYC:301 SL:1 +D007 A2 00 LDX #$00 A:AA X:81 Y:69 P:A5 SP:FB CYC:307 SL:1 +D009 81 80 STA ($80,X) @ 80 = 0200 = 5A A:AA X:00 Y:69 P:27 SP:FB CYC:313 SL:1 +D00B E8 INX A:AA X:00 Y:69 P:27 SP:FB CYC:331 SL:1 +D00C E8 INX A:AA X:01 Y:69 P:25 SP:FB CYC:337 SL:1 +D00D A9 AB LDA #$AB A:AA X:02 Y:69 P:25 SP:FB CYC: 2 SL:2 +D00F 81 80 STA ($80,X) @ 82 = 0300 = 5B A:AB X:02 Y:69 P:A5 SP:FB CYC: 8 SL:2 +D011 E8 INX A:AB X:02 Y:69 P:A5 SP:FB CYC: 26 SL:2 +D012 A9 AC LDA #$AC A:AB X:03 Y:69 P:25 SP:FB CYC: 32 SL:2 +D014 81 80 STA ($80,X) @ 83 = 0303 = 5C A:AC X:03 Y:69 P:A5 SP:FB CYC: 38 SL:2 +D016 A2 00 LDX #$00 A:AC X:03 Y:69 P:A5 SP:FB CYC: 56 SL:2 +D018 A9 AD LDA #$AD A:AC X:00 Y:69 P:27 SP:FB CYC: 62 SL:2 +D01A 81 FF STA ($FF,X) @ FF = 0400 = 5D A:AD X:00 Y:69 P:A5 SP:FB CYC: 68 SL:2 +D01C AD 00 02 LDA $0200 = AA A:AD X:00 Y:69 P:A5 SP:FB CYC: 86 SL:2 +D01F C9 AA CMP #$AA A:AA X:00 Y:69 P:A5 SP:FB CYC: 98 SL:2 +D021 D0 15 BNE $D038 A:AA X:00 Y:69 P:27 SP:FB CYC:104 SL:2 +D023 AD 00 03 LDA $0300 = AB A:AA X:00 Y:69 P:27 SP:FB CYC:110 SL:2 +D026 C9 AB CMP #$AB A:AB X:00 Y:69 P:A5 SP:FB CYC:122 SL:2 +D028 D0 0E BNE $D038 A:AB X:00 Y:69 P:27 SP:FB CYC:128 SL:2 +D02A AD 03 03 LDA $0303 = AC A:AB X:00 Y:69 P:27 SP:FB CYC:134 SL:2 +D02D C9 AC CMP #$AC A:AC X:00 Y:69 P:A5 SP:FB CYC:146 SL:2 +D02F D0 07 BNE $D038 A:AC X:00 Y:69 P:27 SP:FB CYC:152 SL:2 +D031 AD 00 04 LDA $0400 = AD A:AC X:00 Y:69 P:27 SP:FB CYC:158 SL:2 +D034 C9 AD CMP #$AD A:AD X:00 Y:69 P:A5 SP:FB CYC:170 SL:2 +D036 F0 05 BEQ $D03D A:AD X:00 Y:69 P:27 SP:FB CYC:176 SL:2 +D03D AD FF 07 LDA $07FF = 00 A:AD X:00 Y:69 P:27 SP:FB CYC:185 SL:2 +D040 85 00 STA $00 = 04 A:00 X:00 Y:69 P:27 SP:FB CYC:197 SL:2 +D042 A9 00 LDA #$00 A:00 X:00 Y:69 P:27 SP:FB CYC:206 SL:2 +D044 8D 00 03 STA $0300 = AB A:00 X:00 Y:69 P:27 SP:FB CYC:212 SL:2 +D047 A9 AA LDA #$AA A:00 X:00 Y:69 P:27 SP:FB CYC:224 SL:2 +D049 8D 00 02 STA $0200 = AA A:AA X:00 Y:69 P:A5 SP:FB CYC:230 SL:2 +D04C A2 00 LDX #$00 A:AA X:00 Y:69 P:A5 SP:FB CYC:242 SL:2 +D04E A0 5A LDY #$5A A:AA X:00 Y:69 P:27 SP:FB CYC:248 SL:2 +D050 20 B6 F7 JSR $F7B6 A:AA X:00 Y:5A P:25 SP:FB CYC:254 SL:2 +F7B6 18 CLC A:AA X:00 Y:5A P:25 SP:F9 CYC:272 SL:2 +F7B7 A9 FF LDA #$FF A:AA X:00 Y:5A P:24 SP:F9 CYC:278 SL:2 +F7B9 85 01 STA $01 = FF A:FF X:00 Y:5A P:A4 SP:F9 CYC:284 SL:2 +F7BB 24 01 BIT $01 = FF A:FF X:00 Y:5A P:A4 SP:F9 CYC:293 SL:2 +F7BD A9 55 LDA #$55 A:FF X:00 Y:5A P:E4 SP:F9 CYC:302 SL:2 +F7BF 60 RTS A:55 X:00 Y:5A P:64 SP:F9 CYC:308 SL:2 +D053 01 80 ORA ($80,X) @ 80 = 0200 = AA A:55 X:00 Y:5A P:64 SP:FB CYC:326 SL:2 +D055 20 C0 F7 JSR $F7C0 A:FF X:00 Y:5A P:E4 SP:FB CYC: 3 SL:3 +F7C0 B0 09 BCS $F7CB A:FF X:00 Y:5A P:E4 SP:F9 CYC: 21 SL:3 +F7C2 10 07 BPL $F7CB A:FF X:00 Y:5A P:E4 SP:F9 CYC: 27 SL:3 +F7C4 C9 FF CMP #$FF A:FF X:00 Y:5A P:E4 SP:F9 CYC: 33 SL:3 +F7C6 D0 03 BNE $F7CB A:FF X:00 Y:5A P:67 SP:F9 CYC: 39 SL:3 +F7C8 50 01 BVC $F7CB A:FF X:00 Y:5A P:67 SP:F9 CYC: 45 SL:3 +F7CA 60 RTS A:FF X:00 Y:5A P:67 SP:F9 CYC: 51 SL:3 +D058 C8 INY A:FF X:00 Y:5A P:67 SP:FB CYC: 69 SL:3 +D059 20 CE F7 JSR $F7CE A:FF X:00 Y:5B P:65 SP:FB CYC: 75 SL:3 +F7CE 38 SEC A:FF X:00 Y:5B P:65 SP:F9 CYC: 93 SL:3 +F7CF B8 CLV A:FF X:00 Y:5B P:65 SP:F9 CYC: 99 SL:3 +F7D0 A9 00 LDA #$00 A:FF X:00 Y:5B P:25 SP:F9 CYC:105 SL:3 +F7D2 60 RTS A:00 X:00 Y:5B P:27 SP:F9 CYC:111 SL:3 +D05C 01 82 ORA ($82,X) @ 82 = 0300 = 00 A:00 X:00 Y:5B P:27 SP:FB CYC:129 SL:3 +D05E 20 D3 F7 JSR $F7D3 A:00 X:00 Y:5B P:27 SP:FB CYC:147 SL:3 +F7D3 D0 07 BNE $F7DC A:00 X:00 Y:5B P:27 SP:F9 CYC:165 SL:3 +F7D5 70 05 BVS $F7DC A:00 X:00 Y:5B P:27 SP:F9 CYC:171 SL:3 +F7D7 90 03 BCC $F7DC A:00 X:00 Y:5B P:27 SP:F9 CYC:177 SL:3 +F7D9 30 01 BMI $F7DC A:00 X:00 Y:5B P:27 SP:F9 CYC:183 SL:3 +F7DB 60 RTS A:00 X:00 Y:5B P:27 SP:F9 CYC:189 SL:3 +D061 C8 INY A:00 X:00 Y:5B P:27 SP:FB CYC:207 SL:3 +D062 20 DF F7 JSR $F7DF A:00 X:00 Y:5C P:25 SP:FB CYC:213 SL:3 +F7DF 18 CLC A:00 X:00 Y:5C P:25 SP:F9 CYC:231 SL:3 +F7E0 24 01 BIT $01 = FF A:00 X:00 Y:5C P:24 SP:F9 CYC:237 SL:3 +F7E2 A9 55 LDA #$55 A:00 X:00 Y:5C P:E6 SP:F9 CYC:246 SL:3 +F7E4 60 RTS A:55 X:00 Y:5C P:64 SP:F9 CYC:252 SL:3 +D065 21 80 AND ($80,X) @ 80 = 0200 = AA A:55 X:00 Y:5C P:64 SP:FB CYC:270 SL:3 +D067 20 E5 F7 JSR $F7E5 A:00 X:00 Y:5C P:66 SP:FB CYC:288 SL:3 +F7E5 D0 07 BNE $F7EE A:00 X:00 Y:5C P:66 SP:F9 CYC:306 SL:3 +F7E7 50 05 BVC $F7EE A:00 X:00 Y:5C P:66 SP:F9 CYC:312 SL:3 +F7E9 B0 03 BCS $F7EE A:00 X:00 Y:5C P:66 SP:F9 CYC:318 SL:3 +F7EB 30 01 BMI $F7EE A:00 X:00 Y:5C P:66 SP:F9 CYC:324 SL:3 +F7ED 60 RTS A:00 X:00 Y:5C P:66 SP:F9 CYC:330 SL:3 +D06A C8 INY A:00 X:00 Y:5C P:66 SP:FB CYC: 7 SL:4 +D06B A9 EF LDA #$EF A:00 X:00 Y:5D P:64 SP:FB CYC: 13 SL:4 +D06D 8D 00 03 STA $0300 = 00 A:EF X:00 Y:5D P:E4 SP:FB CYC: 19 SL:4 +D070 20 F1 F7 JSR $F7F1 A:EF X:00 Y:5D P:E4 SP:FB CYC: 31 SL:4 +F7F1 38 SEC A:EF X:00 Y:5D P:E4 SP:F9 CYC: 49 SL:4 +F7F2 B8 CLV A:EF X:00 Y:5D P:E5 SP:F9 CYC: 55 SL:4 +F7F3 A9 F8 LDA #$F8 A:EF X:00 Y:5D P:A5 SP:F9 CYC: 61 SL:4 +F7F5 60 RTS A:F8 X:00 Y:5D P:A5 SP:F9 CYC: 67 SL:4 +D073 21 82 AND ($82,X) @ 82 = 0300 = EF A:F8 X:00 Y:5D P:A5 SP:FB CYC: 85 SL:4 +D075 20 F6 F7 JSR $F7F6 A:E8 X:00 Y:5D P:A5 SP:FB CYC:103 SL:4 +F7F6 90 09 BCC $F801 A:E8 X:00 Y:5D P:A5 SP:F9 CYC:121 SL:4 +F7F8 10 07 BPL $F801 A:E8 X:00 Y:5D P:A5 SP:F9 CYC:127 SL:4 +F7FA C9 E8 CMP #$E8 A:E8 X:00 Y:5D P:A5 SP:F9 CYC:133 SL:4 +F7FC D0 03 BNE $F801 A:E8 X:00 Y:5D P:27 SP:F9 CYC:139 SL:4 +F7FE 70 01 BVS $F801 A:E8 X:00 Y:5D P:27 SP:F9 CYC:145 SL:4 +F800 60 RTS A:E8 X:00 Y:5D P:27 SP:F9 CYC:151 SL:4 +D078 C8 INY A:E8 X:00 Y:5D P:27 SP:FB CYC:169 SL:4 +D079 20 04 F8 JSR $F804 A:E8 X:00 Y:5E P:25 SP:FB CYC:175 SL:4 +F804 18 CLC A:E8 X:00 Y:5E P:25 SP:F9 CYC:193 SL:4 +F805 24 01 BIT $01 = FF A:E8 X:00 Y:5E P:24 SP:F9 CYC:199 SL:4 +F807 A9 5F LDA #$5F A:E8 X:00 Y:5E P:E4 SP:F9 CYC:208 SL:4 +F809 60 RTS A:5F X:00 Y:5E P:64 SP:F9 CYC:214 SL:4 +D07C 41 80 EOR ($80,X) @ 80 = 0200 = AA A:5F X:00 Y:5E P:64 SP:FB CYC:232 SL:4 +D07E 20 0A F8 JSR $F80A A:F5 X:00 Y:5E P:E4 SP:FB CYC:250 SL:4 +F80A B0 09 BCS $F815 A:F5 X:00 Y:5E P:E4 SP:F9 CYC:268 SL:4 +F80C 10 07 BPL $F815 A:F5 X:00 Y:5E P:E4 SP:F9 CYC:274 SL:4 +F80E C9 F5 CMP #$F5 A:F5 X:00 Y:5E P:E4 SP:F9 CYC:280 SL:4 +F810 D0 03 BNE $F815 A:F5 X:00 Y:5E P:67 SP:F9 CYC:286 SL:4 +F812 50 01 BVC $F815 A:F5 X:00 Y:5E P:67 SP:F9 CYC:292 SL:4 +F814 60 RTS A:F5 X:00 Y:5E P:67 SP:F9 CYC:298 SL:4 +D081 C8 INY A:F5 X:00 Y:5E P:67 SP:FB CYC:316 SL:4 +D082 A9 70 LDA #$70 A:F5 X:00 Y:5F P:65 SP:FB CYC:322 SL:4 +D084 8D 00 03 STA $0300 = EF A:70 X:00 Y:5F P:65 SP:FB CYC:328 SL:4 +D087 20 18 F8 JSR $F818 A:70 X:00 Y:5F P:65 SP:FB CYC:340 SL:4 +F818 38 SEC A:70 X:00 Y:5F P:65 SP:F9 CYC: 17 SL:5 +F819 B8 CLV A:70 X:00 Y:5F P:65 SP:F9 CYC: 23 SL:5 +F81A A9 70 LDA #$70 A:70 X:00 Y:5F P:25 SP:F9 CYC: 29 SL:5 +F81C 60 RTS A:70 X:00 Y:5F P:25 SP:F9 CYC: 35 SL:5 +D08A 41 82 EOR ($82,X) @ 82 = 0300 = 70 A:70 X:00 Y:5F P:25 SP:FB CYC: 53 SL:5 +D08C 20 1D F8 JSR $F81D A:00 X:00 Y:5F P:27 SP:FB CYC: 71 SL:5 +F81D D0 07 BNE $F826 A:00 X:00 Y:5F P:27 SP:F9 CYC: 89 SL:5 +F81F 70 05 BVS $F826 A:00 X:00 Y:5F P:27 SP:F9 CYC: 95 SL:5 +F821 90 03 BCC $F826 A:00 X:00 Y:5F P:27 SP:F9 CYC:101 SL:5 +F823 30 01 BMI $F826 A:00 X:00 Y:5F P:27 SP:F9 CYC:107 SL:5 +F825 60 RTS A:00 X:00 Y:5F P:27 SP:F9 CYC:113 SL:5 +D08F C8 INY A:00 X:00 Y:5F P:27 SP:FB CYC:131 SL:5 +D090 A9 69 LDA #$69 A:00 X:00 Y:60 P:25 SP:FB CYC:137 SL:5 +D092 8D 00 02 STA $0200 = AA A:69 X:00 Y:60 P:25 SP:FB CYC:143 SL:5 +D095 20 29 F8 JSR $F829 A:69 X:00 Y:60 P:25 SP:FB CYC:155 SL:5 +F829 18 CLC A:69 X:00 Y:60 P:25 SP:F9 CYC:173 SL:5 +F82A 24 01 BIT $01 = FF A:69 X:00 Y:60 P:24 SP:F9 CYC:179 SL:5 +F82C A9 00 LDA #$00 A:69 X:00 Y:60 P:E4 SP:F9 CYC:188 SL:5 +F82E 60 RTS A:00 X:00 Y:60 P:66 SP:F9 CYC:194 SL:5 +D098 61 80 ADC ($80,X) @ 80 = 0200 = 69 A:00 X:00 Y:60 P:66 SP:FB CYC:212 SL:5 +D09A 20 2F F8 JSR $F82F A:69 X:00 Y:60 P:24 SP:FB CYC:230 SL:5 +F82F 30 09 BMI $F83A A:69 X:00 Y:60 P:24 SP:F9 CYC:248 SL:5 +F831 B0 07 BCS $F83A A:69 X:00 Y:60 P:24 SP:F9 CYC:254 SL:5 +F833 C9 69 CMP #$69 A:69 X:00 Y:60 P:24 SP:F9 CYC:260 SL:5 +F835 D0 03 BNE $F83A A:69 X:00 Y:60 P:27 SP:F9 CYC:266 SL:5 +F837 70 01 BVS $F83A A:69 X:00 Y:60 P:27 SP:F9 CYC:272 SL:5 +F839 60 RTS A:69 X:00 Y:60 P:27 SP:F9 CYC:278 SL:5 +D09D C8 INY A:69 X:00 Y:60 P:27 SP:FB CYC:296 SL:5 +D09E 20 3D F8 JSR $F83D A:69 X:00 Y:61 P:25 SP:FB CYC:302 SL:5 +F83D 38 SEC A:69 X:00 Y:61 P:25 SP:F9 CYC:320 SL:5 +F83E 24 01 BIT $01 = FF A:69 X:00 Y:61 P:25 SP:F9 CYC:326 SL:5 +F840 A9 00 LDA #$00 A:69 X:00 Y:61 P:E5 SP:F9 CYC:335 SL:5 +F842 60 RTS A:00 X:00 Y:61 P:67 SP:F9 CYC: 0 SL:6 +D0A1 61 80 ADC ($80,X) @ 80 = 0200 = 69 A:00 X:00 Y:61 P:67 SP:FB CYC: 18 SL:6 +D0A3 20 43 F8 JSR $F843 A:6A X:00 Y:61 P:24 SP:FB CYC: 36 SL:6 +F843 30 09 BMI $F84E A:6A X:00 Y:61 P:24 SP:F9 CYC: 54 SL:6 +F845 B0 07 BCS $F84E A:6A X:00 Y:61 P:24 SP:F9 CYC: 60 SL:6 +F847 C9 6A CMP #$6A A:6A X:00 Y:61 P:24 SP:F9 CYC: 66 SL:6 +F849 D0 03 BNE $F84E A:6A X:00 Y:61 P:27 SP:F9 CYC: 72 SL:6 +F84B 70 01 BVS $F84E A:6A X:00 Y:61 P:27 SP:F9 CYC: 78 SL:6 +F84D 60 RTS A:6A X:00 Y:61 P:27 SP:F9 CYC: 84 SL:6 +D0A6 C8 INY A:6A X:00 Y:61 P:27 SP:FB CYC:102 SL:6 +D0A7 A9 7F LDA #$7F A:6A X:00 Y:62 P:25 SP:FB CYC:108 SL:6 +D0A9 8D 00 02 STA $0200 = 69 A:7F X:00 Y:62 P:25 SP:FB CYC:114 SL:6 +D0AC 20 51 F8 JSR $F851 A:7F X:00 Y:62 P:25 SP:FB CYC:126 SL:6 +F851 38 SEC A:7F X:00 Y:62 P:25 SP:F9 CYC:144 SL:6 +F852 B8 CLV A:7F X:00 Y:62 P:25 SP:F9 CYC:150 SL:6 +F853 A9 7F LDA #$7F A:7F X:00 Y:62 P:25 SP:F9 CYC:156 SL:6 +F855 60 RTS A:7F X:00 Y:62 P:25 SP:F9 CYC:162 SL:6 +D0AF 61 80 ADC ($80,X) @ 80 = 0200 = 7F A:7F X:00 Y:62 P:25 SP:FB CYC:180 SL:6 +D0B1 20 56 F8 JSR $F856 A:FF X:00 Y:62 P:E4 SP:FB CYC:198 SL:6 +F856 10 09 BPL $F861 A:FF X:00 Y:62 P:E4 SP:F9 CYC:216 SL:6 +F858 B0 07 BCS $F861 A:FF X:00 Y:62 P:E4 SP:F9 CYC:222 SL:6 +F85A C9 FF CMP #$FF A:FF X:00 Y:62 P:E4 SP:F9 CYC:228 SL:6 +F85C D0 03 BNE $F861 A:FF X:00 Y:62 P:67 SP:F9 CYC:234 SL:6 +F85E 50 01 BVC $F861 A:FF X:00 Y:62 P:67 SP:F9 CYC:240 SL:6 +F860 60 RTS A:FF X:00 Y:62 P:67 SP:F9 CYC:246 SL:6 +D0B4 C8 INY A:FF X:00 Y:62 P:67 SP:FB CYC:264 SL:6 +D0B5 A9 80 LDA #$80 A:FF X:00 Y:63 P:65 SP:FB CYC:270 SL:6 +D0B7 8D 00 02 STA $0200 = 7F A:80 X:00 Y:63 P:E5 SP:FB CYC:276 SL:6 +D0BA 20 64 F8 JSR $F864 A:80 X:00 Y:63 P:E5 SP:FB CYC:288 SL:6 +F864 18 CLC A:80 X:00 Y:63 P:E5 SP:F9 CYC:306 SL:6 +F865 24 01 BIT $01 = FF A:80 X:00 Y:63 P:E4 SP:F9 CYC:312 SL:6 +F867 A9 7F LDA #$7F A:80 X:00 Y:63 P:E4 SP:F9 CYC:321 SL:6 +F869 60 RTS A:7F X:00 Y:63 P:64 SP:F9 CYC:327 SL:6 +D0BD 61 80 ADC ($80,X) @ 80 = 0200 = 80 A:7F X:00 Y:63 P:64 SP:FB CYC: 4 SL:7 +D0BF 20 6A F8 JSR $F86A A:FF X:00 Y:63 P:A4 SP:FB CYC: 22 SL:7 +F86A 10 09 BPL $F875 A:FF X:00 Y:63 P:A4 SP:F9 CYC: 40 SL:7 +F86C B0 07 BCS $F875 A:FF X:00 Y:63 P:A4 SP:F9 CYC: 46 SL:7 +F86E C9 FF CMP #$FF A:FF X:00 Y:63 P:A4 SP:F9 CYC: 52 SL:7 +F870 D0 03 BNE $F875 A:FF X:00 Y:63 P:27 SP:F9 CYC: 58 SL:7 +F872 70 01 BVS $F875 A:FF X:00 Y:63 P:27 SP:F9 CYC: 64 SL:7 +F874 60 RTS A:FF X:00 Y:63 P:27 SP:F9 CYC: 70 SL:7 +D0C2 C8 INY A:FF X:00 Y:63 P:27 SP:FB CYC: 88 SL:7 +D0C3 20 78 F8 JSR $F878 A:FF X:00 Y:64 P:25 SP:FB CYC: 94 SL:7 +F878 38 SEC A:FF X:00 Y:64 P:25 SP:F9 CYC:112 SL:7 +F879 B8 CLV A:FF X:00 Y:64 P:25 SP:F9 CYC:118 SL:7 +F87A A9 7F LDA #$7F A:FF X:00 Y:64 P:25 SP:F9 CYC:124 SL:7 +F87C 60 RTS A:7F X:00 Y:64 P:25 SP:F9 CYC:130 SL:7 +D0C6 61 80 ADC ($80,X) @ 80 = 0200 = 80 A:7F X:00 Y:64 P:25 SP:FB CYC:148 SL:7 +D0C8 20 7D F8 JSR $F87D A:00 X:00 Y:64 P:27 SP:FB CYC:166 SL:7 +F87D D0 07 BNE $F886 A:00 X:00 Y:64 P:27 SP:F9 CYC:184 SL:7 +F87F 30 05 BMI $F886 A:00 X:00 Y:64 P:27 SP:F9 CYC:190 SL:7 +F881 70 03 BVS $F886 A:00 X:00 Y:64 P:27 SP:F9 CYC:196 SL:7 +F883 90 01 BCC $F886 A:00 X:00 Y:64 P:27 SP:F9 CYC:202 SL:7 +F885 60 RTS A:00 X:00 Y:64 P:27 SP:F9 CYC:208 SL:7 +D0CB C8 INY A:00 X:00 Y:64 P:27 SP:FB CYC:226 SL:7 +D0CC A9 40 LDA #$40 A:00 X:00 Y:65 P:25 SP:FB CYC:232 SL:7 +D0CE 8D 00 02 STA $0200 = 80 A:40 X:00 Y:65 P:25 SP:FB CYC:238 SL:7 +D0D1 20 89 F8 JSR $F889 A:40 X:00 Y:65 P:25 SP:FB CYC:250 SL:7 +F889 24 01 BIT $01 = FF A:40 X:00 Y:65 P:25 SP:F9 CYC:268 SL:7 +F88B A9 40 LDA #$40 A:40 X:00 Y:65 P:E5 SP:F9 CYC:277 SL:7 +F88D 60 RTS A:40 X:00 Y:65 P:65 SP:F9 CYC:283 SL:7 +D0D4 C1 80 CMP ($80,X) @ 80 = 0200 = 40 A:40 X:00 Y:65 P:65 SP:FB CYC:301 SL:7 +D0D6 20 8E F8 JSR $F88E A:40 X:00 Y:65 P:67 SP:FB CYC:319 SL:7 +F88E 30 07 BMI $F897 A:40 X:00 Y:65 P:67 SP:F9 CYC:337 SL:7 +F890 90 05 BCC $F897 A:40 X:00 Y:65 P:67 SP:F9 CYC: 2 SL:8 +F892 D0 03 BNE $F897 A:40 X:00 Y:65 P:67 SP:F9 CYC: 8 SL:8 +F894 50 01 BVC $F897 A:40 X:00 Y:65 P:67 SP:F9 CYC: 14 SL:8 +F896 60 RTS A:40 X:00 Y:65 P:67 SP:F9 CYC: 20 SL:8 +D0D9 C8 INY A:40 X:00 Y:65 P:67 SP:FB CYC: 38 SL:8 +D0DA 48 PHA A:40 X:00 Y:66 P:65 SP:FB CYC: 44 SL:8 +D0DB A9 3F LDA #$3F A:40 X:00 Y:66 P:65 SP:FA CYC: 53 SL:8 +D0DD 8D 00 02 STA $0200 = 40 A:3F X:00 Y:66 P:65 SP:FA CYC: 59 SL:8 +D0E0 68 PLA A:3F X:00 Y:66 P:65 SP:FA CYC: 71 SL:8 +D0E1 20 9A F8 JSR $F89A A:40 X:00 Y:66 P:65 SP:FB CYC: 83 SL:8 +F89A B8 CLV A:40 X:00 Y:66 P:65 SP:F9 CYC:101 SL:8 +F89B 60 RTS A:40 X:00 Y:66 P:25 SP:F9 CYC:107 SL:8 +D0E4 C1 80 CMP ($80,X) @ 80 = 0200 = 3F A:40 X:00 Y:66 P:25 SP:FB CYC:125 SL:8 +D0E6 20 9C F8 JSR $F89C A:40 X:00 Y:66 P:25 SP:FB CYC:143 SL:8 +F89C F0 07 BEQ $F8A5 A:40 X:00 Y:66 P:25 SP:F9 CYC:161 SL:8 +F89E 30 05 BMI $F8A5 A:40 X:00 Y:66 P:25 SP:F9 CYC:167 SL:8 +F8A0 90 03 BCC $F8A5 A:40 X:00 Y:66 P:25 SP:F9 CYC:173 SL:8 +F8A2 70 01 BVS $F8A5 A:40 X:00 Y:66 P:25 SP:F9 CYC:179 SL:8 +F8A4 60 RTS A:40 X:00 Y:66 P:25 SP:F9 CYC:185 SL:8 +D0E9 C8 INY A:40 X:00 Y:66 P:25 SP:FB CYC:203 SL:8 +D0EA 48 PHA A:40 X:00 Y:67 P:25 SP:FB CYC:209 SL:8 +D0EB A9 41 LDA #$41 A:40 X:00 Y:67 P:25 SP:FA CYC:218 SL:8 +D0ED 8D 00 02 STA $0200 = 3F A:41 X:00 Y:67 P:25 SP:FA CYC:224 SL:8 +D0F0 68 PLA A:41 X:00 Y:67 P:25 SP:FA CYC:236 SL:8 +D0F1 C1 80 CMP ($80,X) @ 80 = 0200 = 41 A:40 X:00 Y:67 P:25 SP:FB CYC:248 SL:8 +D0F3 20 A8 F8 JSR $F8A8 A:40 X:00 Y:67 P:A4 SP:FB CYC:266 SL:8 +F8A8 F0 05 BEQ $F8AF A:40 X:00 Y:67 P:A4 SP:F9 CYC:284 SL:8 +F8AA 10 03 BPL $F8AF A:40 X:00 Y:67 P:A4 SP:F9 CYC:290 SL:8 +F8AC 10 01 BPL $F8AF A:40 X:00 Y:67 P:A4 SP:F9 CYC:296 SL:8 +F8AE 60 RTS A:40 X:00 Y:67 P:A4 SP:F9 CYC:302 SL:8 +D0F6 C8 INY A:40 X:00 Y:67 P:A4 SP:FB CYC:320 SL:8 +D0F7 48 PHA A:40 X:00 Y:68 P:24 SP:FB CYC:326 SL:8 +D0F8 A9 00 LDA #$00 A:40 X:00 Y:68 P:24 SP:FA CYC:335 SL:8 +D0FA 8D 00 02 STA $0200 = 41 A:00 X:00 Y:68 P:26 SP:FA CYC: 0 SL:9 +D0FD 68 PLA A:00 X:00 Y:68 P:26 SP:FA CYC: 12 SL:9 +D0FE 20 B2 F8 JSR $F8B2 A:40 X:00 Y:68 P:24 SP:FB CYC: 24 SL:9 +F8B2 A9 80 LDA #$80 A:40 X:00 Y:68 P:24 SP:F9 CYC: 42 SL:9 +F8B4 60 RTS A:80 X:00 Y:68 P:A4 SP:F9 CYC: 48 SL:9 +D101 C1 80 CMP ($80,X) @ 80 = 0200 = 00 A:80 X:00 Y:68 P:A4 SP:FB CYC: 66 SL:9 +D103 20 B5 F8 JSR $F8B5 A:80 X:00 Y:68 P:A5 SP:FB CYC: 84 SL:9 +F8B5 F0 05 BEQ $F8BC A:80 X:00 Y:68 P:A5 SP:F9 CYC:102 SL:9 +F8B7 10 03 BPL $F8BC A:80 X:00 Y:68 P:A5 SP:F9 CYC:108 SL:9 +F8B9 90 01 BCC $F8BC A:80 X:00 Y:68 P:A5 SP:F9 CYC:114 SL:9 +F8BB 60 RTS A:80 X:00 Y:68 P:A5 SP:F9 CYC:120 SL:9 +D106 C8 INY A:80 X:00 Y:68 P:A5 SP:FB CYC:138 SL:9 +D107 48 PHA A:80 X:00 Y:69 P:25 SP:FB CYC:144 SL:9 +D108 A9 80 LDA #$80 A:80 X:00 Y:69 P:25 SP:FA CYC:153 SL:9 +D10A 8D 00 02 STA $0200 = 00 A:80 X:00 Y:69 P:A5 SP:FA CYC:159 SL:9 +D10D 68 PLA A:80 X:00 Y:69 P:A5 SP:FA CYC:171 SL:9 +D10E C1 80 CMP ($80,X) @ 80 = 0200 = 80 A:80 X:00 Y:69 P:A5 SP:FB CYC:183 SL:9 +D110 20 BF F8 JSR $F8BF A:80 X:00 Y:69 P:27 SP:FB CYC:201 SL:9 +F8BF D0 05 BNE $F8C6 A:80 X:00 Y:69 P:27 SP:F9 CYC:219 SL:9 +F8C1 30 03 BMI $F8C6 A:80 X:00 Y:69 P:27 SP:F9 CYC:225 SL:9 +F8C3 90 01 BCC $F8C6 A:80 X:00 Y:69 P:27 SP:F9 CYC:231 SL:9 +F8C5 60 RTS A:80 X:00 Y:69 P:27 SP:F9 CYC:237 SL:9 +D113 C8 INY A:80 X:00 Y:69 P:27 SP:FB CYC:255 SL:9 +D114 48 PHA A:80 X:00 Y:6A P:25 SP:FB CYC:261 SL:9 +D115 A9 81 LDA #$81 A:80 X:00 Y:6A P:25 SP:FA CYC:270 SL:9 +D117 8D 00 02 STA $0200 = 80 A:81 X:00 Y:6A P:A5 SP:FA CYC:276 SL:9 +D11A 68 PLA A:81 X:00 Y:6A P:A5 SP:FA CYC:288 SL:9 +D11B C1 80 CMP ($80,X) @ 80 = 0200 = 81 A:80 X:00 Y:6A P:A5 SP:FB CYC:300 SL:9 +D11D 20 C9 F8 JSR $F8C9 A:80 X:00 Y:6A P:A4 SP:FB CYC:318 SL:9 +F8C9 B0 05 BCS $F8D0 A:80 X:00 Y:6A P:A4 SP:F9 CYC:336 SL:9 +F8CB F0 03 BEQ $F8D0 A:80 X:00 Y:6A P:A4 SP:F9 CYC: 1 SL:10 +F8CD 10 01 BPL $F8D0 A:80 X:00 Y:6A P:A4 SP:F9 CYC: 7 SL:10 +F8CF 60 RTS A:80 X:00 Y:6A P:A4 SP:F9 CYC: 13 SL:10 +D120 C8 INY A:80 X:00 Y:6A P:A4 SP:FB CYC: 31 SL:10 +D121 48 PHA A:80 X:00 Y:6B P:24 SP:FB CYC: 37 SL:10 +D122 A9 7F LDA #$7F A:80 X:00 Y:6B P:24 SP:FA CYC: 46 SL:10 +D124 8D 00 02 STA $0200 = 81 A:7F X:00 Y:6B P:24 SP:FA CYC: 52 SL:10 +D127 68 PLA A:7F X:00 Y:6B P:24 SP:FA CYC: 64 SL:10 +D128 C1 80 CMP ($80,X) @ 80 = 0200 = 7F A:80 X:00 Y:6B P:A4 SP:FB CYC: 76 SL:10 +D12A 20 D3 F8 JSR $F8D3 A:80 X:00 Y:6B P:25 SP:FB CYC: 94 SL:10 +F8D3 90 05 BCC $F8DA A:80 X:00 Y:6B P:25 SP:F9 CYC:112 SL:10 +F8D5 F0 03 BEQ $F8DA A:80 X:00 Y:6B P:25 SP:F9 CYC:118 SL:10 +F8D7 30 01 BMI $F8DA A:80 X:00 Y:6B P:25 SP:F9 CYC:124 SL:10 +F8D9 60 RTS A:80 X:00 Y:6B P:25 SP:F9 CYC:130 SL:10 +D12D C8 INY A:80 X:00 Y:6B P:25 SP:FB CYC:148 SL:10 +D12E A9 40 LDA #$40 A:80 X:00 Y:6C P:25 SP:FB CYC:154 SL:10 +D130 8D 00 02 STA $0200 = 7F A:40 X:00 Y:6C P:25 SP:FB CYC:160 SL:10 +D133 20 31 F9 JSR $F931 A:40 X:00 Y:6C P:25 SP:FB CYC:172 SL:10 +F931 24 01 BIT $01 = FF A:40 X:00 Y:6C P:25 SP:F9 CYC:190 SL:10 +F933 A9 40 LDA #$40 A:40 X:00 Y:6C P:E5 SP:F9 CYC:199 SL:10 +F935 38 SEC A:40 X:00 Y:6C P:65 SP:F9 CYC:205 SL:10 +F936 60 RTS A:40 X:00 Y:6C P:65 SP:F9 CYC:211 SL:10 +D136 E1 80 SBC ($80,X) @ 80 = 0200 = 40 A:40 X:00 Y:6C P:65 SP:FB CYC:229 SL:10 +D138 20 37 F9 JSR $F937 A:00 X:00 Y:6C P:27 SP:FB CYC:247 SL:10 +F937 30 0B BMI $F944 A:00 X:00 Y:6C P:27 SP:F9 CYC:265 SL:10 +F939 90 09 BCC $F944 A:00 X:00 Y:6C P:27 SP:F9 CYC:271 SL:10 +F93B D0 07 BNE $F944 A:00 X:00 Y:6C P:27 SP:F9 CYC:277 SL:10 +F93D 70 05 BVS $F944 A:00 X:00 Y:6C P:27 SP:F9 CYC:283 SL:10 +F93F C9 00 CMP #$00 A:00 X:00 Y:6C P:27 SP:F9 CYC:289 SL:10 +F941 D0 01 BNE $F944 A:00 X:00 Y:6C P:27 SP:F9 CYC:295 SL:10 +F943 60 RTS A:00 X:00 Y:6C P:27 SP:F9 CYC:301 SL:10 +D13B C8 INY A:00 X:00 Y:6C P:27 SP:FB CYC:319 SL:10 +D13C A9 3F LDA #$3F A:00 X:00 Y:6D P:25 SP:FB CYC:325 SL:10 +D13E 8D 00 02 STA $0200 = 40 A:3F X:00 Y:6D P:25 SP:FB CYC:331 SL:10 +D141 20 47 F9 JSR $F947 A:3F X:00 Y:6D P:25 SP:FB CYC: 2 SL:11 +F947 B8 CLV A:3F X:00 Y:6D P:25 SP:F9 CYC: 20 SL:11 +F948 38 SEC A:3F X:00 Y:6D P:25 SP:F9 CYC: 26 SL:11 +F949 A9 40 LDA #$40 A:3F X:00 Y:6D P:25 SP:F9 CYC: 32 SL:11 +F94B 60 RTS A:40 X:00 Y:6D P:25 SP:F9 CYC: 38 SL:11 +D144 E1 80 SBC ($80,X) @ 80 = 0200 = 3F A:40 X:00 Y:6D P:25 SP:FB CYC: 56 SL:11 +D146 20 4C F9 JSR $F94C A:01 X:00 Y:6D P:25 SP:FB CYC: 74 SL:11 +F94C F0 0B BEQ $F959 A:01 X:00 Y:6D P:25 SP:F9 CYC: 92 SL:11 +F94E 30 09 BMI $F959 A:01 X:00 Y:6D P:25 SP:F9 CYC: 98 SL:11 +F950 90 07 BCC $F959 A:01 X:00 Y:6D P:25 SP:F9 CYC:104 SL:11 +F952 70 05 BVS $F959 A:01 X:00 Y:6D P:25 SP:F9 CYC:110 SL:11 +F954 C9 01 CMP #$01 A:01 X:00 Y:6D P:25 SP:F9 CYC:116 SL:11 +F956 D0 01 BNE $F959 A:01 X:00 Y:6D P:27 SP:F9 CYC:122 SL:11 +F958 60 RTS A:01 X:00 Y:6D P:27 SP:F9 CYC:128 SL:11 +D149 C8 INY A:01 X:00 Y:6D P:27 SP:FB CYC:146 SL:11 +D14A A9 41 LDA #$41 A:01 X:00 Y:6E P:25 SP:FB CYC:152 SL:11 +D14C 8D 00 02 STA $0200 = 3F A:41 X:00 Y:6E P:25 SP:FB CYC:158 SL:11 +D14F 20 5C F9 JSR $F95C A:41 X:00 Y:6E P:25 SP:FB CYC:170 SL:11 +F95C A9 40 LDA #$40 A:41 X:00 Y:6E P:25 SP:F9 CYC:188 SL:11 +F95E 38 SEC A:40 X:00 Y:6E P:25 SP:F9 CYC:194 SL:11 +F95F 24 01 BIT $01 = FF A:40 X:00 Y:6E P:25 SP:F9 CYC:200 SL:11 +F961 60 RTS A:40 X:00 Y:6E P:E5 SP:F9 CYC:209 SL:11 +D152 E1 80 SBC ($80,X) @ 80 = 0200 = 41 A:40 X:00 Y:6E P:E5 SP:FB CYC:227 SL:11 +D154 20 62 F9 JSR $F962 A:FF X:00 Y:6E P:A4 SP:FB CYC:245 SL:11 +F962 B0 0B BCS $F96F A:FF X:00 Y:6E P:A4 SP:F9 CYC:263 SL:11 +F964 F0 09 BEQ $F96F A:FF X:00 Y:6E P:A4 SP:F9 CYC:269 SL:11 +F966 10 07 BPL $F96F A:FF X:00 Y:6E P:A4 SP:F9 CYC:275 SL:11 +F968 70 05 BVS $F96F A:FF X:00 Y:6E P:A4 SP:F9 CYC:281 SL:11 +F96A C9 FF CMP #$FF A:FF X:00 Y:6E P:A4 SP:F9 CYC:287 SL:11 +F96C D0 01 BNE $F96F A:FF X:00 Y:6E P:27 SP:F9 CYC:293 SL:11 +F96E 60 RTS A:FF X:00 Y:6E P:27 SP:F9 CYC:299 SL:11 +D157 C8 INY A:FF X:00 Y:6E P:27 SP:FB CYC:317 SL:11 +D158 A9 00 LDA #$00 A:FF X:00 Y:6F P:25 SP:FB CYC:323 SL:11 +D15A 8D 00 02 STA $0200 = 41 A:00 X:00 Y:6F P:27 SP:FB CYC:329 SL:11 +D15D 20 72 F9 JSR $F972 A:00 X:00 Y:6F P:27 SP:FB CYC: 0 SL:12 +F972 18 CLC A:00 X:00 Y:6F P:27 SP:F9 CYC: 18 SL:12 +F973 A9 80 LDA #$80 A:00 X:00 Y:6F P:26 SP:F9 CYC: 24 SL:12 +F975 60 RTS A:80 X:00 Y:6F P:A4 SP:F9 CYC: 30 SL:12 +D160 E1 80 SBC ($80,X) @ 80 = 0200 = 00 A:80 X:00 Y:6F P:A4 SP:FB CYC: 48 SL:12 +D162 20 76 F9 JSR $F976 A:7F X:00 Y:6F P:65 SP:FB CYC: 66 SL:12 +F976 90 05 BCC $F97D A:7F X:00 Y:6F P:65 SP:F9 CYC: 84 SL:12 +F978 C9 7F CMP #$7F A:7F X:00 Y:6F P:65 SP:F9 CYC: 90 SL:12 +F97A D0 01 BNE $F97D A:7F X:00 Y:6F P:67 SP:F9 CYC: 96 SL:12 +F97C 60 RTS A:7F X:00 Y:6F P:67 SP:F9 CYC:102 SL:12 +D165 C8 INY A:7F X:00 Y:6F P:67 SP:FB CYC:120 SL:12 +D166 A9 7F LDA #$7F A:7F X:00 Y:70 P:65 SP:FB CYC:126 SL:12 +D168 8D 00 02 STA $0200 = 00 A:7F X:00 Y:70 P:65 SP:FB CYC:132 SL:12 +D16B 20 80 F9 JSR $F980 A:7F X:00 Y:70 P:65 SP:FB CYC:144 SL:12 +F980 38 SEC A:7F X:00 Y:70 P:65 SP:F9 CYC:162 SL:12 +F981 A9 81 LDA #$81 A:7F X:00 Y:70 P:65 SP:F9 CYC:168 SL:12 +F983 60 RTS A:81 X:00 Y:70 P:E5 SP:F9 CYC:174 SL:12 +D16E E1 80 SBC ($80,X) @ 80 = 0200 = 7F A:81 X:00 Y:70 P:E5 SP:FB CYC:192 SL:12 +D170 20 84 F9 JSR $F984 A:02 X:00 Y:70 P:65 SP:FB CYC:210 SL:12 +F984 50 07 BVC $F98D A:02 X:00 Y:70 P:65 SP:F9 CYC:228 SL:12 +F986 90 05 BCC $F98D A:02 X:00 Y:70 P:65 SP:F9 CYC:234 SL:12 +F988 C9 02 CMP #$02 A:02 X:00 Y:70 P:65 SP:F9 CYC:240 SL:12 +F98A D0 01 BNE $F98D A:02 X:00 Y:70 P:67 SP:F9 CYC:246 SL:12 +F98C 60 RTS A:02 X:00 Y:70 P:67 SP:F9 CYC:252 SL:12 +D173 60 RTS A:02 X:00 Y:70 P:67 SP:FB CYC:270 SL:12 +C612 20 74 D1 JSR $D174 A:02 X:00 Y:70 P:67 SP:FD CYC:288 SL:12 +D174 A9 55 LDA #$55 A:02 X:00 Y:70 P:67 SP:FB CYC:306 SL:12 +D176 85 78 STA $78 = 00 A:55 X:00 Y:70 P:65 SP:FB CYC:312 SL:12 +D178 A9 FF LDA #$FF A:55 X:00 Y:70 P:65 SP:FB CYC:321 SL:12 +D17A 85 01 STA $01 = FF A:FF X:00 Y:70 P:E5 SP:FB CYC:327 SL:12 +D17C 24 01 BIT $01 = FF A:FF X:00 Y:70 P:E5 SP:FB CYC:336 SL:12 +D17E A0 11 LDY #$11 A:FF X:00 Y:70 P:E5 SP:FB CYC: 4 SL:13 +D180 A2 23 LDX #$23 A:FF X:00 Y:11 P:65 SP:FB CYC: 10 SL:13 +D182 A9 00 LDA #$00 A:FF X:23 Y:11 P:65 SP:FB CYC: 16 SL:13 +D184 A5 78 LDA $78 = 55 A:00 X:23 Y:11 P:67 SP:FB CYC: 22 SL:13 +D186 F0 10 BEQ $D198 A:55 X:23 Y:11 P:65 SP:FB CYC: 31 SL:13 +D188 30 0E BMI $D198 A:55 X:23 Y:11 P:65 SP:FB CYC: 37 SL:13 +D18A C9 55 CMP #$55 A:55 X:23 Y:11 P:65 SP:FB CYC: 43 SL:13 +D18C D0 0A BNE $D198 A:55 X:23 Y:11 P:67 SP:FB CYC: 49 SL:13 +D18E C0 11 CPY #$11 A:55 X:23 Y:11 P:67 SP:FB CYC: 55 SL:13 +D190 D0 06 BNE $D198 A:55 X:23 Y:11 P:67 SP:FB CYC: 61 SL:13 +D192 E0 23 CPX #$23 A:55 X:23 Y:11 P:67 SP:FB CYC: 67 SL:13 +D194 50 02 BVC $D198 A:55 X:23 Y:11 P:67 SP:FB CYC: 73 SL:13 +D196 F0 04 BEQ $D19C A:55 X:23 Y:11 P:67 SP:FB CYC: 79 SL:13 +D19C A9 46 LDA #$46 A:55 X:23 Y:11 P:67 SP:FB CYC: 88 SL:13 +D19E 24 01 BIT $01 = FF A:46 X:23 Y:11 P:65 SP:FB CYC: 94 SL:13 +D1A0 85 78 STA $78 = 55 A:46 X:23 Y:11 P:E5 SP:FB CYC:103 SL:13 +D1A2 F0 0A BEQ $D1AE A:46 X:23 Y:11 P:E5 SP:FB CYC:112 SL:13 +D1A4 10 08 BPL $D1AE A:46 X:23 Y:11 P:E5 SP:FB CYC:118 SL:13 +D1A6 50 06 BVC $D1AE A:46 X:23 Y:11 P:E5 SP:FB CYC:124 SL:13 +D1A8 A5 78 LDA $78 = 46 A:46 X:23 Y:11 P:E5 SP:FB CYC:130 SL:13 +D1AA C9 46 CMP #$46 A:46 X:23 Y:11 P:65 SP:FB CYC:139 SL:13 +D1AC F0 04 BEQ $D1B2 A:46 X:23 Y:11 P:67 SP:FB CYC:145 SL:13 +D1B2 A9 55 LDA #$55 A:46 X:23 Y:11 P:67 SP:FB CYC:154 SL:13 +D1B4 85 78 STA $78 = 46 A:55 X:23 Y:11 P:65 SP:FB CYC:160 SL:13 +D1B6 24 01 BIT $01 = FF A:55 X:23 Y:11 P:65 SP:FB CYC:169 SL:13 +D1B8 A9 11 LDA #$11 A:55 X:23 Y:11 P:E5 SP:FB CYC:178 SL:13 +D1BA A2 23 LDX #$23 A:11 X:23 Y:11 P:65 SP:FB CYC:184 SL:13 +D1BC A0 00 LDY #$00 A:11 X:23 Y:11 P:65 SP:FB CYC:190 SL:13 +D1BE A4 78 LDY $78 = 55 A:11 X:23 Y:00 P:67 SP:FB CYC:196 SL:13 +D1C0 F0 10 BEQ $D1D2 A:11 X:23 Y:55 P:65 SP:FB CYC:205 SL:13 +D1C2 30 0E BMI $D1D2 A:11 X:23 Y:55 P:65 SP:FB CYC:211 SL:13 +D1C4 C0 55 CPY #$55 A:11 X:23 Y:55 P:65 SP:FB CYC:217 SL:13 +D1C6 D0 0A BNE $D1D2 A:11 X:23 Y:55 P:67 SP:FB CYC:223 SL:13 +D1C8 C9 11 CMP #$11 A:11 X:23 Y:55 P:67 SP:FB CYC:229 SL:13 +D1CA D0 06 BNE $D1D2 A:11 X:23 Y:55 P:67 SP:FB CYC:235 SL:13 +D1CC E0 23 CPX #$23 A:11 X:23 Y:55 P:67 SP:FB CYC:241 SL:13 +D1CE 50 02 BVC $D1D2 A:11 X:23 Y:55 P:67 SP:FB CYC:247 SL:13 +D1D0 F0 04 BEQ $D1D6 A:11 X:23 Y:55 P:67 SP:FB CYC:253 SL:13 +D1D6 A0 46 LDY #$46 A:11 X:23 Y:55 P:67 SP:FB CYC:262 SL:13 +D1D8 24 01 BIT $01 = FF A:11 X:23 Y:46 P:65 SP:FB CYC:268 SL:13 +D1DA 84 78 STY $78 = 55 A:11 X:23 Y:46 P:E5 SP:FB CYC:277 SL:13 +D1DC F0 0A BEQ $D1E8 A:11 X:23 Y:46 P:E5 SP:FB CYC:286 SL:13 +D1DE 10 08 BPL $D1E8 A:11 X:23 Y:46 P:E5 SP:FB CYC:292 SL:13 +D1E0 50 06 BVC $D1E8 A:11 X:23 Y:46 P:E5 SP:FB CYC:298 SL:13 +D1E2 A4 78 LDY $78 = 46 A:11 X:23 Y:46 P:E5 SP:FB CYC:304 SL:13 +D1E4 C0 46 CPY #$46 A:11 X:23 Y:46 P:65 SP:FB CYC:313 SL:13 +D1E6 F0 04 BEQ $D1EC A:11 X:23 Y:46 P:67 SP:FB CYC:319 SL:13 +D1EC 24 01 BIT $01 = FF A:11 X:23 Y:46 P:67 SP:FB CYC:328 SL:13 +D1EE A9 55 LDA #$55 A:11 X:23 Y:46 P:E5 SP:FB CYC:337 SL:13 +D1F0 85 78 STA $78 = 46 A:55 X:23 Y:46 P:65 SP:FB CYC: 2 SL:14 +D1F2 A0 11 LDY #$11 A:55 X:23 Y:46 P:65 SP:FB CYC: 11 SL:14 +D1F4 A9 23 LDA #$23 A:55 X:23 Y:11 P:65 SP:FB CYC: 17 SL:14 +D1F6 A2 00 LDX #$00 A:23 X:23 Y:11 P:65 SP:FB CYC: 23 SL:14 +D1F8 A6 78 LDX $78 = 55 A:23 X:00 Y:11 P:67 SP:FB CYC: 29 SL:14 +D1FA F0 10 BEQ $D20C A:23 X:55 Y:11 P:65 SP:FB CYC: 38 SL:14 +D1FC 30 0E BMI $D20C A:23 X:55 Y:11 P:65 SP:FB CYC: 44 SL:14 +D1FE E0 55 CPX #$55 A:23 X:55 Y:11 P:65 SP:FB CYC: 50 SL:14 +D200 D0 0A BNE $D20C A:23 X:55 Y:11 P:67 SP:FB CYC: 56 SL:14 +D202 C0 11 CPY #$11 A:23 X:55 Y:11 P:67 SP:FB CYC: 62 SL:14 +D204 D0 06 BNE $D20C A:23 X:55 Y:11 P:67 SP:FB CYC: 68 SL:14 +D206 C9 23 CMP #$23 A:23 X:55 Y:11 P:67 SP:FB CYC: 74 SL:14 +D208 50 02 BVC $D20C A:23 X:55 Y:11 P:67 SP:FB CYC: 80 SL:14 +D20A F0 04 BEQ $D210 A:23 X:55 Y:11 P:67 SP:FB CYC: 86 SL:14 +D210 A2 46 LDX #$46 A:23 X:55 Y:11 P:67 SP:FB CYC: 95 SL:14 +D212 24 01 BIT $01 = FF A:23 X:46 Y:11 P:65 SP:FB CYC:101 SL:14 +D214 86 78 STX $78 = 55 A:23 X:46 Y:11 P:E5 SP:FB CYC:110 SL:14 +D216 F0 0A BEQ $D222 A:23 X:46 Y:11 P:E5 SP:FB CYC:119 SL:14 +D218 10 08 BPL $D222 A:23 X:46 Y:11 P:E5 SP:FB CYC:125 SL:14 +D21A 50 06 BVC $D222 A:23 X:46 Y:11 P:E5 SP:FB CYC:131 SL:14 +D21C A6 78 LDX $78 = 46 A:23 X:46 Y:11 P:E5 SP:FB CYC:137 SL:14 +D21E E0 46 CPX #$46 A:23 X:46 Y:11 P:65 SP:FB CYC:146 SL:14 +D220 F0 04 BEQ $D226 A:23 X:46 Y:11 P:67 SP:FB CYC:152 SL:14 +D226 A9 C0 LDA #$C0 A:23 X:46 Y:11 P:67 SP:FB CYC:161 SL:14 +D228 85 78 STA $78 = 46 A:C0 X:46 Y:11 P:E5 SP:FB CYC:167 SL:14 +D22A A2 33 LDX #$33 A:C0 X:46 Y:11 P:E5 SP:FB CYC:176 SL:14 +D22C A0 88 LDY #$88 A:C0 X:33 Y:11 P:65 SP:FB CYC:182 SL:14 +D22E A9 05 LDA #$05 A:C0 X:33 Y:88 P:E5 SP:FB CYC:188 SL:14 +D230 24 78 BIT $78 = C0 A:05 X:33 Y:88 P:65 SP:FB CYC:194 SL:14 +D232 10 10 BPL $D244 A:05 X:33 Y:88 P:E7 SP:FB CYC:203 SL:14 +D234 50 0E BVC $D244 A:05 X:33 Y:88 P:E7 SP:FB CYC:209 SL:14 +D236 D0 0C BNE $D244 A:05 X:33 Y:88 P:E7 SP:FB CYC:215 SL:14 +D238 C9 05 CMP #$05 A:05 X:33 Y:88 P:E7 SP:FB CYC:221 SL:14 +D23A D0 08 BNE $D244 A:05 X:33 Y:88 P:67 SP:FB CYC:227 SL:14 +D23C E0 33 CPX #$33 A:05 X:33 Y:88 P:67 SP:FB CYC:233 SL:14 +D23E D0 04 BNE $D244 A:05 X:33 Y:88 P:67 SP:FB CYC:239 SL:14 +D240 C0 88 CPY #$88 A:05 X:33 Y:88 P:67 SP:FB CYC:245 SL:14 +D242 F0 04 BEQ $D248 A:05 X:33 Y:88 P:67 SP:FB CYC:251 SL:14 +D248 A9 03 LDA #$03 A:05 X:33 Y:88 P:67 SP:FB CYC:260 SL:14 +D24A 85 78 STA $78 = C0 A:03 X:33 Y:88 P:65 SP:FB CYC:266 SL:14 +D24C A9 01 LDA #$01 A:03 X:33 Y:88 P:65 SP:FB CYC:275 SL:14 +D24E 24 78 BIT $78 = 03 A:01 X:33 Y:88 P:65 SP:FB CYC:281 SL:14 +D250 30 08 BMI $D25A A:01 X:33 Y:88 P:25 SP:FB CYC:290 SL:14 +D252 70 06 BVS $D25A A:01 X:33 Y:88 P:25 SP:FB CYC:296 SL:14 +D254 F0 04 BEQ $D25A A:01 X:33 Y:88 P:25 SP:FB CYC:302 SL:14 +D256 C9 01 CMP #$01 A:01 X:33 Y:88 P:25 SP:FB CYC:308 SL:14 +D258 F0 04 BEQ $D25E A:01 X:33 Y:88 P:27 SP:FB CYC:314 SL:14 +D25E A0 7E LDY #$7E A:01 X:33 Y:88 P:27 SP:FB CYC:323 SL:14 +D260 A9 AA LDA #$AA A:01 X:33 Y:7E P:25 SP:FB CYC:329 SL:14 +D262 85 78 STA $78 = 03 A:AA X:33 Y:7E P:A5 SP:FB CYC:335 SL:14 +D264 20 B6 F7 JSR $F7B6 A:AA X:33 Y:7E P:A5 SP:FB CYC: 3 SL:15 +F7B6 18 CLC A:AA X:33 Y:7E P:A5 SP:F9 CYC: 21 SL:15 +F7B7 A9 FF LDA #$FF A:AA X:33 Y:7E P:A4 SP:F9 CYC: 27 SL:15 +F7B9 85 01 STA $01 = FF A:FF X:33 Y:7E P:A4 SP:F9 CYC: 33 SL:15 +F7BB 24 01 BIT $01 = FF A:FF X:33 Y:7E P:A4 SP:F9 CYC: 42 SL:15 +F7BD A9 55 LDA #$55 A:FF X:33 Y:7E P:E4 SP:F9 CYC: 51 SL:15 +F7BF 60 RTS A:55 X:33 Y:7E P:64 SP:F9 CYC: 57 SL:15 +D267 05 78 ORA $78 = AA A:55 X:33 Y:7E P:64 SP:FB CYC: 75 SL:15 +D269 20 C0 F7 JSR $F7C0 A:FF X:33 Y:7E P:E4 SP:FB CYC: 84 SL:15 +F7C0 B0 09 BCS $F7CB A:FF X:33 Y:7E P:E4 SP:F9 CYC:102 SL:15 +F7C2 10 07 BPL $F7CB A:FF X:33 Y:7E P:E4 SP:F9 CYC:108 SL:15 +F7C4 C9 FF CMP #$FF A:FF X:33 Y:7E P:E4 SP:F9 CYC:114 SL:15 +F7C6 D0 03 BNE $F7CB A:FF X:33 Y:7E P:67 SP:F9 CYC:120 SL:15 +F7C8 50 01 BVC $F7CB A:FF X:33 Y:7E P:67 SP:F9 CYC:126 SL:15 +F7CA 60 RTS A:FF X:33 Y:7E P:67 SP:F9 CYC:132 SL:15 +D26C C8 INY A:FF X:33 Y:7E P:67 SP:FB CYC:150 SL:15 +D26D A9 00 LDA #$00 A:FF X:33 Y:7F P:65 SP:FB CYC:156 SL:15 +D26F 85 78 STA $78 = AA A:00 X:33 Y:7F P:67 SP:FB CYC:162 SL:15 +D271 20 CE F7 JSR $F7CE A:00 X:33 Y:7F P:67 SP:FB CYC:171 SL:15 +F7CE 38 SEC A:00 X:33 Y:7F P:67 SP:F9 CYC:189 SL:15 +F7CF B8 CLV A:00 X:33 Y:7F P:67 SP:F9 CYC:195 SL:15 +F7D0 A9 00 LDA #$00 A:00 X:33 Y:7F P:27 SP:F9 CYC:201 SL:15 +F7D2 60 RTS A:00 X:33 Y:7F P:27 SP:F9 CYC:207 SL:15 +D274 05 78 ORA $78 = 00 A:00 X:33 Y:7F P:27 SP:FB CYC:225 SL:15 +D276 20 D3 F7 JSR $F7D3 A:00 X:33 Y:7F P:27 SP:FB CYC:234 SL:15 +F7D3 D0 07 BNE $F7DC A:00 X:33 Y:7F P:27 SP:F9 CYC:252 SL:15 +F7D5 70 05 BVS $F7DC A:00 X:33 Y:7F P:27 SP:F9 CYC:258 SL:15 +F7D7 90 03 BCC $F7DC A:00 X:33 Y:7F P:27 SP:F9 CYC:264 SL:15 +F7D9 30 01 BMI $F7DC A:00 X:33 Y:7F P:27 SP:F9 CYC:270 SL:15 +F7DB 60 RTS A:00 X:33 Y:7F P:27 SP:F9 CYC:276 SL:15 +D279 C8 INY A:00 X:33 Y:7F P:27 SP:FB CYC:294 SL:15 +D27A A9 AA LDA #$AA A:00 X:33 Y:80 P:A5 SP:FB CYC:300 SL:15 +D27C 85 78 STA $78 = 00 A:AA X:33 Y:80 P:A5 SP:FB CYC:306 SL:15 +D27E 20 DF F7 JSR $F7DF A:AA X:33 Y:80 P:A5 SP:FB CYC:315 SL:15 +F7DF 18 CLC A:AA X:33 Y:80 P:A5 SP:F9 CYC:333 SL:15 +F7E0 24 01 BIT $01 = FF A:AA X:33 Y:80 P:A4 SP:F9 CYC:339 SL:15 +F7E2 A9 55 LDA #$55 A:AA X:33 Y:80 P:E4 SP:F9 CYC: 7 SL:16 +F7E4 60 RTS A:55 X:33 Y:80 P:64 SP:F9 CYC: 13 SL:16 +D281 25 78 AND $78 = AA A:55 X:33 Y:80 P:64 SP:FB CYC: 31 SL:16 +D283 20 E5 F7 JSR $F7E5 A:00 X:33 Y:80 P:66 SP:FB CYC: 40 SL:16 +F7E5 D0 07 BNE $F7EE A:00 X:33 Y:80 P:66 SP:F9 CYC: 58 SL:16 +F7E7 50 05 BVC $F7EE A:00 X:33 Y:80 P:66 SP:F9 CYC: 64 SL:16 +F7E9 B0 03 BCS $F7EE A:00 X:33 Y:80 P:66 SP:F9 CYC: 70 SL:16 +F7EB 30 01 BMI $F7EE A:00 X:33 Y:80 P:66 SP:F9 CYC: 76 SL:16 +F7ED 60 RTS A:00 X:33 Y:80 P:66 SP:F9 CYC: 82 SL:16 +D286 C8 INY A:00 X:33 Y:80 P:66 SP:FB CYC:100 SL:16 +D287 A9 EF LDA #$EF A:00 X:33 Y:81 P:E4 SP:FB CYC:106 SL:16 +D289 85 78 STA $78 = AA A:EF X:33 Y:81 P:E4 SP:FB CYC:112 SL:16 +D28B 20 F1 F7 JSR $F7F1 A:EF X:33 Y:81 P:E4 SP:FB CYC:121 SL:16 +F7F1 38 SEC A:EF X:33 Y:81 P:E4 SP:F9 CYC:139 SL:16 +F7F2 B8 CLV A:EF X:33 Y:81 P:E5 SP:F9 CYC:145 SL:16 +F7F3 A9 F8 LDA #$F8 A:EF X:33 Y:81 P:A5 SP:F9 CYC:151 SL:16 +F7F5 60 RTS A:F8 X:33 Y:81 P:A5 SP:F9 CYC:157 SL:16 +D28E 25 78 AND $78 = EF A:F8 X:33 Y:81 P:A5 SP:FB CYC:175 SL:16 +D290 20 F6 F7 JSR $F7F6 A:E8 X:33 Y:81 P:A5 SP:FB CYC:184 SL:16 +F7F6 90 09 BCC $F801 A:E8 X:33 Y:81 P:A5 SP:F9 CYC:202 SL:16 +F7F8 10 07 BPL $F801 A:E8 X:33 Y:81 P:A5 SP:F9 CYC:208 SL:16 +F7FA C9 E8 CMP #$E8 A:E8 X:33 Y:81 P:A5 SP:F9 CYC:214 SL:16 +F7FC D0 03 BNE $F801 A:E8 X:33 Y:81 P:27 SP:F9 CYC:220 SL:16 +F7FE 70 01 BVS $F801 A:E8 X:33 Y:81 P:27 SP:F9 CYC:226 SL:16 +F800 60 RTS A:E8 X:33 Y:81 P:27 SP:F9 CYC:232 SL:16 +D293 C8 INY A:E8 X:33 Y:81 P:27 SP:FB CYC:250 SL:16 +D294 A9 AA LDA #$AA A:E8 X:33 Y:82 P:A5 SP:FB CYC:256 SL:16 +D296 85 78 STA $78 = EF A:AA X:33 Y:82 P:A5 SP:FB CYC:262 SL:16 +D298 20 04 F8 JSR $F804 A:AA X:33 Y:82 P:A5 SP:FB CYC:271 SL:16 +F804 18 CLC A:AA X:33 Y:82 P:A5 SP:F9 CYC:289 SL:16 +F805 24 01 BIT $01 = FF A:AA X:33 Y:82 P:A4 SP:F9 CYC:295 SL:16 +F807 A9 5F LDA #$5F A:AA X:33 Y:82 P:E4 SP:F9 CYC:304 SL:16 +F809 60 RTS A:5F X:33 Y:82 P:64 SP:F9 CYC:310 SL:16 +D29B 45 78 EOR $78 = AA A:5F X:33 Y:82 P:64 SP:FB CYC:328 SL:16 +D29D 20 0A F8 JSR $F80A A:F5 X:33 Y:82 P:E4 SP:FB CYC:337 SL:16 +F80A B0 09 BCS $F815 A:F5 X:33 Y:82 P:E4 SP:F9 CYC: 14 SL:17 +F80C 10 07 BPL $F815 A:F5 X:33 Y:82 P:E4 SP:F9 CYC: 20 SL:17 +F80E C9 F5 CMP #$F5 A:F5 X:33 Y:82 P:E4 SP:F9 CYC: 26 SL:17 +F810 D0 03 BNE $F815 A:F5 X:33 Y:82 P:67 SP:F9 CYC: 32 SL:17 +F812 50 01 BVC $F815 A:F5 X:33 Y:82 P:67 SP:F9 CYC: 38 SL:17 +F814 60 RTS A:F5 X:33 Y:82 P:67 SP:F9 CYC: 44 SL:17 +D2A0 C8 INY A:F5 X:33 Y:82 P:67 SP:FB CYC: 62 SL:17 +D2A1 A9 70 LDA #$70 A:F5 X:33 Y:83 P:E5 SP:FB CYC: 68 SL:17 +D2A3 85 78 STA $78 = AA A:70 X:33 Y:83 P:65 SP:FB CYC: 74 SL:17 +D2A5 20 18 F8 JSR $F818 A:70 X:33 Y:83 P:65 SP:FB CYC: 83 SL:17 +F818 38 SEC A:70 X:33 Y:83 P:65 SP:F9 CYC:101 SL:17 +F819 B8 CLV A:70 X:33 Y:83 P:65 SP:F9 CYC:107 SL:17 +F81A A9 70 LDA #$70 A:70 X:33 Y:83 P:25 SP:F9 CYC:113 SL:17 +F81C 60 RTS A:70 X:33 Y:83 P:25 SP:F9 CYC:119 SL:17 +D2A8 45 78 EOR $78 = 70 A:70 X:33 Y:83 P:25 SP:FB CYC:137 SL:17 +D2AA 20 1D F8 JSR $F81D A:00 X:33 Y:83 P:27 SP:FB CYC:146 SL:17 +F81D D0 07 BNE $F826 A:00 X:33 Y:83 P:27 SP:F9 CYC:164 SL:17 +F81F 70 05 BVS $F826 A:00 X:33 Y:83 P:27 SP:F9 CYC:170 SL:17 +F821 90 03 BCC $F826 A:00 X:33 Y:83 P:27 SP:F9 CYC:176 SL:17 +F823 30 01 BMI $F826 A:00 X:33 Y:83 P:27 SP:F9 CYC:182 SL:17 +F825 60 RTS A:00 X:33 Y:83 P:27 SP:F9 CYC:188 SL:17 +D2AD C8 INY A:00 X:33 Y:83 P:27 SP:FB CYC:206 SL:17 +D2AE A9 69 LDA #$69 A:00 X:33 Y:84 P:A5 SP:FB CYC:212 SL:17 +D2B0 85 78 STA $78 = 70 A:69 X:33 Y:84 P:25 SP:FB CYC:218 SL:17 +D2B2 20 29 F8 JSR $F829 A:69 X:33 Y:84 P:25 SP:FB CYC:227 SL:17 +F829 18 CLC A:69 X:33 Y:84 P:25 SP:F9 CYC:245 SL:17 +F82A 24 01 BIT $01 = FF A:69 X:33 Y:84 P:24 SP:F9 CYC:251 SL:17 +F82C A9 00 LDA #$00 A:69 X:33 Y:84 P:E4 SP:F9 CYC:260 SL:17 +F82E 60 RTS A:00 X:33 Y:84 P:66 SP:F9 CYC:266 SL:17 +D2B5 65 78 ADC $78 = 69 A:00 X:33 Y:84 P:66 SP:FB CYC:284 SL:17 +D2B7 20 2F F8 JSR $F82F A:69 X:33 Y:84 P:24 SP:FB CYC:293 SL:17 +F82F 30 09 BMI $F83A A:69 X:33 Y:84 P:24 SP:F9 CYC:311 SL:17 +F831 B0 07 BCS $F83A A:69 X:33 Y:84 P:24 SP:F9 CYC:317 SL:17 +F833 C9 69 CMP #$69 A:69 X:33 Y:84 P:24 SP:F9 CYC:323 SL:17 +F835 D0 03 BNE $F83A A:69 X:33 Y:84 P:27 SP:F9 CYC:329 SL:17 +F837 70 01 BVS $F83A A:69 X:33 Y:84 P:27 SP:F9 CYC:335 SL:17 +F839 60 RTS A:69 X:33 Y:84 P:27 SP:F9 CYC: 0 SL:18 +D2BA C8 INY A:69 X:33 Y:84 P:27 SP:FB CYC: 18 SL:18 +D2BB 20 3D F8 JSR $F83D A:69 X:33 Y:85 P:A5 SP:FB CYC: 24 SL:18 +F83D 38 SEC A:69 X:33 Y:85 P:A5 SP:F9 CYC: 42 SL:18 +F83E 24 01 BIT $01 = FF A:69 X:33 Y:85 P:A5 SP:F9 CYC: 48 SL:18 +F840 A9 00 LDA #$00 A:69 X:33 Y:85 P:E5 SP:F9 CYC: 57 SL:18 +F842 60 RTS A:00 X:33 Y:85 P:67 SP:F9 CYC: 63 SL:18 +D2BE 65 78 ADC $78 = 69 A:00 X:33 Y:85 P:67 SP:FB CYC: 81 SL:18 +D2C0 20 43 F8 JSR $F843 A:6A X:33 Y:85 P:24 SP:FB CYC: 90 SL:18 +F843 30 09 BMI $F84E A:6A X:33 Y:85 P:24 SP:F9 CYC:108 SL:18 +F845 B0 07 BCS $F84E A:6A X:33 Y:85 P:24 SP:F9 CYC:114 SL:18 +F847 C9 6A CMP #$6A A:6A X:33 Y:85 P:24 SP:F9 CYC:120 SL:18 +F849 D0 03 BNE $F84E A:6A X:33 Y:85 P:27 SP:F9 CYC:126 SL:18 +F84B 70 01 BVS $F84E A:6A X:33 Y:85 P:27 SP:F9 CYC:132 SL:18 +F84D 60 RTS A:6A X:33 Y:85 P:27 SP:F9 CYC:138 SL:18 +D2C3 C8 INY A:6A X:33 Y:85 P:27 SP:FB CYC:156 SL:18 +D2C4 A9 7F LDA #$7F A:6A X:33 Y:86 P:A5 SP:FB CYC:162 SL:18 +D2C6 85 78 STA $78 = 69 A:7F X:33 Y:86 P:25 SP:FB CYC:168 SL:18 +D2C8 20 51 F8 JSR $F851 A:7F X:33 Y:86 P:25 SP:FB CYC:177 SL:18 +F851 38 SEC A:7F X:33 Y:86 P:25 SP:F9 CYC:195 SL:18 +F852 B8 CLV A:7F X:33 Y:86 P:25 SP:F9 CYC:201 SL:18 +F853 A9 7F LDA #$7F A:7F X:33 Y:86 P:25 SP:F9 CYC:207 SL:18 +F855 60 RTS A:7F X:33 Y:86 P:25 SP:F9 CYC:213 SL:18 +D2CB 65 78 ADC $78 = 7F A:7F X:33 Y:86 P:25 SP:FB CYC:231 SL:18 +D2CD 20 56 F8 JSR $F856 A:FF X:33 Y:86 P:E4 SP:FB CYC:240 SL:18 +F856 10 09 BPL $F861 A:FF X:33 Y:86 P:E4 SP:F9 CYC:258 SL:18 +F858 B0 07 BCS $F861 A:FF X:33 Y:86 P:E4 SP:F9 CYC:264 SL:18 +F85A C9 FF CMP #$FF A:FF X:33 Y:86 P:E4 SP:F9 CYC:270 SL:18 +F85C D0 03 BNE $F861 A:FF X:33 Y:86 P:67 SP:F9 CYC:276 SL:18 +F85E 50 01 BVC $F861 A:FF X:33 Y:86 P:67 SP:F9 CYC:282 SL:18 +F860 60 RTS A:FF X:33 Y:86 P:67 SP:F9 CYC:288 SL:18 +D2D0 C8 INY A:FF X:33 Y:86 P:67 SP:FB CYC:306 SL:18 +D2D1 A9 80 LDA #$80 A:FF X:33 Y:87 P:E5 SP:FB CYC:312 SL:18 +D2D3 85 78 STA $78 = 7F A:80 X:33 Y:87 P:E5 SP:FB CYC:318 SL:18 +D2D5 20 64 F8 JSR $F864 A:80 X:33 Y:87 P:E5 SP:FB CYC:327 SL:18 +F864 18 CLC A:80 X:33 Y:87 P:E5 SP:F9 CYC: 4 SL:19 +F865 24 01 BIT $01 = FF A:80 X:33 Y:87 P:E4 SP:F9 CYC: 10 SL:19 +F867 A9 7F LDA #$7F A:80 X:33 Y:87 P:E4 SP:F9 CYC: 19 SL:19 +F869 60 RTS A:7F X:33 Y:87 P:64 SP:F9 CYC: 25 SL:19 +D2D8 65 78 ADC $78 = 80 A:7F X:33 Y:87 P:64 SP:FB CYC: 43 SL:19 +D2DA 20 6A F8 JSR $F86A A:FF X:33 Y:87 P:A4 SP:FB CYC: 52 SL:19 +F86A 10 09 BPL $F875 A:FF X:33 Y:87 P:A4 SP:F9 CYC: 70 SL:19 +F86C B0 07 BCS $F875 A:FF X:33 Y:87 P:A4 SP:F9 CYC: 76 SL:19 +F86E C9 FF CMP #$FF A:FF X:33 Y:87 P:A4 SP:F9 CYC: 82 SL:19 +F870 D0 03 BNE $F875 A:FF X:33 Y:87 P:27 SP:F9 CYC: 88 SL:19 +F872 70 01 BVS $F875 A:FF X:33 Y:87 P:27 SP:F9 CYC: 94 SL:19 +F874 60 RTS A:FF X:33 Y:87 P:27 SP:F9 CYC:100 SL:19 +D2DD C8 INY A:FF X:33 Y:87 P:27 SP:FB CYC:118 SL:19 +D2DE 20 78 F8 JSR $F878 A:FF X:33 Y:88 P:A5 SP:FB CYC:124 SL:19 +F878 38 SEC A:FF X:33 Y:88 P:A5 SP:F9 CYC:142 SL:19 +F879 B8 CLV A:FF X:33 Y:88 P:A5 SP:F9 CYC:148 SL:19 +F87A A9 7F LDA #$7F A:FF X:33 Y:88 P:A5 SP:F9 CYC:154 SL:19 +F87C 60 RTS A:7F X:33 Y:88 P:25 SP:F9 CYC:160 SL:19 +D2E1 65 78 ADC $78 = 80 A:7F X:33 Y:88 P:25 SP:FB CYC:178 SL:19 +D2E3 20 7D F8 JSR $F87D A:00 X:33 Y:88 P:27 SP:FB CYC:187 SL:19 +F87D D0 07 BNE $F886 A:00 X:33 Y:88 P:27 SP:F9 CYC:205 SL:19 +F87F 30 05 BMI $F886 A:00 X:33 Y:88 P:27 SP:F9 CYC:211 SL:19 +F881 70 03 BVS $F886 A:00 X:33 Y:88 P:27 SP:F9 CYC:217 SL:19 +F883 90 01 BCC $F886 A:00 X:33 Y:88 P:27 SP:F9 CYC:223 SL:19 +F885 60 RTS A:00 X:33 Y:88 P:27 SP:F9 CYC:229 SL:19 +D2E6 C8 INY A:00 X:33 Y:88 P:27 SP:FB CYC:247 SL:19 +D2E7 A9 40 LDA #$40 A:00 X:33 Y:89 P:A5 SP:FB CYC:253 SL:19 +D2E9 85 78 STA $78 = 80 A:40 X:33 Y:89 P:25 SP:FB CYC:259 SL:19 +D2EB 20 89 F8 JSR $F889 A:40 X:33 Y:89 P:25 SP:FB CYC:268 SL:19 +F889 24 01 BIT $01 = FF A:40 X:33 Y:89 P:25 SP:F9 CYC:286 SL:19 +F88B A9 40 LDA #$40 A:40 X:33 Y:89 P:E5 SP:F9 CYC:295 SL:19 +F88D 60 RTS A:40 X:33 Y:89 P:65 SP:F9 CYC:301 SL:19 +D2EE C5 78 CMP $78 = 40 A:40 X:33 Y:89 P:65 SP:FB CYC:319 SL:19 +D2F0 20 8E F8 JSR $F88E A:40 X:33 Y:89 P:67 SP:FB CYC:328 SL:19 +F88E 30 07 BMI $F897 A:40 X:33 Y:89 P:67 SP:F9 CYC: 5 SL:20 +F890 90 05 BCC $F897 A:40 X:33 Y:89 P:67 SP:F9 CYC: 11 SL:20 +F892 D0 03 BNE $F897 A:40 X:33 Y:89 P:67 SP:F9 CYC: 17 SL:20 +F894 50 01 BVC $F897 A:40 X:33 Y:89 P:67 SP:F9 CYC: 23 SL:20 +F896 60 RTS A:40 X:33 Y:89 P:67 SP:F9 CYC: 29 SL:20 +D2F3 C8 INY A:40 X:33 Y:89 P:67 SP:FB CYC: 47 SL:20 +D2F4 48 PHA A:40 X:33 Y:8A P:E5 SP:FB CYC: 53 SL:20 +D2F5 A9 3F LDA #$3F A:40 X:33 Y:8A P:E5 SP:FA CYC: 62 SL:20 +D2F7 85 78 STA $78 = 40 A:3F X:33 Y:8A P:65 SP:FA CYC: 68 SL:20 +D2F9 68 PLA A:3F X:33 Y:8A P:65 SP:FA CYC: 77 SL:20 +D2FA 20 9A F8 JSR $F89A A:40 X:33 Y:8A P:65 SP:FB CYC: 89 SL:20 +F89A B8 CLV A:40 X:33 Y:8A P:65 SP:F9 CYC:107 SL:20 +F89B 60 RTS A:40 X:33 Y:8A P:25 SP:F9 CYC:113 SL:20 +D2FD C5 78 CMP $78 = 3F A:40 X:33 Y:8A P:25 SP:FB CYC:131 SL:20 +D2FF 20 9C F8 JSR $F89C A:40 X:33 Y:8A P:25 SP:FB CYC:140 SL:20 +F89C F0 07 BEQ $F8A5 A:40 X:33 Y:8A P:25 SP:F9 CYC:158 SL:20 +F89E 30 05 BMI $F8A5 A:40 X:33 Y:8A P:25 SP:F9 CYC:164 SL:20 +F8A0 90 03 BCC $F8A5 A:40 X:33 Y:8A P:25 SP:F9 CYC:170 SL:20 +F8A2 70 01 BVS $F8A5 A:40 X:33 Y:8A P:25 SP:F9 CYC:176 SL:20 +F8A4 60 RTS A:40 X:33 Y:8A P:25 SP:F9 CYC:182 SL:20 +D302 C8 INY A:40 X:33 Y:8A P:25 SP:FB CYC:200 SL:20 +D303 48 PHA A:40 X:33 Y:8B P:A5 SP:FB CYC:206 SL:20 +D304 A9 41 LDA #$41 A:40 X:33 Y:8B P:A5 SP:FA CYC:215 SL:20 +D306 85 78 STA $78 = 3F A:41 X:33 Y:8B P:25 SP:FA CYC:221 SL:20 +D308 68 PLA A:41 X:33 Y:8B P:25 SP:FA CYC:230 SL:20 +D309 C5 78 CMP $78 = 41 A:40 X:33 Y:8B P:25 SP:FB CYC:242 SL:20 +D30B 20 A8 F8 JSR $F8A8 A:40 X:33 Y:8B P:A4 SP:FB CYC:251 SL:20 +F8A8 F0 05 BEQ $F8AF A:40 X:33 Y:8B P:A4 SP:F9 CYC:269 SL:20 +F8AA 10 03 BPL $F8AF A:40 X:33 Y:8B P:A4 SP:F9 CYC:275 SL:20 +F8AC 10 01 BPL $F8AF A:40 X:33 Y:8B P:A4 SP:F9 CYC:281 SL:20 +F8AE 60 RTS A:40 X:33 Y:8B P:A4 SP:F9 CYC:287 SL:20 +D30E C8 INY A:40 X:33 Y:8B P:A4 SP:FB CYC:305 SL:20 +D30F 48 PHA A:40 X:33 Y:8C P:A4 SP:FB CYC:311 SL:20 +D310 A9 00 LDA #$00 A:40 X:33 Y:8C P:A4 SP:FA CYC:320 SL:20 +D312 85 78 STA $78 = 41 A:00 X:33 Y:8C P:26 SP:FA CYC:326 SL:20 +D314 68 PLA A:00 X:33 Y:8C P:26 SP:FA CYC:335 SL:20 +D315 20 B2 F8 JSR $F8B2 A:40 X:33 Y:8C P:24 SP:FB CYC: 6 SL:21 +F8B2 A9 80 LDA #$80 A:40 X:33 Y:8C P:24 SP:F9 CYC: 24 SL:21 +F8B4 60 RTS A:80 X:33 Y:8C P:A4 SP:F9 CYC: 30 SL:21 +D318 C5 78 CMP $78 = 00 A:80 X:33 Y:8C P:A4 SP:FB CYC: 48 SL:21 +D31A 20 B5 F8 JSR $F8B5 A:80 X:33 Y:8C P:A5 SP:FB CYC: 57 SL:21 +F8B5 F0 05 BEQ $F8BC A:80 X:33 Y:8C P:A5 SP:F9 CYC: 75 SL:21 +F8B7 10 03 BPL $F8BC A:80 X:33 Y:8C P:A5 SP:F9 CYC: 81 SL:21 +F8B9 90 01 BCC $F8BC A:80 X:33 Y:8C P:A5 SP:F9 CYC: 87 SL:21 +F8BB 60 RTS A:80 X:33 Y:8C P:A5 SP:F9 CYC: 93 SL:21 +D31D C8 INY A:80 X:33 Y:8C P:A5 SP:FB CYC:111 SL:21 +D31E 48 PHA A:80 X:33 Y:8D P:A5 SP:FB CYC:117 SL:21 +D31F A9 80 LDA #$80 A:80 X:33 Y:8D P:A5 SP:FA CYC:126 SL:21 +D321 85 78 STA $78 = 00 A:80 X:33 Y:8D P:A5 SP:FA CYC:132 SL:21 +D323 68 PLA A:80 X:33 Y:8D P:A5 SP:FA CYC:141 SL:21 +D324 C5 78 CMP $78 = 80 A:80 X:33 Y:8D P:A5 SP:FB CYC:153 SL:21 +D326 20 BF F8 JSR $F8BF A:80 X:33 Y:8D P:27 SP:FB CYC:162 SL:21 +F8BF D0 05 BNE $F8C6 A:80 X:33 Y:8D P:27 SP:F9 CYC:180 SL:21 +F8C1 30 03 BMI $F8C6 A:80 X:33 Y:8D P:27 SP:F9 CYC:186 SL:21 +F8C3 90 01 BCC $F8C6 A:80 X:33 Y:8D P:27 SP:F9 CYC:192 SL:21 +F8C5 60 RTS A:80 X:33 Y:8D P:27 SP:F9 CYC:198 SL:21 +D329 C8 INY A:80 X:33 Y:8D P:27 SP:FB CYC:216 SL:21 +D32A 48 PHA A:80 X:33 Y:8E P:A5 SP:FB CYC:222 SL:21 +D32B A9 81 LDA #$81 A:80 X:33 Y:8E P:A5 SP:FA CYC:231 SL:21 +D32D 85 78 STA $78 = 80 A:81 X:33 Y:8E P:A5 SP:FA CYC:237 SL:21 +D32F 68 PLA A:81 X:33 Y:8E P:A5 SP:FA CYC:246 SL:21 +D330 C5 78 CMP $78 = 81 A:80 X:33 Y:8E P:A5 SP:FB CYC:258 SL:21 +D332 20 C9 F8 JSR $F8C9 A:80 X:33 Y:8E P:A4 SP:FB CYC:267 SL:21 +F8C9 B0 05 BCS $F8D0 A:80 X:33 Y:8E P:A4 SP:F9 CYC:285 SL:21 +F8CB F0 03 BEQ $F8D0 A:80 X:33 Y:8E P:A4 SP:F9 CYC:291 SL:21 +F8CD 10 01 BPL $F8D0 A:80 X:33 Y:8E P:A4 SP:F9 CYC:297 SL:21 +F8CF 60 RTS A:80 X:33 Y:8E P:A4 SP:F9 CYC:303 SL:21 +D335 C8 INY A:80 X:33 Y:8E P:A4 SP:FB CYC:321 SL:21 +D336 48 PHA A:80 X:33 Y:8F P:A4 SP:FB CYC:327 SL:21 +D337 A9 7F LDA #$7F A:80 X:33 Y:8F P:A4 SP:FA CYC:336 SL:21 +D339 85 78 STA $78 = 81 A:7F X:33 Y:8F P:24 SP:FA CYC: 1 SL:22 +D33B 68 PLA A:7F X:33 Y:8F P:24 SP:FA CYC: 10 SL:22 +D33C C5 78 CMP $78 = 7F A:80 X:33 Y:8F P:A4 SP:FB CYC: 22 SL:22 +D33E 20 D3 F8 JSR $F8D3 A:80 X:33 Y:8F P:25 SP:FB CYC: 31 SL:22 +F8D3 90 05 BCC $F8DA A:80 X:33 Y:8F P:25 SP:F9 CYC: 49 SL:22 +F8D5 F0 03 BEQ $F8DA A:80 X:33 Y:8F P:25 SP:F9 CYC: 55 SL:22 +F8D7 30 01 BMI $F8DA A:80 X:33 Y:8F P:25 SP:F9 CYC: 61 SL:22 +F8D9 60 RTS A:80 X:33 Y:8F P:25 SP:F9 CYC: 67 SL:22 +D341 C8 INY A:80 X:33 Y:8F P:25 SP:FB CYC: 85 SL:22 +D342 A9 40 LDA #$40 A:80 X:33 Y:90 P:A5 SP:FB CYC: 91 SL:22 +D344 85 78 STA $78 = 7F A:40 X:33 Y:90 P:25 SP:FB CYC: 97 SL:22 +D346 20 31 F9 JSR $F931 A:40 X:33 Y:90 P:25 SP:FB CYC:106 SL:22 +F931 24 01 BIT $01 = FF A:40 X:33 Y:90 P:25 SP:F9 CYC:124 SL:22 +F933 A9 40 LDA #$40 A:40 X:33 Y:90 P:E5 SP:F9 CYC:133 SL:22 +F935 38 SEC A:40 X:33 Y:90 P:65 SP:F9 CYC:139 SL:22 +F936 60 RTS A:40 X:33 Y:90 P:65 SP:F9 CYC:145 SL:22 +D349 E5 78 SBC $78 = 40 A:40 X:33 Y:90 P:65 SP:FB CYC:163 SL:22 +D34B 20 37 F9 JSR $F937 A:00 X:33 Y:90 P:27 SP:FB CYC:172 SL:22 +F937 30 0B BMI $F944 A:00 X:33 Y:90 P:27 SP:F9 CYC:190 SL:22 +F939 90 09 BCC $F944 A:00 X:33 Y:90 P:27 SP:F9 CYC:196 SL:22 +F93B D0 07 BNE $F944 A:00 X:33 Y:90 P:27 SP:F9 CYC:202 SL:22 +F93D 70 05 BVS $F944 A:00 X:33 Y:90 P:27 SP:F9 CYC:208 SL:22 +F93F C9 00 CMP #$00 A:00 X:33 Y:90 P:27 SP:F9 CYC:214 SL:22 +F941 D0 01 BNE $F944 A:00 X:33 Y:90 P:27 SP:F9 CYC:220 SL:22 +F943 60 RTS A:00 X:33 Y:90 P:27 SP:F9 CYC:226 SL:22 +D34E C8 INY A:00 X:33 Y:90 P:27 SP:FB CYC:244 SL:22 +D34F A9 3F LDA #$3F A:00 X:33 Y:91 P:A5 SP:FB CYC:250 SL:22 +D351 85 78 STA $78 = 40 A:3F X:33 Y:91 P:25 SP:FB CYC:256 SL:22 +D353 20 47 F9 JSR $F947 A:3F X:33 Y:91 P:25 SP:FB CYC:265 SL:22 +F947 B8 CLV A:3F X:33 Y:91 P:25 SP:F9 CYC:283 SL:22 +F948 38 SEC A:3F X:33 Y:91 P:25 SP:F9 CYC:289 SL:22 +F949 A9 40 LDA #$40 A:3F X:33 Y:91 P:25 SP:F9 CYC:295 SL:22 +F94B 60 RTS A:40 X:33 Y:91 P:25 SP:F9 CYC:301 SL:22 +D356 E5 78 SBC $78 = 3F A:40 X:33 Y:91 P:25 SP:FB CYC:319 SL:22 +D358 20 4C F9 JSR $F94C A:01 X:33 Y:91 P:25 SP:FB CYC:328 SL:22 +F94C F0 0B BEQ $F959 A:01 X:33 Y:91 P:25 SP:F9 CYC: 5 SL:23 +F94E 30 09 BMI $F959 A:01 X:33 Y:91 P:25 SP:F9 CYC: 11 SL:23 +F950 90 07 BCC $F959 A:01 X:33 Y:91 P:25 SP:F9 CYC: 17 SL:23 +F952 70 05 BVS $F959 A:01 X:33 Y:91 P:25 SP:F9 CYC: 23 SL:23 +F954 C9 01 CMP #$01 A:01 X:33 Y:91 P:25 SP:F9 CYC: 29 SL:23 +F956 D0 01 BNE $F959 A:01 X:33 Y:91 P:27 SP:F9 CYC: 35 SL:23 +F958 60 RTS A:01 X:33 Y:91 P:27 SP:F9 CYC: 41 SL:23 +D35B C8 INY A:01 X:33 Y:91 P:27 SP:FB CYC: 59 SL:23 +D35C A9 41 LDA #$41 A:01 X:33 Y:92 P:A5 SP:FB CYC: 65 SL:23 +D35E 85 78 STA $78 = 3F A:41 X:33 Y:92 P:25 SP:FB CYC: 71 SL:23 +D360 20 5C F9 JSR $F95C A:41 X:33 Y:92 P:25 SP:FB CYC: 80 SL:23 +F95C A9 40 LDA #$40 A:41 X:33 Y:92 P:25 SP:F9 CYC: 98 SL:23 +F95E 38 SEC A:40 X:33 Y:92 P:25 SP:F9 CYC:104 SL:23 +F95F 24 01 BIT $01 = FF A:40 X:33 Y:92 P:25 SP:F9 CYC:110 SL:23 +F961 60 RTS A:40 X:33 Y:92 P:E5 SP:F9 CYC:119 SL:23 +D363 E5 78 SBC $78 = 41 A:40 X:33 Y:92 P:E5 SP:FB CYC:137 SL:23 +D365 20 62 F9 JSR $F962 A:FF X:33 Y:92 P:A4 SP:FB CYC:146 SL:23 +F962 B0 0B BCS $F96F A:FF X:33 Y:92 P:A4 SP:F9 CYC:164 SL:23 +F964 F0 09 BEQ $F96F A:FF X:33 Y:92 P:A4 SP:F9 CYC:170 SL:23 +F966 10 07 BPL $F96F A:FF X:33 Y:92 P:A4 SP:F9 CYC:176 SL:23 +F968 70 05 BVS $F96F A:FF X:33 Y:92 P:A4 SP:F9 CYC:182 SL:23 +F96A C9 FF CMP #$FF A:FF X:33 Y:92 P:A4 SP:F9 CYC:188 SL:23 +F96C D0 01 BNE $F96F A:FF X:33 Y:92 P:27 SP:F9 CYC:194 SL:23 +F96E 60 RTS A:FF X:33 Y:92 P:27 SP:F9 CYC:200 SL:23 +D368 C8 INY A:FF X:33 Y:92 P:27 SP:FB CYC:218 SL:23 +D369 A9 00 LDA #$00 A:FF X:33 Y:93 P:A5 SP:FB CYC:224 SL:23 +D36B 85 78 STA $78 = 41 A:00 X:33 Y:93 P:27 SP:FB CYC:230 SL:23 +D36D 20 72 F9 JSR $F972 A:00 X:33 Y:93 P:27 SP:FB CYC:239 SL:23 +F972 18 CLC A:00 X:33 Y:93 P:27 SP:F9 CYC:257 SL:23 +F973 A9 80 LDA #$80 A:00 X:33 Y:93 P:26 SP:F9 CYC:263 SL:23 +F975 60 RTS A:80 X:33 Y:93 P:A4 SP:F9 CYC:269 SL:23 +D370 E5 78 SBC $78 = 00 A:80 X:33 Y:93 P:A4 SP:FB CYC:287 SL:23 +D372 20 76 F9 JSR $F976 A:7F X:33 Y:93 P:65 SP:FB CYC:296 SL:23 +F976 90 05 BCC $F97D A:7F X:33 Y:93 P:65 SP:F9 CYC:314 SL:23 +F978 C9 7F CMP #$7F A:7F X:33 Y:93 P:65 SP:F9 CYC:320 SL:23 +F97A D0 01 BNE $F97D A:7F X:33 Y:93 P:67 SP:F9 CYC:326 SL:23 +F97C 60 RTS A:7F X:33 Y:93 P:67 SP:F9 CYC:332 SL:23 +D375 C8 INY A:7F X:33 Y:93 P:67 SP:FB CYC: 9 SL:24 +D376 A9 7F LDA #$7F A:7F X:33 Y:94 P:E5 SP:FB CYC: 15 SL:24 +D378 85 78 STA $78 = 00 A:7F X:33 Y:94 P:65 SP:FB CYC: 21 SL:24 +D37A 20 80 F9 JSR $F980 A:7F X:33 Y:94 P:65 SP:FB CYC: 30 SL:24 +F980 38 SEC A:7F X:33 Y:94 P:65 SP:F9 CYC: 48 SL:24 +F981 A9 81 LDA #$81 A:7F X:33 Y:94 P:65 SP:F9 CYC: 54 SL:24 +F983 60 RTS A:81 X:33 Y:94 P:E5 SP:F9 CYC: 60 SL:24 +D37D E5 78 SBC $78 = 7F A:81 X:33 Y:94 P:E5 SP:FB CYC: 78 SL:24 +D37F 20 84 F9 JSR $F984 A:02 X:33 Y:94 P:65 SP:FB CYC: 87 SL:24 +F984 50 07 BVC $F98D A:02 X:33 Y:94 P:65 SP:F9 CYC:105 SL:24 +F986 90 05 BCC $F98D A:02 X:33 Y:94 P:65 SP:F9 CYC:111 SL:24 +F988 C9 02 CMP #$02 A:02 X:33 Y:94 P:65 SP:F9 CYC:117 SL:24 +F98A D0 01 BNE $F98D A:02 X:33 Y:94 P:67 SP:F9 CYC:123 SL:24 +F98C 60 RTS A:02 X:33 Y:94 P:67 SP:F9 CYC:129 SL:24 +D382 C8 INY A:02 X:33 Y:94 P:67 SP:FB CYC:147 SL:24 +D383 A9 40 LDA #$40 A:02 X:33 Y:95 P:E5 SP:FB CYC:153 SL:24 +D385 85 78 STA $78 = 7F A:40 X:33 Y:95 P:65 SP:FB CYC:159 SL:24 +D387 20 89 F8 JSR $F889 A:40 X:33 Y:95 P:65 SP:FB CYC:168 SL:24 +F889 24 01 BIT $01 = FF A:40 X:33 Y:95 P:65 SP:F9 CYC:186 SL:24 +F88B A9 40 LDA #$40 A:40 X:33 Y:95 P:E5 SP:F9 CYC:195 SL:24 +F88D 60 RTS A:40 X:33 Y:95 P:65 SP:F9 CYC:201 SL:24 +D38A AA TAX A:40 X:33 Y:95 P:65 SP:FB CYC:219 SL:24 +D38B E4 78 CPX $78 = 40 A:40 X:40 Y:95 P:65 SP:FB CYC:225 SL:24 +D38D 20 8E F8 JSR $F88E A:40 X:40 Y:95 P:67 SP:FB CYC:234 SL:24 +F88E 30 07 BMI $F897 A:40 X:40 Y:95 P:67 SP:F9 CYC:252 SL:24 +F890 90 05 BCC $F897 A:40 X:40 Y:95 P:67 SP:F9 CYC:258 SL:24 +F892 D0 03 BNE $F897 A:40 X:40 Y:95 P:67 SP:F9 CYC:264 SL:24 +F894 50 01 BVC $F897 A:40 X:40 Y:95 P:67 SP:F9 CYC:270 SL:24 +F896 60 RTS A:40 X:40 Y:95 P:67 SP:F9 CYC:276 SL:24 +D390 C8 INY A:40 X:40 Y:95 P:67 SP:FB CYC:294 SL:24 +D391 A9 3F LDA #$3F A:40 X:40 Y:96 P:E5 SP:FB CYC:300 SL:24 +D393 85 78 STA $78 = 40 A:3F X:40 Y:96 P:65 SP:FB CYC:306 SL:24 +D395 20 9A F8 JSR $F89A A:3F X:40 Y:96 P:65 SP:FB CYC:315 SL:24 +F89A B8 CLV A:3F X:40 Y:96 P:65 SP:F9 CYC:333 SL:24 +F89B 60 RTS A:3F X:40 Y:96 P:25 SP:F9 CYC:339 SL:24 +D398 E4 78 CPX $78 = 3F A:3F X:40 Y:96 P:25 SP:FB CYC: 16 SL:25 +D39A 20 9C F8 JSR $F89C A:3F X:40 Y:96 P:25 SP:FB CYC: 25 SL:25 +F89C F0 07 BEQ $F8A5 A:3F X:40 Y:96 P:25 SP:F9 CYC: 43 SL:25 +F89E 30 05 BMI $F8A5 A:3F X:40 Y:96 P:25 SP:F9 CYC: 49 SL:25 +F8A0 90 03 BCC $F8A5 A:3F X:40 Y:96 P:25 SP:F9 CYC: 55 SL:25 +F8A2 70 01 BVS $F8A5 A:3F X:40 Y:96 P:25 SP:F9 CYC: 61 SL:25 +F8A4 60 RTS A:3F X:40 Y:96 P:25 SP:F9 CYC: 67 SL:25 +D39D C8 INY A:3F X:40 Y:96 P:25 SP:FB CYC: 85 SL:25 +D39E A9 41 LDA #$41 A:3F X:40 Y:97 P:A5 SP:FB CYC: 91 SL:25 +D3A0 85 78 STA $78 = 3F A:41 X:40 Y:97 P:25 SP:FB CYC: 97 SL:25 +D3A2 E4 78 CPX $78 = 41 A:41 X:40 Y:97 P:25 SP:FB CYC:106 SL:25 +D3A4 20 A8 F8 JSR $F8A8 A:41 X:40 Y:97 P:A4 SP:FB CYC:115 SL:25 +F8A8 F0 05 BEQ $F8AF A:41 X:40 Y:97 P:A4 SP:F9 CYC:133 SL:25 +F8AA 10 03 BPL $F8AF A:41 X:40 Y:97 P:A4 SP:F9 CYC:139 SL:25 +F8AC 10 01 BPL $F8AF A:41 X:40 Y:97 P:A4 SP:F9 CYC:145 SL:25 +F8AE 60 RTS A:41 X:40 Y:97 P:A4 SP:F9 CYC:151 SL:25 +D3A7 C8 INY A:41 X:40 Y:97 P:A4 SP:FB CYC:169 SL:25 +D3A8 A9 00 LDA #$00 A:41 X:40 Y:98 P:A4 SP:FB CYC:175 SL:25 +D3AA 85 78 STA $78 = 41 A:00 X:40 Y:98 P:26 SP:FB CYC:181 SL:25 +D3AC 20 B2 F8 JSR $F8B2 A:00 X:40 Y:98 P:26 SP:FB CYC:190 SL:25 +F8B2 A9 80 LDA #$80 A:00 X:40 Y:98 P:26 SP:F9 CYC:208 SL:25 +F8B4 60 RTS A:80 X:40 Y:98 P:A4 SP:F9 CYC:214 SL:25 +D3AF AA TAX A:80 X:40 Y:98 P:A4 SP:FB CYC:232 SL:25 +D3B0 E4 78 CPX $78 = 00 A:80 X:80 Y:98 P:A4 SP:FB CYC:238 SL:25 +D3B2 20 B5 F8 JSR $F8B5 A:80 X:80 Y:98 P:A5 SP:FB CYC:247 SL:25 +F8B5 F0 05 BEQ $F8BC A:80 X:80 Y:98 P:A5 SP:F9 CYC:265 SL:25 +F8B7 10 03 BPL $F8BC A:80 X:80 Y:98 P:A5 SP:F9 CYC:271 SL:25 +F8B9 90 01 BCC $F8BC A:80 X:80 Y:98 P:A5 SP:F9 CYC:277 SL:25 +F8BB 60 RTS A:80 X:80 Y:98 P:A5 SP:F9 CYC:283 SL:25 +D3B5 C8 INY A:80 X:80 Y:98 P:A5 SP:FB CYC:301 SL:25 +D3B6 A9 80 LDA #$80 A:80 X:80 Y:99 P:A5 SP:FB CYC:307 SL:25 +D3B8 85 78 STA $78 = 00 A:80 X:80 Y:99 P:A5 SP:FB CYC:313 SL:25 +D3BA E4 78 CPX $78 = 80 A:80 X:80 Y:99 P:A5 SP:FB CYC:322 SL:25 +D3BC 20 BF F8 JSR $F8BF A:80 X:80 Y:99 P:27 SP:FB CYC:331 SL:25 +F8BF D0 05 BNE $F8C6 A:80 X:80 Y:99 P:27 SP:F9 CYC: 8 SL:26 +F8C1 30 03 BMI $F8C6 A:80 X:80 Y:99 P:27 SP:F9 CYC: 14 SL:26 +F8C3 90 01 BCC $F8C6 A:80 X:80 Y:99 P:27 SP:F9 CYC: 20 SL:26 +F8C5 60 RTS A:80 X:80 Y:99 P:27 SP:F9 CYC: 26 SL:26 +D3BF C8 INY A:80 X:80 Y:99 P:27 SP:FB CYC: 44 SL:26 +D3C0 A9 81 LDA #$81 A:80 X:80 Y:9A P:A5 SP:FB CYC: 50 SL:26 +D3C2 85 78 STA $78 = 80 A:81 X:80 Y:9A P:A5 SP:FB CYC: 56 SL:26 +D3C4 E4 78 CPX $78 = 81 A:81 X:80 Y:9A P:A5 SP:FB CYC: 65 SL:26 +D3C6 20 C9 F8 JSR $F8C9 A:81 X:80 Y:9A P:A4 SP:FB CYC: 74 SL:26 +F8C9 B0 05 BCS $F8D0 A:81 X:80 Y:9A P:A4 SP:F9 CYC: 92 SL:26 +F8CB F0 03 BEQ $F8D0 A:81 X:80 Y:9A P:A4 SP:F9 CYC: 98 SL:26 +F8CD 10 01 BPL $F8D0 A:81 X:80 Y:9A P:A4 SP:F9 CYC:104 SL:26 +F8CF 60 RTS A:81 X:80 Y:9A P:A4 SP:F9 CYC:110 SL:26 +D3C9 C8 INY A:81 X:80 Y:9A P:A4 SP:FB CYC:128 SL:26 +D3CA A9 7F LDA #$7F A:81 X:80 Y:9B P:A4 SP:FB CYC:134 SL:26 +D3CC 85 78 STA $78 = 81 A:7F X:80 Y:9B P:24 SP:FB CYC:140 SL:26 +D3CE E4 78 CPX $78 = 7F A:7F X:80 Y:9B P:24 SP:FB CYC:149 SL:26 +D3D0 20 D3 F8 JSR $F8D3 A:7F X:80 Y:9B P:25 SP:FB CYC:158 SL:26 +F8D3 90 05 BCC $F8DA A:7F X:80 Y:9B P:25 SP:F9 CYC:176 SL:26 +F8D5 F0 03 BEQ $F8DA A:7F X:80 Y:9B P:25 SP:F9 CYC:182 SL:26 +F8D7 30 01 BMI $F8DA A:7F X:80 Y:9B P:25 SP:F9 CYC:188 SL:26 +F8D9 60 RTS A:7F X:80 Y:9B P:25 SP:F9 CYC:194 SL:26 +D3D3 C8 INY A:7F X:80 Y:9B P:25 SP:FB CYC:212 SL:26 +D3D4 98 TYA A:7F X:80 Y:9C P:A5 SP:FB CYC:218 SL:26 +D3D5 AA TAX A:9C X:80 Y:9C P:A5 SP:FB CYC:224 SL:26 +D3D6 A9 40 LDA #$40 A:9C X:9C Y:9C P:A5 SP:FB CYC:230 SL:26 +D3D8 85 78 STA $78 = 7F A:40 X:9C Y:9C P:25 SP:FB CYC:236 SL:26 +D3DA 20 DD F8 JSR $F8DD A:40 X:9C Y:9C P:25 SP:FB CYC:245 SL:26 +F8DD 24 01 BIT $01 = FF A:40 X:9C Y:9C P:25 SP:F9 CYC:263 SL:26 +F8DF A0 40 LDY #$40 A:40 X:9C Y:9C P:E5 SP:F9 CYC:272 SL:26 +F8E1 60 RTS A:40 X:9C Y:40 P:65 SP:F9 CYC:278 SL:26 +D3DD C4 78 CPY $78 = 40 A:40 X:9C Y:40 P:65 SP:FB CYC:296 SL:26 +D3DF 20 E2 F8 JSR $F8E2 A:40 X:9C Y:40 P:67 SP:FB CYC:305 SL:26 +F8E2 30 07 BMI $F8EB A:40 X:9C Y:40 P:67 SP:F9 CYC:323 SL:26 +F8E4 90 05 BCC $F8EB A:40 X:9C Y:40 P:67 SP:F9 CYC:329 SL:26 +F8E6 D0 03 BNE $F8EB A:40 X:9C Y:40 P:67 SP:F9 CYC:335 SL:26 +F8E8 50 01 BVC $F8EB A:40 X:9C Y:40 P:67 SP:F9 CYC: 0 SL:27 +F8EA 60 RTS A:40 X:9C Y:40 P:67 SP:F9 CYC: 6 SL:27 +D3E2 E8 INX A:40 X:9C Y:40 P:67 SP:FB CYC: 24 SL:27 +D3E3 A9 3F LDA #$3F A:40 X:9D Y:40 P:E5 SP:FB CYC: 30 SL:27 +D3E5 85 78 STA $78 = 40 A:3F X:9D Y:40 P:65 SP:FB CYC: 36 SL:27 +D3E7 20 EE F8 JSR $F8EE A:3F X:9D Y:40 P:65 SP:FB CYC: 45 SL:27 +F8EE B8 CLV A:3F X:9D Y:40 P:65 SP:F9 CYC: 63 SL:27 +F8EF 60 RTS A:3F X:9D Y:40 P:25 SP:F9 CYC: 69 SL:27 +D3EA C4 78 CPY $78 = 3F A:3F X:9D Y:40 P:25 SP:FB CYC: 87 SL:27 +D3EC 20 F0 F8 JSR $F8F0 A:3F X:9D Y:40 P:25 SP:FB CYC: 96 SL:27 +F8F0 F0 07 BEQ $F8F9 A:3F X:9D Y:40 P:25 SP:F9 CYC:114 SL:27 +F8F2 30 05 BMI $F8F9 A:3F X:9D Y:40 P:25 SP:F9 CYC:120 SL:27 +F8F4 90 03 BCC $F8F9 A:3F X:9D Y:40 P:25 SP:F9 CYC:126 SL:27 +F8F6 70 01 BVS $F8F9 A:3F X:9D Y:40 P:25 SP:F9 CYC:132 SL:27 +F8F8 60 RTS A:3F X:9D Y:40 P:25 SP:F9 CYC:138 SL:27 +D3EF E8 INX A:3F X:9D Y:40 P:25 SP:FB CYC:156 SL:27 +D3F0 A9 41 LDA #$41 A:3F X:9E Y:40 P:A5 SP:FB CYC:162 SL:27 +D3F2 85 78 STA $78 = 3F A:41 X:9E Y:40 P:25 SP:FB CYC:168 SL:27 +D3F4 C4 78 CPY $78 = 41 A:41 X:9E Y:40 P:25 SP:FB CYC:177 SL:27 +D3F6 20 FC F8 JSR $F8FC A:41 X:9E Y:40 P:A4 SP:FB CYC:186 SL:27 +F8FC F0 05 BEQ $F903 A:41 X:9E Y:40 P:A4 SP:F9 CYC:204 SL:27 +F8FE 10 03 BPL $F903 A:41 X:9E Y:40 P:A4 SP:F9 CYC:210 SL:27 +F900 10 01 BPL $F903 A:41 X:9E Y:40 P:A4 SP:F9 CYC:216 SL:27 +F902 60 RTS A:41 X:9E Y:40 P:A4 SP:F9 CYC:222 SL:27 +D3F9 E8 INX A:41 X:9E Y:40 P:A4 SP:FB CYC:240 SL:27 +D3FA A9 00 LDA #$00 A:41 X:9F Y:40 P:A4 SP:FB CYC:246 SL:27 +D3FC 85 78 STA $78 = 41 A:00 X:9F Y:40 P:26 SP:FB CYC:252 SL:27 +D3FE 20 06 F9 JSR $F906 A:00 X:9F Y:40 P:26 SP:FB CYC:261 SL:27 +F906 A0 80 LDY #$80 A:00 X:9F Y:40 P:26 SP:F9 CYC:279 SL:27 +F908 60 RTS A:00 X:9F Y:80 P:A4 SP:F9 CYC:285 SL:27 +D401 C4 78 CPY $78 = 00 A:00 X:9F Y:80 P:A4 SP:FB CYC:303 SL:27 +D403 20 09 F9 JSR $F909 A:00 X:9F Y:80 P:A5 SP:FB CYC:312 SL:27 +F909 F0 05 BEQ $F910 A:00 X:9F Y:80 P:A5 SP:F9 CYC:330 SL:27 +F90B 10 03 BPL $F910 A:00 X:9F Y:80 P:A5 SP:F9 CYC:336 SL:27 +F90D 90 01 BCC $F910 A:00 X:9F Y:80 P:A5 SP:F9 CYC: 1 SL:28 +F90F 60 RTS A:00 X:9F Y:80 P:A5 SP:F9 CYC: 7 SL:28 +D406 E8 INX A:00 X:9F Y:80 P:A5 SP:FB CYC: 25 SL:28 +D407 A9 80 LDA #$80 A:00 X:A0 Y:80 P:A5 SP:FB CYC: 31 SL:28 +D409 85 78 STA $78 = 00 A:80 X:A0 Y:80 P:A5 SP:FB CYC: 37 SL:28 +D40B C4 78 CPY $78 = 80 A:80 X:A0 Y:80 P:A5 SP:FB CYC: 46 SL:28 +D40D 20 13 F9 JSR $F913 A:80 X:A0 Y:80 P:27 SP:FB CYC: 55 SL:28 +F913 D0 05 BNE $F91A A:80 X:A0 Y:80 P:27 SP:F9 CYC: 73 SL:28 +F915 30 03 BMI $F91A A:80 X:A0 Y:80 P:27 SP:F9 CYC: 79 SL:28 +F917 90 01 BCC $F91A A:80 X:A0 Y:80 P:27 SP:F9 CYC: 85 SL:28 +F919 60 RTS A:80 X:A0 Y:80 P:27 SP:F9 CYC: 91 SL:28 +D410 E8 INX A:80 X:A0 Y:80 P:27 SP:FB CYC:109 SL:28 +D411 A9 81 LDA #$81 A:80 X:A1 Y:80 P:A5 SP:FB CYC:115 SL:28 +D413 85 78 STA $78 = 80 A:81 X:A1 Y:80 P:A5 SP:FB CYC:121 SL:28 +D415 C4 78 CPY $78 = 81 A:81 X:A1 Y:80 P:A5 SP:FB CYC:130 SL:28 +D417 20 1D F9 JSR $F91D A:81 X:A1 Y:80 P:A4 SP:FB CYC:139 SL:28 +F91D B0 05 BCS $F924 A:81 X:A1 Y:80 P:A4 SP:F9 CYC:157 SL:28 +F91F F0 03 BEQ $F924 A:81 X:A1 Y:80 P:A4 SP:F9 CYC:163 SL:28 +F921 10 01 BPL $F924 A:81 X:A1 Y:80 P:A4 SP:F9 CYC:169 SL:28 +F923 60 RTS A:81 X:A1 Y:80 P:A4 SP:F9 CYC:175 SL:28 +D41A E8 INX A:81 X:A1 Y:80 P:A4 SP:FB CYC:193 SL:28 +D41B A9 7F LDA #$7F A:81 X:A2 Y:80 P:A4 SP:FB CYC:199 SL:28 +D41D 85 78 STA $78 = 81 A:7F X:A2 Y:80 P:24 SP:FB CYC:205 SL:28 +D41F C4 78 CPY $78 = 7F A:7F X:A2 Y:80 P:24 SP:FB CYC:214 SL:28 +D421 20 27 F9 JSR $F927 A:7F X:A2 Y:80 P:25 SP:FB CYC:223 SL:28 +F927 90 05 BCC $F92E A:7F X:A2 Y:80 P:25 SP:F9 CYC:241 SL:28 +F929 F0 03 BEQ $F92E A:7F X:A2 Y:80 P:25 SP:F9 CYC:247 SL:28 +F92B 30 01 BMI $F92E A:7F X:A2 Y:80 P:25 SP:F9 CYC:253 SL:28 +F92D 60 RTS A:7F X:A2 Y:80 P:25 SP:F9 CYC:259 SL:28 +D424 E8 INX A:7F X:A2 Y:80 P:25 SP:FB CYC:277 SL:28 +D425 8A TXA A:7F X:A3 Y:80 P:A5 SP:FB CYC:283 SL:28 +D426 A8 TAY A:A3 X:A3 Y:80 P:A5 SP:FB CYC:289 SL:28 +D427 20 90 F9 JSR $F990 A:A3 X:A3 Y:A3 P:A5 SP:FB CYC:295 SL:28 +F990 A2 55 LDX #$55 A:A3 X:A3 Y:A3 P:A5 SP:F9 CYC:313 SL:28 +F992 A9 FF LDA #$FF A:A3 X:55 Y:A3 P:25 SP:F9 CYC:319 SL:28 +F994 85 01 STA $01 = FF A:FF X:55 Y:A3 P:A5 SP:F9 CYC:325 SL:28 +F996 EA NOP A:FF X:55 Y:A3 P:A5 SP:F9 CYC:334 SL:28 +F997 24 01 BIT $01 = FF A:FF X:55 Y:A3 P:A5 SP:F9 CYC:340 SL:28 +F999 38 SEC A:FF X:55 Y:A3 P:E5 SP:F9 CYC: 8 SL:29 +F99A A9 01 LDA #$01 A:FF X:55 Y:A3 P:E5 SP:F9 CYC: 14 SL:29 +F99C 60 RTS A:01 X:55 Y:A3 P:65 SP:F9 CYC: 20 SL:29 +D42A 85 78 STA $78 = 7F A:01 X:55 Y:A3 P:65 SP:FB CYC: 38 SL:29 +D42C 46 78 LSR $78 = 01 A:01 X:55 Y:A3 P:65 SP:FB CYC: 47 SL:29 +D42E A5 78 LDA $78 = 00 A:01 X:55 Y:A3 P:67 SP:FB CYC: 62 SL:29 +D430 20 9D F9 JSR $F99D A:00 X:55 Y:A3 P:67 SP:FB CYC: 71 SL:29 +F99D 90 1B BCC $F9BA A:00 X:55 Y:A3 P:67 SP:F9 CYC: 89 SL:29 +F99F D0 19 BNE $F9BA A:00 X:55 Y:A3 P:67 SP:F9 CYC: 95 SL:29 +F9A1 30 17 BMI $F9BA A:00 X:55 Y:A3 P:67 SP:F9 CYC:101 SL:29 +F9A3 50 15 BVC $F9BA A:00 X:55 Y:A3 P:67 SP:F9 CYC:107 SL:29 +F9A5 C9 00 CMP #$00 A:00 X:55 Y:A3 P:67 SP:F9 CYC:113 SL:29 +F9A7 D0 11 BNE $F9BA A:00 X:55 Y:A3 P:67 SP:F9 CYC:119 SL:29 +F9A9 B8 CLV A:00 X:55 Y:A3 P:67 SP:F9 CYC:125 SL:29 +F9AA A9 AA LDA #$AA A:00 X:55 Y:A3 P:27 SP:F9 CYC:131 SL:29 +F9AC 60 RTS A:AA X:55 Y:A3 P:A5 SP:F9 CYC:137 SL:29 +D433 C8 INY A:AA X:55 Y:A3 P:A5 SP:FB CYC:155 SL:29 +D434 85 78 STA $78 = 00 A:AA X:55 Y:A4 P:A5 SP:FB CYC:161 SL:29 +D436 46 78 LSR $78 = AA A:AA X:55 Y:A4 P:A5 SP:FB CYC:170 SL:29 +D438 A5 78 LDA $78 = 55 A:AA X:55 Y:A4 P:24 SP:FB CYC:185 SL:29 +D43A 20 AD F9 JSR $F9AD A:55 X:55 Y:A4 P:24 SP:FB CYC:194 SL:29 +F9AD B0 0B BCS $F9BA A:55 X:55 Y:A4 P:24 SP:F9 CYC:212 SL:29 +F9AF F0 09 BEQ $F9BA A:55 X:55 Y:A4 P:24 SP:F9 CYC:218 SL:29 +F9B1 30 07 BMI $F9BA A:55 X:55 Y:A4 P:24 SP:F9 CYC:224 SL:29 +F9B3 70 05 BVS $F9BA A:55 X:55 Y:A4 P:24 SP:F9 CYC:230 SL:29 +F9B5 C9 55 CMP #$55 A:55 X:55 Y:A4 P:24 SP:F9 CYC:236 SL:29 +F9B7 D0 01 BNE $F9BA A:55 X:55 Y:A4 P:27 SP:F9 CYC:242 SL:29 +F9B9 60 RTS A:55 X:55 Y:A4 P:27 SP:F9 CYC:248 SL:29 +D43D C8 INY A:55 X:55 Y:A4 P:27 SP:FB CYC:266 SL:29 +D43E 20 BD F9 JSR $F9BD A:55 X:55 Y:A5 P:A5 SP:FB CYC:272 SL:29 +F9BD 24 01 BIT $01 = FF A:55 X:55 Y:A5 P:A5 SP:F9 CYC:290 SL:29 +F9BF 38 SEC A:55 X:55 Y:A5 P:E5 SP:F9 CYC:299 SL:29 +F9C0 A9 80 LDA #$80 A:55 X:55 Y:A5 P:E5 SP:F9 CYC:305 SL:29 +F9C2 60 RTS A:80 X:55 Y:A5 P:E5 SP:F9 CYC:311 SL:29 +D441 85 78 STA $78 = 55 A:80 X:55 Y:A5 P:E5 SP:FB CYC:329 SL:29 +D443 06 78 ASL $78 = 80 A:80 X:55 Y:A5 P:E5 SP:FB CYC:338 SL:29 +D445 A5 78 LDA $78 = 00 A:80 X:55 Y:A5 P:67 SP:FB CYC: 12 SL:30 +D447 20 C3 F9 JSR $F9C3 A:00 X:55 Y:A5 P:67 SP:FB CYC: 21 SL:30 +F9C3 90 1C BCC $F9E1 A:00 X:55 Y:A5 P:67 SP:F9 CYC: 39 SL:30 +F9C5 D0 1A BNE $F9E1 A:00 X:55 Y:A5 P:67 SP:F9 CYC: 45 SL:30 +F9C7 30 18 BMI $F9E1 A:00 X:55 Y:A5 P:67 SP:F9 CYC: 51 SL:30 +F9C9 50 16 BVC $F9E1 A:00 X:55 Y:A5 P:67 SP:F9 CYC: 57 SL:30 +F9CB C9 00 CMP #$00 A:00 X:55 Y:A5 P:67 SP:F9 CYC: 63 SL:30 +F9CD D0 12 BNE $F9E1 A:00 X:55 Y:A5 P:67 SP:F9 CYC: 69 SL:30 +F9CF B8 CLV A:00 X:55 Y:A5 P:67 SP:F9 CYC: 75 SL:30 +F9D0 A9 55 LDA #$55 A:00 X:55 Y:A5 P:27 SP:F9 CYC: 81 SL:30 +F9D2 38 SEC A:55 X:55 Y:A5 P:25 SP:F9 CYC: 87 SL:30 +F9D3 60 RTS A:55 X:55 Y:A5 P:25 SP:F9 CYC: 93 SL:30 +D44A C8 INY A:55 X:55 Y:A5 P:25 SP:FB CYC:111 SL:30 +D44B 85 78 STA $78 = 00 A:55 X:55 Y:A6 P:A5 SP:FB CYC:117 SL:30 +D44D 06 78 ASL $78 = 55 A:55 X:55 Y:A6 P:A5 SP:FB CYC:126 SL:30 +D44F A5 78 LDA $78 = AA A:55 X:55 Y:A6 P:A4 SP:FB CYC:141 SL:30 +D451 20 D4 F9 JSR $F9D4 A:AA X:55 Y:A6 P:A4 SP:FB CYC:150 SL:30 +F9D4 B0 0B BCS $F9E1 A:AA X:55 Y:A6 P:A4 SP:F9 CYC:168 SL:30 +F9D6 F0 09 BEQ $F9E1 A:AA X:55 Y:A6 P:A4 SP:F9 CYC:174 SL:30 +F9D8 10 07 BPL $F9E1 A:AA X:55 Y:A6 P:A4 SP:F9 CYC:180 SL:30 +F9DA 70 05 BVS $F9E1 A:AA X:55 Y:A6 P:A4 SP:F9 CYC:186 SL:30 +F9DC C9 AA CMP #$AA A:AA X:55 Y:A6 P:A4 SP:F9 CYC:192 SL:30 +F9DE D0 01 BNE $F9E1 A:AA X:55 Y:A6 P:27 SP:F9 CYC:198 SL:30 +F9E0 60 RTS A:AA X:55 Y:A6 P:27 SP:F9 CYC:204 SL:30 +D454 C8 INY A:AA X:55 Y:A6 P:27 SP:FB CYC:222 SL:30 +D455 20 E4 F9 JSR $F9E4 A:AA X:55 Y:A7 P:A5 SP:FB CYC:228 SL:30 +F9E4 24 01 BIT $01 = FF A:AA X:55 Y:A7 P:A5 SP:F9 CYC:246 SL:30 +F9E6 38 SEC A:AA X:55 Y:A7 P:E5 SP:F9 CYC:255 SL:30 +F9E7 A9 01 LDA #$01 A:AA X:55 Y:A7 P:E5 SP:F9 CYC:261 SL:30 +F9E9 60 RTS A:01 X:55 Y:A7 P:65 SP:F9 CYC:267 SL:30 +D458 85 78 STA $78 = AA A:01 X:55 Y:A7 P:65 SP:FB CYC:285 SL:30 +D45A 66 78 ROR $78 = 01 A:01 X:55 Y:A7 P:65 SP:FB CYC:294 SL:30 +D45C A5 78 LDA $78 = 80 A:01 X:55 Y:A7 P:E5 SP:FB CYC:309 SL:30 +D45E 20 EA F9 JSR $F9EA A:80 X:55 Y:A7 P:E5 SP:FB CYC:318 SL:30 +F9EA 90 1C BCC $FA08 A:80 X:55 Y:A7 P:E5 SP:F9 CYC:336 SL:30 +F9EC F0 1A BEQ $FA08 A:80 X:55 Y:A7 P:E5 SP:F9 CYC: 1 SL:31 +F9EE 10 18 BPL $FA08 A:80 X:55 Y:A7 P:E5 SP:F9 CYC: 7 SL:31 +F9F0 50 16 BVC $FA08 A:80 X:55 Y:A7 P:E5 SP:F9 CYC: 13 SL:31 +F9F2 C9 80 CMP #$80 A:80 X:55 Y:A7 P:E5 SP:F9 CYC: 19 SL:31 +F9F4 D0 12 BNE $FA08 A:80 X:55 Y:A7 P:67 SP:F9 CYC: 25 SL:31 +F9F6 B8 CLV A:80 X:55 Y:A7 P:67 SP:F9 CYC: 31 SL:31 +F9F7 18 CLC A:80 X:55 Y:A7 P:27 SP:F9 CYC: 37 SL:31 +F9F8 A9 55 LDA #$55 A:80 X:55 Y:A7 P:26 SP:F9 CYC: 43 SL:31 +F9FA 60 RTS A:55 X:55 Y:A7 P:24 SP:F9 CYC: 49 SL:31 +D461 C8 INY A:55 X:55 Y:A7 P:24 SP:FB CYC: 67 SL:31 +D462 85 78 STA $78 = 80 A:55 X:55 Y:A8 P:A4 SP:FB CYC: 73 SL:31 +D464 66 78 ROR $78 = 55 A:55 X:55 Y:A8 P:A4 SP:FB CYC: 82 SL:31 +D466 A5 78 LDA $78 = 2A A:55 X:55 Y:A8 P:25 SP:FB CYC: 97 SL:31 +D468 20 FB F9 JSR $F9FB A:2A X:55 Y:A8 P:25 SP:FB CYC:106 SL:31 +F9FB 90 0B BCC $FA08 A:2A X:55 Y:A8 P:25 SP:F9 CYC:124 SL:31 +F9FD F0 09 BEQ $FA08 A:2A X:55 Y:A8 P:25 SP:F9 CYC:130 SL:31 +F9FF 30 07 BMI $FA08 A:2A X:55 Y:A8 P:25 SP:F9 CYC:136 SL:31 +FA01 70 05 BVS $FA08 A:2A X:55 Y:A8 P:25 SP:F9 CYC:142 SL:31 +FA03 C9 2A CMP #$2A A:2A X:55 Y:A8 P:25 SP:F9 CYC:148 SL:31 +FA05 D0 01 BNE $FA08 A:2A X:55 Y:A8 P:27 SP:F9 CYC:154 SL:31 +FA07 60 RTS A:2A X:55 Y:A8 P:27 SP:F9 CYC:160 SL:31 +D46B C8 INY A:2A X:55 Y:A8 P:27 SP:FB CYC:178 SL:31 +D46C 20 0A FA JSR $FA0A A:2A X:55 Y:A9 P:A5 SP:FB CYC:184 SL:31 +FA0A 24 01 BIT $01 = FF A:2A X:55 Y:A9 P:A5 SP:F9 CYC:202 SL:31 +FA0C 38 SEC A:2A X:55 Y:A9 P:E5 SP:F9 CYC:211 SL:31 +FA0D A9 80 LDA #$80 A:2A X:55 Y:A9 P:E5 SP:F9 CYC:217 SL:31 +FA0F 60 RTS A:80 X:55 Y:A9 P:E5 SP:F9 CYC:223 SL:31 +D46F 85 78 STA $78 = 2A A:80 X:55 Y:A9 P:E5 SP:FB CYC:241 SL:31 +D471 26 78 ROL $78 = 80 A:80 X:55 Y:A9 P:E5 SP:FB CYC:250 SL:31 +D473 A5 78 LDA $78 = 01 A:80 X:55 Y:A9 P:65 SP:FB CYC:265 SL:31 +D475 20 10 FA JSR $FA10 A:01 X:55 Y:A9 P:65 SP:FB CYC:274 SL:31 +FA10 90 1C BCC $FA2E A:01 X:55 Y:A9 P:65 SP:F9 CYC:292 SL:31 +FA12 F0 1A BEQ $FA2E A:01 X:55 Y:A9 P:65 SP:F9 CYC:298 SL:31 +FA14 30 18 BMI $FA2E A:01 X:55 Y:A9 P:65 SP:F9 CYC:304 SL:31 +FA16 50 16 BVC $FA2E A:01 X:55 Y:A9 P:65 SP:F9 CYC:310 SL:31 +FA18 C9 01 CMP #$01 A:01 X:55 Y:A9 P:65 SP:F9 CYC:316 SL:31 +FA1A D0 12 BNE $FA2E A:01 X:55 Y:A9 P:67 SP:F9 CYC:322 SL:31 +FA1C B8 CLV A:01 X:55 Y:A9 P:67 SP:F9 CYC:328 SL:31 +FA1D 18 CLC A:01 X:55 Y:A9 P:27 SP:F9 CYC:334 SL:31 +FA1E A9 55 LDA #$55 A:01 X:55 Y:A9 P:26 SP:F9 CYC:340 SL:31 +FA20 60 RTS A:55 X:55 Y:A9 P:24 SP:F9 CYC: 5 SL:32 +D478 C8 INY A:55 X:55 Y:A9 P:24 SP:FB CYC: 23 SL:32 +D479 85 78 STA $78 = 01 A:55 X:55 Y:AA P:A4 SP:FB CYC: 29 SL:32 +D47B 26 78 ROL $78 = 55 A:55 X:55 Y:AA P:A4 SP:FB CYC: 38 SL:32 +D47D A5 78 LDA $78 = AA A:55 X:55 Y:AA P:A4 SP:FB CYC: 53 SL:32 +D47F 20 21 FA JSR $FA21 A:AA X:55 Y:AA P:A4 SP:FB CYC: 62 SL:32 +FA21 B0 0B BCS $FA2E A:AA X:55 Y:AA P:A4 SP:F9 CYC: 80 SL:32 +FA23 F0 09 BEQ $FA2E A:AA X:55 Y:AA P:A4 SP:F9 CYC: 86 SL:32 +FA25 10 07 BPL $FA2E A:AA X:55 Y:AA P:A4 SP:F9 CYC: 92 SL:32 +FA27 70 05 BVS $FA2E A:AA X:55 Y:AA P:A4 SP:F9 CYC: 98 SL:32 +FA29 C9 AA CMP #$AA A:AA X:55 Y:AA P:A4 SP:F9 CYC:104 SL:32 +FA2B D0 01 BNE $FA2E A:AA X:55 Y:AA P:27 SP:F9 CYC:110 SL:32 +FA2D 60 RTS A:AA X:55 Y:AA P:27 SP:F9 CYC:116 SL:32 +D482 A9 FF LDA #$FF A:AA X:55 Y:AA P:27 SP:FB CYC:134 SL:32 +D484 85 78 STA $78 = AA A:FF X:55 Y:AA P:A5 SP:FB CYC:140 SL:32 +D486 85 01 STA $01 = FF A:FF X:55 Y:AA P:A5 SP:FB CYC:149 SL:32 +D488 24 01 BIT $01 = FF A:FF X:55 Y:AA P:A5 SP:FB CYC:158 SL:32 +D48A 38 SEC A:FF X:55 Y:AA P:E5 SP:FB CYC:167 SL:32 +D48B E6 78 INC $78 = FF A:FF X:55 Y:AA P:E5 SP:FB CYC:173 SL:32 +D48D D0 0C BNE $D49B A:FF X:55 Y:AA P:67 SP:FB CYC:188 SL:32 +D48F 30 0A BMI $D49B A:FF X:55 Y:AA P:67 SP:FB CYC:194 SL:32 +D491 50 08 BVC $D49B A:FF X:55 Y:AA P:67 SP:FB CYC:200 SL:32 +D493 90 06 BCC $D49B A:FF X:55 Y:AA P:67 SP:FB CYC:206 SL:32 +D495 A5 78 LDA $78 = 00 A:FF X:55 Y:AA P:67 SP:FB CYC:212 SL:32 +D497 C9 00 CMP #$00 A:00 X:55 Y:AA P:67 SP:FB CYC:221 SL:32 +D499 F0 04 BEQ $D49F A:00 X:55 Y:AA P:67 SP:FB CYC:227 SL:32 +D49F A9 7F LDA #$7F A:00 X:55 Y:AA P:67 SP:FB CYC:236 SL:32 +D4A1 85 78 STA $78 = 00 A:7F X:55 Y:AA P:65 SP:FB CYC:242 SL:32 +D4A3 B8 CLV A:7F X:55 Y:AA P:65 SP:FB CYC:251 SL:32 +D4A4 18 CLC A:7F X:55 Y:AA P:25 SP:FB CYC:257 SL:32 +D4A5 E6 78 INC $78 = 7F A:7F X:55 Y:AA P:24 SP:FB CYC:263 SL:32 +D4A7 F0 0C BEQ $D4B5 A:7F X:55 Y:AA P:A4 SP:FB CYC:278 SL:32 +D4A9 10 0A BPL $D4B5 A:7F X:55 Y:AA P:A4 SP:FB CYC:284 SL:32 +D4AB 70 08 BVS $D4B5 A:7F X:55 Y:AA P:A4 SP:FB CYC:290 SL:32 +D4AD B0 06 BCS $D4B5 A:7F X:55 Y:AA P:A4 SP:FB CYC:296 SL:32 +D4AF A5 78 LDA $78 = 80 A:7F X:55 Y:AA P:A4 SP:FB CYC:302 SL:32 +D4B1 C9 80 CMP #$80 A:80 X:55 Y:AA P:A4 SP:FB CYC:311 SL:32 +D4B3 F0 04 BEQ $D4B9 A:80 X:55 Y:AA P:27 SP:FB CYC:317 SL:32 +D4B9 A9 00 LDA #$00 A:80 X:55 Y:AA P:27 SP:FB CYC:326 SL:32 +D4BB 85 78 STA $78 = 80 A:00 X:55 Y:AA P:27 SP:FB CYC:332 SL:32 +D4BD 24 01 BIT $01 = FF A:00 X:55 Y:AA P:27 SP:FB CYC: 0 SL:33 +D4BF 38 SEC A:00 X:55 Y:AA P:E7 SP:FB CYC: 9 SL:33 +D4C0 C6 78 DEC $78 = 00 A:00 X:55 Y:AA P:E7 SP:FB CYC: 15 SL:33 +D4C2 F0 0C BEQ $D4D0 A:00 X:55 Y:AA P:E5 SP:FB CYC: 30 SL:33 +D4C4 10 0A BPL $D4D0 A:00 X:55 Y:AA P:E5 SP:FB CYC: 36 SL:33 +D4C6 50 08 BVC $D4D0 A:00 X:55 Y:AA P:E5 SP:FB CYC: 42 SL:33 +D4C8 90 06 BCC $D4D0 A:00 X:55 Y:AA P:E5 SP:FB CYC: 48 SL:33 +D4CA A5 78 LDA $78 = FF A:00 X:55 Y:AA P:E5 SP:FB CYC: 54 SL:33 +D4CC C9 FF CMP #$FF A:FF X:55 Y:AA P:E5 SP:FB CYC: 63 SL:33 +D4CE F0 04 BEQ $D4D4 A:FF X:55 Y:AA P:67 SP:FB CYC: 69 SL:33 +D4D4 A9 80 LDA #$80 A:FF X:55 Y:AA P:67 SP:FB CYC: 78 SL:33 +D4D6 85 78 STA $78 = FF A:80 X:55 Y:AA P:E5 SP:FB CYC: 84 SL:33 +D4D8 B8 CLV A:80 X:55 Y:AA P:E5 SP:FB CYC: 93 SL:33 +D4D9 18 CLC A:80 X:55 Y:AA P:A5 SP:FB CYC: 99 SL:33 +D4DA C6 78 DEC $78 = 80 A:80 X:55 Y:AA P:A4 SP:FB CYC:105 SL:33 +D4DC F0 0C BEQ $D4EA A:80 X:55 Y:AA P:24 SP:FB CYC:120 SL:33 +D4DE 30 0A BMI $D4EA A:80 X:55 Y:AA P:24 SP:FB CYC:126 SL:33 +D4E0 70 08 BVS $D4EA A:80 X:55 Y:AA P:24 SP:FB CYC:132 SL:33 +D4E2 B0 06 BCS $D4EA A:80 X:55 Y:AA P:24 SP:FB CYC:138 SL:33 +D4E4 A5 78 LDA $78 = 7F A:80 X:55 Y:AA P:24 SP:FB CYC:144 SL:33 +D4E6 C9 7F CMP #$7F A:7F X:55 Y:AA P:24 SP:FB CYC:153 SL:33 +D4E8 F0 04 BEQ $D4EE A:7F X:55 Y:AA P:27 SP:FB CYC:159 SL:33 +D4EE A9 01 LDA #$01 A:7F X:55 Y:AA P:27 SP:FB CYC:168 SL:33 +D4F0 85 78 STA $78 = 7F A:01 X:55 Y:AA P:25 SP:FB CYC:174 SL:33 +D4F2 C6 78 DEC $78 = 01 A:01 X:55 Y:AA P:25 SP:FB CYC:183 SL:33 +D4F4 F0 04 BEQ $D4FA A:01 X:55 Y:AA P:27 SP:FB CYC:198 SL:33 +D4FA 60 RTS A:01 X:55 Y:AA P:27 SP:FB CYC:207 SL:33 +C615 20 FB D4 JSR $D4FB A:01 X:55 Y:AA P:27 SP:FD CYC:225 SL:33 +D4FB A9 55 LDA #$55 A:01 X:55 Y:AA P:27 SP:FB CYC:243 SL:33 +D4FD 8D 78 06 STA $0678 = 00 A:55 X:55 Y:AA P:25 SP:FB CYC:249 SL:33 +D500 A9 FF LDA #$FF A:55 X:55 Y:AA P:25 SP:FB CYC:261 SL:33 +D502 85 01 STA $01 = FF A:FF X:55 Y:AA P:A5 SP:FB CYC:267 SL:33 +D504 24 01 BIT $01 = FF A:FF X:55 Y:AA P:A5 SP:FB CYC:276 SL:33 +D506 A0 11 LDY #$11 A:FF X:55 Y:AA P:E5 SP:FB CYC:285 SL:33 +D508 A2 23 LDX #$23 A:FF X:55 Y:11 P:65 SP:FB CYC:291 SL:33 +D50A A9 00 LDA #$00 A:FF X:23 Y:11 P:65 SP:FB CYC:297 SL:33 +D50C AD 78 06 LDA $0678 = 55 A:00 X:23 Y:11 P:67 SP:FB CYC:303 SL:33 +D50F F0 10 BEQ $D521 A:55 X:23 Y:11 P:65 SP:FB CYC:315 SL:33 +D511 30 0E BMI $D521 A:55 X:23 Y:11 P:65 SP:FB CYC:321 SL:33 +D513 C9 55 CMP #$55 A:55 X:23 Y:11 P:65 SP:FB CYC:327 SL:33 +D515 D0 0A BNE $D521 A:55 X:23 Y:11 P:67 SP:FB CYC:333 SL:33 +D517 C0 11 CPY #$11 A:55 X:23 Y:11 P:67 SP:FB CYC:339 SL:33 +D519 D0 06 BNE $D521 A:55 X:23 Y:11 P:67 SP:FB CYC: 4 SL:34 +D51B E0 23 CPX #$23 A:55 X:23 Y:11 P:67 SP:FB CYC: 10 SL:34 +D51D 50 02 BVC $D521 A:55 X:23 Y:11 P:67 SP:FB CYC: 16 SL:34 +D51F F0 04 BEQ $D525 A:55 X:23 Y:11 P:67 SP:FB CYC: 22 SL:34 +D525 A9 46 LDA #$46 A:55 X:23 Y:11 P:67 SP:FB CYC: 31 SL:34 +D527 24 01 BIT $01 = FF A:46 X:23 Y:11 P:65 SP:FB CYC: 37 SL:34 +D529 8D 78 06 STA $0678 = 55 A:46 X:23 Y:11 P:E5 SP:FB CYC: 46 SL:34 +D52C F0 0B BEQ $D539 A:46 X:23 Y:11 P:E5 SP:FB CYC: 58 SL:34 +D52E 10 09 BPL $D539 A:46 X:23 Y:11 P:E5 SP:FB CYC: 64 SL:34 +D530 50 07 BVC $D539 A:46 X:23 Y:11 P:E5 SP:FB CYC: 70 SL:34 +D532 AD 78 06 LDA $0678 = 46 A:46 X:23 Y:11 P:E5 SP:FB CYC: 76 SL:34 +D535 C9 46 CMP #$46 A:46 X:23 Y:11 P:65 SP:FB CYC: 88 SL:34 +D537 F0 04 BEQ $D53D A:46 X:23 Y:11 P:67 SP:FB CYC: 94 SL:34 +D53D A9 55 LDA #$55 A:46 X:23 Y:11 P:67 SP:FB CYC:103 SL:34 +D53F 8D 78 06 STA $0678 = 46 A:55 X:23 Y:11 P:65 SP:FB CYC:109 SL:34 +D542 24 01 BIT $01 = FF A:55 X:23 Y:11 P:65 SP:FB CYC:121 SL:34 +D544 A9 11 LDA #$11 A:55 X:23 Y:11 P:E5 SP:FB CYC:130 SL:34 +D546 A2 23 LDX #$23 A:11 X:23 Y:11 P:65 SP:FB CYC:136 SL:34 +D548 A0 00 LDY #$00 A:11 X:23 Y:11 P:65 SP:FB CYC:142 SL:34 +D54A AC 78 06 LDY $0678 = 55 A:11 X:23 Y:00 P:67 SP:FB CYC:148 SL:34 +D54D F0 10 BEQ $D55F A:11 X:23 Y:55 P:65 SP:FB CYC:160 SL:34 +D54F 30 0E BMI $D55F A:11 X:23 Y:55 P:65 SP:FB CYC:166 SL:34 +D551 C0 55 CPY #$55 A:11 X:23 Y:55 P:65 SP:FB CYC:172 SL:34 +D553 D0 0A BNE $D55F A:11 X:23 Y:55 P:67 SP:FB CYC:178 SL:34 +D555 C9 11 CMP #$11 A:11 X:23 Y:55 P:67 SP:FB CYC:184 SL:34 +D557 D0 06 BNE $D55F A:11 X:23 Y:55 P:67 SP:FB CYC:190 SL:34 +D559 E0 23 CPX #$23 A:11 X:23 Y:55 P:67 SP:FB CYC:196 SL:34 +D55B 50 02 BVC $D55F A:11 X:23 Y:55 P:67 SP:FB CYC:202 SL:34 +D55D F0 04 BEQ $D563 A:11 X:23 Y:55 P:67 SP:FB CYC:208 SL:34 +D563 A0 46 LDY #$46 A:11 X:23 Y:55 P:67 SP:FB CYC:217 SL:34 +D565 24 01 BIT $01 = FF A:11 X:23 Y:46 P:65 SP:FB CYC:223 SL:34 +D567 8C 78 06 STY $0678 = 55 A:11 X:23 Y:46 P:E5 SP:FB CYC:232 SL:34 +D56A F0 0B BEQ $D577 A:11 X:23 Y:46 P:E5 SP:FB CYC:244 SL:34 +D56C 10 09 BPL $D577 A:11 X:23 Y:46 P:E5 SP:FB CYC:250 SL:34 +D56E 50 07 BVC $D577 A:11 X:23 Y:46 P:E5 SP:FB CYC:256 SL:34 +D570 AC 78 06 LDY $0678 = 46 A:11 X:23 Y:46 P:E5 SP:FB CYC:262 SL:34 +D573 C0 46 CPY #$46 A:11 X:23 Y:46 P:65 SP:FB CYC:274 SL:34 +D575 F0 04 BEQ $D57B A:11 X:23 Y:46 P:67 SP:FB CYC:280 SL:34 +D57B 24 01 BIT $01 = FF A:11 X:23 Y:46 P:67 SP:FB CYC:289 SL:34 +D57D A9 55 LDA #$55 A:11 X:23 Y:46 P:E5 SP:FB CYC:298 SL:34 +D57F 8D 78 06 STA $0678 = 46 A:55 X:23 Y:46 P:65 SP:FB CYC:304 SL:34 +D582 A0 11 LDY #$11 A:55 X:23 Y:46 P:65 SP:FB CYC:316 SL:34 +D584 A9 23 LDA #$23 A:55 X:23 Y:11 P:65 SP:FB CYC:322 SL:34 +D586 A2 00 LDX #$00 A:23 X:23 Y:11 P:65 SP:FB CYC:328 SL:34 +D588 AE 78 06 LDX $0678 = 55 A:23 X:00 Y:11 P:67 SP:FB CYC:334 SL:34 +D58B F0 10 BEQ $D59D A:23 X:55 Y:11 P:65 SP:FB CYC: 5 SL:35 +D58D 30 0E BMI $D59D A:23 X:55 Y:11 P:65 SP:FB CYC: 11 SL:35 +D58F E0 55 CPX #$55 A:23 X:55 Y:11 P:65 SP:FB CYC: 17 SL:35 +D591 D0 0A BNE $D59D A:23 X:55 Y:11 P:67 SP:FB CYC: 23 SL:35 +D593 C0 11 CPY #$11 A:23 X:55 Y:11 P:67 SP:FB CYC: 29 SL:35 +D595 D0 06 BNE $D59D A:23 X:55 Y:11 P:67 SP:FB CYC: 35 SL:35 +D597 C9 23 CMP #$23 A:23 X:55 Y:11 P:67 SP:FB CYC: 41 SL:35 +D599 50 02 BVC $D59D A:23 X:55 Y:11 P:67 SP:FB CYC: 47 SL:35 +D59B F0 04 BEQ $D5A1 A:23 X:55 Y:11 P:67 SP:FB CYC: 53 SL:35 +D5A1 A2 46 LDX #$46 A:23 X:55 Y:11 P:67 SP:FB CYC: 62 SL:35 +D5A3 24 01 BIT $01 = FF A:23 X:46 Y:11 P:65 SP:FB CYC: 68 SL:35 +D5A5 8E 78 06 STX $0678 = 55 A:23 X:46 Y:11 P:E5 SP:FB CYC: 77 SL:35 +D5A8 F0 0B BEQ $D5B5 A:23 X:46 Y:11 P:E5 SP:FB CYC: 89 SL:35 +D5AA 10 09 BPL $D5B5 A:23 X:46 Y:11 P:E5 SP:FB CYC: 95 SL:35 +D5AC 50 07 BVC $D5B5 A:23 X:46 Y:11 P:E5 SP:FB CYC:101 SL:35 +D5AE AE 78 06 LDX $0678 = 46 A:23 X:46 Y:11 P:E5 SP:FB CYC:107 SL:35 +D5B1 E0 46 CPX #$46 A:23 X:46 Y:11 P:65 SP:FB CYC:119 SL:35 +D5B3 F0 04 BEQ $D5B9 A:23 X:46 Y:11 P:67 SP:FB CYC:125 SL:35 +D5B9 A9 C0 LDA #$C0 A:23 X:46 Y:11 P:67 SP:FB CYC:134 SL:35 +D5BB 8D 78 06 STA $0678 = 46 A:C0 X:46 Y:11 P:E5 SP:FB CYC:140 SL:35 +D5BE A2 33 LDX #$33 A:C0 X:46 Y:11 P:E5 SP:FB CYC:152 SL:35 +D5C0 A0 88 LDY #$88 A:C0 X:33 Y:11 P:65 SP:FB CYC:158 SL:35 +D5C2 A9 05 LDA #$05 A:C0 X:33 Y:88 P:E5 SP:FB CYC:164 SL:35 +D5C4 2C 78 06 BIT $0678 = C0 A:05 X:33 Y:88 P:65 SP:FB CYC:170 SL:35 +D5C7 10 10 BPL $D5D9 A:05 X:33 Y:88 P:E7 SP:FB CYC:182 SL:35 +D5C9 50 0E BVC $D5D9 A:05 X:33 Y:88 P:E7 SP:FB CYC:188 SL:35 +D5CB D0 0C BNE $D5D9 A:05 X:33 Y:88 P:E7 SP:FB CYC:194 SL:35 +D5CD C9 05 CMP #$05 A:05 X:33 Y:88 P:E7 SP:FB CYC:200 SL:35 +D5CF D0 08 BNE $D5D9 A:05 X:33 Y:88 P:67 SP:FB CYC:206 SL:35 +D5D1 E0 33 CPX #$33 A:05 X:33 Y:88 P:67 SP:FB CYC:212 SL:35 +D5D3 D0 04 BNE $D5D9 A:05 X:33 Y:88 P:67 SP:FB CYC:218 SL:35 +D5D5 C0 88 CPY #$88 A:05 X:33 Y:88 P:67 SP:FB CYC:224 SL:35 +D5D7 F0 04 BEQ $D5DD A:05 X:33 Y:88 P:67 SP:FB CYC:230 SL:35 +D5DD A9 03 LDA #$03 A:05 X:33 Y:88 P:67 SP:FB CYC:239 SL:35 +D5DF 8D 78 06 STA $0678 = C0 A:03 X:33 Y:88 P:65 SP:FB CYC:245 SL:35 +D5E2 A9 01 LDA #$01 A:03 X:33 Y:88 P:65 SP:FB CYC:257 SL:35 +D5E4 2C 78 06 BIT $0678 = 03 A:01 X:33 Y:88 P:65 SP:FB CYC:263 SL:35 +D5E7 30 08 BMI $D5F1 A:01 X:33 Y:88 P:25 SP:FB CYC:275 SL:35 +D5E9 70 06 BVS $D5F1 A:01 X:33 Y:88 P:25 SP:FB CYC:281 SL:35 +D5EB F0 04 BEQ $D5F1 A:01 X:33 Y:88 P:25 SP:FB CYC:287 SL:35 +D5ED C9 01 CMP #$01 A:01 X:33 Y:88 P:25 SP:FB CYC:293 SL:35 +D5EF F0 04 BEQ $D5F5 A:01 X:33 Y:88 P:27 SP:FB CYC:299 SL:35 +D5F5 A0 B8 LDY #$B8 A:01 X:33 Y:88 P:27 SP:FB CYC:308 SL:35 +D5F7 A9 AA LDA #$AA A:01 X:33 Y:B8 P:A5 SP:FB CYC:314 SL:35 +D5F9 8D 78 06 STA $0678 = 03 A:AA X:33 Y:B8 P:A5 SP:FB CYC:320 SL:35 +D5FC 20 B6 F7 JSR $F7B6 A:AA X:33 Y:B8 P:A5 SP:FB CYC:332 SL:35 +F7B6 18 CLC A:AA X:33 Y:B8 P:A5 SP:F9 CYC: 9 SL:36 +F7B7 A9 FF LDA #$FF A:AA X:33 Y:B8 P:A4 SP:F9 CYC: 15 SL:36 +F7B9 85 01 STA $01 = FF A:FF X:33 Y:B8 P:A4 SP:F9 CYC: 21 SL:36 +F7BB 24 01 BIT $01 = FF A:FF X:33 Y:B8 P:A4 SP:F9 CYC: 30 SL:36 +F7BD A9 55 LDA #$55 A:FF X:33 Y:B8 P:E4 SP:F9 CYC: 39 SL:36 +F7BF 60 RTS A:55 X:33 Y:B8 P:64 SP:F9 CYC: 45 SL:36 +D5FF 0D 78 06 ORA $0678 = AA A:55 X:33 Y:B8 P:64 SP:FB CYC: 63 SL:36 +D602 20 C0 F7 JSR $F7C0 A:FF X:33 Y:B8 P:E4 SP:FB CYC: 75 SL:36 +F7C0 B0 09 BCS $F7CB A:FF X:33 Y:B8 P:E4 SP:F9 CYC: 93 SL:36 +F7C2 10 07 BPL $F7CB A:FF X:33 Y:B8 P:E4 SP:F9 CYC: 99 SL:36 +F7C4 C9 FF CMP #$FF A:FF X:33 Y:B8 P:E4 SP:F9 CYC:105 SL:36 +F7C6 D0 03 BNE $F7CB A:FF X:33 Y:B8 P:67 SP:F9 CYC:111 SL:36 +F7C8 50 01 BVC $F7CB A:FF X:33 Y:B8 P:67 SP:F9 CYC:117 SL:36 +F7CA 60 RTS A:FF X:33 Y:B8 P:67 SP:F9 CYC:123 SL:36 +D605 C8 INY A:FF X:33 Y:B8 P:67 SP:FB CYC:141 SL:36 +D606 A9 00 LDA #$00 A:FF X:33 Y:B9 P:E5 SP:FB CYC:147 SL:36 +D608 8D 78 06 STA $0678 = AA A:00 X:33 Y:B9 P:67 SP:FB CYC:153 SL:36 +D60B 20 CE F7 JSR $F7CE A:00 X:33 Y:B9 P:67 SP:FB CYC:165 SL:36 +F7CE 38 SEC A:00 X:33 Y:B9 P:67 SP:F9 CYC:183 SL:36 +F7CF B8 CLV A:00 X:33 Y:B9 P:67 SP:F9 CYC:189 SL:36 +F7D0 A9 00 LDA #$00 A:00 X:33 Y:B9 P:27 SP:F9 CYC:195 SL:36 +F7D2 60 RTS A:00 X:33 Y:B9 P:27 SP:F9 CYC:201 SL:36 +D60E 0D 78 06 ORA $0678 = 00 A:00 X:33 Y:B9 P:27 SP:FB CYC:219 SL:36 +D611 20 D3 F7 JSR $F7D3 A:00 X:33 Y:B9 P:27 SP:FB CYC:231 SL:36 +F7D3 D0 07 BNE $F7DC A:00 X:33 Y:B9 P:27 SP:F9 CYC:249 SL:36 +F7D5 70 05 BVS $F7DC A:00 X:33 Y:B9 P:27 SP:F9 CYC:255 SL:36 +F7D7 90 03 BCC $F7DC A:00 X:33 Y:B9 P:27 SP:F9 CYC:261 SL:36 +F7D9 30 01 BMI $F7DC A:00 X:33 Y:B9 P:27 SP:F9 CYC:267 SL:36 +F7DB 60 RTS A:00 X:33 Y:B9 P:27 SP:F9 CYC:273 SL:36 +D614 C8 INY A:00 X:33 Y:B9 P:27 SP:FB CYC:291 SL:36 +D615 A9 AA LDA #$AA A:00 X:33 Y:BA P:A5 SP:FB CYC:297 SL:36 +D617 8D 78 06 STA $0678 = 00 A:AA X:33 Y:BA P:A5 SP:FB CYC:303 SL:36 +D61A 20 DF F7 JSR $F7DF A:AA X:33 Y:BA P:A5 SP:FB CYC:315 SL:36 +F7DF 18 CLC A:AA X:33 Y:BA P:A5 SP:F9 CYC:333 SL:36 +F7E0 24 01 BIT $01 = FF A:AA X:33 Y:BA P:A4 SP:F9 CYC:339 SL:36 +F7E2 A9 55 LDA #$55 A:AA X:33 Y:BA P:E4 SP:F9 CYC: 7 SL:37 +F7E4 60 RTS A:55 X:33 Y:BA P:64 SP:F9 CYC: 13 SL:37 +D61D 2D 78 06 AND $0678 = AA A:55 X:33 Y:BA P:64 SP:FB CYC: 31 SL:37 +D620 20 E5 F7 JSR $F7E5 A:00 X:33 Y:BA P:66 SP:FB CYC: 43 SL:37 +F7E5 D0 07 BNE $F7EE A:00 X:33 Y:BA P:66 SP:F9 CYC: 61 SL:37 +F7E7 50 05 BVC $F7EE A:00 X:33 Y:BA P:66 SP:F9 CYC: 67 SL:37 +F7E9 B0 03 BCS $F7EE A:00 X:33 Y:BA P:66 SP:F9 CYC: 73 SL:37 +F7EB 30 01 BMI $F7EE A:00 X:33 Y:BA P:66 SP:F9 CYC: 79 SL:37 +F7ED 60 RTS A:00 X:33 Y:BA P:66 SP:F9 CYC: 85 SL:37 +D623 C8 INY A:00 X:33 Y:BA P:66 SP:FB CYC:103 SL:37 +D624 A9 EF LDA #$EF A:00 X:33 Y:BB P:E4 SP:FB CYC:109 SL:37 +D626 8D 78 06 STA $0678 = AA A:EF X:33 Y:BB P:E4 SP:FB CYC:115 SL:37 +D629 20 F1 F7 JSR $F7F1 A:EF X:33 Y:BB P:E4 SP:FB CYC:127 SL:37 +F7F1 38 SEC A:EF X:33 Y:BB P:E4 SP:F9 CYC:145 SL:37 +F7F2 B8 CLV A:EF X:33 Y:BB P:E5 SP:F9 CYC:151 SL:37 +F7F3 A9 F8 LDA #$F8 A:EF X:33 Y:BB P:A5 SP:F9 CYC:157 SL:37 +F7F5 60 RTS A:F8 X:33 Y:BB P:A5 SP:F9 CYC:163 SL:37 +D62C 2D 78 06 AND $0678 = EF A:F8 X:33 Y:BB P:A5 SP:FB CYC:181 SL:37 +D62F 20 F6 F7 JSR $F7F6 A:E8 X:33 Y:BB P:A5 SP:FB CYC:193 SL:37 +F7F6 90 09 BCC $F801 A:E8 X:33 Y:BB P:A5 SP:F9 CYC:211 SL:37 +F7F8 10 07 BPL $F801 A:E8 X:33 Y:BB P:A5 SP:F9 CYC:217 SL:37 +F7FA C9 E8 CMP #$E8 A:E8 X:33 Y:BB P:A5 SP:F9 CYC:223 SL:37 +F7FC D0 03 BNE $F801 A:E8 X:33 Y:BB P:27 SP:F9 CYC:229 SL:37 +F7FE 70 01 BVS $F801 A:E8 X:33 Y:BB P:27 SP:F9 CYC:235 SL:37 +F800 60 RTS A:E8 X:33 Y:BB P:27 SP:F9 CYC:241 SL:37 +D632 C8 INY A:E8 X:33 Y:BB P:27 SP:FB CYC:259 SL:37 +D633 A9 AA LDA #$AA A:E8 X:33 Y:BC P:A5 SP:FB CYC:265 SL:37 +D635 8D 78 06 STA $0678 = EF A:AA X:33 Y:BC P:A5 SP:FB CYC:271 SL:37 +D638 20 04 F8 JSR $F804 A:AA X:33 Y:BC P:A5 SP:FB CYC:283 SL:37 +F804 18 CLC A:AA X:33 Y:BC P:A5 SP:F9 CYC:301 SL:37 +F805 24 01 BIT $01 = FF A:AA X:33 Y:BC P:A4 SP:F9 CYC:307 SL:37 +F807 A9 5F LDA #$5F A:AA X:33 Y:BC P:E4 SP:F9 CYC:316 SL:37 +F809 60 RTS A:5F X:33 Y:BC P:64 SP:F9 CYC:322 SL:37 +D63B 4D 78 06 EOR $0678 = AA A:5F X:33 Y:BC P:64 SP:FB CYC:340 SL:37 +D63E 20 0A F8 JSR $F80A A:F5 X:33 Y:BC P:E4 SP:FB CYC: 11 SL:38 +F80A B0 09 BCS $F815 A:F5 X:33 Y:BC P:E4 SP:F9 CYC: 29 SL:38 +F80C 10 07 BPL $F815 A:F5 X:33 Y:BC P:E4 SP:F9 CYC: 35 SL:38 +F80E C9 F5 CMP #$F5 A:F5 X:33 Y:BC P:E4 SP:F9 CYC: 41 SL:38 +F810 D0 03 BNE $F815 A:F5 X:33 Y:BC P:67 SP:F9 CYC: 47 SL:38 +F812 50 01 BVC $F815 A:F5 X:33 Y:BC P:67 SP:F9 CYC: 53 SL:38 +F814 60 RTS A:F5 X:33 Y:BC P:67 SP:F9 CYC: 59 SL:38 +D641 C8 INY A:F5 X:33 Y:BC P:67 SP:FB CYC: 77 SL:38 +D642 A9 70 LDA #$70 A:F5 X:33 Y:BD P:E5 SP:FB CYC: 83 SL:38 +D644 8D 78 06 STA $0678 = AA A:70 X:33 Y:BD P:65 SP:FB CYC: 89 SL:38 +D647 20 18 F8 JSR $F818 A:70 X:33 Y:BD P:65 SP:FB CYC:101 SL:38 +F818 38 SEC A:70 X:33 Y:BD P:65 SP:F9 CYC:119 SL:38 +F819 B8 CLV A:70 X:33 Y:BD P:65 SP:F9 CYC:125 SL:38 +F81A A9 70 LDA #$70 A:70 X:33 Y:BD P:25 SP:F9 CYC:131 SL:38 +F81C 60 RTS A:70 X:33 Y:BD P:25 SP:F9 CYC:137 SL:38 +D64A 4D 78 06 EOR $0678 = 70 A:70 X:33 Y:BD P:25 SP:FB CYC:155 SL:38 +D64D 20 1D F8 JSR $F81D A:00 X:33 Y:BD P:27 SP:FB CYC:167 SL:38 +F81D D0 07 BNE $F826 A:00 X:33 Y:BD P:27 SP:F9 CYC:185 SL:38 +F81F 70 05 BVS $F826 A:00 X:33 Y:BD P:27 SP:F9 CYC:191 SL:38 +F821 90 03 BCC $F826 A:00 X:33 Y:BD P:27 SP:F9 CYC:197 SL:38 +F823 30 01 BMI $F826 A:00 X:33 Y:BD P:27 SP:F9 CYC:203 SL:38 +F825 60 RTS A:00 X:33 Y:BD P:27 SP:F9 CYC:209 SL:38 +D650 C8 INY A:00 X:33 Y:BD P:27 SP:FB CYC:227 SL:38 +D651 A9 69 LDA #$69 A:00 X:33 Y:BE P:A5 SP:FB CYC:233 SL:38 +D653 8D 78 06 STA $0678 = 70 A:69 X:33 Y:BE P:25 SP:FB CYC:239 SL:38 +D656 20 29 F8 JSR $F829 A:69 X:33 Y:BE P:25 SP:FB CYC:251 SL:38 +F829 18 CLC A:69 X:33 Y:BE P:25 SP:F9 CYC:269 SL:38 +F82A 24 01 BIT $01 = FF A:69 X:33 Y:BE P:24 SP:F9 CYC:275 SL:38 +F82C A9 00 LDA #$00 A:69 X:33 Y:BE P:E4 SP:F9 CYC:284 SL:38 +F82E 60 RTS A:00 X:33 Y:BE P:66 SP:F9 CYC:290 SL:38 +D659 6D 78 06 ADC $0678 = 69 A:00 X:33 Y:BE P:66 SP:FB CYC:308 SL:38 +D65C 20 2F F8 JSR $F82F A:69 X:33 Y:BE P:24 SP:FB CYC:320 SL:38 +F82F 30 09 BMI $F83A A:69 X:33 Y:BE P:24 SP:F9 CYC:338 SL:38 +F831 B0 07 BCS $F83A A:69 X:33 Y:BE P:24 SP:F9 CYC: 3 SL:39 +F833 C9 69 CMP #$69 A:69 X:33 Y:BE P:24 SP:F9 CYC: 9 SL:39 +F835 D0 03 BNE $F83A A:69 X:33 Y:BE P:27 SP:F9 CYC: 15 SL:39 +F837 70 01 BVS $F83A A:69 X:33 Y:BE P:27 SP:F9 CYC: 21 SL:39 +F839 60 RTS A:69 X:33 Y:BE P:27 SP:F9 CYC: 27 SL:39 +D65F C8 INY A:69 X:33 Y:BE P:27 SP:FB CYC: 45 SL:39 +D660 20 3D F8 JSR $F83D A:69 X:33 Y:BF P:A5 SP:FB CYC: 51 SL:39 +F83D 38 SEC A:69 X:33 Y:BF P:A5 SP:F9 CYC: 69 SL:39 +F83E 24 01 BIT $01 = FF A:69 X:33 Y:BF P:A5 SP:F9 CYC: 75 SL:39 +F840 A9 00 LDA #$00 A:69 X:33 Y:BF P:E5 SP:F9 CYC: 84 SL:39 +F842 60 RTS A:00 X:33 Y:BF P:67 SP:F9 CYC: 90 SL:39 +D663 6D 78 06 ADC $0678 = 69 A:00 X:33 Y:BF P:67 SP:FB CYC:108 SL:39 +D666 20 43 F8 JSR $F843 A:6A X:33 Y:BF P:24 SP:FB CYC:120 SL:39 +F843 30 09 BMI $F84E A:6A X:33 Y:BF P:24 SP:F9 CYC:138 SL:39 +F845 B0 07 BCS $F84E A:6A X:33 Y:BF P:24 SP:F9 CYC:144 SL:39 +F847 C9 6A CMP #$6A A:6A X:33 Y:BF P:24 SP:F9 CYC:150 SL:39 +F849 D0 03 BNE $F84E A:6A X:33 Y:BF P:27 SP:F9 CYC:156 SL:39 +F84B 70 01 BVS $F84E A:6A X:33 Y:BF P:27 SP:F9 CYC:162 SL:39 +F84D 60 RTS A:6A X:33 Y:BF P:27 SP:F9 CYC:168 SL:39 +D669 C8 INY A:6A X:33 Y:BF P:27 SP:FB CYC:186 SL:39 +D66A A9 7F LDA #$7F A:6A X:33 Y:C0 P:A5 SP:FB CYC:192 SL:39 +D66C 8D 78 06 STA $0678 = 69 A:7F X:33 Y:C0 P:25 SP:FB CYC:198 SL:39 +D66F 20 51 F8 JSR $F851 A:7F X:33 Y:C0 P:25 SP:FB CYC:210 SL:39 +F851 38 SEC A:7F X:33 Y:C0 P:25 SP:F9 CYC:228 SL:39 +F852 B8 CLV A:7F X:33 Y:C0 P:25 SP:F9 CYC:234 SL:39 +F853 A9 7F LDA #$7F A:7F X:33 Y:C0 P:25 SP:F9 CYC:240 SL:39 +F855 60 RTS A:7F X:33 Y:C0 P:25 SP:F9 CYC:246 SL:39 +D672 6D 78 06 ADC $0678 = 7F A:7F X:33 Y:C0 P:25 SP:FB CYC:264 SL:39 +D675 20 56 F8 JSR $F856 A:FF X:33 Y:C0 P:E4 SP:FB CYC:276 SL:39 +F856 10 09 BPL $F861 A:FF X:33 Y:C0 P:E4 SP:F9 CYC:294 SL:39 +F858 B0 07 BCS $F861 A:FF X:33 Y:C0 P:E4 SP:F9 CYC:300 SL:39 +F85A C9 FF CMP #$FF A:FF X:33 Y:C0 P:E4 SP:F9 CYC:306 SL:39 +F85C D0 03 BNE $F861 A:FF X:33 Y:C0 P:67 SP:F9 CYC:312 SL:39 +F85E 50 01 BVC $F861 A:FF X:33 Y:C0 P:67 SP:F9 CYC:318 SL:39 +F860 60 RTS A:FF X:33 Y:C0 P:67 SP:F9 CYC:324 SL:39 +D678 C8 INY A:FF X:33 Y:C0 P:67 SP:FB CYC: 1 SL:40 +D679 A9 80 LDA #$80 A:FF X:33 Y:C1 P:E5 SP:FB CYC: 7 SL:40 +D67B 8D 78 06 STA $0678 = 7F A:80 X:33 Y:C1 P:E5 SP:FB CYC: 13 SL:40 +D67E 20 64 F8 JSR $F864 A:80 X:33 Y:C1 P:E5 SP:FB CYC: 25 SL:40 +F864 18 CLC A:80 X:33 Y:C1 P:E5 SP:F9 CYC: 43 SL:40 +F865 24 01 BIT $01 = FF A:80 X:33 Y:C1 P:E4 SP:F9 CYC: 49 SL:40 +F867 A9 7F LDA #$7F A:80 X:33 Y:C1 P:E4 SP:F9 CYC: 58 SL:40 +F869 60 RTS A:7F X:33 Y:C1 P:64 SP:F9 CYC: 64 SL:40 +D681 6D 78 06 ADC $0678 = 80 A:7F X:33 Y:C1 P:64 SP:FB CYC: 82 SL:40 +D684 20 6A F8 JSR $F86A A:FF X:33 Y:C1 P:A4 SP:FB CYC: 94 SL:40 +F86A 10 09 BPL $F875 A:FF X:33 Y:C1 P:A4 SP:F9 CYC:112 SL:40 +F86C B0 07 BCS $F875 A:FF X:33 Y:C1 P:A4 SP:F9 CYC:118 SL:40 +F86E C9 FF CMP #$FF A:FF X:33 Y:C1 P:A4 SP:F9 CYC:124 SL:40 +F870 D0 03 BNE $F875 A:FF X:33 Y:C1 P:27 SP:F9 CYC:130 SL:40 +F872 70 01 BVS $F875 A:FF X:33 Y:C1 P:27 SP:F9 CYC:136 SL:40 +F874 60 RTS A:FF X:33 Y:C1 P:27 SP:F9 CYC:142 SL:40 +D687 C8 INY A:FF X:33 Y:C1 P:27 SP:FB CYC:160 SL:40 +D688 20 78 F8 JSR $F878 A:FF X:33 Y:C2 P:A5 SP:FB CYC:166 SL:40 +F878 38 SEC A:FF X:33 Y:C2 P:A5 SP:F9 CYC:184 SL:40 +F879 B8 CLV A:FF X:33 Y:C2 P:A5 SP:F9 CYC:190 SL:40 +F87A A9 7F LDA #$7F A:FF X:33 Y:C2 P:A5 SP:F9 CYC:196 SL:40 +F87C 60 RTS A:7F X:33 Y:C2 P:25 SP:F9 CYC:202 SL:40 +D68B 6D 78 06 ADC $0678 = 80 A:7F X:33 Y:C2 P:25 SP:FB CYC:220 SL:40 +D68E 20 7D F8 JSR $F87D A:00 X:33 Y:C2 P:27 SP:FB CYC:232 SL:40 +F87D D0 07 BNE $F886 A:00 X:33 Y:C2 P:27 SP:F9 CYC:250 SL:40 +F87F 30 05 BMI $F886 A:00 X:33 Y:C2 P:27 SP:F9 CYC:256 SL:40 +F881 70 03 BVS $F886 A:00 X:33 Y:C2 P:27 SP:F9 CYC:262 SL:40 +F883 90 01 BCC $F886 A:00 X:33 Y:C2 P:27 SP:F9 CYC:268 SL:40 +F885 60 RTS A:00 X:33 Y:C2 P:27 SP:F9 CYC:274 SL:40 +D691 C8 INY A:00 X:33 Y:C2 P:27 SP:FB CYC:292 SL:40 +D692 A9 40 LDA #$40 A:00 X:33 Y:C3 P:A5 SP:FB CYC:298 SL:40 +D694 8D 78 06 STA $0678 = 80 A:40 X:33 Y:C3 P:25 SP:FB CYC:304 SL:40 +D697 20 89 F8 JSR $F889 A:40 X:33 Y:C3 P:25 SP:FB CYC:316 SL:40 +F889 24 01 BIT $01 = FF A:40 X:33 Y:C3 P:25 SP:F9 CYC:334 SL:40 +F88B A9 40 LDA #$40 A:40 X:33 Y:C3 P:E5 SP:F9 CYC: 2 SL:41 +F88D 60 RTS A:40 X:33 Y:C3 P:65 SP:F9 CYC: 8 SL:41 +D69A CD 78 06 CMP $0678 = 40 A:40 X:33 Y:C3 P:65 SP:FB CYC: 26 SL:41 +D69D 20 8E F8 JSR $F88E A:40 X:33 Y:C3 P:67 SP:FB CYC: 38 SL:41 +F88E 30 07 BMI $F897 A:40 X:33 Y:C3 P:67 SP:F9 CYC: 56 SL:41 +F890 90 05 BCC $F897 A:40 X:33 Y:C3 P:67 SP:F9 CYC: 62 SL:41 +F892 D0 03 BNE $F897 A:40 X:33 Y:C3 P:67 SP:F9 CYC: 68 SL:41 +F894 50 01 BVC $F897 A:40 X:33 Y:C3 P:67 SP:F9 CYC: 74 SL:41 +F896 60 RTS A:40 X:33 Y:C3 P:67 SP:F9 CYC: 80 SL:41 +D6A0 C8 INY A:40 X:33 Y:C3 P:67 SP:FB CYC: 98 SL:41 +D6A1 48 PHA A:40 X:33 Y:C4 P:E5 SP:FB CYC:104 SL:41 +D6A2 A9 3F LDA #$3F A:40 X:33 Y:C4 P:E5 SP:FA CYC:113 SL:41 +D6A4 8D 78 06 STA $0678 = 40 A:3F X:33 Y:C4 P:65 SP:FA CYC:119 SL:41 +D6A7 68 PLA A:3F X:33 Y:C4 P:65 SP:FA CYC:131 SL:41 +D6A8 20 9A F8 JSR $F89A A:40 X:33 Y:C4 P:65 SP:FB CYC:143 SL:41 +F89A B8 CLV A:40 X:33 Y:C4 P:65 SP:F9 CYC:161 SL:41 +F89B 60 RTS A:40 X:33 Y:C4 P:25 SP:F9 CYC:167 SL:41 +D6AB CD 78 06 CMP $0678 = 3F A:40 X:33 Y:C4 P:25 SP:FB CYC:185 SL:41 +D6AE 20 9C F8 JSR $F89C A:40 X:33 Y:C4 P:25 SP:FB CYC:197 SL:41 +F89C F0 07 BEQ $F8A5 A:40 X:33 Y:C4 P:25 SP:F9 CYC:215 SL:41 +F89E 30 05 BMI $F8A5 A:40 X:33 Y:C4 P:25 SP:F9 CYC:221 SL:41 +F8A0 90 03 BCC $F8A5 A:40 X:33 Y:C4 P:25 SP:F9 CYC:227 SL:41 +F8A2 70 01 BVS $F8A5 A:40 X:33 Y:C4 P:25 SP:F9 CYC:233 SL:41 +F8A4 60 RTS A:40 X:33 Y:C4 P:25 SP:F9 CYC:239 SL:41 +D6B1 C8 INY A:40 X:33 Y:C4 P:25 SP:FB CYC:257 SL:41 +D6B2 48 PHA A:40 X:33 Y:C5 P:A5 SP:FB CYC:263 SL:41 +D6B3 A9 41 LDA #$41 A:40 X:33 Y:C5 P:A5 SP:FA CYC:272 SL:41 +D6B5 8D 78 06 STA $0678 = 3F A:41 X:33 Y:C5 P:25 SP:FA CYC:278 SL:41 +D6B8 68 PLA A:41 X:33 Y:C5 P:25 SP:FA CYC:290 SL:41 +D6B9 CD 78 06 CMP $0678 = 41 A:40 X:33 Y:C5 P:25 SP:FB CYC:302 SL:41 +D6BC 20 A8 F8 JSR $F8A8 A:40 X:33 Y:C5 P:A4 SP:FB CYC:314 SL:41 +F8A8 F0 05 BEQ $F8AF A:40 X:33 Y:C5 P:A4 SP:F9 CYC:332 SL:41 +F8AA 10 03 BPL $F8AF A:40 X:33 Y:C5 P:A4 SP:F9 CYC:338 SL:41 +F8AC 10 01 BPL $F8AF A:40 X:33 Y:C5 P:A4 SP:F9 CYC: 3 SL:42 +F8AE 60 RTS A:40 X:33 Y:C5 P:A4 SP:F9 CYC: 9 SL:42 +D6BF C8 INY A:40 X:33 Y:C5 P:A4 SP:FB CYC: 27 SL:42 +D6C0 48 PHA A:40 X:33 Y:C6 P:A4 SP:FB CYC: 33 SL:42 +D6C1 A9 00 LDA #$00 A:40 X:33 Y:C6 P:A4 SP:FA CYC: 42 SL:42 +D6C3 8D 78 06 STA $0678 = 41 A:00 X:33 Y:C6 P:26 SP:FA CYC: 48 SL:42 +D6C6 68 PLA A:00 X:33 Y:C6 P:26 SP:FA CYC: 60 SL:42 +D6C7 20 B2 F8 JSR $F8B2 A:40 X:33 Y:C6 P:24 SP:FB CYC: 72 SL:42 +F8B2 A9 80 LDA #$80 A:40 X:33 Y:C6 P:24 SP:F9 CYC: 90 SL:42 +F8B4 60 RTS A:80 X:33 Y:C6 P:A4 SP:F9 CYC: 96 SL:42 +D6CA CD 78 06 CMP $0678 = 00 A:80 X:33 Y:C6 P:A4 SP:FB CYC:114 SL:42 +D6CD 20 B5 F8 JSR $F8B5 A:80 X:33 Y:C6 P:A5 SP:FB CYC:126 SL:42 +F8B5 F0 05 BEQ $F8BC A:80 X:33 Y:C6 P:A5 SP:F9 CYC:144 SL:42 +F8B7 10 03 BPL $F8BC A:80 X:33 Y:C6 P:A5 SP:F9 CYC:150 SL:42 +F8B9 90 01 BCC $F8BC A:80 X:33 Y:C6 P:A5 SP:F9 CYC:156 SL:42 +F8BB 60 RTS A:80 X:33 Y:C6 P:A5 SP:F9 CYC:162 SL:42 +D6D0 C8 INY A:80 X:33 Y:C6 P:A5 SP:FB CYC:180 SL:42 +D6D1 48 PHA A:80 X:33 Y:C7 P:A5 SP:FB CYC:186 SL:42 +D6D2 A9 80 LDA #$80 A:80 X:33 Y:C7 P:A5 SP:FA CYC:195 SL:42 +D6D4 8D 78 06 STA $0678 = 00 A:80 X:33 Y:C7 P:A5 SP:FA CYC:201 SL:42 +D6D7 68 PLA A:80 X:33 Y:C7 P:A5 SP:FA CYC:213 SL:42 +D6D8 CD 78 06 CMP $0678 = 80 A:80 X:33 Y:C7 P:A5 SP:FB CYC:225 SL:42 +D6DB 20 BF F8 JSR $F8BF A:80 X:33 Y:C7 P:27 SP:FB CYC:237 SL:42 +F8BF D0 05 BNE $F8C6 A:80 X:33 Y:C7 P:27 SP:F9 CYC:255 SL:42 +F8C1 30 03 BMI $F8C6 A:80 X:33 Y:C7 P:27 SP:F9 CYC:261 SL:42 +F8C3 90 01 BCC $F8C6 A:80 X:33 Y:C7 P:27 SP:F9 CYC:267 SL:42 +F8C5 60 RTS A:80 X:33 Y:C7 P:27 SP:F9 CYC:273 SL:42 +D6DE C8 INY A:80 X:33 Y:C7 P:27 SP:FB CYC:291 SL:42 +D6DF 48 PHA A:80 X:33 Y:C8 P:A5 SP:FB CYC:297 SL:42 +D6E0 A9 81 LDA #$81 A:80 X:33 Y:C8 P:A5 SP:FA CYC:306 SL:42 +D6E2 8D 78 06 STA $0678 = 80 A:81 X:33 Y:C8 P:A5 SP:FA CYC:312 SL:42 +D6E5 68 PLA A:81 X:33 Y:C8 P:A5 SP:FA CYC:324 SL:42 +D6E6 CD 78 06 CMP $0678 = 81 A:80 X:33 Y:C8 P:A5 SP:FB CYC:336 SL:42 +D6E9 20 C9 F8 JSR $F8C9 A:80 X:33 Y:C8 P:A4 SP:FB CYC: 7 SL:43 +F8C9 B0 05 BCS $F8D0 A:80 X:33 Y:C8 P:A4 SP:F9 CYC: 25 SL:43 +F8CB F0 03 BEQ $F8D0 A:80 X:33 Y:C8 P:A4 SP:F9 CYC: 31 SL:43 +F8CD 10 01 BPL $F8D0 A:80 X:33 Y:C8 P:A4 SP:F9 CYC: 37 SL:43 +F8CF 60 RTS A:80 X:33 Y:C8 P:A4 SP:F9 CYC: 43 SL:43 +D6EC C8 INY A:80 X:33 Y:C8 P:A4 SP:FB CYC: 61 SL:43 +D6ED 48 PHA A:80 X:33 Y:C9 P:A4 SP:FB CYC: 67 SL:43 +D6EE A9 7F LDA #$7F A:80 X:33 Y:C9 P:A4 SP:FA CYC: 76 SL:43 +D6F0 8D 78 06 STA $0678 = 81 A:7F X:33 Y:C9 P:24 SP:FA CYC: 82 SL:43 +D6F3 68 PLA A:7F X:33 Y:C9 P:24 SP:FA CYC: 94 SL:43 +D6F4 CD 78 06 CMP $0678 = 7F A:80 X:33 Y:C9 P:A4 SP:FB CYC:106 SL:43 +D6F7 20 D3 F8 JSR $F8D3 A:80 X:33 Y:C9 P:25 SP:FB CYC:118 SL:43 +F8D3 90 05 BCC $F8DA A:80 X:33 Y:C9 P:25 SP:F9 CYC:136 SL:43 +F8D5 F0 03 BEQ $F8DA A:80 X:33 Y:C9 P:25 SP:F9 CYC:142 SL:43 +F8D7 30 01 BMI $F8DA A:80 X:33 Y:C9 P:25 SP:F9 CYC:148 SL:43 +F8D9 60 RTS A:80 X:33 Y:C9 P:25 SP:F9 CYC:154 SL:43 +D6FA C8 INY A:80 X:33 Y:C9 P:25 SP:FB CYC:172 SL:43 +D6FB A9 40 LDA #$40 A:80 X:33 Y:CA P:A5 SP:FB CYC:178 SL:43 +D6FD 8D 78 06 STA $0678 = 7F A:40 X:33 Y:CA P:25 SP:FB CYC:184 SL:43 +D700 20 31 F9 JSR $F931 A:40 X:33 Y:CA P:25 SP:FB CYC:196 SL:43 +F931 24 01 BIT $01 = FF A:40 X:33 Y:CA P:25 SP:F9 CYC:214 SL:43 +F933 A9 40 LDA #$40 A:40 X:33 Y:CA P:E5 SP:F9 CYC:223 SL:43 +F935 38 SEC A:40 X:33 Y:CA P:65 SP:F9 CYC:229 SL:43 +F936 60 RTS A:40 X:33 Y:CA P:65 SP:F9 CYC:235 SL:43 +D703 ED 78 06 SBC $0678 = 40 A:40 X:33 Y:CA P:65 SP:FB CYC:253 SL:43 +D706 20 37 F9 JSR $F937 A:00 X:33 Y:CA P:27 SP:FB CYC:265 SL:43 +F937 30 0B BMI $F944 A:00 X:33 Y:CA P:27 SP:F9 CYC:283 SL:43 +F939 90 09 BCC $F944 A:00 X:33 Y:CA P:27 SP:F9 CYC:289 SL:43 +F93B D0 07 BNE $F944 A:00 X:33 Y:CA P:27 SP:F9 CYC:295 SL:43 +F93D 70 05 BVS $F944 A:00 X:33 Y:CA P:27 SP:F9 CYC:301 SL:43 +F93F C9 00 CMP #$00 A:00 X:33 Y:CA P:27 SP:F9 CYC:307 SL:43 +F941 D0 01 BNE $F944 A:00 X:33 Y:CA P:27 SP:F9 CYC:313 SL:43 +F943 60 RTS A:00 X:33 Y:CA P:27 SP:F9 CYC:319 SL:43 +D709 C8 INY A:00 X:33 Y:CA P:27 SP:FB CYC:337 SL:43 +D70A A9 3F LDA #$3F A:00 X:33 Y:CB P:A5 SP:FB CYC: 2 SL:44 +D70C 8D 78 06 STA $0678 = 40 A:3F X:33 Y:CB P:25 SP:FB CYC: 8 SL:44 +D70F 20 47 F9 JSR $F947 A:3F X:33 Y:CB P:25 SP:FB CYC: 20 SL:44 +F947 B8 CLV A:3F X:33 Y:CB P:25 SP:F9 CYC: 38 SL:44 +F948 38 SEC A:3F X:33 Y:CB P:25 SP:F9 CYC: 44 SL:44 +F949 A9 40 LDA #$40 A:3F X:33 Y:CB P:25 SP:F9 CYC: 50 SL:44 +F94B 60 RTS A:40 X:33 Y:CB P:25 SP:F9 CYC: 56 SL:44 +D712 ED 78 06 SBC $0678 = 3F A:40 X:33 Y:CB P:25 SP:FB CYC: 74 SL:44 +D715 20 4C F9 JSR $F94C A:01 X:33 Y:CB P:25 SP:FB CYC: 86 SL:44 +F94C F0 0B BEQ $F959 A:01 X:33 Y:CB P:25 SP:F9 CYC:104 SL:44 +F94E 30 09 BMI $F959 A:01 X:33 Y:CB P:25 SP:F9 CYC:110 SL:44 +F950 90 07 BCC $F959 A:01 X:33 Y:CB P:25 SP:F9 CYC:116 SL:44 +F952 70 05 BVS $F959 A:01 X:33 Y:CB P:25 SP:F9 CYC:122 SL:44 +F954 C9 01 CMP #$01 A:01 X:33 Y:CB P:25 SP:F9 CYC:128 SL:44 +F956 D0 01 BNE $F959 A:01 X:33 Y:CB P:27 SP:F9 CYC:134 SL:44 +F958 60 RTS A:01 X:33 Y:CB P:27 SP:F9 CYC:140 SL:44 +D718 C8 INY A:01 X:33 Y:CB P:27 SP:FB CYC:158 SL:44 +D719 A9 41 LDA #$41 A:01 X:33 Y:CC P:A5 SP:FB CYC:164 SL:44 +D71B 8D 78 06 STA $0678 = 3F A:41 X:33 Y:CC P:25 SP:FB CYC:170 SL:44 +D71E 20 5C F9 JSR $F95C A:41 X:33 Y:CC P:25 SP:FB CYC:182 SL:44 +F95C A9 40 LDA #$40 A:41 X:33 Y:CC P:25 SP:F9 CYC:200 SL:44 +F95E 38 SEC A:40 X:33 Y:CC P:25 SP:F9 CYC:206 SL:44 +F95F 24 01 BIT $01 = FF A:40 X:33 Y:CC P:25 SP:F9 CYC:212 SL:44 +F961 60 RTS A:40 X:33 Y:CC P:E5 SP:F9 CYC:221 SL:44 +D721 ED 78 06 SBC $0678 = 41 A:40 X:33 Y:CC P:E5 SP:FB CYC:239 SL:44 +D724 20 62 F9 JSR $F962 A:FF X:33 Y:CC P:A4 SP:FB CYC:251 SL:44 +F962 B0 0B BCS $F96F A:FF X:33 Y:CC P:A4 SP:F9 CYC:269 SL:44 +F964 F0 09 BEQ $F96F A:FF X:33 Y:CC P:A4 SP:F9 CYC:275 SL:44 +F966 10 07 BPL $F96F A:FF X:33 Y:CC P:A4 SP:F9 CYC:281 SL:44 +F968 70 05 BVS $F96F A:FF X:33 Y:CC P:A4 SP:F9 CYC:287 SL:44 +F96A C9 FF CMP #$FF A:FF X:33 Y:CC P:A4 SP:F9 CYC:293 SL:44 +F96C D0 01 BNE $F96F A:FF X:33 Y:CC P:27 SP:F9 CYC:299 SL:44 +F96E 60 RTS A:FF X:33 Y:CC P:27 SP:F9 CYC:305 SL:44 +D727 C8 INY A:FF X:33 Y:CC P:27 SP:FB CYC:323 SL:44 +D728 A9 00 LDA #$00 A:FF X:33 Y:CD P:A5 SP:FB CYC:329 SL:44 +D72A 8D 78 06 STA $0678 = 41 A:00 X:33 Y:CD P:27 SP:FB CYC:335 SL:44 +D72D 20 72 F9 JSR $F972 A:00 X:33 Y:CD P:27 SP:FB CYC: 6 SL:45 +F972 18 CLC A:00 X:33 Y:CD P:27 SP:F9 CYC: 24 SL:45 +F973 A9 80 LDA #$80 A:00 X:33 Y:CD P:26 SP:F9 CYC: 30 SL:45 +F975 60 RTS A:80 X:33 Y:CD P:A4 SP:F9 CYC: 36 SL:45 +D730 ED 78 06 SBC $0678 = 00 A:80 X:33 Y:CD P:A4 SP:FB CYC: 54 SL:45 +D733 20 76 F9 JSR $F976 A:7F X:33 Y:CD P:65 SP:FB CYC: 66 SL:45 +F976 90 05 BCC $F97D A:7F X:33 Y:CD P:65 SP:F9 CYC: 84 SL:45 +F978 C9 7F CMP #$7F A:7F X:33 Y:CD P:65 SP:F9 CYC: 90 SL:45 +F97A D0 01 BNE $F97D A:7F X:33 Y:CD P:67 SP:F9 CYC: 96 SL:45 +F97C 60 RTS A:7F X:33 Y:CD P:67 SP:F9 CYC:102 SL:45 +D736 C8 INY A:7F X:33 Y:CD P:67 SP:FB CYC:120 SL:45 +D737 A9 7F LDA #$7F A:7F X:33 Y:CE P:E5 SP:FB CYC:126 SL:45 +D739 8D 78 06 STA $0678 = 00 A:7F X:33 Y:CE P:65 SP:FB CYC:132 SL:45 +D73C 20 80 F9 JSR $F980 A:7F X:33 Y:CE P:65 SP:FB CYC:144 SL:45 +F980 38 SEC A:7F X:33 Y:CE P:65 SP:F9 CYC:162 SL:45 +F981 A9 81 LDA #$81 A:7F X:33 Y:CE P:65 SP:F9 CYC:168 SL:45 +F983 60 RTS A:81 X:33 Y:CE P:E5 SP:F9 CYC:174 SL:45 +D73F ED 78 06 SBC $0678 = 7F A:81 X:33 Y:CE P:E5 SP:FB CYC:192 SL:45 +D742 20 84 F9 JSR $F984 A:02 X:33 Y:CE P:65 SP:FB CYC:204 SL:45 +F984 50 07 BVC $F98D A:02 X:33 Y:CE P:65 SP:F9 CYC:222 SL:45 +F986 90 05 BCC $F98D A:02 X:33 Y:CE P:65 SP:F9 CYC:228 SL:45 +F988 C9 02 CMP #$02 A:02 X:33 Y:CE P:65 SP:F9 CYC:234 SL:45 +F98A D0 01 BNE $F98D A:02 X:33 Y:CE P:67 SP:F9 CYC:240 SL:45 +F98C 60 RTS A:02 X:33 Y:CE P:67 SP:F9 CYC:246 SL:45 +D745 C8 INY A:02 X:33 Y:CE P:67 SP:FB CYC:264 SL:45 +D746 A9 40 LDA #$40 A:02 X:33 Y:CF P:E5 SP:FB CYC:270 SL:45 +D748 8D 78 06 STA $0678 = 7F A:40 X:33 Y:CF P:65 SP:FB CYC:276 SL:45 +D74B 20 89 F8 JSR $F889 A:40 X:33 Y:CF P:65 SP:FB CYC:288 SL:45 +F889 24 01 BIT $01 = FF A:40 X:33 Y:CF P:65 SP:F9 CYC:306 SL:45 +F88B A9 40 LDA #$40 A:40 X:33 Y:CF P:E5 SP:F9 CYC:315 SL:45 +F88D 60 RTS A:40 X:33 Y:CF P:65 SP:F9 CYC:321 SL:45 +D74E AA TAX A:40 X:33 Y:CF P:65 SP:FB CYC:339 SL:45 +D74F EC 78 06 CPX $0678 = 40 A:40 X:40 Y:CF P:65 SP:FB CYC: 4 SL:46 +D752 20 8E F8 JSR $F88E A:40 X:40 Y:CF P:67 SP:FB CYC: 16 SL:46 +F88E 30 07 BMI $F897 A:40 X:40 Y:CF P:67 SP:F9 CYC: 34 SL:46 +F890 90 05 BCC $F897 A:40 X:40 Y:CF P:67 SP:F9 CYC: 40 SL:46 +F892 D0 03 BNE $F897 A:40 X:40 Y:CF P:67 SP:F9 CYC: 46 SL:46 +F894 50 01 BVC $F897 A:40 X:40 Y:CF P:67 SP:F9 CYC: 52 SL:46 +F896 60 RTS A:40 X:40 Y:CF P:67 SP:F9 CYC: 58 SL:46 +D755 C8 INY A:40 X:40 Y:CF P:67 SP:FB CYC: 76 SL:46 +D756 A9 3F LDA #$3F A:40 X:40 Y:D0 P:E5 SP:FB CYC: 82 SL:46 +D758 8D 78 06 STA $0678 = 40 A:3F X:40 Y:D0 P:65 SP:FB CYC: 88 SL:46 +D75B 20 9A F8 JSR $F89A A:3F X:40 Y:D0 P:65 SP:FB CYC:100 SL:46 +F89A B8 CLV A:3F X:40 Y:D0 P:65 SP:F9 CYC:118 SL:46 +F89B 60 RTS A:3F X:40 Y:D0 P:25 SP:F9 CYC:124 SL:46 +D75E EC 78 06 CPX $0678 = 3F A:3F X:40 Y:D0 P:25 SP:FB CYC:142 SL:46 +D761 20 9C F8 JSR $F89C A:3F X:40 Y:D0 P:25 SP:FB CYC:154 SL:46 +F89C F0 07 BEQ $F8A5 A:3F X:40 Y:D0 P:25 SP:F9 CYC:172 SL:46 +F89E 30 05 BMI $F8A5 A:3F X:40 Y:D0 P:25 SP:F9 CYC:178 SL:46 +F8A0 90 03 BCC $F8A5 A:3F X:40 Y:D0 P:25 SP:F9 CYC:184 SL:46 +F8A2 70 01 BVS $F8A5 A:3F X:40 Y:D0 P:25 SP:F9 CYC:190 SL:46 +F8A4 60 RTS A:3F X:40 Y:D0 P:25 SP:F9 CYC:196 SL:46 +D764 C8 INY A:3F X:40 Y:D0 P:25 SP:FB CYC:214 SL:46 +D765 A9 41 LDA #$41 A:3F X:40 Y:D1 P:A5 SP:FB CYC:220 SL:46 +D767 8D 78 06 STA $0678 = 3F A:41 X:40 Y:D1 P:25 SP:FB CYC:226 SL:46 +D76A EC 78 06 CPX $0678 = 41 A:41 X:40 Y:D1 P:25 SP:FB CYC:238 SL:46 +D76D 20 A8 F8 JSR $F8A8 A:41 X:40 Y:D1 P:A4 SP:FB CYC:250 SL:46 +F8A8 F0 05 BEQ $F8AF A:41 X:40 Y:D1 P:A4 SP:F9 CYC:268 SL:46 +F8AA 10 03 BPL $F8AF A:41 X:40 Y:D1 P:A4 SP:F9 CYC:274 SL:46 +F8AC 10 01 BPL $F8AF A:41 X:40 Y:D1 P:A4 SP:F9 CYC:280 SL:46 +F8AE 60 RTS A:41 X:40 Y:D1 P:A4 SP:F9 CYC:286 SL:46 +D770 C8 INY A:41 X:40 Y:D1 P:A4 SP:FB CYC:304 SL:46 +D771 A9 00 LDA #$00 A:41 X:40 Y:D2 P:A4 SP:FB CYC:310 SL:46 +D773 8D 78 06 STA $0678 = 41 A:00 X:40 Y:D2 P:26 SP:FB CYC:316 SL:46 +D776 20 B2 F8 JSR $F8B2 A:00 X:40 Y:D2 P:26 SP:FB CYC:328 SL:46 +F8B2 A9 80 LDA #$80 A:00 X:40 Y:D2 P:26 SP:F9 CYC: 5 SL:47 +F8B4 60 RTS A:80 X:40 Y:D2 P:A4 SP:F9 CYC: 11 SL:47 +D779 AA TAX A:80 X:40 Y:D2 P:A4 SP:FB CYC: 29 SL:47 +D77A EC 78 06 CPX $0678 = 00 A:80 X:80 Y:D2 P:A4 SP:FB CYC: 35 SL:47 +D77D 20 B5 F8 JSR $F8B5 A:80 X:80 Y:D2 P:A5 SP:FB CYC: 47 SL:47 +F8B5 F0 05 BEQ $F8BC A:80 X:80 Y:D2 P:A5 SP:F9 CYC: 65 SL:47 +F8B7 10 03 BPL $F8BC A:80 X:80 Y:D2 P:A5 SP:F9 CYC: 71 SL:47 +F8B9 90 01 BCC $F8BC A:80 X:80 Y:D2 P:A5 SP:F9 CYC: 77 SL:47 +F8BB 60 RTS A:80 X:80 Y:D2 P:A5 SP:F9 CYC: 83 SL:47 +D780 C8 INY A:80 X:80 Y:D2 P:A5 SP:FB CYC:101 SL:47 +D781 A9 80 LDA #$80 A:80 X:80 Y:D3 P:A5 SP:FB CYC:107 SL:47 +D783 8D 78 06 STA $0678 = 00 A:80 X:80 Y:D3 P:A5 SP:FB CYC:113 SL:47 +D786 EC 78 06 CPX $0678 = 80 A:80 X:80 Y:D3 P:A5 SP:FB CYC:125 SL:47 +D789 20 BF F8 JSR $F8BF A:80 X:80 Y:D3 P:27 SP:FB CYC:137 SL:47 +F8BF D0 05 BNE $F8C6 A:80 X:80 Y:D3 P:27 SP:F9 CYC:155 SL:47 +F8C1 30 03 BMI $F8C6 A:80 X:80 Y:D3 P:27 SP:F9 CYC:161 SL:47 +F8C3 90 01 BCC $F8C6 A:80 X:80 Y:D3 P:27 SP:F9 CYC:167 SL:47 +F8C5 60 RTS A:80 X:80 Y:D3 P:27 SP:F9 CYC:173 SL:47 +D78C C8 INY A:80 X:80 Y:D3 P:27 SP:FB CYC:191 SL:47 +D78D A9 81 LDA #$81 A:80 X:80 Y:D4 P:A5 SP:FB CYC:197 SL:47 +D78F 8D 78 06 STA $0678 = 80 A:81 X:80 Y:D4 P:A5 SP:FB CYC:203 SL:47 +D792 EC 78 06 CPX $0678 = 81 A:81 X:80 Y:D4 P:A5 SP:FB CYC:215 SL:47 +D795 20 C9 F8 JSR $F8C9 A:81 X:80 Y:D4 P:A4 SP:FB CYC:227 SL:47 +F8C9 B0 05 BCS $F8D0 A:81 X:80 Y:D4 P:A4 SP:F9 CYC:245 SL:47 +F8CB F0 03 BEQ $F8D0 A:81 X:80 Y:D4 P:A4 SP:F9 CYC:251 SL:47 +F8CD 10 01 BPL $F8D0 A:81 X:80 Y:D4 P:A4 SP:F9 CYC:257 SL:47 +F8CF 60 RTS A:81 X:80 Y:D4 P:A4 SP:F9 CYC:263 SL:47 +D798 C8 INY A:81 X:80 Y:D4 P:A4 SP:FB CYC:281 SL:47 +D799 A9 7F LDA #$7F A:81 X:80 Y:D5 P:A4 SP:FB CYC:287 SL:47 +D79B 8D 78 06 STA $0678 = 81 A:7F X:80 Y:D5 P:24 SP:FB CYC:293 SL:47 +D79E EC 78 06 CPX $0678 = 7F A:7F X:80 Y:D5 P:24 SP:FB CYC:305 SL:47 +D7A1 20 D3 F8 JSR $F8D3 A:7F X:80 Y:D5 P:25 SP:FB CYC:317 SL:47 +F8D3 90 05 BCC $F8DA A:7F X:80 Y:D5 P:25 SP:F9 CYC:335 SL:47 +F8D5 F0 03 BEQ $F8DA A:7F X:80 Y:D5 P:25 SP:F9 CYC: 0 SL:48 +F8D7 30 01 BMI $F8DA A:7F X:80 Y:D5 P:25 SP:F9 CYC: 6 SL:48 +F8D9 60 RTS A:7F X:80 Y:D5 P:25 SP:F9 CYC: 12 SL:48 +D7A4 C8 INY A:7F X:80 Y:D5 P:25 SP:FB CYC: 30 SL:48 +D7A5 98 TYA A:7F X:80 Y:D6 P:A5 SP:FB CYC: 36 SL:48 +D7A6 AA TAX A:D6 X:80 Y:D6 P:A5 SP:FB CYC: 42 SL:48 +D7A7 A9 40 LDA #$40 A:D6 X:D6 Y:D6 P:A5 SP:FB CYC: 48 SL:48 +D7A9 8D 78 06 STA $0678 = 7F A:40 X:D6 Y:D6 P:25 SP:FB CYC: 54 SL:48 +D7AC 20 DD F8 JSR $F8DD A:40 X:D6 Y:D6 P:25 SP:FB CYC: 66 SL:48 +F8DD 24 01 BIT $01 = FF A:40 X:D6 Y:D6 P:25 SP:F9 CYC: 84 SL:48 +F8DF A0 40 LDY #$40 A:40 X:D6 Y:D6 P:E5 SP:F9 CYC: 93 SL:48 +F8E1 60 RTS A:40 X:D6 Y:40 P:65 SP:F9 CYC: 99 SL:48 +D7AF CC 78 06 CPY $0678 = 40 A:40 X:D6 Y:40 P:65 SP:FB CYC:117 SL:48 +D7B2 20 E2 F8 JSR $F8E2 A:40 X:D6 Y:40 P:67 SP:FB CYC:129 SL:48 +F8E2 30 07 BMI $F8EB A:40 X:D6 Y:40 P:67 SP:F9 CYC:147 SL:48 +F8E4 90 05 BCC $F8EB A:40 X:D6 Y:40 P:67 SP:F9 CYC:153 SL:48 +F8E6 D0 03 BNE $F8EB A:40 X:D6 Y:40 P:67 SP:F9 CYC:159 SL:48 +F8E8 50 01 BVC $F8EB A:40 X:D6 Y:40 P:67 SP:F9 CYC:165 SL:48 +F8EA 60 RTS A:40 X:D6 Y:40 P:67 SP:F9 CYC:171 SL:48 +D7B5 E8 INX A:40 X:D6 Y:40 P:67 SP:FB CYC:189 SL:48 +D7B6 A9 3F LDA #$3F A:40 X:D7 Y:40 P:E5 SP:FB CYC:195 SL:48 +D7B8 8D 78 06 STA $0678 = 40 A:3F X:D7 Y:40 P:65 SP:FB CYC:201 SL:48 +D7BB 20 EE F8 JSR $F8EE A:3F X:D7 Y:40 P:65 SP:FB CYC:213 SL:48 +F8EE B8 CLV A:3F X:D7 Y:40 P:65 SP:F9 CYC:231 SL:48 +F8EF 60 RTS A:3F X:D7 Y:40 P:25 SP:F9 CYC:237 SL:48 +D7BE CC 78 06 CPY $0678 = 3F A:3F X:D7 Y:40 P:25 SP:FB CYC:255 SL:48 +D7C1 20 F0 F8 JSR $F8F0 A:3F X:D7 Y:40 P:25 SP:FB CYC:267 SL:48 +F8F0 F0 07 BEQ $F8F9 A:3F X:D7 Y:40 P:25 SP:F9 CYC:285 SL:48 +F8F2 30 05 BMI $F8F9 A:3F X:D7 Y:40 P:25 SP:F9 CYC:291 SL:48 +F8F4 90 03 BCC $F8F9 A:3F X:D7 Y:40 P:25 SP:F9 CYC:297 SL:48 +F8F6 70 01 BVS $F8F9 A:3F X:D7 Y:40 P:25 SP:F9 CYC:303 SL:48 +F8F8 60 RTS A:3F X:D7 Y:40 P:25 SP:F9 CYC:309 SL:48 +D7C4 E8 INX A:3F X:D7 Y:40 P:25 SP:FB CYC:327 SL:48 +D7C5 A9 41 LDA #$41 A:3F X:D8 Y:40 P:A5 SP:FB CYC:333 SL:48 +D7C7 8D 78 06 STA $0678 = 3F A:41 X:D8 Y:40 P:25 SP:FB CYC:339 SL:48 +D7CA CC 78 06 CPY $0678 = 41 A:41 X:D8 Y:40 P:25 SP:FB CYC: 10 SL:49 +D7CD 20 FC F8 JSR $F8FC A:41 X:D8 Y:40 P:A4 SP:FB CYC: 22 SL:49 +F8FC F0 05 BEQ $F903 A:41 X:D8 Y:40 P:A4 SP:F9 CYC: 40 SL:49 +F8FE 10 03 BPL $F903 A:41 X:D8 Y:40 P:A4 SP:F9 CYC: 46 SL:49 +F900 10 01 BPL $F903 A:41 X:D8 Y:40 P:A4 SP:F9 CYC: 52 SL:49 +F902 60 RTS A:41 X:D8 Y:40 P:A4 SP:F9 CYC: 58 SL:49 +D7D0 E8 INX A:41 X:D8 Y:40 P:A4 SP:FB CYC: 76 SL:49 +D7D1 A9 00 LDA #$00 A:41 X:D9 Y:40 P:A4 SP:FB CYC: 82 SL:49 +D7D3 8D 78 06 STA $0678 = 41 A:00 X:D9 Y:40 P:26 SP:FB CYC: 88 SL:49 +D7D6 20 06 F9 JSR $F906 A:00 X:D9 Y:40 P:26 SP:FB CYC:100 SL:49 +F906 A0 80 LDY #$80 A:00 X:D9 Y:40 P:26 SP:F9 CYC:118 SL:49 +F908 60 RTS A:00 X:D9 Y:80 P:A4 SP:F9 CYC:124 SL:49 +D7D9 CC 78 06 CPY $0678 = 00 A:00 X:D9 Y:80 P:A4 SP:FB CYC:142 SL:49 +D7DC 20 09 F9 JSR $F909 A:00 X:D9 Y:80 P:A5 SP:FB CYC:154 SL:49 +F909 F0 05 BEQ $F910 A:00 X:D9 Y:80 P:A5 SP:F9 CYC:172 SL:49 +F90B 10 03 BPL $F910 A:00 X:D9 Y:80 P:A5 SP:F9 CYC:178 SL:49 +F90D 90 01 BCC $F910 A:00 X:D9 Y:80 P:A5 SP:F9 CYC:184 SL:49 +F90F 60 RTS A:00 X:D9 Y:80 P:A5 SP:F9 CYC:190 SL:49 +D7DF E8 INX A:00 X:D9 Y:80 P:A5 SP:FB CYC:208 SL:49 +D7E0 A9 80 LDA #$80 A:00 X:DA Y:80 P:A5 SP:FB CYC:214 SL:49 +D7E2 8D 78 06 STA $0678 = 00 A:80 X:DA Y:80 P:A5 SP:FB CYC:220 SL:49 +D7E5 CC 78 06 CPY $0678 = 80 A:80 X:DA Y:80 P:A5 SP:FB CYC:232 SL:49 +D7E8 20 13 F9 JSR $F913 A:80 X:DA Y:80 P:27 SP:FB CYC:244 SL:49 +F913 D0 05 BNE $F91A A:80 X:DA Y:80 P:27 SP:F9 CYC:262 SL:49 +F915 30 03 BMI $F91A A:80 X:DA Y:80 P:27 SP:F9 CYC:268 SL:49 +F917 90 01 BCC $F91A A:80 X:DA Y:80 P:27 SP:F9 CYC:274 SL:49 +F919 60 RTS A:80 X:DA Y:80 P:27 SP:F9 CYC:280 SL:49 +D7EB E8 INX A:80 X:DA Y:80 P:27 SP:FB CYC:298 SL:49 +D7EC A9 81 LDA #$81 A:80 X:DB Y:80 P:A5 SP:FB CYC:304 SL:49 +D7EE 8D 78 06 STA $0678 = 80 A:81 X:DB Y:80 P:A5 SP:FB CYC:310 SL:49 +D7F1 CC 78 06 CPY $0678 = 81 A:81 X:DB Y:80 P:A5 SP:FB CYC:322 SL:49 +D7F4 20 1D F9 JSR $F91D A:81 X:DB Y:80 P:A4 SP:FB CYC:334 SL:49 +F91D B0 05 BCS $F924 A:81 X:DB Y:80 P:A4 SP:F9 CYC: 11 SL:50 +F91F F0 03 BEQ $F924 A:81 X:DB Y:80 P:A4 SP:F9 CYC: 17 SL:50 +F921 10 01 BPL $F924 A:81 X:DB Y:80 P:A4 SP:F9 CYC: 23 SL:50 +F923 60 RTS A:81 X:DB Y:80 P:A4 SP:F9 CYC: 29 SL:50 +D7F7 E8 INX A:81 X:DB Y:80 P:A4 SP:FB CYC: 47 SL:50 +D7F8 A9 7F LDA #$7F A:81 X:DC Y:80 P:A4 SP:FB CYC: 53 SL:50 +D7FA 8D 78 06 STA $0678 = 81 A:7F X:DC Y:80 P:24 SP:FB CYC: 59 SL:50 +D7FD CC 78 06 CPY $0678 = 7F A:7F X:DC Y:80 P:24 SP:FB CYC: 71 SL:50 +D800 20 27 F9 JSR $F927 A:7F X:DC Y:80 P:25 SP:FB CYC: 83 SL:50 +F927 90 05 BCC $F92E A:7F X:DC Y:80 P:25 SP:F9 CYC:101 SL:50 +F929 F0 03 BEQ $F92E A:7F X:DC Y:80 P:25 SP:F9 CYC:107 SL:50 +F92B 30 01 BMI $F92E A:7F X:DC Y:80 P:25 SP:F9 CYC:113 SL:50 +F92D 60 RTS A:7F X:DC Y:80 P:25 SP:F9 CYC:119 SL:50 +D803 E8 INX A:7F X:DC Y:80 P:25 SP:FB CYC:137 SL:50 +D804 8A TXA A:7F X:DD Y:80 P:A5 SP:FB CYC:143 SL:50 +D805 A8 TAY A:DD X:DD Y:80 P:A5 SP:FB CYC:149 SL:50 +D806 20 90 F9 JSR $F990 A:DD X:DD Y:DD P:A5 SP:FB CYC:155 SL:50 +F990 A2 55 LDX #$55 A:DD X:DD Y:DD P:A5 SP:F9 CYC:173 SL:50 +F992 A9 FF LDA #$FF A:DD X:55 Y:DD P:25 SP:F9 CYC:179 SL:50 +F994 85 01 STA $01 = FF A:FF X:55 Y:DD P:A5 SP:F9 CYC:185 SL:50 +F996 EA NOP A:FF X:55 Y:DD P:A5 SP:F9 CYC:194 SL:50 +F997 24 01 BIT $01 = FF A:FF X:55 Y:DD P:A5 SP:F9 CYC:200 SL:50 +F999 38 SEC A:FF X:55 Y:DD P:E5 SP:F9 CYC:209 SL:50 +F99A A9 01 LDA #$01 A:FF X:55 Y:DD P:E5 SP:F9 CYC:215 SL:50 +F99C 60 RTS A:01 X:55 Y:DD P:65 SP:F9 CYC:221 SL:50 +D809 8D 78 06 STA $0678 = 7F A:01 X:55 Y:DD P:65 SP:FB CYC:239 SL:50 +D80C 4E 78 06 LSR $0678 = 01 A:01 X:55 Y:DD P:65 SP:FB CYC:251 SL:50 +D80F AD 78 06 LDA $0678 = 00 A:01 X:55 Y:DD P:67 SP:FB CYC:269 SL:50 +D812 20 9D F9 JSR $F99D A:00 X:55 Y:DD P:67 SP:FB CYC:281 SL:50 +F99D 90 1B BCC $F9BA A:00 X:55 Y:DD P:67 SP:F9 CYC:299 SL:50 +F99F D0 19 BNE $F9BA A:00 X:55 Y:DD P:67 SP:F9 CYC:305 SL:50 +F9A1 30 17 BMI $F9BA A:00 X:55 Y:DD P:67 SP:F9 CYC:311 SL:50 +F9A3 50 15 BVC $F9BA A:00 X:55 Y:DD P:67 SP:F9 CYC:317 SL:50 +F9A5 C9 00 CMP #$00 A:00 X:55 Y:DD P:67 SP:F9 CYC:323 SL:50 +F9A7 D0 11 BNE $F9BA A:00 X:55 Y:DD P:67 SP:F9 CYC:329 SL:50 +F9A9 B8 CLV A:00 X:55 Y:DD P:67 SP:F9 CYC:335 SL:50 +F9AA A9 AA LDA #$AA A:00 X:55 Y:DD P:27 SP:F9 CYC: 0 SL:51 +F9AC 60 RTS A:AA X:55 Y:DD P:A5 SP:F9 CYC: 6 SL:51 +D815 C8 INY A:AA X:55 Y:DD P:A5 SP:FB CYC: 24 SL:51 +D816 8D 78 06 STA $0678 = 00 A:AA X:55 Y:DE P:A5 SP:FB CYC: 30 SL:51 +D819 4E 78 06 LSR $0678 = AA A:AA X:55 Y:DE P:A5 SP:FB CYC: 42 SL:51 +D81C AD 78 06 LDA $0678 = 55 A:AA X:55 Y:DE P:24 SP:FB CYC: 60 SL:51 +D81F 20 AD F9 JSR $F9AD A:55 X:55 Y:DE P:24 SP:FB CYC: 72 SL:51 +F9AD B0 0B BCS $F9BA A:55 X:55 Y:DE P:24 SP:F9 CYC: 90 SL:51 +F9AF F0 09 BEQ $F9BA A:55 X:55 Y:DE P:24 SP:F9 CYC: 96 SL:51 +F9B1 30 07 BMI $F9BA A:55 X:55 Y:DE P:24 SP:F9 CYC:102 SL:51 +F9B3 70 05 BVS $F9BA A:55 X:55 Y:DE P:24 SP:F9 CYC:108 SL:51 +F9B5 C9 55 CMP #$55 A:55 X:55 Y:DE P:24 SP:F9 CYC:114 SL:51 +F9B7 D0 01 BNE $F9BA A:55 X:55 Y:DE P:27 SP:F9 CYC:120 SL:51 +F9B9 60 RTS A:55 X:55 Y:DE P:27 SP:F9 CYC:126 SL:51 +D822 C8 INY A:55 X:55 Y:DE P:27 SP:FB CYC:144 SL:51 +D823 20 BD F9 JSR $F9BD A:55 X:55 Y:DF P:A5 SP:FB CYC:150 SL:51 +F9BD 24 01 BIT $01 = FF A:55 X:55 Y:DF P:A5 SP:F9 CYC:168 SL:51 +F9BF 38 SEC A:55 X:55 Y:DF P:E5 SP:F9 CYC:177 SL:51 +F9C0 A9 80 LDA #$80 A:55 X:55 Y:DF P:E5 SP:F9 CYC:183 SL:51 +F9C2 60 RTS A:80 X:55 Y:DF P:E5 SP:F9 CYC:189 SL:51 +D826 8D 78 06 STA $0678 = 55 A:80 X:55 Y:DF P:E5 SP:FB CYC:207 SL:51 +D829 0E 78 06 ASL $0678 = 80 A:80 X:55 Y:DF P:E5 SP:FB CYC:219 SL:51 +D82C AD 78 06 LDA $0678 = 00 A:80 X:55 Y:DF P:67 SP:FB CYC:237 SL:51 +D82F 20 C3 F9 JSR $F9C3 A:00 X:55 Y:DF P:67 SP:FB CYC:249 SL:51 +F9C3 90 1C BCC $F9E1 A:00 X:55 Y:DF P:67 SP:F9 CYC:267 SL:51 +F9C5 D0 1A BNE $F9E1 A:00 X:55 Y:DF P:67 SP:F9 CYC:273 SL:51 +F9C7 30 18 BMI $F9E1 A:00 X:55 Y:DF P:67 SP:F9 CYC:279 SL:51 +F9C9 50 16 BVC $F9E1 A:00 X:55 Y:DF P:67 SP:F9 CYC:285 SL:51 +F9CB C9 00 CMP #$00 A:00 X:55 Y:DF P:67 SP:F9 CYC:291 SL:51 +F9CD D0 12 BNE $F9E1 A:00 X:55 Y:DF P:67 SP:F9 CYC:297 SL:51 +F9CF B8 CLV A:00 X:55 Y:DF P:67 SP:F9 CYC:303 SL:51 +F9D0 A9 55 LDA #$55 A:00 X:55 Y:DF P:27 SP:F9 CYC:309 SL:51 +F9D2 38 SEC A:55 X:55 Y:DF P:25 SP:F9 CYC:315 SL:51 +F9D3 60 RTS A:55 X:55 Y:DF P:25 SP:F9 CYC:321 SL:51 +D832 C8 INY A:55 X:55 Y:DF P:25 SP:FB CYC:339 SL:51 +D833 8D 78 06 STA $0678 = 00 A:55 X:55 Y:E0 P:A5 SP:FB CYC: 4 SL:52 +D836 0E 78 06 ASL $0678 = 55 A:55 X:55 Y:E0 P:A5 SP:FB CYC: 16 SL:52 +D839 AD 78 06 LDA $0678 = AA A:55 X:55 Y:E0 P:A4 SP:FB CYC: 34 SL:52 +D83C 20 D4 F9 JSR $F9D4 A:AA X:55 Y:E0 P:A4 SP:FB CYC: 46 SL:52 +F9D4 B0 0B BCS $F9E1 A:AA X:55 Y:E0 P:A4 SP:F9 CYC: 64 SL:52 +F9D6 F0 09 BEQ $F9E1 A:AA X:55 Y:E0 P:A4 SP:F9 CYC: 70 SL:52 +F9D8 10 07 BPL $F9E1 A:AA X:55 Y:E0 P:A4 SP:F9 CYC: 76 SL:52 +F9DA 70 05 BVS $F9E1 A:AA X:55 Y:E0 P:A4 SP:F9 CYC: 82 SL:52 +F9DC C9 AA CMP #$AA A:AA X:55 Y:E0 P:A4 SP:F9 CYC: 88 SL:52 +F9DE D0 01 BNE $F9E1 A:AA X:55 Y:E0 P:27 SP:F9 CYC: 94 SL:52 +F9E0 60 RTS A:AA X:55 Y:E0 P:27 SP:F9 CYC:100 SL:52 +D83F C8 INY A:AA X:55 Y:E0 P:27 SP:FB CYC:118 SL:52 +D840 20 E4 F9 JSR $F9E4 A:AA X:55 Y:E1 P:A5 SP:FB CYC:124 SL:52 +F9E4 24 01 BIT $01 = FF A:AA X:55 Y:E1 P:A5 SP:F9 CYC:142 SL:52 +F9E6 38 SEC A:AA X:55 Y:E1 P:E5 SP:F9 CYC:151 SL:52 +F9E7 A9 01 LDA #$01 A:AA X:55 Y:E1 P:E5 SP:F9 CYC:157 SL:52 +F9E9 60 RTS A:01 X:55 Y:E1 P:65 SP:F9 CYC:163 SL:52 +D843 8D 78 06 STA $0678 = AA A:01 X:55 Y:E1 P:65 SP:FB CYC:181 SL:52 +D846 6E 78 06 ROR $0678 = 01 A:01 X:55 Y:E1 P:65 SP:FB CYC:193 SL:52 +D849 AD 78 06 LDA $0678 = 80 A:01 X:55 Y:E1 P:E5 SP:FB CYC:211 SL:52 +D84C 20 EA F9 JSR $F9EA A:80 X:55 Y:E1 P:E5 SP:FB CYC:223 SL:52 +F9EA 90 1C BCC $FA08 A:80 X:55 Y:E1 P:E5 SP:F9 CYC:241 SL:52 +F9EC F0 1A BEQ $FA08 A:80 X:55 Y:E1 P:E5 SP:F9 CYC:247 SL:52 +F9EE 10 18 BPL $FA08 A:80 X:55 Y:E1 P:E5 SP:F9 CYC:253 SL:52 +F9F0 50 16 BVC $FA08 A:80 X:55 Y:E1 P:E5 SP:F9 CYC:259 SL:52 +F9F2 C9 80 CMP #$80 A:80 X:55 Y:E1 P:E5 SP:F9 CYC:265 SL:52 +F9F4 D0 12 BNE $FA08 A:80 X:55 Y:E1 P:67 SP:F9 CYC:271 SL:52 +F9F6 B8 CLV A:80 X:55 Y:E1 P:67 SP:F9 CYC:277 SL:52 +F9F7 18 CLC A:80 X:55 Y:E1 P:27 SP:F9 CYC:283 SL:52 +F9F8 A9 55 LDA #$55 A:80 X:55 Y:E1 P:26 SP:F9 CYC:289 SL:52 +F9FA 60 RTS A:55 X:55 Y:E1 P:24 SP:F9 CYC:295 SL:52 +D84F C8 INY A:55 X:55 Y:E1 P:24 SP:FB CYC:313 SL:52 +D850 8D 78 06 STA $0678 = 80 A:55 X:55 Y:E2 P:A4 SP:FB CYC:319 SL:52 +D853 6E 78 06 ROR $0678 = 55 A:55 X:55 Y:E2 P:A4 SP:FB CYC:331 SL:52 +D856 AD 78 06 LDA $0678 = 2A A:55 X:55 Y:E2 P:25 SP:FB CYC: 8 SL:53 +D859 20 FB F9 JSR $F9FB A:2A X:55 Y:E2 P:25 SP:FB CYC: 20 SL:53 +F9FB 90 0B BCC $FA08 A:2A X:55 Y:E2 P:25 SP:F9 CYC: 38 SL:53 +F9FD F0 09 BEQ $FA08 A:2A X:55 Y:E2 P:25 SP:F9 CYC: 44 SL:53 +F9FF 30 07 BMI $FA08 A:2A X:55 Y:E2 P:25 SP:F9 CYC: 50 SL:53 +FA01 70 05 BVS $FA08 A:2A X:55 Y:E2 P:25 SP:F9 CYC: 56 SL:53 +FA03 C9 2A CMP #$2A A:2A X:55 Y:E2 P:25 SP:F9 CYC: 62 SL:53 +FA05 D0 01 BNE $FA08 A:2A X:55 Y:E2 P:27 SP:F9 CYC: 68 SL:53 +FA07 60 RTS A:2A X:55 Y:E2 P:27 SP:F9 CYC: 74 SL:53 +D85C C8 INY A:2A X:55 Y:E2 P:27 SP:FB CYC: 92 SL:53 +D85D 20 0A FA JSR $FA0A A:2A X:55 Y:E3 P:A5 SP:FB CYC: 98 SL:53 +FA0A 24 01 BIT $01 = FF A:2A X:55 Y:E3 P:A5 SP:F9 CYC:116 SL:53 +FA0C 38 SEC A:2A X:55 Y:E3 P:E5 SP:F9 CYC:125 SL:53 +FA0D A9 80 LDA #$80 A:2A X:55 Y:E3 P:E5 SP:F9 CYC:131 SL:53 +FA0F 60 RTS A:80 X:55 Y:E3 P:E5 SP:F9 CYC:137 SL:53 +D860 8D 78 06 STA $0678 = 2A A:80 X:55 Y:E3 P:E5 SP:FB CYC:155 SL:53 +D863 2E 78 06 ROL $0678 = 80 A:80 X:55 Y:E3 P:E5 SP:FB CYC:167 SL:53 +D866 AD 78 06 LDA $0678 = 01 A:80 X:55 Y:E3 P:65 SP:FB CYC:185 SL:53 +D869 20 10 FA JSR $FA10 A:01 X:55 Y:E3 P:65 SP:FB CYC:197 SL:53 +FA10 90 1C BCC $FA2E A:01 X:55 Y:E3 P:65 SP:F9 CYC:215 SL:53 +FA12 F0 1A BEQ $FA2E A:01 X:55 Y:E3 P:65 SP:F9 CYC:221 SL:53 +FA14 30 18 BMI $FA2E A:01 X:55 Y:E3 P:65 SP:F9 CYC:227 SL:53 +FA16 50 16 BVC $FA2E A:01 X:55 Y:E3 P:65 SP:F9 CYC:233 SL:53 +FA18 C9 01 CMP #$01 A:01 X:55 Y:E3 P:65 SP:F9 CYC:239 SL:53 +FA1A D0 12 BNE $FA2E A:01 X:55 Y:E3 P:67 SP:F9 CYC:245 SL:53 +FA1C B8 CLV A:01 X:55 Y:E3 P:67 SP:F9 CYC:251 SL:53 +FA1D 18 CLC A:01 X:55 Y:E3 P:27 SP:F9 CYC:257 SL:53 +FA1E A9 55 LDA #$55 A:01 X:55 Y:E3 P:26 SP:F9 CYC:263 SL:53 +FA20 60 RTS A:55 X:55 Y:E3 P:24 SP:F9 CYC:269 SL:53 +D86C C8 INY A:55 X:55 Y:E3 P:24 SP:FB CYC:287 SL:53 +D86D 8D 78 06 STA $0678 = 01 A:55 X:55 Y:E4 P:A4 SP:FB CYC:293 SL:53 +D870 2E 78 06 ROL $0678 = 55 A:55 X:55 Y:E4 P:A4 SP:FB CYC:305 SL:53 +D873 AD 78 06 LDA $0678 = AA A:55 X:55 Y:E4 P:A4 SP:FB CYC:323 SL:53 +D876 20 21 FA JSR $FA21 A:AA X:55 Y:E4 P:A4 SP:FB CYC:335 SL:53 +FA21 B0 0B BCS $FA2E A:AA X:55 Y:E4 P:A4 SP:F9 CYC: 12 SL:54 +FA23 F0 09 BEQ $FA2E A:AA X:55 Y:E4 P:A4 SP:F9 CYC: 18 SL:54 +FA25 10 07 BPL $FA2E A:AA X:55 Y:E4 P:A4 SP:F9 CYC: 24 SL:54 +FA27 70 05 BVS $FA2E A:AA X:55 Y:E4 P:A4 SP:F9 CYC: 30 SL:54 +FA29 C9 AA CMP #$AA A:AA X:55 Y:E4 P:A4 SP:F9 CYC: 36 SL:54 +FA2B D0 01 BNE $FA2E A:AA X:55 Y:E4 P:27 SP:F9 CYC: 42 SL:54 +FA2D 60 RTS A:AA X:55 Y:E4 P:27 SP:F9 CYC: 48 SL:54 +D879 A9 FF LDA #$FF A:AA X:55 Y:E4 P:27 SP:FB CYC: 66 SL:54 +D87B 8D 78 06 STA $0678 = AA A:FF X:55 Y:E4 P:A5 SP:FB CYC: 72 SL:54 +D87E 85 01 STA $01 = FF A:FF X:55 Y:E4 P:A5 SP:FB CYC: 84 SL:54 +D880 24 01 BIT $01 = FF A:FF X:55 Y:E4 P:A5 SP:FB CYC: 93 SL:54 +D882 38 SEC A:FF X:55 Y:E4 P:E5 SP:FB CYC:102 SL:54 +D883 EE 78 06 INC $0678 = FF A:FF X:55 Y:E4 P:E5 SP:FB CYC:108 SL:54 +D886 D0 0D BNE $D895 A:FF X:55 Y:E4 P:67 SP:FB CYC:126 SL:54 +D888 30 0B BMI $D895 A:FF X:55 Y:E4 P:67 SP:FB CYC:132 SL:54 +D88A 50 09 BVC $D895 A:FF X:55 Y:E4 P:67 SP:FB CYC:138 SL:54 +D88C 90 07 BCC $D895 A:FF X:55 Y:E4 P:67 SP:FB CYC:144 SL:54 +D88E AD 78 06 LDA $0678 = 00 A:FF X:55 Y:E4 P:67 SP:FB CYC:150 SL:54 +D891 C9 00 CMP #$00 A:00 X:55 Y:E4 P:67 SP:FB CYC:162 SL:54 +D893 F0 04 BEQ $D899 A:00 X:55 Y:E4 P:67 SP:FB CYC:168 SL:54 +D899 A9 7F LDA #$7F A:00 X:55 Y:E4 P:67 SP:FB CYC:177 SL:54 +D89B 8D 78 06 STA $0678 = 00 A:7F X:55 Y:E4 P:65 SP:FB CYC:183 SL:54 +D89E B8 CLV A:7F X:55 Y:E4 P:65 SP:FB CYC:195 SL:54 +D89F 18 CLC A:7F X:55 Y:E4 P:25 SP:FB CYC:201 SL:54 +D8A0 EE 78 06 INC $0678 = 7F A:7F X:55 Y:E4 P:24 SP:FB CYC:207 SL:54 +D8A3 F0 0D BEQ $D8B2 A:7F X:55 Y:E4 P:A4 SP:FB CYC:225 SL:54 +D8A5 10 0B BPL $D8B2 A:7F X:55 Y:E4 P:A4 SP:FB CYC:231 SL:54 +D8A7 70 09 BVS $D8B2 A:7F X:55 Y:E4 P:A4 SP:FB CYC:237 SL:54 +D8A9 B0 07 BCS $D8B2 A:7F X:55 Y:E4 P:A4 SP:FB CYC:243 SL:54 +D8AB AD 78 06 LDA $0678 = 80 A:7F X:55 Y:E4 P:A4 SP:FB CYC:249 SL:54 +D8AE C9 80 CMP #$80 A:80 X:55 Y:E4 P:A4 SP:FB CYC:261 SL:54 +D8B0 F0 04 BEQ $D8B6 A:80 X:55 Y:E4 P:27 SP:FB CYC:267 SL:54 +D8B6 A9 00 LDA #$00 A:80 X:55 Y:E4 P:27 SP:FB CYC:276 SL:54 +D8B8 8D 78 06 STA $0678 = 80 A:00 X:55 Y:E4 P:27 SP:FB CYC:282 SL:54 +D8BB 24 01 BIT $01 = FF A:00 X:55 Y:E4 P:27 SP:FB CYC:294 SL:54 +D8BD 38 SEC A:00 X:55 Y:E4 P:E7 SP:FB CYC:303 SL:54 +D8BE CE 78 06 DEC $0678 = 00 A:00 X:55 Y:E4 P:E7 SP:FB CYC:309 SL:54 +D8C1 F0 0D BEQ $D8D0 A:00 X:55 Y:E4 P:E5 SP:FB CYC:327 SL:54 +D8C3 10 0B BPL $D8D0 A:00 X:55 Y:E4 P:E5 SP:FB CYC:333 SL:54 +D8C5 50 09 BVC $D8D0 A:00 X:55 Y:E4 P:E5 SP:FB CYC:339 SL:54 +D8C7 90 07 BCC $D8D0 A:00 X:55 Y:E4 P:E5 SP:FB CYC: 4 SL:55 +D8C9 AD 78 06 LDA $0678 = FF A:00 X:55 Y:E4 P:E5 SP:FB CYC: 10 SL:55 +D8CC C9 FF CMP #$FF A:FF X:55 Y:E4 P:E5 SP:FB CYC: 22 SL:55 +D8CE F0 04 BEQ $D8D4 A:FF X:55 Y:E4 P:67 SP:FB CYC: 28 SL:55 +D8D4 A9 80 LDA #$80 A:FF X:55 Y:E4 P:67 SP:FB CYC: 37 SL:55 +D8D6 8D 78 06 STA $0678 = FF A:80 X:55 Y:E4 P:E5 SP:FB CYC: 43 SL:55 +D8D9 B8 CLV A:80 X:55 Y:E4 P:E5 SP:FB CYC: 55 SL:55 +D8DA 18 CLC A:80 X:55 Y:E4 P:A5 SP:FB CYC: 61 SL:55 +D8DB CE 78 06 DEC $0678 = 80 A:80 X:55 Y:E4 P:A4 SP:FB CYC: 67 SL:55 +D8DE F0 0D BEQ $D8ED A:80 X:55 Y:E4 P:24 SP:FB CYC: 85 SL:55 +D8E0 30 0B BMI $D8ED A:80 X:55 Y:E4 P:24 SP:FB CYC: 91 SL:55 +D8E2 70 09 BVS $D8ED A:80 X:55 Y:E4 P:24 SP:FB CYC: 97 SL:55 +D8E4 B0 07 BCS $D8ED A:80 X:55 Y:E4 P:24 SP:FB CYC:103 SL:55 +D8E6 AD 78 06 LDA $0678 = 7F A:80 X:55 Y:E4 P:24 SP:FB CYC:109 SL:55 +D8E9 C9 7F CMP #$7F A:7F X:55 Y:E4 P:24 SP:FB CYC:121 SL:55 +D8EB F0 04 BEQ $D8F1 A:7F X:55 Y:E4 P:27 SP:FB CYC:127 SL:55 +D8F1 A9 01 LDA #$01 A:7F X:55 Y:E4 P:27 SP:FB CYC:136 SL:55 +D8F3 8D 78 06 STA $0678 = 7F A:01 X:55 Y:E4 P:25 SP:FB CYC:142 SL:55 +D8F6 CE 78 06 DEC $0678 = 01 A:01 X:55 Y:E4 P:25 SP:FB CYC:154 SL:55 +D8F9 F0 04 BEQ $D8FF A:01 X:55 Y:E4 P:27 SP:FB CYC:172 SL:55 +D8FF 60 RTS A:01 X:55 Y:E4 P:27 SP:FB CYC:181 SL:55 +C618 20 00 D9 JSR $D900 A:01 X:55 Y:E4 P:27 SP:FD CYC:199 SL:55 +D900 A9 A3 LDA #$A3 A:01 X:55 Y:E4 P:27 SP:FB CYC:217 SL:55 +D902 85 33 STA $33 = 00 A:A3 X:55 Y:E4 P:A5 SP:FB CYC:223 SL:55 +D904 A9 89 LDA #$89 A:A3 X:55 Y:E4 P:A5 SP:FB CYC:232 SL:55 +D906 8D 00 03 STA $0300 = 70 A:89 X:55 Y:E4 P:A5 SP:FB CYC:238 SL:55 +D909 A9 12 LDA #$12 A:89 X:55 Y:E4 P:A5 SP:FB CYC:250 SL:55 +D90B 8D 45 02 STA $0245 = 00 A:12 X:55 Y:E4 P:25 SP:FB CYC:256 SL:55 +D90E A9 FF LDA #$FF A:12 X:55 Y:E4 P:25 SP:FB CYC:268 SL:55 +D910 85 01 STA $01 = FF A:FF X:55 Y:E4 P:A5 SP:FB CYC:274 SL:55 +D912 A2 65 LDX #$65 A:FF X:55 Y:E4 P:A5 SP:FB CYC:283 SL:55 +D914 A9 00 LDA #$00 A:FF X:65 Y:E4 P:25 SP:FB CYC:289 SL:55 +D916 85 89 STA $89 = 00 A:00 X:65 Y:E4 P:27 SP:FB CYC:295 SL:55 +D918 A9 03 LDA #$03 A:00 X:65 Y:E4 P:27 SP:FB CYC:304 SL:55 +D91A 85 8A STA $8A = 00 A:03 X:65 Y:E4 P:25 SP:FB CYC:310 SL:55 +D91C A0 00 LDY #$00 A:03 X:65 Y:E4 P:25 SP:FB CYC:319 SL:55 +D91E 38 SEC A:03 X:65 Y:00 P:27 SP:FB CYC:325 SL:55 +D91F A9 00 LDA #$00 A:03 X:65 Y:00 P:27 SP:FB CYC:331 SL:55 +D921 B8 CLV A:00 X:65 Y:00 P:27 SP:FB CYC:337 SL:55 +D922 B1 89 LDA ($89),Y = 0300 @ 0300 = 89 A:00 X:65 Y:00 P:27 SP:FB CYC: 2 SL:56 +D924 F0 0C BEQ $D932 A:89 X:65 Y:00 P:A5 SP:FB CYC: 17 SL:56 +D926 90 0A BCC $D932 A:89 X:65 Y:00 P:A5 SP:FB CYC: 23 SL:56 +D928 70 08 BVS $D932 A:89 X:65 Y:00 P:A5 SP:FB CYC: 29 SL:56 +D92A C9 89 CMP #$89 A:89 X:65 Y:00 P:A5 SP:FB CYC: 35 SL:56 +D92C D0 04 BNE $D932 A:89 X:65 Y:00 P:27 SP:FB CYC: 41 SL:56 +D92E E0 65 CPX #$65 A:89 X:65 Y:00 P:27 SP:FB CYC: 47 SL:56 +D930 F0 04 BEQ $D936 A:89 X:65 Y:00 P:27 SP:FB CYC: 53 SL:56 +D936 A9 FF LDA #$FF A:89 X:65 Y:00 P:27 SP:FB CYC: 62 SL:56 +D938 85 97 STA $97 = 00 A:FF X:65 Y:00 P:A5 SP:FB CYC: 68 SL:56 +D93A 85 98 STA $98 = 00 A:FF X:65 Y:00 P:A5 SP:FB CYC: 77 SL:56 +D93C 24 98 BIT $98 = FF A:FF X:65 Y:00 P:A5 SP:FB CYC: 86 SL:56 +D93E A0 34 LDY #$34 A:FF X:65 Y:00 P:E5 SP:FB CYC: 95 SL:56 +D940 B1 97 LDA ($97),Y = FFFF @ 0033 = A3 A:FF X:65 Y:34 P:65 SP:FB CYC:101 SL:56 +D942 C9 A3 CMP #$A3 A:A3 X:65 Y:34 P:E5 SP:FB CYC:119 SL:56 +D944 D0 02 BNE $D948 A:A3 X:65 Y:34 P:67 SP:FB CYC:125 SL:56 +D946 B0 04 BCS $D94C A:A3 X:65 Y:34 P:67 SP:FB CYC:131 SL:56 +D94C A5 00 LDA $00 = 00 A:A3 X:65 Y:34 P:67 SP:FB CYC:140 SL:56 +D94E 48 PHA A:00 X:65 Y:34 P:67 SP:FB CYC:149 SL:56 +D94F A9 46 LDA #$46 A:00 X:65 Y:34 P:67 SP:FA CYC:158 SL:56 +D951 85 FF STA $FF = 00 A:46 X:65 Y:34 P:65 SP:FA CYC:164 SL:56 +D953 A9 01 LDA #$01 A:46 X:65 Y:34 P:65 SP:FA CYC:173 SL:56 +D955 85 00 STA $00 = 00 A:01 X:65 Y:34 P:65 SP:FA CYC:179 SL:56 +D957 A0 FF LDY #$FF A:01 X:65 Y:34 P:65 SP:FA CYC:188 SL:56 +D959 B1 FF LDA ($FF),Y = 0146 @ 0245 = 12 A:01 X:65 Y:FF P:E5 SP:FA CYC:194 SL:56 +D95B C9 12 CMP #$12 A:12 X:65 Y:FF P:65 SP:FA CYC:212 SL:56 +D95D F0 04 BEQ $D963 A:12 X:65 Y:FF P:67 SP:FA CYC:218 SL:56 +D963 68 PLA A:12 X:65 Y:FF P:67 SP:FA CYC:227 SL:56 +D964 85 00 STA $00 = 01 A:00 X:65 Y:FF P:67 SP:FB CYC:239 SL:56 +D966 A2 ED LDX #$ED A:00 X:65 Y:FF P:67 SP:FB CYC:248 SL:56 +D968 A9 00 LDA #$00 A:00 X:ED Y:FF P:E5 SP:FB CYC:254 SL:56 +D96A 85 33 STA $33 = A3 A:00 X:ED Y:FF P:67 SP:FB CYC:260 SL:56 +D96C A9 04 LDA #$04 A:00 X:ED Y:FF P:67 SP:FB CYC:269 SL:56 +D96E 85 34 STA $34 = 00 A:04 X:ED Y:FF P:65 SP:FB CYC:275 SL:56 +D970 A0 00 LDY #$00 A:04 X:ED Y:FF P:65 SP:FB CYC:284 SL:56 +D972 18 CLC A:04 X:ED Y:00 P:67 SP:FB CYC:290 SL:56 +D973 A9 FF LDA #$FF A:04 X:ED Y:00 P:66 SP:FB CYC:296 SL:56 +D975 85 01 STA $01 = FF A:FF X:ED Y:00 P:E4 SP:FB CYC:302 SL:56 +D977 24 01 BIT $01 = FF A:FF X:ED Y:00 P:E4 SP:FB CYC:311 SL:56 +D979 A9 AA LDA #$AA A:FF X:ED Y:00 P:E4 SP:FB CYC:320 SL:56 +D97B 8D 00 04 STA $0400 = AD A:AA X:ED Y:00 P:E4 SP:FB CYC:326 SL:56 +D97E A9 55 LDA #$55 A:AA X:ED Y:00 P:E4 SP:FB CYC:338 SL:56 +D980 11 33 ORA ($33),Y = 0400 @ 0400 = AA A:55 X:ED Y:00 P:64 SP:FB CYC: 3 SL:57 +D982 B0 08 BCS $D98C A:FF X:ED Y:00 P:E4 SP:FB CYC: 18 SL:57 +D984 10 06 BPL $D98C A:FF X:ED Y:00 P:E4 SP:FB CYC: 24 SL:57 +D986 C9 FF CMP #$FF A:FF X:ED Y:00 P:E4 SP:FB CYC: 30 SL:57 +D988 D0 02 BNE $D98C A:FF X:ED Y:00 P:67 SP:FB CYC: 36 SL:57 +D98A 70 02 BVS $D98E A:FF X:ED Y:00 P:67 SP:FB CYC: 42 SL:57 +D98E E8 INX A:FF X:ED Y:00 P:67 SP:FB CYC: 51 SL:57 +D98F 38 SEC A:FF X:EE Y:00 P:E5 SP:FB CYC: 57 SL:57 +D990 B8 CLV A:FF X:EE Y:00 P:E5 SP:FB CYC: 63 SL:57 +D991 A9 00 LDA #$00 A:FF X:EE Y:00 P:A5 SP:FB CYC: 69 SL:57 +D993 11 33 ORA ($33),Y = 0400 @ 0400 = AA A:00 X:EE Y:00 P:27 SP:FB CYC: 75 SL:57 +D995 F0 06 BEQ $D99D A:AA X:EE Y:00 P:A5 SP:FB CYC: 90 SL:57 +D997 70 04 BVS $D99D A:AA X:EE Y:00 P:A5 SP:FB CYC: 96 SL:57 +D999 90 02 BCC $D99D A:AA X:EE Y:00 P:A5 SP:FB CYC:102 SL:57 +D99B 30 02 BMI $D99F A:AA X:EE Y:00 P:A5 SP:FB CYC:108 SL:57 +D99F E8 INX A:AA X:EE Y:00 P:A5 SP:FB CYC:117 SL:57 +D9A0 18 CLC A:AA X:EF Y:00 P:A5 SP:FB CYC:123 SL:57 +D9A1 24 01 BIT $01 = FF A:AA X:EF Y:00 P:A4 SP:FB CYC:129 SL:57 +D9A3 A9 55 LDA #$55 A:AA X:EF Y:00 P:E4 SP:FB CYC:138 SL:57 +D9A5 31 33 AND ($33),Y = 0400 @ 0400 = AA A:55 X:EF Y:00 P:64 SP:FB CYC:144 SL:57 +D9A7 D0 06 BNE $D9AF A:00 X:EF Y:00 P:66 SP:FB CYC:159 SL:57 +D9A9 50 04 BVC $D9AF A:00 X:EF Y:00 P:66 SP:FB CYC:165 SL:57 +D9AB B0 02 BCS $D9AF A:00 X:EF Y:00 P:66 SP:FB CYC:171 SL:57 +D9AD 10 02 BPL $D9B1 A:00 X:EF Y:00 P:66 SP:FB CYC:177 SL:57 +D9B1 E8 INX A:00 X:EF Y:00 P:66 SP:FB CYC:186 SL:57 +D9B2 38 SEC A:00 X:F0 Y:00 P:E4 SP:FB CYC:192 SL:57 +D9B3 B8 CLV A:00 X:F0 Y:00 P:E5 SP:FB CYC:198 SL:57 +D9B4 A9 EF LDA #$EF A:00 X:F0 Y:00 P:A5 SP:FB CYC:204 SL:57 +D9B6 8D 00 04 STA $0400 = AA A:EF X:F0 Y:00 P:A5 SP:FB CYC:210 SL:57 +D9B9 A9 F8 LDA #$F8 A:EF X:F0 Y:00 P:A5 SP:FB CYC:222 SL:57 +D9BB 31 33 AND ($33),Y = 0400 @ 0400 = EF A:F8 X:F0 Y:00 P:A5 SP:FB CYC:228 SL:57 +D9BD 90 08 BCC $D9C7 A:E8 X:F0 Y:00 P:A5 SP:FB CYC:243 SL:57 +D9BF 10 06 BPL $D9C7 A:E8 X:F0 Y:00 P:A5 SP:FB CYC:249 SL:57 +D9C1 C9 E8 CMP #$E8 A:E8 X:F0 Y:00 P:A5 SP:FB CYC:255 SL:57 +D9C3 D0 02 BNE $D9C7 A:E8 X:F0 Y:00 P:27 SP:FB CYC:261 SL:57 +D9C5 50 02 BVC $D9C9 A:E8 X:F0 Y:00 P:27 SP:FB CYC:267 SL:57 +D9C9 E8 INX A:E8 X:F0 Y:00 P:27 SP:FB CYC:276 SL:57 +D9CA 18 CLC A:E8 X:F1 Y:00 P:A5 SP:FB CYC:282 SL:57 +D9CB 24 01 BIT $01 = FF A:E8 X:F1 Y:00 P:A4 SP:FB CYC:288 SL:57 +D9CD A9 AA LDA #$AA A:E8 X:F1 Y:00 P:E4 SP:FB CYC:297 SL:57 +D9CF 8D 00 04 STA $0400 = EF A:AA X:F1 Y:00 P:E4 SP:FB CYC:303 SL:57 +D9D2 A9 5F LDA #$5F A:AA X:F1 Y:00 P:E4 SP:FB CYC:315 SL:57 +D9D4 51 33 EOR ($33),Y = 0400 @ 0400 = AA A:5F X:F1 Y:00 P:64 SP:FB CYC:321 SL:57 +D9D6 B0 08 BCS $D9E0 A:F5 X:F1 Y:00 P:E4 SP:FB CYC:336 SL:57 +D9D8 10 06 BPL $D9E0 A:F5 X:F1 Y:00 P:E4 SP:FB CYC: 1 SL:58 +D9DA C9 F5 CMP #$F5 A:F5 X:F1 Y:00 P:E4 SP:FB CYC: 7 SL:58 +D9DC D0 02 BNE $D9E0 A:F5 X:F1 Y:00 P:67 SP:FB CYC: 13 SL:58 +D9DE 70 02 BVS $D9E2 A:F5 X:F1 Y:00 P:67 SP:FB CYC: 19 SL:58 +D9E2 E8 INX A:F5 X:F1 Y:00 P:67 SP:FB CYC: 28 SL:58 +D9E3 38 SEC A:F5 X:F2 Y:00 P:E5 SP:FB CYC: 34 SL:58 +D9E4 B8 CLV A:F5 X:F2 Y:00 P:E5 SP:FB CYC: 40 SL:58 +D9E5 A9 70 LDA #$70 A:F5 X:F2 Y:00 P:A5 SP:FB CYC: 46 SL:58 +D9E7 8D 00 04 STA $0400 = AA A:70 X:F2 Y:00 P:25 SP:FB CYC: 52 SL:58 +D9EA 51 33 EOR ($33),Y = 0400 @ 0400 = 70 A:70 X:F2 Y:00 P:25 SP:FB CYC: 64 SL:58 +D9EC D0 06 BNE $D9F4 A:00 X:F2 Y:00 P:27 SP:FB CYC: 79 SL:58 +D9EE 70 04 BVS $D9F4 A:00 X:F2 Y:00 P:27 SP:FB CYC: 85 SL:58 +D9F0 90 02 BCC $D9F4 A:00 X:F2 Y:00 P:27 SP:FB CYC: 91 SL:58 +D9F2 10 02 BPL $D9F6 A:00 X:F2 Y:00 P:27 SP:FB CYC: 97 SL:58 +D9F6 E8 INX A:00 X:F2 Y:00 P:27 SP:FB CYC:106 SL:58 +D9F7 18 CLC A:00 X:F3 Y:00 P:A5 SP:FB CYC:112 SL:58 +D9F8 24 01 BIT $01 = FF A:00 X:F3 Y:00 P:A4 SP:FB CYC:118 SL:58 +D9FA A9 69 LDA #$69 A:00 X:F3 Y:00 P:E6 SP:FB CYC:127 SL:58 +D9FC 8D 00 04 STA $0400 = 70 A:69 X:F3 Y:00 P:64 SP:FB CYC:133 SL:58 +D9FF A9 00 LDA #$00 A:69 X:F3 Y:00 P:64 SP:FB CYC:145 SL:58 +DA01 71 33 ADC ($33),Y = 0400 @ 0400 = 69 A:00 X:F3 Y:00 P:66 SP:FB CYC:151 SL:58 +DA03 30 08 BMI $DA0D A:69 X:F3 Y:00 P:24 SP:FB CYC:166 SL:58 +DA05 B0 06 BCS $DA0D A:69 X:F3 Y:00 P:24 SP:FB CYC:172 SL:58 +DA07 C9 69 CMP #$69 A:69 X:F3 Y:00 P:24 SP:FB CYC:178 SL:58 +DA09 D0 02 BNE $DA0D A:69 X:F3 Y:00 P:27 SP:FB CYC:184 SL:58 +DA0B 50 02 BVC $DA0F A:69 X:F3 Y:00 P:27 SP:FB CYC:190 SL:58 +DA0F E8 INX A:69 X:F3 Y:00 P:27 SP:FB CYC:199 SL:58 +DA10 38 SEC A:69 X:F4 Y:00 P:A5 SP:FB CYC:205 SL:58 +DA11 24 01 BIT $01 = FF A:69 X:F4 Y:00 P:A5 SP:FB CYC:211 SL:58 +DA13 A9 00 LDA #$00 A:69 X:F4 Y:00 P:E5 SP:FB CYC:220 SL:58 +DA15 71 33 ADC ($33),Y = 0400 @ 0400 = 69 A:00 X:F4 Y:00 P:67 SP:FB CYC:226 SL:58 +DA17 30 08 BMI $DA21 A:6A X:F4 Y:00 P:24 SP:FB CYC:241 SL:58 +DA19 B0 06 BCS $DA21 A:6A X:F4 Y:00 P:24 SP:FB CYC:247 SL:58 +DA1B C9 6A CMP #$6A A:6A X:F4 Y:00 P:24 SP:FB CYC:253 SL:58 +DA1D D0 02 BNE $DA21 A:6A X:F4 Y:00 P:27 SP:FB CYC:259 SL:58 +DA1F 50 02 BVC $DA23 A:6A X:F4 Y:00 P:27 SP:FB CYC:265 SL:58 +DA23 E8 INX A:6A X:F4 Y:00 P:27 SP:FB CYC:274 SL:58 +DA24 38 SEC A:6A X:F5 Y:00 P:A5 SP:FB CYC:280 SL:58 +DA25 B8 CLV A:6A X:F5 Y:00 P:A5 SP:FB CYC:286 SL:58 +DA26 A9 7F LDA #$7F A:6A X:F5 Y:00 P:A5 SP:FB CYC:292 SL:58 +DA28 8D 00 04 STA $0400 = 69 A:7F X:F5 Y:00 P:25 SP:FB CYC:298 SL:58 +DA2B 71 33 ADC ($33),Y = 0400 @ 0400 = 7F A:7F X:F5 Y:00 P:25 SP:FB CYC:310 SL:58 +DA2D 10 08 BPL $DA37 A:FF X:F5 Y:00 P:E4 SP:FB CYC:325 SL:58 +DA2F B0 06 BCS $DA37 A:FF X:F5 Y:00 P:E4 SP:FB CYC:331 SL:58 +DA31 C9 FF CMP #$FF A:FF X:F5 Y:00 P:E4 SP:FB CYC:337 SL:58 +DA33 D0 02 BNE $DA37 A:FF X:F5 Y:00 P:67 SP:FB CYC: 2 SL:59 +DA35 70 02 BVS $DA39 A:FF X:F5 Y:00 P:67 SP:FB CYC: 8 SL:59 +DA39 E8 INX A:FF X:F5 Y:00 P:67 SP:FB CYC: 17 SL:59 +DA3A 18 CLC A:FF X:F6 Y:00 P:E5 SP:FB CYC: 23 SL:59 +DA3B 24 01 BIT $01 = FF A:FF X:F6 Y:00 P:E4 SP:FB CYC: 29 SL:59 +DA3D A9 80 LDA #$80 A:FF X:F6 Y:00 P:E4 SP:FB CYC: 38 SL:59 +DA3F 8D 00 04 STA $0400 = 7F A:80 X:F6 Y:00 P:E4 SP:FB CYC: 44 SL:59 +DA42 A9 7F LDA #$7F A:80 X:F6 Y:00 P:E4 SP:FB CYC: 56 SL:59 +DA44 71 33 ADC ($33),Y = 0400 @ 0400 = 80 A:7F X:F6 Y:00 P:64 SP:FB CYC: 62 SL:59 +DA46 10 08 BPL $DA50 A:FF X:F6 Y:00 P:A4 SP:FB CYC: 77 SL:59 +DA48 B0 06 BCS $DA50 A:FF X:F6 Y:00 P:A4 SP:FB CYC: 83 SL:59 +DA4A C9 FF CMP #$FF A:FF X:F6 Y:00 P:A4 SP:FB CYC: 89 SL:59 +DA4C D0 02 BNE $DA50 A:FF X:F6 Y:00 P:27 SP:FB CYC: 95 SL:59 +DA4E 50 02 BVC $DA52 A:FF X:F6 Y:00 P:27 SP:FB CYC:101 SL:59 +DA52 E8 INX A:FF X:F6 Y:00 P:27 SP:FB CYC:110 SL:59 +DA53 38 SEC A:FF X:F7 Y:00 P:A5 SP:FB CYC:116 SL:59 +DA54 B8 CLV A:FF X:F7 Y:00 P:A5 SP:FB CYC:122 SL:59 +DA55 A9 80 LDA #$80 A:FF X:F7 Y:00 P:A5 SP:FB CYC:128 SL:59 +DA57 8D 00 04 STA $0400 = 80 A:80 X:F7 Y:00 P:A5 SP:FB CYC:134 SL:59 +DA5A A9 7F LDA #$7F A:80 X:F7 Y:00 P:A5 SP:FB CYC:146 SL:59 +DA5C 71 33 ADC ($33),Y = 0400 @ 0400 = 80 A:7F X:F7 Y:00 P:25 SP:FB CYC:152 SL:59 +DA5E D0 06 BNE $DA66 A:00 X:F7 Y:00 P:27 SP:FB CYC:167 SL:59 +DA60 30 04 BMI $DA66 A:00 X:F7 Y:00 P:27 SP:FB CYC:173 SL:59 +DA62 70 02 BVS $DA66 A:00 X:F7 Y:00 P:27 SP:FB CYC:179 SL:59 +DA64 B0 02 BCS $DA68 A:00 X:F7 Y:00 P:27 SP:FB CYC:185 SL:59 +DA68 E8 INX A:00 X:F7 Y:00 P:27 SP:FB CYC:194 SL:59 +DA69 24 01 BIT $01 = FF A:00 X:F8 Y:00 P:A5 SP:FB CYC:200 SL:59 +DA6B A9 40 LDA #$40 A:00 X:F8 Y:00 P:E7 SP:FB CYC:209 SL:59 +DA6D 8D 00 04 STA $0400 = 80 A:40 X:F8 Y:00 P:65 SP:FB CYC:215 SL:59 +DA70 D1 33 CMP ($33),Y = 0400 @ 0400 = 40 A:40 X:F8 Y:00 P:65 SP:FB CYC:227 SL:59 +DA72 30 06 BMI $DA7A A:40 X:F8 Y:00 P:67 SP:FB CYC:242 SL:59 +DA74 90 04 BCC $DA7A A:40 X:F8 Y:00 P:67 SP:FB CYC:248 SL:59 +DA76 D0 02 BNE $DA7A A:40 X:F8 Y:00 P:67 SP:FB CYC:254 SL:59 +DA78 70 02 BVS $DA7C A:40 X:F8 Y:00 P:67 SP:FB CYC:260 SL:59 +DA7C E8 INX A:40 X:F8 Y:00 P:67 SP:FB CYC:269 SL:59 +DA7D B8 CLV A:40 X:F9 Y:00 P:E5 SP:FB CYC:275 SL:59 +DA7E CE 00 04 DEC $0400 = 40 A:40 X:F9 Y:00 P:A5 SP:FB CYC:281 SL:59 +DA81 D1 33 CMP ($33),Y = 0400 @ 0400 = 3F A:40 X:F9 Y:00 P:25 SP:FB CYC:299 SL:59 +DA83 F0 06 BEQ $DA8B A:40 X:F9 Y:00 P:25 SP:FB CYC:314 SL:59 +DA85 30 04 BMI $DA8B A:40 X:F9 Y:00 P:25 SP:FB CYC:320 SL:59 +DA87 90 02 BCC $DA8B A:40 X:F9 Y:00 P:25 SP:FB CYC:326 SL:59 +DA89 50 02 BVC $DA8D A:40 X:F9 Y:00 P:25 SP:FB CYC:332 SL:59 +DA8D E8 INX A:40 X:F9 Y:00 P:25 SP:FB CYC: 0 SL:60 +DA8E EE 00 04 INC $0400 = 3F A:40 X:FA Y:00 P:A5 SP:FB CYC: 6 SL:60 +DA91 EE 00 04 INC $0400 = 40 A:40 X:FA Y:00 P:25 SP:FB CYC: 24 SL:60 +DA94 D1 33 CMP ($33),Y = 0400 @ 0400 = 41 A:40 X:FA Y:00 P:25 SP:FB CYC: 42 SL:60 +DA96 F0 02 BEQ $DA9A A:40 X:FA Y:00 P:A4 SP:FB CYC: 57 SL:60 +DA98 30 02 BMI $DA9C A:40 X:FA Y:00 P:A4 SP:FB CYC: 63 SL:60 +DA9C E8 INX A:40 X:FA Y:00 P:A4 SP:FB CYC: 72 SL:60 +DA9D A9 00 LDA #$00 A:40 X:FB Y:00 P:A4 SP:FB CYC: 78 SL:60 +DA9F 8D 00 04 STA $0400 = 41 A:00 X:FB Y:00 P:26 SP:FB CYC: 84 SL:60 +DAA2 A9 80 LDA #$80 A:00 X:FB Y:00 P:26 SP:FB CYC: 96 SL:60 +DAA4 D1 33 CMP ($33),Y = 0400 @ 0400 = 00 A:80 X:FB Y:00 P:A4 SP:FB CYC:102 SL:60 +DAA6 F0 04 BEQ $DAAC A:80 X:FB Y:00 P:A5 SP:FB CYC:117 SL:60 +DAA8 10 02 BPL $DAAC A:80 X:FB Y:00 P:A5 SP:FB CYC:123 SL:60 +DAAA B0 02 BCS $DAAE A:80 X:FB Y:00 P:A5 SP:FB CYC:129 SL:60 +DAAE E8 INX A:80 X:FB Y:00 P:A5 SP:FB CYC:138 SL:60 +DAAF A0 80 LDY #$80 A:80 X:FC Y:00 P:A5 SP:FB CYC:144 SL:60 +DAB1 8C 00 04 STY $0400 = 00 A:80 X:FC Y:80 P:A5 SP:FB CYC:150 SL:60 +DAB4 A0 00 LDY #$00 A:80 X:FC Y:80 P:A5 SP:FB CYC:162 SL:60 +DAB6 D1 33 CMP ($33),Y = 0400 @ 0400 = 80 A:80 X:FC Y:00 P:27 SP:FB CYC:168 SL:60 +DAB8 D0 04 BNE $DABE A:80 X:FC Y:00 P:27 SP:FB CYC:183 SL:60 +DABA 30 02 BMI $DABE A:80 X:FC Y:00 P:27 SP:FB CYC:189 SL:60 +DABC B0 02 BCS $DAC0 A:80 X:FC Y:00 P:27 SP:FB CYC:195 SL:60 +DAC0 E8 INX A:80 X:FC Y:00 P:27 SP:FB CYC:204 SL:60 +DAC1 EE 00 04 INC $0400 = 80 A:80 X:FD Y:00 P:A5 SP:FB CYC:210 SL:60 +DAC4 D1 33 CMP ($33),Y = 0400 @ 0400 = 81 A:80 X:FD Y:00 P:A5 SP:FB CYC:228 SL:60 +DAC6 B0 04 BCS $DACC A:80 X:FD Y:00 P:A4 SP:FB CYC:243 SL:60 +DAC8 F0 02 BEQ $DACC A:80 X:FD Y:00 P:A4 SP:FB CYC:249 SL:60 +DACA 30 02 BMI $DACE A:80 X:FD Y:00 P:A4 SP:FB CYC:255 SL:60 +DACE E8 INX A:80 X:FD Y:00 P:A4 SP:FB CYC:264 SL:60 +DACF CE 00 04 DEC $0400 = 81 A:80 X:FE Y:00 P:A4 SP:FB CYC:270 SL:60 +DAD2 CE 00 04 DEC $0400 = 80 A:80 X:FE Y:00 P:A4 SP:FB CYC:288 SL:60 +DAD5 D1 33 CMP ($33),Y = 0400 @ 0400 = 7F A:80 X:FE Y:00 P:24 SP:FB CYC:306 SL:60 +DAD7 90 04 BCC $DADD A:80 X:FE Y:00 P:25 SP:FB CYC:321 SL:60 +DAD9 F0 02 BEQ $DADD A:80 X:FE Y:00 P:25 SP:FB CYC:327 SL:60 +DADB 10 02 BPL $DADF A:80 X:FE Y:00 P:25 SP:FB CYC:333 SL:60 +DADF 60 RTS A:80 X:FE Y:00 P:25 SP:FB CYC: 1 SL:61 +C61B A5 00 LDA $00 = 00 A:80 X:FE Y:00 P:25 SP:FD CYC: 19 SL:61 +C61D 85 10 STA $10 = 00 A:00 X:FE Y:00 P:27 SP:FD CYC: 28 SL:61 +C61F A9 00 LDA #$00 A:00 X:FE Y:00 P:27 SP:FD CYC: 37 SL:61 +C621 85 00 STA $00 = 00 A:00 X:FE Y:00 P:27 SP:FD CYC: 43 SL:61 +C623 20 E0 DA JSR $DAE0 A:00 X:FE Y:00 P:27 SP:FD CYC: 52 SL:61 +DAE0 A9 00 LDA #$00 A:00 X:FE Y:00 P:27 SP:FB CYC: 70 SL:61 +DAE2 85 33 STA $33 = 00 A:00 X:FE Y:00 P:27 SP:FB CYC: 76 SL:61 +DAE4 A9 04 LDA #$04 A:00 X:FE Y:00 P:27 SP:FB CYC: 85 SL:61 +DAE6 85 34 STA $34 = 04 A:04 X:FE Y:00 P:25 SP:FB CYC: 91 SL:61 +DAE8 A0 00 LDY #$00 A:04 X:FE Y:00 P:25 SP:FB CYC:100 SL:61 +DAEA A2 01 LDX #$01 A:04 X:FE Y:00 P:27 SP:FB CYC:106 SL:61 +DAEC 24 01 BIT $01 = FF A:04 X:01 Y:00 P:25 SP:FB CYC:112 SL:61 +DAEE A9 40 LDA #$40 A:04 X:01 Y:00 P:E5 SP:FB CYC:121 SL:61 +DAF0 8D 00 04 STA $0400 = 7F A:40 X:01 Y:00 P:65 SP:FB CYC:127 SL:61 +DAF3 38 SEC A:40 X:01 Y:00 P:65 SP:FB CYC:139 SL:61 +DAF4 F1 33 SBC ($33),Y = 0400 @ 0400 = 40 A:40 X:01 Y:00 P:65 SP:FB CYC:145 SL:61 +DAF6 30 0A BMI $DB02 A:00 X:01 Y:00 P:27 SP:FB CYC:160 SL:61 +DAF8 90 08 BCC $DB02 A:00 X:01 Y:00 P:27 SP:FB CYC:166 SL:61 +DAFA D0 06 BNE $DB02 A:00 X:01 Y:00 P:27 SP:FB CYC:172 SL:61 +DAFC 70 04 BVS $DB02 A:00 X:01 Y:00 P:27 SP:FB CYC:178 SL:61 +DAFE C9 00 CMP #$00 A:00 X:01 Y:00 P:27 SP:FB CYC:184 SL:61 +DB00 F0 02 BEQ $DB04 A:00 X:01 Y:00 P:27 SP:FB CYC:190 SL:61 +DB04 E8 INX A:00 X:01 Y:00 P:27 SP:FB CYC:199 SL:61 +DB05 B8 CLV A:00 X:02 Y:00 P:25 SP:FB CYC:205 SL:61 +DB06 38 SEC A:00 X:02 Y:00 P:25 SP:FB CYC:211 SL:61 +DB07 A9 40 LDA #$40 A:00 X:02 Y:00 P:25 SP:FB CYC:217 SL:61 +DB09 CE 00 04 DEC $0400 = 40 A:40 X:02 Y:00 P:25 SP:FB CYC:223 SL:61 +DB0C F1 33 SBC ($33),Y = 0400 @ 0400 = 3F A:40 X:02 Y:00 P:25 SP:FB CYC:241 SL:61 +DB0E F0 0A BEQ $DB1A A:01 X:02 Y:00 P:25 SP:FB CYC:256 SL:61 +DB10 30 08 BMI $DB1A A:01 X:02 Y:00 P:25 SP:FB CYC:262 SL:61 +DB12 90 06 BCC $DB1A A:01 X:02 Y:00 P:25 SP:FB CYC:268 SL:61 +DB14 70 04 BVS $DB1A A:01 X:02 Y:00 P:25 SP:FB CYC:274 SL:61 +DB16 C9 01 CMP #$01 A:01 X:02 Y:00 P:25 SP:FB CYC:280 SL:61 +DB18 F0 02 BEQ $DB1C A:01 X:02 Y:00 P:27 SP:FB CYC:286 SL:61 +DB1C E8 INX A:01 X:02 Y:00 P:27 SP:FB CYC:295 SL:61 +DB1D A9 40 LDA #$40 A:01 X:03 Y:00 P:25 SP:FB CYC:301 SL:61 +DB1F 38 SEC A:40 X:03 Y:00 P:25 SP:FB CYC:307 SL:61 +DB20 24 01 BIT $01 = FF A:40 X:03 Y:00 P:25 SP:FB CYC:313 SL:61 +DB22 EE 00 04 INC $0400 = 3F A:40 X:03 Y:00 P:E5 SP:FB CYC:322 SL:61 +DB25 EE 00 04 INC $0400 = 40 A:40 X:03 Y:00 P:65 SP:FB CYC:340 SL:61 +DB28 F1 33 SBC ($33),Y = 0400 @ 0400 = 41 A:40 X:03 Y:00 P:65 SP:FB CYC: 17 SL:62 +DB2A B0 0A BCS $DB36 A:FF X:03 Y:00 P:A4 SP:FB CYC: 32 SL:62 +DB2C F0 08 BEQ $DB36 A:FF X:03 Y:00 P:A4 SP:FB CYC: 38 SL:62 +DB2E 10 06 BPL $DB36 A:FF X:03 Y:00 P:A4 SP:FB CYC: 44 SL:62 +DB30 70 04 BVS $DB36 A:FF X:03 Y:00 P:A4 SP:FB CYC: 50 SL:62 +DB32 C9 FF CMP #$FF A:FF X:03 Y:00 P:A4 SP:FB CYC: 56 SL:62 +DB34 F0 02 BEQ $DB38 A:FF X:03 Y:00 P:27 SP:FB CYC: 62 SL:62 +DB38 E8 INX A:FF X:03 Y:00 P:27 SP:FB CYC: 71 SL:62 +DB39 18 CLC A:FF X:04 Y:00 P:25 SP:FB CYC: 77 SL:62 +DB3A A9 00 LDA #$00 A:FF X:04 Y:00 P:24 SP:FB CYC: 83 SL:62 +DB3C 8D 00 04 STA $0400 = 41 A:00 X:04 Y:00 P:26 SP:FB CYC: 89 SL:62 +DB3F A9 80 LDA #$80 A:00 X:04 Y:00 P:26 SP:FB CYC:101 SL:62 +DB41 F1 33 SBC ($33),Y = 0400 @ 0400 = 00 A:80 X:04 Y:00 P:A4 SP:FB CYC:107 SL:62 +DB43 90 04 BCC $DB49 A:7F X:04 Y:00 P:65 SP:FB CYC:122 SL:62 +DB45 C9 7F CMP #$7F A:7F X:04 Y:00 P:65 SP:FB CYC:128 SL:62 +DB47 F0 02 BEQ $DB4B A:7F X:04 Y:00 P:67 SP:FB CYC:134 SL:62 +DB4B E8 INX A:7F X:04 Y:00 P:67 SP:FB CYC:143 SL:62 +DB4C 38 SEC A:7F X:05 Y:00 P:65 SP:FB CYC:149 SL:62 +DB4D A9 7F LDA #$7F A:7F X:05 Y:00 P:65 SP:FB CYC:155 SL:62 +DB4F 8D 00 04 STA $0400 = 00 A:7F X:05 Y:00 P:65 SP:FB CYC:161 SL:62 +DB52 A9 81 LDA #$81 A:7F X:05 Y:00 P:65 SP:FB CYC:173 SL:62 +DB54 F1 33 SBC ($33),Y = 0400 @ 0400 = 7F A:81 X:05 Y:00 P:E5 SP:FB CYC:179 SL:62 +DB56 50 06 BVC $DB5E A:02 X:05 Y:00 P:65 SP:FB CYC:194 SL:62 +DB58 90 04 BCC $DB5E A:02 X:05 Y:00 P:65 SP:FB CYC:200 SL:62 +DB5A C9 02 CMP #$02 A:02 X:05 Y:00 P:65 SP:FB CYC:206 SL:62 +DB5C F0 02 BEQ $DB60 A:02 X:05 Y:00 P:67 SP:FB CYC:212 SL:62 +DB60 E8 INX A:02 X:05 Y:00 P:67 SP:FB CYC:221 SL:62 +DB61 A9 00 LDA #$00 A:02 X:06 Y:00 P:65 SP:FB CYC:227 SL:62 +DB63 A9 87 LDA #$87 A:00 X:06 Y:00 P:67 SP:FB CYC:233 SL:62 +DB65 91 33 STA ($33),Y = 0400 @ 0400 = 7F A:87 X:06 Y:00 P:E5 SP:FB CYC:239 SL:62 +DB67 AD 00 04 LDA $0400 = 87 A:87 X:06 Y:00 P:E5 SP:FB CYC:257 SL:62 +DB6A C9 87 CMP #$87 A:87 X:06 Y:00 P:E5 SP:FB CYC:269 SL:62 +DB6C F0 02 BEQ $DB70 A:87 X:06 Y:00 P:67 SP:FB CYC:275 SL:62 +DB70 E8 INX A:87 X:06 Y:00 P:67 SP:FB CYC:284 SL:62 +DB71 A9 7E LDA #$7E A:87 X:07 Y:00 P:65 SP:FB CYC:290 SL:62 +DB73 8D 00 02 STA $0200 = 7F A:7E X:07 Y:00 P:65 SP:FB CYC:296 SL:62 +DB76 A9 DB LDA #$DB A:7E X:07 Y:00 P:65 SP:FB CYC:308 SL:62 +DB78 8D 01 02 STA $0201 = 00 A:DB X:07 Y:00 P:E5 SP:FB CYC:314 SL:62 +DB7B 6C 00 02 JMP ($0200) = DB7E A:DB X:07 Y:00 P:E5 SP:FB CYC:326 SL:62 +DB7E A9 00 LDA #$00 A:DB X:07 Y:00 P:E5 SP:FB CYC: 0 SL:63 +DB80 8D FF 02 STA $02FF = 00 A:00 X:07 Y:00 P:67 SP:FB CYC: 6 SL:63 +DB83 A9 01 LDA #$01 A:00 X:07 Y:00 P:67 SP:FB CYC: 18 SL:63 +DB85 8D 00 03 STA $0300 = 89 A:01 X:07 Y:00 P:65 SP:FB CYC: 24 SL:63 +DB88 A9 03 LDA #$03 A:01 X:07 Y:00 P:65 SP:FB CYC: 36 SL:63 +DB8A 8D 00 02 STA $0200 = 7E A:03 X:07 Y:00 P:65 SP:FB CYC: 42 SL:63 +DB8D A9 A9 LDA #$A9 A:03 X:07 Y:00 P:65 SP:FB CYC: 54 SL:63 +DB8F 8D 00 01 STA $0100 = 00 A:A9 X:07 Y:00 P:E5 SP:FB CYC: 60 SL:63 +DB92 A9 55 LDA #$55 A:A9 X:07 Y:00 P:E5 SP:FB CYC: 72 SL:63 +DB94 8D 01 01 STA $0101 = 00 A:55 X:07 Y:00 P:65 SP:FB CYC: 78 SL:63 +DB97 A9 60 LDA #$60 A:55 X:07 Y:00 P:65 SP:FB CYC: 90 SL:63 +DB99 8D 02 01 STA $0102 = 00 A:60 X:07 Y:00 P:65 SP:FB CYC: 96 SL:63 +DB9C A9 A9 LDA #$A9 A:60 X:07 Y:00 P:65 SP:FB CYC:108 SL:63 +DB9E 8D 00 03 STA $0300 = 01 A:A9 X:07 Y:00 P:E5 SP:FB CYC:114 SL:63 +DBA1 A9 AA LDA #$AA A:A9 X:07 Y:00 P:E5 SP:FB CYC:126 SL:63 +DBA3 8D 01 03 STA $0301 = 00 A:AA X:07 Y:00 P:E5 SP:FB CYC:132 SL:63 +DBA6 A9 60 LDA #$60 A:AA X:07 Y:00 P:E5 SP:FB CYC:144 SL:63 +DBA8 8D 02 03 STA $0302 = 00 A:60 X:07 Y:00 P:65 SP:FB CYC:150 SL:63 +DBAB 20 B5 DB JSR $DBB5 A:60 X:07 Y:00 P:65 SP:FB CYC:162 SL:63 +DBB5 6C FF 02 JMP ($02FF) = A900 A:60 X:07 Y:00 P:65 SP:F9 CYC:180 SL:63 +0300 A9 AA LDA #$AA A:60 X:07 Y:00 P:65 SP:F9 CYC:195 SL:63 +0302 60 RTS A:AA X:07 Y:00 P:E5 SP:F9 CYC:201 SL:63 +DBAE C9 AA CMP #$AA A:AA X:07 Y:00 P:E5 SP:FB CYC:219 SL:63 +DBB0 F0 02 BEQ $DBB4 A:AA X:07 Y:00 P:67 SP:FB CYC:225 SL:63 +DBB4 60 RTS A:AA X:07 Y:00 P:67 SP:FB CYC:234 SL:63 +C626 20 4A DF JSR $DF4A A:AA X:07 Y:00 P:67 SP:FD CYC:252 SL:63 +DF4A A9 89 LDA #$89 A:AA X:07 Y:00 P:67 SP:FB CYC:270 SL:63 +DF4C 8D 00 03 STA $0300 = A9 A:89 X:07 Y:00 P:E5 SP:FB CYC:276 SL:63 +DF4F A9 A3 LDA #$A3 A:89 X:07 Y:00 P:E5 SP:FB CYC:288 SL:63 +DF51 85 33 STA $33 = 00 A:A3 X:07 Y:00 P:E5 SP:FB CYC:294 SL:63 +DF53 A9 12 LDA #$12 A:A3 X:07 Y:00 P:E5 SP:FB CYC:303 SL:63 +DF55 8D 45 02 STA $0245 = 12 A:12 X:07 Y:00 P:65 SP:FB CYC:309 SL:63 +DF58 A2 65 LDX #$65 A:12 X:07 Y:00 P:65 SP:FB CYC:321 SL:63 +DF5A A0 00 LDY #$00 A:12 X:65 Y:00 P:65 SP:FB CYC:327 SL:63 +DF5C 38 SEC A:12 X:65 Y:00 P:67 SP:FB CYC:333 SL:63 +DF5D A9 00 LDA #$00 A:12 X:65 Y:00 P:67 SP:FB CYC:339 SL:63 +DF5F B8 CLV A:00 X:65 Y:00 P:67 SP:FB CYC: 4 SL:64 +DF60 B9 00 03 LDA $0300,Y @ 0300 = 89 A:00 X:65 Y:00 P:27 SP:FB CYC: 10 SL:64 +DF63 F0 0C BEQ $DF71 A:89 X:65 Y:00 P:A5 SP:FB CYC: 22 SL:64 +DF65 90 0A BCC $DF71 A:89 X:65 Y:00 P:A5 SP:FB CYC: 28 SL:64 +DF67 70 08 BVS $DF71 A:89 X:65 Y:00 P:A5 SP:FB CYC: 34 SL:64 +DF69 C9 89 CMP #$89 A:89 X:65 Y:00 P:A5 SP:FB CYC: 40 SL:64 +DF6B D0 04 BNE $DF71 A:89 X:65 Y:00 P:27 SP:FB CYC: 46 SL:64 +DF6D E0 65 CPX #$65 A:89 X:65 Y:00 P:27 SP:FB CYC: 52 SL:64 +DF6F F0 04 BEQ $DF75 A:89 X:65 Y:00 P:27 SP:FB CYC: 58 SL:64 +DF75 A9 FF LDA #$FF A:89 X:65 Y:00 P:27 SP:FB CYC: 67 SL:64 +DF77 85 01 STA $01 = FF A:FF X:65 Y:00 P:A5 SP:FB CYC: 73 SL:64 +DF79 24 01 BIT $01 = FF A:FF X:65 Y:00 P:A5 SP:FB CYC: 82 SL:64 +DF7B A0 34 LDY #$34 A:FF X:65 Y:00 P:E5 SP:FB CYC: 91 SL:64 +DF7D B9 FF FF LDA $FFFF,Y @ 0033 = A3 A:FF X:65 Y:34 P:65 SP:FB CYC: 97 SL:64 +DF80 C9 A3 CMP #$A3 A:A3 X:65 Y:34 P:E5 SP:FB CYC:112 SL:64 +DF82 D0 02 BNE $DF86 A:A3 X:65 Y:34 P:67 SP:FB CYC:118 SL:64 +DF84 B0 04 BCS $DF8A A:A3 X:65 Y:34 P:67 SP:FB CYC:124 SL:64 +DF8A A9 46 LDA #$46 A:A3 X:65 Y:34 P:67 SP:FB CYC:133 SL:64 +DF8C 85 FF STA $FF = 46 A:46 X:65 Y:34 P:65 SP:FB CYC:139 SL:64 +DF8E A0 FF LDY #$FF A:46 X:65 Y:34 P:65 SP:FB CYC:148 SL:64 +DF90 B9 46 01 LDA $0146,Y @ 0245 = 12 A:46 X:65 Y:FF P:E5 SP:FB CYC:154 SL:64 +DF93 C9 12 CMP #$12 A:12 X:65 Y:FF P:65 SP:FB CYC:169 SL:64 +DF95 F0 04 BEQ $DF9B A:12 X:65 Y:FF P:67 SP:FB CYC:175 SL:64 +DF9B A2 39 LDX #$39 A:12 X:65 Y:FF P:67 SP:FB CYC:184 SL:64 +DF9D 18 CLC A:12 X:39 Y:FF P:65 SP:FB CYC:190 SL:64 +DF9E A9 FF LDA #$FF A:12 X:39 Y:FF P:64 SP:FB CYC:196 SL:64 +DFA0 85 01 STA $01 = FF A:FF X:39 Y:FF P:E4 SP:FB CYC:202 SL:64 +DFA2 24 01 BIT $01 = FF A:FF X:39 Y:FF P:E4 SP:FB CYC:211 SL:64 +DFA4 A9 AA LDA #$AA A:FF X:39 Y:FF P:E4 SP:FB CYC:220 SL:64 +DFA6 8D 00 04 STA $0400 = 87 A:AA X:39 Y:FF P:E4 SP:FB CYC:226 SL:64 +DFA9 A9 55 LDA #$55 A:AA X:39 Y:FF P:E4 SP:FB CYC:238 SL:64 +DFAB A0 00 LDY #$00 A:55 X:39 Y:FF P:64 SP:FB CYC:244 SL:64 +DFAD 19 00 04 ORA $0400,Y @ 0400 = AA A:55 X:39 Y:00 P:66 SP:FB CYC:250 SL:64 +DFB0 B0 08 BCS $DFBA A:FF X:39 Y:00 P:E4 SP:FB CYC:262 SL:64 +DFB2 10 06 BPL $DFBA A:FF X:39 Y:00 P:E4 SP:FB CYC:268 SL:64 +DFB4 C9 FF CMP #$FF A:FF X:39 Y:00 P:E4 SP:FB CYC:274 SL:64 +DFB6 D0 02 BNE $DFBA A:FF X:39 Y:00 P:67 SP:FB CYC:280 SL:64 +DFB8 70 02 BVS $DFBC A:FF X:39 Y:00 P:67 SP:FB CYC:286 SL:64 +DFBC E8 INX A:FF X:39 Y:00 P:67 SP:FB CYC:295 SL:64 +DFBD 38 SEC A:FF X:3A Y:00 P:65 SP:FB CYC:301 SL:64 +DFBE B8 CLV A:FF X:3A Y:00 P:65 SP:FB CYC:307 SL:64 +DFBF A9 00 LDA #$00 A:FF X:3A Y:00 P:25 SP:FB CYC:313 SL:64 +DFC1 19 00 04 ORA $0400,Y @ 0400 = AA A:00 X:3A Y:00 P:27 SP:FB CYC:319 SL:64 +DFC4 F0 06 BEQ $DFCC A:AA X:3A Y:00 P:A5 SP:FB CYC:331 SL:64 +DFC6 70 04 BVS $DFCC A:AA X:3A Y:00 P:A5 SP:FB CYC:337 SL:64 +DFC8 90 02 BCC $DFCC A:AA X:3A Y:00 P:A5 SP:FB CYC: 2 SL:65 +DFCA 30 02 BMI $DFCE A:AA X:3A Y:00 P:A5 SP:FB CYC: 8 SL:65 +DFCE E8 INX A:AA X:3A Y:00 P:A5 SP:FB CYC: 17 SL:65 +DFCF 18 CLC A:AA X:3B Y:00 P:25 SP:FB CYC: 23 SL:65 +DFD0 24 01 BIT $01 = FF A:AA X:3B Y:00 P:24 SP:FB CYC: 29 SL:65 +DFD2 A9 55 LDA #$55 A:AA X:3B Y:00 P:E4 SP:FB CYC: 38 SL:65 +DFD4 39 00 04 AND $0400,Y @ 0400 = AA A:55 X:3B Y:00 P:64 SP:FB CYC: 44 SL:65 +DFD7 D0 06 BNE $DFDF A:00 X:3B Y:00 P:66 SP:FB CYC: 56 SL:65 +DFD9 50 04 BVC $DFDF A:00 X:3B Y:00 P:66 SP:FB CYC: 62 SL:65 +DFDB B0 02 BCS $DFDF A:00 X:3B Y:00 P:66 SP:FB CYC: 68 SL:65 +DFDD 10 02 BPL $DFE1 A:00 X:3B Y:00 P:66 SP:FB CYC: 74 SL:65 +DFE1 E8 INX A:00 X:3B Y:00 P:66 SP:FB CYC: 83 SL:65 +DFE2 38 SEC A:00 X:3C Y:00 P:64 SP:FB CYC: 89 SL:65 +DFE3 B8 CLV A:00 X:3C Y:00 P:65 SP:FB CYC: 95 SL:65 +DFE4 A9 EF LDA #$EF A:00 X:3C Y:00 P:25 SP:FB CYC:101 SL:65 +DFE6 8D 00 04 STA $0400 = AA A:EF X:3C Y:00 P:A5 SP:FB CYC:107 SL:65 +DFE9 A9 F8 LDA #$F8 A:EF X:3C Y:00 P:A5 SP:FB CYC:119 SL:65 +DFEB 39 00 04 AND $0400,Y @ 0400 = EF A:F8 X:3C Y:00 P:A5 SP:FB CYC:125 SL:65 +DFEE 90 08 BCC $DFF8 A:E8 X:3C Y:00 P:A5 SP:FB CYC:137 SL:65 +DFF0 10 06 BPL $DFF8 A:E8 X:3C Y:00 P:A5 SP:FB CYC:143 SL:65 +DFF2 C9 E8 CMP #$E8 A:E8 X:3C Y:00 P:A5 SP:FB CYC:149 SL:65 +DFF4 D0 02 BNE $DFF8 A:E8 X:3C Y:00 P:27 SP:FB CYC:155 SL:65 +DFF6 50 02 BVC $DFFA A:E8 X:3C Y:00 P:27 SP:FB CYC:161 SL:65 +DFFA E8 INX A:E8 X:3C Y:00 P:27 SP:FB CYC:170 SL:65 +DFFB 18 CLC A:E8 X:3D Y:00 P:25 SP:FB CYC:176 SL:65 +DFFC 24 01 BIT $01 = FF A:E8 X:3D Y:00 P:24 SP:FB CYC:182 SL:65 +DFFE A9 AA LDA #$AA A:E8 X:3D Y:00 P:E4 SP:FB CYC:191 SL:65 +E000 8D 00 04 STA $0400 = EF A:AA X:3D Y:00 P:E4 SP:FB CYC:197 SL:65 +E003 A9 5F LDA #$5F A:AA X:3D Y:00 P:E4 SP:FB CYC:209 SL:65 +E005 59 00 04 EOR $0400,Y @ 0400 = AA A:5F X:3D Y:00 P:64 SP:FB CYC:215 SL:65 +E008 B0 08 BCS $E012 A:F5 X:3D Y:00 P:E4 SP:FB CYC:227 SL:65 +E00A 10 06 BPL $E012 A:F5 X:3D Y:00 P:E4 SP:FB CYC:233 SL:65 +E00C C9 F5 CMP #$F5 A:F5 X:3D Y:00 P:E4 SP:FB CYC:239 SL:65 +E00E D0 02 BNE $E012 A:F5 X:3D Y:00 P:67 SP:FB CYC:245 SL:65 +E010 70 02 BVS $E014 A:F5 X:3D Y:00 P:67 SP:FB CYC:251 SL:65 +E014 E8 INX A:F5 X:3D Y:00 P:67 SP:FB CYC:260 SL:65 +E015 38 SEC A:F5 X:3E Y:00 P:65 SP:FB CYC:266 SL:65 +E016 B8 CLV A:F5 X:3E Y:00 P:65 SP:FB CYC:272 SL:65 +E017 A9 70 LDA #$70 A:F5 X:3E Y:00 P:25 SP:FB CYC:278 SL:65 +E019 8D 00 04 STA $0400 = AA A:70 X:3E Y:00 P:25 SP:FB CYC:284 SL:65 +E01C 59 00 04 EOR $0400,Y @ 0400 = 70 A:70 X:3E Y:00 P:25 SP:FB CYC:296 SL:65 +E01F D0 06 BNE $E027 A:00 X:3E Y:00 P:27 SP:FB CYC:308 SL:65 +E021 70 04 BVS $E027 A:00 X:3E Y:00 P:27 SP:FB CYC:314 SL:65 +E023 90 02 BCC $E027 A:00 X:3E Y:00 P:27 SP:FB CYC:320 SL:65 +E025 10 02 BPL $E029 A:00 X:3E Y:00 P:27 SP:FB CYC:326 SL:65 +E029 E8 INX A:00 X:3E Y:00 P:27 SP:FB CYC:335 SL:65 +E02A 18 CLC A:00 X:3F Y:00 P:25 SP:FB CYC: 0 SL:66 +E02B 24 01 BIT $01 = FF A:00 X:3F Y:00 P:24 SP:FB CYC: 6 SL:66 +E02D A9 69 LDA #$69 A:00 X:3F Y:00 P:E6 SP:FB CYC: 15 SL:66 +E02F 8D 00 04 STA $0400 = 70 A:69 X:3F Y:00 P:64 SP:FB CYC: 21 SL:66 +E032 A9 00 LDA #$00 A:69 X:3F Y:00 P:64 SP:FB CYC: 33 SL:66 +E034 79 00 04 ADC $0400,Y @ 0400 = 69 A:00 X:3F Y:00 P:66 SP:FB CYC: 39 SL:66 +E037 30 08 BMI $E041 A:69 X:3F Y:00 P:24 SP:FB CYC: 51 SL:66 +E039 B0 06 BCS $E041 A:69 X:3F Y:00 P:24 SP:FB CYC: 57 SL:66 +E03B C9 69 CMP #$69 A:69 X:3F Y:00 P:24 SP:FB CYC: 63 SL:66 +E03D D0 02 BNE $E041 A:69 X:3F Y:00 P:27 SP:FB CYC: 69 SL:66 +E03F 50 02 BVC $E043 A:69 X:3F Y:00 P:27 SP:FB CYC: 75 SL:66 +E043 E8 INX A:69 X:3F Y:00 P:27 SP:FB CYC: 84 SL:66 +E044 38 SEC A:69 X:40 Y:00 P:25 SP:FB CYC: 90 SL:66 +E045 24 01 BIT $01 = FF A:69 X:40 Y:00 P:25 SP:FB CYC: 96 SL:66 +E047 A9 00 LDA #$00 A:69 X:40 Y:00 P:E5 SP:FB CYC:105 SL:66 +E049 79 00 04 ADC $0400,Y @ 0400 = 69 A:00 X:40 Y:00 P:67 SP:FB CYC:111 SL:66 +E04C 30 08 BMI $E056 A:6A X:40 Y:00 P:24 SP:FB CYC:123 SL:66 +E04E B0 06 BCS $E056 A:6A X:40 Y:00 P:24 SP:FB CYC:129 SL:66 +E050 C9 6A CMP #$6A A:6A X:40 Y:00 P:24 SP:FB CYC:135 SL:66 +E052 D0 02 BNE $E056 A:6A X:40 Y:00 P:27 SP:FB CYC:141 SL:66 +E054 50 02 BVC $E058 A:6A X:40 Y:00 P:27 SP:FB CYC:147 SL:66 +E058 E8 INX A:6A X:40 Y:00 P:27 SP:FB CYC:156 SL:66 +E059 38 SEC A:6A X:41 Y:00 P:25 SP:FB CYC:162 SL:66 +E05A B8 CLV A:6A X:41 Y:00 P:25 SP:FB CYC:168 SL:66 +E05B A9 7F LDA #$7F A:6A X:41 Y:00 P:25 SP:FB CYC:174 SL:66 +E05D 8D 00 04 STA $0400 = 69 A:7F X:41 Y:00 P:25 SP:FB CYC:180 SL:66 +E060 79 00 04 ADC $0400,Y @ 0400 = 7F A:7F X:41 Y:00 P:25 SP:FB CYC:192 SL:66 +E063 10 08 BPL $E06D A:FF X:41 Y:00 P:E4 SP:FB CYC:204 SL:66 +E065 B0 06 BCS $E06D A:FF X:41 Y:00 P:E4 SP:FB CYC:210 SL:66 +E067 C9 FF CMP #$FF A:FF X:41 Y:00 P:E4 SP:FB CYC:216 SL:66 +E069 D0 02 BNE $E06D A:FF X:41 Y:00 P:67 SP:FB CYC:222 SL:66 +E06B 70 02 BVS $E06F A:FF X:41 Y:00 P:67 SP:FB CYC:228 SL:66 +E06F E8 INX A:FF X:41 Y:00 P:67 SP:FB CYC:237 SL:66 +E070 18 CLC A:FF X:42 Y:00 P:65 SP:FB CYC:243 SL:66 +E071 24 01 BIT $01 = FF A:FF X:42 Y:00 P:64 SP:FB CYC:249 SL:66 +E073 A9 80 LDA #$80 A:FF X:42 Y:00 P:E4 SP:FB CYC:258 SL:66 +E075 8D 00 04 STA $0400 = 7F A:80 X:42 Y:00 P:E4 SP:FB CYC:264 SL:66 +E078 A9 7F LDA #$7F A:80 X:42 Y:00 P:E4 SP:FB CYC:276 SL:66 +E07A 79 00 04 ADC $0400,Y @ 0400 = 80 A:7F X:42 Y:00 P:64 SP:FB CYC:282 SL:66 +E07D 10 08 BPL $E087 A:FF X:42 Y:00 P:A4 SP:FB CYC:294 SL:66 +E07F B0 06 BCS $E087 A:FF X:42 Y:00 P:A4 SP:FB CYC:300 SL:66 +E081 C9 FF CMP #$FF A:FF X:42 Y:00 P:A4 SP:FB CYC:306 SL:66 +E083 D0 02 BNE $E087 A:FF X:42 Y:00 P:27 SP:FB CYC:312 SL:66 +E085 50 02 BVC $E089 A:FF X:42 Y:00 P:27 SP:FB CYC:318 SL:66 +E089 E8 INX A:FF X:42 Y:00 P:27 SP:FB CYC:327 SL:66 +E08A 38 SEC A:FF X:43 Y:00 P:25 SP:FB CYC:333 SL:66 +E08B B8 CLV A:FF X:43 Y:00 P:25 SP:FB CYC:339 SL:66 +E08C A9 80 LDA #$80 A:FF X:43 Y:00 P:25 SP:FB CYC: 4 SL:67 +E08E 8D 00 04 STA $0400 = 80 A:80 X:43 Y:00 P:A5 SP:FB CYC: 10 SL:67 +E091 A9 7F LDA #$7F A:80 X:43 Y:00 P:A5 SP:FB CYC: 22 SL:67 +E093 79 00 04 ADC $0400,Y @ 0400 = 80 A:7F X:43 Y:00 P:25 SP:FB CYC: 28 SL:67 +E096 D0 06 BNE $E09E A:00 X:43 Y:00 P:27 SP:FB CYC: 40 SL:67 +E098 30 04 BMI $E09E A:00 X:43 Y:00 P:27 SP:FB CYC: 46 SL:67 +E09A 70 02 BVS $E09E A:00 X:43 Y:00 P:27 SP:FB CYC: 52 SL:67 +E09C B0 02 BCS $E0A0 A:00 X:43 Y:00 P:27 SP:FB CYC: 58 SL:67 +E0A0 E8 INX A:00 X:43 Y:00 P:27 SP:FB CYC: 67 SL:67 +E0A1 24 01 BIT $01 = FF A:00 X:44 Y:00 P:25 SP:FB CYC: 73 SL:67 +E0A3 A9 40 LDA #$40 A:00 X:44 Y:00 P:E7 SP:FB CYC: 82 SL:67 +E0A5 8D 00 04 STA $0400 = 80 A:40 X:44 Y:00 P:65 SP:FB CYC: 88 SL:67 +E0A8 D9 00 04 CMP $0400,Y @ 0400 = 40 A:40 X:44 Y:00 P:65 SP:FB CYC:100 SL:67 +E0AB 30 06 BMI $E0B3 A:40 X:44 Y:00 P:67 SP:FB CYC:112 SL:67 +E0AD 90 04 BCC $E0B3 A:40 X:44 Y:00 P:67 SP:FB CYC:118 SL:67 +E0AF D0 02 BNE $E0B3 A:40 X:44 Y:00 P:67 SP:FB CYC:124 SL:67 +E0B1 70 02 BVS $E0B5 A:40 X:44 Y:00 P:67 SP:FB CYC:130 SL:67 +E0B5 E8 INX A:40 X:44 Y:00 P:67 SP:FB CYC:139 SL:67 +E0B6 B8 CLV A:40 X:45 Y:00 P:65 SP:FB CYC:145 SL:67 +E0B7 CE 00 04 DEC $0400 = 40 A:40 X:45 Y:00 P:25 SP:FB CYC:151 SL:67 +E0BA D9 00 04 CMP $0400,Y @ 0400 = 3F A:40 X:45 Y:00 P:25 SP:FB CYC:169 SL:67 +E0BD F0 06 BEQ $E0C5 A:40 X:45 Y:00 P:25 SP:FB CYC:181 SL:67 +E0BF 30 04 BMI $E0C5 A:40 X:45 Y:00 P:25 SP:FB CYC:187 SL:67 +E0C1 90 02 BCC $E0C5 A:40 X:45 Y:00 P:25 SP:FB CYC:193 SL:67 +E0C3 50 02 BVC $E0C7 A:40 X:45 Y:00 P:25 SP:FB CYC:199 SL:67 +E0C7 E8 INX A:40 X:45 Y:00 P:25 SP:FB CYC:208 SL:67 +E0C8 EE 00 04 INC $0400 = 3F A:40 X:46 Y:00 P:25 SP:FB CYC:214 SL:67 +E0CB EE 00 04 INC $0400 = 40 A:40 X:46 Y:00 P:25 SP:FB CYC:232 SL:67 +E0CE D9 00 04 CMP $0400,Y @ 0400 = 41 A:40 X:46 Y:00 P:25 SP:FB CYC:250 SL:67 +E0D1 F0 02 BEQ $E0D5 A:40 X:46 Y:00 P:A4 SP:FB CYC:262 SL:67 +E0D3 30 02 BMI $E0D7 A:40 X:46 Y:00 P:A4 SP:FB CYC:268 SL:67 +E0D7 E8 INX A:40 X:46 Y:00 P:A4 SP:FB CYC:277 SL:67 +E0D8 A9 00 LDA #$00 A:40 X:47 Y:00 P:24 SP:FB CYC:283 SL:67 +E0DA 8D 00 04 STA $0400 = 41 A:00 X:47 Y:00 P:26 SP:FB CYC:289 SL:67 +E0DD A9 80 LDA #$80 A:00 X:47 Y:00 P:26 SP:FB CYC:301 SL:67 +E0DF D9 00 04 CMP $0400,Y @ 0400 = 00 A:80 X:47 Y:00 P:A4 SP:FB CYC:307 SL:67 +E0E2 F0 04 BEQ $E0E8 A:80 X:47 Y:00 P:A5 SP:FB CYC:319 SL:67 +E0E4 10 02 BPL $E0E8 A:80 X:47 Y:00 P:A5 SP:FB CYC:325 SL:67 +E0E6 B0 02 BCS $E0EA A:80 X:47 Y:00 P:A5 SP:FB CYC:331 SL:67 +E0EA E8 INX A:80 X:47 Y:00 P:A5 SP:FB CYC:340 SL:67 +E0EB A0 80 LDY #$80 A:80 X:48 Y:00 P:25 SP:FB CYC: 5 SL:68 +E0ED 8C 00 04 STY $0400 = 00 A:80 X:48 Y:80 P:A5 SP:FB CYC: 11 SL:68 +E0F0 A0 00 LDY #$00 A:80 X:48 Y:80 P:A5 SP:FB CYC: 23 SL:68 +E0F2 D9 00 04 CMP $0400,Y @ 0400 = 80 A:80 X:48 Y:00 P:27 SP:FB CYC: 29 SL:68 +E0F5 D0 04 BNE $E0FB A:80 X:48 Y:00 P:27 SP:FB CYC: 41 SL:68 +E0F7 30 02 BMI $E0FB A:80 X:48 Y:00 P:27 SP:FB CYC: 47 SL:68 +E0F9 B0 02 BCS $E0FD A:80 X:48 Y:00 P:27 SP:FB CYC: 53 SL:68 +E0FD E8 INX A:80 X:48 Y:00 P:27 SP:FB CYC: 62 SL:68 +E0FE EE 00 04 INC $0400 = 80 A:80 X:49 Y:00 P:25 SP:FB CYC: 68 SL:68 +E101 D9 00 04 CMP $0400,Y @ 0400 = 81 A:80 X:49 Y:00 P:A5 SP:FB CYC: 86 SL:68 +E104 B0 04 BCS $E10A A:80 X:49 Y:00 P:A4 SP:FB CYC: 98 SL:68 +E106 F0 02 BEQ $E10A A:80 X:49 Y:00 P:A4 SP:FB CYC:104 SL:68 +E108 30 02 BMI $E10C A:80 X:49 Y:00 P:A4 SP:FB CYC:110 SL:68 +E10C E8 INX A:80 X:49 Y:00 P:A4 SP:FB CYC:119 SL:68 +E10D CE 00 04 DEC $0400 = 81 A:80 X:4A Y:00 P:24 SP:FB CYC:125 SL:68 +E110 CE 00 04 DEC $0400 = 80 A:80 X:4A Y:00 P:A4 SP:FB CYC:143 SL:68 +E113 D9 00 04 CMP $0400,Y @ 0400 = 7F A:80 X:4A Y:00 P:24 SP:FB CYC:161 SL:68 +E116 90 04 BCC $E11C A:80 X:4A Y:00 P:25 SP:FB CYC:173 SL:68 +E118 F0 02 BEQ $E11C A:80 X:4A Y:00 P:25 SP:FB CYC:179 SL:68 +E11A 10 02 BPL $E11E A:80 X:4A Y:00 P:25 SP:FB CYC:185 SL:68 +E11E E8 INX A:80 X:4A Y:00 P:25 SP:FB CYC:194 SL:68 +E11F 24 01 BIT $01 = FF A:80 X:4B Y:00 P:25 SP:FB CYC:200 SL:68 +E121 A9 40 LDA #$40 A:80 X:4B Y:00 P:E5 SP:FB CYC:209 SL:68 +E123 8D 00 04 STA $0400 = 7F A:40 X:4B Y:00 P:65 SP:FB CYC:215 SL:68 +E126 38 SEC A:40 X:4B Y:00 P:65 SP:FB CYC:227 SL:68 +E127 F9 00 04 SBC $0400,Y @ 0400 = 40 A:40 X:4B Y:00 P:65 SP:FB CYC:233 SL:68 +E12A 30 0A BMI $E136 A:00 X:4B Y:00 P:27 SP:FB CYC:245 SL:68 +E12C 90 08 BCC $E136 A:00 X:4B Y:00 P:27 SP:FB CYC:251 SL:68 +E12E D0 06 BNE $E136 A:00 X:4B Y:00 P:27 SP:FB CYC:257 SL:68 +E130 70 04 BVS $E136 A:00 X:4B Y:00 P:27 SP:FB CYC:263 SL:68 +E132 C9 00 CMP #$00 A:00 X:4B Y:00 P:27 SP:FB CYC:269 SL:68 +E134 F0 02 BEQ $E138 A:00 X:4B Y:00 P:27 SP:FB CYC:275 SL:68 +E138 E8 INX A:00 X:4B Y:00 P:27 SP:FB CYC:284 SL:68 +E139 B8 CLV A:00 X:4C Y:00 P:25 SP:FB CYC:290 SL:68 +E13A 38 SEC A:00 X:4C Y:00 P:25 SP:FB CYC:296 SL:68 +E13B A9 40 LDA #$40 A:00 X:4C Y:00 P:25 SP:FB CYC:302 SL:68 +E13D CE 00 04 DEC $0400 = 40 A:40 X:4C Y:00 P:25 SP:FB CYC:308 SL:68 +E140 F9 00 04 SBC $0400,Y @ 0400 = 3F A:40 X:4C Y:00 P:25 SP:FB CYC:326 SL:68 +E143 F0 0A BEQ $E14F A:01 X:4C Y:00 P:25 SP:FB CYC:338 SL:68 +E145 30 08 BMI $E14F A:01 X:4C Y:00 P:25 SP:FB CYC: 3 SL:69 +E147 90 06 BCC $E14F A:01 X:4C Y:00 P:25 SP:FB CYC: 9 SL:69 +E149 70 04 BVS $E14F A:01 X:4C Y:00 P:25 SP:FB CYC: 15 SL:69 +E14B C9 01 CMP #$01 A:01 X:4C Y:00 P:25 SP:FB CYC: 21 SL:69 +E14D F0 02 BEQ $E151 A:01 X:4C Y:00 P:27 SP:FB CYC: 27 SL:69 +E151 E8 INX A:01 X:4C Y:00 P:27 SP:FB CYC: 36 SL:69 +E152 A9 40 LDA #$40 A:01 X:4D Y:00 P:25 SP:FB CYC: 42 SL:69 +E154 38 SEC A:40 X:4D Y:00 P:25 SP:FB CYC: 48 SL:69 +E155 24 01 BIT $01 = FF A:40 X:4D Y:00 P:25 SP:FB CYC: 54 SL:69 +E157 EE 00 04 INC $0400 = 3F A:40 X:4D Y:00 P:E5 SP:FB CYC: 63 SL:69 +E15A EE 00 04 INC $0400 = 40 A:40 X:4D Y:00 P:65 SP:FB CYC: 81 SL:69 +E15D F9 00 04 SBC $0400,Y @ 0400 = 41 A:40 X:4D Y:00 P:65 SP:FB CYC: 99 SL:69 +E160 B0 0A BCS $E16C A:FF X:4D Y:00 P:A4 SP:FB CYC:111 SL:69 +E162 F0 08 BEQ $E16C A:FF X:4D Y:00 P:A4 SP:FB CYC:117 SL:69 +E164 10 06 BPL $E16C A:FF X:4D Y:00 P:A4 SP:FB CYC:123 SL:69 +E166 70 04 BVS $E16C A:FF X:4D Y:00 P:A4 SP:FB CYC:129 SL:69 +E168 C9 FF CMP #$FF A:FF X:4D Y:00 P:A4 SP:FB CYC:135 SL:69 +E16A F0 02 BEQ $E16E A:FF X:4D Y:00 P:27 SP:FB CYC:141 SL:69 +E16E E8 INX A:FF X:4D Y:00 P:27 SP:FB CYC:150 SL:69 +E16F 18 CLC A:FF X:4E Y:00 P:25 SP:FB CYC:156 SL:69 +E170 A9 00 LDA #$00 A:FF X:4E Y:00 P:24 SP:FB CYC:162 SL:69 +E172 8D 00 04 STA $0400 = 41 A:00 X:4E Y:00 P:26 SP:FB CYC:168 SL:69 +E175 A9 80 LDA #$80 A:00 X:4E Y:00 P:26 SP:FB CYC:180 SL:69 +E177 F9 00 04 SBC $0400,Y @ 0400 = 00 A:80 X:4E Y:00 P:A4 SP:FB CYC:186 SL:69 +E17A 90 04 BCC $E180 A:7F X:4E Y:00 P:65 SP:FB CYC:198 SL:69 +E17C C9 7F CMP #$7F A:7F X:4E Y:00 P:65 SP:FB CYC:204 SL:69 +E17E F0 02 BEQ $E182 A:7F X:4E Y:00 P:67 SP:FB CYC:210 SL:69 +E182 E8 INX A:7F X:4E Y:00 P:67 SP:FB CYC:219 SL:69 +E183 38 SEC A:7F X:4F Y:00 P:65 SP:FB CYC:225 SL:69 +E184 A9 7F LDA #$7F A:7F X:4F Y:00 P:65 SP:FB CYC:231 SL:69 +E186 8D 00 04 STA $0400 = 00 A:7F X:4F Y:00 P:65 SP:FB CYC:237 SL:69 +E189 A9 81 LDA #$81 A:7F X:4F Y:00 P:65 SP:FB CYC:249 SL:69 +E18B F9 00 04 SBC $0400,Y @ 0400 = 7F A:81 X:4F Y:00 P:E5 SP:FB CYC:255 SL:69 +E18E 50 06 BVC $E196 A:02 X:4F Y:00 P:65 SP:FB CYC:267 SL:69 +E190 90 04 BCC $E196 A:02 X:4F Y:00 P:65 SP:FB CYC:273 SL:69 +E192 C9 02 CMP #$02 A:02 X:4F Y:00 P:65 SP:FB CYC:279 SL:69 +E194 F0 02 BEQ $E198 A:02 X:4F Y:00 P:67 SP:FB CYC:285 SL:69 +E198 E8 INX A:02 X:4F Y:00 P:67 SP:FB CYC:294 SL:69 +E199 A9 00 LDA #$00 A:02 X:50 Y:00 P:65 SP:FB CYC:300 SL:69 +E19B A9 87 LDA #$87 A:00 X:50 Y:00 P:67 SP:FB CYC:306 SL:69 +E19D 99 00 04 STA $0400,Y @ 0400 = 7F A:87 X:50 Y:00 P:E5 SP:FB CYC:312 SL:69 +E1A0 AD 00 04 LDA $0400 = 87 A:87 X:50 Y:00 P:E5 SP:FB CYC:327 SL:69 +E1A3 C9 87 CMP #$87 A:87 X:50 Y:00 P:E5 SP:FB CYC:339 SL:69 +E1A5 F0 02 BEQ $E1A9 A:87 X:50 Y:00 P:67 SP:FB CYC: 4 SL:70 +E1A9 60 RTS A:87 X:50 Y:00 P:67 SP:FB CYC: 13 SL:70 +C629 20 B8 DB JSR $DBB8 A:87 X:50 Y:00 P:67 SP:FD CYC: 31 SL:70 +DBB8 A9 FF LDA #$FF A:87 X:50 Y:00 P:67 SP:FB CYC: 49 SL:70 +DBBA 85 01 STA $01 = FF A:FF X:50 Y:00 P:E5 SP:FB CYC: 55 SL:70 +DBBC A9 AA LDA #$AA A:FF X:50 Y:00 P:E5 SP:FB CYC: 64 SL:70 +DBBE 85 33 STA $33 = A3 A:AA X:50 Y:00 P:E5 SP:FB CYC: 70 SL:70 +DBC0 A9 BB LDA #$BB A:AA X:50 Y:00 P:E5 SP:FB CYC: 79 SL:70 +DBC2 85 89 STA $89 = 00 A:BB X:50 Y:00 P:E5 SP:FB CYC: 85 SL:70 +DBC4 A2 00 LDX #$00 A:BB X:50 Y:00 P:E5 SP:FB CYC: 94 SL:70 +DBC6 A9 66 LDA #$66 A:BB X:00 Y:00 P:67 SP:FB CYC:100 SL:70 +DBC8 24 01 BIT $01 = FF A:66 X:00 Y:00 P:65 SP:FB CYC:106 SL:70 +DBCA 38 SEC A:66 X:00 Y:00 P:E5 SP:FB CYC:115 SL:70 +DBCB A0 00 LDY #$00 A:66 X:00 Y:00 P:E5 SP:FB CYC:121 SL:70 +DBCD B4 33 LDY $33,X @ 33 = AA A:66 X:00 Y:00 P:67 SP:FB CYC:127 SL:70 +DBCF 10 12 BPL $DBE3 A:66 X:00 Y:AA P:E5 SP:FB CYC:139 SL:70 +DBD1 F0 10 BEQ $DBE3 A:66 X:00 Y:AA P:E5 SP:FB CYC:145 SL:70 +DBD3 50 0E BVC $DBE3 A:66 X:00 Y:AA P:E5 SP:FB CYC:151 SL:70 +DBD5 90 0C BCC $DBE3 A:66 X:00 Y:AA P:E5 SP:FB CYC:157 SL:70 +DBD7 C9 66 CMP #$66 A:66 X:00 Y:AA P:E5 SP:FB CYC:163 SL:70 +DBD9 D0 08 BNE $DBE3 A:66 X:00 Y:AA P:67 SP:FB CYC:169 SL:70 +DBDB E0 00 CPX #$00 A:66 X:00 Y:AA P:67 SP:FB CYC:175 SL:70 +DBDD D0 04 BNE $DBE3 A:66 X:00 Y:AA P:67 SP:FB CYC:181 SL:70 +DBDF C0 AA CPY #$AA A:66 X:00 Y:AA P:67 SP:FB CYC:187 SL:70 +DBE1 F0 04 BEQ $DBE7 A:66 X:00 Y:AA P:67 SP:FB CYC:193 SL:70 +DBE7 A2 8A LDX #$8A A:66 X:00 Y:AA P:67 SP:FB CYC:202 SL:70 +DBE9 A9 66 LDA #$66 A:66 X:8A Y:AA P:E5 SP:FB CYC:208 SL:70 +DBEB B8 CLV A:66 X:8A Y:AA P:65 SP:FB CYC:214 SL:70 +DBEC 18 CLC A:66 X:8A Y:AA P:25 SP:FB CYC:220 SL:70 +DBED A0 00 LDY #$00 A:66 X:8A Y:AA P:24 SP:FB CYC:226 SL:70 +DBEF B4 FF LDY $FF,X @ 89 = BB A:66 X:8A Y:00 P:26 SP:FB CYC:232 SL:70 +DBF1 10 12 BPL $DC05 A:66 X:8A Y:BB P:A4 SP:FB CYC:244 SL:70 +DBF3 F0 10 BEQ $DC05 A:66 X:8A Y:BB P:A4 SP:FB CYC:250 SL:70 +DBF5 70 0E BVS $DC05 A:66 X:8A Y:BB P:A4 SP:FB CYC:256 SL:70 +DBF7 B0 0C BCS $DC05 A:66 X:8A Y:BB P:A4 SP:FB CYC:262 SL:70 +DBF9 C0 BB CPY #$BB A:66 X:8A Y:BB P:A4 SP:FB CYC:268 SL:70 +DBFB D0 08 BNE $DC05 A:66 X:8A Y:BB P:27 SP:FB CYC:274 SL:70 +DBFD C9 66 CMP #$66 A:66 X:8A Y:BB P:27 SP:FB CYC:280 SL:70 +DBFF D0 04 BNE $DC05 A:66 X:8A Y:BB P:27 SP:FB CYC:286 SL:70 +DC01 E0 8A CPX #$8A A:66 X:8A Y:BB P:27 SP:FB CYC:292 SL:70 +DC03 F0 04 BEQ $DC09 A:66 X:8A Y:BB P:27 SP:FB CYC:298 SL:70 +DC09 24 01 BIT $01 = FF A:66 X:8A Y:BB P:27 SP:FB CYC:307 SL:70 +DC0B 38 SEC A:66 X:8A Y:BB P:E5 SP:FB CYC:316 SL:70 +DC0C A0 44 LDY #$44 A:66 X:8A Y:BB P:E5 SP:FB CYC:322 SL:70 +DC0E A2 00 LDX #$00 A:66 X:8A Y:44 P:65 SP:FB CYC:328 SL:70 +DC10 94 33 STY $33,X @ 33 = AA A:66 X:00 Y:44 P:67 SP:FB CYC:334 SL:70 +DC12 A5 33 LDA $33 = 44 A:66 X:00 Y:44 P:67 SP:FB CYC: 5 SL:71 +DC14 90 18 BCC $DC2E A:44 X:00 Y:44 P:65 SP:FB CYC: 14 SL:71 +DC16 C9 44 CMP #$44 A:44 X:00 Y:44 P:65 SP:FB CYC: 20 SL:71 +DC18 D0 14 BNE $DC2E A:44 X:00 Y:44 P:67 SP:FB CYC: 26 SL:71 +DC1A 50 12 BVC $DC2E A:44 X:00 Y:44 P:67 SP:FB CYC: 32 SL:71 +DC1C 18 CLC A:44 X:00 Y:44 P:67 SP:FB CYC: 38 SL:71 +DC1D B8 CLV A:44 X:00 Y:44 P:66 SP:FB CYC: 44 SL:71 +DC1E A0 99 LDY #$99 A:44 X:00 Y:44 P:26 SP:FB CYC: 50 SL:71 +DC20 A2 80 LDX #$80 A:44 X:00 Y:99 P:A4 SP:FB CYC: 56 SL:71 +DC22 94 85 STY $85,X @ 05 = 00 A:44 X:80 Y:99 P:A4 SP:FB CYC: 62 SL:71 +DC24 A5 05 LDA $05 = 99 A:44 X:80 Y:99 P:A4 SP:FB CYC: 74 SL:71 +DC26 B0 06 BCS $DC2E A:99 X:80 Y:99 P:A4 SP:FB CYC: 83 SL:71 +DC28 C9 99 CMP #$99 A:99 X:80 Y:99 P:A4 SP:FB CYC: 89 SL:71 +DC2A D0 02 BNE $DC2E A:99 X:80 Y:99 P:27 SP:FB CYC: 95 SL:71 +DC2C 50 04 BVC $DC32 A:99 X:80 Y:99 P:27 SP:FB CYC:101 SL:71 +DC32 A0 0B LDY #$0B A:99 X:80 Y:99 P:27 SP:FB CYC:110 SL:71 +DC34 A9 AA LDA #$AA A:99 X:80 Y:0B P:25 SP:FB CYC:116 SL:71 +DC36 A2 78 LDX #$78 A:AA X:80 Y:0B P:A5 SP:FB CYC:122 SL:71 +DC38 85 78 STA $78 = 00 A:AA X:78 Y:0B P:25 SP:FB CYC:128 SL:71 +DC3A 20 B6 F7 JSR $F7B6 A:AA X:78 Y:0B P:25 SP:FB CYC:137 SL:71 +F7B6 18 CLC A:AA X:78 Y:0B P:25 SP:F9 CYC:155 SL:71 +F7B7 A9 FF LDA #$FF A:AA X:78 Y:0B P:24 SP:F9 CYC:161 SL:71 +F7B9 85 01 STA $01 = FF A:FF X:78 Y:0B P:A4 SP:F9 CYC:167 SL:71 +F7BB 24 01 BIT $01 = FF A:FF X:78 Y:0B P:A4 SP:F9 CYC:176 SL:71 +F7BD A9 55 LDA #$55 A:FF X:78 Y:0B P:E4 SP:F9 CYC:185 SL:71 +F7BF 60 RTS A:55 X:78 Y:0B P:64 SP:F9 CYC:191 SL:71 +DC3D 15 00 ORA $00,X @ 78 = AA A:55 X:78 Y:0B P:64 SP:FB CYC:209 SL:71 +DC3F 20 C0 F7 JSR $F7C0 A:FF X:78 Y:0B P:E4 SP:FB CYC:221 SL:71 +F7C0 B0 09 BCS $F7CB A:FF X:78 Y:0B P:E4 SP:F9 CYC:239 SL:71 +F7C2 10 07 BPL $F7CB A:FF X:78 Y:0B P:E4 SP:F9 CYC:245 SL:71 +F7C4 C9 FF CMP #$FF A:FF X:78 Y:0B P:E4 SP:F9 CYC:251 SL:71 +F7C6 D0 03 BNE $F7CB A:FF X:78 Y:0B P:67 SP:F9 CYC:257 SL:71 +F7C8 50 01 BVC $F7CB A:FF X:78 Y:0B P:67 SP:F9 CYC:263 SL:71 +F7CA 60 RTS A:FF X:78 Y:0B P:67 SP:F9 CYC:269 SL:71 +DC42 C8 INY A:FF X:78 Y:0B P:67 SP:FB CYC:287 SL:71 +DC43 A9 00 LDA #$00 A:FF X:78 Y:0C P:65 SP:FB CYC:293 SL:71 +DC45 85 78 STA $78 = AA A:00 X:78 Y:0C P:67 SP:FB CYC:299 SL:71 +DC47 20 CE F7 JSR $F7CE A:00 X:78 Y:0C P:67 SP:FB CYC:308 SL:71 +F7CE 38 SEC A:00 X:78 Y:0C P:67 SP:F9 CYC:326 SL:71 +F7CF B8 CLV A:00 X:78 Y:0C P:67 SP:F9 CYC:332 SL:71 +F7D0 A9 00 LDA #$00 A:00 X:78 Y:0C P:27 SP:F9 CYC:338 SL:71 +F7D2 60 RTS A:00 X:78 Y:0C P:27 SP:F9 CYC: 3 SL:72 +DC4A 15 00 ORA $00,X @ 78 = 00 A:00 X:78 Y:0C P:27 SP:FB CYC: 21 SL:72 +DC4C 20 D3 F7 JSR $F7D3 A:00 X:78 Y:0C P:27 SP:FB CYC: 33 SL:72 +F7D3 D0 07 BNE $F7DC A:00 X:78 Y:0C P:27 SP:F9 CYC: 51 SL:72 +F7D5 70 05 BVS $F7DC A:00 X:78 Y:0C P:27 SP:F9 CYC: 57 SL:72 +F7D7 90 03 BCC $F7DC A:00 X:78 Y:0C P:27 SP:F9 CYC: 63 SL:72 +F7D9 30 01 BMI $F7DC A:00 X:78 Y:0C P:27 SP:F9 CYC: 69 SL:72 +F7DB 60 RTS A:00 X:78 Y:0C P:27 SP:F9 CYC: 75 SL:72 +DC4F C8 INY A:00 X:78 Y:0C P:27 SP:FB CYC: 93 SL:72 +DC50 A9 AA LDA #$AA A:00 X:78 Y:0D P:25 SP:FB CYC: 99 SL:72 +DC52 85 78 STA $78 = 00 A:AA X:78 Y:0D P:A5 SP:FB CYC:105 SL:72 +DC54 20 DF F7 JSR $F7DF A:AA X:78 Y:0D P:A5 SP:FB CYC:114 SL:72 +F7DF 18 CLC A:AA X:78 Y:0D P:A5 SP:F9 CYC:132 SL:72 +F7E0 24 01 BIT $01 = FF A:AA X:78 Y:0D P:A4 SP:F9 CYC:138 SL:72 +F7E2 A9 55 LDA #$55 A:AA X:78 Y:0D P:E4 SP:F9 CYC:147 SL:72 +F7E4 60 RTS A:55 X:78 Y:0D P:64 SP:F9 CYC:153 SL:72 +DC57 35 00 AND $00,X @ 78 = AA A:55 X:78 Y:0D P:64 SP:FB CYC:171 SL:72 +DC59 20 E5 F7 JSR $F7E5 A:00 X:78 Y:0D P:66 SP:FB CYC:183 SL:72 +F7E5 D0 07 BNE $F7EE A:00 X:78 Y:0D P:66 SP:F9 CYC:201 SL:72 +F7E7 50 05 BVC $F7EE A:00 X:78 Y:0D P:66 SP:F9 CYC:207 SL:72 +F7E9 B0 03 BCS $F7EE A:00 X:78 Y:0D P:66 SP:F9 CYC:213 SL:72 +F7EB 30 01 BMI $F7EE A:00 X:78 Y:0D P:66 SP:F9 CYC:219 SL:72 +F7ED 60 RTS A:00 X:78 Y:0D P:66 SP:F9 CYC:225 SL:72 +DC5C C8 INY A:00 X:78 Y:0D P:66 SP:FB CYC:243 SL:72 +DC5D A9 EF LDA #$EF A:00 X:78 Y:0E P:64 SP:FB CYC:249 SL:72 +DC5F 85 78 STA $78 = AA A:EF X:78 Y:0E P:E4 SP:FB CYC:255 SL:72 +DC61 20 F1 F7 JSR $F7F1 A:EF X:78 Y:0E P:E4 SP:FB CYC:264 SL:72 +F7F1 38 SEC A:EF X:78 Y:0E P:E4 SP:F9 CYC:282 SL:72 +F7F2 B8 CLV A:EF X:78 Y:0E P:E5 SP:F9 CYC:288 SL:72 +F7F3 A9 F8 LDA #$F8 A:EF X:78 Y:0E P:A5 SP:F9 CYC:294 SL:72 +F7F5 60 RTS A:F8 X:78 Y:0E P:A5 SP:F9 CYC:300 SL:72 +DC64 35 00 AND $00,X @ 78 = EF A:F8 X:78 Y:0E P:A5 SP:FB CYC:318 SL:72 +DC66 20 F6 F7 JSR $F7F6 A:E8 X:78 Y:0E P:A5 SP:FB CYC:330 SL:72 +F7F6 90 09 BCC $F801 A:E8 X:78 Y:0E P:A5 SP:F9 CYC: 7 SL:73 +F7F8 10 07 BPL $F801 A:E8 X:78 Y:0E P:A5 SP:F9 CYC: 13 SL:73 +F7FA C9 E8 CMP #$E8 A:E8 X:78 Y:0E P:A5 SP:F9 CYC: 19 SL:73 +F7FC D0 03 BNE $F801 A:E8 X:78 Y:0E P:27 SP:F9 CYC: 25 SL:73 +F7FE 70 01 BVS $F801 A:E8 X:78 Y:0E P:27 SP:F9 CYC: 31 SL:73 +F800 60 RTS A:E8 X:78 Y:0E P:27 SP:F9 CYC: 37 SL:73 +DC69 C8 INY A:E8 X:78 Y:0E P:27 SP:FB CYC: 55 SL:73 +DC6A A9 AA LDA #$AA A:E8 X:78 Y:0F P:25 SP:FB CYC: 61 SL:73 +DC6C 85 78 STA $78 = EF A:AA X:78 Y:0F P:A5 SP:FB CYC: 67 SL:73 +DC6E 20 04 F8 JSR $F804 A:AA X:78 Y:0F P:A5 SP:FB CYC: 76 SL:73 +F804 18 CLC A:AA X:78 Y:0F P:A5 SP:F9 CYC: 94 SL:73 +F805 24 01 BIT $01 = FF A:AA X:78 Y:0F P:A4 SP:F9 CYC:100 SL:73 +F807 A9 5F LDA #$5F A:AA X:78 Y:0F P:E4 SP:F9 CYC:109 SL:73 +F809 60 RTS A:5F X:78 Y:0F P:64 SP:F9 CYC:115 SL:73 +DC71 55 00 EOR $00,X @ 78 = AA A:5F X:78 Y:0F P:64 SP:FB CYC:133 SL:73 +DC73 20 0A F8 JSR $F80A A:F5 X:78 Y:0F P:E4 SP:FB CYC:145 SL:73 +F80A B0 09 BCS $F815 A:F5 X:78 Y:0F P:E4 SP:F9 CYC:163 SL:73 +F80C 10 07 BPL $F815 A:F5 X:78 Y:0F P:E4 SP:F9 CYC:169 SL:73 +F80E C9 F5 CMP #$F5 A:F5 X:78 Y:0F P:E4 SP:F9 CYC:175 SL:73 +F810 D0 03 BNE $F815 A:F5 X:78 Y:0F P:67 SP:F9 CYC:181 SL:73 +F812 50 01 BVC $F815 A:F5 X:78 Y:0F P:67 SP:F9 CYC:187 SL:73 +F814 60 RTS A:F5 X:78 Y:0F P:67 SP:F9 CYC:193 SL:73 +DC76 C8 INY A:F5 X:78 Y:0F P:67 SP:FB CYC:211 SL:73 +DC77 A9 70 LDA #$70 A:F5 X:78 Y:10 P:65 SP:FB CYC:217 SL:73 +DC79 85 78 STA $78 = AA A:70 X:78 Y:10 P:65 SP:FB CYC:223 SL:73 +DC7B 20 18 F8 JSR $F818 A:70 X:78 Y:10 P:65 SP:FB CYC:232 SL:73 +F818 38 SEC A:70 X:78 Y:10 P:65 SP:F9 CYC:250 SL:73 +F819 B8 CLV A:70 X:78 Y:10 P:65 SP:F9 CYC:256 SL:73 +F81A A9 70 LDA #$70 A:70 X:78 Y:10 P:25 SP:F9 CYC:262 SL:73 +F81C 60 RTS A:70 X:78 Y:10 P:25 SP:F9 CYC:268 SL:73 +DC7E 55 00 EOR $00,X @ 78 = 70 A:70 X:78 Y:10 P:25 SP:FB CYC:286 SL:73 +DC80 20 1D F8 JSR $F81D A:00 X:78 Y:10 P:27 SP:FB CYC:298 SL:73 +F81D D0 07 BNE $F826 A:00 X:78 Y:10 P:27 SP:F9 CYC:316 SL:73 +F81F 70 05 BVS $F826 A:00 X:78 Y:10 P:27 SP:F9 CYC:322 SL:73 +F821 90 03 BCC $F826 A:00 X:78 Y:10 P:27 SP:F9 CYC:328 SL:73 +F823 30 01 BMI $F826 A:00 X:78 Y:10 P:27 SP:F9 CYC:334 SL:73 +F825 60 RTS A:00 X:78 Y:10 P:27 SP:F9 CYC:340 SL:73 +DC83 C8 INY A:00 X:78 Y:10 P:27 SP:FB CYC: 17 SL:74 +DC84 A9 69 LDA #$69 A:00 X:78 Y:11 P:25 SP:FB CYC: 23 SL:74 +DC86 85 78 STA $78 = 70 A:69 X:78 Y:11 P:25 SP:FB CYC: 29 SL:74 +DC88 20 29 F8 JSR $F829 A:69 X:78 Y:11 P:25 SP:FB CYC: 38 SL:74 +F829 18 CLC A:69 X:78 Y:11 P:25 SP:F9 CYC: 56 SL:74 +F82A 24 01 BIT $01 = FF A:69 X:78 Y:11 P:24 SP:F9 CYC: 62 SL:74 +F82C A9 00 LDA #$00 A:69 X:78 Y:11 P:E4 SP:F9 CYC: 71 SL:74 +F82E 60 RTS A:00 X:78 Y:11 P:66 SP:F9 CYC: 77 SL:74 +DC8B 75 00 ADC $00,X @ 78 = 69 A:00 X:78 Y:11 P:66 SP:FB CYC: 95 SL:74 +DC8D 20 2F F8 JSR $F82F A:69 X:78 Y:11 P:24 SP:FB CYC:107 SL:74 +F82F 30 09 BMI $F83A A:69 X:78 Y:11 P:24 SP:F9 CYC:125 SL:74 +F831 B0 07 BCS $F83A A:69 X:78 Y:11 P:24 SP:F9 CYC:131 SL:74 +F833 C9 69 CMP #$69 A:69 X:78 Y:11 P:24 SP:F9 CYC:137 SL:74 +F835 D0 03 BNE $F83A A:69 X:78 Y:11 P:27 SP:F9 CYC:143 SL:74 +F837 70 01 BVS $F83A A:69 X:78 Y:11 P:27 SP:F9 CYC:149 SL:74 +F839 60 RTS A:69 X:78 Y:11 P:27 SP:F9 CYC:155 SL:74 +DC90 C8 INY A:69 X:78 Y:11 P:27 SP:FB CYC:173 SL:74 +DC91 20 3D F8 JSR $F83D A:69 X:78 Y:12 P:25 SP:FB CYC:179 SL:74 +F83D 38 SEC A:69 X:78 Y:12 P:25 SP:F9 CYC:197 SL:74 +F83E 24 01 BIT $01 = FF A:69 X:78 Y:12 P:25 SP:F9 CYC:203 SL:74 +F840 A9 00 LDA #$00 A:69 X:78 Y:12 P:E5 SP:F9 CYC:212 SL:74 +F842 60 RTS A:00 X:78 Y:12 P:67 SP:F9 CYC:218 SL:74 +DC94 75 00 ADC $00,X @ 78 = 69 A:00 X:78 Y:12 P:67 SP:FB CYC:236 SL:74 +DC96 20 43 F8 JSR $F843 A:6A X:78 Y:12 P:24 SP:FB CYC:248 SL:74 +F843 30 09 BMI $F84E A:6A X:78 Y:12 P:24 SP:F9 CYC:266 SL:74 +F845 B0 07 BCS $F84E A:6A X:78 Y:12 P:24 SP:F9 CYC:272 SL:74 +F847 C9 6A CMP #$6A A:6A X:78 Y:12 P:24 SP:F9 CYC:278 SL:74 +F849 D0 03 BNE $F84E A:6A X:78 Y:12 P:27 SP:F9 CYC:284 SL:74 +F84B 70 01 BVS $F84E A:6A X:78 Y:12 P:27 SP:F9 CYC:290 SL:74 +F84D 60 RTS A:6A X:78 Y:12 P:27 SP:F9 CYC:296 SL:74 +DC99 C8 INY A:6A X:78 Y:12 P:27 SP:FB CYC:314 SL:74 +DC9A A9 7F LDA #$7F A:6A X:78 Y:13 P:25 SP:FB CYC:320 SL:74 +DC9C 85 78 STA $78 = 69 A:7F X:78 Y:13 P:25 SP:FB CYC:326 SL:74 +DC9E 20 51 F8 JSR $F851 A:7F X:78 Y:13 P:25 SP:FB CYC:335 SL:74 +F851 38 SEC A:7F X:78 Y:13 P:25 SP:F9 CYC: 12 SL:75 +F852 B8 CLV A:7F X:78 Y:13 P:25 SP:F9 CYC: 18 SL:75 +F853 A9 7F LDA #$7F A:7F X:78 Y:13 P:25 SP:F9 CYC: 24 SL:75 +F855 60 RTS A:7F X:78 Y:13 P:25 SP:F9 CYC: 30 SL:75 +DCA1 75 00 ADC $00,X @ 78 = 7F A:7F X:78 Y:13 P:25 SP:FB CYC: 48 SL:75 +DCA3 20 56 F8 JSR $F856 A:FF X:78 Y:13 P:E4 SP:FB CYC: 60 SL:75 +F856 10 09 BPL $F861 A:FF X:78 Y:13 P:E4 SP:F9 CYC: 78 SL:75 +F858 B0 07 BCS $F861 A:FF X:78 Y:13 P:E4 SP:F9 CYC: 84 SL:75 +F85A C9 FF CMP #$FF A:FF X:78 Y:13 P:E4 SP:F9 CYC: 90 SL:75 +F85C D0 03 BNE $F861 A:FF X:78 Y:13 P:67 SP:F9 CYC: 96 SL:75 +F85E 50 01 BVC $F861 A:FF X:78 Y:13 P:67 SP:F9 CYC:102 SL:75 +F860 60 RTS A:FF X:78 Y:13 P:67 SP:F9 CYC:108 SL:75 +DCA6 C8 INY A:FF X:78 Y:13 P:67 SP:FB CYC:126 SL:75 +DCA7 A9 80 LDA #$80 A:FF X:78 Y:14 P:65 SP:FB CYC:132 SL:75 +DCA9 85 78 STA $78 = 7F A:80 X:78 Y:14 P:E5 SP:FB CYC:138 SL:75 +DCAB 20 64 F8 JSR $F864 A:80 X:78 Y:14 P:E5 SP:FB CYC:147 SL:75 +F864 18 CLC A:80 X:78 Y:14 P:E5 SP:F9 CYC:165 SL:75 +F865 24 01 BIT $01 = FF A:80 X:78 Y:14 P:E4 SP:F9 CYC:171 SL:75 +F867 A9 7F LDA #$7F A:80 X:78 Y:14 P:E4 SP:F9 CYC:180 SL:75 +F869 60 RTS A:7F X:78 Y:14 P:64 SP:F9 CYC:186 SL:75 +DCAE 75 00 ADC $00,X @ 78 = 80 A:7F X:78 Y:14 P:64 SP:FB CYC:204 SL:75 +DCB0 20 6A F8 JSR $F86A A:FF X:78 Y:14 P:A4 SP:FB CYC:216 SL:75 +F86A 10 09 BPL $F875 A:FF X:78 Y:14 P:A4 SP:F9 CYC:234 SL:75 +F86C B0 07 BCS $F875 A:FF X:78 Y:14 P:A4 SP:F9 CYC:240 SL:75 +F86E C9 FF CMP #$FF A:FF X:78 Y:14 P:A4 SP:F9 CYC:246 SL:75 +F870 D0 03 BNE $F875 A:FF X:78 Y:14 P:27 SP:F9 CYC:252 SL:75 +F872 70 01 BVS $F875 A:FF X:78 Y:14 P:27 SP:F9 CYC:258 SL:75 +F874 60 RTS A:FF X:78 Y:14 P:27 SP:F9 CYC:264 SL:75 +DCB3 C8 INY A:FF X:78 Y:14 P:27 SP:FB CYC:282 SL:75 +DCB4 20 78 F8 JSR $F878 A:FF X:78 Y:15 P:25 SP:FB CYC:288 SL:75 +F878 38 SEC A:FF X:78 Y:15 P:25 SP:F9 CYC:306 SL:75 +F879 B8 CLV A:FF X:78 Y:15 P:25 SP:F9 CYC:312 SL:75 +F87A A9 7F LDA #$7F A:FF X:78 Y:15 P:25 SP:F9 CYC:318 SL:75 +F87C 60 RTS A:7F X:78 Y:15 P:25 SP:F9 CYC:324 SL:75 +DCB7 75 00 ADC $00,X @ 78 = 80 A:7F X:78 Y:15 P:25 SP:FB CYC: 1 SL:76 +DCB9 20 7D F8 JSR $F87D A:00 X:78 Y:15 P:27 SP:FB CYC: 13 SL:76 +F87D D0 07 BNE $F886 A:00 X:78 Y:15 P:27 SP:F9 CYC: 31 SL:76 +F87F 30 05 BMI $F886 A:00 X:78 Y:15 P:27 SP:F9 CYC: 37 SL:76 +F881 70 03 BVS $F886 A:00 X:78 Y:15 P:27 SP:F9 CYC: 43 SL:76 +F883 90 01 BCC $F886 A:00 X:78 Y:15 P:27 SP:F9 CYC: 49 SL:76 +F885 60 RTS A:00 X:78 Y:15 P:27 SP:F9 CYC: 55 SL:76 +DCBC C8 INY A:00 X:78 Y:15 P:27 SP:FB CYC: 73 SL:76 +DCBD A9 40 LDA #$40 A:00 X:78 Y:16 P:25 SP:FB CYC: 79 SL:76 +DCBF 85 78 STA $78 = 80 A:40 X:78 Y:16 P:25 SP:FB CYC: 85 SL:76 +DCC1 20 89 F8 JSR $F889 A:40 X:78 Y:16 P:25 SP:FB CYC: 94 SL:76 +F889 24 01 BIT $01 = FF A:40 X:78 Y:16 P:25 SP:F9 CYC:112 SL:76 +F88B A9 40 LDA #$40 A:40 X:78 Y:16 P:E5 SP:F9 CYC:121 SL:76 +F88D 60 RTS A:40 X:78 Y:16 P:65 SP:F9 CYC:127 SL:76 +DCC4 D5 00 CMP $00,X @ 78 = 40 A:40 X:78 Y:16 P:65 SP:FB CYC:145 SL:76 +DCC6 20 8E F8 JSR $F88E A:40 X:78 Y:16 P:67 SP:FB CYC:157 SL:76 +F88E 30 07 BMI $F897 A:40 X:78 Y:16 P:67 SP:F9 CYC:175 SL:76 +F890 90 05 BCC $F897 A:40 X:78 Y:16 P:67 SP:F9 CYC:181 SL:76 +F892 D0 03 BNE $F897 A:40 X:78 Y:16 P:67 SP:F9 CYC:187 SL:76 +F894 50 01 BVC $F897 A:40 X:78 Y:16 P:67 SP:F9 CYC:193 SL:76 +F896 60 RTS A:40 X:78 Y:16 P:67 SP:F9 CYC:199 SL:76 +DCC9 C8 INY A:40 X:78 Y:16 P:67 SP:FB CYC:217 SL:76 +DCCA 48 PHA A:40 X:78 Y:17 P:65 SP:FB CYC:223 SL:76 +DCCB A9 3F LDA #$3F A:40 X:78 Y:17 P:65 SP:FA CYC:232 SL:76 +DCCD 85 78 STA $78 = 40 A:3F X:78 Y:17 P:65 SP:FA CYC:238 SL:76 +DCCF 68 PLA A:3F X:78 Y:17 P:65 SP:FA CYC:247 SL:76 +DCD0 20 9A F8 JSR $F89A A:40 X:78 Y:17 P:65 SP:FB CYC:259 SL:76 +F89A B8 CLV A:40 X:78 Y:17 P:65 SP:F9 CYC:277 SL:76 +F89B 60 RTS A:40 X:78 Y:17 P:25 SP:F9 CYC:283 SL:76 +DCD3 D5 00 CMP $00,X @ 78 = 3F A:40 X:78 Y:17 P:25 SP:FB CYC:301 SL:76 +DCD5 20 9C F8 JSR $F89C A:40 X:78 Y:17 P:25 SP:FB CYC:313 SL:76 +F89C F0 07 BEQ $F8A5 A:40 X:78 Y:17 P:25 SP:F9 CYC:331 SL:76 +F89E 30 05 BMI $F8A5 A:40 X:78 Y:17 P:25 SP:F9 CYC:337 SL:76 +F8A0 90 03 BCC $F8A5 A:40 X:78 Y:17 P:25 SP:F9 CYC: 2 SL:77 +F8A2 70 01 BVS $F8A5 A:40 X:78 Y:17 P:25 SP:F9 CYC: 8 SL:77 +F8A4 60 RTS A:40 X:78 Y:17 P:25 SP:F9 CYC: 14 SL:77 +DCD8 C8 INY A:40 X:78 Y:17 P:25 SP:FB CYC: 32 SL:77 +DCD9 48 PHA A:40 X:78 Y:18 P:25 SP:FB CYC: 38 SL:77 +DCDA A9 41 LDA #$41 A:40 X:78 Y:18 P:25 SP:FA CYC: 47 SL:77 +DCDC 85 78 STA $78 = 3F A:41 X:78 Y:18 P:25 SP:FA CYC: 53 SL:77 +DCDE 68 PLA A:41 X:78 Y:18 P:25 SP:FA CYC: 62 SL:77 +DCDF D5 00 CMP $00,X @ 78 = 41 A:40 X:78 Y:18 P:25 SP:FB CYC: 74 SL:77 +DCE1 20 A8 F8 JSR $F8A8 A:40 X:78 Y:18 P:A4 SP:FB CYC: 86 SL:77 +F8A8 F0 05 BEQ $F8AF A:40 X:78 Y:18 P:A4 SP:F9 CYC:104 SL:77 +F8AA 10 03 BPL $F8AF A:40 X:78 Y:18 P:A4 SP:F9 CYC:110 SL:77 +F8AC 10 01 BPL $F8AF A:40 X:78 Y:18 P:A4 SP:F9 CYC:116 SL:77 +F8AE 60 RTS A:40 X:78 Y:18 P:A4 SP:F9 CYC:122 SL:77 +DCE4 C8 INY A:40 X:78 Y:18 P:A4 SP:FB CYC:140 SL:77 +DCE5 48 PHA A:40 X:78 Y:19 P:24 SP:FB CYC:146 SL:77 +DCE6 A9 00 LDA #$00 A:40 X:78 Y:19 P:24 SP:FA CYC:155 SL:77 +DCE8 85 78 STA $78 = 41 A:00 X:78 Y:19 P:26 SP:FA CYC:161 SL:77 +DCEA 68 PLA A:00 X:78 Y:19 P:26 SP:FA CYC:170 SL:77 +DCEB 20 B2 F8 JSR $F8B2 A:40 X:78 Y:19 P:24 SP:FB CYC:182 SL:77 +F8B2 A9 80 LDA #$80 A:40 X:78 Y:19 P:24 SP:F9 CYC:200 SL:77 +F8B4 60 RTS A:80 X:78 Y:19 P:A4 SP:F9 CYC:206 SL:77 +DCEE D5 00 CMP $00,X @ 78 = 00 A:80 X:78 Y:19 P:A4 SP:FB CYC:224 SL:77 +DCF0 20 B5 F8 JSR $F8B5 A:80 X:78 Y:19 P:A5 SP:FB CYC:236 SL:77 +F8B5 F0 05 BEQ $F8BC A:80 X:78 Y:19 P:A5 SP:F9 CYC:254 SL:77 +F8B7 10 03 BPL $F8BC A:80 X:78 Y:19 P:A5 SP:F9 CYC:260 SL:77 +F8B9 90 01 BCC $F8BC A:80 X:78 Y:19 P:A5 SP:F9 CYC:266 SL:77 +F8BB 60 RTS A:80 X:78 Y:19 P:A5 SP:F9 CYC:272 SL:77 +DCF3 C8 INY A:80 X:78 Y:19 P:A5 SP:FB CYC:290 SL:77 +DCF4 48 PHA A:80 X:78 Y:1A P:25 SP:FB CYC:296 SL:77 +DCF5 A9 80 LDA #$80 A:80 X:78 Y:1A P:25 SP:FA CYC:305 SL:77 +DCF7 85 78 STA $78 = 00 A:80 X:78 Y:1A P:A5 SP:FA CYC:311 SL:77 +DCF9 68 PLA A:80 X:78 Y:1A P:A5 SP:FA CYC:320 SL:77 +DCFA D5 00 CMP $00,X @ 78 = 80 A:80 X:78 Y:1A P:A5 SP:FB CYC:332 SL:77 +DCFC 20 BF F8 JSR $F8BF A:80 X:78 Y:1A P:27 SP:FB CYC: 3 SL:78 +F8BF D0 05 BNE $F8C6 A:80 X:78 Y:1A P:27 SP:F9 CYC: 21 SL:78 +F8C1 30 03 BMI $F8C6 A:80 X:78 Y:1A P:27 SP:F9 CYC: 27 SL:78 +F8C3 90 01 BCC $F8C6 A:80 X:78 Y:1A P:27 SP:F9 CYC: 33 SL:78 +F8C5 60 RTS A:80 X:78 Y:1A P:27 SP:F9 CYC: 39 SL:78 +DCFF C8 INY A:80 X:78 Y:1A P:27 SP:FB CYC: 57 SL:78 +DD00 48 PHA A:80 X:78 Y:1B P:25 SP:FB CYC: 63 SL:78 +DD01 A9 81 LDA #$81 A:80 X:78 Y:1B P:25 SP:FA CYC: 72 SL:78 +DD03 85 78 STA $78 = 80 A:81 X:78 Y:1B P:A5 SP:FA CYC: 78 SL:78 +DD05 68 PLA A:81 X:78 Y:1B P:A5 SP:FA CYC: 87 SL:78 +DD06 D5 00 CMP $00,X @ 78 = 81 A:80 X:78 Y:1B P:A5 SP:FB CYC: 99 SL:78 +DD08 20 C9 F8 JSR $F8C9 A:80 X:78 Y:1B P:A4 SP:FB CYC:111 SL:78 +F8C9 B0 05 BCS $F8D0 A:80 X:78 Y:1B P:A4 SP:F9 CYC:129 SL:78 +F8CB F0 03 BEQ $F8D0 A:80 X:78 Y:1B P:A4 SP:F9 CYC:135 SL:78 +F8CD 10 01 BPL $F8D0 A:80 X:78 Y:1B P:A4 SP:F9 CYC:141 SL:78 +F8CF 60 RTS A:80 X:78 Y:1B P:A4 SP:F9 CYC:147 SL:78 +DD0B C8 INY A:80 X:78 Y:1B P:A4 SP:FB CYC:165 SL:78 +DD0C 48 PHA A:80 X:78 Y:1C P:24 SP:FB CYC:171 SL:78 +DD0D A9 7F LDA #$7F A:80 X:78 Y:1C P:24 SP:FA CYC:180 SL:78 +DD0F 85 78 STA $78 = 81 A:7F X:78 Y:1C P:24 SP:FA CYC:186 SL:78 +DD11 68 PLA A:7F X:78 Y:1C P:24 SP:FA CYC:195 SL:78 +DD12 D5 00 CMP $00,X @ 78 = 7F A:80 X:78 Y:1C P:A4 SP:FB CYC:207 SL:78 +DD14 20 D3 F8 JSR $F8D3 A:80 X:78 Y:1C P:25 SP:FB CYC:219 SL:78 +F8D3 90 05 BCC $F8DA A:80 X:78 Y:1C P:25 SP:F9 CYC:237 SL:78 +F8D5 F0 03 BEQ $F8DA A:80 X:78 Y:1C P:25 SP:F9 CYC:243 SL:78 +F8D7 30 01 BMI $F8DA A:80 X:78 Y:1C P:25 SP:F9 CYC:249 SL:78 +F8D9 60 RTS A:80 X:78 Y:1C P:25 SP:F9 CYC:255 SL:78 +DD17 C8 INY A:80 X:78 Y:1C P:25 SP:FB CYC:273 SL:78 +DD18 A9 40 LDA #$40 A:80 X:78 Y:1D P:25 SP:FB CYC:279 SL:78 +DD1A 85 78 STA $78 = 7F A:40 X:78 Y:1D P:25 SP:FB CYC:285 SL:78 +DD1C 20 31 F9 JSR $F931 A:40 X:78 Y:1D P:25 SP:FB CYC:294 SL:78 +F931 24 01 BIT $01 = FF A:40 X:78 Y:1D P:25 SP:F9 CYC:312 SL:78 +F933 A9 40 LDA #$40 A:40 X:78 Y:1D P:E5 SP:F9 CYC:321 SL:78 +F935 38 SEC A:40 X:78 Y:1D P:65 SP:F9 CYC:327 SL:78 +F936 60 RTS A:40 X:78 Y:1D P:65 SP:F9 CYC:333 SL:78 +DD1F F5 00 SBC $00,X @ 78 = 40 A:40 X:78 Y:1D P:65 SP:FB CYC: 10 SL:79 +DD21 20 37 F9 JSR $F937 A:00 X:78 Y:1D P:27 SP:FB CYC: 22 SL:79 +F937 30 0B BMI $F944 A:00 X:78 Y:1D P:27 SP:F9 CYC: 40 SL:79 +F939 90 09 BCC $F944 A:00 X:78 Y:1D P:27 SP:F9 CYC: 46 SL:79 +F93B D0 07 BNE $F944 A:00 X:78 Y:1D P:27 SP:F9 CYC: 52 SL:79 +F93D 70 05 BVS $F944 A:00 X:78 Y:1D P:27 SP:F9 CYC: 58 SL:79 +F93F C9 00 CMP #$00 A:00 X:78 Y:1D P:27 SP:F9 CYC: 64 SL:79 +F941 D0 01 BNE $F944 A:00 X:78 Y:1D P:27 SP:F9 CYC: 70 SL:79 +F943 60 RTS A:00 X:78 Y:1D P:27 SP:F9 CYC: 76 SL:79 +DD24 C8 INY A:00 X:78 Y:1D P:27 SP:FB CYC: 94 SL:79 +DD25 A9 3F LDA #$3F A:00 X:78 Y:1E P:25 SP:FB CYC:100 SL:79 +DD27 85 78 STA $78 = 40 A:3F X:78 Y:1E P:25 SP:FB CYC:106 SL:79 +DD29 20 47 F9 JSR $F947 A:3F X:78 Y:1E P:25 SP:FB CYC:115 SL:79 +F947 B8 CLV A:3F X:78 Y:1E P:25 SP:F9 CYC:133 SL:79 +F948 38 SEC A:3F X:78 Y:1E P:25 SP:F9 CYC:139 SL:79 +F949 A9 40 LDA #$40 A:3F X:78 Y:1E P:25 SP:F9 CYC:145 SL:79 +F94B 60 RTS A:40 X:78 Y:1E P:25 SP:F9 CYC:151 SL:79 +DD2C F5 00 SBC $00,X @ 78 = 3F A:40 X:78 Y:1E P:25 SP:FB CYC:169 SL:79 +DD2E 20 4C F9 JSR $F94C A:01 X:78 Y:1E P:25 SP:FB CYC:181 SL:79 +F94C F0 0B BEQ $F959 A:01 X:78 Y:1E P:25 SP:F9 CYC:199 SL:79 +F94E 30 09 BMI $F959 A:01 X:78 Y:1E P:25 SP:F9 CYC:205 SL:79 +F950 90 07 BCC $F959 A:01 X:78 Y:1E P:25 SP:F9 CYC:211 SL:79 +F952 70 05 BVS $F959 A:01 X:78 Y:1E P:25 SP:F9 CYC:217 SL:79 +F954 C9 01 CMP #$01 A:01 X:78 Y:1E P:25 SP:F9 CYC:223 SL:79 +F956 D0 01 BNE $F959 A:01 X:78 Y:1E P:27 SP:F9 CYC:229 SL:79 +F958 60 RTS A:01 X:78 Y:1E P:27 SP:F9 CYC:235 SL:79 +DD31 C8 INY A:01 X:78 Y:1E P:27 SP:FB CYC:253 SL:79 +DD32 A9 41 LDA #$41 A:01 X:78 Y:1F P:25 SP:FB CYC:259 SL:79 +DD34 85 78 STA $78 = 3F A:41 X:78 Y:1F P:25 SP:FB CYC:265 SL:79 +DD36 20 5C F9 JSR $F95C A:41 X:78 Y:1F P:25 SP:FB CYC:274 SL:79 +F95C A9 40 LDA #$40 A:41 X:78 Y:1F P:25 SP:F9 CYC:292 SL:79 +F95E 38 SEC A:40 X:78 Y:1F P:25 SP:F9 CYC:298 SL:79 +F95F 24 01 BIT $01 = FF A:40 X:78 Y:1F P:25 SP:F9 CYC:304 SL:79 +F961 60 RTS A:40 X:78 Y:1F P:E5 SP:F9 CYC:313 SL:79 +DD39 F5 00 SBC $00,X @ 78 = 41 A:40 X:78 Y:1F P:E5 SP:FB CYC:331 SL:79 +DD3B 20 62 F9 JSR $F962 A:FF X:78 Y:1F P:A4 SP:FB CYC: 2 SL:80 +F962 B0 0B BCS $F96F A:FF X:78 Y:1F P:A4 SP:F9 CYC: 20 SL:80 +F964 F0 09 BEQ $F96F A:FF X:78 Y:1F P:A4 SP:F9 CYC: 26 SL:80 +F966 10 07 BPL $F96F A:FF X:78 Y:1F P:A4 SP:F9 CYC: 32 SL:80 +F968 70 05 BVS $F96F A:FF X:78 Y:1F P:A4 SP:F9 CYC: 38 SL:80 +F96A C9 FF CMP #$FF A:FF X:78 Y:1F P:A4 SP:F9 CYC: 44 SL:80 +F96C D0 01 BNE $F96F A:FF X:78 Y:1F P:27 SP:F9 CYC: 50 SL:80 +F96E 60 RTS A:FF X:78 Y:1F P:27 SP:F9 CYC: 56 SL:80 +DD3E C8 INY A:FF X:78 Y:1F P:27 SP:FB CYC: 74 SL:80 +DD3F A9 00 LDA #$00 A:FF X:78 Y:20 P:25 SP:FB CYC: 80 SL:80 +DD41 85 78 STA $78 = 41 A:00 X:78 Y:20 P:27 SP:FB CYC: 86 SL:80 +DD43 20 72 F9 JSR $F972 A:00 X:78 Y:20 P:27 SP:FB CYC: 95 SL:80 +F972 18 CLC A:00 X:78 Y:20 P:27 SP:F9 CYC:113 SL:80 +F973 A9 80 LDA #$80 A:00 X:78 Y:20 P:26 SP:F9 CYC:119 SL:80 +F975 60 RTS A:80 X:78 Y:20 P:A4 SP:F9 CYC:125 SL:80 +DD46 F5 00 SBC $00,X @ 78 = 00 A:80 X:78 Y:20 P:A4 SP:FB CYC:143 SL:80 +DD48 20 76 F9 JSR $F976 A:7F X:78 Y:20 P:65 SP:FB CYC:155 SL:80 +F976 90 05 BCC $F97D A:7F X:78 Y:20 P:65 SP:F9 CYC:173 SL:80 +F978 C9 7F CMP #$7F A:7F X:78 Y:20 P:65 SP:F9 CYC:179 SL:80 +F97A D0 01 BNE $F97D A:7F X:78 Y:20 P:67 SP:F9 CYC:185 SL:80 +F97C 60 RTS A:7F X:78 Y:20 P:67 SP:F9 CYC:191 SL:80 +DD4B C8 INY A:7F X:78 Y:20 P:67 SP:FB CYC:209 SL:80 +DD4C A9 7F LDA #$7F A:7F X:78 Y:21 P:65 SP:FB CYC:215 SL:80 +DD4E 85 78 STA $78 = 00 A:7F X:78 Y:21 P:65 SP:FB CYC:221 SL:80 +DD50 20 80 F9 JSR $F980 A:7F X:78 Y:21 P:65 SP:FB CYC:230 SL:80 +F980 38 SEC A:7F X:78 Y:21 P:65 SP:F9 CYC:248 SL:80 +F981 A9 81 LDA #$81 A:7F X:78 Y:21 P:65 SP:F9 CYC:254 SL:80 +F983 60 RTS A:81 X:78 Y:21 P:E5 SP:F9 CYC:260 SL:80 +DD53 F5 00 SBC $00,X @ 78 = 7F A:81 X:78 Y:21 P:E5 SP:FB CYC:278 SL:80 +DD55 20 84 F9 JSR $F984 A:02 X:78 Y:21 P:65 SP:FB CYC:290 SL:80 +F984 50 07 BVC $F98D A:02 X:78 Y:21 P:65 SP:F9 CYC:308 SL:80 +F986 90 05 BCC $F98D A:02 X:78 Y:21 P:65 SP:F9 CYC:314 SL:80 +F988 C9 02 CMP #$02 A:02 X:78 Y:21 P:65 SP:F9 CYC:320 SL:80 +F98A D0 01 BNE $F98D A:02 X:78 Y:21 P:67 SP:F9 CYC:326 SL:80 +F98C 60 RTS A:02 X:78 Y:21 P:67 SP:F9 CYC:332 SL:80 +DD58 A9 AA LDA #$AA A:02 X:78 Y:21 P:67 SP:FB CYC: 9 SL:81 +DD5A 85 33 STA $33 = 44 A:AA X:78 Y:21 P:E5 SP:FB CYC: 15 SL:81 +DD5C A9 BB LDA #$BB A:AA X:78 Y:21 P:E5 SP:FB CYC: 24 SL:81 +DD5E 85 89 STA $89 = BB A:BB X:78 Y:21 P:E5 SP:FB CYC: 30 SL:81 +DD60 A2 00 LDX #$00 A:BB X:78 Y:21 P:E5 SP:FB CYC: 39 SL:81 +DD62 A0 66 LDY #$66 A:BB X:00 Y:21 P:67 SP:FB CYC: 45 SL:81 +DD64 24 01 BIT $01 = FF A:BB X:00 Y:66 P:65 SP:FB CYC: 51 SL:81 +DD66 38 SEC A:BB X:00 Y:66 P:E5 SP:FB CYC: 60 SL:81 +DD67 A9 00 LDA #$00 A:BB X:00 Y:66 P:E5 SP:FB CYC: 66 SL:81 +DD69 B5 33 LDA $33,X @ 33 = AA A:00 X:00 Y:66 P:67 SP:FB CYC: 72 SL:81 +DD6B 10 12 BPL $DD7F A:AA X:00 Y:66 P:E5 SP:FB CYC: 84 SL:81 +DD6D F0 10 BEQ $DD7F A:AA X:00 Y:66 P:E5 SP:FB CYC: 90 SL:81 +DD6F 50 0E BVC $DD7F A:AA X:00 Y:66 P:E5 SP:FB CYC: 96 SL:81 +DD71 90 0C BCC $DD7F A:AA X:00 Y:66 P:E5 SP:FB CYC:102 SL:81 +DD73 C0 66 CPY #$66 A:AA X:00 Y:66 P:E5 SP:FB CYC:108 SL:81 +DD75 D0 08 BNE $DD7F A:AA X:00 Y:66 P:67 SP:FB CYC:114 SL:81 +DD77 E0 00 CPX #$00 A:AA X:00 Y:66 P:67 SP:FB CYC:120 SL:81 +DD79 D0 04 BNE $DD7F A:AA X:00 Y:66 P:67 SP:FB CYC:126 SL:81 +DD7B C9 AA CMP #$AA A:AA X:00 Y:66 P:67 SP:FB CYC:132 SL:81 +DD7D F0 04 BEQ $DD83 A:AA X:00 Y:66 P:67 SP:FB CYC:138 SL:81 +DD83 A2 8A LDX #$8A A:AA X:00 Y:66 P:67 SP:FB CYC:147 SL:81 +DD85 A0 66 LDY #$66 A:AA X:8A Y:66 P:E5 SP:FB CYC:153 SL:81 +DD87 B8 CLV A:AA X:8A Y:66 P:65 SP:FB CYC:159 SL:81 +DD88 18 CLC A:AA X:8A Y:66 P:25 SP:FB CYC:165 SL:81 +DD89 A9 00 LDA #$00 A:AA X:8A Y:66 P:24 SP:FB CYC:171 SL:81 +DD8B B5 FF LDA $FF,X @ 89 = BB A:00 X:8A Y:66 P:26 SP:FB CYC:177 SL:81 +DD8D 10 12 BPL $DDA1 A:BB X:8A Y:66 P:A4 SP:FB CYC:189 SL:81 +DD8F F0 10 BEQ $DDA1 A:BB X:8A Y:66 P:A4 SP:FB CYC:195 SL:81 +DD91 70 0E BVS $DDA1 A:BB X:8A Y:66 P:A4 SP:FB CYC:201 SL:81 +DD93 B0 0C BCS $DDA1 A:BB X:8A Y:66 P:A4 SP:FB CYC:207 SL:81 +DD95 C9 BB CMP #$BB A:BB X:8A Y:66 P:A4 SP:FB CYC:213 SL:81 +DD97 D0 08 BNE $DDA1 A:BB X:8A Y:66 P:27 SP:FB CYC:219 SL:81 +DD99 C0 66 CPY #$66 A:BB X:8A Y:66 P:27 SP:FB CYC:225 SL:81 +DD9B D0 04 BNE $DDA1 A:BB X:8A Y:66 P:27 SP:FB CYC:231 SL:81 +DD9D E0 8A CPX #$8A A:BB X:8A Y:66 P:27 SP:FB CYC:237 SL:81 +DD9F F0 04 BEQ $DDA5 A:BB X:8A Y:66 P:27 SP:FB CYC:243 SL:81 +DDA5 24 01 BIT $01 = FF A:BB X:8A Y:66 P:27 SP:FB CYC:252 SL:81 +DDA7 38 SEC A:BB X:8A Y:66 P:E5 SP:FB CYC:261 SL:81 +DDA8 A9 44 LDA #$44 A:BB X:8A Y:66 P:E5 SP:FB CYC:267 SL:81 +DDAA A2 00 LDX #$00 A:44 X:8A Y:66 P:65 SP:FB CYC:273 SL:81 +DDAC 95 33 STA $33,X @ 33 = AA A:44 X:00 Y:66 P:67 SP:FB CYC:279 SL:81 +DDAE A5 33 LDA $33 = 44 A:44 X:00 Y:66 P:67 SP:FB CYC:291 SL:81 +DDB0 90 18 BCC $DDCA A:44 X:00 Y:66 P:65 SP:FB CYC:300 SL:81 +DDB2 C9 44 CMP #$44 A:44 X:00 Y:66 P:65 SP:FB CYC:306 SL:81 +DDB4 D0 14 BNE $DDCA A:44 X:00 Y:66 P:67 SP:FB CYC:312 SL:81 +DDB6 50 12 BVC $DDCA A:44 X:00 Y:66 P:67 SP:FB CYC:318 SL:81 +DDB8 18 CLC A:44 X:00 Y:66 P:67 SP:FB CYC:324 SL:81 +DDB9 B8 CLV A:44 X:00 Y:66 P:66 SP:FB CYC:330 SL:81 +DDBA A9 99 LDA #$99 A:44 X:00 Y:66 P:26 SP:FB CYC:336 SL:81 +DDBC A2 80 LDX #$80 A:99 X:00 Y:66 P:A4 SP:FB CYC: 1 SL:82 +DDBE 95 85 STA $85,X @ 05 = 99 A:99 X:80 Y:66 P:A4 SP:FB CYC: 7 SL:82 +DDC0 A5 05 LDA $05 = 99 A:99 X:80 Y:66 P:A4 SP:FB CYC: 19 SL:82 +DDC2 B0 06 BCS $DDCA A:99 X:80 Y:66 P:A4 SP:FB CYC: 28 SL:82 +DDC4 C9 99 CMP #$99 A:99 X:80 Y:66 P:A4 SP:FB CYC: 34 SL:82 +DDC6 D0 02 BNE $DDCA A:99 X:80 Y:66 P:27 SP:FB CYC: 40 SL:82 +DDC8 50 04 BVC $DDCE A:99 X:80 Y:66 P:27 SP:FB CYC: 46 SL:82 +DDCE A0 25 LDY #$25 A:99 X:80 Y:66 P:27 SP:FB CYC: 55 SL:82 +DDD0 A2 78 LDX #$78 A:99 X:80 Y:25 P:25 SP:FB CYC: 61 SL:82 +DDD2 20 90 F9 JSR $F990 A:99 X:78 Y:25 P:25 SP:FB CYC: 67 SL:82 +F990 A2 55 LDX #$55 A:99 X:78 Y:25 P:25 SP:F9 CYC: 85 SL:82 +F992 A9 FF LDA #$FF A:99 X:55 Y:25 P:25 SP:F9 CYC: 91 SL:82 +F994 85 01 STA $01 = FF A:FF X:55 Y:25 P:A5 SP:F9 CYC: 97 SL:82 +F996 EA NOP A:FF X:55 Y:25 P:A5 SP:F9 CYC:106 SL:82 +F997 24 01 BIT $01 = FF A:FF X:55 Y:25 P:A5 SP:F9 CYC:112 SL:82 +F999 38 SEC A:FF X:55 Y:25 P:E5 SP:F9 CYC:121 SL:82 +F99A A9 01 LDA #$01 A:FF X:55 Y:25 P:E5 SP:F9 CYC:127 SL:82 +F99C 60 RTS A:01 X:55 Y:25 P:65 SP:F9 CYC:133 SL:82 +DDD5 95 00 STA $00,X @ 55 = 00 A:01 X:55 Y:25 P:65 SP:FB CYC:151 SL:82 +DDD7 56 00 LSR $00,X @ 55 = 01 A:01 X:55 Y:25 P:65 SP:FB CYC:163 SL:82 +DDD9 B5 00 LDA $00,X @ 55 = 00 A:01 X:55 Y:25 P:67 SP:FB CYC:181 SL:82 +DDDB 20 9D F9 JSR $F99D A:00 X:55 Y:25 P:67 SP:FB CYC:193 SL:82 +F99D 90 1B BCC $F9BA A:00 X:55 Y:25 P:67 SP:F9 CYC:211 SL:82 +F99F D0 19 BNE $F9BA A:00 X:55 Y:25 P:67 SP:F9 CYC:217 SL:82 +F9A1 30 17 BMI $F9BA A:00 X:55 Y:25 P:67 SP:F9 CYC:223 SL:82 +F9A3 50 15 BVC $F9BA A:00 X:55 Y:25 P:67 SP:F9 CYC:229 SL:82 +F9A5 C9 00 CMP #$00 A:00 X:55 Y:25 P:67 SP:F9 CYC:235 SL:82 +F9A7 D0 11 BNE $F9BA A:00 X:55 Y:25 P:67 SP:F9 CYC:241 SL:82 +F9A9 B8 CLV A:00 X:55 Y:25 P:67 SP:F9 CYC:247 SL:82 +F9AA A9 AA LDA #$AA A:00 X:55 Y:25 P:27 SP:F9 CYC:253 SL:82 +F9AC 60 RTS A:AA X:55 Y:25 P:A5 SP:F9 CYC:259 SL:82 +DDDE C8 INY A:AA X:55 Y:25 P:A5 SP:FB CYC:277 SL:82 +DDDF 95 00 STA $00,X @ 55 = 00 A:AA X:55 Y:26 P:25 SP:FB CYC:283 SL:82 +DDE1 56 00 LSR $00,X @ 55 = AA A:AA X:55 Y:26 P:25 SP:FB CYC:295 SL:82 +DDE3 B5 00 LDA $00,X @ 55 = 55 A:AA X:55 Y:26 P:24 SP:FB CYC:313 SL:82 +DDE5 20 AD F9 JSR $F9AD A:55 X:55 Y:26 P:24 SP:FB CYC:325 SL:82 +F9AD B0 0B BCS $F9BA A:55 X:55 Y:26 P:24 SP:F9 CYC: 2 SL:83 +F9AF F0 09 BEQ $F9BA A:55 X:55 Y:26 P:24 SP:F9 CYC: 8 SL:83 +F9B1 30 07 BMI $F9BA A:55 X:55 Y:26 P:24 SP:F9 CYC: 14 SL:83 +F9B3 70 05 BVS $F9BA A:55 X:55 Y:26 P:24 SP:F9 CYC: 20 SL:83 +F9B5 C9 55 CMP #$55 A:55 X:55 Y:26 P:24 SP:F9 CYC: 26 SL:83 +F9B7 D0 01 BNE $F9BA A:55 X:55 Y:26 P:27 SP:F9 CYC: 32 SL:83 +F9B9 60 RTS A:55 X:55 Y:26 P:27 SP:F9 CYC: 38 SL:83 +DDE8 C8 INY A:55 X:55 Y:26 P:27 SP:FB CYC: 56 SL:83 +DDE9 20 BD F9 JSR $F9BD A:55 X:55 Y:27 P:25 SP:FB CYC: 62 SL:83 +F9BD 24 01 BIT $01 = FF A:55 X:55 Y:27 P:25 SP:F9 CYC: 80 SL:83 +F9BF 38 SEC A:55 X:55 Y:27 P:E5 SP:F9 CYC: 89 SL:83 +F9C0 A9 80 LDA #$80 A:55 X:55 Y:27 P:E5 SP:F9 CYC: 95 SL:83 +F9C2 60 RTS A:80 X:55 Y:27 P:E5 SP:F9 CYC:101 SL:83 +DDEC 95 00 STA $00,X @ 55 = 55 A:80 X:55 Y:27 P:E5 SP:FB CYC:119 SL:83 +DDEE 16 00 ASL $00,X @ 55 = 80 A:80 X:55 Y:27 P:E5 SP:FB CYC:131 SL:83 +DDF0 B5 00 LDA $00,X @ 55 = 00 A:80 X:55 Y:27 P:67 SP:FB CYC:149 SL:83 +DDF2 20 C3 F9 JSR $F9C3 A:00 X:55 Y:27 P:67 SP:FB CYC:161 SL:83 +F9C3 90 1C BCC $F9E1 A:00 X:55 Y:27 P:67 SP:F9 CYC:179 SL:83 +F9C5 D0 1A BNE $F9E1 A:00 X:55 Y:27 P:67 SP:F9 CYC:185 SL:83 +F9C7 30 18 BMI $F9E1 A:00 X:55 Y:27 P:67 SP:F9 CYC:191 SL:83 +F9C9 50 16 BVC $F9E1 A:00 X:55 Y:27 P:67 SP:F9 CYC:197 SL:83 +F9CB C9 00 CMP #$00 A:00 X:55 Y:27 P:67 SP:F9 CYC:203 SL:83 +F9CD D0 12 BNE $F9E1 A:00 X:55 Y:27 P:67 SP:F9 CYC:209 SL:83 +F9CF B8 CLV A:00 X:55 Y:27 P:67 SP:F9 CYC:215 SL:83 +F9D0 A9 55 LDA #$55 A:00 X:55 Y:27 P:27 SP:F9 CYC:221 SL:83 +F9D2 38 SEC A:55 X:55 Y:27 P:25 SP:F9 CYC:227 SL:83 +F9D3 60 RTS A:55 X:55 Y:27 P:25 SP:F9 CYC:233 SL:83 +DDF5 C8 INY A:55 X:55 Y:27 P:25 SP:FB CYC:251 SL:83 +DDF6 95 00 STA $00,X @ 55 = 00 A:55 X:55 Y:28 P:25 SP:FB CYC:257 SL:83 +DDF8 16 00 ASL $00,X @ 55 = 55 A:55 X:55 Y:28 P:25 SP:FB CYC:269 SL:83 +DDFA B5 00 LDA $00,X @ 55 = AA A:55 X:55 Y:28 P:A4 SP:FB CYC:287 SL:83 +DDFC 20 D4 F9 JSR $F9D4 A:AA X:55 Y:28 P:A4 SP:FB CYC:299 SL:83 +F9D4 B0 0B BCS $F9E1 A:AA X:55 Y:28 P:A4 SP:F9 CYC:317 SL:83 +F9D6 F0 09 BEQ $F9E1 A:AA X:55 Y:28 P:A4 SP:F9 CYC:323 SL:83 +F9D8 10 07 BPL $F9E1 A:AA X:55 Y:28 P:A4 SP:F9 CYC:329 SL:83 +F9DA 70 05 BVS $F9E1 A:AA X:55 Y:28 P:A4 SP:F9 CYC:335 SL:83 +F9DC C9 AA CMP #$AA A:AA X:55 Y:28 P:A4 SP:F9 CYC: 0 SL:84 +F9DE D0 01 BNE $F9E1 A:AA X:55 Y:28 P:27 SP:F9 CYC: 6 SL:84 +F9E0 60 RTS A:AA X:55 Y:28 P:27 SP:F9 CYC: 12 SL:84 +DDFF C8 INY A:AA X:55 Y:28 P:27 SP:FB CYC: 30 SL:84 +DE00 20 E4 F9 JSR $F9E4 A:AA X:55 Y:29 P:25 SP:FB CYC: 36 SL:84 +F9E4 24 01 BIT $01 = FF A:AA X:55 Y:29 P:25 SP:F9 CYC: 54 SL:84 +F9E6 38 SEC A:AA X:55 Y:29 P:E5 SP:F9 CYC: 63 SL:84 +F9E7 A9 01 LDA #$01 A:AA X:55 Y:29 P:E5 SP:F9 CYC: 69 SL:84 +F9E9 60 RTS A:01 X:55 Y:29 P:65 SP:F9 CYC: 75 SL:84 +DE03 95 00 STA $00,X @ 55 = AA A:01 X:55 Y:29 P:65 SP:FB CYC: 93 SL:84 +DE05 76 00 ROR $00,X @ 55 = 01 A:01 X:55 Y:29 P:65 SP:FB CYC:105 SL:84 +DE07 B5 00 LDA $00,X @ 55 = 80 A:01 X:55 Y:29 P:E5 SP:FB CYC:123 SL:84 +DE09 20 EA F9 JSR $F9EA A:80 X:55 Y:29 P:E5 SP:FB CYC:135 SL:84 +F9EA 90 1C BCC $FA08 A:80 X:55 Y:29 P:E5 SP:F9 CYC:153 SL:84 +F9EC F0 1A BEQ $FA08 A:80 X:55 Y:29 P:E5 SP:F9 CYC:159 SL:84 +F9EE 10 18 BPL $FA08 A:80 X:55 Y:29 P:E5 SP:F9 CYC:165 SL:84 +F9F0 50 16 BVC $FA08 A:80 X:55 Y:29 P:E5 SP:F9 CYC:171 SL:84 +F9F2 C9 80 CMP #$80 A:80 X:55 Y:29 P:E5 SP:F9 CYC:177 SL:84 +F9F4 D0 12 BNE $FA08 A:80 X:55 Y:29 P:67 SP:F9 CYC:183 SL:84 +F9F6 B8 CLV A:80 X:55 Y:29 P:67 SP:F9 CYC:189 SL:84 +F9F7 18 CLC A:80 X:55 Y:29 P:27 SP:F9 CYC:195 SL:84 +F9F8 A9 55 LDA #$55 A:80 X:55 Y:29 P:26 SP:F9 CYC:201 SL:84 +F9FA 60 RTS A:55 X:55 Y:29 P:24 SP:F9 CYC:207 SL:84 +DE0C C8 INY A:55 X:55 Y:29 P:24 SP:FB CYC:225 SL:84 +DE0D 95 00 STA $00,X @ 55 = 80 A:55 X:55 Y:2A P:24 SP:FB CYC:231 SL:84 +DE0F 76 00 ROR $00,X @ 55 = 55 A:55 X:55 Y:2A P:24 SP:FB CYC:243 SL:84 +DE11 B5 00 LDA $00,X @ 55 = 2A A:55 X:55 Y:2A P:25 SP:FB CYC:261 SL:84 +DE13 20 FB F9 JSR $F9FB A:2A X:55 Y:2A P:25 SP:FB CYC:273 SL:84 +F9FB 90 0B BCC $FA08 A:2A X:55 Y:2A P:25 SP:F9 CYC:291 SL:84 +F9FD F0 09 BEQ $FA08 A:2A X:55 Y:2A P:25 SP:F9 CYC:297 SL:84 +F9FF 30 07 BMI $FA08 A:2A X:55 Y:2A P:25 SP:F9 CYC:303 SL:84 +FA01 70 05 BVS $FA08 A:2A X:55 Y:2A P:25 SP:F9 CYC:309 SL:84 +FA03 C9 2A CMP #$2A A:2A X:55 Y:2A P:25 SP:F9 CYC:315 SL:84 +FA05 D0 01 BNE $FA08 A:2A X:55 Y:2A P:27 SP:F9 CYC:321 SL:84 +FA07 60 RTS A:2A X:55 Y:2A P:27 SP:F9 CYC:327 SL:84 +DE16 C8 INY A:2A X:55 Y:2A P:27 SP:FB CYC: 4 SL:85 +DE17 20 0A FA JSR $FA0A A:2A X:55 Y:2B P:25 SP:FB CYC: 10 SL:85 +FA0A 24 01 BIT $01 = FF A:2A X:55 Y:2B P:25 SP:F9 CYC: 28 SL:85 +FA0C 38 SEC A:2A X:55 Y:2B P:E5 SP:F9 CYC: 37 SL:85 +FA0D A9 80 LDA #$80 A:2A X:55 Y:2B P:E5 SP:F9 CYC: 43 SL:85 +FA0F 60 RTS A:80 X:55 Y:2B P:E5 SP:F9 CYC: 49 SL:85 +DE1A 95 00 STA $00,X @ 55 = 2A A:80 X:55 Y:2B P:E5 SP:FB CYC: 67 SL:85 +DE1C 36 00 ROL $00,X @ 55 = 80 A:80 X:55 Y:2B P:E5 SP:FB CYC: 79 SL:85 +DE1E B5 00 LDA $00,X @ 55 = 01 A:80 X:55 Y:2B P:65 SP:FB CYC: 97 SL:85 +DE20 20 10 FA JSR $FA10 A:01 X:55 Y:2B P:65 SP:FB CYC:109 SL:85 +FA10 90 1C BCC $FA2E A:01 X:55 Y:2B P:65 SP:F9 CYC:127 SL:85 +FA12 F0 1A BEQ $FA2E A:01 X:55 Y:2B P:65 SP:F9 CYC:133 SL:85 +FA14 30 18 BMI $FA2E A:01 X:55 Y:2B P:65 SP:F9 CYC:139 SL:85 +FA16 50 16 BVC $FA2E A:01 X:55 Y:2B P:65 SP:F9 CYC:145 SL:85 +FA18 C9 01 CMP #$01 A:01 X:55 Y:2B P:65 SP:F9 CYC:151 SL:85 +FA1A D0 12 BNE $FA2E A:01 X:55 Y:2B P:67 SP:F9 CYC:157 SL:85 +FA1C B8 CLV A:01 X:55 Y:2B P:67 SP:F9 CYC:163 SL:85 +FA1D 18 CLC A:01 X:55 Y:2B P:27 SP:F9 CYC:169 SL:85 +FA1E A9 55 LDA #$55 A:01 X:55 Y:2B P:26 SP:F9 CYC:175 SL:85 +FA20 60 RTS A:55 X:55 Y:2B P:24 SP:F9 CYC:181 SL:85 +DE23 C8 INY A:55 X:55 Y:2B P:24 SP:FB CYC:199 SL:85 +DE24 95 00 STA $00,X @ 55 = 01 A:55 X:55 Y:2C P:24 SP:FB CYC:205 SL:85 +DE26 36 00 ROL $00,X @ 55 = 55 A:55 X:55 Y:2C P:24 SP:FB CYC:217 SL:85 +DE28 B5 00 LDA $00,X @ 55 = AA A:55 X:55 Y:2C P:A4 SP:FB CYC:235 SL:85 +DE2A 20 21 FA JSR $FA21 A:AA X:55 Y:2C P:A4 SP:FB CYC:247 SL:85 +FA21 B0 0B BCS $FA2E A:AA X:55 Y:2C P:A4 SP:F9 CYC:265 SL:85 +FA23 F0 09 BEQ $FA2E A:AA X:55 Y:2C P:A4 SP:F9 CYC:271 SL:85 +FA25 10 07 BPL $FA2E A:AA X:55 Y:2C P:A4 SP:F9 CYC:277 SL:85 +FA27 70 05 BVS $FA2E A:AA X:55 Y:2C P:A4 SP:F9 CYC:283 SL:85 +FA29 C9 AA CMP #$AA A:AA X:55 Y:2C P:A4 SP:F9 CYC:289 SL:85 +FA2B D0 01 BNE $FA2E A:AA X:55 Y:2C P:27 SP:F9 CYC:295 SL:85 +FA2D 60 RTS A:AA X:55 Y:2C P:27 SP:F9 CYC:301 SL:85 +DE2D A9 FF LDA #$FF A:AA X:55 Y:2C P:27 SP:FB CYC:319 SL:85 +DE2F 95 00 STA $00,X @ 55 = AA A:FF X:55 Y:2C P:A5 SP:FB CYC:325 SL:85 +DE31 85 01 STA $01 = FF A:FF X:55 Y:2C P:A5 SP:FB CYC:337 SL:85 +DE33 24 01 BIT $01 = FF A:FF X:55 Y:2C P:A5 SP:FB CYC: 5 SL:86 +DE35 38 SEC A:FF X:55 Y:2C P:E5 SP:FB CYC: 14 SL:86 +DE36 F6 00 INC $00,X @ 55 = FF A:FF X:55 Y:2C P:E5 SP:FB CYC: 20 SL:86 +DE38 D0 0C BNE $DE46 A:FF X:55 Y:2C P:67 SP:FB CYC: 38 SL:86 +DE3A 30 0A BMI $DE46 A:FF X:55 Y:2C P:67 SP:FB CYC: 44 SL:86 +DE3C 50 08 BVC $DE46 A:FF X:55 Y:2C P:67 SP:FB CYC: 50 SL:86 +DE3E 90 06 BCC $DE46 A:FF X:55 Y:2C P:67 SP:FB CYC: 56 SL:86 +DE40 B5 00 LDA $00,X @ 55 = 00 A:FF X:55 Y:2C P:67 SP:FB CYC: 62 SL:86 +DE42 C9 00 CMP #$00 A:00 X:55 Y:2C P:67 SP:FB CYC: 74 SL:86 +DE44 F0 04 BEQ $DE4A A:00 X:55 Y:2C P:67 SP:FB CYC: 80 SL:86 +DE4A A9 7F LDA #$7F A:00 X:55 Y:2C P:67 SP:FB CYC: 89 SL:86 +DE4C 95 00 STA $00,X @ 55 = 00 A:7F X:55 Y:2C P:65 SP:FB CYC: 95 SL:86 +DE4E B8 CLV A:7F X:55 Y:2C P:65 SP:FB CYC:107 SL:86 +DE4F 18 CLC A:7F X:55 Y:2C P:25 SP:FB CYC:113 SL:86 +DE50 F6 00 INC $00,X @ 55 = 7F A:7F X:55 Y:2C P:24 SP:FB CYC:119 SL:86 +DE52 F0 0C BEQ $DE60 A:7F X:55 Y:2C P:A4 SP:FB CYC:137 SL:86 +DE54 10 0A BPL $DE60 A:7F X:55 Y:2C P:A4 SP:FB CYC:143 SL:86 +DE56 70 08 BVS $DE60 A:7F X:55 Y:2C P:A4 SP:FB CYC:149 SL:86 +DE58 B0 06 BCS $DE60 A:7F X:55 Y:2C P:A4 SP:FB CYC:155 SL:86 +DE5A B5 00 LDA $00,X @ 55 = 80 A:7F X:55 Y:2C P:A4 SP:FB CYC:161 SL:86 +DE5C C9 80 CMP #$80 A:80 X:55 Y:2C P:A4 SP:FB CYC:173 SL:86 +DE5E F0 04 BEQ $DE64 A:80 X:55 Y:2C P:27 SP:FB CYC:179 SL:86 +DE64 A9 00 LDA #$00 A:80 X:55 Y:2C P:27 SP:FB CYC:188 SL:86 +DE66 95 00 STA $00,X @ 55 = 80 A:00 X:55 Y:2C P:27 SP:FB CYC:194 SL:86 +DE68 24 01 BIT $01 = FF A:00 X:55 Y:2C P:27 SP:FB CYC:206 SL:86 +DE6A 38 SEC A:00 X:55 Y:2C P:E7 SP:FB CYC:215 SL:86 +DE6B D6 00 DEC $00,X @ 55 = 00 A:00 X:55 Y:2C P:E7 SP:FB CYC:221 SL:86 +DE6D F0 0C BEQ $DE7B A:00 X:55 Y:2C P:E5 SP:FB CYC:239 SL:86 +DE6F 10 0A BPL $DE7B A:00 X:55 Y:2C P:E5 SP:FB CYC:245 SL:86 +DE71 50 08 BVC $DE7B A:00 X:55 Y:2C P:E5 SP:FB CYC:251 SL:86 +DE73 90 06 BCC $DE7B A:00 X:55 Y:2C P:E5 SP:FB CYC:257 SL:86 +DE75 B5 00 LDA $00,X @ 55 = FF A:00 X:55 Y:2C P:E5 SP:FB CYC:263 SL:86 +DE77 C9 FF CMP #$FF A:FF X:55 Y:2C P:E5 SP:FB CYC:275 SL:86 +DE79 F0 04 BEQ $DE7F A:FF X:55 Y:2C P:67 SP:FB CYC:281 SL:86 +DE7F A9 80 LDA #$80 A:FF X:55 Y:2C P:67 SP:FB CYC:290 SL:86 +DE81 95 00 STA $00,X @ 55 = FF A:80 X:55 Y:2C P:E5 SP:FB CYC:296 SL:86 +DE83 B8 CLV A:80 X:55 Y:2C P:E5 SP:FB CYC:308 SL:86 +DE84 18 CLC A:80 X:55 Y:2C P:A5 SP:FB CYC:314 SL:86 +DE85 D6 00 DEC $00,X @ 55 = 80 A:80 X:55 Y:2C P:A4 SP:FB CYC:320 SL:86 +DE87 F0 0C BEQ $DE95 A:80 X:55 Y:2C P:24 SP:FB CYC:338 SL:86 +DE89 30 0A BMI $DE95 A:80 X:55 Y:2C P:24 SP:FB CYC: 3 SL:87 +DE8B 70 08 BVS $DE95 A:80 X:55 Y:2C P:24 SP:FB CYC: 9 SL:87 +DE8D B0 06 BCS $DE95 A:80 X:55 Y:2C P:24 SP:FB CYC: 15 SL:87 +DE8F B5 00 LDA $00,X @ 55 = 7F A:80 X:55 Y:2C P:24 SP:FB CYC: 21 SL:87 +DE91 C9 7F CMP #$7F A:7F X:55 Y:2C P:24 SP:FB CYC: 33 SL:87 +DE93 F0 04 BEQ $DE99 A:7F X:55 Y:2C P:27 SP:FB CYC: 39 SL:87 +DE99 A9 01 LDA #$01 A:7F X:55 Y:2C P:27 SP:FB CYC: 48 SL:87 +DE9B 95 00 STA $00,X @ 55 = 7F A:01 X:55 Y:2C P:25 SP:FB CYC: 54 SL:87 +DE9D D6 00 DEC $00,X @ 55 = 01 A:01 X:55 Y:2C P:25 SP:FB CYC: 66 SL:87 +DE9F F0 04 BEQ $DEA5 A:01 X:55 Y:2C P:27 SP:FB CYC: 84 SL:87 +DEA5 A9 33 LDA #$33 A:01 X:55 Y:2C P:27 SP:FB CYC: 93 SL:87 +DEA7 85 78 STA $78 = 7F A:33 X:55 Y:2C P:25 SP:FB CYC: 99 SL:87 +DEA9 A9 44 LDA #$44 A:33 X:55 Y:2C P:25 SP:FB CYC:108 SL:87 +DEAB A0 78 LDY #$78 A:44 X:55 Y:2C P:25 SP:FB CYC:114 SL:87 +DEAD A2 00 LDX #$00 A:44 X:55 Y:78 P:25 SP:FB CYC:120 SL:87 +DEAF 38 SEC A:44 X:00 Y:78 P:27 SP:FB CYC:126 SL:87 +DEB0 24 01 BIT $01 = FF A:44 X:00 Y:78 P:27 SP:FB CYC:132 SL:87 +DEB2 B6 00 LDX $00,Y @ 78 = 33 A:44 X:00 Y:78 P:E5 SP:FB CYC:141 SL:87 +DEB4 90 12 BCC $DEC8 A:44 X:33 Y:78 P:65 SP:FB CYC:153 SL:87 +DEB6 50 10 BVC $DEC8 A:44 X:33 Y:78 P:65 SP:FB CYC:159 SL:87 +DEB8 30 0E BMI $DEC8 A:44 X:33 Y:78 P:65 SP:FB CYC:165 SL:87 +DEBA F0 0C BEQ $DEC8 A:44 X:33 Y:78 P:65 SP:FB CYC:171 SL:87 +DEBC E0 33 CPX #$33 A:44 X:33 Y:78 P:65 SP:FB CYC:177 SL:87 +DEBE D0 08 BNE $DEC8 A:44 X:33 Y:78 P:67 SP:FB CYC:183 SL:87 +DEC0 C0 78 CPY #$78 A:44 X:33 Y:78 P:67 SP:FB CYC:189 SL:87 +DEC2 D0 04 BNE $DEC8 A:44 X:33 Y:78 P:67 SP:FB CYC:195 SL:87 +DEC4 C9 44 CMP #$44 A:44 X:33 Y:78 P:67 SP:FB CYC:201 SL:87 +DEC6 F0 04 BEQ $DECC A:44 X:33 Y:78 P:67 SP:FB CYC:207 SL:87 +DECC A9 97 LDA #$97 A:44 X:33 Y:78 P:67 SP:FB CYC:216 SL:87 +DECE 85 7F STA $7F = 00 A:97 X:33 Y:78 P:E5 SP:FB CYC:222 SL:87 +DED0 A9 47 LDA #$47 A:97 X:33 Y:78 P:E5 SP:FB CYC:231 SL:87 +DED2 A0 FF LDY #$FF A:47 X:33 Y:78 P:65 SP:FB CYC:237 SL:87 +DED4 A2 00 LDX #$00 A:47 X:33 Y:FF P:E5 SP:FB CYC:243 SL:87 +DED6 18 CLC A:47 X:00 Y:FF P:67 SP:FB CYC:249 SL:87 +DED7 B8 CLV A:47 X:00 Y:FF P:66 SP:FB CYC:255 SL:87 +DED8 B6 80 LDX $80,Y @ 7F = 97 A:47 X:00 Y:FF P:26 SP:FB CYC:261 SL:87 +DEDA B0 12 BCS $DEEE A:47 X:97 Y:FF P:A4 SP:FB CYC:273 SL:87 +DEDC 70 10 BVS $DEEE A:47 X:97 Y:FF P:A4 SP:FB CYC:279 SL:87 +DEDE 10 0E BPL $DEEE A:47 X:97 Y:FF P:A4 SP:FB CYC:285 SL:87 +DEE0 F0 0C BEQ $DEEE A:47 X:97 Y:FF P:A4 SP:FB CYC:291 SL:87 +DEE2 E0 97 CPX #$97 A:47 X:97 Y:FF P:A4 SP:FB CYC:297 SL:87 +DEE4 D0 08 BNE $DEEE A:47 X:97 Y:FF P:27 SP:FB CYC:303 SL:87 +DEE6 C0 FF CPY #$FF A:47 X:97 Y:FF P:27 SP:FB CYC:309 SL:87 +DEE8 D0 04 BNE $DEEE A:47 X:97 Y:FF P:27 SP:FB CYC:315 SL:87 +DEEA C9 47 CMP #$47 A:47 X:97 Y:FF P:27 SP:FB CYC:321 SL:87 +DEEC F0 04 BEQ $DEF2 A:47 X:97 Y:FF P:27 SP:FB CYC:327 SL:87 +DEF2 A9 00 LDA #$00 A:47 X:97 Y:FF P:27 SP:FB CYC:336 SL:87 +DEF4 85 7F STA $7F = 97 A:00 X:97 Y:FF P:27 SP:FB CYC: 1 SL:88 +DEF6 A9 47 LDA #$47 A:00 X:97 Y:FF P:27 SP:FB CYC: 10 SL:88 +DEF8 A0 FF LDY #$FF A:47 X:97 Y:FF P:25 SP:FB CYC: 16 SL:88 +DEFA A2 69 LDX #$69 A:47 X:97 Y:FF P:A5 SP:FB CYC: 22 SL:88 +DEFC 18 CLC A:47 X:69 Y:FF P:25 SP:FB CYC: 28 SL:88 +DEFD B8 CLV A:47 X:69 Y:FF P:24 SP:FB CYC: 34 SL:88 +DEFE 96 80 STX $80,Y @ 7F = 00 A:47 X:69 Y:FF P:24 SP:FB CYC: 40 SL:88 +DF00 B0 18 BCS $DF1A A:47 X:69 Y:FF P:24 SP:FB CYC: 52 SL:88 +DF02 70 16 BVS $DF1A A:47 X:69 Y:FF P:24 SP:FB CYC: 58 SL:88 +DF04 30 14 BMI $DF1A A:47 X:69 Y:FF P:24 SP:FB CYC: 64 SL:88 +DF06 F0 12 BEQ $DF1A A:47 X:69 Y:FF P:24 SP:FB CYC: 70 SL:88 +DF08 E0 69 CPX #$69 A:47 X:69 Y:FF P:24 SP:FB CYC: 76 SL:88 +DF0A D0 0E BNE $DF1A A:47 X:69 Y:FF P:27 SP:FB CYC: 82 SL:88 +DF0C C0 FF CPY #$FF A:47 X:69 Y:FF P:27 SP:FB CYC: 88 SL:88 +DF0E D0 0A BNE $DF1A A:47 X:69 Y:FF P:27 SP:FB CYC: 94 SL:88 +DF10 C9 47 CMP #$47 A:47 X:69 Y:FF P:27 SP:FB CYC:100 SL:88 +DF12 D0 06 BNE $DF1A A:47 X:69 Y:FF P:27 SP:FB CYC:106 SL:88 +DF14 A5 7F LDA $7F = 69 A:47 X:69 Y:FF P:27 SP:FB CYC:112 SL:88 +DF16 C9 69 CMP #$69 A:69 X:69 Y:FF P:25 SP:FB CYC:121 SL:88 +DF18 F0 04 BEQ $DF1E A:69 X:69 Y:FF P:27 SP:FB CYC:127 SL:88 +DF1E A9 F5 LDA #$F5 A:69 X:69 Y:FF P:27 SP:FB CYC:136 SL:88 +DF20 85 4F STA $4F = 00 A:F5 X:69 Y:FF P:A5 SP:FB CYC:142 SL:88 +DF22 A9 47 LDA #$47 A:F5 X:69 Y:FF P:A5 SP:FB CYC:151 SL:88 +DF24 A0 4F LDY #$4F A:47 X:69 Y:FF P:25 SP:FB CYC:157 SL:88 +DF26 24 01 BIT $01 = FF A:47 X:69 Y:4F P:25 SP:FB CYC:163 SL:88 +DF28 A2 00 LDX #$00 A:47 X:69 Y:4F P:E5 SP:FB CYC:172 SL:88 +DF2A 38 SEC A:47 X:00 Y:4F P:67 SP:FB CYC:178 SL:88 +DF2B 96 00 STX $00,Y @ 4F = F5 A:47 X:00 Y:4F P:67 SP:FB CYC:184 SL:88 +DF2D 90 16 BCC $DF45 A:47 X:00 Y:4F P:67 SP:FB CYC:196 SL:88 +DF2F 50 14 BVC $DF45 A:47 X:00 Y:4F P:67 SP:FB CYC:202 SL:88 +DF31 30 12 BMI $DF45 A:47 X:00 Y:4F P:67 SP:FB CYC:208 SL:88 +DF33 D0 10 BNE $DF45 A:47 X:00 Y:4F P:67 SP:FB CYC:214 SL:88 +DF35 E0 00 CPX #$00 A:47 X:00 Y:4F P:67 SP:FB CYC:220 SL:88 +DF37 D0 0C BNE $DF45 A:47 X:00 Y:4F P:67 SP:FB CYC:226 SL:88 +DF39 C0 4F CPY #$4F A:47 X:00 Y:4F P:67 SP:FB CYC:232 SL:88 +DF3B D0 08 BNE $DF45 A:47 X:00 Y:4F P:67 SP:FB CYC:238 SL:88 +DF3D C9 47 CMP #$47 A:47 X:00 Y:4F P:67 SP:FB CYC:244 SL:88 +DF3F D0 04 BNE $DF45 A:47 X:00 Y:4F P:67 SP:FB CYC:250 SL:88 +DF41 A5 4F LDA $4F = 00 A:47 X:00 Y:4F P:67 SP:FB CYC:256 SL:88 +DF43 F0 04 BEQ $DF49 A:00 X:00 Y:4F P:67 SP:FB CYC:265 SL:88 +DF49 60 RTS A:00 X:00 Y:4F P:67 SP:FB CYC:274 SL:88 +C62C 20 AA E1 JSR $E1AA A:00 X:00 Y:4F P:67 SP:FD CYC:292 SL:88 +E1AA A9 FF LDA #$FF A:00 X:00 Y:4F P:67 SP:FB CYC:310 SL:88 +E1AC 85 01 STA $01 = FF A:FF X:00 Y:4F P:E5 SP:FB CYC:316 SL:88 +E1AE A9 AA LDA #$AA A:FF X:00 Y:4F P:E5 SP:FB CYC:325 SL:88 +E1B0 8D 33 06 STA $0633 = 00 A:AA X:00 Y:4F P:E5 SP:FB CYC:331 SL:88 +E1B3 A9 BB LDA #$BB A:AA X:00 Y:4F P:E5 SP:FB CYC: 2 SL:89 +E1B5 8D 89 06 STA $0689 = 00 A:BB X:00 Y:4F P:E5 SP:FB CYC: 8 SL:89 +E1B8 A2 00 LDX #$00 A:BB X:00 Y:4F P:E5 SP:FB CYC: 20 SL:89 +E1BA A9 66 LDA #$66 A:BB X:00 Y:4F P:67 SP:FB CYC: 26 SL:89 +E1BC 24 01 BIT $01 = FF A:66 X:00 Y:4F P:65 SP:FB CYC: 32 SL:89 +E1BE 38 SEC A:66 X:00 Y:4F P:E5 SP:FB CYC: 41 SL:89 +E1BF A0 00 LDY #$00 A:66 X:00 Y:4F P:E5 SP:FB CYC: 47 SL:89 +E1C1 BC 33 06 LDY $0633,X @ 0633 = AA A:66 X:00 Y:00 P:67 SP:FB CYC: 53 SL:89 +E1C4 10 12 BPL $E1D8 A:66 X:00 Y:AA P:E5 SP:FB CYC: 65 SL:89 +E1C6 F0 10 BEQ $E1D8 A:66 X:00 Y:AA P:E5 SP:FB CYC: 71 SL:89 +E1C8 50 0E BVC $E1D8 A:66 X:00 Y:AA P:E5 SP:FB CYC: 77 SL:89 +E1CA 90 0C BCC $E1D8 A:66 X:00 Y:AA P:E5 SP:FB CYC: 83 SL:89 +E1CC C9 66 CMP #$66 A:66 X:00 Y:AA P:E5 SP:FB CYC: 89 SL:89 +E1CE D0 08 BNE $E1D8 A:66 X:00 Y:AA P:67 SP:FB CYC: 95 SL:89 +E1D0 E0 00 CPX #$00 A:66 X:00 Y:AA P:67 SP:FB CYC:101 SL:89 +E1D2 D0 04 BNE $E1D8 A:66 X:00 Y:AA P:67 SP:FB CYC:107 SL:89 +E1D4 C0 AA CPY #$AA A:66 X:00 Y:AA P:67 SP:FB CYC:113 SL:89 +E1D6 F0 04 BEQ $E1DC A:66 X:00 Y:AA P:67 SP:FB CYC:119 SL:89 +E1DC A2 8A LDX #$8A A:66 X:00 Y:AA P:67 SP:FB CYC:128 SL:89 +E1DE A9 66 LDA #$66 A:66 X:8A Y:AA P:E5 SP:FB CYC:134 SL:89 +E1E0 B8 CLV A:66 X:8A Y:AA P:65 SP:FB CYC:140 SL:89 +E1E1 18 CLC A:66 X:8A Y:AA P:25 SP:FB CYC:146 SL:89 +E1E2 A0 00 LDY #$00 A:66 X:8A Y:AA P:24 SP:FB CYC:152 SL:89 +E1E4 BC FF 05 LDY $05FF,X @ 0689 = BB A:66 X:8A Y:00 P:26 SP:FB CYC:158 SL:89 +E1E7 10 12 BPL $E1FB A:66 X:8A Y:BB P:A4 SP:FB CYC:173 SL:89 +E1E9 F0 10 BEQ $E1FB A:66 X:8A Y:BB P:A4 SP:FB CYC:179 SL:89 +E1EB 70 0E BVS $E1FB A:66 X:8A Y:BB P:A4 SP:FB CYC:185 SL:89 +E1ED B0 0C BCS $E1FB A:66 X:8A Y:BB P:A4 SP:FB CYC:191 SL:89 +E1EF C0 BB CPY #$BB A:66 X:8A Y:BB P:A4 SP:FB CYC:197 SL:89 +E1F1 D0 08 BNE $E1FB A:66 X:8A Y:BB P:27 SP:FB CYC:203 SL:89 +E1F3 C9 66 CMP #$66 A:66 X:8A Y:BB P:27 SP:FB CYC:209 SL:89 +E1F5 D0 04 BNE $E1FB A:66 X:8A Y:BB P:27 SP:FB CYC:215 SL:89 +E1F7 E0 8A CPX #$8A A:66 X:8A Y:BB P:27 SP:FB CYC:221 SL:89 +E1F9 F0 04 BEQ $E1FF A:66 X:8A Y:BB P:27 SP:FB CYC:227 SL:89 +E1FF A0 53 LDY #$53 A:66 X:8A Y:BB P:27 SP:FB CYC:236 SL:89 +E201 A9 AA LDA #$AA A:66 X:8A Y:53 P:25 SP:FB CYC:242 SL:89 +E203 A2 78 LDX #$78 A:AA X:8A Y:53 P:A5 SP:FB CYC:248 SL:89 +E205 8D 78 06 STA $0678 = 00 A:AA X:78 Y:53 P:25 SP:FB CYC:254 SL:89 +E208 20 B6 F7 JSR $F7B6 A:AA X:78 Y:53 P:25 SP:FB CYC:266 SL:89 +F7B6 18 CLC A:AA X:78 Y:53 P:25 SP:F9 CYC:284 SL:89 +F7B7 A9 FF LDA #$FF A:AA X:78 Y:53 P:24 SP:F9 CYC:290 SL:89 +F7B9 85 01 STA $01 = FF A:FF X:78 Y:53 P:A4 SP:F9 CYC:296 SL:89 +F7BB 24 01 BIT $01 = FF A:FF X:78 Y:53 P:A4 SP:F9 CYC:305 SL:89 +F7BD A9 55 LDA #$55 A:FF X:78 Y:53 P:E4 SP:F9 CYC:314 SL:89 +F7BF 60 RTS A:55 X:78 Y:53 P:64 SP:F9 CYC:320 SL:89 +E20B 1D 00 06 ORA $0600,X @ 0678 = AA A:55 X:78 Y:53 P:64 SP:FB CYC:338 SL:89 +E20E 20 C0 F7 JSR $F7C0 A:FF X:78 Y:53 P:E4 SP:FB CYC: 9 SL:90 +F7C0 B0 09 BCS $F7CB A:FF X:78 Y:53 P:E4 SP:F9 CYC: 27 SL:90 +F7C2 10 07 BPL $F7CB A:FF X:78 Y:53 P:E4 SP:F9 CYC: 33 SL:90 +F7C4 C9 FF CMP #$FF A:FF X:78 Y:53 P:E4 SP:F9 CYC: 39 SL:90 +F7C6 D0 03 BNE $F7CB A:FF X:78 Y:53 P:67 SP:F9 CYC: 45 SL:90 +F7C8 50 01 BVC $F7CB A:FF X:78 Y:53 P:67 SP:F9 CYC: 51 SL:90 +F7CA 60 RTS A:FF X:78 Y:53 P:67 SP:F9 CYC: 57 SL:90 +E211 C8 INY A:FF X:78 Y:53 P:67 SP:FB CYC: 75 SL:90 +E212 A9 00 LDA #$00 A:FF X:78 Y:54 P:65 SP:FB CYC: 81 SL:90 +E214 8D 78 06 STA $0678 = AA A:00 X:78 Y:54 P:67 SP:FB CYC: 87 SL:90 +E217 20 CE F7 JSR $F7CE A:00 X:78 Y:54 P:67 SP:FB CYC: 99 SL:90 +F7CE 38 SEC A:00 X:78 Y:54 P:67 SP:F9 CYC:117 SL:90 +F7CF B8 CLV A:00 X:78 Y:54 P:67 SP:F9 CYC:123 SL:90 +F7D0 A9 00 LDA #$00 A:00 X:78 Y:54 P:27 SP:F9 CYC:129 SL:90 +F7D2 60 RTS A:00 X:78 Y:54 P:27 SP:F9 CYC:135 SL:90 +E21A 1D 00 06 ORA $0600,X @ 0678 = 00 A:00 X:78 Y:54 P:27 SP:FB CYC:153 SL:90 +E21D 20 D3 F7 JSR $F7D3 A:00 X:78 Y:54 P:27 SP:FB CYC:165 SL:90 +F7D3 D0 07 BNE $F7DC A:00 X:78 Y:54 P:27 SP:F9 CYC:183 SL:90 +F7D5 70 05 BVS $F7DC A:00 X:78 Y:54 P:27 SP:F9 CYC:189 SL:90 +F7D7 90 03 BCC $F7DC A:00 X:78 Y:54 P:27 SP:F9 CYC:195 SL:90 +F7D9 30 01 BMI $F7DC A:00 X:78 Y:54 P:27 SP:F9 CYC:201 SL:90 +F7DB 60 RTS A:00 X:78 Y:54 P:27 SP:F9 CYC:207 SL:90 +E220 C8 INY A:00 X:78 Y:54 P:27 SP:FB CYC:225 SL:90 +E221 A9 AA LDA #$AA A:00 X:78 Y:55 P:25 SP:FB CYC:231 SL:90 +E223 8D 78 06 STA $0678 = 00 A:AA X:78 Y:55 P:A5 SP:FB CYC:237 SL:90 +E226 20 DF F7 JSR $F7DF A:AA X:78 Y:55 P:A5 SP:FB CYC:249 SL:90 +F7DF 18 CLC A:AA X:78 Y:55 P:A5 SP:F9 CYC:267 SL:90 +F7E0 24 01 BIT $01 = FF A:AA X:78 Y:55 P:A4 SP:F9 CYC:273 SL:90 +F7E2 A9 55 LDA #$55 A:AA X:78 Y:55 P:E4 SP:F9 CYC:282 SL:90 +F7E4 60 RTS A:55 X:78 Y:55 P:64 SP:F9 CYC:288 SL:90 +E229 3D 00 06 AND $0600,X @ 0678 = AA A:55 X:78 Y:55 P:64 SP:FB CYC:306 SL:90 +E22C 20 E5 F7 JSR $F7E5 A:00 X:78 Y:55 P:66 SP:FB CYC:318 SL:90 +F7E5 D0 07 BNE $F7EE A:00 X:78 Y:55 P:66 SP:F9 CYC:336 SL:90 +F7E7 50 05 BVC $F7EE A:00 X:78 Y:55 P:66 SP:F9 CYC: 1 SL:91 +F7E9 B0 03 BCS $F7EE A:00 X:78 Y:55 P:66 SP:F9 CYC: 7 SL:91 +F7EB 30 01 BMI $F7EE A:00 X:78 Y:55 P:66 SP:F9 CYC: 13 SL:91 +F7ED 60 RTS A:00 X:78 Y:55 P:66 SP:F9 CYC: 19 SL:91 +E22F C8 INY A:00 X:78 Y:55 P:66 SP:FB CYC: 37 SL:91 +E230 A9 EF LDA #$EF A:00 X:78 Y:56 P:64 SP:FB CYC: 43 SL:91 +E232 8D 78 06 STA $0678 = AA A:EF X:78 Y:56 P:E4 SP:FB CYC: 49 SL:91 +E235 20 F1 F7 JSR $F7F1 A:EF X:78 Y:56 P:E4 SP:FB CYC: 61 SL:91 +F7F1 38 SEC A:EF X:78 Y:56 P:E4 SP:F9 CYC: 79 SL:91 +F7F2 B8 CLV A:EF X:78 Y:56 P:E5 SP:F9 CYC: 85 SL:91 +F7F3 A9 F8 LDA #$F8 A:EF X:78 Y:56 P:A5 SP:F9 CYC: 91 SL:91 +F7F5 60 RTS A:F8 X:78 Y:56 P:A5 SP:F9 CYC: 97 SL:91 +E238 3D 00 06 AND $0600,X @ 0678 = EF A:F8 X:78 Y:56 P:A5 SP:FB CYC:115 SL:91 +E23B 20 F6 F7 JSR $F7F6 A:E8 X:78 Y:56 P:A5 SP:FB CYC:127 SL:91 +F7F6 90 09 BCC $F801 A:E8 X:78 Y:56 P:A5 SP:F9 CYC:145 SL:91 +F7F8 10 07 BPL $F801 A:E8 X:78 Y:56 P:A5 SP:F9 CYC:151 SL:91 +F7FA C9 E8 CMP #$E8 A:E8 X:78 Y:56 P:A5 SP:F9 CYC:157 SL:91 +F7FC D0 03 BNE $F801 A:E8 X:78 Y:56 P:27 SP:F9 CYC:163 SL:91 +F7FE 70 01 BVS $F801 A:E8 X:78 Y:56 P:27 SP:F9 CYC:169 SL:91 +F800 60 RTS A:E8 X:78 Y:56 P:27 SP:F9 CYC:175 SL:91 +E23E C8 INY A:E8 X:78 Y:56 P:27 SP:FB CYC:193 SL:91 +E23F A9 AA LDA #$AA A:E8 X:78 Y:57 P:25 SP:FB CYC:199 SL:91 +E241 8D 78 06 STA $0678 = EF A:AA X:78 Y:57 P:A5 SP:FB CYC:205 SL:91 +E244 20 04 F8 JSR $F804 A:AA X:78 Y:57 P:A5 SP:FB CYC:217 SL:91 +F804 18 CLC A:AA X:78 Y:57 P:A5 SP:F9 CYC:235 SL:91 +F805 24 01 BIT $01 = FF A:AA X:78 Y:57 P:A4 SP:F9 CYC:241 SL:91 +F807 A9 5F LDA #$5F A:AA X:78 Y:57 P:E4 SP:F9 CYC:250 SL:91 +F809 60 RTS A:5F X:78 Y:57 P:64 SP:F9 CYC:256 SL:91 +E247 5D 00 06 EOR $0600,X @ 0678 = AA A:5F X:78 Y:57 P:64 SP:FB CYC:274 SL:91 +E24A 20 0A F8 JSR $F80A A:F5 X:78 Y:57 P:E4 SP:FB CYC:286 SL:91 +F80A B0 09 BCS $F815 A:F5 X:78 Y:57 P:E4 SP:F9 CYC:304 SL:91 +F80C 10 07 BPL $F815 A:F5 X:78 Y:57 P:E4 SP:F9 CYC:310 SL:91 +F80E C9 F5 CMP #$F5 A:F5 X:78 Y:57 P:E4 SP:F9 CYC:316 SL:91 +F810 D0 03 BNE $F815 A:F5 X:78 Y:57 P:67 SP:F9 CYC:322 SL:91 +F812 50 01 BVC $F815 A:F5 X:78 Y:57 P:67 SP:F9 CYC:328 SL:91 +F814 60 RTS A:F5 X:78 Y:57 P:67 SP:F9 CYC:334 SL:91 +E24D C8 INY A:F5 X:78 Y:57 P:67 SP:FB CYC: 11 SL:92 +E24E A9 70 LDA #$70 A:F5 X:78 Y:58 P:65 SP:FB CYC: 17 SL:92 +E250 8D 78 06 STA $0678 = AA A:70 X:78 Y:58 P:65 SP:FB CYC: 23 SL:92 +E253 20 18 F8 JSR $F818 A:70 X:78 Y:58 P:65 SP:FB CYC: 35 SL:92 +F818 38 SEC A:70 X:78 Y:58 P:65 SP:F9 CYC: 53 SL:92 +F819 B8 CLV A:70 X:78 Y:58 P:65 SP:F9 CYC: 59 SL:92 +F81A A9 70 LDA #$70 A:70 X:78 Y:58 P:25 SP:F9 CYC: 65 SL:92 +F81C 60 RTS A:70 X:78 Y:58 P:25 SP:F9 CYC: 71 SL:92 +E256 5D 00 06 EOR $0600,X @ 0678 = 70 A:70 X:78 Y:58 P:25 SP:FB CYC: 89 SL:92 +E259 20 1D F8 JSR $F81D A:00 X:78 Y:58 P:27 SP:FB CYC:101 SL:92 +F81D D0 07 BNE $F826 A:00 X:78 Y:58 P:27 SP:F9 CYC:119 SL:92 +F81F 70 05 BVS $F826 A:00 X:78 Y:58 P:27 SP:F9 CYC:125 SL:92 +F821 90 03 BCC $F826 A:00 X:78 Y:58 P:27 SP:F9 CYC:131 SL:92 +F823 30 01 BMI $F826 A:00 X:78 Y:58 P:27 SP:F9 CYC:137 SL:92 +F825 60 RTS A:00 X:78 Y:58 P:27 SP:F9 CYC:143 SL:92 +E25C C8 INY A:00 X:78 Y:58 P:27 SP:FB CYC:161 SL:92 +E25D A9 69 LDA #$69 A:00 X:78 Y:59 P:25 SP:FB CYC:167 SL:92 +E25F 8D 78 06 STA $0678 = 70 A:69 X:78 Y:59 P:25 SP:FB CYC:173 SL:92 +E262 20 29 F8 JSR $F829 A:69 X:78 Y:59 P:25 SP:FB CYC:185 SL:92 +F829 18 CLC A:69 X:78 Y:59 P:25 SP:F9 CYC:203 SL:92 +F82A 24 01 BIT $01 = FF A:69 X:78 Y:59 P:24 SP:F9 CYC:209 SL:92 +F82C A9 00 LDA #$00 A:69 X:78 Y:59 P:E4 SP:F9 CYC:218 SL:92 +F82E 60 RTS A:00 X:78 Y:59 P:66 SP:F9 CYC:224 SL:92 +E265 7D 00 06 ADC $0600,X @ 0678 = 69 A:00 X:78 Y:59 P:66 SP:FB CYC:242 SL:92 +E268 20 2F F8 JSR $F82F A:69 X:78 Y:59 P:24 SP:FB CYC:254 SL:92 +F82F 30 09 BMI $F83A A:69 X:78 Y:59 P:24 SP:F9 CYC:272 SL:92 +F831 B0 07 BCS $F83A A:69 X:78 Y:59 P:24 SP:F9 CYC:278 SL:92 +F833 C9 69 CMP #$69 A:69 X:78 Y:59 P:24 SP:F9 CYC:284 SL:92 +F835 D0 03 BNE $F83A A:69 X:78 Y:59 P:27 SP:F9 CYC:290 SL:92 +F837 70 01 BVS $F83A A:69 X:78 Y:59 P:27 SP:F9 CYC:296 SL:92 +F839 60 RTS A:69 X:78 Y:59 P:27 SP:F9 CYC:302 SL:92 +E26B C8 INY A:69 X:78 Y:59 P:27 SP:FB CYC:320 SL:92 +E26C 20 3D F8 JSR $F83D A:69 X:78 Y:5A P:25 SP:FB CYC:326 SL:92 +F83D 38 SEC A:69 X:78 Y:5A P:25 SP:F9 CYC: 3 SL:93 +F83E 24 01 BIT $01 = FF A:69 X:78 Y:5A P:25 SP:F9 CYC: 9 SL:93 +F840 A9 00 LDA #$00 A:69 X:78 Y:5A P:E5 SP:F9 CYC: 18 SL:93 +F842 60 RTS A:00 X:78 Y:5A P:67 SP:F9 CYC: 24 SL:93 +E26F 7D 00 06 ADC $0600,X @ 0678 = 69 A:00 X:78 Y:5A P:67 SP:FB CYC: 42 SL:93 +E272 20 43 F8 JSR $F843 A:6A X:78 Y:5A P:24 SP:FB CYC: 54 SL:93 +F843 30 09 BMI $F84E A:6A X:78 Y:5A P:24 SP:F9 CYC: 72 SL:93 +F845 B0 07 BCS $F84E A:6A X:78 Y:5A P:24 SP:F9 CYC: 78 SL:93 +F847 C9 6A CMP #$6A A:6A X:78 Y:5A P:24 SP:F9 CYC: 84 SL:93 +F849 D0 03 BNE $F84E A:6A X:78 Y:5A P:27 SP:F9 CYC: 90 SL:93 +F84B 70 01 BVS $F84E A:6A X:78 Y:5A P:27 SP:F9 CYC: 96 SL:93 +F84D 60 RTS A:6A X:78 Y:5A P:27 SP:F9 CYC:102 SL:93 +E275 C8 INY A:6A X:78 Y:5A P:27 SP:FB CYC:120 SL:93 +E276 A9 7F LDA #$7F A:6A X:78 Y:5B P:25 SP:FB CYC:126 SL:93 +E278 8D 78 06 STA $0678 = 69 A:7F X:78 Y:5B P:25 SP:FB CYC:132 SL:93 +E27B 20 51 F8 JSR $F851 A:7F X:78 Y:5B P:25 SP:FB CYC:144 SL:93 +F851 38 SEC A:7F X:78 Y:5B P:25 SP:F9 CYC:162 SL:93 +F852 B8 CLV A:7F X:78 Y:5B P:25 SP:F9 CYC:168 SL:93 +F853 A9 7F LDA #$7F A:7F X:78 Y:5B P:25 SP:F9 CYC:174 SL:93 +F855 60 RTS A:7F X:78 Y:5B P:25 SP:F9 CYC:180 SL:93 +E27E 7D 00 06 ADC $0600,X @ 0678 = 7F A:7F X:78 Y:5B P:25 SP:FB CYC:198 SL:93 +E281 20 56 F8 JSR $F856 A:FF X:78 Y:5B P:E4 SP:FB CYC:210 SL:93 +F856 10 09 BPL $F861 A:FF X:78 Y:5B P:E4 SP:F9 CYC:228 SL:93 +F858 B0 07 BCS $F861 A:FF X:78 Y:5B P:E4 SP:F9 CYC:234 SL:93 +F85A C9 FF CMP #$FF A:FF X:78 Y:5B P:E4 SP:F9 CYC:240 SL:93 +F85C D0 03 BNE $F861 A:FF X:78 Y:5B P:67 SP:F9 CYC:246 SL:93 +F85E 50 01 BVC $F861 A:FF X:78 Y:5B P:67 SP:F9 CYC:252 SL:93 +F860 60 RTS A:FF X:78 Y:5B P:67 SP:F9 CYC:258 SL:93 +E284 C8 INY A:FF X:78 Y:5B P:67 SP:FB CYC:276 SL:93 +E285 A9 80 LDA #$80 A:FF X:78 Y:5C P:65 SP:FB CYC:282 SL:93 +E287 8D 78 06 STA $0678 = 7F A:80 X:78 Y:5C P:E5 SP:FB CYC:288 SL:93 +E28A 20 64 F8 JSR $F864 A:80 X:78 Y:5C P:E5 SP:FB CYC:300 SL:93 +F864 18 CLC A:80 X:78 Y:5C P:E5 SP:F9 CYC:318 SL:93 +F865 24 01 BIT $01 = FF A:80 X:78 Y:5C P:E4 SP:F9 CYC:324 SL:93 +F867 A9 7F LDA #$7F A:80 X:78 Y:5C P:E4 SP:F9 CYC:333 SL:93 +F869 60 RTS A:7F X:78 Y:5C P:64 SP:F9 CYC:339 SL:93 +E28D 7D 00 06 ADC $0600,X @ 0678 = 80 A:7F X:78 Y:5C P:64 SP:FB CYC: 16 SL:94 +E290 20 6A F8 JSR $F86A A:FF X:78 Y:5C P:A4 SP:FB CYC: 28 SL:94 +F86A 10 09 BPL $F875 A:FF X:78 Y:5C P:A4 SP:F9 CYC: 46 SL:94 +F86C B0 07 BCS $F875 A:FF X:78 Y:5C P:A4 SP:F9 CYC: 52 SL:94 +F86E C9 FF CMP #$FF A:FF X:78 Y:5C P:A4 SP:F9 CYC: 58 SL:94 +F870 D0 03 BNE $F875 A:FF X:78 Y:5C P:27 SP:F9 CYC: 64 SL:94 +F872 70 01 BVS $F875 A:FF X:78 Y:5C P:27 SP:F9 CYC: 70 SL:94 +F874 60 RTS A:FF X:78 Y:5C P:27 SP:F9 CYC: 76 SL:94 +E293 C8 INY A:FF X:78 Y:5C P:27 SP:FB CYC: 94 SL:94 +E294 20 78 F8 JSR $F878 A:FF X:78 Y:5D P:25 SP:FB CYC:100 SL:94 +F878 38 SEC A:FF X:78 Y:5D P:25 SP:F9 CYC:118 SL:94 +F879 B8 CLV A:FF X:78 Y:5D P:25 SP:F9 CYC:124 SL:94 +F87A A9 7F LDA #$7F A:FF X:78 Y:5D P:25 SP:F9 CYC:130 SL:94 +F87C 60 RTS A:7F X:78 Y:5D P:25 SP:F9 CYC:136 SL:94 +E297 7D 00 06 ADC $0600,X @ 0678 = 80 A:7F X:78 Y:5D P:25 SP:FB CYC:154 SL:94 +E29A 20 7D F8 JSR $F87D A:00 X:78 Y:5D P:27 SP:FB CYC:166 SL:94 +F87D D0 07 BNE $F886 A:00 X:78 Y:5D P:27 SP:F9 CYC:184 SL:94 +F87F 30 05 BMI $F886 A:00 X:78 Y:5D P:27 SP:F9 CYC:190 SL:94 +F881 70 03 BVS $F886 A:00 X:78 Y:5D P:27 SP:F9 CYC:196 SL:94 +F883 90 01 BCC $F886 A:00 X:78 Y:5D P:27 SP:F9 CYC:202 SL:94 +F885 60 RTS A:00 X:78 Y:5D P:27 SP:F9 CYC:208 SL:94 +E29D C8 INY A:00 X:78 Y:5D P:27 SP:FB CYC:226 SL:94 +E29E A9 40 LDA #$40 A:00 X:78 Y:5E P:25 SP:FB CYC:232 SL:94 +E2A0 8D 78 06 STA $0678 = 80 A:40 X:78 Y:5E P:25 SP:FB CYC:238 SL:94 +E2A3 20 89 F8 JSR $F889 A:40 X:78 Y:5E P:25 SP:FB CYC:250 SL:94 +F889 24 01 BIT $01 = FF A:40 X:78 Y:5E P:25 SP:F9 CYC:268 SL:94 +F88B A9 40 LDA #$40 A:40 X:78 Y:5E P:E5 SP:F9 CYC:277 SL:94 +F88D 60 RTS A:40 X:78 Y:5E P:65 SP:F9 CYC:283 SL:94 +E2A6 DD 00 06 CMP $0600,X @ 0678 = 40 A:40 X:78 Y:5E P:65 SP:FB CYC:301 SL:94 +E2A9 20 8E F8 JSR $F88E A:40 X:78 Y:5E P:67 SP:FB CYC:313 SL:94 +F88E 30 07 BMI $F897 A:40 X:78 Y:5E P:67 SP:F9 CYC:331 SL:94 +F890 90 05 BCC $F897 A:40 X:78 Y:5E P:67 SP:F9 CYC:337 SL:94 +F892 D0 03 BNE $F897 A:40 X:78 Y:5E P:67 SP:F9 CYC: 2 SL:95 +F894 50 01 BVC $F897 A:40 X:78 Y:5E P:67 SP:F9 CYC: 8 SL:95 +F896 60 RTS A:40 X:78 Y:5E P:67 SP:F9 CYC: 14 SL:95 +E2AC C8 INY A:40 X:78 Y:5E P:67 SP:FB CYC: 32 SL:95 +E2AD 48 PHA A:40 X:78 Y:5F P:65 SP:FB CYC: 38 SL:95 +E2AE A9 3F LDA #$3F A:40 X:78 Y:5F P:65 SP:FA CYC: 47 SL:95 +E2B0 8D 78 06 STA $0678 = 40 A:3F X:78 Y:5F P:65 SP:FA CYC: 53 SL:95 +E2B3 68 PLA A:3F X:78 Y:5F P:65 SP:FA CYC: 65 SL:95 +E2B4 20 9A F8 JSR $F89A A:40 X:78 Y:5F P:65 SP:FB CYC: 77 SL:95 +F89A B8 CLV A:40 X:78 Y:5F P:65 SP:F9 CYC: 95 SL:95 +F89B 60 RTS A:40 X:78 Y:5F P:25 SP:F9 CYC:101 SL:95 +E2B7 DD 00 06 CMP $0600,X @ 0678 = 3F A:40 X:78 Y:5F P:25 SP:FB CYC:119 SL:95 +E2BA 20 9C F8 JSR $F89C A:40 X:78 Y:5F P:25 SP:FB CYC:131 SL:95 +F89C F0 07 BEQ $F8A5 A:40 X:78 Y:5F P:25 SP:F9 CYC:149 SL:95 +F89E 30 05 BMI $F8A5 A:40 X:78 Y:5F P:25 SP:F9 CYC:155 SL:95 +F8A0 90 03 BCC $F8A5 A:40 X:78 Y:5F P:25 SP:F9 CYC:161 SL:95 +F8A2 70 01 BVS $F8A5 A:40 X:78 Y:5F P:25 SP:F9 CYC:167 SL:95 +F8A4 60 RTS A:40 X:78 Y:5F P:25 SP:F9 CYC:173 SL:95 +E2BD C8 INY A:40 X:78 Y:5F P:25 SP:FB CYC:191 SL:95 +E2BE 48 PHA A:40 X:78 Y:60 P:25 SP:FB CYC:197 SL:95 +E2BF A9 41 LDA #$41 A:40 X:78 Y:60 P:25 SP:FA CYC:206 SL:95 +E2C1 8D 78 06 STA $0678 = 3F A:41 X:78 Y:60 P:25 SP:FA CYC:212 SL:95 +E2C4 68 PLA A:41 X:78 Y:60 P:25 SP:FA CYC:224 SL:95 +E2C5 DD 00 06 CMP $0600,X @ 0678 = 41 A:40 X:78 Y:60 P:25 SP:FB CYC:236 SL:95 +E2C8 20 A8 F8 JSR $F8A8 A:40 X:78 Y:60 P:A4 SP:FB CYC:248 SL:95 +F8A8 F0 05 BEQ $F8AF A:40 X:78 Y:60 P:A4 SP:F9 CYC:266 SL:95 +F8AA 10 03 BPL $F8AF A:40 X:78 Y:60 P:A4 SP:F9 CYC:272 SL:95 +F8AC 10 01 BPL $F8AF A:40 X:78 Y:60 P:A4 SP:F9 CYC:278 SL:95 +F8AE 60 RTS A:40 X:78 Y:60 P:A4 SP:F9 CYC:284 SL:95 +E2CB C8 INY A:40 X:78 Y:60 P:A4 SP:FB CYC:302 SL:95 +E2CC 48 PHA A:40 X:78 Y:61 P:24 SP:FB CYC:308 SL:95 +E2CD A9 00 LDA #$00 A:40 X:78 Y:61 P:24 SP:FA CYC:317 SL:95 +E2CF 8D 78 06 STA $0678 = 41 A:00 X:78 Y:61 P:26 SP:FA CYC:323 SL:95 +E2D2 68 PLA A:00 X:78 Y:61 P:26 SP:FA CYC:335 SL:95 +E2D3 20 B2 F8 JSR $F8B2 A:40 X:78 Y:61 P:24 SP:FB CYC: 6 SL:96 +F8B2 A9 80 LDA #$80 A:40 X:78 Y:61 P:24 SP:F9 CYC: 24 SL:96 +F8B4 60 RTS A:80 X:78 Y:61 P:A4 SP:F9 CYC: 30 SL:96 +E2D6 DD 00 06 CMP $0600,X @ 0678 = 00 A:80 X:78 Y:61 P:A4 SP:FB CYC: 48 SL:96 +E2D9 20 B5 F8 JSR $F8B5 A:80 X:78 Y:61 P:A5 SP:FB CYC: 60 SL:96 +F8B5 F0 05 BEQ $F8BC A:80 X:78 Y:61 P:A5 SP:F9 CYC: 78 SL:96 +F8B7 10 03 BPL $F8BC A:80 X:78 Y:61 P:A5 SP:F9 CYC: 84 SL:96 +F8B9 90 01 BCC $F8BC A:80 X:78 Y:61 P:A5 SP:F9 CYC: 90 SL:96 +F8BB 60 RTS A:80 X:78 Y:61 P:A5 SP:F9 CYC: 96 SL:96 +E2DC C8 INY A:80 X:78 Y:61 P:A5 SP:FB CYC:114 SL:96 +E2DD 48 PHA A:80 X:78 Y:62 P:25 SP:FB CYC:120 SL:96 +E2DE A9 80 LDA #$80 A:80 X:78 Y:62 P:25 SP:FA CYC:129 SL:96 +E2E0 8D 78 06 STA $0678 = 00 A:80 X:78 Y:62 P:A5 SP:FA CYC:135 SL:96 +E2E3 68 PLA A:80 X:78 Y:62 P:A5 SP:FA CYC:147 SL:96 +E2E4 DD 00 06 CMP $0600,X @ 0678 = 80 A:80 X:78 Y:62 P:A5 SP:FB CYC:159 SL:96 +E2E7 20 BF F8 JSR $F8BF A:80 X:78 Y:62 P:27 SP:FB CYC:171 SL:96 +F8BF D0 05 BNE $F8C6 A:80 X:78 Y:62 P:27 SP:F9 CYC:189 SL:96 +F8C1 30 03 BMI $F8C6 A:80 X:78 Y:62 P:27 SP:F9 CYC:195 SL:96 +F8C3 90 01 BCC $F8C6 A:80 X:78 Y:62 P:27 SP:F9 CYC:201 SL:96 +F8C5 60 RTS A:80 X:78 Y:62 P:27 SP:F9 CYC:207 SL:96 +E2EA C8 INY A:80 X:78 Y:62 P:27 SP:FB CYC:225 SL:96 +E2EB 48 PHA A:80 X:78 Y:63 P:25 SP:FB CYC:231 SL:96 +E2EC A9 81 LDA #$81 A:80 X:78 Y:63 P:25 SP:FA CYC:240 SL:96 +E2EE 8D 78 06 STA $0678 = 80 A:81 X:78 Y:63 P:A5 SP:FA CYC:246 SL:96 +E2F1 68 PLA A:81 X:78 Y:63 P:A5 SP:FA CYC:258 SL:96 +E2F2 DD 00 06 CMP $0600,X @ 0678 = 81 A:80 X:78 Y:63 P:A5 SP:FB CYC:270 SL:96 +E2F5 20 C9 F8 JSR $F8C9 A:80 X:78 Y:63 P:A4 SP:FB CYC:282 SL:96 +F8C9 B0 05 BCS $F8D0 A:80 X:78 Y:63 P:A4 SP:F9 CYC:300 SL:96 +F8CB F0 03 BEQ $F8D0 A:80 X:78 Y:63 P:A4 SP:F9 CYC:306 SL:96 +F8CD 10 01 BPL $F8D0 A:80 X:78 Y:63 P:A4 SP:F9 CYC:312 SL:96 +F8CF 60 RTS A:80 X:78 Y:63 P:A4 SP:F9 CYC:318 SL:96 +E2F8 C8 INY A:80 X:78 Y:63 P:A4 SP:FB CYC:336 SL:96 +E2F9 48 PHA A:80 X:78 Y:64 P:24 SP:FB CYC: 1 SL:97 +E2FA A9 7F LDA #$7F A:80 X:78 Y:64 P:24 SP:FA CYC: 10 SL:97 +E2FC 8D 78 06 STA $0678 = 81 A:7F X:78 Y:64 P:24 SP:FA CYC: 16 SL:97 +E2FF 68 PLA A:7F X:78 Y:64 P:24 SP:FA CYC: 28 SL:97 +E300 DD 00 06 CMP $0600,X @ 0678 = 7F A:80 X:78 Y:64 P:A4 SP:FB CYC: 40 SL:97 +E303 20 D3 F8 JSR $F8D3 A:80 X:78 Y:64 P:25 SP:FB CYC: 52 SL:97 +F8D3 90 05 BCC $F8DA A:80 X:78 Y:64 P:25 SP:F9 CYC: 70 SL:97 +F8D5 F0 03 BEQ $F8DA A:80 X:78 Y:64 P:25 SP:F9 CYC: 76 SL:97 +F8D7 30 01 BMI $F8DA A:80 X:78 Y:64 P:25 SP:F9 CYC: 82 SL:97 +F8D9 60 RTS A:80 X:78 Y:64 P:25 SP:F9 CYC: 88 SL:97 +E306 C8 INY A:80 X:78 Y:64 P:25 SP:FB CYC:106 SL:97 +E307 A9 40 LDA #$40 A:80 X:78 Y:65 P:25 SP:FB CYC:112 SL:97 +E309 8D 78 06 STA $0678 = 7F A:40 X:78 Y:65 P:25 SP:FB CYC:118 SL:97 +E30C 20 31 F9 JSR $F931 A:40 X:78 Y:65 P:25 SP:FB CYC:130 SL:97 +F931 24 01 BIT $01 = FF A:40 X:78 Y:65 P:25 SP:F9 CYC:148 SL:97 +F933 A9 40 LDA #$40 A:40 X:78 Y:65 P:E5 SP:F9 CYC:157 SL:97 +F935 38 SEC A:40 X:78 Y:65 P:65 SP:F9 CYC:163 SL:97 +F936 60 RTS A:40 X:78 Y:65 P:65 SP:F9 CYC:169 SL:97 +E30F FD 00 06 SBC $0600,X @ 0678 = 40 A:40 X:78 Y:65 P:65 SP:FB CYC:187 SL:97 +E312 20 37 F9 JSR $F937 A:00 X:78 Y:65 P:27 SP:FB CYC:199 SL:97 +F937 30 0B BMI $F944 A:00 X:78 Y:65 P:27 SP:F9 CYC:217 SL:97 +F939 90 09 BCC $F944 A:00 X:78 Y:65 P:27 SP:F9 CYC:223 SL:97 +F93B D0 07 BNE $F944 A:00 X:78 Y:65 P:27 SP:F9 CYC:229 SL:97 +F93D 70 05 BVS $F944 A:00 X:78 Y:65 P:27 SP:F9 CYC:235 SL:97 +F93F C9 00 CMP #$00 A:00 X:78 Y:65 P:27 SP:F9 CYC:241 SL:97 +F941 D0 01 BNE $F944 A:00 X:78 Y:65 P:27 SP:F9 CYC:247 SL:97 +F943 60 RTS A:00 X:78 Y:65 P:27 SP:F9 CYC:253 SL:97 +E315 C8 INY A:00 X:78 Y:65 P:27 SP:FB CYC:271 SL:97 +E316 A9 3F LDA #$3F A:00 X:78 Y:66 P:25 SP:FB CYC:277 SL:97 +E318 8D 78 06 STA $0678 = 40 A:3F X:78 Y:66 P:25 SP:FB CYC:283 SL:97 +E31B 20 47 F9 JSR $F947 A:3F X:78 Y:66 P:25 SP:FB CYC:295 SL:97 +F947 B8 CLV A:3F X:78 Y:66 P:25 SP:F9 CYC:313 SL:97 +F948 38 SEC A:3F X:78 Y:66 P:25 SP:F9 CYC:319 SL:97 +F949 A9 40 LDA #$40 A:3F X:78 Y:66 P:25 SP:F9 CYC:325 SL:97 +F94B 60 RTS A:40 X:78 Y:66 P:25 SP:F9 CYC:331 SL:97 +E31E FD 00 06 SBC $0600,X @ 0678 = 3F A:40 X:78 Y:66 P:25 SP:FB CYC: 8 SL:98 +E321 20 4C F9 JSR $F94C A:01 X:78 Y:66 P:25 SP:FB CYC: 20 SL:98 +F94C F0 0B BEQ $F959 A:01 X:78 Y:66 P:25 SP:F9 CYC: 38 SL:98 +F94E 30 09 BMI $F959 A:01 X:78 Y:66 P:25 SP:F9 CYC: 44 SL:98 +F950 90 07 BCC $F959 A:01 X:78 Y:66 P:25 SP:F9 CYC: 50 SL:98 +F952 70 05 BVS $F959 A:01 X:78 Y:66 P:25 SP:F9 CYC: 56 SL:98 +F954 C9 01 CMP #$01 A:01 X:78 Y:66 P:25 SP:F9 CYC: 62 SL:98 +F956 D0 01 BNE $F959 A:01 X:78 Y:66 P:27 SP:F9 CYC: 68 SL:98 +F958 60 RTS A:01 X:78 Y:66 P:27 SP:F9 CYC: 74 SL:98 +E324 C8 INY A:01 X:78 Y:66 P:27 SP:FB CYC: 92 SL:98 +E325 A9 41 LDA #$41 A:01 X:78 Y:67 P:25 SP:FB CYC: 98 SL:98 +E327 8D 78 06 STA $0678 = 3F A:41 X:78 Y:67 P:25 SP:FB CYC:104 SL:98 +E32A 20 5C F9 JSR $F95C A:41 X:78 Y:67 P:25 SP:FB CYC:116 SL:98 +F95C A9 40 LDA #$40 A:41 X:78 Y:67 P:25 SP:F9 CYC:134 SL:98 +F95E 38 SEC A:40 X:78 Y:67 P:25 SP:F9 CYC:140 SL:98 +F95F 24 01 BIT $01 = FF A:40 X:78 Y:67 P:25 SP:F9 CYC:146 SL:98 +F961 60 RTS A:40 X:78 Y:67 P:E5 SP:F9 CYC:155 SL:98 +E32D FD 00 06 SBC $0600,X @ 0678 = 41 A:40 X:78 Y:67 P:E5 SP:FB CYC:173 SL:98 +E330 20 62 F9 JSR $F962 A:FF X:78 Y:67 P:A4 SP:FB CYC:185 SL:98 +F962 B0 0B BCS $F96F A:FF X:78 Y:67 P:A4 SP:F9 CYC:203 SL:98 +F964 F0 09 BEQ $F96F A:FF X:78 Y:67 P:A4 SP:F9 CYC:209 SL:98 +F966 10 07 BPL $F96F A:FF X:78 Y:67 P:A4 SP:F9 CYC:215 SL:98 +F968 70 05 BVS $F96F A:FF X:78 Y:67 P:A4 SP:F9 CYC:221 SL:98 +F96A C9 FF CMP #$FF A:FF X:78 Y:67 P:A4 SP:F9 CYC:227 SL:98 +F96C D0 01 BNE $F96F A:FF X:78 Y:67 P:27 SP:F9 CYC:233 SL:98 +F96E 60 RTS A:FF X:78 Y:67 P:27 SP:F9 CYC:239 SL:98 +E333 C8 INY A:FF X:78 Y:67 P:27 SP:FB CYC:257 SL:98 +E334 A9 00 LDA #$00 A:FF X:78 Y:68 P:25 SP:FB CYC:263 SL:98 +E336 8D 78 06 STA $0678 = 41 A:00 X:78 Y:68 P:27 SP:FB CYC:269 SL:98 +E339 20 72 F9 JSR $F972 A:00 X:78 Y:68 P:27 SP:FB CYC:281 SL:98 +F972 18 CLC A:00 X:78 Y:68 P:27 SP:F9 CYC:299 SL:98 +F973 A9 80 LDA #$80 A:00 X:78 Y:68 P:26 SP:F9 CYC:305 SL:98 +F975 60 RTS A:80 X:78 Y:68 P:A4 SP:F9 CYC:311 SL:98 +E33C FD 00 06 SBC $0600,X @ 0678 = 00 A:80 X:78 Y:68 P:A4 SP:FB CYC:329 SL:98 +E33F 20 76 F9 JSR $F976 A:7F X:78 Y:68 P:65 SP:FB CYC: 0 SL:99 +F976 90 05 BCC $F97D A:7F X:78 Y:68 P:65 SP:F9 CYC: 18 SL:99 +F978 C9 7F CMP #$7F A:7F X:78 Y:68 P:65 SP:F9 CYC: 24 SL:99 +F97A D0 01 BNE $F97D A:7F X:78 Y:68 P:67 SP:F9 CYC: 30 SL:99 +F97C 60 RTS A:7F X:78 Y:68 P:67 SP:F9 CYC: 36 SL:99 +E342 C8 INY A:7F X:78 Y:68 P:67 SP:FB CYC: 54 SL:99 +E343 A9 7F LDA #$7F A:7F X:78 Y:69 P:65 SP:FB CYC: 60 SL:99 +E345 8D 78 06 STA $0678 = 00 A:7F X:78 Y:69 P:65 SP:FB CYC: 66 SL:99 +E348 20 80 F9 JSR $F980 A:7F X:78 Y:69 P:65 SP:FB CYC: 78 SL:99 +F980 38 SEC A:7F X:78 Y:69 P:65 SP:F9 CYC: 96 SL:99 +F981 A9 81 LDA #$81 A:7F X:78 Y:69 P:65 SP:F9 CYC:102 SL:99 +F983 60 RTS A:81 X:78 Y:69 P:E5 SP:F9 CYC:108 SL:99 +E34B FD 00 06 SBC $0600,X @ 0678 = 7F A:81 X:78 Y:69 P:E5 SP:FB CYC:126 SL:99 +E34E 20 84 F9 JSR $F984 A:02 X:78 Y:69 P:65 SP:FB CYC:138 SL:99 +F984 50 07 BVC $F98D A:02 X:78 Y:69 P:65 SP:F9 CYC:156 SL:99 +F986 90 05 BCC $F98D A:02 X:78 Y:69 P:65 SP:F9 CYC:162 SL:99 +F988 C9 02 CMP #$02 A:02 X:78 Y:69 P:65 SP:F9 CYC:168 SL:99 +F98A D0 01 BNE $F98D A:02 X:78 Y:69 P:67 SP:F9 CYC:174 SL:99 +F98C 60 RTS A:02 X:78 Y:69 P:67 SP:F9 CYC:180 SL:99 +E351 A9 AA LDA #$AA A:02 X:78 Y:69 P:67 SP:FB CYC:198 SL:99 +E353 8D 33 06 STA $0633 = AA A:AA X:78 Y:69 P:E5 SP:FB CYC:204 SL:99 +E356 A9 BB LDA #$BB A:AA X:78 Y:69 P:E5 SP:FB CYC:216 SL:99 +E358 8D 89 06 STA $0689 = BB A:BB X:78 Y:69 P:E5 SP:FB CYC:222 SL:99 +E35B A2 00 LDX #$00 A:BB X:78 Y:69 P:E5 SP:FB CYC:234 SL:99 +E35D A0 66 LDY #$66 A:BB X:00 Y:69 P:67 SP:FB CYC:240 SL:99 +E35F 24 01 BIT $01 = FF A:BB X:00 Y:66 P:65 SP:FB CYC:246 SL:99 +E361 38 SEC A:BB X:00 Y:66 P:E5 SP:FB CYC:255 SL:99 +E362 A9 00 LDA #$00 A:BB X:00 Y:66 P:E5 SP:FB CYC:261 SL:99 +E364 BD 33 06 LDA $0633,X @ 0633 = AA A:00 X:00 Y:66 P:67 SP:FB CYC:267 SL:99 +E367 10 12 BPL $E37B A:AA X:00 Y:66 P:E5 SP:FB CYC:279 SL:99 +E369 F0 10 BEQ $E37B A:AA X:00 Y:66 P:E5 SP:FB CYC:285 SL:99 +E36B 50 0E BVC $E37B A:AA X:00 Y:66 P:E5 SP:FB CYC:291 SL:99 +E36D 90 0C BCC $E37B A:AA X:00 Y:66 P:E5 SP:FB CYC:297 SL:99 +E36F C0 66 CPY #$66 A:AA X:00 Y:66 P:E5 SP:FB CYC:303 SL:99 +E371 D0 08 BNE $E37B A:AA X:00 Y:66 P:67 SP:FB CYC:309 SL:99 +E373 E0 00 CPX #$00 A:AA X:00 Y:66 P:67 SP:FB CYC:315 SL:99 +E375 D0 04 BNE $E37B A:AA X:00 Y:66 P:67 SP:FB CYC:321 SL:99 +E377 C9 AA CMP #$AA A:AA X:00 Y:66 P:67 SP:FB CYC:327 SL:99 +E379 F0 04 BEQ $E37F A:AA X:00 Y:66 P:67 SP:FB CYC:333 SL:99 +E37F A2 8A LDX #$8A A:AA X:00 Y:66 P:67 SP:FB CYC: 1 SL:100 +E381 A0 66 LDY #$66 A:AA X:8A Y:66 P:E5 SP:FB CYC: 7 SL:100 +E383 B8 CLV A:AA X:8A Y:66 P:65 SP:FB CYC: 13 SL:100 +E384 18 CLC A:AA X:8A Y:66 P:25 SP:FB CYC: 19 SL:100 +E385 A9 00 LDA #$00 A:AA X:8A Y:66 P:24 SP:FB CYC: 25 SL:100 +E387 BD FF 05 LDA $05FF,X @ 0689 = BB A:00 X:8A Y:66 P:26 SP:FB CYC: 31 SL:100 +E38A 10 12 BPL $E39E A:BB X:8A Y:66 P:A4 SP:FB CYC: 46 SL:100 +E38C F0 10 BEQ $E39E A:BB X:8A Y:66 P:A4 SP:FB CYC: 52 SL:100 +E38E 70 0E BVS $E39E A:BB X:8A Y:66 P:A4 SP:FB CYC: 58 SL:100 +E390 B0 0C BCS $E39E A:BB X:8A Y:66 P:A4 SP:FB CYC: 64 SL:100 +E392 C9 BB CMP #$BB A:BB X:8A Y:66 P:A4 SP:FB CYC: 70 SL:100 +E394 D0 08 BNE $E39E A:BB X:8A Y:66 P:27 SP:FB CYC: 76 SL:100 +E396 C0 66 CPY #$66 A:BB X:8A Y:66 P:27 SP:FB CYC: 82 SL:100 +E398 D0 04 BNE $E39E A:BB X:8A Y:66 P:27 SP:FB CYC: 88 SL:100 +E39A E0 8A CPX #$8A A:BB X:8A Y:66 P:27 SP:FB CYC: 94 SL:100 +E39C F0 04 BEQ $E3A2 A:BB X:8A Y:66 P:27 SP:FB CYC:100 SL:100 +E3A2 24 01 BIT $01 = FF A:BB X:8A Y:66 P:27 SP:FB CYC:109 SL:100 +E3A4 38 SEC A:BB X:8A Y:66 P:E5 SP:FB CYC:118 SL:100 +E3A5 A9 44 LDA #$44 A:BB X:8A Y:66 P:E5 SP:FB CYC:124 SL:100 +E3A7 A2 00 LDX #$00 A:44 X:8A Y:66 P:65 SP:FB CYC:130 SL:100 +E3A9 9D 33 06 STA $0633,X @ 0633 = AA A:44 X:00 Y:66 P:67 SP:FB CYC:136 SL:100 +E3AC AD 33 06 LDA $0633 = 44 A:44 X:00 Y:66 P:67 SP:FB CYC:151 SL:100 +E3AF 90 1A BCC $E3CB A:44 X:00 Y:66 P:65 SP:FB CYC:163 SL:100 +E3B1 C9 44 CMP #$44 A:44 X:00 Y:66 P:65 SP:FB CYC:169 SL:100 +E3B3 D0 16 BNE $E3CB A:44 X:00 Y:66 P:67 SP:FB CYC:175 SL:100 +E3B5 50 14 BVC $E3CB A:44 X:00 Y:66 P:67 SP:FB CYC:181 SL:100 +E3B7 18 CLC A:44 X:00 Y:66 P:67 SP:FB CYC:187 SL:100 +E3B8 B8 CLV A:44 X:00 Y:66 P:66 SP:FB CYC:193 SL:100 +E3B9 A9 99 LDA #$99 A:44 X:00 Y:66 P:26 SP:FB CYC:199 SL:100 +E3BB A2 80 LDX #$80 A:99 X:00 Y:66 P:A4 SP:FB CYC:205 SL:100 +E3BD 9D 85 05 STA $0585,X @ 0605 = 00 A:99 X:80 Y:66 P:A4 SP:FB CYC:211 SL:100 +E3C0 AD 05 06 LDA $0605 = 99 A:99 X:80 Y:66 P:A4 SP:FB CYC:226 SL:100 +E3C3 B0 06 BCS $E3CB A:99 X:80 Y:66 P:A4 SP:FB CYC:238 SL:100 +E3C5 C9 99 CMP #$99 A:99 X:80 Y:66 P:A4 SP:FB CYC:244 SL:100 +E3C7 D0 02 BNE $E3CB A:99 X:80 Y:66 P:27 SP:FB CYC:250 SL:100 +E3C9 50 04 BVC $E3CF A:99 X:80 Y:66 P:27 SP:FB CYC:256 SL:100 +E3CF A0 6D LDY #$6D A:99 X:80 Y:66 P:27 SP:FB CYC:265 SL:100 +E3D1 A2 6D LDX #$6D A:99 X:80 Y:6D P:25 SP:FB CYC:271 SL:100 +E3D3 20 90 F9 JSR $F990 A:99 X:6D Y:6D P:25 SP:FB CYC:277 SL:100 +F990 A2 55 LDX #$55 A:99 X:6D Y:6D P:25 SP:F9 CYC:295 SL:100 +F992 A9 FF LDA #$FF A:99 X:55 Y:6D P:25 SP:F9 CYC:301 SL:100 +F994 85 01 STA $01 = FF A:FF X:55 Y:6D P:A5 SP:F9 CYC:307 SL:100 +F996 EA NOP A:FF X:55 Y:6D P:A5 SP:F9 CYC:316 SL:100 +F997 24 01 BIT $01 = FF A:FF X:55 Y:6D P:A5 SP:F9 CYC:322 SL:100 +F999 38 SEC A:FF X:55 Y:6D P:E5 SP:F9 CYC:331 SL:100 +F99A A9 01 LDA #$01 A:FF X:55 Y:6D P:E5 SP:F9 CYC:337 SL:100 +F99C 60 RTS A:01 X:55 Y:6D P:65 SP:F9 CYC: 2 SL:101 +E3D6 9D 00 06 STA $0600,X @ 0655 = 00 A:01 X:55 Y:6D P:65 SP:FB CYC: 20 SL:101 +E3D9 5E 00 06 LSR $0600,X @ 0655 = 01 A:01 X:55 Y:6D P:65 SP:FB CYC: 35 SL:101 +E3DC BD 00 06 LDA $0600,X @ 0655 = 00 A:01 X:55 Y:6D P:67 SP:FB CYC: 56 SL:101 +E3DF 20 9D F9 JSR $F99D A:00 X:55 Y:6D P:67 SP:FB CYC: 68 SL:101 +F99D 90 1B BCC $F9BA A:00 X:55 Y:6D P:67 SP:F9 CYC: 86 SL:101 +F99F D0 19 BNE $F9BA A:00 X:55 Y:6D P:67 SP:F9 CYC: 92 SL:101 +F9A1 30 17 BMI $F9BA A:00 X:55 Y:6D P:67 SP:F9 CYC: 98 SL:101 +F9A3 50 15 BVC $F9BA A:00 X:55 Y:6D P:67 SP:F9 CYC:104 SL:101 +F9A5 C9 00 CMP #$00 A:00 X:55 Y:6D P:67 SP:F9 CYC:110 SL:101 +F9A7 D0 11 BNE $F9BA A:00 X:55 Y:6D P:67 SP:F9 CYC:116 SL:101 +F9A9 B8 CLV A:00 X:55 Y:6D P:67 SP:F9 CYC:122 SL:101 +F9AA A9 AA LDA #$AA A:00 X:55 Y:6D P:27 SP:F9 CYC:128 SL:101 +F9AC 60 RTS A:AA X:55 Y:6D P:A5 SP:F9 CYC:134 SL:101 +E3E2 C8 INY A:AA X:55 Y:6D P:A5 SP:FB CYC:152 SL:101 +E3E3 9D 00 06 STA $0600,X @ 0655 = 00 A:AA X:55 Y:6E P:25 SP:FB CYC:158 SL:101 +E3E6 5E 00 06 LSR $0600,X @ 0655 = AA A:AA X:55 Y:6E P:25 SP:FB CYC:173 SL:101 +E3E9 BD 00 06 LDA $0600,X @ 0655 = 55 A:AA X:55 Y:6E P:24 SP:FB CYC:194 SL:101 +E3EC 20 AD F9 JSR $F9AD A:55 X:55 Y:6E P:24 SP:FB CYC:206 SL:101 +F9AD B0 0B BCS $F9BA A:55 X:55 Y:6E P:24 SP:F9 CYC:224 SL:101 +F9AF F0 09 BEQ $F9BA A:55 X:55 Y:6E P:24 SP:F9 CYC:230 SL:101 +F9B1 30 07 BMI $F9BA A:55 X:55 Y:6E P:24 SP:F9 CYC:236 SL:101 +F9B3 70 05 BVS $F9BA A:55 X:55 Y:6E P:24 SP:F9 CYC:242 SL:101 +F9B5 C9 55 CMP #$55 A:55 X:55 Y:6E P:24 SP:F9 CYC:248 SL:101 +F9B7 D0 01 BNE $F9BA A:55 X:55 Y:6E P:27 SP:F9 CYC:254 SL:101 +F9B9 60 RTS A:55 X:55 Y:6E P:27 SP:F9 CYC:260 SL:101 +E3EF C8 INY A:55 X:55 Y:6E P:27 SP:FB CYC:278 SL:101 +E3F0 20 BD F9 JSR $F9BD A:55 X:55 Y:6F P:25 SP:FB CYC:284 SL:101 +F9BD 24 01 BIT $01 = FF A:55 X:55 Y:6F P:25 SP:F9 CYC:302 SL:101 +F9BF 38 SEC A:55 X:55 Y:6F P:E5 SP:F9 CYC:311 SL:101 +F9C0 A9 80 LDA #$80 A:55 X:55 Y:6F P:E5 SP:F9 CYC:317 SL:101 +F9C2 60 RTS A:80 X:55 Y:6F P:E5 SP:F9 CYC:323 SL:101 +E3F3 9D 00 06 STA $0600,X @ 0655 = 55 A:80 X:55 Y:6F P:E5 SP:FB CYC: 0 SL:102 +E3F6 1E 00 06 ASL $0600,X @ 0655 = 80 A:80 X:55 Y:6F P:E5 SP:FB CYC: 15 SL:102 +E3F9 BD 00 06 LDA $0600,X @ 0655 = 00 A:80 X:55 Y:6F P:67 SP:FB CYC: 36 SL:102 +E3FC 20 C3 F9 JSR $F9C3 A:00 X:55 Y:6F P:67 SP:FB CYC: 48 SL:102 +F9C3 90 1C BCC $F9E1 A:00 X:55 Y:6F P:67 SP:F9 CYC: 66 SL:102 +F9C5 D0 1A BNE $F9E1 A:00 X:55 Y:6F P:67 SP:F9 CYC: 72 SL:102 +F9C7 30 18 BMI $F9E1 A:00 X:55 Y:6F P:67 SP:F9 CYC: 78 SL:102 +F9C9 50 16 BVC $F9E1 A:00 X:55 Y:6F P:67 SP:F9 CYC: 84 SL:102 +F9CB C9 00 CMP #$00 A:00 X:55 Y:6F P:67 SP:F9 CYC: 90 SL:102 +F9CD D0 12 BNE $F9E1 A:00 X:55 Y:6F P:67 SP:F9 CYC: 96 SL:102 +F9CF B8 CLV A:00 X:55 Y:6F P:67 SP:F9 CYC:102 SL:102 +F9D0 A9 55 LDA #$55 A:00 X:55 Y:6F P:27 SP:F9 CYC:108 SL:102 +F9D2 38 SEC A:55 X:55 Y:6F P:25 SP:F9 CYC:114 SL:102 +F9D3 60 RTS A:55 X:55 Y:6F P:25 SP:F9 CYC:120 SL:102 +E3FF C8 INY A:55 X:55 Y:6F P:25 SP:FB CYC:138 SL:102 +E400 9D 00 06 STA $0600,X @ 0655 = 00 A:55 X:55 Y:70 P:25 SP:FB CYC:144 SL:102 +E403 1E 00 06 ASL $0600,X @ 0655 = 55 A:55 X:55 Y:70 P:25 SP:FB CYC:159 SL:102 +E406 BD 00 06 LDA $0600,X @ 0655 = AA A:55 X:55 Y:70 P:A4 SP:FB CYC:180 SL:102 +E409 20 D4 F9 JSR $F9D4 A:AA X:55 Y:70 P:A4 SP:FB CYC:192 SL:102 +F9D4 B0 0B BCS $F9E1 A:AA X:55 Y:70 P:A4 SP:F9 CYC:210 SL:102 +F9D6 F0 09 BEQ $F9E1 A:AA X:55 Y:70 P:A4 SP:F9 CYC:216 SL:102 +F9D8 10 07 BPL $F9E1 A:AA X:55 Y:70 P:A4 SP:F9 CYC:222 SL:102 +F9DA 70 05 BVS $F9E1 A:AA X:55 Y:70 P:A4 SP:F9 CYC:228 SL:102 +F9DC C9 AA CMP #$AA A:AA X:55 Y:70 P:A4 SP:F9 CYC:234 SL:102 +F9DE D0 01 BNE $F9E1 A:AA X:55 Y:70 P:27 SP:F9 CYC:240 SL:102 +F9E0 60 RTS A:AA X:55 Y:70 P:27 SP:F9 CYC:246 SL:102 +E40C C8 INY A:AA X:55 Y:70 P:27 SP:FB CYC:264 SL:102 +E40D 20 E4 F9 JSR $F9E4 A:AA X:55 Y:71 P:25 SP:FB CYC:270 SL:102 +F9E4 24 01 BIT $01 = FF A:AA X:55 Y:71 P:25 SP:F9 CYC:288 SL:102 +F9E6 38 SEC A:AA X:55 Y:71 P:E5 SP:F9 CYC:297 SL:102 +F9E7 A9 01 LDA #$01 A:AA X:55 Y:71 P:E5 SP:F9 CYC:303 SL:102 +F9E9 60 RTS A:01 X:55 Y:71 P:65 SP:F9 CYC:309 SL:102 +E410 9D 00 06 STA $0600,X @ 0655 = AA A:01 X:55 Y:71 P:65 SP:FB CYC:327 SL:102 +E413 7E 00 06 ROR $0600,X @ 0655 = 01 A:01 X:55 Y:71 P:65 SP:FB CYC: 1 SL:103 +E416 BD 00 06 LDA $0600,X @ 0655 = 80 A:01 X:55 Y:71 P:E5 SP:FB CYC: 22 SL:103 +E419 20 EA F9 JSR $F9EA A:80 X:55 Y:71 P:E5 SP:FB CYC: 34 SL:103 +F9EA 90 1C BCC $FA08 A:80 X:55 Y:71 P:E5 SP:F9 CYC: 52 SL:103 +F9EC F0 1A BEQ $FA08 A:80 X:55 Y:71 P:E5 SP:F9 CYC: 58 SL:103 +F9EE 10 18 BPL $FA08 A:80 X:55 Y:71 P:E5 SP:F9 CYC: 64 SL:103 +F9F0 50 16 BVC $FA08 A:80 X:55 Y:71 P:E5 SP:F9 CYC: 70 SL:103 +F9F2 C9 80 CMP #$80 A:80 X:55 Y:71 P:E5 SP:F9 CYC: 76 SL:103 +F9F4 D0 12 BNE $FA08 A:80 X:55 Y:71 P:67 SP:F9 CYC: 82 SL:103 +F9F6 B8 CLV A:80 X:55 Y:71 P:67 SP:F9 CYC: 88 SL:103 +F9F7 18 CLC A:80 X:55 Y:71 P:27 SP:F9 CYC: 94 SL:103 +F9F8 A9 55 LDA #$55 A:80 X:55 Y:71 P:26 SP:F9 CYC:100 SL:103 +F9FA 60 RTS A:55 X:55 Y:71 P:24 SP:F9 CYC:106 SL:103 +E41C C8 INY A:55 X:55 Y:71 P:24 SP:FB CYC:124 SL:103 +E41D 9D 00 06 STA $0600,X @ 0655 = 80 A:55 X:55 Y:72 P:24 SP:FB CYC:130 SL:103 +E420 7E 00 06 ROR $0600,X @ 0655 = 55 A:55 X:55 Y:72 P:24 SP:FB CYC:145 SL:103 +E423 BD 00 06 LDA $0600,X @ 0655 = 2A A:55 X:55 Y:72 P:25 SP:FB CYC:166 SL:103 +E426 20 FB F9 JSR $F9FB A:2A X:55 Y:72 P:25 SP:FB CYC:178 SL:103 +F9FB 90 0B BCC $FA08 A:2A X:55 Y:72 P:25 SP:F9 CYC:196 SL:103 +F9FD F0 09 BEQ $FA08 A:2A X:55 Y:72 P:25 SP:F9 CYC:202 SL:103 +F9FF 30 07 BMI $FA08 A:2A X:55 Y:72 P:25 SP:F9 CYC:208 SL:103 +FA01 70 05 BVS $FA08 A:2A X:55 Y:72 P:25 SP:F9 CYC:214 SL:103 +FA03 C9 2A CMP #$2A A:2A X:55 Y:72 P:25 SP:F9 CYC:220 SL:103 +FA05 D0 01 BNE $FA08 A:2A X:55 Y:72 P:27 SP:F9 CYC:226 SL:103 +FA07 60 RTS A:2A X:55 Y:72 P:27 SP:F9 CYC:232 SL:103 +E429 C8 INY A:2A X:55 Y:72 P:27 SP:FB CYC:250 SL:103 +E42A 20 0A FA JSR $FA0A A:2A X:55 Y:73 P:25 SP:FB CYC:256 SL:103 +FA0A 24 01 BIT $01 = FF A:2A X:55 Y:73 P:25 SP:F9 CYC:274 SL:103 +FA0C 38 SEC A:2A X:55 Y:73 P:E5 SP:F9 CYC:283 SL:103 +FA0D A9 80 LDA #$80 A:2A X:55 Y:73 P:E5 SP:F9 CYC:289 SL:103 +FA0F 60 RTS A:80 X:55 Y:73 P:E5 SP:F9 CYC:295 SL:103 +E42D 9D 00 06 STA $0600,X @ 0655 = 2A A:80 X:55 Y:73 P:E5 SP:FB CYC:313 SL:103 +E430 3E 00 06 ROL $0600,X @ 0655 = 80 A:80 X:55 Y:73 P:E5 SP:FB CYC:328 SL:103 +E433 BD 00 06 LDA $0600,X @ 0655 = 01 A:80 X:55 Y:73 P:65 SP:FB CYC: 8 SL:104 +E436 20 10 FA JSR $FA10 A:01 X:55 Y:73 P:65 SP:FB CYC: 20 SL:104 +FA10 90 1C BCC $FA2E A:01 X:55 Y:73 P:65 SP:F9 CYC: 38 SL:104 +FA12 F0 1A BEQ $FA2E A:01 X:55 Y:73 P:65 SP:F9 CYC: 44 SL:104 +FA14 30 18 BMI $FA2E A:01 X:55 Y:73 P:65 SP:F9 CYC: 50 SL:104 +FA16 50 16 BVC $FA2E A:01 X:55 Y:73 P:65 SP:F9 CYC: 56 SL:104 +FA18 C9 01 CMP #$01 A:01 X:55 Y:73 P:65 SP:F9 CYC: 62 SL:104 +FA1A D0 12 BNE $FA2E A:01 X:55 Y:73 P:67 SP:F9 CYC: 68 SL:104 +FA1C B8 CLV A:01 X:55 Y:73 P:67 SP:F9 CYC: 74 SL:104 +FA1D 18 CLC A:01 X:55 Y:73 P:27 SP:F9 CYC: 80 SL:104 +FA1E A9 55 LDA #$55 A:01 X:55 Y:73 P:26 SP:F9 CYC: 86 SL:104 +FA20 60 RTS A:55 X:55 Y:73 P:24 SP:F9 CYC: 92 SL:104 +E439 C8 INY A:55 X:55 Y:73 P:24 SP:FB CYC:110 SL:104 +E43A 9D 00 06 STA $0600,X @ 0655 = 01 A:55 X:55 Y:74 P:24 SP:FB CYC:116 SL:104 +E43D 3E 00 06 ROL $0600,X @ 0655 = 55 A:55 X:55 Y:74 P:24 SP:FB CYC:131 SL:104 +E440 BD 00 06 LDA $0600,X @ 0655 = AA A:55 X:55 Y:74 P:A4 SP:FB CYC:152 SL:104 +E443 20 21 FA JSR $FA21 A:AA X:55 Y:74 P:A4 SP:FB CYC:164 SL:104 +FA21 B0 0B BCS $FA2E A:AA X:55 Y:74 P:A4 SP:F9 CYC:182 SL:104 +FA23 F0 09 BEQ $FA2E A:AA X:55 Y:74 P:A4 SP:F9 CYC:188 SL:104 +FA25 10 07 BPL $FA2E A:AA X:55 Y:74 P:A4 SP:F9 CYC:194 SL:104 +FA27 70 05 BVS $FA2E A:AA X:55 Y:74 P:A4 SP:F9 CYC:200 SL:104 +FA29 C9 AA CMP #$AA A:AA X:55 Y:74 P:A4 SP:F9 CYC:206 SL:104 +FA2B D0 01 BNE $FA2E A:AA X:55 Y:74 P:27 SP:F9 CYC:212 SL:104 +FA2D 60 RTS A:AA X:55 Y:74 P:27 SP:F9 CYC:218 SL:104 +E446 A9 FF LDA #$FF A:AA X:55 Y:74 P:27 SP:FB CYC:236 SL:104 +E448 9D 00 06 STA $0600,X @ 0655 = AA A:FF X:55 Y:74 P:A5 SP:FB CYC:242 SL:104 +E44B 85 01 STA $01 = FF A:FF X:55 Y:74 P:A5 SP:FB CYC:257 SL:104 +E44D 24 01 BIT $01 = FF A:FF X:55 Y:74 P:A5 SP:FB CYC:266 SL:104 +E44F 38 SEC A:FF X:55 Y:74 P:E5 SP:FB CYC:275 SL:104 +E450 FE 00 06 INC $0600,X @ 0655 = FF A:FF X:55 Y:74 P:E5 SP:FB CYC:281 SL:104 +E453 D0 0D BNE $E462 A:FF X:55 Y:74 P:67 SP:FB CYC:302 SL:104 +E455 30 0B BMI $E462 A:FF X:55 Y:74 P:67 SP:FB CYC:308 SL:104 +E457 50 09 BVC $E462 A:FF X:55 Y:74 P:67 SP:FB CYC:314 SL:104 +E459 90 07 BCC $E462 A:FF X:55 Y:74 P:67 SP:FB CYC:320 SL:104 +E45B BD 00 06 LDA $0600,X @ 0655 = 00 A:FF X:55 Y:74 P:67 SP:FB CYC:326 SL:104 +E45E C9 00 CMP #$00 A:00 X:55 Y:74 P:67 SP:FB CYC:338 SL:104 +E460 F0 04 BEQ $E466 A:00 X:55 Y:74 P:67 SP:FB CYC: 3 SL:105 +E466 A9 7F LDA #$7F A:00 X:55 Y:74 P:67 SP:FB CYC: 12 SL:105 +E468 9D 00 06 STA $0600,X @ 0655 = 00 A:7F X:55 Y:74 P:65 SP:FB CYC: 18 SL:105 +E46B B8 CLV A:7F X:55 Y:74 P:65 SP:FB CYC: 33 SL:105 +E46C 18 CLC A:7F X:55 Y:74 P:25 SP:FB CYC: 39 SL:105 +E46D FE 00 06 INC $0600,X @ 0655 = 7F A:7F X:55 Y:74 P:24 SP:FB CYC: 45 SL:105 +E470 F0 0D BEQ $E47F A:7F X:55 Y:74 P:A4 SP:FB CYC: 66 SL:105 +E472 10 0B BPL $E47F A:7F X:55 Y:74 P:A4 SP:FB CYC: 72 SL:105 +E474 70 09 BVS $E47F A:7F X:55 Y:74 P:A4 SP:FB CYC: 78 SL:105 +E476 B0 07 BCS $E47F A:7F X:55 Y:74 P:A4 SP:FB CYC: 84 SL:105 +E478 BD 00 06 LDA $0600,X @ 0655 = 80 A:7F X:55 Y:74 P:A4 SP:FB CYC: 90 SL:105 +E47B C9 80 CMP #$80 A:80 X:55 Y:74 P:A4 SP:FB CYC:102 SL:105 +E47D F0 04 BEQ $E483 A:80 X:55 Y:74 P:27 SP:FB CYC:108 SL:105 +E483 A9 00 LDA #$00 A:80 X:55 Y:74 P:27 SP:FB CYC:117 SL:105 +E485 9D 00 06 STA $0600,X @ 0655 = 80 A:00 X:55 Y:74 P:27 SP:FB CYC:123 SL:105 +E488 24 01 BIT $01 = FF A:00 X:55 Y:74 P:27 SP:FB CYC:138 SL:105 +E48A 38 SEC A:00 X:55 Y:74 P:E7 SP:FB CYC:147 SL:105 +E48B DE 00 06 DEC $0600,X @ 0655 = 00 A:00 X:55 Y:74 P:E7 SP:FB CYC:153 SL:105 +E48E F0 0D BEQ $E49D A:00 X:55 Y:74 P:E5 SP:FB CYC:174 SL:105 +E490 10 0B BPL $E49D A:00 X:55 Y:74 P:E5 SP:FB CYC:180 SL:105 +E492 50 09 BVC $E49D A:00 X:55 Y:74 P:E5 SP:FB CYC:186 SL:105 +E494 90 07 BCC $E49D A:00 X:55 Y:74 P:E5 SP:FB CYC:192 SL:105 +E496 BD 00 06 LDA $0600,X @ 0655 = FF A:00 X:55 Y:74 P:E5 SP:FB CYC:198 SL:105 +E499 C9 FF CMP #$FF A:FF X:55 Y:74 P:E5 SP:FB CYC:210 SL:105 +E49B F0 04 BEQ $E4A1 A:FF X:55 Y:74 P:67 SP:FB CYC:216 SL:105 +E4A1 A9 80 LDA #$80 A:FF X:55 Y:74 P:67 SP:FB CYC:225 SL:105 +E4A3 9D 00 06 STA $0600,X @ 0655 = FF A:80 X:55 Y:74 P:E5 SP:FB CYC:231 SL:105 +E4A6 B8 CLV A:80 X:55 Y:74 P:E5 SP:FB CYC:246 SL:105 +E4A7 18 CLC A:80 X:55 Y:74 P:A5 SP:FB CYC:252 SL:105 +E4A8 DE 00 06 DEC $0600,X @ 0655 = 80 A:80 X:55 Y:74 P:A4 SP:FB CYC:258 SL:105 +E4AB F0 0D BEQ $E4BA A:80 X:55 Y:74 P:24 SP:FB CYC:279 SL:105 +E4AD 30 0B BMI $E4BA A:80 X:55 Y:74 P:24 SP:FB CYC:285 SL:105 +E4AF 70 09 BVS $E4BA A:80 X:55 Y:74 P:24 SP:FB CYC:291 SL:105 +E4B1 B0 07 BCS $E4BA A:80 X:55 Y:74 P:24 SP:FB CYC:297 SL:105 +E4B3 BD 00 06 LDA $0600,X @ 0655 = 7F A:80 X:55 Y:74 P:24 SP:FB CYC:303 SL:105 +E4B6 C9 7F CMP #$7F A:7F X:55 Y:74 P:24 SP:FB CYC:315 SL:105 +E4B8 F0 04 BEQ $E4BE A:7F X:55 Y:74 P:27 SP:FB CYC:321 SL:105 +E4BE A9 01 LDA #$01 A:7F X:55 Y:74 P:27 SP:FB CYC:330 SL:105 +E4C0 9D 00 06 STA $0600,X @ 0655 = 7F A:01 X:55 Y:74 P:25 SP:FB CYC:336 SL:105 +E4C3 DE 00 06 DEC $0600,X @ 0655 = 01 A:01 X:55 Y:74 P:25 SP:FB CYC: 10 SL:106 +E4C6 F0 04 BEQ $E4CC A:01 X:55 Y:74 P:27 SP:FB CYC: 31 SL:106 +E4CC A9 33 LDA #$33 A:01 X:55 Y:74 P:27 SP:FB CYC: 40 SL:106 +E4CE 8D 78 06 STA $0678 = 7F A:33 X:55 Y:74 P:25 SP:FB CYC: 46 SL:106 +E4D1 A9 44 LDA #$44 A:33 X:55 Y:74 P:25 SP:FB CYC: 58 SL:106 +E4D3 A0 78 LDY #$78 A:44 X:55 Y:74 P:25 SP:FB CYC: 64 SL:106 +E4D5 A2 00 LDX #$00 A:44 X:55 Y:78 P:25 SP:FB CYC: 70 SL:106 +E4D7 38 SEC A:44 X:00 Y:78 P:27 SP:FB CYC: 76 SL:106 +E4D8 24 01 BIT $01 = FF A:44 X:00 Y:78 P:27 SP:FB CYC: 82 SL:106 +E4DA BE 00 06 LDX $0600,Y @ 0678 = 33 A:44 X:00 Y:78 P:E5 SP:FB CYC: 91 SL:106 +E4DD 90 12 BCC $E4F1 A:44 X:33 Y:78 P:65 SP:FB CYC:103 SL:106 +E4DF 50 10 BVC $E4F1 A:44 X:33 Y:78 P:65 SP:FB CYC:109 SL:106 +E4E1 30 0E BMI $E4F1 A:44 X:33 Y:78 P:65 SP:FB CYC:115 SL:106 +E4E3 F0 0C BEQ $E4F1 A:44 X:33 Y:78 P:65 SP:FB CYC:121 SL:106 +E4E5 E0 33 CPX #$33 A:44 X:33 Y:78 P:65 SP:FB CYC:127 SL:106 +E4E7 D0 08 BNE $E4F1 A:44 X:33 Y:78 P:67 SP:FB CYC:133 SL:106 +E4E9 C0 78 CPY #$78 A:44 X:33 Y:78 P:67 SP:FB CYC:139 SL:106 +E4EB D0 04 BNE $E4F1 A:44 X:33 Y:78 P:67 SP:FB CYC:145 SL:106 +E4ED C9 44 CMP #$44 A:44 X:33 Y:78 P:67 SP:FB CYC:151 SL:106 +E4EF F0 04 BEQ $E4F5 A:44 X:33 Y:78 P:67 SP:FB CYC:157 SL:106 +E4F5 A9 97 LDA #$97 A:44 X:33 Y:78 P:67 SP:FB CYC:166 SL:106 +E4F7 8D 7F 06 STA $067F = 00 A:97 X:33 Y:78 P:E5 SP:FB CYC:172 SL:106 +E4FA A9 47 LDA #$47 A:97 X:33 Y:78 P:E5 SP:FB CYC:184 SL:106 +E4FC A0 FF LDY #$FF A:47 X:33 Y:78 P:65 SP:FB CYC:190 SL:106 +E4FE A2 00 LDX #$00 A:47 X:33 Y:FF P:E5 SP:FB CYC:196 SL:106 +E500 18 CLC A:47 X:00 Y:FF P:67 SP:FB CYC:202 SL:106 +E501 B8 CLV A:47 X:00 Y:FF P:66 SP:FB CYC:208 SL:106 +E502 BE 80 05 LDX $0580,Y @ 067F = 97 A:47 X:00 Y:FF P:26 SP:FB CYC:214 SL:106 +E505 B0 12 BCS $E519 A:47 X:97 Y:FF P:A4 SP:FB CYC:229 SL:106 +E507 70 10 BVS $E519 A:47 X:97 Y:FF P:A4 SP:FB CYC:235 SL:106 +E509 10 0E BPL $E519 A:47 X:97 Y:FF P:A4 SP:FB CYC:241 SL:106 +E50B F0 0C BEQ $E519 A:47 X:97 Y:FF P:A4 SP:FB CYC:247 SL:106 +E50D E0 97 CPX #$97 A:47 X:97 Y:FF P:A4 SP:FB CYC:253 SL:106 +E50F D0 08 BNE $E519 A:47 X:97 Y:FF P:27 SP:FB CYC:259 SL:106 +E511 C0 FF CPY #$FF A:47 X:97 Y:FF P:27 SP:FB CYC:265 SL:106 +E513 D0 04 BNE $E519 A:47 X:97 Y:FF P:27 SP:FB CYC:271 SL:106 +E515 C9 47 CMP #$47 A:47 X:97 Y:FF P:27 SP:FB CYC:277 SL:106 +E517 F0 04 BEQ $E51D A:47 X:97 Y:FF P:27 SP:FB CYC:283 SL:106 +E51D 60 RTS A:47 X:97 Y:FF P:27 SP:FB CYC:292 SL:106 +C62F 20 A3 C6 JSR $C6A3 A:47 X:97 Y:FF P:27 SP:FD CYC:310 SL:106 +C6A3 A0 4E LDY #$4E A:47 X:97 Y:FF P:27 SP:FB CYC:328 SL:106 +C6A5 A9 FF LDA #$FF A:47 X:97 Y:4E P:25 SP:FB CYC:334 SL:106 +C6A7 85 01 STA $01 = FF A:FF X:97 Y:4E P:A5 SP:FB CYC:340 SL:106 +C6A9 20 B0 C6 JSR $C6B0 A:FF X:97 Y:4E P:A5 SP:FB CYC: 8 SL:107 +C6B0 A9 FF LDA #$FF A:FF X:97 Y:4E P:A5 SP:F9 CYC: 26 SL:107 +C6B2 48 PHA A:FF X:97 Y:4E P:A5 SP:F9 CYC: 32 SL:107 +C6B3 A9 AA LDA #$AA A:FF X:97 Y:4E P:A5 SP:F8 CYC: 41 SL:107 +C6B5 D0 05 BNE $C6BC A:AA X:97 Y:4E P:A5 SP:F8 CYC: 47 SL:107 +C6BC 28 PLP A:AA X:97 Y:4E P:A5 SP:F8 CYC: 56 SL:107 +C6BD 04 A9 *NOP $A9 = 00 A:AA X:97 Y:4E P:EF SP:F9 CYC: 68 SL:107 +C6BF 44 A9 *NOP $A9 = 00 A:AA X:97 Y:4E P:EF SP:F9 CYC: 77 SL:107 +C6C1 64 A9 *NOP $A9 = 00 A:AA X:97 Y:4E P:EF SP:F9 CYC: 86 SL:107 +C6C3 EA NOP A:AA X:97 Y:4E P:EF SP:F9 CYC: 95 SL:107 +C6C4 EA NOP A:AA X:97 Y:4E P:EF SP:F9 CYC:101 SL:107 +C6C5 EA NOP A:AA X:97 Y:4E P:EF SP:F9 CYC:107 SL:107 +C6C6 EA NOP A:AA X:97 Y:4E P:EF SP:F9 CYC:113 SL:107 +C6C7 08 PHP A:AA X:97 Y:4E P:EF SP:F9 CYC:119 SL:107 +C6C8 48 PHA A:AA X:97 Y:4E P:EF SP:F8 CYC:128 SL:107 +C6C9 0C A9 A9 *NOP $A9A9 = A9 A:AA X:97 Y:4E P:EF SP:F7 CYC:137 SL:107 +C6CC EA NOP A:AA X:97 Y:4E P:EF SP:F7 CYC:149 SL:107 +C6CD EA NOP A:AA X:97 Y:4E P:EF SP:F7 CYC:155 SL:107 +C6CE EA NOP A:AA X:97 Y:4E P:EF SP:F7 CYC:161 SL:107 +C6CF EA NOP A:AA X:97 Y:4E P:EF SP:F7 CYC:167 SL:107 +C6D0 08 PHP A:AA X:97 Y:4E P:EF SP:F7 CYC:173 SL:107 +C6D1 48 PHA A:AA X:97 Y:4E P:EF SP:F6 CYC:182 SL:107 +C6D2 14 A9 *NOP $A9,X @ 40 = 00 A:AA X:97 Y:4E P:EF SP:F5 CYC:191 SL:107 +C6D4 34 A9 *NOP $A9,X @ 40 = 00 A:AA X:97 Y:4E P:EF SP:F5 CYC:203 SL:107 +C6D6 54 A9 *NOP $A9,X @ 40 = 00 A:AA X:97 Y:4E P:EF SP:F5 CYC:215 SL:107 +C6D8 74 A9 *NOP $A9,X @ 40 = 00 A:AA X:97 Y:4E P:EF SP:F5 CYC:227 SL:107 +C6DA D4 A9 *NOP $A9,X @ 40 = 00 A:AA X:97 Y:4E P:EF SP:F5 CYC:239 SL:107 +C6DC F4 A9 *NOP $A9,X @ 40 = 00 A:AA X:97 Y:4E P:EF SP:F5 CYC:251 SL:107 +C6DE EA NOP A:AA X:97 Y:4E P:EF SP:F5 CYC:263 SL:107 +C6DF EA NOP A:AA X:97 Y:4E P:EF SP:F5 CYC:269 SL:107 +C6E0 EA NOP A:AA X:97 Y:4E P:EF SP:F5 CYC:275 SL:107 +C6E1 EA NOP A:AA X:97 Y:4E P:EF SP:F5 CYC:281 SL:107 +C6E2 08 PHP A:AA X:97 Y:4E P:EF SP:F5 CYC:287 SL:107 +C6E3 48 PHA A:AA X:97 Y:4E P:EF SP:F4 CYC:296 SL:107 +C6E4 1A *NOP A:AA X:97 Y:4E P:EF SP:F3 CYC:305 SL:107 +C6E5 3A *NOP A:AA X:97 Y:4E P:EF SP:F3 CYC:311 SL:107 +C6E6 5A *NOP A:AA X:97 Y:4E P:EF SP:F3 CYC:317 SL:107 +C6E7 7A *NOP A:AA X:97 Y:4E P:EF SP:F3 CYC:323 SL:107 +C6E8 DA *NOP A:AA X:97 Y:4E P:EF SP:F3 CYC:329 SL:107 +C6E9 FA *NOP A:AA X:97 Y:4E P:EF SP:F3 CYC:335 SL:107 +C6EA 80 89 *NOP #$89 A:AA X:97 Y:4E P:EF SP:F3 CYC: 0 SL:108 +C6EC EA NOP A:AA X:97 Y:4E P:EF SP:F3 CYC: 6 SL:108 +C6ED EA NOP A:AA X:97 Y:4E P:EF SP:F3 CYC: 12 SL:108 +C6EE EA NOP A:AA X:97 Y:4E P:EF SP:F3 CYC: 18 SL:108 +C6EF EA NOP A:AA X:97 Y:4E P:EF SP:F3 CYC: 24 SL:108 +C6F0 08 PHP A:AA X:97 Y:4E P:EF SP:F3 CYC: 30 SL:108 +C6F1 48 PHA A:AA X:97 Y:4E P:EF SP:F2 CYC: 39 SL:108 +C6F2 1C A9 A9 *NOP $A9A9,X @ AA40 = 00 A:AA X:97 Y:4E P:EF SP:F1 CYC: 48 SL:108 +C6F5 3C A9 A9 *NOP $A9A9,X @ AA40 = 00 A:AA X:97 Y:4E P:EF SP:F1 CYC: 63 SL:108 +C6F8 5C A9 A9 *NOP $A9A9,X @ AA40 = 00 A:AA X:97 Y:4E P:EF SP:F1 CYC: 78 SL:108 +C6FB 7C A9 A9 *NOP $A9A9,X @ AA40 = 00 A:AA X:97 Y:4E P:EF SP:F1 CYC: 93 SL:108 +C6FE DC A9 A9 *NOP $A9A9,X @ AA40 = 00 A:AA X:97 Y:4E P:EF SP:F1 CYC:108 SL:108 +C701 FC A9 A9 *NOP $A9A9,X @ AA40 = 00 A:AA X:97 Y:4E P:EF SP:F1 CYC:123 SL:108 +C704 EA NOP A:AA X:97 Y:4E P:EF SP:F1 CYC:138 SL:108 +C705 EA NOP A:AA X:97 Y:4E P:EF SP:F1 CYC:144 SL:108 +C706 EA NOP A:AA X:97 Y:4E P:EF SP:F1 CYC:150 SL:108 +C707 EA NOP A:AA X:97 Y:4E P:EF SP:F1 CYC:156 SL:108 +C708 08 PHP A:AA X:97 Y:4E P:EF SP:F1 CYC:162 SL:108 +C709 48 PHA A:AA X:97 Y:4E P:EF SP:F0 CYC:171 SL:108 +C70A A2 05 LDX #$05 A:AA X:97 Y:4E P:EF SP:EF CYC:180 SL:108 +C70C 68 PLA A:AA X:05 Y:4E P:6D SP:EF CYC:186 SL:108 +C70D C9 55 CMP #$55 A:AA X:05 Y:4E P:ED SP:F0 CYC:198 SL:108 +C70F F0 0A BEQ $C71B A:AA X:05 Y:4E P:6D SP:F0 CYC:204 SL:108 +C711 C9 AA CMP #$AA A:AA X:05 Y:4E P:6D SP:F0 CYC:210 SL:108 +C713 F0 06 BEQ $C71B A:AA X:05 Y:4E P:6F SP:F0 CYC:216 SL:108 +C71B 68 PLA A:AA X:05 Y:4E P:6F SP:F0 CYC:225 SL:108 +C71C 29 CB AND #$CB A:FF X:05 Y:4E P:ED SP:F1 CYC:237 SL:108 +C71E C9 00 CMP #$00 A:CB X:05 Y:4E P:ED SP:F1 CYC:243 SL:108 +C720 F0 06 BEQ $C728 A:CB X:05 Y:4E P:ED SP:F1 CYC:249 SL:108 +C722 C9 CB CMP #$CB A:CB X:05 Y:4E P:ED SP:F1 CYC:255 SL:108 +C724 F0 02 BEQ $C728 A:CB X:05 Y:4E P:6F SP:F1 CYC:261 SL:108 +C728 C8 INY A:CB X:05 Y:4E P:6F SP:F1 CYC:270 SL:108 +C729 CA DEX A:CB X:05 Y:4F P:6D SP:F1 CYC:276 SL:108 +C72A D0 E0 BNE $C70C A:CB X:04 Y:4F P:6D SP:F1 CYC:282 SL:108 +C70C 68 PLA A:CB X:04 Y:4F P:6D SP:F1 CYC:291 SL:108 +C70D C9 55 CMP #$55 A:AA X:04 Y:4F P:ED SP:F2 CYC:303 SL:108 +C70F F0 0A BEQ $C71B A:AA X:04 Y:4F P:6D SP:F2 CYC:309 SL:108 +C711 C9 AA CMP #$AA A:AA X:04 Y:4F P:6D SP:F2 CYC:315 SL:108 +C713 F0 06 BEQ $C71B A:AA X:04 Y:4F P:6F SP:F2 CYC:321 SL:108 +C71B 68 PLA A:AA X:04 Y:4F P:6F SP:F2 CYC:330 SL:108 +C71C 29 CB AND #$CB A:FF X:04 Y:4F P:ED SP:F3 CYC: 1 SL:109 +C71E C9 00 CMP #$00 A:CB X:04 Y:4F P:ED SP:F3 CYC: 7 SL:109 +C720 F0 06 BEQ $C728 A:CB X:04 Y:4F P:ED SP:F3 CYC: 13 SL:109 +C722 C9 CB CMP #$CB A:CB X:04 Y:4F P:ED SP:F3 CYC: 19 SL:109 +C724 F0 02 BEQ $C728 A:CB X:04 Y:4F P:6F SP:F3 CYC: 25 SL:109 +C728 C8 INY A:CB X:04 Y:4F P:6F SP:F3 CYC: 34 SL:109 +C729 CA DEX A:CB X:04 Y:50 P:6D SP:F3 CYC: 40 SL:109 +C72A D0 E0 BNE $C70C A:CB X:03 Y:50 P:6D SP:F3 CYC: 46 SL:109 +C70C 68 PLA A:CB X:03 Y:50 P:6D SP:F3 CYC: 55 SL:109 +C70D C9 55 CMP #$55 A:AA X:03 Y:50 P:ED SP:F4 CYC: 67 SL:109 +C70F F0 0A BEQ $C71B A:AA X:03 Y:50 P:6D SP:F4 CYC: 73 SL:109 +C711 C9 AA CMP #$AA A:AA X:03 Y:50 P:6D SP:F4 CYC: 79 SL:109 +C713 F0 06 BEQ $C71B A:AA X:03 Y:50 P:6F SP:F4 CYC: 85 SL:109 +C71B 68 PLA A:AA X:03 Y:50 P:6F SP:F4 CYC: 94 SL:109 +C71C 29 CB AND #$CB A:FF X:03 Y:50 P:ED SP:F5 CYC:106 SL:109 +C71E C9 00 CMP #$00 A:CB X:03 Y:50 P:ED SP:F5 CYC:112 SL:109 +C720 F0 06 BEQ $C728 A:CB X:03 Y:50 P:ED SP:F5 CYC:118 SL:109 +C722 C9 CB CMP #$CB A:CB X:03 Y:50 P:ED SP:F5 CYC:124 SL:109 +C724 F0 02 BEQ $C728 A:CB X:03 Y:50 P:6F SP:F5 CYC:130 SL:109 +C728 C8 INY A:CB X:03 Y:50 P:6F SP:F5 CYC:139 SL:109 +C729 CA DEX A:CB X:03 Y:51 P:6D SP:F5 CYC:145 SL:109 +C72A D0 E0 BNE $C70C A:CB X:02 Y:51 P:6D SP:F5 CYC:151 SL:109 +C70C 68 PLA A:CB X:02 Y:51 P:6D SP:F5 CYC:160 SL:109 +C70D C9 55 CMP #$55 A:AA X:02 Y:51 P:ED SP:F6 CYC:172 SL:109 +C70F F0 0A BEQ $C71B A:AA X:02 Y:51 P:6D SP:F6 CYC:178 SL:109 +C711 C9 AA CMP #$AA A:AA X:02 Y:51 P:6D SP:F6 CYC:184 SL:109 +C713 F0 06 BEQ $C71B A:AA X:02 Y:51 P:6F SP:F6 CYC:190 SL:109 +C71B 68 PLA A:AA X:02 Y:51 P:6F SP:F6 CYC:199 SL:109 +C71C 29 CB AND #$CB A:FF X:02 Y:51 P:ED SP:F7 CYC:211 SL:109 +C71E C9 00 CMP #$00 A:CB X:02 Y:51 P:ED SP:F7 CYC:217 SL:109 +C720 F0 06 BEQ $C728 A:CB X:02 Y:51 P:ED SP:F7 CYC:223 SL:109 +C722 C9 CB CMP #$CB A:CB X:02 Y:51 P:ED SP:F7 CYC:229 SL:109 +C724 F0 02 BEQ $C728 A:CB X:02 Y:51 P:6F SP:F7 CYC:235 SL:109 +C728 C8 INY A:CB X:02 Y:51 P:6F SP:F7 CYC:244 SL:109 +C729 CA DEX A:CB X:02 Y:52 P:6D SP:F7 CYC:250 SL:109 +C72A D0 E0 BNE $C70C A:CB X:01 Y:52 P:6D SP:F7 CYC:256 SL:109 +C70C 68 PLA A:CB X:01 Y:52 P:6D SP:F7 CYC:265 SL:109 +C70D C9 55 CMP #$55 A:AA X:01 Y:52 P:ED SP:F8 CYC:277 SL:109 +C70F F0 0A BEQ $C71B A:AA X:01 Y:52 P:6D SP:F8 CYC:283 SL:109 +C711 C9 AA CMP #$AA A:AA X:01 Y:52 P:6D SP:F8 CYC:289 SL:109 +C713 F0 06 BEQ $C71B A:AA X:01 Y:52 P:6F SP:F8 CYC:295 SL:109 +C71B 68 PLA A:AA X:01 Y:52 P:6F SP:F8 CYC:304 SL:109 +C71C 29 CB AND #$CB A:FF X:01 Y:52 P:ED SP:F9 CYC:316 SL:109 +C71E C9 00 CMP #$00 A:CB X:01 Y:52 P:ED SP:F9 CYC:322 SL:109 +C720 F0 06 BEQ $C728 A:CB X:01 Y:52 P:ED SP:F9 CYC:328 SL:109 +C722 C9 CB CMP #$CB A:CB X:01 Y:52 P:ED SP:F9 CYC:334 SL:109 +C724 F0 02 BEQ $C728 A:CB X:01 Y:52 P:6F SP:F9 CYC:340 SL:109 +C728 C8 INY A:CB X:01 Y:52 P:6F SP:F9 CYC: 8 SL:110 +C729 CA DEX A:CB X:01 Y:53 P:6D SP:F9 CYC: 14 SL:110 +C72A D0 E0 BNE $C70C A:CB X:00 Y:53 P:6F SP:F9 CYC: 20 SL:110 +C72C 60 RTS A:CB X:00 Y:53 P:6F SP:F9 CYC: 26 SL:110 +C6AC 20 B7 C6 JSR $C6B7 A:CB X:00 Y:53 P:6F SP:FB CYC: 44 SL:110 +C6B7 A9 34 LDA #$34 A:CB X:00 Y:53 P:6F SP:F9 CYC: 62 SL:110 +C6B9 48 PHA A:34 X:00 Y:53 P:6D SP:F9 CYC: 68 SL:110 +C6BA A9 55 LDA #$55 A:34 X:00 Y:53 P:6D SP:F8 CYC: 77 SL:110 +C6BC 28 PLP A:55 X:00 Y:53 P:6D SP:F8 CYC: 83 SL:110 +C6BD 04 A9 *NOP $A9 = 00 A:55 X:00 Y:53 P:24 SP:F9 CYC: 95 SL:110 +C6BF 44 A9 *NOP $A9 = 00 A:55 X:00 Y:53 P:24 SP:F9 CYC:104 SL:110 +C6C1 64 A9 *NOP $A9 = 00 A:55 X:00 Y:53 P:24 SP:F9 CYC:113 SL:110 +C6C3 EA NOP A:55 X:00 Y:53 P:24 SP:F9 CYC:122 SL:110 +C6C4 EA NOP A:55 X:00 Y:53 P:24 SP:F9 CYC:128 SL:110 +C6C5 EA NOP A:55 X:00 Y:53 P:24 SP:F9 CYC:134 SL:110 +C6C6 EA NOP A:55 X:00 Y:53 P:24 SP:F9 CYC:140 SL:110 +C6C7 08 PHP A:55 X:00 Y:53 P:24 SP:F9 CYC:146 SL:110 +C6C8 48 PHA A:55 X:00 Y:53 P:24 SP:F8 CYC:155 SL:110 +C6C9 0C A9 A9 *NOP $A9A9 = A9 A:55 X:00 Y:53 P:24 SP:F7 CYC:164 SL:110 +C6CC EA NOP A:55 X:00 Y:53 P:24 SP:F7 CYC:176 SL:110 +C6CD EA NOP A:55 X:00 Y:53 P:24 SP:F7 CYC:182 SL:110 +C6CE EA NOP A:55 X:00 Y:53 P:24 SP:F7 CYC:188 SL:110 +C6CF EA NOP A:55 X:00 Y:53 P:24 SP:F7 CYC:194 SL:110 +C6D0 08 PHP A:55 X:00 Y:53 P:24 SP:F7 CYC:200 SL:110 +C6D1 48 PHA A:55 X:00 Y:53 P:24 SP:F6 CYC:209 SL:110 +C6D2 14 A9 *NOP $A9,X @ A9 = 00 A:55 X:00 Y:53 P:24 SP:F5 CYC:218 SL:110 +C6D4 34 A9 *NOP $A9,X @ A9 = 00 A:55 X:00 Y:53 P:24 SP:F5 CYC:230 SL:110 +C6D6 54 A9 *NOP $A9,X @ A9 = 00 A:55 X:00 Y:53 P:24 SP:F5 CYC:242 SL:110 +C6D8 74 A9 *NOP $A9,X @ A9 = 00 A:55 X:00 Y:53 P:24 SP:F5 CYC:254 SL:110 +C6DA D4 A9 *NOP $A9,X @ A9 = 00 A:55 X:00 Y:53 P:24 SP:F5 CYC:266 SL:110 +C6DC F4 A9 *NOP $A9,X @ A9 = 00 A:55 X:00 Y:53 P:24 SP:F5 CYC:278 SL:110 +C6DE EA NOP A:55 X:00 Y:53 P:24 SP:F5 CYC:290 SL:110 +C6DF EA NOP A:55 X:00 Y:53 P:24 SP:F5 CYC:296 SL:110 +C6E0 EA NOP A:55 X:00 Y:53 P:24 SP:F5 CYC:302 SL:110 +C6E1 EA NOP A:55 X:00 Y:53 P:24 SP:F5 CYC:308 SL:110 +C6E2 08 PHP A:55 X:00 Y:53 P:24 SP:F5 CYC:314 SL:110 +C6E3 48 PHA A:55 X:00 Y:53 P:24 SP:F4 CYC:323 SL:110 +C6E4 1A *NOP A:55 X:00 Y:53 P:24 SP:F3 CYC:332 SL:110 +C6E5 3A *NOP A:55 X:00 Y:53 P:24 SP:F3 CYC:338 SL:110 +C6E6 5A *NOP A:55 X:00 Y:53 P:24 SP:F3 CYC: 3 SL:111 +C6E7 7A *NOP A:55 X:00 Y:53 P:24 SP:F3 CYC: 9 SL:111 +C6E8 DA *NOP A:55 X:00 Y:53 P:24 SP:F3 CYC: 15 SL:111 +C6E9 FA *NOP A:55 X:00 Y:53 P:24 SP:F3 CYC: 21 SL:111 +C6EA 80 89 *NOP #$89 A:55 X:00 Y:53 P:24 SP:F3 CYC: 27 SL:111 +C6EC EA NOP A:55 X:00 Y:53 P:24 SP:F3 CYC: 33 SL:111 +C6ED EA NOP A:55 X:00 Y:53 P:24 SP:F3 CYC: 39 SL:111 +C6EE EA NOP A:55 X:00 Y:53 P:24 SP:F3 CYC: 45 SL:111 +C6EF EA NOP A:55 X:00 Y:53 P:24 SP:F3 CYC: 51 SL:111 +C6F0 08 PHP A:55 X:00 Y:53 P:24 SP:F3 CYC: 57 SL:111 +C6F1 48 PHA A:55 X:00 Y:53 P:24 SP:F2 CYC: 66 SL:111 +C6F2 1C A9 A9 *NOP $A9A9,X @ A9A9 = A9 A:55 X:00 Y:53 P:24 SP:F1 CYC: 75 SL:111 +C6F5 3C A9 A9 *NOP $A9A9,X @ A9A9 = A9 A:55 X:00 Y:53 P:24 SP:F1 CYC: 87 SL:111 +C6F8 5C A9 A9 *NOP $A9A9,X @ A9A9 = A9 A:55 X:00 Y:53 P:24 SP:F1 CYC: 99 SL:111 +C6FB 7C A9 A9 *NOP $A9A9,X @ A9A9 = A9 A:55 X:00 Y:53 P:24 SP:F1 CYC:111 SL:111 +C6FE DC A9 A9 *NOP $A9A9,X @ A9A9 = A9 A:55 X:00 Y:53 P:24 SP:F1 CYC:123 SL:111 +C701 FC A9 A9 *NOP $A9A9,X @ A9A9 = A9 A:55 X:00 Y:53 P:24 SP:F1 CYC:135 SL:111 +C704 EA NOP A:55 X:00 Y:53 P:24 SP:F1 CYC:147 SL:111 +C705 EA NOP A:55 X:00 Y:53 P:24 SP:F1 CYC:153 SL:111 +C706 EA NOP A:55 X:00 Y:53 P:24 SP:F1 CYC:159 SL:111 +C707 EA NOP A:55 X:00 Y:53 P:24 SP:F1 CYC:165 SL:111 +C708 08 PHP A:55 X:00 Y:53 P:24 SP:F1 CYC:171 SL:111 +C709 48 PHA A:55 X:00 Y:53 P:24 SP:F0 CYC:180 SL:111 +C70A A2 05 LDX #$05 A:55 X:00 Y:53 P:24 SP:EF CYC:189 SL:111 +C70C 68 PLA A:55 X:05 Y:53 P:24 SP:EF CYC:195 SL:111 +C70D C9 55 CMP #$55 A:55 X:05 Y:53 P:24 SP:F0 CYC:207 SL:111 +C70F F0 0A BEQ $C71B A:55 X:05 Y:53 P:27 SP:F0 CYC:213 SL:111 +C71B 68 PLA A:55 X:05 Y:53 P:27 SP:F0 CYC:222 SL:111 +C71C 29 CB AND #$CB A:34 X:05 Y:53 P:25 SP:F1 CYC:234 SL:111 +C71E C9 00 CMP #$00 A:00 X:05 Y:53 P:27 SP:F1 CYC:240 SL:111 +C720 F0 06 BEQ $C728 A:00 X:05 Y:53 P:27 SP:F1 CYC:246 SL:111 +C728 C8 INY A:00 X:05 Y:53 P:27 SP:F1 CYC:255 SL:111 +C729 CA DEX A:00 X:05 Y:54 P:25 SP:F1 CYC:261 SL:111 +C72A D0 E0 BNE $C70C A:00 X:04 Y:54 P:25 SP:F1 CYC:267 SL:111 +C70C 68 PLA A:00 X:04 Y:54 P:25 SP:F1 CYC:276 SL:111 +C70D C9 55 CMP #$55 A:55 X:04 Y:54 P:25 SP:F2 CYC:288 SL:111 +C70F F0 0A BEQ $C71B A:55 X:04 Y:54 P:27 SP:F2 CYC:294 SL:111 +C71B 68 PLA A:55 X:04 Y:54 P:27 SP:F2 CYC:303 SL:111 +C71C 29 CB AND #$CB A:34 X:04 Y:54 P:25 SP:F3 CYC:315 SL:111 +C71E C9 00 CMP #$00 A:00 X:04 Y:54 P:27 SP:F3 CYC:321 SL:111 +C720 F0 06 BEQ $C728 A:00 X:04 Y:54 P:27 SP:F3 CYC:327 SL:111 +C728 C8 INY A:00 X:04 Y:54 P:27 SP:F3 CYC:336 SL:111 +C729 CA DEX A:00 X:04 Y:55 P:25 SP:F3 CYC: 1 SL:112 +C72A D0 E0 BNE $C70C A:00 X:03 Y:55 P:25 SP:F3 CYC: 7 SL:112 +C70C 68 PLA A:00 X:03 Y:55 P:25 SP:F3 CYC: 16 SL:112 +C70D C9 55 CMP #$55 A:55 X:03 Y:55 P:25 SP:F4 CYC: 28 SL:112 +C70F F0 0A BEQ $C71B A:55 X:03 Y:55 P:27 SP:F4 CYC: 34 SL:112 +C71B 68 PLA A:55 X:03 Y:55 P:27 SP:F4 CYC: 43 SL:112 +C71C 29 CB AND #$CB A:34 X:03 Y:55 P:25 SP:F5 CYC: 55 SL:112 +C71E C9 00 CMP #$00 A:00 X:03 Y:55 P:27 SP:F5 CYC: 61 SL:112 +C720 F0 06 BEQ $C728 A:00 X:03 Y:55 P:27 SP:F5 CYC: 67 SL:112 +C728 C8 INY A:00 X:03 Y:55 P:27 SP:F5 CYC: 76 SL:112 +C729 CA DEX A:00 X:03 Y:56 P:25 SP:F5 CYC: 82 SL:112 +C72A D0 E0 BNE $C70C A:00 X:02 Y:56 P:25 SP:F5 CYC: 88 SL:112 +C70C 68 PLA A:00 X:02 Y:56 P:25 SP:F5 CYC: 97 SL:112 +C70D C9 55 CMP #$55 A:55 X:02 Y:56 P:25 SP:F6 CYC:109 SL:112 +C70F F0 0A BEQ $C71B A:55 X:02 Y:56 P:27 SP:F6 CYC:115 SL:112 +C71B 68 PLA A:55 X:02 Y:56 P:27 SP:F6 CYC:124 SL:112 +C71C 29 CB AND #$CB A:34 X:02 Y:56 P:25 SP:F7 CYC:136 SL:112 +C71E C9 00 CMP #$00 A:00 X:02 Y:56 P:27 SP:F7 CYC:142 SL:112 +C720 F0 06 BEQ $C728 A:00 X:02 Y:56 P:27 SP:F7 CYC:148 SL:112 +C728 C8 INY A:00 X:02 Y:56 P:27 SP:F7 CYC:157 SL:112 +C729 CA DEX A:00 X:02 Y:57 P:25 SP:F7 CYC:163 SL:112 +C72A D0 E0 BNE $C70C A:00 X:01 Y:57 P:25 SP:F7 CYC:169 SL:112 +C70C 68 PLA A:00 X:01 Y:57 P:25 SP:F7 CYC:178 SL:112 +C70D C9 55 CMP #$55 A:55 X:01 Y:57 P:25 SP:F8 CYC:190 SL:112 +C70F F0 0A BEQ $C71B A:55 X:01 Y:57 P:27 SP:F8 CYC:196 SL:112 +C71B 68 PLA A:55 X:01 Y:57 P:27 SP:F8 CYC:205 SL:112 +C71C 29 CB AND #$CB A:34 X:01 Y:57 P:25 SP:F9 CYC:217 SL:112 +C71E C9 00 CMP #$00 A:00 X:01 Y:57 P:27 SP:F9 CYC:223 SL:112 +C720 F0 06 BEQ $C728 A:00 X:01 Y:57 P:27 SP:F9 CYC:229 SL:112 +C728 C8 INY A:00 X:01 Y:57 P:27 SP:F9 CYC:238 SL:112 +C729 CA DEX A:00 X:01 Y:58 P:25 SP:F9 CYC:244 SL:112 +C72A D0 E0 BNE $C70C A:00 X:00 Y:58 P:27 SP:F9 CYC:250 SL:112 +C72C 60 RTS A:00 X:00 Y:58 P:27 SP:F9 CYC:256 SL:112 +C6AF 60 RTS A:00 X:00 Y:58 P:27 SP:FB CYC:274 SL:112 +C632 20 1E E5 JSR $E51E A:00 X:00 Y:58 P:27 SP:FD CYC:292 SL:112 +E51E A9 55 LDA #$55 A:00 X:00 Y:58 P:27 SP:FB CYC:310 SL:112 +E520 8D 80 05 STA $0580 = 00 A:55 X:00 Y:58 P:25 SP:FB CYC:316 SL:112 +E523 A9 AA LDA #$AA A:55 X:00 Y:58 P:25 SP:FB CYC:328 SL:112 +E525 8D 32 04 STA $0432 = 00 A:AA X:00 Y:58 P:A5 SP:FB CYC:334 SL:112 +E528 A9 80 LDA #$80 A:AA X:00 Y:58 P:A5 SP:FB CYC: 5 SL:113 +E52A 85 43 STA $43 = 00 A:80 X:00 Y:58 P:A5 SP:FB CYC: 11 SL:113 +E52C A9 05 LDA #$05 A:80 X:00 Y:58 P:A5 SP:FB CYC: 20 SL:113 +E52E 85 44 STA $44 = 00 A:05 X:00 Y:58 P:25 SP:FB CYC: 26 SL:113 +E530 A9 32 LDA #$32 A:05 X:00 Y:58 P:25 SP:FB CYC: 35 SL:113 +E532 85 45 STA $45 = 00 A:32 X:00 Y:58 P:25 SP:FB CYC: 41 SL:113 +E534 A9 04 LDA #$04 A:32 X:00 Y:58 P:25 SP:FB CYC: 50 SL:113 +E536 85 46 STA $46 = 00 A:04 X:00 Y:58 P:25 SP:FB CYC: 56 SL:113 +E538 A2 03 LDX #$03 A:04 X:00 Y:58 P:25 SP:FB CYC: 65 SL:113 +E53A A0 77 LDY #$77 A:04 X:03 Y:58 P:25 SP:FB CYC: 71 SL:113 +E53C A9 FF LDA #$FF A:04 X:03 Y:77 P:25 SP:FB CYC: 77 SL:113 +E53E 85 01 STA $01 = FF A:FF X:03 Y:77 P:A5 SP:FB CYC: 83 SL:113 +E540 24 01 BIT $01 = FF A:FF X:03 Y:77 P:A5 SP:FB CYC: 92 SL:113 +E542 38 SEC A:FF X:03 Y:77 P:E5 SP:FB CYC:101 SL:113 +E543 A9 00 LDA #$00 A:FF X:03 Y:77 P:E5 SP:FB CYC:107 SL:113 +E545 A3 40 *LAX ($40,X) @ 43 = 0580 = 55 A:00 X:03 Y:77 P:67 SP:FB CYC:113 SL:113 +E547 EA NOP A:55 X:55 Y:77 P:65 SP:FB CYC:131 SL:113 +E548 EA NOP A:55 X:55 Y:77 P:65 SP:FB CYC:137 SL:113 +E549 EA NOP A:55 X:55 Y:77 P:65 SP:FB CYC:143 SL:113 +E54A EA NOP A:55 X:55 Y:77 P:65 SP:FB CYC:149 SL:113 +E54B F0 12 BEQ $E55F A:55 X:55 Y:77 P:65 SP:FB CYC:155 SL:113 +E54D 30 10 BMI $E55F A:55 X:55 Y:77 P:65 SP:FB CYC:161 SL:113 +E54F 50 0E BVC $E55F A:55 X:55 Y:77 P:65 SP:FB CYC:167 SL:113 +E551 90 0C BCC $E55F A:55 X:55 Y:77 P:65 SP:FB CYC:173 SL:113 +E553 C9 55 CMP #$55 A:55 X:55 Y:77 P:65 SP:FB CYC:179 SL:113 +E555 D0 08 BNE $E55F A:55 X:55 Y:77 P:67 SP:FB CYC:185 SL:113 +E557 E0 55 CPX #$55 A:55 X:55 Y:77 P:67 SP:FB CYC:191 SL:113 +E559 D0 04 BNE $E55F A:55 X:55 Y:77 P:67 SP:FB CYC:197 SL:113 +E55B C0 77 CPY #$77 A:55 X:55 Y:77 P:67 SP:FB CYC:203 SL:113 +E55D F0 04 BEQ $E563 A:55 X:55 Y:77 P:67 SP:FB CYC:209 SL:113 +E563 A2 05 LDX #$05 A:55 X:55 Y:77 P:67 SP:FB CYC:218 SL:113 +E565 A0 33 LDY #$33 A:55 X:05 Y:77 P:65 SP:FB CYC:224 SL:113 +E567 B8 CLV A:55 X:05 Y:33 P:65 SP:FB CYC:230 SL:113 +E568 18 CLC A:55 X:05 Y:33 P:25 SP:FB CYC:236 SL:113 +E569 A9 00 LDA #$00 A:55 X:05 Y:33 P:24 SP:FB CYC:242 SL:113 +E56B A3 40 *LAX ($40,X) @ 45 = 0432 = AA A:00 X:05 Y:33 P:26 SP:FB CYC:248 SL:113 +E56D EA NOP A:AA X:AA Y:33 P:A4 SP:FB CYC:266 SL:113 +E56E EA NOP A:AA X:AA Y:33 P:A4 SP:FB CYC:272 SL:113 +E56F EA NOP A:AA X:AA Y:33 P:A4 SP:FB CYC:278 SL:113 +E570 EA NOP A:AA X:AA Y:33 P:A4 SP:FB CYC:284 SL:113 +E571 F0 12 BEQ $E585 A:AA X:AA Y:33 P:A4 SP:FB CYC:290 SL:113 +E573 10 10 BPL $E585 A:AA X:AA Y:33 P:A4 SP:FB CYC:296 SL:113 +E575 70 0E BVS $E585 A:AA X:AA Y:33 P:A4 SP:FB CYC:302 SL:113 +E577 B0 0C BCS $E585 A:AA X:AA Y:33 P:A4 SP:FB CYC:308 SL:113 +E579 C9 AA CMP #$AA A:AA X:AA Y:33 P:A4 SP:FB CYC:314 SL:113 +E57B D0 08 BNE $E585 A:AA X:AA Y:33 P:27 SP:FB CYC:320 SL:113 +E57D E0 AA CPX #$AA A:AA X:AA Y:33 P:27 SP:FB CYC:326 SL:113 +E57F D0 04 BNE $E585 A:AA X:AA Y:33 P:27 SP:FB CYC:332 SL:113 +E581 C0 33 CPY #$33 A:AA X:AA Y:33 P:27 SP:FB CYC:338 SL:113 +E583 F0 04 BEQ $E589 A:AA X:AA Y:33 P:27 SP:FB CYC: 3 SL:114 +E589 A9 87 LDA #$87 A:AA X:AA Y:33 P:27 SP:FB CYC: 12 SL:114 +E58B 85 67 STA $67 = 00 A:87 X:AA Y:33 P:A5 SP:FB CYC: 18 SL:114 +E58D A9 32 LDA #$32 A:87 X:AA Y:33 P:A5 SP:FB CYC: 27 SL:114 +E58F 85 68 STA $68 = 00 A:32 X:AA Y:33 P:25 SP:FB CYC: 33 SL:114 +E591 A0 57 LDY #$57 A:32 X:AA Y:33 P:25 SP:FB CYC: 42 SL:114 +E593 24 01 BIT $01 = FF A:32 X:AA Y:57 P:25 SP:FB CYC: 48 SL:114 +E595 38 SEC A:32 X:AA Y:57 P:E5 SP:FB CYC: 57 SL:114 +E596 A9 00 LDA #$00 A:32 X:AA Y:57 P:E5 SP:FB CYC: 63 SL:114 +E598 A7 67 *LAX $67 = 87 A:00 X:AA Y:57 P:67 SP:FB CYC: 69 SL:114 +E59A EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC: 78 SL:114 +E59B EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC: 84 SL:114 +E59C EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC: 90 SL:114 +E59D EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC: 96 SL:114 +E59E F0 12 BEQ $E5B2 A:87 X:87 Y:57 P:E5 SP:FB CYC:102 SL:114 +E5A0 10 10 BPL $E5B2 A:87 X:87 Y:57 P:E5 SP:FB CYC:108 SL:114 +E5A2 50 0E BVC $E5B2 A:87 X:87 Y:57 P:E5 SP:FB CYC:114 SL:114 +E5A4 90 0C BCC $E5B2 A:87 X:87 Y:57 P:E5 SP:FB CYC:120 SL:114 +E5A6 C9 87 CMP #$87 A:87 X:87 Y:57 P:E5 SP:FB CYC:126 SL:114 +E5A8 D0 08 BNE $E5B2 A:87 X:87 Y:57 P:67 SP:FB CYC:132 SL:114 +E5AA E0 87 CPX #$87 A:87 X:87 Y:57 P:67 SP:FB CYC:138 SL:114 +E5AC D0 04 BNE $E5B2 A:87 X:87 Y:57 P:67 SP:FB CYC:144 SL:114 +E5AE C0 57 CPY #$57 A:87 X:87 Y:57 P:67 SP:FB CYC:150 SL:114 +E5B0 F0 04 BEQ $E5B6 A:87 X:87 Y:57 P:67 SP:FB CYC:156 SL:114 +E5B6 A0 53 LDY #$53 A:87 X:87 Y:57 P:67 SP:FB CYC:165 SL:114 +E5B8 B8 CLV A:87 X:87 Y:53 P:65 SP:FB CYC:171 SL:114 +E5B9 18 CLC A:87 X:87 Y:53 P:25 SP:FB CYC:177 SL:114 +E5BA A9 00 LDA #$00 A:87 X:87 Y:53 P:24 SP:FB CYC:183 SL:114 +E5BC A7 68 *LAX $68 = 32 A:00 X:87 Y:53 P:26 SP:FB CYC:189 SL:114 +E5BE EA NOP A:32 X:32 Y:53 P:24 SP:FB CYC:198 SL:114 +E5BF EA NOP A:32 X:32 Y:53 P:24 SP:FB CYC:204 SL:114 +E5C0 EA NOP A:32 X:32 Y:53 P:24 SP:FB CYC:210 SL:114 +E5C1 EA NOP A:32 X:32 Y:53 P:24 SP:FB CYC:216 SL:114 +E5C2 F0 12 BEQ $E5D6 A:32 X:32 Y:53 P:24 SP:FB CYC:222 SL:114 +E5C4 30 10 BMI $E5D6 A:32 X:32 Y:53 P:24 SP:FB CYC:228 SL:114 +E5C6 70 0E BVS $E5D6 A:32 X:32 Y:53 P:24 SP:FB CYC:234 SL:114 +E5C8 B0 0C BCS $E5D6 A:32 X:32 Y:53 P:24 SP:FB CYC:240 SL:114 +E5CA C9 32 CMP #$32 A:32 X:32 Y:53 P:24 SP:FB CYC:246 SL:114 +E5CC D0 08 BNE $E5D6 A:32 X:32 Y:53 P:27 SP:FB CYC:252 SL:114 +E5CE E0 32 CPX #$32 A:32 X:32 Y:53 P:27 SP:FB CYC:258 SL:114 +E5D0 D0 04 BNE $E5D6 A:32 X:32 Y:53 P:27 SP:FB CYC:264 SL:114 +E5D2 C0 53 CPY #$53 A:32 X:32 Y:53 P:27 SP:FB CYC:270 SL:114 +E5D4 F0 04 BEQ $E5DA A:32 X:32 Y:53 P:27 SP:FB CYC:276 SL:114 +E5DA A9 87 LDA #$87 A:32 X:32 Y:53 P:27 SP:FB CYC:285 SL:114 +E5DC 8D 77 05 STA $0577 = 00 A:87 X:32 Y:53 P:A5 SP:FB CYC:291 SL:114 +E5DF A9 32 LDA #$32 A:87 X:32 Y:53 P:A5 SP:FB CYC:303 SL:114 +E5E1 8D 78 05 STA $0578 = 00 A:32 X:32 Y:53 P:25 SP:FB CYC:309 SL:114 +E5E4 A0 57 LDY #$57 A:32 X:32 Y:53 P:25 SP:FB CYC:321 SL:114 +E5E6 24 01 BIT $01 = FF A:32 X:32 Y:57 P:25 SP:FB CYC:327 SL:114 +E5E8 38 SEC A:32 X:32 Y:57 P:E5 SP:FB CYC:336 SL:114 +E5E9 A9 00 LDA #$00 A:32 X:32 Y:57 P:E5 SP:FB CYC: 1 SL:115 +E5EB AF 77 05 *LAX $0577 = 87 A:00 X:32 Y:57 P:67 SP:FB CYC: 7 SL:115 +E5EE EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC: 19 SL:115 +E5EF EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC: 25 SL:115 +E5F0 EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC: 31 SL:115 +E5F1 EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC: 37 SL:115 +E5F2 F0 12 BEQ $E606 A:87 X:87 Y:57 P:E5 SP:FB CYC: 43 SL:115 +E5F4 10 10 BPL $E606 A:87 X:87 Y:57 P:E5 SP:FB CYC: 49 SL:115 +E5F6 50 0E BVC $E606 A:87 X:87 Y:57 P:E5 SP:FB CYC: 55 SL:115 +E5F8 90 0C BCC $E606 A:87 X:87 Y:57 P:E5 SP:FB CYC: 61 SL:115 +E5FA C9 87 CMP #$87 A:87 X:87 Y:57 P:E5 SP:FB CYC: 67 SL:115 +E5FC D0 08 BNE $E606 A:87 X:87 Y:57 P:67 SP:FB CYC: 73 SL:115 +E5FE E0 87 CPX #$87 A:87 X:87 Y:57 P:67 SP:FB CYC: 79 SL:115 +E600 D0 04 BNE $E606 A:87 X:87 Y:57 P:67 SP:FB CYC: 85 SL:115 +E602 C0 57 CPY #$57 A:87 X:87 Y:57 P:67 SP:FB CYC: 91 SL:115 +E604 F0 04 BEQ $E60A A:87 X:87 Y:57 P:67 SP:FB CYC: 97 SL:115 +E60A A0 53 LDY #$53 A:87 X:87 Y:57 P:67 SP:FB CYC:106 SL:115 +E60C B8 CLV A:87 X:87 Y:53 P:65 SP:FB CYC:112 SL:115 +E60D 18 CLC A:87 X:87 Y:53 P:25 SP:FB CYC:118 SL:115 +E60E A9 00 LDA #$00 A:87 X:87 Y:53 P:24 SP:FB CYC:124 SL:115 +E610 AF 78 05 *LAX $0578 = 32 A:00 X:87 Y:53 P:26 SP:FB CYC:130 SL:115 +E613 EA NOP A:32 X:32 Y:53 P:24 SP:FB CYC:142 SL:115 +E614 EA NOP A:32 X:32 Y:53 P:24 SP:FB CYC:148 SL:115 +E615 EA NOP A:32 X:32 Y:53 P:24 SP:FB CYC:154 SL:115 +E616 EA NOP A:32 X:32 Y:53 P:24 SP:FB CYC:160 SL:115 +E617 F0 12 BEQ $E62B A:32 X:32 Y:53 P:24 SP:FB CYC:166 SL:115 +E619 30 10 BMI $E62B A:32 X:32 Y:53 P:24 SP:FB CYC:172 SL:115 +E61B 70 0E BVS $E62B A:32 X:32 Y:53 P:24 SP:FB CYC:178 SL:115 +E61D B0 0C BCS $E62B A:32 X:32 Y:53 P:24 SP:FB CYC:184 SL:115 +E61F C9 32 CMP #$32 A:32 X:32 Y:53 P:24 SP:FB CYC:190 SL:115 +E621 D0 08 BNE $E62B A:32 X:32 Y:53 P:27 SP:FB CYC:196 SL:115 +E623 E0 32 CPX #$32 A:32 X:32 Y:53 P:27 SP:FB CYC:202 SL:115 +E625 D0 04 BNE $E62B A:32 X:32 Y:53 P:27 SP:FB CYC:208 SL:115 +E627 C0 53 CPY #$53 A:32 X:32 Y:53 P:27 SP:FB CYC:214 SL:115 +E629 F0 04 BEQ $E62F A:32 X:32 Y:53 P:27 SP:FB CYC:220 SL:115 +E62F A9 FF LDA #$FF A:32 X:32 Y:53 P:27 SP:FB CYC:229 SL:115 +E631 85 43 STA $43 = 80 A:FF X:32 Y:53 P:A5 SP:FB CYC:235 SL:115 +E633 A9 04 LDA #$04 A:FF X:32 Y:53 P:A5 SP:FB CYC:244 SL:115 +E635 85 44 STA $44 = 05 A:04 X:32 Y:53 P:25 SP:FB CYC:250 SL:115 +E637 A9 32 LDA #$32 A:04 X:32 Y:53 P:25 SP:FB CYC:259 SL:115 +E639 85 45 STA $45 = 32 A:32 X:32 Y:53 P:25 SP:FB CYC:265 SL:115 +E63B A9 04 LDA #$04 A:32 X:32 Y:53 P:25 SP:FB CYC:274 SL:115 +E63D 85 46 STA $46 = 04 A:04 X:32 Y:53 P:25 SP:FB CYC:280 SL:115 +E63F A9 55 LDA #$55 A:04 X:32 Y:53 P:25 SP:FB CYC:289 SL:115 +E641 8D 80 05 STA $0580 = 55 A:55 X:32 Y:53 P:25 SP:FB CYC:295 SL:115 +E644 A9 AA LDA #$AA A:55 X:32 Y:53 P:25 SP:FB CYC:307 SL:115 +E646 8D 32 04 STA $0432 = AA A:AA X:32 Y:53 P:A5 SP:FB CYC:313 SL:115 +E649 A2 03 LDX #$03 A:AA X:32 Y:53 P:A5 SP:FB CYC:325 SL:115 +E64B A0 81 LDY #$81 A:AA X:03 Y:53 P:25 SP:FB CYC:331 SL:115 +E64D 24 01 BIT $01 = FF A:AA X:03 Y:81 P:A5 SP:FB CYC:337 SL:115 +E64F 38 SEC A:AA X:03 Y:81 P:E5 SP:FB CYC: 5 SL:116 +E650 A9 00 LDA #$00 A:AA X:03 Y:81 P:E5 SP:FB CYC: 11 SL:116 +E652 B3 43 *LAX ($43),Y = 04FF @ 0580 = 55 A:00 X:03 Y:81 P:67 SP:FB CYC: 17 SL:116 +E654 EA NOP A:55 X:55 Y:81 P:65 SP:FB CYC: 35 SL:116 +E655 EA NOP A:55 X:55 Y:81 P:65 SP:FB CYC: 41 SL:116 +E656 EA NOP A:55 X:55 Y:81 P:65 SP:FB CYC: 47 SL:116 +E657 EA NOP A:55 X:55 Y:81 P:65 SP:FB CYC: 53 SL:116 +E658 F0 12 BEQ $E66C A:55 X:55 Y:81 P:65 SP:FB CYC: 59 SL:116 +E65A 30 10 BMI $E66C A:55 X:55 Y:81 P:65 SP:FB CYC: 65 SL:116 +E65C 50 0E BVC $E66C A:55 X:55 Y:81 P:65 SP:FB CYC: 71 SL:116 +E65E 90 0C BCC $E66C A:55 X:55 Y:81 P:65 SP:FB CYC: 77 SL:116 +E660 C9 55 CMP #$55 A:55 X:55 Y:81 P:65 SP:FB CYC: 83 SL:116 +E662 D0 08 BNE $E66C A:55 X:55 Y:81 P:67 SP:FB CYC: 89 SL:116 +E664 E0 55 CPX #$55 A:55 X:55 Y:81 P:67 SP:FB CYC: 95 SL:116 +E666 D0 04 BNE $E66C A:55 X:55 Y:81 P:67 SP:FB CYC:101 SL:116 +E668 C0 81 CPY #$81 A:55 X:55 Y:81 P:67 SP:FB CYC:107 SL:116 +E66A F0 04 BEQ $E670 A:55 X:55 Y:81 P:67 SP:FB CYC:113 SL:116 +E670 A2 05 LDX #$05 A:55 X:55 Y:81 P:67 SP:FB CYC:122 SL:116 +E672 A0 00 LDY #$00 A:55 X:05 Y:81 P:65 SP:FB CYC:128 SL:116 +E674 B8 CLV A:55 X:05 Y:00 P:67 SP:FB CYC:134 SL:116 +E675 18 CLC A:55 X:05 Y:00 P:27 SP:FB CYC:140 SL:116 +E676 A9 00 LDA #$00 A:55 X:05 Y:00 P:26 SP:FB CYC:146 SL:116 +E678 B3 45 *LAX ($45),Y = 0432 @ 0432 = AA A:00 X:05 Y:00 P:26 SP:FB CYC:152 SL:116 +E67A EA NOP A:AA X:AA Y:00 P:A4 SP:FB CYC:167 SL:116 +E67B EA NOP A:AA X:AA Y:00 P:A4 SP:FB CYC:173 SL:116 +E67C EA NOP A:AA X:AA Y:00 P:A4 SP:FB CYC:179 SL:116 +E67D EA NOP A:AA X:AA Y:00 P:A4 SP:FB CYC:185 SL:116 +E67E F0 12 BEQ $E692 A:AA X:AA Y:00 P:A4 SP:FB CYC:191 SL:116 +E680 10 10 BPL $E692 A:AA X:AA Y:00 P:A4 SP:FB CYC:197 SL:116 +E682 70 0E BVS $E692 A:AA X:AA Y:00 P:A4 SP:FB CYC:203 SL:116 +E684 B0 0C BCS $E692 A:AA X:AA Y:00 P:A4 SP:FB CYC:209 SL:116 +E686 C9 AA CMP #$AA A:AA X:AA Y:00 P:A4 SP:FB CYC:215 SL:116 +E688 D0 08 BNE $E692 A:AA X:AA Y:00 P:27 SP:FB CYC:221 SL:116 +E68A E0 AA CPX #$AA A:AA X:AA Y:00 P:27 SP:FB CYC:227 SL:116 +E68C D0 04 BNE $E692 A:AA X:AA Y:00 P:27 SP:FB CYC:233 SL:116 +E68E C0 00 CPY #$00 A:AA X:AA Y:00 P:27 SP:FB CYC:239 SL:116 +E690 F0 04 BEQ $E696 A:AA X:AA Y:00 P:27 SP:FB CYC:245 SL:116 +E696 A9 87 LDA #$87 A:AA X:AA Y:00 P:27 SP:FB CYC:254 SL:116 +E698 85 67 STA $67 = 87 A:87 X:AA Y:00 P:A5 SP:FB CYC:260 SL:116 +E69A A9 32 LDA #$32 A:87 X:AA Y:00 P:A5 SP:FB CYC:269 SL:116 +E69C 85 68 STA $68 = 32 A:32 X:AA Y:00 P:25 SP:FB CYC:275 SL:116 +E69E A0 57 LDY #$57 A:32 X:AA Y:00 P:25 SP:FB CYC:284 SL:116 +E6A0 24 01 BIT $01 = FF A:32 X:AA Y:57 P:25 SP:FB CYC:290 SL:116 +E6A2 38 SEC A:32 X:AA Y:57 P:E5 SP:FB CYC:299 SL:116 +E6A3 A9 00 LDA #$00 A:32 X:AA Y:57 P:E5 SP:FB CYC:305 SL:116 +E6A5 B7 10 *LAX $10,Y @ 67 = 87 A:00 X:AA Y:57 P:67 SP:FB CYC:311 SL:116 +E6A7 EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC:323 SL:116 +E6A8 EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC:329 SL:116 +E6A9 EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC:335 SL:116 +E6AA EA NOP A:87 X:87 Y:57 P:E5 SP:FB CYC: 0 SL:117 +E6AB F0 12 BEQ $E6BF A:87 X:87 Y:57 P:E5 SP:FB CYC: 6 SL:117 +E6AD 10 10 BPL $E6BF A:87 X:87 Y:57 P:E5 SP:FB CYC: 12 SL:117 +E6AF 50 0E BVC $E6BF A:87 X:87 Y:57 P:E5 SP:FB CYC: 18 SL:117 +E6B1 90 0C BCC $E6BF A:87 X:87 Y:57 P:E5 SP:FB CYC: 24 SL:117 +E6B3 C9 87 CMP #$87 A:87 X:87 Y:57 P:E5 SP:FB CYC: 30 SL:117 +E6B5 D0 08 BNE $E6BF A:87 X:87 Y:57 P:67 SP:FB CYC: 36 SL:117 +E6B7 E0 87 CPX #$87 A:87 X:87 Y:57 P:67 SP:FB CYC: 42 SL:117 +E6B9 D0 04 BNE $E6BF A:87 X:87 Y:57 P:67 SP:FB CYC: 48 SL:117 +E6BB C0 57 CPY #$57 A:87 X:87 Y:57 P:67 SP:FB CYC: 54 SL:117 +E6BD F0 04 BEQ $E6C3 A:87 X:87 Y:57 P:67 SP:FB CYC: 60 SL:117 +E6C3 A0 FF LDY #$FF A:87 X:87 Y:57 P:67 SP:FB CYC: 69 SL:117 +E6C5 B8 CLV A:87 X:87 Y:FF P:E5 SP:FB CYC: 75 SL:117 +E6C6 18 CLC A:87 X:87 Y:FF P:A5 SP:FB CYC: 81 SL:117 +E6C7 A9 00 LDA #$00 A:87 X:87 Y:FF P:A4 SP:FB CYC: 87 SL:117 +E6C9 B7 69 *LAX $69,Y @ 68 = 32 A:00 X:87 Y:FF P:26 SP:FB CYC: 93 SL:117 +E6CB EA NOP A:32 X:32 Y:FF P:24 SP:FB CYC:105 SL:117 +E6CC EA NOP A:32 X:32 Y:FF P:24 SP:FB CYC:111 SL:117 +E6CD EA NOP A:32 X:32 Y:FF P:24 SP:FB CYC:117 SL:117 +E6CE EA NOP A:32 X:32 Y:FF P:24 SP:FB CYC:123 SL:117 +E6CF F0 12 BEQ $E6E3 A:32 X:32 Y:FF P:24 SP:FB CYC:129 SL:117 +E6D1 30 10 BMI $E6E3 A:32 X:32 Y:FF P:24 SP:FB CYC:135 SL:117 +E6D3 70 0E BVS $E6E3 A:32 X:32 Y:FF P:24 SP:FB CYC:141 SL:117 +E6D5 B0 0C BCS $E6E3 A:32 X:32 Y:FF P:24 SP:FB CYC:147 SL:117 +E6D7 C9 32 CMP #$32 A:32 X:32 Y:FF P:24 SP:FB CYC:153 SL:117 +E6D9 D0 08 BNE $E6E3 A:32 X:32 Y:FF P:27 SP:FB CYC:159 SL:117 +E6DB E0 32 CPX #$32 A:32 X:32 Y:FF P:27 SP:FB CYC:165 SL:117 +E6DD D0 04 BNE $E6E3 A:32 X:32 Y:FF P:27 SP:FB CYC:171 SL:117 +E6DF C0 FF CPY #$FF A:32 X:32 Y:FF P:27 SP:FB CYC:177 SL:117 +E6E1 F0 04 BEQ $E6E7 A:32 X:32 Y:FF P:27 SP:FB CYC:183 SL:117 +E6E7 A9 87 LDA #$87 A:32 X:32 Y:FF P:27 SP:FB CYC:192 SL:117 +E6E9 8D 87 05 STA $0587 = 00 A:87 X:32 Y:FF P:A5 SP:FB CYC:198 SL:117 +E6EC A9 32 LDA #$32 A:87 X:32 Y:FF P:A5 SP:FB CYC:210 SL:117 +E6EE 8D 88 05 STA $0588 = 00 A:32 X:32 Y:FF P:25 SP:FB CYC:216 SL:117 +E6F1 A0 30 LDY #$30 A:32 X:32 Y:FF P:25 SP:FB CYC:228 SL:117 +E6F3 24 01 BIT $01 = FF A:32 X:32 Y:30 P:25 SP:FB CYC:234 SL:117 +E6F5 38 SEC A:32 X:32 Y:30 P:E5 SP:FB CYC:243 SL:117 +E6F6 A9 00 LDA #$00 A:32 X:32 Y:30 P:E5 SP:FB CYC:249 SL:117 +E6F8 BF 57 05 *LAX $0557,Y @ 0587 = 87 A:00 X:32 Y:30 P:67 SP:FB CYC:255 SL:117 +E6FB EA NOP A:87 X:87 Y:30 P:E5 SP:FB CYC:267 SL:117 +E6FC EA NOP A:87 X:87 Y:30 P:E5 SP:FB CYC:273 SL:117 +E6FD EA NOP A:87 X:87 Y:30 P:E5 SP:FB CYC:279 SL:117 +E6FE EA NOP A:87 X:87 Y:30 P:E5 SP:FB CYC:285 SL:117 +E6FF F0 12 BEQ $E713 A:87 X:87 Y:30 P:E5 SP:FB CYC:291 SL:117 +E701 10 10 BPL $E713 A:87 X:87 Y:30 P:E5 SP:FB CYC:297 SL:117 +E703 50 0E BVC $E713 A:87 X:87 Y:30 P:E5 SP:FB CYC:303 SL:117 +E705 90 0C BCC $E713 A:87 X:87 Y:30 P:E5 SP:FB CYC:309 SL:117 +E707 C9 87 CMP #$87 A:87 X:87 Y:30 P:E5 SP:FB CYC:315 SL:117 +E709 D0 08 BNE $E713 A:87 X:87 Y:30 P:67 SP:FB CYC:321 SL:117 +E70B E0 87 CPX #$87 A:87 X:87 Y:30 P:67 SP:FB CYC:327 SL:117 +E70D D0 04 BNE $E713 A:87 X:87 Y:30 P:67 SP:FB CYC:333 SL:117 +E70F C0 30 CPY #$30 A:87 X:87 Y:30 P:67 SP:FB CYC:339 SL:117 +E711 F0 04 BEQ $E717 A:87 X:87 Y:30 P:67 SP:FB CYC: 4 SL:118 +E717 A0 40 LDY #$40 A:87 X:87 Y:30 P:67 SP:FB CYC: 13 SL:118 +E719 B8 CLV A:87 X:87 Y:40 P:65 SP:FB CYC: 19 SL:118 +E71A 18 CLC A:87 X:87 Y:40 P:25 SP:FB CYC: 25 SL:118 +E71B A9 00 LDA #$00 A:87 X:87 Y:40 P:24 SP:FB CYC: 31 SL:118 +E71D BF 48 05 *LAX $0548,Y @ 0588 = 32 A:00 X:87 Y:40 P:26 SP:FB CYC: 37 SL:118 +E720 EA NOP A:32 X:32 Y:40 P:24 SP:FB CYC: 49 SL:118 +E721 EA NOP A:32 X:32 Y:40 P:24 SP:FB CYC: 55 SL:118 +E722 EA NOP A:32 X:32 Y:40 P:24 SP:FB CYC: 61 SL:118 +E723 EA NOP A:32 X:32 Y:40 P:24 SP:FB CYC: 67 SL:118 +E724 F0 12 BEQ $E738 A:32 X:32 Y:40 P:24 SP:FB CYC: 73 SL:118 +E726 30 10 BMI $E738 A:32 X:32 Y:40 P:24 SP:FB CYC: 79 SL:118 +E728 70 0E BVS $E738 A:32 X:32 Y:40 P:24 SP:FB CYC: 85 SL:118 +E72A B0 0C BCS $E738 A:32 X:32 Y:40 P:24 SP:FB CYC: 91 SL:118 +E72C C9 32 CMP #$32 A:32 X:32 Y:40 P:24 SP:FB CYC: 97 SL:118 +E72E D0 08 BNE $E738 A:32 X:32 Y:40 P:27 SP:FB CYC:103 SL:118 +E730 E0 32 CPX #$32 A:32 X:32 Y:40 P:27 SP:FB CYC:109 SL:118 +E732 D0 04 BNE $E738 A:32 X:32 Y:40 P:27 SP:FB CYC:115 SL:118 +E734 C0 40 CPY #$40 A:32 X:32 Y:40 P:27 SP:FB CYC:121 SL:118 +E736 F0 04 BEQ $E73C A:32 X:32 Y:40 P:27 SP:FB CYC:127 SL:118 +E73C 60 RTS A:32 X:32 Y:40 P:27 SP:FB CYC:136 SL:118 +C635 20 3D E7 JSR $E73D A:32 X:32 Y:40 P:27 SP:FD CYC:154 SL:118 +E73D A9 C0 LDA #$C0 A:32 X:32 Y:40 P:27 SP:FB CYC:172 SL:118 +E73F 85 01 STA $01 = FF A:C0 X:32 Y:40 P:A5 SP:FB CYC:178 SL:118 +E741 A9 00 LDA #$00 A:C0 X:32 Y:40 P:A5 SP:FB CYC:187 SL:118 +E743 8D 89 04 STA $0489 = 00 A:00 X:32 Y:40 P:27 SP:FB CYC:193 SL:118 +E746 A9 89 LDA #$89 A:00 X:32 Y:40 P:27 SP:FB CYC:205 SL:118 +E748 85 60 STA $60 = 00 A:89 X:32 Y:40 P:A5 SP:FB CYC:211 SL:118 +E74A A9 04 LDA #$04 A:89 X:32 Y:40 P:A5 SP:FB CYC:220 SL:118 +E74C 85 61 STA $61 = 00 A:04 X:32 Y:40 P:25 SP:FB CYC:226 SL:118 +E74E A0 44 LDY #$44 A:04 X:32 Y:40 P:25 SP:FB CYC:235 SL:118 +E750 A2 17 LDX #$17 A:04 X:32 Y:44 P:25 SP:FB CYC:241 SL:118 +E752 A9 3E LDA #$3E A:04 X:17 Y:44 P:25 SP:FB CYC:247 SL:118 +E754 24 01 BIT $01 = C0 A:3E X:17 Y:44 P:25 SP:FB CYC:253 SL:118 +E756 18 CLC A:3E X:17 Y:44 P:E7 SP:FB CYC:262 SL:118 +E757 83 49 *SAX ($49,X) @ 60 = 0489 = 00 A:3E X:17 Y:44 P:E6 SP:FB CYC:268 SL:118 +E759 EA NOP A:3E X:17 Y:44 P:E6 SP:FB CYC:286 SL:118 +E75A EA NOP A:3E X:17 Y:44 P:E6 SP:FB CYC:292 SL:118 +E75B EA NOP A:3E X:17 Y:44 P:E6 SP:FB CYC:298 SL:118 +E75C EA NOP A:3E X:17 Y:44 P:E6 SP:FB CYC:304 SL:118 +E75D D0 19 BNE $E778 A:3E X:17 Y:44 P:E6 SP:FB CYC:310 SL:118 +E75F B0 17 BCS $E778 A:3E X:17 Y:44 P:E6 SP:FB CYC:316 SL:118 +E761 50 15 BVC $E778 A:3E X:17 Y:44 P:E6 SP:FB CYC:322 SL:118 +E763 10 13 BPL $E778 A:3E X:17 Y:44 P:E6 SP:FB CYC:328 SL:118 +E765 C9 3E CMP #$3E A:3E X:17 Y:44 P:E6 SP:FB CYC:334 SL:118 +E767 D0 0F BNE $E778 A:3E X:17 Y:44 P:67 SP:FB CYC:340 SL:118 +E769 C0 44 CPY #$44 A:3E X:17 Y:44 P:67 SP:FB CYC: 5 SL:119 +E76B D0 0B BNE $E778 A:3E X:17 Y:44 P:67 SP:FB CYC: 11 SL:119 +E76D E0 17 CPX #$17 A:3E X:17 Y:44 P:67 SP:FB CYC: 17 SL:119 +E76F D0 07 BNE $E778 A:3E X:17 Y:44 P:67 SP:FB CYC: 23 SL:119 +E771 AD 89 04 LDA $0489 = 16 A:3E X:17 Y:44 P:67 SP:FB CYC: 29 SL:119 +E774 C9 16 CMP #$16 A:16 X:17 Y:44 P:65 SP:FB CYC: 41 SL:119 +E776 F0 04 BEQ $E77C A:16 X:17 Y:44 P:67 SP:FB CYC: 47 SL:119 +E77C A0 44 LDY #$44 A:16 X:17 Y:44 P:67 SP:FB CYC: 56 SL:119 +E77E A2 7A LDX #$7A A:16 X:17 Y:44 P:65 SP:FB CYC: 62 SL:119 +E780 A9 66 LDA #$66 A:16 X:7A Y:44 P:65 SP:FB CYC: 68 SL:119 +E782 38 SEC A:66 X:7A Y:44 P:65 SP:FB CYC: 74 SL:119 +E783 B8 CLV A:66 X:7A Y:44 P:65 SP:FB CYC: 80 SL:119 +E784 83 E6 *SAX ($E6,X) @ 60 = 0489 = 16 A:66 X:7A Y:44 P:25 SP:FB CYC: 86 SL:119 +E786 EA NOP A:66 X:7A Y:44 P:25 SP:FB CYC:104 SL:119 +E787 EA NOP A:66 X:7A Y:44 P:25 SP:FB CYC:110 SL:119 +E788 EA NOP A:66 X:7A Y:44 P:25 SP:FB CYC:116 SL:119 +E789 EA NOP A:66 X:7A Y:44 P:25 SP:FB CYC:122 SL:119 +E78A F0 19 BEQ $E7A5 A:66 X:7A Y:44 P:25 SP:FB CYC:128 SL:119 +E78C 90 17 BCC $E7A5 A:66 X:7A Y:44 P:25 SP:FB CYC:134 SL:119 +E78E 70 15 BVS $E7A5 A:66 X:7A Y:44 P:25 SP:FB CYC:140 SL:119 +E790 30 13 BMI $E7A5 A:66 X:7A Y:44 P:25 SP:FB CYC:146 SL:119 +E792 C9 66 CMP #$66 A:66 X:7A Y:44 P:25 SP:FB CYC:152 SL:119 +E794 D0 0F BNE $E7A5 A:66 X:7A Y:44 P:27 SP:FB CYC:158 SL:119 +E796 C0 44 CPY #$44 A:66 X:7A Y:44 P:27 SP:FB CYC:164 SL:119 +E798 D0 0B BNE $E7A5 A:66 X:7A Y:44 P:27 SP:FB CYC:170 SL:119 +E79A E0 7A CPX #$7A A:66 X:7A Y:44 P:27 SP:FB CYC:176 SL:119 +E79C D0 07 BNE $E7A5 A:66 X:7A Y:44 P:27 SP:FB CYC:182 SL:119 +E79E AD 89 04 LDA $0489 = 62 A:66 X:7A Y:44 P:27 SP:FB CYC:188 SL:119 +E7A1 C9 62 CMP #$62 A:62 X:7A Y:44 P:25 SP:FB CYC:200 SL:119 +E7A3 F0 04 BEQ $E7A9 A:62 X:7A Y:44 P:27 SP:FB CYC:206 SL:119 +E7A9 A9 FF LDA #$FF A:62 X:7A Y:44 P:27 SP:FB CYC:215 SL:119 +E7AB 85 49 STA $49 = 00 A:FF X:7A Y:44 P:A5 SP:FB CYC:221 SL:119 +E7AD A0 44 LDY #$44 A:FF X:7A Y:44 P:A5 SP:FB CYC:230 SL:119 +E7AF A2 AA LDX #$AA A:FF X:7A Y:44 P:25 SP:FB CYC:236 SL:119 +E7B1 A9 55 LDA #$55 A:FF X:AA Y:44 P:A5 SP:FB CYC:242 SL:119 +E7B3 24 01 BIT $01 = C0 A:55 X:AA Y:44 P:25 SP:FB CYC:248 SL:119 +E7B5 18 CLC A:55 X:AA Y:44 P:E5 SP:FB CYC:257 SL:119 +E7B6 87 49 *SAX $49 = FF A:55 X:AA Y:44 P:E4 SP:FB CYC:263 SL:119 +E7B8 EA NOP A:55 X:AA Y:44 P:E4 SP:FB CYC:272 SL:119 +E7B9 EA NOP A:55 X:AA Y:44 P:E4 SP:FB CYC:278 SL:119 +E7BA EA NOP A:55 X:AA Y:44 P:E4 SP:FB CYC:284 SL:119 +E7BB EA NOP A:55 X:AA Y:44 P:E4 SP:FB CYC:290 SL:119 +E7BC F0 18 BEQ $E7D6 A:55 X:AA Y:44 P:E4 SP:FB CYC:296 SL:119 +E7BE B0 16 BCS $E7D6 A:55 X:AA Y:44 P:E4 SP:FB CYC:302 SL:119 +E7C0 50 14 BVC $E7D6 A:55 X:AA Y:44 P:E4 SP:FB CYC:308 SL:119 +E7C2 10 12 BPL $E7D6 A:55 X:AA Y:44 P:E4 SP:FB CYC:314 SL:119 +E7C4 C9 55 CMP #$55 A:55 X:AA Y:44 P:E4 SP:FB CYC:320 SL:119 +E7C6 D0 0E BNE $E7D6 A:55 X:AA Y:44 P:67 SP:FB CYC:326 SL:119 +E7C8 C0 44 CPY #$44 A:55 X:AA Y:44 P:67 SP:FB CYC:332 SL:119 +E7CA D0 0A BNE $E7D6 A:55 X:AA Y:44 P:67 SP:FB CYC:338 SL:119 +E7CC E0 AA CPX #$AA A:55 X:AA Y:44 P:67 SP:FB CYC: 3 SL:120 +E7CE D0 06 BNE $E7D6 A:55 X:AA Y:44 P:67 SP:FB CYC: 9 SL:120 +E7D0 A5 49 LDA $49 = 00 A:55 X:AA Y:44 P:67 SP:FB CYC: 15 SL:120 +E7D2 C9 00 CMP #$00 A:00 X:AA Y:44 P:67 SP:FB CYC: 24 SL:120 +E7D4 F0 04 BEQ $E7DA A:00 X:AA Y:44 P:67 SP:FB CYC: 30 SL:120 +E7DA A9 00 LDA #$00 A:00 X:AA Y:44 P:67 SP:FB CYC: 39 SL:120 +E7DC 85 56 STA $56 = 00 A:00 X:AA Y:44 P:67 SP:FB CYC: 45 SL:120 +E7DE A0 58 LDY #$58 A:00 X:AA Y:44 P:67 SP:FB CYC: 54 SL:120 +E7E0 A2 EF LDX #$EF A:00 X:AA Y:58 P:65 SP:FB CYC: 60 SL:120 +E7E2 A9 66 LDA #$66 A:00 X:EF Y:58 P:E5 SP:FB CYC: 66 SL:120 +E7E4 38 SEC A:66 X:EF Y:58 P:65 SP:FB CYC: 72 SL:120 +E7E5 B8 CLV A:66 X:EF Y:58 P:65 SP:FB CYC: 78 SL:120 +E7E6 87 56 *SAX $56 = 00 A:66 X:EF Y:58 P:25 SP:FB CYC: 84 SL:120 +E7E8 EA NOP A:66 X:EF Y:58 P:25 SP:FB CYC: 93 SL:120 +E7E9 EA NOP A:66 X:EF Y:58 P:25 SP:FB CYC: 99 SL:120 +E7EA EA NOP A:66 X:EF Y:58 P:25 SP:FB CYC:105 SL:120 +E7EB EA NOP A:66 X:EF Y:58 P:25 SP:FB CYC:111 SL:120 +E7EC F0 18 BEQ $E806 A:66 X:EF Y:58 P:25 SP:FB CYC:117 SL:120 +E7EE 90 16 BCC $E806 A:66 X:EF Y:58 P:25 SP:FB CYC:123 SL:120 +E7F0 70 14 BVS $E806 A:66 X:EF Y:58 P:25 SP:FB CYC:129 SL:120 +E7F2 30 12 BMI $E806 A:66 X:EF Y:58 P:25 SP:FB CYC:135 SL:120 +E7F4 C9 66 CMP #$66 A:66 X:EF Y:58 P:25 SP:FB CYC:141 SL:120 +E7F6 D0 0E BNE $E806 A:66 X:EF Y:58 P:27 SP:FB CYC:147 SL:120 +E7F8 C0 58 CPY #$58 A:66 X:EF Y:58 P:27 SP:FB CYC:153 SL:120 +E7FA D0 0A BNE $E806 A:66 X:EF Y:58 P:27 SP:FB CYC:159 SL:120 +E7FC E0 EF CPX #$EF A:66 X:EF Y:58 P:27 SP:FB CYC:165 SL:120 +E7FE D0 06 BNE $E806 A:66 X:EF Y:58 P:27 SP:FB CYC:171 SL:120 +E800 A5 56 LDA $56 = 66 A:66 X:EF Y:58 P:27 SP:FB CYC:177 SL:120 +E802 C9 66 CMP #$66 A:66 X:EF Y:58 P:25 SP:FB CYC:186 SL:120 +E804 F0 04 BEQ $E80A A:66 X:EF Y:58 P:27 SP:FB CYC:192 SL:120 +E80A A9 FF LDA #$FF A:66 X:EF Y:58 P:27 SP:FB CYC:201 SL:120 +E80C 8D 49 05 STA $0549 = 00 A:FF X:EF Y:58 P:A5 SP:FB CYC:207 SL:120 +E80F A0 E5 LDY #$E5 A:FF X:EF Y:58 P:A5 SP:FB CYC:219 SL:120 +E811 A2 AF LDX #$AF A:FF X:EF Y:E5 P:A5 SP:FB CYC:225 SL:120 +E813 A9 F5 LDA #$F5 A:FF X:AF Y:E5 P:A5 SP:FB CYC:231 SL:120 +E815 24 01 BIT $01 = C0 A:F5 X:AF Y:E5 P:A5 SP:FB CYC:237 SL:120 +E817 18 CLC A:F5 X:AF Y:E5 P:E5 SP:FB CYC:246 SL:120 +E818 8F 49 05 *SAX $0549 = FF A:F5 X:AF Y:E5 P:E4 SP:FB CYC:252 SL:120 +E81B EA NOP A:F5 X:AF Y:E5 P:E4 SP:FB CYC:264 SL:120 +E81C EA NOP A:F5 X:AF Y:E5 P:E4 SP:FB CYC:270 SL:120 +E81D EA NOP A:F5 X:AF Y:E5 P:E4 SP:FB CYC:276 SL:120 +E81E EA NOP A:F5 X:AF Y:E5 P:E4 SP:FB CYC:282 SL:120 +E81F F0 19 BEQ $E83A A:F5 X:AF Y:E5 P:E4 SP:FB CYC:288 SL:120 +E821 B0 17 BCS $E83A A:F5 X:AF Y:E5 P:E4 SP:FB CYC:294 SL:120 +E823 50 15 BVC $E83A A:F5 X:AF Y:E5 P:E4 SP:FB CYC:300 SL:120 +E825 10 13 BPL $E83A A:F5 X:AF Y:E5 P:E4 SP:FB CYC:306 SL:120 +E827 C9 F5 CMP #$F5 A:F5 X:AF Y:E5 P:E4 SP:FB CYC:312 SL:120 +E829 D0 0F BNE $E83A A:F5 X:AF Y:E5 P:67 SP:FB CYC:318 SL:120 +E82B C0 E5 CPY #$E5 A:F5 X:AF Y:E5 P:67 SP:FB CYC:324 SL:120 +E82D D0 0B BNE $E83A A:F5 X:AF Y:E5 P:67 SP:FB CYC:330 SL:120 +E82F E0 AF CPX #$AF A:F5 X:AF Y:E5 P:67 SP:FB CYC:336 SL:120 +E831 D0 07 BNE $E83A A:F5 X:AF Y:E5 P:67 SP:FB CYC: 1 SL:121 +E833 AD 49 05 LDA $0549 = A5 A:F5 X:AF Y:E5 P:67 SP:FB CYC: 7 SL:121 +E836 C9 A5 CMP #$A5 A:A5 X:AF Y:E5 P:E5 SP:FB CYC: 19 SL:121 +E838 F0 04 BEQ $E83E A:A5 X:AF Y:E5 P:67 SP:FB CYC: 25 SL:121 +E83E A9 00 LDA #$00 A:A5 X:AF Y:E5 P:67 SP:FB CYC: 34 SL:121 +E840 8D 56 05 STA $0556 = 00 A:00 X:AF Y:E5 P:67 SP:FB CYC: 40 SL:121 +E843 A0 58 LDY #$58 A:00 X:AF Y:E5 P:67 SP:FB CYC: 52 SL:121 +E845 A2 B3 LDX #$B3 A:00 X:AF Y:58 P:65 SP:FB CYC: 58 SL:121 +E847 A9 97 LDA #$97 A:00 X:B3 Y:58 P:E5 SP:FB CYC: 64 SL:121 +E849 38 SEC A:97 X:B3 Y:58 P:E5 SP:FB CYC: 70 SL:121 +E84A B8 CLV A:97 X:B3 Y:58 P:E5 SP:FB CYC: 76 SL:121 +E84B 8F 56 05 *SAX $0556 = 00 A:97 X:B3 Y:58 P:A5 SP:FB CYC: 82 SL:121 +E84E EA NOP A:97 X:B3 Y:58 P:A5 SP:FB CYC: 94 SL:121 +E84F EA NOP A:97 X:B3 Y:58 P:A5 SP:FB CYC:100 SL:121 +E850 EA NOP A:97 X:B3 Y:58 P:A5 SP:FB CYC:106 SL:121 +E851 EA NOP A:97 X:B3 Y:58 P:A5 SP:FB CYC:112 SL:121 +E852 F0 19 BEQ $E86D A:97 X:B3 Y:58 P:A5 SP:FB CYC:118 SL:121 +E854 90 17 BCC $E86D A:97 X:B3 Y:58 P:A5 SP:FB CYC:124 SL:121 +E856 70 15 BVS $E86D A:97 X:B3 Y:58 P:A5 SP:FB CYC:130 SL:121 +E858 10 13 BPL $E86D A:97 X:B3 Y:58 P:A5 SP:FB CYC:136 SL:121 +E85A C9 97 CMP #$97 A:97 X:B3 Y:58 P:A5 SP:FB CYC:142 SL:121 +E85C D0 0F BNE $E86D A:97 X:B3 Y:58 P:27 SP:FB CYC:148 SL:121 +E85E C0 58 CPY #$58 A:97 X:B3 Y:58 P:27 SP:FB CYC:154 SL:121 +E860 D0 0B BNE $E86D A:97 X:B3 Y:58 P:27 SP:FB CYC:160 SL:121 +E862 E0 B3 CPX #$B3 A:97 X:B3 Y:58 P:27 SP:FB CYC:166 SL:121 +E864 D0 07 BNE $E86D A:97 X:B3 Y:58 P:27 SP:FB CYC:172 SL:121 +E866 AD 56 05 LDA $0556 = 93 A:97 X:B3 Y:58 P:27 SP:FB CYC:178 SL:121 +E869 C9 93 CMP #$93 A:93 X:B3 Y:58 P:A5 SP:FB CYC:190 SL:121 +E86B F0 04 BEQ $E871 A:93 X:B3 Y:58 P:27 SP:FB CYC:196 SL:121 +E871 A9 FF LDA #$FF A:93 X:B3 Y:58 P:27 SP:FB CYC:205 SL:121 +E873 85 49 STA $49 = 00 A:FF X:B3 Y:58 P:A5 SP:FB CYC:211 SL:121 +E875 A0 FF LDY #$FF A:FF X:B3 Y:58 P:A5 SP:FB CYC:220 SL:121 +E877 A2 AA LDX #$AA A:FF X:B3 Y:FF P:A5 SP:FB CYC:226 SL:121 +E879 A9 55 LDA #$55 A:FF X:AA Y:FF P:A5 SP:FB CYC:232 SL:121 +E87B 24 01 BIT $01 = C0 A:55 X:AA Y:FF P:25 SP:FB CYC:238 SL:121 +E87D 18 CLC A:55 X:AA Y:FF P:E5 SP:FB CYC:247 SL:121 +E87E 97 4A *SAX $4A,Y @ 49 = FF A:55 X:AA Y:FF P:E4 SP:FB CYC:253 SL:121 +E880 EA NOP A:55 X:AA Y:FF P:E4 SP:FB CYC:265 SL:121 +E881 EA NOP A:55 X:AA Y:FF P:E4 SP:FB CYC:271 SL:121 +E882 EA NOP A:55 X:AA Y:FF P:E4 SP:FB CYC:277 SL:121 +E883 EA NOP A:55 X:AA Y:FF P:E4 SP:FB CYC:283 SL:121 +E884 F0 18 BEQ $E89E A:55 X:AA Y:FF P:E4 SP:FB CYC:289 SL:121 +E886 B0 16 BCS $E89E A:55 X:AA Y:FF P:E4 SP:FB CYC:295 SL:121 +E888 50 14 BVC $E89E A:55 X:AA Y:FF P:E4 SP:FB CYC:301 SL:121 +E88A 10 12 BPL $E89E A:55 X:AA Y:FF P:E4 SP:FB CYC:307 SL:121 +E88C C9 55 CMP #$55 A:55 X:AA Y:FF P:E4 SP:FB CYC:313 SL:121 +E88E D0 0E BNE $E89E A:55 X:AA Y:FF P:67 SP:FB CYC:319 SL:121 +E890 C0 FF CPY #$FF A:55 X:AA Y:FF P:67 SP:FB CYC:325 SL:121 +E892 D0 0A BNE $E89E A:55 X:AA Y:FF P:67 SP:FB CYC:331 SL:121 +E894 E0 AA CPX #$AA A:55 X:AA Y:FF P:67 SP:FB CYC:337 SL:121 +E896 D0 06 BNE $E89E A:55 X:AA Y:FF P:67 SP:FB CYC: 2 SL:122 +E898 A5 49 LDA $49 = 00 A:55 X:AA Y:FF P:67 SP:FB CYC: 8 SL:122 +E89A C9 00 CMP #$00 A:00 X:AA Y:FF P:67 SP:FB CYC: 17 SL:122 +E89C F0 04 BEQ $E8A2 A:00 X:AA Y:FF P:67 SP:FB CYC: 23 SL:122 +E8A2 A9 00 LDA #$00 A:00 X:AA Y:FF P:67 SP:FB CYC: 32 SL:122 +E8A4 85 56 STA $56 = 66 A:00 X:AA Y:FF P:67 SP:FB CYC: 38 SL:122 +E8A6 A0 06 LDY #$06 A:00 X:AA Y:FF P:67 SP:FB CYC: 47 SL:122 +E8A8 A2 EF LDX #$EF A:00 X:AA Y:06 P:65 SP:FB CYC: 53 SL:122 +E8AA A9 66 LDA #$66 A:00 X:EF Y:06 P:E5 SP:FB CYC: 59 SL:122 +E8AC 38 SEC A:66 X:EF Y:06 P:65 SP:FB CYC: 65 SL:122 +E8AD B8 CLV A:66 X:EF Y:06 P:65 SP:FB CYC: 71 SL:122 +E8AE 97 50 *SAX $50,Y @ 56 = 00 A:66 X:EF Y:06 P:25 SP:FB CYC: 77 SL:122 +E8B0 EA NOP A:66 X:EF Y:06 P:25 SP:FB CYC: 89 SL:122 +E8B1 EA NOP A:66 X:EF Y:06 P:25 SP:FB CYC: 95 SL:122 +E8B2 EA NOP A:66 X:EF Y:06 P:25 SP:FB CYC:101 SL:122 +E8B3 EA NOP A:66 X:EF Y:06 P:25 SP:FB CYC:107 SL:122 +E8B4 F0 18 BEQ $E8CE A:66 X:EF Y:06 P:25 SP:FB CYC:113 SL:122 +E8B6 90 16 BCC $E8CE A:66 X:EF Y:06 P:25 SP:FB CYC:119 SL:122 +E8B8 70 14 BVS $E8CE A:66 X:EF Y:06 P:25 SP:FB CYC:125 SL:122 +E8BA 30 12 BMI $E8CE A:66 X:EF Y:06 P:25 SP:FB CYC:131 SL:122 +E8BC C9 66 CMP #$66 A:66 X:EF Y:06 P:25 SP:FB CYC:137 SL:122 +E8BE D0 0E BNE $E8CE A:66 X:EF Y:06 P:27 SP:FB CYC:143 SL:122 +E8C0 C0 06 CPY #$06 A:66 X:EF Y:06 P:27 SP:FB CYC:149 SL:122 +E8C2 D0 0A BNE $E8CE A:66 X:EF Y:06 P:27 SP:FB CYC:155 SL:122 +E8C4 E0 EF CPX #$EF A:66 X:EF Y:06 P:27 SP:FB CYC:161 SL:122 +E8C6 D0 06 BNE $E8CE A:66 X:EF Y:06 P:27 SP:FB CYC:167 SL:122 +E8C8 A5 56 LDA $56 = 66 A:66 X:EF Y:06 P:27 SP:FB CYC:173 SL:122 +E8CA C9 66 CMP #$66 A:66 X:EF Y:06 P:25 SP:FB CYC:182 SL:122 +E8CC F0 04 BEQ $E8D2 A:66 X:EF Y:06 P:27 SP:FB CYC:188 SL:122 +E8D2 60 RTS A:66 X:EF Y:06 P:27 SP:FB CYC:197 SL:122 +C638 20 D3 E8 JSR $E8D3 A:66 X:EF Y:06 P:27 SP:FD CYC:215 SL:122 +E8D3 A0 90 LDY #$90 A:66 X:EF Y:06 P:27 SP:FB CYC:233 SL:122 +E8D5 20 31 F9 JSR $F931 A:66 X:EF Y:90 P:A5 SP:FB CYC:239 SL:122 +F931 24 01 BIT $01 = C0 A:66 X:EF Y:90 P:A5 SP:F9 CYC:257 SL:122 +F933 A9 40 LDA #$40 A:66 X:EF Y:90 P:E5 SP:F9 CYC:266 SL:122 +F935 38 SEC A:40 X:EF Y:90 P:65 SP:F9 CYC:272 SL:122 +F936 60 RTS A:40 X:EF Y:90 P:65 SP:F9 CYC:278 SL:122 +E8D8 EB 40 *SBC #$40 A:40 X:EF Y:90 P:65 SP:FB CYC:296 SL:122 +E8DA EA NOP A:00 X:EF Y:90 P:27 SP:FB CYC:302 SL:122 +E8DB EA NOP A:00 X:EF Y:90 P:27 SP:FB CYC:308 SL:122 +E8DC EA NOP A:00 X:EF Y:90 P:27 SP:FB CYC:314 SL:122 +E8DD EA NOP A:00 X:EF Y:90 P:27 SP:FB CYC:320 SL:122 +E8DE 20 37 F9 JSR $F937 A:00 X:EF Y:90 P:27 SP:FB CYC:326 SL:122 +F937 30 0B BMI $F944 A:00 X:EF Y:90 P:27 SP:F9 CYC: 3 SL:123 +F939 90 09 BCC $F944 A:00 X:EF Y:90 P:27 SP:F9 CYC: 9 SL:123 +F93B D0 07 BNE $F944 A:00 X:EF Y:90 P:27 SP:F9 CYC: 15 SL:123 +F93D 70 05 BVS $F944 A:00 X:EF Y:90 P:27 SP:F9 CYC: 21 SL:123 +F93F C9 00 CMP #$00 A:00 X:EF Y:90 P:27 SP:F9 CYC: 27 SL:123 +F941 D0 01 BNE $F944 A:00 X:EF Y:90 P:27 SP:F9 CYC: 33 SL:123 +F943 60 RTS A:00 X:EF Y:90 P:27 SP:F9 CYC: 39 SL:123 +E8E1 C8 INY A:00 X:EF Y:90 P:27 SP:FB CYC: 57 SL:123 +E8E2 20 47 F9 JSR $F947 A:00 X:EF Y:91 P:A5 SP:FB CYC: 63 SL:123 +F947 B8 CLV A:00 X:EF Y:91 P:A5 SP:F9 CYC: 81 SL:123 +F948 38 SEC A:00 X:EF Y:91 P:A5 SP:F9 CYC: 87 SL:123 +F949 A9 40 LDA #$40 A:00 X:EF Y:91 P:A5 SP:F9 CYC: 93 SL:123 +F94B 60 RTS A:40 X:EF Y:91 P:25 SP:F9 CYC: 99 SL:123 +E8E5 EB 3F *SBC #$3F A:40 X:EF Y:91 P:25 SP:FB CYC:117 SL:123 +E8E7 EA NOP A:01 X:EF Y:91 P:25 SP:FB CYC:123 SL:123 +E8E8 EA NOP A:01 X:EF Y:91 P:25 SP:FB CYC:129 SL:123 +E8E9 EA NOP A:01 X:EF Y:91 P:25 SP:FB CYC:135 SL:123 +E8EA EA NOP A:01 X:EF Y:91 P:25 SP:FB CYC:141 SL:123 +E8EB 20 4C F9 JSR $F94C A:01 X:EF Y:91 P:25 SP:FB CYC:147 SL:123 +F94C F0 0B BEQ $F959 A:01 X:EF Y:91 P:25 SP:F9 CYC:165 SL:123 +F94E 30 09 BMI $F959 A:01 X:EF Y:91 P:25 SP:F9 CYC:171 SL:123 +F950 90 07 BCC $F959 A:01 X:EF Y:91 P:25 SP:F9 CYC:177 SL:123 +F952 70 05 BVS $F959 A:01 X:EF Y:91 P:25 SP:F9 CYC:183 SL:123 +F954 C9 01 CMP #$01 A:01 X:EF Y:91 P:25 SP:F9 CYC:189 SL:123 +F956 D0 01 BNE $F959 A:01 X:EF Y:91 P:27 SP:F9 CYC:195 SL:123 +F958 60 RTS A:01 X:EF Y:91 P:27 SP:F9 CYC:201 SL:123 +E8EE C8 INY A:01 X:EF Y:91 P:27 SP:FB CYC:219 SL:123 +E8EF 20 5C F9 JSR $F95C A:01 X:EF Y:92 P:A5 SP:FB CYC:225 SL:123 +F95C A9 40 LDA #$40 A:01 X:EF Y:92 P:A5 SP:F9 CYC:243 SL:123 +F95E 38 SEC A:40 X:EF Y:92 P:25 SP:F9 CYC:249 SL:123 +F95F 24 01 BIT $01 = C0 A:40 X:EF Y:92 P:25 SP:F9 CYC:255 SL:123 +F961 60 RTS A:40 X:EF Y:92 P:E5 SP:F9 CYC:264 SL:123 +E8F2 EB 41 *SBC #$41 A:40 X:EF Y:92 P:E5 SP:FB CYC:282 SL:123 +E8F4 EA NOP A:FF X:EF Y:92 P:A4 SP:FB CYC:288 SL:123 +E8F5 EA NOP A:FF X:EF Y:92 P:A4 SP:FB CYC:294 SL:123 +E8F6 EA NOP A:FF X:EF Y:92 P:A4 SP:FB CYC:300 SL:123 +E8F7 EA NOP A:FF X:EF Y:92 P:A4 SP:FB CYC:306 SL:123 +E8F8 20 62 F9 JSR $F962 A:FF X:EF Y:92 P:A4 SP:FB CYC:312 SL:123 +F962 B0 0B BCS $F96F A:FF X:EF Y:92 P:A4 SP:F9 CYC:330 SL:123 +F964 F0 09 BEQ $F96F A:FF X:EF Y:92 P:A4 SP:F9 CYC:336 SL:123 +F966 10 07 BPL $F96F A:FF X:EF Y:92 P:A4 SP:F9 CYC: 1 SL:124 +F968 70 05 BVS $F96F A:FF X:EF Y:92 P:A4 SP:F9 CYC: 7 SL:124 +F96A C9 FF CMP #$FF A:FF X:EF Y:92 P:A4 SP:F9 CYC: 13 SL:124 +F96C D0 01 BNE $F96F A:FF X:EF Y:92 P:27 SP:F9 CYC: 19 SL:124 +F96E 60 RTS A:FF X:EF Y:92 P:27 SP:F9 CYC: 25 SL:124 +E8FB C8 INY A:FF X:EF Y:92 P:27 SP:FB CYC: 43 SL:124 +E8FC 20 72 F9 JSR $F972 A:FF X:EF Y:93 P:A5 SP:FB CYC: 49 SL:124 +F972 18 CLC A:FF X:EF Y:93 P:A5 SP:F9 CYC: 67 SL:124 +F973 A9 80 LDA #$80 A:FF X:EF Y:93 P:A4 SP:F9 CYC: 73 SL:124 +F975 60 RTS A:80 X:EF Y:93 P:A4 SP:F9 CYC: 79 SL:124 +E8FF EB 00 *SBC #$00 A:80 X:EF Y:93 P:A4 SP:FB CYC: 97 SL:124 +E901 EA NOP A:7F X:EF Y:93 P:65 SP:FB CYC:103 SL:124 +E902 EA NOP A:7F X:EF Y:93 P:65 SP:FB CYC:109 SL:124 +E903 EA NOP A:7F X:EF Y:93 P:65 SP:FB CYC:115 SL:124 +E904 EA NOP A:7F X:EF Y:93 P:65 SP:FB CYC:121 SL:124 +E905 20 76 F9 JSR $F976 A:7F X:EF Y:93 P:65 SP:FB CYC:127 SL:124 +F976 90 05 BCC $F97D A:7F X:EF Y:93 P:65 SP:F9 CYC:145 SL:124 +F978 C9 7F CMP #$7F A:7F X:EF Y:93 P:65 SP:F9 CYC:151 SL:124 +F97A D0 01 BNE $F97D A:7F X:EF Y:93 P:67 SP:F9 CYC:157 SL:124 +F97C 60 RTS A:7F X:EF Y:93 P:67 SP:F9 CYC:163 SL:124 +E908 C8 INY A:7F X:EF Y:93 P:67 SP:FB CYC:181 SL:124 +E909 20 80 F9 JSR $F980 A:7F X:EF Y:94 P:E5 SP:FB CYC:187 SL:124 +F980 38 SEC A:7F X:EF Y:94 P:E5 SP:F9 CYC:205 SL:124 +F981 A9 81 LDA #$81 A:7F X:EF Y:94 P:E5 SP:F9 CYC:211 SL:124 +F983 60 RTS A:81 X:EF Y:94 P:E5 SP:F9 CYC:217 SL:124 +E90C EB 7F *SBC #$7F A:81 X:EF Y:94 P:E5 SP:FB CYC:235 SL:124 +E90E EA NOP A:02 X:EF Y:94 P:65 SP:FB CYC:241 SL:124 +E90F EA NOP A:02 X:EF Y:94 P:65 SP:FB CYC:247 SL:124 +E910 EA NOP A:02 X:EF Y:94 P:65 SP:FB CYC:253 SL:124 +E911 EA NOP A:02 X:EF Y:94 P:65 SP:FB CYC:259 SL:124 +E912 20 84 F9 JSR $F984 A:02 X:EF Y:94 P:65 SP:FB CYC:265 SL:124 +F984 50 07 BVC $F98D A:02 X:EF Y:94 P:65 SP:F9 CYC:283 SL:124 +F986 90 05 BCC $F98D A:02 X:EF Y:94 P:65 SP:F9 CYC:289 SL:124 +F988 C9 02 CMP #$02 A:02 X:EF Y:94 P:65 SP:F9 CYC:295 SL:124 +F98A D0 01 BNE $F98D A:02 X:EF Y:94 P:67 SP:F9 CYC:301 SL:124 +F98C 60 RTS A:02 X:EF Y:94 P:67 SP:F9 CYC:307 SL:124 +E915 60 RTS A:02 X:EF Y:94 P:67 SP:FB CYC:325 SL:124 +C63B 20 16 E9 JSR $E916 A:02 X:EF Y:94 P:67 SP:FD CYC: 2 SL:125 +E916 A9 FF LDA #$FF A:02 X:EF Y:94 P:67 SP:FB CYC: 20 SL:125 +E918 85 01 STA $01 = C0 A:FF X:EF Y:94 P:E5 SP:FB CYC: 26 SL:125 +E91A A0 95 LDY #$95 A:FF X:EF Y:94 P:E5 SP:FB CYC: 35 SL:125 +E91C A2 02 LDX #$02 A:FF X:EF Y:95 P:E5 SP:FB CYC: 41 SL:125 +E91E A9 47 LDA #$47 A:FF X:02 Y:95 P:65 SP:FB CYC: 47 SL:125 +E920 85 47 STA $47 = 00 A:47 X:02 Y:95 P:65 SP:FB CYC: 53 SL:125 +E922 A9 06 LDA #$06 A:47 X:02 Y:95 P:65 SP:FB CYC: 62 SL:125 +E924 85 48 STA $48 = 00 A:06 X:02 Y:95 P:65 SP:FB CYC: 68 SL:125 +E926 A9 EB LDA #$EB A:06 X:02 Y:95 P:65 SP:FB CYC: 77 SL:125 +E928 8D 47 06 STA $0647 = 00 A:EB X:02 Y:95 P:E5 SP:FB CYC: 83 SL:125 +E92B 20 31 FA JSR $FA31 A:EB X:02 Y:95 P:E5 SP:FB CYC: 95 SL:125 +FA31 24 01 BIT $01 = FF A:EB X:02 Y:95 P:E5 SP:F9 CYC:113 SL:125 +FA33 18 CLC A:EB X:02 Y:95 P:E5 SP:F9 CYC:122 SL:125 +FA34 A9 40 LDA #$40 A:EB X:02 Y:95 P:E4 SP:F9 CYC:128 SL:125 +FA36 60 RTS A:40 X:02 Y:95 P:64 SP:F9 CYC:134 SL:125 +E92E C3 45 *DCP ($45,X) @ 47 = 0647 = EB A:40 X:02 Y:95 P:64 SP:FB CYC:152 SL:125 +E930 EA NOP A:40 X:02 Y:95 P:64 SP:FB CYC:176 SL:125 +E931 EA NOP A:40 X:02 Y:95 P:64 SP:FB CYC:182 SL:125 +E932 EA NOP A:40 X:02 Y:95 P:64 SP:FB CYC:188 SL:125 +E933 EA NOP A:40 X:02 Y:95 P:64 SP:FB CYC:194 SL:125 +E934 20 37 FA JSR $FA37 A:40 X:02 Y:95 P:64 SP:FB CYC:200 SL:125 +FA37 50 2C BVC $FA65 A:40 X:02 Y:95 P:64 SP:F9 CYC:218 SL:125 +FA39 B0 2A BCS $FA65 A:40 X:02 Y:95 P:64 SP:F9 CYC:224 SL:125 +FA3B 30 28 BMI $FA65 A:40 X:02 Y:95 P:64 SP:F9 CYC:230 SL:125 +FA3D C9 40 CMP #$40 A:40 X:02 Y:95 P:64 SP:F9 CYC:236 SL:125 +FA3F D0 24 BNE $FA65 A:40 X:02 Y:95 P:67 SP:F9 CYC:242 SL:125 +FA41 60 RTS A:40 X:02 Y:95 P:67 SP:F9 CYC:248 SL:125 +E937 AD 47 06 LDA $0647 = EA A:40 X:02 Y:95 P:67 SP:FB CYC:266 SL:125 +E93A C9 EA CMP #$EA A:EA X:02 Y:95 P:E5 SP:FB CYC:278 SL:125 +E93C F0 02 BEQ $E940 A:EA X:02 Y:95 P:67 SP:FB CYC:284 SL:125 +E940 C8 INY A:EA X:02 Y:95 P:67 SP:FB CYC:293 SL:125 +E941 A9 00 LDA #$00 A:EA X:02 Y:96 P:E5 SP:FB CYC:299 SL:125 +E943 8D 47 06 STA $0647 = EA A:00 X:02 Y:96 P:67 SP:FB CYC:305 SL:125 +E946 20 42 FA JSR $FA42 A:00 X:02 Y:96 P:67 SP:FB CYC:317 SL:125 +FA42 B8 CLV A:00 X:02 Y:96 P:67 SP:F9 CYC:335 SL:125 +FA43 38 SEC A:00 X:02 Y:96 P:27 SP:F9 CYC: 0 SL:126 +FA44 A9 FF LDA #$FF A:00 X:02 Y:96 P:27 SP:F9 CYC: 6 SL:126 +FA46 60 RTS A:FF X:02 Y:96 P:A5 SP:F9 CYC: 12 SL:126 +E949 C3 45 *DCP ($45,X) @ 47 = 0647 = 00 A:FF X:02 Y:96 P:A5 SP:FB CYC: 30 SL:126 +E94B EA NOP A:FF X:02 Y:96 P:27 SP:FB CYC: 54 SL:126 +E94C EA NOP A:FF X:02 Y:96 P:27 SP:FB CYC: 60 SL:126 +E94D EA NOP A:FF X:02 Y:96 P:27 SP:FB CYC: 66 SL:126 +E94E EA NOP A:FF X:02 Y:96 P:27 SP:FB CYC: 72 SL:126 +E94F 20 47 FA JSR $FA47 A:FF X:02 Y:96 P:27 SP:FB CYC: 78 SL:126 +FA47 70 1C BVS $FA65 A:FF X:02 Y:96 P:27 SP:F9 CYC: 96 SL:126 +FA49 D0 1A BNE $FA65 A:FF X:02 Y:96 P:27 SP:F9 CYC:102 SL:126 +FA4B 30 18 BMI $FA65 A:FF X:02 Y:96 P:27 SP:F9 CYC:108 SL:126 +FA4D 90 16 BCC $FA65 A:FF X:02 Y:96 P:27 SP:F9 CYC:114 SL:126 +FA4F C9 FF CMP #$FF A:FF X:02 Y:96 P:27 SP:F9 CYC:120 SL:126 +FA51 D0 12 BNE $FA65 A:FF X:02 Y:96 P:27 SP:F9 CYC:126 SL:126 +FA53 60 RTS A:FF X:02 Y:96 P:27 SP:F9 CYC:132 SL:126 +E952 AD 47 06 LDA $0647 = FF A:FF X:02 Y:96 P:27 SP:FB CYC:150 SL:126 +E955 C9 FF CMP #$FF A:FF X:02 Y:96 P:A5 SP:FB CYC:162 SL:126 +E957 F0 02 BEQ $E95B A:FF X:02 Y:96 P:27 SP:FB CYC:168 SL:126 +E95B C8 INY A:FF X:02 Y:96 P:27 SP:FB CYC:177 SL:126 +E95C A9 37 LDA #$37 A:FF X:02 Y:97 P:A5 SP:FB CYC:183 SL:126 +E95E 8D 47 06 STA $0647 = FF A:37 X:02 Y:97 P:25 SP:FB CYC:189 SL:126 +E961 20 54 FA JSR $FA54 A:37 X:02 Y:97 P:25 SP:FB CYC:201 SL:126 +FA54 24 01 BIT $01 = FF A:37 X:02 Y:97 P:25 SP:F9 CYC:219 SL:126 +FA56 A9 F0 LDA #$F0 A:37 X:02 Y:97 P:E5 SP:F9 CYC:228 SL:126 +FA58 60 RTS A:F0 X:02 Y:97 P:E5 SP:F9 CYC:234 SL:126 +E964 C3 45 *DCP ($45,X) @ 47 = 0647 = 37 A:F0 X:02 Y:97 P:E5 SP:FB CYC:252 SL:126 +E966 EA NOP A:F0 X:02 Y:97 P:E5 SP:FB CYC:276 SL:126 +E967 EA NOP A:F0 X:02 Y:97 P:E5 SP:FB CYC:282 SL:126 +E968 EA NOP A:F0 X:02 Y:97 P:E5 SP:FB CYC:288 SL:126 +E969 EA NOP A:F0 X:02 Y:97 P:E5 SP:FB CYC:294 SL:126 +E96A 20 59 FA JSR $FA59 A:F0 X:02 Y:97 P:E5 SP:FB CYC:300 SL:126 +FA59 50 0A BVC $FA65 A:F0 X:02 Y:97 P:E5 SP:F9 CYC:318 SL:126 +FA5B F0 08 BEQ $FA65 A:F0 X:02 Y:97 P:E5 SP:F9 CYC:324 SL:126 +FA5D 10 06 BPL $FA65 A:F0 X:02 Y:97 P:E5 SP:F9 CYC:330 SL:126 +FA5F 90 04 BCC $FA65 A:F0 X:02 Y:97 P:E5 SP:F9 CYC:336 SL:126 +FA61 C9 F0 CMP #$F0 A:F0 X:02 Y:97 P:E5 SP:F9 CYC: 1 SL:127 +FA63 F0 02 BEQ $FA67 A:F0 X:02 Y:97 P:67 SP:F9 CYC: 7 SL:127 +FA67 60 RTS A:F0 X:02 Y:97 P:67 SP:F9 CYC: 16 SL:127 +E96D AD 47 06 LDA $0647 = 36 A:F0 X:02 Y:97 P:67 SP:FB CYC: 34 SL:127 +E970 C9 36 CMP #$36 A:36 X:02 Y:97 P:65 SP:FB CYC: 46 SL:127 +E972 F0 02 BEQ $E976 A:36 X:02 Y:97 P:67 SP:FB CYC: 52 SL:127 +E976 C8 INY A:36 X:02 Y:97 P:67 SP:FB CYC: 61 SL:127 +E977 A9 EB LDA #$EB A:36 X:02 Y:98 P:E5 SP:FB CYC: 67 SL:127 +E979 85 47 STA $47 = 47 A:EB X:02 Y:98 P:E5 SP:FB CYC: 73 SL:127 +E97B 20 31 FA JSR $FA31 A:EB X:02 Y:98 P:E5 SP:FB CYC: 82 SL:127 +FA31 24 01 BIT $01 = FF A:EB X:02 Y:98 P:E5 SP:F9 CYC:100 SL:127 +FA33 18 CLC A:EB X:02 Y:98 P:E5 SP:F9 CYC:109 SL:127 +FA34 A9 40 LDA #$40 A:EB X:02 Y:98 P:E4 SP:F9 CYC:115 SL:127 +FA36 60 RTS A:40 X:02 Y:98 P:64 SP:F9 CYC:121 SL:127 +E97E C7 47 *DCP $47 = EB A:40 X:02 Y:98 P:64 SP:FB CYC:139 SL:127 +E980 EA NOP A:40 X:02 Y:98 P:64 SP:FB CYC:154 SL:127 +E981 EA NOP A:40 X:02 Y:98 P:64 SP:FB CYC:160 SL:127 +E982 EA NOP A:40 X:02 Y:98 P:64 SP:FB CYC:166 SL:127 +E983 EA NOP A:40 X:02 Y:98 P:64 SP:FB CYC:172 SL:127 +E984 20 37 FA JSR $FA37 A:40 X:02 Y:98 P:64 SP:FB CYC:178 SL:127 +FA37 50 2C BVC $FA65 A:40 X:02 Y:98 P:64 SP:F9 CYC:196 SL:127 +FA39 B0 2A BCS $FA65 A:40 X:02 Y:98 P:64 SP:F9 CYC:202 SL:127 +FA3B 30 28 BMI $FA65 A:40 X:02 Y:98 P:64 SP:F9 CYC:208 SL:127 +FA3D C9 40 CMP #$40 A:40 X:02 Y:98 P:64 SP:F9 CYC:214 SL:127 +FA3F D0 24 BNE $FA65 A:40 X:02 Y:98 P:67 SP:F9 CYC:220 SL:127 +FA41 60 RTS A:40 X:02 Y:98 P:67 SP:F9 CYC:226 SL:127 +E987 A5 47 LDA $47 = EA A:40 X:02 Y:98 P:67 SP:FB CYC:244 SL:127 +E989 C9 EA CMP #$EA A:EA X:02 Y:98 P:E5 SP:FB CYC:253 SL:127 +E98B F0 02 BEQ $E98F A:EA X:02 Y:98 P:67 SP:FB CYC:259 SL:127 +E98F C8 INY A:EA X:02 Y:98 P:67 SP:FB CYC:268 SL:127 +E990 A9 00 LDA #$00 A:EA X:02 Y:99 P:E5 SP:FB CYC:274 SL:127 +E992 85 47 STA $47 = EA A:00 X:02 Y:99 P:67 SP:FB CYC:280 SL:127 +E994 20 42 FA JSR $FA42 A:00 X:02 Y:99 P:67 SP:FB CYC:289 SL:127 +FA42 B8 CLV A:00 X:02 Y:99 P:67 SP:F9 CYC:307 SL:127 +FA43 38 SEC A:00 X:02 Y:99 P:27 SP:F9 CYC:313 SL:127 +FA44 A9 FF LDA #$FF A:00 X:02 Y:99 P:27 SP:F9 CYC:319 SL:127 +FA46 60 RTS A:FF X:02 Y:99 P:A5 SP:F9 CYC:325 SL:127 +E997 C7 47 *DCP $47 = 00 A:FF X:02 Y:99 P:A5 SP:FB CYC: 2 SL:128 +E999 EA NOP A:FF X:02 Y:99 P:27 SP:FB CYC: 17 SL:128 +E99A EA NOP A:FF X:02 Y:99 P:27 SP:FB CYC: 23 SL:128 +E99B EA NOP A:FF X:02 Y:99 P:27 SP:FB CYC: 29 SL:128 +E99C EA NOP A:FF X:02 Y:99 P:27 SP:FB CYC: 35 SL:128 +E99D 20 47 FA JSR $FA47 A:FF X:02 Y:99 P:27 SP:FB CYC: 41 SL:128 +FA47 70 1C BVS $FA65 A:FF X:02 Y:99 P:27 SP:F9 CYC: 59 SL:128 +FA49 D0 1A BNE $FA65 A:FF X:02 Y:99 P:27 SP:F9 CYC: 65 SL:128 +FA4B 30 18 BMI $FA65 A:FF X:02 Y:99 P:27 SP:F9 CYC: 71 SL:128 +FA4D 90 16 BCC $FA65 A:FF X:02 Y:99 P:27 SP:F9 CYC: 77 SL:128 +FA4F C9 FF CMP #$FF A:FF X:02 Y:99 P:27 SP:F9 CYC: 83 SL:128 +FA51 D0 12 BNE $FA65 A:FF X:02 Y:99 P:27 SP:F9 CYC: 89 SL:128 +FA53 60 RTS A:FF X:02 Y:99 P:27 SP:F9 CYC: 95 SL:128 +E9A0 A5 47 LDA $47 = FF A:FF X:02 Y:99 P:27 SP:FB CYC:113 SL:128 +E9A2 C9 FF CMP #$FF A:FF X:02 Y:99 P:A5 SP:FB CYC:122 SL:128 +E9A4 F0 02 BEQ $E9A8 A:FF X:02 Y:99 P:27 SP:FB CYC:128 SL:128 +E9A8 C8 INY A:FF X:02 Y:99 P:27 SP:FB CYC:137 SL:128 +E9A9 A9 37 LDA #$37 A:FF X:02 Y:9A P:A5 SP:FB CYC:143 SL:128 +E9AB 85 47 STA $47 = FF A:37 X:02 Y:9A P:25 SP:FB CYC:149 SL:128 +E9AD 20 54 FA JSR $FA54 A:37 X:02 Y:9A P:25 SP:FB CYC:158 SL:128 +FA54 24 01 BIT $01 = FF A:37 X:02 Y:9A P:25 SP:F9 CYC:176 SL:128 +FA56 A9 F0 LDA #$F0 A:37 X:02 Y:9A P:E5 SP:F9 CYC:185 SL:128 +FA58 60 RTS A:F0 X:02 Y:9A P:E5 SP:F9 CYC:191 SL:128 +E9B0 C7 47 *DCP $47 = 37 A:F0 X:02 Y:9A P:E5 SP:FB CYC:209 SL:128 +E9B2 EA NOP A:F0 X:02 Y:9A P:E5 SP:FB CYC:224 SL:128 +E9B3 EA NOP A:F0 X:02 Y:9A P:E5 SP:FB CYC:230 SL:128 +E9B4 EA NOP A:F0 X:02 Y:9A P:E5 SP:FB CYC:236 SL:128 +E9B5 EA NOP A:F0 X:02 Y:9A P:E5 SP:FB CYC:242 SL:128 +E9B6 20 59 FA JSR $FA59 A:F0 X:02 Y:9A P:E5 SP:FB CYC:248 SL:128 +FA59 50 0A BVC $FA65 A:F0 X:02 Y:9A P:E5 SP:F9 CYC:266 SL:128 +FA5B F0 08 BEQ $FA65 A:F0 X:02 Y:9A P:E5 SP:F9 CYC:272 SL:128 +FA5D 10 06 BPL $FA65 A:F0 X:02 Y:9A P:E5 SP:F9 CYC:278 SL:128 +FA5F 90 04 BCC $FA65 A:F0 X:02 Y:9A P:E5 SP:F9 CYC:284 SL:128 +FA61 C9 F0 CMP #$F0 A:F0 X:02 Y:9A P:E5 SP:F9 CYC:290 SL:128 +FA63 F0 02 BEQ $FA67 A:F0 X:02 Y:9A P:67 SP:F9 CYC:296 SL:128 +FA67 60 RTS A:F0 X:02 Y:9A P:67 SP:F9 CYC:305 SL:128 +E9B9 A5 47 LDA $47 = 36 A:F0 X:02 Y:9A P:67 SP:FB CYC:323 SL:128 +E9BB C9 36 CMP #$36 A:36 X:02 Y:9A P:65 SP:FB CYC:332 SL:128 +E9BD F0 02 BEQ $E9C1 A:36 X:02 Y:9A P:67 SP:FB CYC:338 SL:128 +E9C1 C8 INY A:36 X:02 Y:9A P:67 SP:FB CYC: 6 SL:129 +E9C2 A9 EB LDA #$EB A:36 X:02 Y:9B P:E5 SP:FB CYC: 12 SL:129 +E9C4 8D 47 06 STA $0647 = 36 A:EB X:02 Y:9B P:E5 SP:FB CYC: 18 SL:129 +E9C7 20 31 FA JSR $FA31 A:EB X:02 Y:9B P:E5 SP:FB CYC: 30 SL:129 +FA31 24 01 BIT $01 = FF A:EB X:02 Y:9B P:E5 SP:F9 CYC: 48 SL:129 +FA33 18 CLC A:EB X:02 Y:9B P:E5 SP:F9 CYC: 57 SL:129 +FA34 A9 40 LDA #$40 A:EB X:02 Y:9B P:E4 SP:F9 CYC: 63 SL:129 +FA36 60 RTS A:40 X:02 Y:9B P:64 SP:F9 CYC: 69 SL:129 +E9CA CF 47 06 *DCP $0647 = EB A:40 X:02 Y:9B P:64 SP:FB CYC: 87 SL:129 +E9CD EA NOP A:40 X:02 Y:9B P:64 SP:FB CYC:105 SL:129 +E9CE EA NOP A:40 X:02 Y:9B P:64 SP:FB CYC:111 SL:129 +E9CF EA NOP A:40 X:02 Y:9B P:64 SP:FB CYC:117 SL:129 +E9D0 EA NOP A:40 X:02 Y:9B P:64 SP:FB CYC:123 SL:129 +E9D1 20 37 FA JSR $FA37 A:40 X:02 Y:9B P:64 SP:FB CYC:129 SL:129 +FA37 50 2C BVC $FA65 A:40 X:02 Y:9B P:64 SP:F9 CYC:147 SL:129 +FA39 B0 2A BCS $FA65 A:40 X:02 Y:9B P:64 SP:F9 CYC:153 SL:129 +FA3B 30 28 BMI $FA65 A:40 X:02 Y:9B P:64 SP:F9 CYC:159 SL:129 +FA3D C9 40 CMP #$40 A:40 X:02 Y:9B P:64 SP:F9 CYC:165 SL:129 +FA3F D0 24 BNE $FA65 A:40 X:02 Y:9B P:67 SP:F9 CYC:171 SL:129 +FA41 60 RTS A:40 X:02 Y:9B P:67 SP:F9 CYC:177 SL:129 +E9D4 AD 47 06 LDA $0647 = EA A:40 X:02 Y:9B P:67 SP:FB CYC:195 SL:129 +E9D7 C9 EA CMP #$EA A:EA X:02 Y:9B P:E5 SP:FB CYC:207 SL:129 +E9D9 F0 02 BEQ $E9DD A:EA X:02 Y:9B P:67 SP:FB CYC:213 SL:129 +E9DD C8 INY A:EA X:02 Y:9B P:67 SP:FB CYC:222 SL:129 +E9DE A9 00 LDA #$00 A:EA X:02 Y:9C P:E5 SP:FB CYC:228 SL:129 +E9E0 8D 47 06 STA $0647 = EA A:00 X:02 Y:9C P:67 SP:FB CYC:234 SL:129 +E9E3 20 42 FA JSR $FA42 A:00 X:02 Y:9C P:67 SP:FB CYC:246 SL:129 +FA42 B8 CLV A:00 X:02 Y:9C P:67 SP:F9 CYC:264 SL:129 +FA43 38 SEC A:00 X:02 Y:9C P:27 SP:F9 CYC:270 SL:129 +FA44 A9 FF LDA #$FF A:00 X:02 Y:9C P:27 SP:F9 CYC:276 SL:129 +FA46 60 RTS A:FF X:02 Y:9C P:A5 SP:F9 CYC:282 SL:129 +E9E6 CF 47 06 *DCP $0647 = 00 A:FF X:02 Y:9C P:A5 SP:FB CYC:300 SL:129 +E9E9 EA NOP A:FF X:02 Y:9C P:27 SP:FB CYC:318 SL:129 +E9EA EA NOP A:FF X:02 Y:9C P:27 SP:FB CYC:324 SL:129 +E9EB EA NOP A:FF X:02 Y:9C P:27 SP:FB CYC:330 SL:129 +E9EC EA NOP A:FF X:02 Y:9C P:27 SP:FB CYC:336 SL:129 +E9ED 20 47 FA JSR $FA47 A:FF X:02 Y:9C P:27 SP:FB CYC: 1 SL:130 +FA47 70 1C BVS $FA65 A:FF X:02 Y:9C P:27 SP:F9 CYC: 19 SL:130 +FA49 D0 1A BNE $FA65 A:FF X:02 Y:9C P:27 SP:F9 CYC: 25 SL:130 +FA4B 30 18 BMI $FA65 A:FF X:02 Y:9C P:27 SP:F9 CYC: 31 SL:130 +FA4D 90 16 BCC $FA65 A:FF X:02 Y:9C P:27 SP:F9 CYC: 37 SL:130 +FA4F C9 FF CMP #$FF A:FF X:02 Y:9C P:27 SP:F9 CYC: 43 SL:130 +FA51 D0 12 BNE $FA65 A:FF X:02 Y:9C P:27 SP:F9 CYC: 49 SL:130 +FA53 60 RTS A:FF X:02 Y:9C P:27 SP:F9 CYC: 55 SL:130 +E9F0 AD 47 06 LDA $0647 = FF A:FF X:02 Y:9C P:27 SP:FB CYC: 73 SL:130 +E9F3 C9 FF CMP #$FF A:FF X:02 Y:9C P:A5 SP:FB CYC: 85 SL:130 +E9F5 F0 02 BEQ $E9F9 A:FF X:02 Y:9C P:27 SP:FB CYC: 91 SL:130 +E9F9 C8 INY A:FF X:02 Y:9C P:27 SP:FB CYC:100 SL:130 +E9FA A9 37 LDA #$37 A:FF X:02 Y:9D P:A5 SP:FB CYC:106 SL:130 +E9FC 8D 47 06 STA $0647 = FF A:37 X:02 Y:9D P:25 SP:FB CYC:112 SL:130 +E9FF 20 54 FA JSR $FA54 A:37 X:02 Y:9D P:25 SP:FB CYC:124 SL:130 +FA54 24 01 BIT $01 = FF A:37 X:02 Y:9D P:25 SP:F9 CYC:142 SL:130 +FA56 A9 F0 LDA #$F0 A:37 X:02 Y:9D P:E5 SP:F9 CYC:151 SL:130 +FA58 60 RTS A:F0 X:02 Y:9D P:E5 SP:F9 CYC:157 SL:130 +EA02 CF 47 06 *DCP $0647 = 37 A:F0 X:02 Y:9D P:E5 SP:FB CYC:175 SL:130 +EA05 EA NOP A:F0 X:02 Y:9D P:E5 SP:FB CYC:193 SL:130 +EA06 EA NOP A:F0 X:02 Y:9D P:E5 SP:FB CYC:199 SL:130 +EA07 EA NOP A:F0 X:02 Y:9D P:E5 SP:FB CYC:205 SL:130 +EA08 EA NOP A:F0 X:02 Y:9D P:E5 SP:FB CYC:211 SL:130 +EA09 20 59 FA JSR $FA59 A:F0 X:02 Y:9D P:E5 SP:FB CYC:217 SL:130 +FA59 50 0A BVC $FA65 A:F0 X:02 Y:9D P:E5 SP:F9 CYC:235 SL:130 +FA5B F0 08 BEQ $FA65 A:F0 X:02 Y:9D P:E5 SP:F9 CYC:241 SL:130 +FA5D 10 06 BPL $FA65 A:F0 X:02 Y:9D P:E5 SP:F9 CYC:247 SL:130 +FA5F 90 04 BCC $FA65 A:F0 X:02 Y:9D P:E5 SP:F9 CYC:253 SL:130 +FA61 C9 F0 CMP #$F0 A:F0 X:02 Y:9D P:E5 SP:F9 CYC:259 SL:130 +FA63 F0 02 BEQ $FA67 A:F0 X:02 Y:9D P:67 SP:F9 CYC:265 SL:130 +FA67 60 RTS A:F0 X:02 Y:9D P:67 SP:F9 CYC:274 SL:130 +EA0C AD 47 06 LDA $0647 = 36 A:F0 X:02 Y:9D P:67 SP:FB CYC:292 SL:130 +EA0F C9 36 CMP #$36 A:36 X:02 Y:9D P:65 SP:FB CYC:304 SL:130 +EA11 F0 02 BEQ $EA15 A:36 X:02 Y:9D P:67 SP:FB CYC:310 SL:130 +EA15 A9 EB LDA #$EB A:36 X:02 Y:9D P:67 SP:FB CYC:319 SL:130 +EA17 8D 47 06 STA $0647 = 36 A:EB X:02 Y:9D P:E5 SP:FB CYC:325 SL:130 +EA1A A9 48 LDA #$48 A:EB X:02 Y:9D P:E5 SP:FB CYC:337 SL:130 +EA1C 85 45 STA $45 = 32 A:48 X:02 Y:9D P:65 SP:FB CYC: 2 SL:131 +EA1E A9 05 LDA #$05 A:48 X:02 Y:9D P:65 SP:FB CYC: 11 SL:131 +EA20 85 46 STA $46 = 04 A:05 X:02 Y:9D P:65 SP:FB CYC: 17 SL:131 +EA22 A0 FF LDY #$FF A:05 X:02 Y:9D P:65 SP:FB CYC: 26 SL:131 +EA24 20 31 FA JSR $FA31 A:05 X:02 Y:FF P:E5 SP:FB CYC: 32 SL:131 +FA31 24 01 BIT $01 = FF A:05 X:02 Y:FF P:E5 SP:F9 CYC: 50 SL:131 +FA33 18 CLC A:05 X:02 Y:FF P:E5 SP:F9 CYC: 59 SL:131 +FA34 A9 40 LDA #$40 A:05 X:02 Y:FF P:E4 SP:F9 CYC: 65 SL:131 +FA36 60 RTS A:40 X:02 Y:FF P:64 SP:F9 CYC: 71 SL:131 +EA27 D3 45 *DCP ($45),Y = 0548 @ 0647 = EB A:40 X:02 Y:FF P:64 SP:FB CYC: 89 SL:131 +EA29 EA NOP A:40 X:02 Y:FF P:64 SP:FB CYC:113 SL:131 +EA2A EA NOP A:40 X:02 Y:FF P:64 SP:FB CYC:119 SL:131 +EA2B 08 PHP A:40 X:02 Y:FF P:64 SP:FB CYC:125 SL:131 +EA2C 48 PHA A:40 X:02 Y:FF P:64 SP:FA CYC:134 SL:131 +EA2D A0 9E LDY #$9E A:40 X:02 Y:FF P:64 SP:F9 CYC:143 SL:131 +EA2F 68 PLA A:40 X:02 Y:9E P:E4 SP:F9 CYC:149 SL:131 +EA30 28 PLP A:40 X:02 Y:9E P:64 SP:FA CYC:161 SL:131 +EA31 20 37 FA JSR $FA37 A:40 X:02 Y:9E P:64 SP:FB CYC:173 SL:131 +FA37 50 2C BVC $FA65 A:40 X:02 Y:9E P:64 SP:F9 CYC:191 SL:131 +FA39 B0 2A BCS $FA65 A:40 X:02 Y:9E P:64 SP:F9 CYC:197 SL:131 +FA3B 30 28 BMI $FA65 A:40 X:02 Y:9E P:64 SP:F9 CYC:203 SL:131 +FA3D C9 40 CMP #$40 A:40 X:02 Y:9E P:64 SP:F9 CYC:209 SL:131 +FA3F D0 24 BNE $FA65 A:40 X:02 Y:9E P:67 SP:F9 CYC:215 SL:131 +FA41 60 RTS A:40 X:02 Y:9E P:67 SP:F9 CYC:221 SL:131 +EA34 AD 47 06 LDA $0647 = EA A:40 X:02 Y:9E P:67 SP:FB CYC:239 SL:131 +EA37 C9 EA CMP #$EA A:EA X:02 Y:9E P:E5 SP:FB CYC:251 SL:131 +EA39 F0 02 BEQ $EA3D A:EA X:02 Y:9E P:67 SP:FB CYC:257 SL:131 +EA3D A0 FF LDY #$FF A:EA X:02 Y:9E P:67 SP:FB CYC:266 SL:131 +EA3F A9 00 LDA #$00 A:EA X:02 Y:FF P:E5 SP:FB CYC:272 SL:131 +EA41 8D 47 06 STA $0647 = EA A:00 X:02 Y:FF P:67 SP:FB CYC:278 SL:131 +EA44 20 42 FA JSR $FA42 A:00 X:02 Y:FF P:67 SP:FB CYC:290 SL:131 +FA42 B8 CLV A:00 X:02 Y:FF P:67 SP:F9 CYC:308 SL:131 +FA43 38 SEC A:00 X:02 Y:FF P:27 SP:F9 CYC:314 SL:131 +FA44 A9 FF LDA #$FF A:00 X:02 Y:FF P:27 SP:F9 CYC:320 SL:131 +FA46 60 RTS A:FF X:02 Y:FF P:A5 SP:F9 CYC:326 SL:131 +EA47 D3 45 *DCP ($45),Y = 0548 @ 0647 = 00 A:FF X:02 Y:FF P:A5 SP:FB CYC: 3 SL:132 +EA49 EA NOP A:FF X:02 Y:FF P:27 SP:FB CYC: 27 SL:132 +EA4A EA NOP A:FF X:02 Y:FF P:27 SP:FB CYC: 33 SL:132 +EA4B 08 PHP A:FF X:02 Y:FF P:27 SP:FB CYC: 39 SL:132 +EA4C 48 PHA A:FF X:02 Y:FF P:27 SP:FA CYC: 48 SL:132 +EA4D A0 9F LDY #$9F A:FF X:02 Y:FF P:27 SP:F9 CYC: 57 SL:132 +EA4F 68 PLA A:FF X:02 Y:9F P:A5 SP:F9 CYC: 63 SL:132 +EA50 28 PLP A:FF X:02 Y:9F P:A5 SP:FA CYC: 75 SL:132 +EA51 20 47 FA JSR $FA47 A:FF X:02 Y:9F P:27 SP:FB CYC: 87 SL:132 +FA47 70 1C BVS $FA65 A:FF X:02 Y:9F P:27 SP:F9 CYC:105 SL:132 +FA49 D0 1A BNE $FA65 A:FF X:02 Y:9F P:27 SP:F9 CYC:111 SL:132 +FA4B 30 18 BMI $FA65 A:FF X:02 Y:9F P:27 SP:F9 CYC:117 SL:132 +FA4D 90 16 BCC $FA65 A:FF X:02 Y:9F P:27 SP:F9 CYC:123 SL:132 +FA4F C9 FF CMP #$FF A:FF X:02 Y:9F P:27 SP:F9 CYC:129 SL:132 +FA51 D0 12 BNE $FA65 A:FF X:02 Y:9F P:27 SP:F9 CYC:135 SL:132 +FA53 60 RTS A:FF X:02 Y:9F P:27 SP:F9 CYC:141 SL:132 +EA54 AD 47 06 LDA $0647 = FF A:FF X:02 Y:9F P:27 SP:FB CYC:159 SL:132 +EA57 C9 FF CMP #$FF A:FF X:02 Y:9F P:A5 SP:FB CYC:171 SL:132 +EA59 F0 02 BEQ $EA5D A:FF X:02 Y:9F P:27 SP:FB CYC:177 SL:132 +EA5D A0 FF LDY #$FF A:FF X:02 Y:9F P:27 SP:FB CYC:186 SL:132 +EA5F A9 37 LDA #$37 A:FF X:02 Y:FF P:A5 SP:FB CYC:192 SL:132 +EA61 8D 47 06 STA $0647 = FF A:37 X:02 Y:FF P:25 SP:FB CYC:198 SL:132 +EA64 20 54 FA JSR $FA54 A:37 X:02 Y:FF P:25 SP:FB CYC:210 SL:132 +FA54 24 01 BIT $01 = FF A:37 X:02 Y:FF P:25 SP:F9 CYC:228 SL:132 +FA56 A9 F0 LDA #$F0 A:37 X:02 Y:FF P:E5 SP:F9 CYC:237 SL:132 +FA58 60 RTS A:F0 X:02 Y:FF P:E5 SP:F9 CYC:243 SL:132 +EA67 D3 45 *DCP ($45),Y = 0548 @ 0647 = 37 A:F0 X:02 Y:FF P:E5 SP:FB CYC:261 SL:132 +EA69 EA NOP A:F0 X:02 Y:FF P:E5 SP:FB CYC:285 SL:132 +EA6A EA NOP A:F0 X:02 Y:FF P:E5 SP:FB CYC:291 SL:132 +EA6B 08 PHP A:F0 X:02 Y:FF P:E5 SP:FB CYC:297 SL:132 +EA6C 48 PHA A:F0 X:02 Y:FF P:E5 SP:FA CYC:306 SL:132 +EA6D A0 A0 LDY #$A0 A:F0 X:02 Y:FF P:E5 SP:F9 CYC:315 SL:132 +EA6F 68 PLA A:F0 X:02 Y:A0 P:E5 SP:F9 CYC:321 SL:132 +EA70 28 PLP A:F0 X:02 Y:A0 P:E5 SP:FA CYC:333 SL:132 +EA71 20 59 FA JSR $FA59 A:F0 X:02 Y:A0 P:E5 SP:FB CYC: 4 SL:133 +FA59 50 0A BVC $FA65 A:F0 X:02 Y:A0 P:E5 SP:F9 CYC: 22 SL:133 +FA5B F0 08 BEQ $FA65 A:F0 X:02 Y:A0 P:E5 SP:F9 CYC: 28 SL:133 +FA5D 10 06 BPL $FA65 A:F0 X:02 Y:A0 P:E5 SP:F9 CYC: 34 SL:133 +FA5F 90 04 BCC $FA65 A:F0 X:02 Y:A0 P:E5 SP:F9 CYC: 40 SL:133 +FA61 C9 F0 CMP #$F0 A:F0 X:02 Y:A0 P:E5 SP:F9 CYC: 46 SL:133 +FA63 F0 02 BEQ $FA67 A:F0 X:02 Y:A0 P:67 SP:F9 CYC: 52 SL:133 +FA67 60 RTS A:F0 X:02 Y:A0 P:67 SP:F9 CYC: 61 SL:133 +EA74 AD 47 06 LDA $0647 = 36 A:F0 X:02 Y:A0 P:67 SP:FB CYC: 79 SL:133 +EA77 C9 36 CMP #$36 A:36 X:02 Y:A0 P:65 SP:FB CYC: 91 SL:133 +EA79 F0 02 BEQ $EA7D A:36 X:02 Y:A0 P:67 SP:FB CYC: 97 SL:133 +EA7D A0 A1 LDY #$A1 A:36 X:02 Y:A0 P:67 SP:FB CYC:106 SL:133 +EA7F A2 FF LDX #$FF A:36 X:02 Y:A1 P:E5 SP:FB CYC:112 SL:133 +EA81 A9 EB LDA #$EB A:36 X:FF Y:A1 P:E5 SP:FB CYC:118 SL:133 +EA83 85 47 STA $47 = 36 A:EB X:FF Y:A1 P:E5 SP:FB CYC:124 SL:133 +EA85 20 31 FA JSR $FA31 A:EB X:FF Y:A1 P:E5 SP:FB CYC:133 SL:133 +FA31 24 01 BIT $01 = FF A:EB X:FF Y:A1 P:E5 SP:F9 CYC:151 SL:133 +FA33 18 CLC A:EB X:FF Y:A1 P:E5 SP:F9 CYC:160 SL:133 +FA34 A9 40 LDA #$40 A:EB X:FF Y:A1 P:E4 SP:F9 CYC:166 SL:133 +FA36 60 RTS A:40 X:FF Y:A1 P:64 SP:F9 CYC:172 SL:133 +EA88 D7 48 *DCP $48,X @ 47 = EB A:40 X:FF Y:A1 P:64 SP:FB CYC:190 SL:133 +EA8A EA NOP A:40 X:FF Y:A1 P:64 SP:FB CYC:208 SL:133 +EA8B EA NOP A:40 X:FF Y:A1 P:64 SP:FB CYC:214 SL:133 +EA8C EA NOP A:40 X:FF Y:A1 P:64 SP:FB CYC:220 SL:133 +EA8D EA NOP A:40 X:FF Y:A1 P:64 SP:FB CYC:226 SL:133 +EA8E 20 37 FA JSR $FA37 A:40 X:FF Y:A1 P:64 SP:FB CYC:232 SL:133 +FA37 50 2C BVC $FA65 A:40 X:FF Y:A1 P:64 SP:F9 CYC:250 SL:133 +FA39 B0 2A BCS $FA65 A:40 X:FF Y:A1 P:64 SP:F9 CYC:256 SL:133 +FA3B 30 28 BMI $FA65 A:40 X:FF Y:A1 P:64 SP:F9 CYC:262 SL:133 +FA3D C9 40 CMP #$40 A:40 X:FF Y:A1 P:64 SP:F9 CYC:268 SL:133 +FA3F D0 24 BNE $FA65 A:40 X:FF Y:A1 P:67 SP:F9 CYC:274 SL:133 +FA41 60 RTS A:40 X:FF Y:A1 P:67 SP:F9 CYC:280 SL:133 +EA91 A5 47 LDA $47 = EA A:40 X:FF Y:A1 P:67 SP:FB CYC:298 SL:133 +EA93 C9 EA CMP #$EA A:EA X:FF Y:A1 P:E5 SP:FB CYC:307 SL:133 +EA95 F0 02 BEQ $EA99 A:EA X:FF Y:A1 P:67 SP:FB CYC:313 SL:133 +EA99 C8 INY A:EA X:FF Y:A1 P:67 SP:FB CYC:322 SL:133 +EA9A A9 00 LDA #$00 A:EA X:FF Y:A2 P:E5 SP:FB CYC:328 SL:133 +EA9C 85 47 STA $47 = EA A:00 X:FF Y:A2 P:67 SP:FB CYC:334 SL:133 +EA9E 20 42 FA JSR $FA42 A:00 X:FF Y:A2 P:67 SP:FB CYC: 2 SL:134 +FA42 B8 CLV A:00 X:FF Y:A2 P:67 SP:F9 CYC: 20 SL:134 +FA43 38 SEC A:00 X:FF Y:A2 P:27 SP:F9 CYC: 26 SL:134 +FA44 A9 FF LDA #$FF A:00 X:FF Y:A2 P:27 SP:F9 CYC: 32 SL:134 +FA46 60 RTS A:FF X:FF Y:A2 P:A5 SP:F9 CYC: 38 SL:134 +EAA1 D7 48 *DCP $48,X @ 47 = 00 A:FF X:FF Y:A2 P:A5 SP:FB CYC: 56 SL:134 +EAA3 EA NOP A:FF X:FF Y:A2 P:27 SP:FB CYC: 74 SL:134 +EAA4 EA NOP A:FF X:FF Y:A2 P:27 SP:FB CYC: 80 SL:134 +EAA5 EA NOP A:FF X:FF Y:A2 P:27 SP:FB CYC: 86 SL:134 +EAA6 EA NOP A:FF X:FF Y:A2 P:27 SP:FB CYC: 92 SL:134 +EAA7 20 47 FA JSR $FA47 A:FF X:FF Y:A2 P:27 SP:FB CYC: 98 SL:134 +FA47 70 1C BVS $FA65 A:FF X:FF Y:A2 P:27 SP:F9 CYC:116 SL:134 +FA49 D0 1A BNE $FA65 A:FF X:FF Y:A2 P:27 SP:F9 CYC:122 SL:134 +FA4B 30 18 BMI $FA65 A:FF X:FF Y:A2 P:27 SP:F9 CYC:128 SL:134 +FA4D 90 16 BCC $FA65 A:FF X:FF Y:A2 P:27 SP:F9 CYC:134 SL:134 +FA4F C9 FF CMP #$FF A:FF X:FF Y:A2 P:27 SP:F9 CYC:140 SL:134 +FA51 D0 12 BNE $FA65 A:FF X:FF Y:A2 P:27 SP:F9 CYC:146 SL:134 +FA53 60 RTS A:FF X:FF Y:A2 P:27 SP:F9 CYC:152 SL:134 +EAAA A5 47 LDA $47 = FF A:FF X:FF Y:A2 P:27 SP:FB CYC:170 SL:134 +EAAC C9 FF CMP #$FF A:FF X:FF Y:A2 P:A5 SP:FB CYC:179 SL:134 +EAAE F0 02 BEQ $EAB2 A:FF X:FF Y:A2 P:27 SP:FB CYC:185 SL:134 +EAB2 C8 INY A:FF X:FF Y:A2 P:27 SP:FB CYC:194 SL:134 +EAB3 A9 37 LDA #$37 A:FF X:FF Y:A3 P:A5 SP:FB CYC:200 SL:134 +EAB5 85 47 STA $47 = FF A:37 X:FF Y:A3 P:25 SP:FB CYC:206 SL:134 +EAB7 20 54 FA JSR $FA54 A:37 X:FF Y:A3 P:25 SP:FB CYC:215 SL:134 +FA54 24 01 BIT $01 = FF A:37 X:FF Y:A3 P:25 SP:F9 CYC:233 SL:134 +FA56 A9 F0 LDA #$F0 A:37 X:FF Y:A3 P:E5 SP:F9 CYC:242 SL:134 +FA58 60 RTS A:F0 X:FF Y:A3 P:E5 SP:F9 CYC:248 SL:134 +EABA D7 48 *DCP $48,X @ 47 = 37 A:F0 X:FF Y:A3 P:E5 SP:FB CYC:266 SL:134 +EABC EA NOP A:F0 X:FF Y:A3 P:E5 SP:FB CYC:284 SL:134 +EABD EA NOP A:F0 X:FF Y:A3 P:E5 SP:FB CYC:290 SL:134 +EABE EA NOP A:F0 X:FF Y:A3 P:E5 SP:FB CYC:296 SL:134 +EABF EA NOP A:F0 X:FF Y:A3 P:E5 SP:FB CYC:302 SL:134 +EAC0 20 59 FA JSR $FA59 A:F0 X:FF Y:A3 P:E5 SP:FB CYC:308 SL:134 +FA59 50 0A BVC $FA65 A:F0 X:FF Y:A3 P:E5 SP:F9 CYC:326 SL:134 +FA5B F0 08 BEQ $FA65 A:F0 X:FF Y:A3 P:E5 SP:F9 CYC:332 SL:134 +FA5D 10 06 BPL $FA65 A:F0 X:FF Y:A3 P:E5 SP:F9 CYC:338 SL:134 +FA5F 90 04 BCC $FA65 A:F0 X:FF Y:A3 P:E5 SP:F9 CYC: 3 SL:135 +FA61 C9 F0 CMP #$F0 A:F0 X:FF Y:A3 P:E5 SP:F9 CYC: 9 SL:135 +FA63 F0 02 BEQ $FA67 A:F0 X:FF Y:A3 P:67 SP:F9 CYC: 15 SL:135 +FA67 60 RTS A:F0 X:FF Y:A3 P:67 SP:F9 CYC: 24 SL:135 +EAC3 A5 47 LDA $47 = 36 A:F0 X:FF Y:A3 P:67 SP:FB CYC: 42 SL:135 +EAC5 C9 36 CMP #$36 A:36 X:FF Y:A3 P:65 SP:FB CYC: 51 SL:135 +EAC7 F0 02 BEQ $EACB A:36 X:FF Y:A3 P:67 SP:FB CYC: 57 SL:135 +EACB A9 EB LDA #$EB A:36 X:FF Y:A3 P:67 SP:FB CYC: 66 SL:135 +EACD 8D 47 06 STA $0647 = 36 A:EB X:FF Y:A3 P:E5 SP:FB CYC: 72 SL:135 +EAD0 A0 FF LDY #$FF A:EB X:FF Y:A3 P:E5 SP:FB CYC: 84 SL:135 +EAD2 20 31 FA JSR $FA31 A:EB X:FF Y:FF P:E5 SP:FB CYC: 90 SL:135 +FA31 24 01 BIT $01 = FF A:EB X:FF Y:FF P:E5 SP:F9 CYC:108 SL:135 +FA33 18 CLC A:EB X:FF Y:FF P:E5 SP:F9 CYC:117 SL:135 +FA34 A9 40 LDA #$40 A:EB X:FF Y:FF P:E4 SP:F9 CYC:123 SL:135 +FA36 60 RTS A:40 X:FF Y:FF P:64 SP:F9 CYC:129 SL:135 +EAD5 DB 48 05 *DCP $0548,Y @ 0647 = EB A:40 X:FF Y:FF P:64 SP:FB CYC:147 SL:135 +EAD8 EA NOP A:40 X:FF Y:FF P:64 SP:FB CYC:168 SL:135 +EAD9 EA NOP A:40 X:FF Y:FF P:64 SP:FB CYC:174 SL:135 +EADA 08 PHP A:40 X:FF Y:FF P:64 SP:FB CYC:180 SL:135 +EADB 48 PHA A:40 X:FF Y:FF P:64 SP:FA CYC:189 SL:135 +EADC A0 A4 LDY #$A4 A:40 X:FF Y:FF P:64 SP:F9 CYC:198 SL:135 +EADE 68 PLA A:40 X:FF Y:A4 P:E4 SP:F9 CYC:204 SL:135 +EADF 28 PLP A:40 X:FF Y:A4 P:64 SP:FA CYC:216 SL:135 +EAE0 20 37 FA JSR $FA37 A:40 X:FF Y:A4 P:64 SP:FB CYC:228 SL:135 +FA37 50 2C BVC $FA65 A:40 X:FF Y:A4 P:64 SP:F9 CYC:246 SL:135 +FA39 B0 2A BCS $FA65 A:40 X:FF Y:A4 P:64 SP:F9 CYC:252 SL:135 +FA3B 30 28 BMI $FA65 A:40 X:FF Y:A4 P:64 SP:F9 CYC:258 SL:135 +FA3D C9 40 CMP #$40 A:40 X:FF Y:A4 P:64 SP:F9 CYC:264 SL:135 +FA3F D0 24 BNE $FA65 A:40 X:FF Y:A4 P:67 SP:F9 CYC:270 SL:135 +FA41 60 RTS A:40 X:FF Y:A4 P:67 SP:F9 CYC:276 SL:135 +EAE3 AD 47 06 LDA $0647 = EA A:40 X:FF Y:A4 P:67 SP:FB CYC:294 SL:135 +EAE6 C9 EA CMP #$EA A:EA X:FF Y:A4 P:E5 SP:FB CYC:306 SL:135 +EAE8 F0 02 BEQ $EAEC A:EA X:FF Y:A4 P:67 SP:FB CYC:312 SL:135 +EAEC A0 FF LDY #$FF A:EA X:FF Y:A4 P:67 SP:FB CYC:321 SL:135 +EAEE A9 00 LDA #$00 A:EA X:FF Y:FF P:E5 SP:FB CYC:327 SL:135 +EAF0 8D 47 06 STA $0647 = EA A:00 X:FF Y:FF P:67 SP:FB CYC:333 SL:135 +EAF3 20 42 FA JSR $FA42 A:00 X:FF Y:FF P:67 SP:FB CYC: 4 SL:136 +FA42 B8 CLV A:00 X:FF Y:FF P:67 SP:F9 CYC: 22 SL:136 +FA43 38 SEC A:00 X:FF Y:FF P:27 SP:F9 CYC: 28 SL:136 +FA44 A9 FF LDA #$FF A:00 X:FF Y:FF P:27 SP:F9 CYC: 34 SL:136 +FA46 60 RTS A:FF X:FF Y:FF P:A5 SP:F9 CYC: 40 SL:136 +EAF6 DB 48 05 *DCP $0548,Y @ 0647 = 00 A:FF X:FF Y:FF P:A5 SP:FB CYC: 58 SL:136 +EAF9 EA NOP A:FF X:FF Y:FF P:27 SP:FB CYC: 79 SL:136 +EAFA EA NOP A:FF X:FF Y:FF P:27 SP:FB CYC: 85 SL:136 +EAFB 08 PHP A:FF X:FF Y:FF P:27 SP:FB CYC: 91 SL:136 +EAFC 48 PHA A:FF X:FF Y:FF P:27 SP:FA CYC:100 SL:136 +EAFD A0 A5 LDY #$A5 A:FF X:FF Y:FF P:27 SP:F9 CYC:109 SL:136 +EAFF 68 PLA A:FF X:FF Y:A5 P:A5 SP:F9 CYC:115 SL:136 +EB00 28 PLP A:FF X:FF Y:A5 P:A5 SP:FA CYC:127 SL:136 +EB01 20 47 FA JSR $FA47 A:FF X:FF Y:A5 P:27 SP:FB CYC:139 SL:136 +FA47 70 1C BVS $FA65 A:FF X:FF Y:A5 P:27 SP:F9 CYC:157 SL:136 +FA49 D0 1A BNE $FA65 A:FF X:FF Y:A5 P:27 SP:F9 CYC:163 SL:136 +FA4B 30 18 BMI $FA65 A:FF X:FF Y:A5 P:27 SP:F9 CYC:169 SL:136 +FA4D 90 16 BCC $FA65 A:FF X:FF Y:A5 P:27 SP:F9 CYC:175 SL:136 +FA4F C9 FF CMP #$FF A:FF X:FF Y:A5 P:27 SP:F9 CYC:181 SL:136 +FA51 D0 12 BNE $FA65 A:FF X:FF Y:A5 P:27 SP:F9 CYC:187 SL:136 +FA53 60 RTS A:FF X:FF Y:A5 P:27 SP:F9 CYC:193 SL:136 +EB04 AD 47 06 LDA $0647 = FF A:FF X:FF Y:A5 P:27 SP:FB CYC:211 SL:136 +EB07 C9 FF CMP #$FF A:FF X:FF Y:A5 P:A5 SP:FB CYC:223 SL:136 +EB09 F0 02 BEQ $EB0D A:FF X:FF Y:A5 P:27 SP:FB CYC:229 SL:136 +EB0D A0 FF LDY #$FF A:FF X:FF Y:A5 P:27 SP:FB CYC:238 SL:136 +EB0F A9 37 LDA #$37 A:FF X:FF Y:FF P:A5 SP:FB CYC:244 SL:136 +EB11 8D 47 06 STA $0647 = FF A:37 X:FF Y:FF P:25 SP:FB CYC:250 SL:136 +EB14 20 54 FA JSR $FA54 A:37 X:FF Y:FF P:25 SP:FB CYC:262 SL:136 +FA54 24 01 BIT $01 = FF A:37 X:FF Y:FF P:25 SP:F9 CYC:280 SL:136 +FA56 A9 F0 LDA #$F0 A:37 X:FF Y:FF P:E5 SP:F9 CYC:289 SL:136 +FA58 60 RTS A:F0 X:FF Y:FF P:E5 SP:F9 CYC:295 SL:136 +EB17 DB 48 05 *DCP $0548,Y @ 0647 = 37 A:F0 X:FF Y:FF P:E5 SP:FB CYC:313 SL:136 +EB1A EA NOP A:F0 X:FF Y:FF P:E5 SP:FB CYC:334 SL:136 +EB1B EA NOP A:F0 X:FF Y:FF P:E5 SP:FB CYC:340 SL:136 +EB1C 08 PHP A:F0 X:FF Y:FF P:E5 SP:FB CYC: 5 SL:137 +EB1D 48 PHA A:F0 X:FF Y:FF P:E5 SP:FA CYC: 14 SL:137 +EB1E A0 A6 LDY #$A6 A:F0 X:FF Y:FF P:E5 SP:F9 CYC: 23 SL:137 +EB20 68 PLA A:F0 X:FF Y:A6 P:E5 SP:F9 CYC: 29 SL:137 +EB21 28 PLP A:F0 X:FF Y:A6 P:E5 SP:FA CYC: 41 SL:137 +EB22 20 59 FA JSR $FA59 A:F0 X:FF Y:A6 P:E5 SP:FB CYC: 53 SL:137 +FA59 50 0A BVC $FA65 A:F0 X:FF Y:A6 P:E5 SP:F9 CYC: 71 SL:137 +FA5B F0 08 BEQ $FA65 A:F0 X:FF Y:A6 P:E5 SP:F9 CYC: 77 SL:137 +FA5D 10 06 BPL $FA65 A:F0 X:FF Y:A6 P:E5 SP:F9 CYC: 83 SL:137 +FA5F 90 04 BCC $FA65 A:F0 X:FF Y:A6 P:E5 SP:F9 CYC: 89 SL:137 +FA61 C9 F0 CMP #$F0 A:F0 X:FF Y:A6 P:E5 SP:F9 CYC: 95 SL:137 +FA63 F0 02 BEQ $FA67 A:F0 X:FF Y:A6 P:67 SP:F9 CYC:101 SL:137 +FA67 60 RTS A:F0 X:FF Y:A6 P:67 SP:F9 CYC:110 SL:137 +EB25 AD 47 06 LDA $0647 = 36 A:F0 X:FF Y:A6 P:67 SP:FB CYC:128 SL:137 +EB28 C9 36 CMP #$36 A:36 X:FF Y:A6 P:65 SP:FB CYC:140 SL:137 +EB2A F0 02 BEQ $EB2E A:36 X:FF Y:A6 P:67 SP:FB CYC:146 SL:137 +EB2E A0 A7 LDY #$A7 A:36 X:FF Y:A6 P:67 SP:FB CYC:155 SL:137 +EB30 A2 FF LDX #$FF A:36 X:FF Y:A7 P:E5 SP:FB CYC:161 SL:137 +EB32 A9 EB LDA #$EB A:36 X:FF Y:A7 P:E5 SP:FB CYC:167 SL:137 +EB34 8D 47 06 STA $0647 = 36 A:EB X:FF Y:A7 P:E5 SP:FB CYC:173 SL:137 +EB37 20 31 FA JSR $FA31 A:EB X:FF Y:A7 P:E5 SP:FB CYC:185 SL:137 +FA31 24 01 BIT $01 = FF A:EB X:FF Y:A7 P:E5 SP:F9 CYC:203 SL:137 +FA33 18 CLC A:EB X:FF Y:A7 P:E5 SP:F9 CYC:212 SL:137 +FA34 A9 40 LDA #$40 A:EB X:FF Y:A7 P:E4 SP:F9 CYC:218 SL:137 +FA36 60 RTS A:40 X:FF Y:A7 P:64 SP:F9 CYC:224 SL:137 +EB3A DF 48 05 *DCP $0548,X @ 0647 = EB A:40 X:FF Y:A7 P:64 SP:FB CYC:242 SL:137 +EB3D EA NOP A:40 X:FF Y:A7 P:64 SP:FB CYC:263 SL:137 +EB3E EA NOP A:40 X:FF Y:A7 P:64 SP:FB CYC:269 SL:137 +EB3F EA NOP A:40 X:FF Y:A7 P:64 SP:FB CYC:275 SL:137 +EB40 EA NOP A:40 X:FF Y:A7 P:64 SP:FB CYC:281 SL:137 +EB41 20 37 FA JSR $FA37 A:40 X:FF Y:A7 P:64 SP:FB CYC:287 SL:137 +FA37 50 2C BVC $FA65 A:40 X:FF Y:A7 P:64 SP:F9 CYC:305 SL:137 +FA39 B0 2A BCS $FA65 A:40 X:FF Y:A7 P:64 SP:F9 CYC:311 SL:137 +FA3B 30 28 BMI $FA65 A:40 X:FF Y:A7 P:64 SP:F9 CYC:317 SL:137 +FA3D C9 40 CMP #$40 A:40 X:FF Y:A7 P:64 SP:F9 CYC:323 SL:137 +FA3F D0 24 BNE $FA65 A:40 X:FF Y:A7 P:67 SP:F9 CYC:329 SL:137 +FA41 60 RTS A:40 X:FF Y:A7 P:67 SP:F9 CYC:335 SL:137 +EB44 AD 47 06 LDA $0647 = EA A:40 X:FF Y:A7 P:67 SP:FB CYC: 12 SL:138 +EB47 C9 EA CMP #$EA A:EA X:FF Y:A7 P:E5 SP:FB CYC: 24 SL:138 +EB49 F0 02 BEQ $EB4D A:EA X:FF Y:A7 P:67 SP:FB CYC: 30 SL:138 +EB4D C8 INY A:EA X:FF Y:A7 P:67 SP:FB CYC: 39 SL:138 +EB4E A9 00 LDA #$00 A:EA X:FF Y:A8 P:E5 SP:FB CYC: 45 SL:138 +EB50 8D 47 06 STA $0647 = EA A:00 X:FF Y:A8 P:67 SP:FB CYC: 51 SL:138 +EB53 20 42 FA JSR $FA42 A:00 X:FF Y:A8 P:67 SP:FB CYC: 63 SL:138 +FA42 B8 CLV A:00 X:FF Y:A8 P:67 SP:F9 CYC: 81 SL:138 +FA43 38 SEC A:00 X:FF Y:A8 P:27 SP:F9 CYC: 87 SL:138 +FA44 A9 FF LDA #$FF A:00 X:FF Y:A8 P:27 SP:F9 CYC: 93 SL:138 +FA46 60 RTS A:FF X:FF Y:A8 P:A5 SP:F9 CYC: 99 SL:138 +EB56 DF 48 05 *DCP $0548,X @ 0647 = 00 A:FF X:FF Y:A8 P:A5 SP:FB CYC:117 SL:138 +EB59 EA NOP A:FF X:FF Y:A8 P:27 SP:FB CYC:138 SL:138 +EB5A EA NOP A:FF X:FF Y:A8 P:27 SP:FB CYC:144 SL:138 +EB5B EA NOP A:FF X:FF Y:A8 P:27 SP:FB CYC:150 SL:138 +EB5C EA NOP A:FF X:FF Y:A8 P:27 SP:FB CYC:156 SL:138 +EB5D 20 47 FA JSR $FA47 A:FF X:FF Y:A8 P:27 SP:FB CYC:162 SL:138 +FA47 70 1C BVS $FA65 A:FF X:FF Y:A8 P:27 SP:F9 CYC:180 SL:138 +FA49 D0 1A BNE $FA65 A:FF X:FF Y:A8 P:27 SP:F9 CYC:186 SL:138 +FA4B 30 18 BMI $FA65 A:FF X:FF Y:A8 P:27 SP:F9 CYC:192 SL:138 +FA4D 90 16 BCC $FA65 A:FF X:FF Y:A8 P:27 SP:F9 CYC:198 SL:138 +FA4F C9 FF CMP #$FF A:FF X:FF Y:A8 P:27 SP:F9 CYC:204 SL:138 +FA51 D0 12 BNE $FA65 A:FF X:FF Y:A8 P:27 SP:F9 CYC:210 SL:138 +FA53 60 RTS A:FF X:FF Y:A8 P:27 SP:F9 CYC:216 SL:138 +EB60 AD 47 06 LDA $0647 = FF A:FF X:FF Y:A8 P:27 SP:FB CYC:234 SL:138 +EB63 C9 FF CMP #$FF A:FF X:FF Y:A8 P:A5 SP:FB CYC:246 SL:138 +EB65 F0 02 BEQ $EB69 A:FF X:FF Y:A8 P:27 SP:FB CYC:252 SL:138 +EB69 C8 INY A:FF X:FF Y:A8 P:27 SP:FB CYC:261 SL:138 +EB6A A9 37 LDA #$37 A:FF X:FF Y:A9 P:A5 SP:FB CYC:267 SL:138 +EB6C 8D 47 06 STA $0647 = FF A:37 X:FF Y:A9 P:25 SP:FB CYC:273 SL:138 +EB6F 20 54 FA JSR $FA54 A:37 X:FF Y:A9 P:25 SP:FB CYC:285 SL:138 +FA54 24 01 BIT $01 = FF A:37 X:FF Y:A9 P:25 SP:F9 CYC:303 SL:138 +FA56 A9 F0 LDA #$F0 A:37 X:FF Y:A9 P:E5 SP:F9 CYC:312 SL:138 +FA58 60 RTS A:F0 X:FF Y:A9 P:E5 SP:F9 CYC:318 SL:138 +EB72 DF 48 05 *DCP $0548,X @ 0647 = 37 A:F0 X:FF Y:A9 P:E5 SP:FB CYC:336 SL:138 +EB75 EA NOP A:F0 X:FF Y:A9 P:E5 SP:FB CYC: 16 SL:139 +EB76 EA NOP A:F0 X:FF Y:A9 P:E5 SP:FB CYC: 22 SL:139 +EB77 EA NOP A:F0 X:FF Y:A9 P:E5 SP:FB CYC: 28 SL:139 +EB78 EA NOP A:F0 X:FF Y:A9 P:E5 SP:FB CYC: 34 SL:139 +EB79 20 59 FA JSR $FA59 A:F0 X:FF Y:A9 P:E5 SP:FB CYC: 40 SL:139 +FA59 50 0A BVC $FA65 A:F0 X:FF Y:A9 P:E5 SP:F9 CYC: 58 SL:139 +FA5B F0 08 BEQ $FA65 A:F0 X:FF Y:A9 P:E5 SP:F9 CYC: 64 SL:139 +FA5D 10 06 BPL $FA65 A:F0 X:FF Y:A9 P:E5 SP:F9 CYC: 70 SL:139 +FA5F 90 04 BCC $FA65 A:F0 X:FF Y:A9 P:E5 SP:F9 CYC: 76 SL:139 +FA61 C9 F0 CMP #$F0 A:F0 X:FF Y:A9 P:E5 SP:F9 CYC: 82 SL:139 +FA63 F0 02 BEQ $FA67 A:F0 X:FF Y:A9 P:67 SP:F9 CYC: 88 SL:139 +FA67 60 RTS A:F0 X:FF Y:A9 P:67 SP:F9 CYC: 97 SL:139 +EB7C AD 47 06 LDA $0647 = 36 A:F0 X:FF Y:A9 P:67 SP:FB CYC:115 SL:139 +EB7F C9 36 CMP #$36 A:36 X:FF Y:A9 P:65 SP:FB CYC:127 SL:139 +EB81 F0 02 BEQ $EB85 A:36 X:FF Y:A9 P:67 SP:FB CYC:133 SL:139 +EB85 60 RTS A:36 X:FF Y:A9 P:67 SP:FB CYC:142 SL:139 +C63E 20 86 EB JSR $EB86 A:36 X:FF Y:A9 P:67 SP:FD CYC:160 SL:139 +EB86 A9 FF LDA #$FF A:36 X:FF Y:A9 P:67 SP:FB CYC:178 SL:139 +EB88 85 01 STA $01 = FF A:FF X:FF Y:A9 P:E5 SP:FB CYC:184 SL:139 +EB8A A0 AA LDY #$AA A:FF X:FF Y:A9 P:E5 SP:FB CYC:193 SL:139 +EB8C A2 02 LDX #$02 A:FF X:FF Y:AA P:E5 SP:FB CYC:199 SL:139 +EB8E A9 47 LDA #$47 A:FF X:02 Y:AA P:65 SP:FB CYC:205 SL:139 +EB90 85 47 STA $47 = 36 A:47 X:02 Y:AA P:65 SP:FB CYC:211 SL:139 +EB92 A9 06 LDA #$06 A:47 X:02 Y:AA P:65 SP:FB CYC:220 SL:139 +EB94 85 48 STA $48 = 06 A:06 X:02 Y:AA P:65 SP:FB CYC:226 SL:139 +EB96 A9 EB LDA #$EB A:06 X:02 Y:AA P:65 SP:FB CYC:235 SL:139 +EB98 8D 47 06 STA $0647 = 36 A:EB X:02 Y:AA P:E5 SP:FB CYC:241 SL:139 +EB9B 20 B1 FA JSR $FAB1 A:EB X:02 Y:AA P:E5 SP:FB CYC:253 SL:139 +FAB1 24 01 BIT $01 = FF A:EB X:02 Y:AA P:E5 SP:F9 CYC:271 SL:139 +FAB3 18 CLC A:EB X:02 Y:AA P:E5 SP:F9 CYC:280 SL:139 +FAB4 A9 40 LDA #$40 A:EB X:02 Y:AA P:E4 SP:F9 CYC:286 SL:139 +FAB6 60 RTS A:40 X:02 Y:AA P:64 SP:F9 CYC:292 SL:139 +EB9E E3 45 *ISB ($45,X) @ 47 = 0647 = EB A:40 X:02 Y:AA P:64 SP:FB CYC:310 SL:139 +EBA0 EA NOP A:53 X:02 Y:AA P:24 SP:FB CYC:334 SL:139 +EBA1 EA NOP A:53 X:02 Y:AA P:24 SP:FB CYC:340 SL:139 +EBA2 EA NOP A:53 X:02 Y:AA P:24 SP:FB CYC: 5 SL:140 +EBA3 EA NOP A:53 X:02 Y:AA P:24 SP:FB CYC: 11 SL:140 +EBA4 20 B7 FA JSR $FAB7 A:53 X:02 Y:AA P:24 SP:FB CYC: 17 SL:140 +FAB7 70 2D BVS $FAE6 A:53 X:02 Y:AA P:24 SP:F9 CYC: 35 SL:140 +FAB9 B0 2B BCS $FAE6 A:53 X:02 Y:AA P:24 SP:F9 CYC: 41 SL:140 +FABB 30 29 BMI $FAE6 A:53 X:02 Y:AA P:24 SP:F9 CYC: 47 SL:140 +FABD C9 53 CMP #$53 A:53 X:02 Y:AA P:24 SP:F9 CYC: 53 SL:140 +FABF D0 25 BNE $FAE6 A:53 X:02 Y:AA P:27 SP:F9 CYC: 59 SL:140 +FAC1 60 RTS A:53 X:02 Y:AA P:27 SP:F9 CYC: 65 SL:140 +EBA7 AD 47 06 LDA $0647 = EC A:53 X:02 Y:AA P:27 SP:FB CYC: 83 SL:140 +EBAA C9 EC CMP #$EC A:EC X:02 Y:AA P:A5 SP:FB CYC: 95 SL:140 +EBAC F0 02 BEQ $EBB0 A:EC X:02 Y:AA P:27 SP:FB CYC:101 SL:140 +EBB0 C8 INY A:EC X:02 Y:AA P:27 SP:FB CYC:110 SL:140 +EBB1 A9 FF LDA #$FF A:EC X:02 Y:AB P:A5 SP:FB CYC:116 SL:140 +EBB3 8D 47 06 STA $0647 = EC A:FF X:02 Y:AB P:A5 SP:FB CYC:122 SL:140 +EBB6 20 C2 FA JSR $FAC2 A:FF X:02 Y:AB P:A5 SP:FB CYC:134 SL:140 +FAC2 B8 CLV A:FF X:02 Y:AB P:A5 SP:F9 CYC:152 SL:140 +FAC3 38 SEC A:FF X:02 Y:AB P:A5 SP:F9 CYC:158 SL:140 +FAC4 A9 FF LDA #$FF A:FF X:02 Y:AB P:A5 SP:F9 CYC:164 SL:140 +FAC6 60 RTS A:FF X:02 Y:AB P:A5 SP:F9 CYC:170 SL:140 +EBB9 E3 45 *ISB ($45,X) @ 47 = 0647 = FF A:FF X:02 Y:AB P:A5 SP:FB CYC:188 SL:140 +EBBB EA NOP A:FF X:02 Y:AB P:A5 SP:FB CYC:212 SL:140 +EBBC EA NOP A:FF X:02 Y:AB P:A5 SP:FB CYC:218 SL:140 +EBBD EA NOP A:FF X:02 Y:AB P:A5 SP:FB CYC:224 SL:140 +EBBE EA NOP A:FF X:02 Y:AB P:A5 SP:FB CYC:230 SL:140 +EBBF 20 C7 FA JSR $FAC7 A:FF X:02 Y:AB P:A5 SP:FB CYC:236 SL:140 +FAC7 70 1D BVS $FAE6 A:FF X:02 Y:AB P:A5 SP:F9 CYC:254 SL:140 +FAC9 F0 1B BEQ $FAE6 A:FF X:02 Y:AB P:A5 SP:F9 CYC:260 SL:140 +FACB 10 19 BPL $FAE6 A:FF X:02 Y:AB P:A5 SP:F9 CYC:266 SL:140 +FACD 90 17 BCC $FAE6 A:FF X:02 Y:AB P:A5 SP:F9 CYC:272 SL:140 +FACF C9 FF CMP #$FF A:FF X:02 Y:AB P:A5 SP:F9 CYC:278 SL:140 +FAD1 D0 13 BNE $FAE6 A:FF X:02 Y:AB P:27 SP:F9 CYC:284 SL:140 +FAD3 60 RTS A:FF X:02 Y:AB P:27 SP:F9 CYC:290 SL:140 +EBC2 AD 47 06 LDA $0647 = 00 A:FF X:02 Y:AB P:27 SP:FB CYC:308 SL:140 +EBC5 C9 00 CMP #$00 A:00 X:02 Y:AB P:27 SP:FB CYC:320 SL:140 +EBC7 F0 02 BEQ $EBCB A:00 X:02 Y:AB P:27 SP:FB CYC:326 SL:140 +EBCB C8 INY A:00 X:02 Y:AB P:27 SP:FB CYC:335 SL:140 +EBCC A9 37 LDA #$37 A:00 X:02 Y:AC P:A5 SP:FB CYC: 0 SL:141 +EBCE 8D 47 06 STA $0647 = 00 A:37 X:02 Y:AC P:25 SP:FB CYC: 6 SL:141 +EBD1 20 D4 FA JSR $FAD4 A:37 X:02 Y:AC P:25 SP:FB CYC: 18 SL:141 +FAD4 24 01 BIT $01 = FF A:37 X:02 Y:AC P:25 SP:F9 CYC: 36 SL:141 +FAD6 38 SEC A:37 X:02 Y:AC P:E5 SP:F9 CYC: 45 SL:141 +FAD7 A9 F0 LDA #$F0 A:37 X:02 Y:AC P:E5 SP:F9 CYC: 51 SL:141 +FAD9 60 RTS A:F0 X:02 Y:AC P:E5 SP:F9 CYC: 57 SL:141 +EBD4 E3 45 *ISB ($45,X) @ 47 = 0647 = 37 A:F0 X:02 Y:AC P:E5 SP:FB CYC: 75 SL:141 +EBD6 EA NOP A:B8 X:02 Y:AC P:A5 SP:FB CYC: 99 SL:141 +EBD7 EA NOP A:B8 X:02 Y:AC P:A5 SP:FB CYC:105 SL:141 +EBD8 EA NOP A:B8 X:02 Y:AC P:A5 SP:FB CYC:111 SL:141 +EBD9 EA NOP A:B8 X:02 Y:AC P:A5 SP:FB CYC:117 SL:141 +EBDA 20 DA FA JSR $FADA A:B8 X:02 Y:AC P:A5 SP:FB CYC:123 SL:141 +FADA 70 0A BVS $FAE6 A:B8 X:02 Y:AC P:A5 SP:F9 CYC:141 SL:141 +FADC F0 08 BEQ $FAE6 A:B8 X:02 Y:AC P:A5 SP:F9 CYC:147 SL:141 +FADE 10 06 BPL $FAE6 A:B8 X:02 Y:AC P:A5 SP:F9 CYC:153 SL:141 +FAE0 90 04 BCC $FAE6 A:B8 X:02 Y:AC P:A5 SP:F9 CYC:159 SL:141 +FAE2 C9 B8 CMP #$B8 A:B8 X:02 Y:AC P:A5 SP:F9 CYC:165 SL:141 +FAE4 F0 02 BEQ $FAE8 A:B8 X:02 Y:AC P:27 SP:F9 CYC:171 SL:141 +FAE8 60 RTS A:B8 X:02 Y:AC P:27 SP:F9 CYC:180 SL:141 +EBDD AD 47 06 LDA $0647 = 38 A:B8 X:02 Y:AC P:27 SP:FB CYC:198 SL:141 +EBE0 C9 38 CMP #$38 A:38 X:02 Y:AC P:25 SP:FB CYC:210 SL:141 +EBE2 F0 02 BEQ $EBE6 A:38 X:02 Y:AC P:27 SP:FB CYC:216 SL:141 +EBE6 C8 INY A:38 X:02 Y:AC P:27 SP:FB CYC:225 SL:141 +EBE7 A9 EB LDA #$EB A:38 X:02 Y:AD P:A5 SP:FB CYC:231 SL:141 +EBE9 85 47 STA $47 = 47 A:EB X:02 Y:AD P:A5 SP:FB CYC:237 SL:141 +EBEB 20 B1 FA JSR $FAB1 A:EB X:02 Y:AD P:A5 SP:FB CYC:246 SL:141 +FAB1 24 01 BIT $01 = FF A:EB X:02 Y:AD P:A5 SP:F9 CYC:264 SL:141 +FAB3 18 CLC A:EB X:02 Y:AD P:E5 SP:F9 CYC:273 SL:141 +FAB4 A9 40 LDA #$40 A:EB X:02 Y:AD P:E4 SP:F9 CYC:279 SL:141 +FAB6 60 RTS A:40 X:02 Y:AD P:64 SP:F9 CYC:285 SL:141 +EBEE E7 47 *ISB $47 = EB A:40 X:02 Y:AD P:64 SP:FB CYC:303 SL:141 +EBF0 EA NOP A:53 X:02 Y:AD P:24 SP:FB CYC:318 SL:141 +EBF1 EA NOP A:53 X:02 Y:AD P:24 SP:FB CYC:324 SL:141 +EBF2 EA NOP A:53 X:02 Y:AD P:24 SP:FB CYC:330 SL:141 +EBF3 EA NOP A:53 X:02 Y:AD P:24 SP:FB CYC:336 SL:141 +EBF4 20 B7 FA JSR $FAB7 A:53 X:02 Y:AD P:24 SP:FB CYC: 1 SL:142 +FAB7 70 2D BVS $FAE6 A:53 X:02 Y:AD P:24 SP:F9 CYC: 19 SL:142 +FAB9 B0 2B BCS $FAE6 A:53 X:02 Y:AD P:24 SP:F9 CYC: 25 SL:142 +FABB 30 29 BMI $FAE6 A:53 X:02 Y:AD P:24 SP:F9 CYC: 31 SL:142 +FABD C9 53 CMP #$53 A:53 X:02 Y:AD P:24 SP:F9 CYC: 37 SL:142 +FABF D0 25 BNE $FAE6 A:53 X:02 Y:AD P:27 SP:F9 CYC: 43 SL:142 +FAC1 60 RTS A:53 X:02 Y:AD P:27 SP:F9 CYC: 49 SL:142 +EBF7 A5 47 LDA $47 = EC A:53 X:02 Y:AD P:27 SP:FB CYC: 67 SL:142 +EBF9 C9 EC CMP #$EC A:EC X:02 Y:AD P:A5 SP:FB CYC: 76 SL:142 +EBFB F0 02 BEQ $EBFF A:EC X:02 Y:AD P:27 SP:FB CYC: 82 SL:142 +EBFF C8 INY A:EC X:02 Y:AD P:27 SP:FB CYC: 91 SL:142 +EC00 A9 FF LDA #$FF A:EC X:02 Y:AE P:A5 SP:FB CYC: 97 SL:142 +EC02 85 47 STA $47 = EC A:FF X:02 Y:AE P:A5 SP:FB CYC:103 SL:142 +EC04 20 C2 FA JSR $FAC2 A:FF X:02 Y:AE P:A5 SP:FB CYC:112 SL:142 +FAC2 B8 CLV A:FF X:02 Y:AE P:A5 SP:F9 CYC:130 SL:142 +FAC3 38 SEC A:FF X:02 Y:AE P:A5 SP:F9 CYC:136 SL:142 +FAC4 A9 FF LDA #$FF A:FF X:02 Y:AE P:A5 SP:F9 CYC:142 SL:142 +FAC6 60 RTS A:FF X:02 Y:AE P:A5 SP:F9 CYC:148 SL:142 +EC07 E7 47 *ISB $47 = FF A:FF X:02 Y:AE P:A5 SP:FB CYC:166 SL:142 +EC09 EA NOP A:FF X:02 Y:AE P:A5 SP:FB CYC:181 SL:142 +EC0A EA NOP A:FF X:02 Y:AE P:A5 SP:FB CYC:187 SL:142 +EC0B EA NOP A:FF X:02 Y:AE P:A5 SP:FB CYC:193 SL:142 +EC0C EA NOP A:FF X:02 Y:AE P:A5 SP:FB CYC:199 SL:142 +EC0D 20 C7 FA JSR $FAC7 A:FF X:02 Y:AE P:A5 SP:FB CYC:205 SL:142 +FAC7 70 1D BVS $FAE6 A:FF X:02 Y:AE P:A5 SP:F9 CYC:223 SL:142 +FAC9 F0 1B BEQ $FAE6 A:FF X:02 Y:AE P:A5 SP:F9 CYC:229 SL:142 +FACB 10 19 BPL $FAE6 A:FF X:02 Y:AE P:A5 SP:F9 CYC:235 SL:142 +FACD 90 17 BCC $FAE6 A:FF X:02 Y:AE P:A5 SP:F9 CYC:241 SL:142 +FACF C9 FF CMP #$FF A:FF X:02 Y:AE P:A5 SP:F9 CYC:247 SL:142 +FAD1 D0 13 BNE $FAE6 A:FF X:02 Y:AE P:27 SP:F9 CYC:253 SL:142 +FAD3 60 RTS A:FF X:02 Y:AE P:27 SP:F9 CYC:259 SL:142 +EC10 A5 47 LDA $47 = 00 A:FF X:02 Y:AE P:27 SP:FB CYC:277 SL:142 +EC12 C9 00 CMP #$00 A:00 X:02 Y:AE P:27 SP:FB CYC:286 SL:142 +EC14 F0 02 BEQ $EC18 A:00 X:02 Y:AE P:27 SP:FB CYC:292 SL:142 +EC18 C8 INY A:00 X:02 Y:AE P:27 SP:FB CYC:301 SL:142 +EC19 A9 37 LDA #$37 A:00 X:02 Y:AF P:A5 SP:FB CYC:307 SL:142 +EC1B 85 47 STA $47 = 00 A:37 X:02 Y:AF P:25 SP:FB CYC:313 SL:142 +EC1D 20 D4 FA JSR $FAD4 A:37 X:02 Y:AF P:25 SP:FB CYC:322 SL:142 +FAD4 24 01 BIT $01 = FF A:37 X:02 Y:AF P:25 SP:F9 CYC:340 SL:142 +FAD6 38 SEC A:37 X:02 Y:AF P:E5 SP:F9 CYC: 8 SL:143 +FAD7 A9 F0 LDA #$F0 A:37 X:02 Y:AF P:E5 SP:F9 CYC: 14 SL:143 +FAD9 60 RTS A:F0 X:02 Y:AF P:E5 SP:F9 CYC: 20 SL:143 +EC20 E7 47 *ISB $47 = 37 A:F0 X:02 Y:AF P:E5 SP:FB CYC: 38 SL:143 +EC22 EA NOP A:B8 X:02 Y:AF P:A5 SP:FB CYC: 53 SL:143 +EC23 EA NOP A:B8 X:02 Y:AF P:A5 SP:FB CYC: 59 SL:143 +EC24 EA NOP A:B8 X:02 Y:AF P:A5 SP:FB CYC: 65 SL:143 +EC25 EA NOP A:B8 X:02 Y:AF P:A5 SP:FB CYC: 71 SL:143 +EC26 20 DA FA JSR $FADA A:B8 X:02 Y:AF P:A5 SP:FB CYC: 77 SL:143 +FADA 70 0A BVS $FAE6 A:B8 X:02 Y:AF P:A5 SP:F9 CYC: 95 SL:143 +FADC F0 08 BEQ $FAE6 A:B8 X:02 Y:AF P:A5 SP:F9 CYC:101 SL:143 +FADE 10 06 BPL $FAE6 A:B8 X:02 Y:AF P:A5 SP:F9 CYC:107 SL:143 +FAE0 90 04 BCC $FAE6 A:B8 X:02 Y:AF P:A5 SP:F9 CYC:113 SL:143 +FAE2 C9 B8 CMP #$B8 A:B8 X:02 Y:AF P:A5 SP:F9 CYC:119 SL:143 +FAE4 F0 02 BEQ $FAE8 A:B8 X:02 Y:AF P:27 SP:F9 CYC:125 SL:143 +FAE8 60 RTS A:B8 X:02 Y:AF P:27 SP:F9 CYC:134 SL:143 +EC29 A5 47 LDA $47 = 38 A:B8 X:02 Y:AF P:27 SP:FB CYC:152 SL:143 +EC2B C9 38 CMP #$38 A:38 X:02 Y:AF P:25 SP:FB CYC:161 SL:143 +EC2D F0 02 BEQ $EC31 A:38 X:02 Y:AF P:27 SP:FB CYC:167 SL:143 +EC31 C8 INY A:38 X:02 Y:AF P:27 SP:FB CYC:176 SL:143 +EC32 A9 EB LDA #$EB A:38 X:02 Y:B0 P:A5 SP:FB CYC:182 SL:143 +EC34 8D 47 06 STA $0647 = 38 A:EB X:02 Y:B0 P:A5 SP:FB CYC:188 SL:143 +EC37 20 B1 FA JSR $FAB1 A:EB X:02 Y:B0 P:A5 SP:FB CYC:200 SL:143 +FAB1 24 01 BIT $01 = FF A:EB X:02 Y:B0 P:A5 SP:F9 CYC:218 SL:143 +FAB3 18 CLC A:EB X:02 Y:B0 P:E5 SP:F9 CYC:227 SL:143 +FAB4 A9 40 LDA #$40 A:EB X:02 Y:B0 P:E4 SP:F9 CYC:233 SL:143 +FAB6 60 RTS A:40 X:02 Y:B0 P:64 SP:F9 CYC:239 SL:143 +EC3A EF 47 06 *ISB $0647 = EB A:40 X:02 Y:B0 P:64 SP:FB CYC:257 SL:143 +EC3D EA NOP A:53 X:02 Y:B0 P:24 SP:FB CYC:275 SL:143 +EC3E EA NOP A:53 X:02 Y:B0 P:24 SP:FB CYC:281 SL:143 +EC3F EA NOP A:53 X:02 Y:B0 P:24 SP:FB CYC:287 SL:143 +EC40 EA NOP A:53 X:02 Y:B0 P:24 SP:FB CYC:293 SL:143 +EC41 20 B7 FA JSR $FAB7 A:53 X:02 Y:B0 P:24 SP:FB CYC:299 SL:143 +FAB7 70 2D BVS $FAE6 A:53 X:02 Y:B0 P:24 SP:F9 CYC:317 SL:143 +FAB9 B0 2B BCS $FAE6 A:53 X:02 Y:B0 P:24 SP:F9 CYC:323 SL:143 +FABB 30 29 BMI $FAE6 A:53 X:02 Y:B0 P:24 SP:F9 CYC:329 SL:143 +FABD C9 53 CMP #$53 A:53 X:02 Y:B0 P:24 SP:F9 CYC:335 SL:143 +FABF D0 25 BNE $FAE6 A:53 X:02 Y:B0 P:27 SP:F9 CYC: 0 SL:144 +FAC1 60 RTS A:53 X:02 Y:B0 P:27 SP:F9 CYC: 6 SL:144 +EC44 AD 47 06 LDA $0647 = EC A:53 X:02 Y:B0 P:27 SP:FB CYC: 24 SL:144 +EC47 C9 EC CMP #$EC A:EC X:02 Y:B0 P:A5 SP:FB CYC: 36 SL:144 +EC49 F0 02 BEQ $EC4D A:EC X:02 Y:B0 P:27 SP:FB CYC: 42 SL:144 +EC4D C8 INY A:EC X:02 Y:B0 P:27 SP:FB CYC: 51 SL:144 +EC4E A9 FF LDA #$FF A:EC X:02 Y:B1 P:A5 SP:FB CYC: 57 SL:144 +EC50 8D 47 06 STA $0647 = EC A:FF X:02 Y:B1 P:A5 SP:FB CYC: 63 SL:144 +EC53 20 C2 FA JSR $FAC2 A:FF X:02 Y:B1 P:A5 SP:FB CYC: 75 SL:144 +FAC2 B8 CLV A:FF X:02 Y:B1 P:A5 SP:F9 CYC: 93 SL:144 +FAC3 38 SEC A:FF X:02 Y:B1 P:A5 SP:F9 CYC: 99 SL:144 +FAC4 A9 FF LDA #$FF A:FF X:02 Y:B1 P:A5 SP:F9 CYC:105 SL:144 +FAC6 60 RTS A:FF X:02 Y:B1 P:A5 SP:F9 CYC:111 SL:144 +EC56 EF 47 06 *ISB $0647 = FF A:FF X:02 Y:B1 P:A5 SP:FB CYC:129 SL:144 +EC59 EA NOP A:FF X:02 Y:B1 P:A5 SP:FB CYC:147 SL:144 +EC5A EA NOP A:FF X:02 Y:B1 P:A5 SP:FB CYC:153 SL:144 +EC5B EA NOP A:FF X:02 Y:B1 P:A5 SP:FB CYC:159 SL:144 +EC5C EA NOP A:FF X:02 Y:B1 P:A5 SP:FB CYC:165 SL:144 +EC5D 20 C7 FA JSR $FAC7 A:FF X:02 Y:B1 P:A5 SP:FB CYC:171 SL:144 +FAC7 70 1D BVS $FAE6 A:FF X:02 Y:B1 P:A5 SP:F9 CYC:189 SL:144 +FAC9 F0 1B BEQ $FAE6 A:FF X:02 Y:B1 P:A5 SP:F9 CYC:195 SL:144 +FACB 10 19 BPL $FAE6 A:FF X:02 Y:B1 P:A5 SP:F9 CYC:201 SL:144 +FACD 90 17 BCC $FAE6 A:FF X:02 Y:B1 P:A5 SP:F9 CYC:207 SL:144 +FACF C9 FF CMP #$FF A:FF X:02 Y:B1 P:A5 SP:F9 CYC:213 SL:144 +FAD1 D0 13 BNE $FAE6 A:FF X:02 Y:B1 P:27 SP:F9 CYC:219 SL:144 +FAD3 60 RTS A:FF X:02 Y:B1 P:27 SP:F9 CYC:225 SL:144 +EC60 AD 47 06 LDA $0647 = 00 A:FF X:02 Y:B1 P:27 SP:FB CYC:243 SL:144 +EC63 C9 00 CMP #$00 A:00 X:02 Y:B1 P:27 SP:FB CYC:255 SL:144 +EC65 F0 02 BEQ $EC69 A:00 X:02 Y:B1 P:27 SP:FB CYC:261 SL:144 +EC69 C8 INY A:00 X:02 Y:B1 P:27 SP:FB CYC:270 SL:144 +EC6A A9 37 LDA #$37 A:00 X:02 Y:B2 P:A5 SP:FB CYC:276 SL:144 +EC6C 8D 47 06 STA $0647 = 00 A:37 X:02 Y:B2 P:25 SP:FB CYC:282 SL:144 +EC6F 20 D4 FA JSR $FAD4 A:37 X:02 Y:B2 P:25 SP:FB CYC:294 SL:144 +FAD4 24 01 BIT $01 = FF A:37 X:02 Y:B2 P:25 SP:F9 CYC:312 SL:144 +FAD6 38 SEC A:37 X:02 Y:B2 P:E5 SP:F9 CYC:321 SL:144 +FAD7 A9 F0 LDA #$F0 A:37 X:02 Y:B2 P:E5 SP:F9 CYC:327 SL:144 +FAD9 60 RTS A:F0 X:02 Y:B2 P:E5 SP:F9 CYC:333 SL:144 +EC72 EF 47 06 *ISB $0647 = 37 A:F0 X:02 Y:B2 P:E5 SP:FB CYC: 10 SL:145 +EC75 EA NOP A:B8 X:02 Y:B2 P:A5 SP:FB CYC: 28 SL:145 +EC76 EA NOP A:B8 X:02 Y:B2 P:A5 SP:FB CYC: 34 SL:145 +EC77 EA NOP A:B8 X:02 Y:B2 P:A5 SP:FB CYC: 40 SL:145 +EC78 EA NOP A:B8 X:02 Y:B2 P:A5 SP:FB CYC: 46 SL:145 +EC79 20 DA FA JSR $FADA A:B8 X:02 Y:B2 P:A5 SP:FB CYC: 52 SL:145 +FADA 70 0A BVS $FAE6 A:B8 X:02 Y:B2 P:A5 SP:F9 CYC: 70 SL:145 +FADC F0 08 BEQ $FAE6 A:B8 X:02 Y:B2 P:A5 SP:F9 CYC: 76 SL:145 +FADE 10 06 BPL $FAE6 A:B8 X:02 Y:B2 P:A5 SP:F9 CYC: 82 SL:145 +FAE0 90 04 BCC $FAE6 A:B8 X:02 Y:B2 P:A5 SP:F9 CYC: 88 SL:145 +FAE2 C9 B8 CMP #$B8 A:B8 X:02 Y:B2 P:A5 SP:F9 CYC: 94 SL:145 +FAE4 F0 02 BEQ $FAE8 A:B8 X:02 Y:B2 P:27 SP:F9 CYC:100 SL:145 +FAE8 60 RTS A:B8 X:02 Y:B2 P:27 SP:F9 CYC:109 SL:145 +EC7C AD 47 06 LDA $0647 = 38 A:B8 X:02 Y:B2 P:27 SP:FB CYC:127 SL:145 +EC7F C9 38 CMP #$38 A:38 X:02 Y:B2 P:25 SP:FB CYC:139 SL:145 +EC81 F0 02 BEQ $EC85 A:38 X:02 Y:B2 P:27 SP:FB CYC:145 SL:145 +EC85 A9 EB LDA #$EB A:38 X:02 Y:B2 P:27 SP:FB CYC:154 SL:145 +EC87 8D 47 06 STA $0647 = 38 A:EB X:02 Y:B2 P:A5 SP:FB CYC:160 SL:145 +EC8A A9 48 LDA #$48 A:EB X:02 Y:B2 P:A5 SP:FB CYC:172 SL:145 +EC8C 85 45 STA $45 = 48 A:48 X:02 Y:B2 P:25 SP:FB CYC:178 SL:145 +EC8E A9 05 LDA #$05 A:48 X:02 Y:B2 P:25 SP:FB CYC:187 SL:145 +EC90 85 46 STA $46 = 05 A:05 X:02 Y:B2 P:25 SP:FB CYC:193 SL:145 +EC92 A0 FF LDY #$FF A:05 X:02 Y:B2 P:25 SP:FB CYC:202 SL:145 +EC94 20 B1 FA JSR $FAB1 A:05 X:02 Y:FF P:A5 SP:FB CYC:208 SL:145 +FAB1 24 01 BIT $01 = FF A:05 X:02 Y:FF P:A5 SP:F9 CYC:226 SL:145 +FAB3 18 CLC A:05 X:02 Y:FF P:E5 SP:F9 CYC:235 SL:145 +FAB4 A9 40 LDA #$40 A:05 X:02 Y:FF P:E4 SP:F9 CYC:241 SL:145 +FAB6 60 RTS A:40 X:02 Y:FF P:64 SP:F9 CYC:247 SL:145 +EC97 F3 45 *ISB ($45),Y = 0548 @ 0647 = EB A:40 X:02 Y:FF P:64 SP:FB CYC:265 SL:145 +EC99 EA NOP A:53 X:02 Y:FF P:24 SP:FB CYC:289 SL:145 +EC9A EA NOP A:53 X:02 Y:FF P:24 SP:FB CYC:295 SL:145 +EC9B 08 PHP A:53 X:02 Y:FF P:24 SP:FB CYC:301 SL:145 +EC9C 48 PHA A:53 X:02 Y:FF P:24 SP:FA CYC:310 SL:145 +EC9D A0 B3 LDY #$B3 A:53 X:02 Y:FF P:24 SP:F9 CYC:319 SL:145 +EC9F 68 PLA A:53 X:02 Y:B3 P:A4 SP:F9 CYC:325 SL:145 +ECA0 28 PLP A:53 X:02 Y:B3 P:24 SP:FA CYC:337 SL:145 +ECA1 20 B7 FA JSR $FAB7 A:53 X:02 Y:B3 P:24 SP:FB CYC: 8 SL:146 +FAB7 70 2D BVS $FAE6 A:53 X:02 Y:B3 P:24 SP:F9 CYC: 26 SL:146 +FAB9 B0 2B BCS $FAE6 A:53 X:02 Y:B3 P:24 SP:F9 CYC: 32 SL:146 +FABB 30 29 BMI $FAE6 A:53 X:02 Y:B3 P:24 SP:F9 CYC: 38 SL:146 +FABD C9 53 CMP #$53 A:53 X:02 Y:B3 P:24 SP:F9 CYC: 44 SL:146 +FABF D0 25 BNE $FAE6 A:53 X:02 Y:B3 P:27 SP:F9 CYC: 50 SL:146 +FAC1 60 RTS A:53 X:02 Y:B3 P:27 SP:F9 CYC: 56 SL:146 +ECA4 AD 47 06 LDA $0647 = EC A:53 X:02 Y:B3 P:27 SP:FB CYC: 74 SL:146 +ECA7 C9 EC CMP #$EC A:EC X:02 Y:B3 P:A5 SP:FB CYC: 86 SL:146 +ECA9 F0 02 BEQ $ECAD A:EC X:02 Y:B3 P:27 SP:FB CYC: 92 SL:146 +ECAD A0 FF LDY #$FF A:EC X:02 Y:B3 P:27 SP:FB CYC:101 SL:146 +ECAF A9 FF LDA #$FF A:EC X:02 Y:FF P:A5 SP:FB CYC:107 SL:146 +ECB1 8D 47 06 STA $0647 = EC A:FF X:02 Y:FF P:A5 SP:FB CYC:113 SL:146 +ECB4 20 C2 FA JSR $FAC2 A:FF X:02 Y:FF P:A5 SP:FB CYC:125 SL:146 +FAC2 B8 CLV A:FF X:02 Y:FF P:A5 SP:F9 CYC:143 SL:146 +FAC3 38 SEC A:FF X:02 Y:FF P:A5 SP:F9 CYC:149 SL:146 +FAC4 A9 FF LDA #$FF A:FF X:02 Y:FF P:A5 SP:F9 CYC:155 SL:146 +FAC6 60 RTS A:FF X:02 Y:FF P:A5 SP:F9 CYC:161 SL:146 +ECB7 F3 45 *ISB ($45),Y = 0548 @ 0647 = FF A:FF X:02 Y:FF P:A5 SP:FB CYC:179 SL:146 +ECB9 EA NOP A:FF X:02 Y:FF P:A5 SP:FB CYC:203 SL:146 +ECBA EA NOP A:FF X:02 Y:FF P:A5 SP:FB CYC:209 SL:146 +ECBB 08 PHP A:FF X:02 Y:FF P:A5 SP:FB CYC:215 SL:146 +ECBC 48 PHA A:FF X:02 Y:FF P:A5 SP:FA CYC:224 SL:146 +ECBD A0 B4 LDY #$B4 A:FF X:02 Y:FF P:A5 SP:F9 CYC:233 SL:146 +ECBF 68 PLA A:FF X:02 Y:B4 P:A5 SP:F9 CYC:239 SL:146 +ECC0 28 PLP A:FF X:02 Y:B4 P:A5 SP:FA CYC:251 SL:146 +ECC1 20 C7 FA JSR $FAC7 A:FF X:02 Y:B4 P:A5 SP:FB CYC:263 SL:146 +FAC7 70 1D BVS $FAE6 A:FF X:02 Y:B4 P:A5 SP:F9 CYC:281 SL:146 +FAC9 F0 1B BEQ $FAE6 A:FF X:02 Y:B4 P:A5 SP:F9 CYC:287 SL:146 +FACB 10 19 BPL $FAE6 A:FF X:02 Y:B4 P:A5 SP:F9 CYC:293 SL:146 +FACD 90 17 BCC $FAE6 A:FF X:02 Y:B4 P:A5 SP:F9 CYC:299 SL:146 +FACF C9 FF CMP #$FF A:FF X:02 Y:B4 P:A5 SP:F9 CYC:305 SL:146 +FAD1 D0 13 BNE $FAE6 A:FF X:02 Y:B4 P:27 SP:F9 CYC:311 SL:146 +FAD3 60 RTS A:FF X:02 Y:B4 P:27 SP:F9 CYC:317 SL:146 +ECC4 AD 47 06 LDA $0647 = 00 A:FF X:02 Y:B4 P:27 SP:FB CYC:335 SL:146 +ECC7 C9 00 CMP #$00 A:00 X:02 Y:B4 P:27 SP:FB CYC: 6 SL:147 +ECC9 F0 02 BEQ $ECCD A:00 X:02 Y:B4 P:27 SP:FB CYC: 12 SL:147 +ECCD A0 FF LDY #$FF A:00 X:02 Y:B4 P:27 SP:FB CYC: 21 SL:147 +ECCF A9 37 LDA #$37 A:00 X:02 Y:FF P:A5 SP:FB CYC: 27 SL:147 +ECD1 8D 47 06 STA $0647 = 00 A:37 X:02 Y:FF P:25 SP:FB CYC: 33 SL:147 +ECD4 20 D4 FA JSR $FAD4 A:37 X:02 Y:FF P:25 SP:FB CYC: 45 SL:147 +FAD4 24 01 BIT $01 = FF A:37 X:02 Y:FF P:25 SP:F9 CYC: 63 SL:147 +FAD6 38 SEC A:37 X:02 Y:FF P:E5 SP:F9 CYC: 72 SL:147 +FAD7 A9 F0 LDA #$F0 A:37 X:02 Y:FF P:E5 SP:F9 CYC: 78 SL:147 +FAD9 60 RTS A:F0 X:02 Y:FF P:E5 SP:F9 CYC: 84 SL:147 +ECD7 F3 45 *ISB ($45),Y = 0548 @ 0647 = 37 A:F0 X:02 Y:FF P:E5 SP:FB CYC:102 SL:147 +ECD9 EA NOP A:B8 X:02 Y:FF P:A5 SP:FB CYC:126 SL:147 +ECDA EA NOP A:B8 X:02 Y:FF P:A5 SP:FB CYC:132 SL:147 +ECDB 08 PHP A:B8 X:02 Y:FF P:A5 SP:FB CYC:138 SL:147 +ECDC 48 PHA A:B8 X:02 Y:FF P:A5 SP:FA CYC:147 SL:147 +ECDD A0 B5 LDY #$B5 A:B8 X:02 Y:FF P:A5 SP:F9 CYC:156 SL:147 +ECDF 68 PLA A:B8 X:02 Y:B5 P:A5 SP:F9 CYC:162 SL:147 +ECE0 28 PLP A:B8 X:02 Y:B5 P:A5 SP:FA CYC:174 SL:147 +ECE1 20 DA FA JSR $FADA A:B8 X:02 Y:B5 P:A5 SP:FB CYC:186 SL:147 +FADA 70 0A BVS $FAE6 A:B8 X:02 Y:B5 P:A5 SP:F9 CYC:204 SL:147 +FADC F0 08 BEQ $FAE6 A:B8 X:02 Y:B5 P:A5 SP:F9 CYC:210 SL:147 +FADE 10 06 BPL $FAE6 A:B8 X:02 Y:B5 P:A5 SP:F9 CYC:216 SL:147 +FAE0 90 04 BCC $FAE6 A:B8 X:02 Y:B5 P:A5 SP:F9 CYC:222 SL:147 +FAE2 C9 B8 CMP #$B8 A:B8 X:02 Y:B5 P:A5 SP:F9 CYC:228 SL:147 +FAE4 F0 02 BEQ $FAE8 A:B8 X:02 Y:B5 P:27 SP:F9 CYC:234 SL:147 +FAE8 60 RTS A:B8 X:02 Y:B5 P:27 SP:F9 CYC:243 SL:147 +ECE4 AD 47 06 LDA $0647 = 38 A:B8 X:02 Y:B5 P:27 SP:FB CYC:261 SL:147 +ECE7 C9 38 CMP #$38 A:38 X:02 Y:B5 P:25 SP:FB CYC:273 SL:147 +ECE9 F0 02 BEQ $ECED A:38 X:02 Y:B5 P:27 SP:FB CYC:279 SL:147 +ECED A0 B6 LDY #$B6 A:38 X:02 Y:B5 P:27 SP:FB CYC:288 SL:147 +ECEF A2 FF LDX #$FF A:38 X:02 Y:B6 P:A5 SP:FB CYC:294 SL:147 +ECF1 A9 EB LDA #$EB A:38 X:FF Y:B6 P:A5 SP:FB CYC:300 SL:147 +ECF3 85 47 STA $47 = 38 A:EB X:FF Y:B6 P:A5 SP:FB CYC:306 SL:147 +ECF5 20 B1 FA JSR $FAB1 A:EB X:FF Y:B6 P:A5 SP:FB CYC:315 SL:147 +FAB1 24 01 BIT $01 = FF A:EB X:FF Y:B6 P:A5 SP:F9 CYC:333 SL:147 +FAB3 18 CLC A:EB X:FF Y:B6 P:E5 SP:F9 CYC: 1 SL:148 +FAB4 A9 40 LDA #$40 A:EB X:FF Y:B6 P:E4 SP:F9 CYC: 7 SL:148 +FAB6 60 RTS A:40 X:FF Y:B6 P:64 SP:F9 CYC: 13 SL:148 +ECF8 F7 48 *ISB $48,X @ 47 = EB A:40 X:FF Y:B6 P:64 SP:FB CYC: 31 SL:148 +ECFA EA NOP A:53 X:FF Y:B6 P:24 SP:FB CYC: 49 SL:148 +ECFB EA NOP A:53 X:FF Y:B6 P:24 SP:FB CYC: 55 SL:148 +ECFC EA NOP A:53 X:FF Y:B6 P:24 SP:FB CYC: 61 SL:148 +ECFD EA NOP A:53 X:FF Y:B6 P:24 SP:FB CYC: 67 SL:148 +ECFE 20 B7 FA JSR $FAB7 A:53 X:FF Y:B6 P:24 SP:FB CYC: 73 SL:148 +FAB7 70 2D BVS $FAE6 A:53 X:FF Y:B6 P:24 SP:F9 CYC: 91 SL:148 +FAB9 B0 2B BCS $FAE6 A:53 X:FF Y:B6 P:24 SP:F9 CYC: 97 SL:148 +FABB 30 29 BMI $FAE6 A:53 X:FF Y:B6 P:24 SP:F9 CYC:103 SL:148 +FABD C9 53 CMP #$53 A:53 X:FF Y:B6 P:24 SP:F9 CYC:109 SL:148 +FABF D0 25 BNE $FAE6 A:53 X:FF Y:B6 P:27 SP:F9 CYC:115 SL:148 +FAC1 60 RTS A:53 X:FF Y:B6 P:27 SP:F9 CYC:121 SL:148 +ED01 A5 47 LDA $47 = EC A:53 X:FF Y:B6 P:27 SP:FB CYC:139 SL:148 +ED03 C9 EC CMP #$EC A:EC X:FF Y:B6 P:A5 SP:FB CYC:148 SL:148 +ED05 F0 02 BEQ $ED09 A:EC X:FF Y:B6 P:27 SP:FB CYC:154 SL:148 +ED09 C8 INY A:EC X:FF Y:B6 P:27 SP:FB CYC:163 SL:148 +ED0A A9 FF LDA #$FF A:EC X:FF Y:B7 P:A5 SP:FB CYC:169 SL:148 +ED0C 85 47 STA $47 = EC A:FF X:FF Y:B7 P:A5 SP:FB CYC:175 SL:148 +ED0E 20 C2 FA JSR $FAC2 A:FF X:FF Y:B7 P:A5 SP:FB CYC:184 SL:148 +FAC2 B8 CLV A:FF X:FF Y:B7 P:A5 SP:F9 CYC:202 SL:148 +FAC3 38 SEC A:FF X:FF Y:B7 P:A5 SP:F9 CYC:208 SL:148 +FAC4 A9 FF LDA #$FF A:FF X:FF Y:B7 P:A5 SP:F9 CYC:214 SL:148 +FAC6 60 RTS A:FF X:FF Y:B7 P:A5 SP:F9 CYC:220 SL:148 +ED11 F7 48 *ISB $48,X @ 47 = FF A:FF X:FF Y:B7 P:A5 SP:FB CYC:238 SL:148 +ED13 EA NOP A:FF X:FF Y:B7 P:A5 SP:FB CYC:256 SL:148 +ED14 EA NOP A:FF X:FF Y:B7 P:A5 SP:FB CYC:262 SL:148 +ED15 EA NOP A:FF X:FF Y:B7 P:A5 SP:FB CYC:268 SL:148 +ED16 EA NOP A:FF X:FF Y:B7 P:A5 SP:FB CYC:274 SL:148 +ED17 20 C7 FA JSR $FAC7 A:FF X:FF Y:B7 P:A5 SP:FB CYC:280 SL:148 +FAC7 70 1D BVS $FAE6 A:FF X:FF Y:B7 P:A5 SP:F9 CYC:298 SL:148 +FAC9 F0 1B BEQ $FAE6 A:FF X:FF Y:B7 P:A5 SP:F9 CYC:304 SL:148 +FACB 10 19 BPL $FAE6 A:FF X:FF Y:B7 P:A5 SP:F9 CYC:310 SL:148 +FACD 90 17 BCC $FAE6 A:FF X:FF Y:B7 P:A5 SP:F9 CYC:316 SL:148 +FACF C9 FF CMP #$FF A:FF X:FF Y:B7 P:A5 SP:F9 CYC:322 SL:148 +FAD1 D0 13 BNE $FAE6 A:FF X:FF Y:B7 P:27 SP:F9 CYC:328 SL:148 +FAD3 60 RTS A:FF X:FF Y:B7 P:27 SP:F9 CYC:334 SL:148 +ED1A A5 47 LDA $47 = 00 A:FF X:FF Y:B7 P:27 SP:FB CYC: 11 SL:149 +ED1C C9 00 CMP #$00 A:00 X:FF Y:B7 P:27 SP:FB CYC: 20 SL:149 +ED1E F0 02 BEQ $ED22 A:00 X:FF Y:B7 P:27 SP:FB CYC: 26 SL:149 +ED22 C8 INY A:00 X:FF Y:B7 P:27 SP:FB CYC: 35 SL:149 +ED23 A9 37 LDA #$37 A:00 X:FF Y:B8 P:A5 SP:FB CYC: 41 SL:149 +ED25 85 47 STA $47 = 00 A:37 X:FF Y:B8 P:25 SP:FB CYC: 47 SL:149 +ED27 20 D4 FA JSR $FAD4 A:37 X:FF Y:B8 P:25 SP:FB CYC: 56 SL:149 +FAD4 24 01 BIT $01 = FF A:37 X:FF Y:B8 P:25 SP:F9 CYC: 74 SL:149 +FAD6 38 SEC A:37 X:FF Y:B8 P:E5 SP:F9 CYC: 83 SL:149 +FAD7 A9 F0 LDA #$F0 A:37 X:FF Y:B8 P:E5 SP:F9 CYC: 89 SL:149 +FAD9 60 RTS A:F0 X:FF Y:B8 P:E5 SP:F9 CYC: 95 SL:149 +ED2A F7 48 *ISB $48,X @ 47 = 37 A:F0 X:FF Y:B8 P:E5 SP:FB CYC:113 SL:149 +ED2C EA NOP A:B8 X:FF Y:B8 P:A5 SP:FB CYC:131 SL:149 +ED2D EA NOP A:B8 X:FF Y:B8 P:A5 SP:FB CYC:137 SL:149 +ED2E EA NOP A:B8 X:FF Y:B8 P:A5 SP:FB CYC:143 SL:149 +ED2F EA NOP A:B8 X:FF Y:B8 P:A5 SP:FB CYC:149 SL:149 +ED30 20 DA FA JSR $FADA A:B8 X:FF Y:B8 P:A5 SP:FB CYC:155 SL:149 +FADA 70 0A BVS $FAE6 A:B8 X:FF Y:B8 P:A5 SP:F9 CYC:173 SL:149 +FADC F0 08 BEQ $FAE6 A:B8 X:FF Y:B8 P:A5 SP:F9 CYC:179 SL:149 +FADE 10 06 BPL $FAE6 A:B8 X:FF Y:B8 P:A5 SP:F9 CYC:185 SL:149 +FAE0 90 04 BCC $FAE6 A:B8 X:FF Y:B8 P:A5 SP:F9 CYC:191 SL:149 +FAE2 C9 B8 CMP #$B8 A:B8 X:FF Y:B8 P:A5 SP:F9 CYC:197 SL:149 +FAE4 F0 02 BEQ $FAE8 A:B8 X:FF Y:B8 P:27 SP:F9 CYC:203 SL:149 +FAE8 60 RTS A:B8 X:FF Y:B8 P:27 SP:F9 CYC:212 SL:149 +ED33 A5 47 LDA $47 = 38 A:B8 X:FF Y:B8 P:27 SP:FB CYC:230 SL:149 +ED35 C9 38 CMP #$38 A:38 X:FF Y:B8 P:25 SP:FB CYC:239 SL:149 +ED37 F0 02 BEQ $ED3B A:38 X:FF Y:B8 P:27 SP:FB CYC:245 SL:149 +ED3B A9 EB LDA #$EB A:38 X:FF Y:B8 P:27 SP:FB CYC:254 SL:149 +ED3D 8D 47 06 STA $0647 = 38 A:EB X:FF Y:B8 P:A5 SP:FB CYC:260 SL:149 +ED40 A0 FF LDY #$FF A:EB X:FF Y:B8 P:A5 SP:FB CYC:272 SL:149 +ED42 20 B1 FA JSR $FAB1 A:EB X:FF Y:FF P:A5 SP:FB CYC:278 SL:149 +FAB1 24 01 BIT $01 = FF A:EB X:FF Y:FF P:A5 SP:F9 CYC:296 SL:149 +FAB3 18 CLC A:EB X:FF Y:FF P:E5 SP:F9 CYC:305 SL:149 +FAB4 A9 40 LDA #$40 A:EB X:FF Y:FF P:E4 SP:F9 CYC:311 SL:149 +FAB6 60 RTS A:40 X:FF Y:FF P:64 SP:F9 CYC:317 SL:149 +ED45 FB 48 05 *ISB $0548,Y @ 0647 = EB A:40 X:FF Y:FF P:64 SP:FB CYC:335 SL:149 +ED48 EA NOP A:53 X:FF Y:FF P:24 SP:FB CYC: 15 SL:150 +ED49 EA NOP A:53 X:FF Y:FF P:24 SP:FB CYC: 21 SL:150 +ED4A 08 PHP A:53 X:FF Y:FF P:24 SP:FB CYC: 27 SL:150 +ED4B 48 PHA A:53 X:FF Y:FF P:24 SP:FA CYC: 36 SL:150 +ED4C A0 B9 LDY #$B9 A:53 X:FF Y:FF P:24 SP:F9 CYC: 45 SL:150 +ED4E 68 PLA A:53 X:FF Y:B9 P:A4 SP:F9 CYC: 51 SL:150 +ED4F 28 PLP A:53 X:FF Y:B9 P:24 SP:FA CYC: 63 SL:150 +ED50 20 B7 FA JSR $FAB7 A:53 X:FF Y:B9 P:24 SP:FB CYC: 75 SL:150 +FAB7 70 2D BVS $FAE6 A:53 X:FF Y:B9 P:24 SP:F9 CYC: 93 SL:150 +FAB9 B0 2B BCS $FAE6 A:53 X:FF Y:B9 P:24 SP:F9 CYC: 99 SL:150 +FABB 30 29 BMI $FAE6 A:53 X:FF Y:B9 P:24 SP:F9 CYC:105 SL:150 +FABD C9 53 CMP #$53 A:53 X:FF Y:B9 P:24 SP:F9 CYC:111 SL:150 +FABF D0 25 BNE $FAE6 A:53 X:FF Y:B9 P:27 SP:F9 CYC:117 SL:150 +FAC1 60 RTS A:53 X:FF Y:B9 P:27 SP:F9 CYC:123 SL:150 +ED53 AD 47 06 LDA $0647 = EC A:53 X:FF Y:B9 P:27 SP:FB CYC:141 SL:150 +ED56 C9 EC CMP #$EC A:EC X:FF Y:B9 P:A5 SP:FB CYC:153 SL:150 +ED58 F0 02 BEQ $ED5C A:EC X:FF Y:B9 P:27 SP:FB CYC:159 SL:150 +ED5C A0 FF LDY #$FF A:EC X:FF Y:B9 P:27 SP:FB CYC:168 SL:150 +ED5E A9 FF LDA #$FF A:EC X:FF Y:FF P:A5 SP:FB CYC:174 SL:150 +ED60 8D 47 06 STA $0647 = EC A:FF X:FF Y:FF P:A5 SP:FB CYC:180 SL:150 +ED63 20 C2 FA JSR $FAC2 A:FF X:FF Y:FF P:A5 SP:FB CYC:192 SL:150 +FAC2 B8 CLV A:FF X:FF Y:FF P:A5 SP:F9 CYC:210 SL:150 +FAC3 38 SEC A:FF X:FF Y:FF P:A5 SP:F9 CYC:216 SL:150 +FAC4 A9 FF LDA #$FF A:FF X:FF Y:FF P:A5 SP:F9 CYC:222 SL:150 +FAC6 60 RTS A:FF X:FF Y:FF P:A5 SP:F9 CYC:228 SL:150 +ED66 FB 48 05 *ISB $0548,Y @ 0647 = FF A:FF X:FF Y:FF P:A5 SP:FB CYC:246 SL:150 +ED69 EA NOP A:FF X:FF Y:FF P:A5 SP:FB CYC:267 SL:150 +ED6A EA NOP A:FF X:FF Y:FF P:A5 SP:FB CYC:273 SL:150 +ED6B 08 PHP A:FF X:FF Y:FF P:A5 SP:FB CYC:279 SL:150 +ED6C 48 PHA A:FF X:FF Y:FF P:A5 SP:FA CYC:288 SL:150 +ED6D A0 BA LDY #$BA A:FF X:FF Y:FF P:A5 SP:F9 CYC:297 SL:150 +ED6F 68 PLA A:FF X:FF Y:BA P:A5 SP:F9 CYC:303 SL:150 +ED70 28 PLP A:FF X:FF Y:BA P:A5 SP:FA CYC:315 SL:150 +ED71 20 C7 FA JSR $FAC7 A:FF X:FF Y:BA P:A5 SP:FB CYC:327 SL:150 +FAC7 70 1D BVS $FAE6 A:FF X:FF Y:BA P:A5 SP:F9 CYC: 4 SL:151 +FAC9 F0 1B BEQ $FAE6 A:FF X:FF Y:BA P:A5 SP:F9 CYC: 10 SL:151 +FACB 10 19 BPL $FAE6 A:FF X:FF Y:BA P:A5 SP:F9 CYC: 16 SL:151 +FACD 90 17 BCC $FAE6 A:FF X:FF Y:BA P:A5 SP:F9 CYC: 22 SL:151 +FACF C9 FF CMP #$FF A:FF X:FF Y:BA P:A5 SP:F9 CYC: 28 SL:151 +FAD1 D0 13 BNE $FAE6 A:FF X:FF Y:BA P:27 SP:F9 CYC: 34 SL:151 +FAD3 60 RTS A:FF X:FF Y:BA P:27 SP:F9 CYC: 40 SL:151 +ED74 AD 47 06 LDA $0647 = 00 A:FF X:FF Y:BA P:27 SP:FB CYC: 58 SL:151 +ED77 C9 00 CMP #$00 A:00 X:FF Y:BA P:27 SP:FB CYC: 70 SL:151 +ED79 F0 02 BEQ $ED7D A:00 X:FF Y:BA P:27 SP:FB CYC: 76 SL:151 +ED7D A0 FF LDY #$FF A:00 X:FF Y:BA P:27 SP:FB CYC: 85 SL:151 +ED7F A9 37 LDA #$37 A:00 X:FF Y:FF P:A5 SP:FB CYC: 91 SL:151 +ED81 8D 47 06 STA $0647 = 00 A:37 X:FF Y:FF P:25 SP:FB CYC: 97 SL:151 +ED84 20 D4 FA JSR $FAD4 A:37 X:FF Y:FF P:25 SP:FB CYC:109 SL:151 +FAD4 24 01 BIT $01 = FF A:37 X:FF Y:FF P:25 SP:F9 CYC:127 SL:151 +FAD6 38 SEC A:37 X:FF Y:FF P:E5 SP:F9 CYC:136 SL:151 +FAD7 A9 F0 LDA #$F0 A:37 X:FF Y:FF P:E5 SP:F9 CYC:142 SL:151 +FAD9 60 RTS A:F0 X:FF Y:FF P:E5 SP:F9 CYC:148 SL:151 +ED87 FB 48 05 *ISB $0548,Y @ 0647 = 37 A:F0 X:FF Y:FF P:E5 SP:FB CYC:166 SL:151 +ED8A EA NOP A:B8 X:FF Y:FF P:A5 SP:FB CYC:187 SL:151 +ED8B EA NOP A:B8 X:FF Y:FF P:A5 SP:FB CYC:193 SL:151 +ED8C 08 PHP A:B8 X:FF Y:FF P:A5 SP:FB CYC:199 SL:151 +ED8D 48 PHA A:B8 X:FF Y:FF P:A5 SP:FA CYC:208 SL:151 +ED8E A0 BB LDY #$BB A:B8 X:FF Y:FF P:A5 SP:F9 CYC:217 SL:151 +ED90 68 PLA A:B8 X:FF Y:BB P:A5 SP:F9 CYC:223 SL:151 +ED91 28 PLP A:B8 X:FF Y:BB P:A5 SP:FA CYC:235 SL:151 +ED92 20 DA FA JSR $FADA A:B8 X:FF Y:BB P:A5 SP:FB CYC:247 SL:151 +FADA 70 0A BVS $FAE6 A:B8 X:FF Y:BB P:A5 SP:F9 CYC:265 SL:151 +FADC F0 08 BEQ $FAE6 A:B8 X:FF Y:BB P:A5 SP:F9 CYC:271 SL:151 +FADE 10 06 BPL $FAE6 A:B8 X:FF Y:BB P:A5 SP:F9 CYC:277 SL:151 +FAE0 90 04 BCC $FAE6 A:B8 X:FF Y:BB P:A5 SP:F9 CYC:283 SL:151 +FAE2 C9 B8 CMP #$B8 A:B8 X:FF Y:BB P:A5 SP:F9 CYC:289 SL:151 +FAE4 F0 02 BEQ $FAE8 A:B8 X:FF Y:BB P:27 SP:F9 CYC:295 SL:151 +FAE8 60 RTS A:B8 X:FF Y:BB P:27 SP:F9 CYC:304 SL:151 +ED95 AD 47 06 LDA $0647 = 38 A:B8 X:FF Y:BB P:27 SP:FB CYC:322 SL:151 +ED98 C9 38 CMP #$38 A:38 X:FF Y:BB P:25 SP:FB CYC:334 SL:151 +ED9A F0 02 BEQ $ED9E A:38 X:FF Y:BB P:27 SP:FB CYC:340 SL:151 +ED9E A0 BC LDY #$BC A:38 X:FF Y:BB P:27 SP:FB CYC: 8 SL:152 +EDA0 A2 FF LDX #$FF A:38 X:FF Y:BC P:A5 SP:FB CYC: 14 SL:152 +EDA2 A9 EB LDA #$EB A:38 X:FF Y:BC P:A5 SP:FB CYC: 20 SL:152 +EDA4 8D 47 06 STA $0647 = 38 A:EB X:FF Y:BC P:A5 SP:FB CYC: 26 SL:152 +EDA7 20 B1 FA JSR $FAB1 A:EB X:FF Y:BC P:A5 SP:FB CYC: 38 SL:152 +FAB1 24 01 BIT $01 = FF A:EB X:FF Y:BC P:A5 SP:F9 CYC: 56 SL:152 +FAB3 18 CLC A:EB X:FF Y:BC P:E5 SP:F9 CYC: 65 SL:152 +FAB4 A9 40 LDA #$40 A:EB X:FF Y:BC P:E4 SP:F9 CYC: 71 SL:152 +FAB6 60 RTS A:40 X:FF Y:BC P:64 SP:F9 CYC: 77 SL:152 +EDAA FF 48 05 *ISB $0548,X @ 0647 = EB A:40 X:FF Y:BC P:64 SP:FB CYC: 95 SL:152 +EDAD EA NOP A:53 X:FF Y:BC P:24 SP:FB CYC:116 SL:152 +EDAE EA NOP A:53 X:FF Y:BC P:24 SP:FB CYC:122 SL:152 +EDAF EA NOP A:53 X:FF Y:BC P:24 SP:FB CYC:128 SL:152 +EDB0 EA NOP A:53 X:FF Y:BC P:24 SP:FB CYC:134 SL:152 +EDB1 20 B7 FA JSR $FAB7 A:53 X:FF Y:BC P:24 SP:FB CYC:140 SL:152 +FAB7 70 2D BVS $FAE6 A:53 X:FF Y:BC P:24 SP:F9 CYC:158 SL:152 +FAB9 B0 2B BCS $FAE6 A:53 X:FF Y:BC P:24 SP:F9 CYC:164 SL:152 +FABB 30 29 BMI $FAE6 A:53 X:FF Y:BC P:24 SP:F9 CYC:170 SL:152 +FABD C9 53 CMP #$53 A:53 X:FF Y:BC P:24 SP:F9 CYC:176 SL:152 +FABF D0 25 BNE $FAE6 A:53 X:FF Y:BC P:27 SP:F9 CYC:182 SL:152 +FAC1 60 RTS A:53 X:FF Y:BC P:27 SP:F9 CYC:188 SL:152 +EDB4 AD 47 06 LDA $0647 = EC A:53 X:FF Y:BC P:27 SP:FB CYC:206 SL:152 +EDB7 C9 EC CMP #$EC A:EC X:FF Y:BC P:A5 SP:FB CYC:218 SL:152 +EDB9 F0 02 BEQ $EDBD A:EC X:FF Y:BC P:27 SP:FB CYC:224 SL:152 +EDBD C8 INY A:EC X:FF Y:BC P:27 SP:FB CYC:233 SL:152 +EDBE A9 FF LDA #$FF A:EC X:FF Y:BD P:A5 SP:FB CYC:239 SL:152 +EDC0 8D 47 06 STA $0647 = EC A:FF X:FF Y:BD P:A5 SP:FB CYC:245 SL:152 +EDC3 20 C2 FA JSR $FAC2 A:FF X:FF Y:BD P:A5 SP:FB CYC:257 SL:152 +FAC2 B8 CLV A:FF X:FF Y:BD P:A5 SP:F9 CYC:275 SL:152 +FAC3 38 SEC A:FF X:FF Y:BD P:A5 SP:F9 CYC:281 SL:152 +FAC4 A9 FF LDA #$FF A:FF X:FF Y:BD P:A5 SP:F9 CYC:287 SL:152 +FAC6 60 RTS A:FF X:FF Y:BD P:A5 SP:F9 CYC:293 SL:152 +EDC6 FF 48 05 *ISB $0548,X @ 0647 = FF A:FF X:FF Y:BD P:A5 SP:FB CYC:311 SL:152 +EDC9 EA NOP A:FF X:FF Y:BD P:A5 SP:FB CYC:332 SL:152 +EDCA EA NOP A:FF X:FF Y:BD P:A5 SP:FB CYC:338 SL:152 +EDCB EA NOP A:FF X:FF Y:BD P:A5 SP:FB CYC: 3 SL:153 +EDCC EA NOP A:FF X:FF Y:BD P:A5 SP:FB CYC: 9 SL:153 +EDCD 20 C7 FA JSR $FAC7 A:FF X:FF Y:BD P:A5 SP:FB CYC: 15 SL:153 +FAC7 70 1D BVS $FAE6 A:FF X:FF Y:BD P:A5 SP:F9 CYC: 33 SL:153 +FAC9 F0 1B BEQ $FAE6 A:FF X:FF Y:BD P:A5 SP:F9 CYC: 39 SL:153 +FACB 10 19 BPL $FAE6 A:FF X:FF Y:BD P:A5 SP:F9 CYC: 45 SL:153 +FACD 90 17 BCC $FAE6 A:FF X:FF Y:BD P:A5 SP:F9 CYC: 51 SL:153 +FACF C9 FF CMP #$FF A:FF X:FF Y:BD P:A5 SP:F9 CYC: 57 SL:153 +FAD1 D0 13 BNE $FAE6 A:FF X:FF Y:BD P:27 SP:F9 CYC: 63 SL:153 +FAD3 60 RTS A:FF X:FF Y:BD P:27 SP:F9 CYC: 69 SL:153 +EDD0 AD 47 06 LDA $0647 = 00 A:FF X:FF Y:BD P:27 SP:FB CYC: 87 SL:153 +EDD3 C9 00 CMP #$00 A:00 X:FF Y:BD P:27 SP:FB CYC: 99 SL:153 +EDD5 F0 02 BEQ $EDD9 A:00 X:FF Y:BD P:27 SP:FB CYC:105 SL:153 +EDD9 C8 INY A:00 X:FF Y:BD P:27 SP:FB CYC:114 SL:153 +EDDA A9 37 LDA #$37 A:00 X:FF Y:BE P:A5 SP:FB CYC:120 SL:153 +EDDC 8D 47 06 STA $0647 = 00 A:37 X:FF Y:BE P:25 SP:FB CYC:126 SL:153 +EDDF 20 D4 FA JSR $FAD4 A:37 X:FF Y:BE P:25 SP:FB CYC:138 SL:153 +FAD4 24 01 BIT $01 = FF A:37 X:FF Y:BE P:25 SP:F9 CYC:156 SL:153 +FAD6 38 SEC A:37 X:FF Y:BE P:E5 SP:F9 CYC:165 SL:153 +FAD7 A9 F0 LDA #$F0 A:37 X:FF Y:BE P:E5 SP:F9 CYC:171 SL:153 +FAD9 60 RTS A:F0 X:FF Y:BE P:E5 SP:F9 CYC:177 SL:153 +EDE2 FF 48 05 *ISB $0548,X @ 0647 = 37 A:F0 X:FF Y:BE P:E5 SP:FB CYC:195 SL:153 +EDE5 EA NOP A:B8 X:FF Y:BE P:A5 SP:FB CYC:216 SL:153 +EDE6 EA NOP A:B8 X:FF Y:BE P:A5 SP:FB CYC:222 SL:153 +EDE7 EA NOP A:B8 X:FF Y:BE P:A5 SP:FB CYC:228 SL:153 +EDE8 EA NOP A:B8 X:FF Y:BE P:A5 SP:FB CYC:234 SL:153 +EDE9 20 DA FA JSR $FADA A:B8 X:FF Y:BE P:A5 SP:FB CYC:240 SL:153 +FADA 70 0A BVS $FAE6 A:B8 X:FF Y:BE P:A5 SP:F9 CYC:258 SL:153 +FADC F0 08 BEQ $FAE6 A:B8 X:FF Y:BE P:A5 SP:F9 CYC:264 SL:153 +FADE 10 06 BPL $FAE6 A:B8 X:FF Y:BE P:A5 SP:F9 CYC:270 SL:153 +FAE0 90 04 BCC $FAE6 A:B8 X:FF Y:BE P:A5 SP:F9 CYC:276 SL:153 +FAE2 C9 B8 CMP #$B8 A:B8 X:FF Y:BE P:A5 SP:F9 CYC:282 SL:153 +FAE4 F0 02 BEQ $FAE8 A:B8 X:FF Y:BE P:27 SP:F9 CYC:288 SL:153 +FAE8 60 RTS A:B8 X:FF Y:BE P:27 SP:F9 CYC:297 SL:153 +EDEC AD 47 06 LDA $0647 = 38 A:B8 X:FF Y:BE P:27 SP:FB CYC:315 SL:153 +EDEF C9 38 CMP #$38 A:38 X:FF Y:BE P:25 SP:FB CYC:327 SL:153 +EDF1 F0 02 BEQ $EDF5 A:38 X:FF Y:BE P:27 SP:FB CYC:333 SL:153 +EDF5 60 RTS A:38 X:FF Y:BE P:27 SP:FB CYC: 1 SL:154 +C641 20 F6 ED JSR $EDF6 A:38 X:FF Y:BE P:27 SP:FD CYC: 19 SL:154 +EDF6 A9 FF LDA #$FF A:38 X:FF Y:BE P:27 SP:FB CYC: 37 SL:154 +EDF8 85 01 STA $01 = FF A:FF X:FF Y:BE P:A5 SP:FB CYC: 43 SL:154 +EDFA A0 BF LDY #$BF A:FF X:FF Y:BE P:A5 SP:FB CYC: 52 SL:154 +EDFC A2 02 LDX #$02 A:FF X:FF Y:BF P:A5 SP:FB CYC: 58 SL:154 +EDFE A9 47 LDA #$47 A:FF X:02 Y:BF P:25 SP:FB CYC: 64 SL:154 +EE00 85 47 STA $47 = 38 A:47 X:02 Y:BF P:25 SP:FB CYC: 70 SL:154 +EE02 A9 06 LDA #$06 A:47 X:02 Y:BF P:25 SP:FB CYC: 79 SL:154 +EE04 85 48 STA $48 = 06 A:06 X:02 Y:BF P:25 SP:FB CYC: 85 SL:154 +EE06 A9 A5 LDA #$A5 A:06 X:02 Y:BF P:25 SP:FB CYC: 94 SL:154 +EE08 8D 47 06 STA $0647 = 38 A:A5 X:02 Y:BF P:A5 SP:FB CYC:100 SL:154 +EE0B 20 7B FA JSR $FA7B A:A5 X:02 Y:BF P:A5 SP:FB CYC:112 SL:154 +FA7B 24 01 BIT $01 = FF A:A5 X:02 Y:BF P:A5 SP:F9 CYC:130 SL:154 +FA7D 18 CLC A:A5 X:02 Y:BF P:E5 SP:F9 CYC:139 SL:154 +FA7E A9 B3 LDA #$B3 A:A5 X:02 Y:BF P:E4 SP:F9 CYC:145 SL:154 +FA80 60 RTS A:B3 X:02 Y:BF P:E4 SP:F9 CYC:151 SL:154 +EE0E 03 45 *SLO ($45,X) @ 47 = 0647 = A5 A:B3 X:02 Y:BF P:E4 SP:FB CYC:169 SL:154 +EE10 EA NOP A:FB X:02 Y:BF P:E5 SP:FB CYC:193 SL:154 +EE11 EA NOP A:FB X:02 Y:BF P:E5 SP:FB CYC:199 SL:154 +EE12 EA NOP A:FB X:02 Y:BF P:E5 SP:FB CYC:205 SL:154 +EE13 EA NOP A:FB X:02 Y:BF P:E5 SP:FB CYC:211 SL:154 +EE14 20 81 FA JSR $FA81 A:FB X:02 Y:BF P:E5 SP:FB CYC:217 SL:154 +FA81 50 63 BVC $FAE6 A:FB X:02 Y:BF P:E5 SP:F9 CYC:235 SL:154 +FA83 90 61 BCC $FAE6 A:FB X:02 Y:BF P:E5 SP:F9 CYC:241 SL:154 +FA85 10 5F BPL $FAE6 A:FB X:02 Y:BF P:E5 SP:F9 CYC:247 SL:154 +FA87 C9 FB CMP #$FB A:FB X:02 Y:BF P:E5 SP:F9 CYC:253 SL:154 +FA89 D0 5B BNE $FAE6 A:FB X:02 Y:BF P:67 SP:F9 CYC:259 SL:154 +FA8B 60 RTS A:FB X:02 Y:BF P:67 SP:F9 CYC:265 SL:154 +EE17 AD 47 06 LDA $0647 = 4A A:FB X:02 Y:BF P:67 SP:FB CYC:283 SL:154 +EE1A C9 4A CMP #$4A A:4A X:02 Y:BF P:65 SP:FB CYC:295 SL:154 +EE1C F0 02 BEQ $EE20 A:4A X:02 Y:BF P:67 SP:FB CYC:301 SL:154 +EE20 C8 INY A:4A X:02 Y:BF P:67 SP:FB CYC:310 SL:154 +EE21 A9 29 LDA #$29 A:4A X:02 Y:C0 P:E5 SP:FB CYC:316 SL:154 +EE23 8D 47 06 STA $0647 = 4A A:29 X:02 Y:C0 P:65 SP:FB CYC:322 SL:154 +EE26 20 8C FA JSR $FA8C A:29 X:02 Y:C0 P:65 SP:FB CYC:334 SL:154 +FA8C B8 CLV A:29 X:02 Y:C0 P:65 SP:F9 CYC: 11 SL:155 +FA8D 18 CLC A:29 X:02 Y:C0 P:25 SP:F9 CYC: 17 SL:155 +FA8E A9 C3 LDA #$C3 A:29 X:02 Y:C0 P:24 SP:F9 CYC: 23 SL:155 +FA90 60 RTS A:C3 X:02 Y:C0 P:A4 SP:F9 CYC: 29 SL:155 +EE29 03 45 *SLO ($45,X) @ 47 = 0647 = 29 A:C3 X:02 Y:C0 P:A4 SP:FB CYC: 47 SL:155 +EE2B EA NOP A:D3 X:02 Y:C0 P:A4 SP:FB CYC: 71 SL:155 +EE2C EA NOP A:D3 X:02 Y:C0 P:A4 SP:FB CYC: 77 SL:155 +EE2D EA NOP A:D3 X:02 Y:C0 P:A4 SP:FB CYC: 83 SL:155 +EE2E EA NOP A:D3 X:02 Y:C0 P:A4 SP:FB CYC: 89 SL:155 +EE2F 20 91 FA JSR $FA91 A:D3 X:02 Y:C0 P:A4 SP:FB CYC: 95 SL:155 +FA91 70 53 BVS $FAE6 A:D3 X:02 Y:C0 P:A4 SP:F9 CYC:113 SL:155 +FA93 F0 51 BEQ $FAE6 A:D3 X:02 Y:C0 P:A4 SP:F9 CYC:119 SL:155 +FA95 10 4F BPL $FAE6 A:D3 X:02 Y:C0 P:A4 SP:F9 CYC:125 SL:155 +FA97 B0 4D BCS $FAE6 A:D3 X:02 Y:C0 P:A4 SP:F9 CYC:131 SL:155 +FA99 C9 D3 CMP #$D3 A:D3 X:02 Y:C0 P:A4 SP:F9 CYC:137 SL:155 +FA9B D0 49 BNE $FAE6 A:D3 X:02 Y:C0 P:27 SP:F9 CYC:143 SL:155 +FA9D 60 RTS A:D3 X:02 Y:C0 P:27 SP:F9 CYC:149 SL:155 +EE32 AD 47 06 LDA $0647 = 52 A:D3 X:02 Y:C0 P:27 SP:FB CYC:167 SL:155 +EE35 C9 52 CMP #$52 A:52 X:02 Y:C0 P:25 SP:FB CYC:179 SL:155 +EE37 F0 02 BEQ $EE3B A:52 X:02 Y:C0 P:27 SP:FB CYC:185 SL:155 +EE3B C8 INY A:52 X:02 Y:C0 P:27 SP:FB CYC:194 SL:155 +EE3C A9 37 LDA #$37 A:52 X:02 Y:C1 P:A5 SP:FB CYC:200 SL:155 +EE3E 8D 47 06 STA $0647 = 52 A:37 X:02 Y:C1 P:25 SP:FB CYC:206 SL:155 +EE41 20 9E FA JSR $FA9E A:37 X:02 Y:C1 P:25 SP:FB CYC:218 SL:155 +FA9E 24 01 BIT $01 = FF A:37 X:02 Y:C1 P:25 SP:F9 CYC:236 SL:155 +FAA0 38 SEC A:37 X:02 Y:C1 P:E5 SP:F9 CYC:245 SL:155 +FAA1 A9 10 LDA #$10 A:37 X:02 Y:C1 P:E5 SP:F9 CYC:251 SL:155 +FAA3 60 RTS A:10 X:02 Y:C1 P:65 SP:F9 CYC:257 SL:155 +EE44 03 45 *SLO ($45,X) @ 47 = 0647 = 37 A:10 X:02 Y:C1 P:65 SP:FB CYC:275 SL:155 +EE46 EA NOP A:7E X:02 Y:C1 P:64 SP:FB CYC:299 SL:155 +EE47 EA NOP A:7E X:02 Y:C1 P:64 SP:FB CYC:305 SL:155 +EE48 EA NOP A:7E X:02 Y:C1 P:64 SP:FB CYC:311 SL:155 +EE49 EA NOP A:7E X:02 Y:C1 P:64 SP:FB CYC:317 SL:155 +EE4A 20 A4 FA JSR $FAA4 A:7E X:02 Y:C1 P:64 SP:FB CYC:323 SL:155 +FAA4 50 40 BVC $FAE6 A:7E X:02 Y:C1 P:64 SP:F9 CYC: 0 SL:156 +FAA6 F0 3E BEQ $FAE6 A:7E X:02 Y:C1 P:64 SP:F9 CYC: 6 SL:156 +FAA8 30 3C BMI $FAE6 A:7E X:02 Y:C1 P:64 SP:F9 CYC: 12 SL:156 +FAAA B0 3A BCS $FAE6 A:7E X:02 Y:C1 P:64 SP:F9 CYC: 18 SL:156 +FAAC C9 7E CMP #$7E A:7E X:02 Y:C1 P:64 SP:F9 CYC: 24 SL:156 +FAAE D0 36 BNE $FAE6 A:7E X:02 Y:C1 P:67 SP:F9 CYC: 30 SL:156 +FAB0 60 RTS A:7E X:02 Y:C1 P:67 SP:F9 CYC: 36 SL:156 +EE4D AD 47 06 LDA $0647 = 6E A:7E X:02 Y:C1 P:67 SP:FB CYC: 54 SL:156 +EE50 C9 6E CMP #$6E A:6E X:02 Y:C1 P:65 SP:FB CYC: 66 SL:156 +EE52 F0 02 BEQ $EE56 A:6E X:02 Y:C1 P:67 SP:FB CYC: 72 SL:156 +EE56 C8 INY A:6E X:02 Y:C1 P:67 SP:FB CYC: 81 SL:156 +EE57 A9 A5 LDA #$A5 A:6E X:02 Y:C2 P:E5 SP:FB CYC: 87 SL:156 +EE59 85 47 STA $47 = 47 A:A5 X:02 Y:C2 P:E5 SP:FB CYC: 93 SL:156 +EE5B 20 7B FA JSR $FA7B A:A5 X:02 Y:C2 P:E5 SP:FB CYC:102 SL:156 +FA7B 24 01 BIT $01 = FF A:A5 X:02 Y:C2 P:E5 SP:F9 CYC:120 SL:156 +FA7D 18 CLC A:A5 X:02 Y:C2 P:E5 SP:F9 CYC:129 SL:156 +FA7E A9 B3 LDA #$B3 A:A5 X:02 Y:C2 P:E4 SP:F9 CYC:135 SL:156 +FA80 60 RTS A:B3 X:02 Y:C2 P:E4 SP:F9 CYC:141 SL:156 +EE5E 07 47 *SLO $47 = A5 A:B3 X:02 Y:C2 P:E4 SP:FB CYC:159 SL:156 +EE60 EA NOP A:FB X:02 Y:C2 P:E5 SP:FB CYC:174 SL:156 +EE61 EA NOP A:FB X:02 Y:C2 P:E5 SP:FB CYC:180 SL:156 +EE62 EA NOP A:FB X:02 Y:C2 P:E5 SP:FB CYC:186 SL:156 +EE63 EA NOP A:FB X:02 Y:C2 P:E5 SP:FB CYC:192 SL:156 +EE64 20 81 FA JSR $FA81 A:FB X:02 Y:C2 P:E5 SP:FB CYC:198 SL:156 +FA81 50 63 BVC $FAE6 A:FB X:02 Y:C2 P:E5 SP:F9 CYC:216 SL:156 +FA83 90 61 BCC $FAE6 A:FB X:02 Y:C2 P:E5 SP:F9 CYC:222 SL:156 +FA85 10 5F BPL $FAE6 A:FB X:02 Y:C2 P:E5 SP:F9 CYC:228 SL:156 +FA87 C9 FB CMP #$FB A:FB X:02 Y:C2 P:E5 SP:F9 CYC:234 SL:156 +FA89 D0 5B BNE $FAE6 A:FB X:02 Y:C2 P:67 SP:F9 CYC:240 SL:156 +FA8B 60 RTS A:FB X:02 Y:C2 P:67 SP:F9 CYC:246 SL:156 +EE67 A5 47 LDA $47 = 4A A:FB X:02 Y:C2 P:67 SP:FB CYC:264 SL:156 +EE69 C9 4A CMP #$4A A:4A X:02 Y:C2 P:65 SP:FB CYC:273 SL:156 +EE6B F0 02 BEQ $EE6F A:4A X:02 Y:C2 P:67 SP:FB CYC:279 SL:156 +EE6F C8 INY A:4A X:02 Y:C2 P:67 SP:FB CYC:288 SL:156 +EE70 A9 29 LDA #$29 A:4A X:02 Y:C3 P:E5 SP:FB CYC:294 SL:156 +EE72 85 47 STA $47 = 4A A:29 X:02 Y:C3 P:65 SP:FB CYC:300 SL:156 +EE74 20 8C FA JSR $FA8C A:29 X:02 Y:C3 P:65 SP:FB CYC:309 SL:156 +FA8C B8 CLV A:29 X:02 Y:C3 P:65 SP:F9 CYC:327 SL:156 +FA8D 18 CLC A:29 X:02 Y:C3 P:25 SP:F9 CYC:333 SL:156 +FA8E A9 C3 LDA #$C3 A:29 X:02 Y:C3 P:24 SP:F9 CYC:339 SL:156 +FA90 60 RTS A:C3 X:02 Y:C3 P:A4 SP:F9 CYC: 4 SL:157 +EE77 07 47 *SLO $47 = 29 A:C3 X:02 Y:C3 P:A4 SP:FB CYC: 22 SL:157 +EE79 EA NOP A:D3 X:02 Y:C3 P:A4 SP:FB CYC: 37 SL:157 +EE7A EA NOP A:D3 X:02 Y:C3 P:A4 SP:FB CYC: 43 SL:157 +EE7B EA NOP A:D3 X:02 Y:C3 P:A4 SP:FB CYC: 49 SL:157 +EE7C EA NOP A:D3 X:02 Y:C3 P:A4 SP:FB CYC: 55 SL:157 +EE7D 20 91 FA JSR $FA91 A:D3 X:02 Y:C3 P:A4 SP:FB CYC: 61 SL:157 +FA91 70 53 BVS $FAE6 A:D3 X:02 Y:C3 P:A4 SP:F9 CYC: 79 SL:157 +FA93 F0 51 BEQ $FAE6 A:D3 X:02 Y:C3 P:A4 SP:F9 CYC: 85 SL:157 +FA95 10 4F BPL $FAE6 A:D3 X:02 Y:C3 P:A4 SP:F9 CYC: 91 SL:157 +FA97 B0 4D BCS $FAE6 A:D3 X:02 Y:C3 P:A4 SP:F9 CYC: 97 SL:157 +FA99 C9 D3 CMP #$D3 A:D3 X:02 Y:C3 P:A4 SP:F9 CYC:103 SL:157 +FA9B D0 49 BNE $FAE6 A:D3 X:02 Y:C3 P:27 SP:F9 CYC:109 SL:157 +FA9D 60 RTS A:D3 X:02 Y:C3 P:27 SP:F9 CYC:115 SL:157 +EE80 A5 47 LDA $47 = 52 A:D3 X:02 Y:C3 P:27 SP:FB CYC:133 SL:157 +EE82 C9 52 CMP #$52 A:52 X:02 Y:C3 P:25 SP:FB CYC:142 SL:157 +EE84 F0 02 BEQ $EE88 A:52 X:02 Y:C3 P:27 SP:FB CYC:148 SL:157 +EE88 C8 INY A:52 X:02 Y:C3 P:27 SP:FB CYC:157 SL:157 +EE89 A9 37 LDA #$37 A:52 X:02 Y:C4 P:A5 SP:FB CYC:163 SL:157 +EE8B 85 47 STA $47 = 52 A:37 X:02 Y:C4 P:25 SP:FB CYC:169 SL:157 +EE8D 20 9E FA JSR $FA9E A:37 X:02 Y:C4 P:25 SP:FB CYC:178 SL:157 +FA9E 24 01 BIT $01 = FF A:37 X:02 Y:C4 P:25 SP:F9 CYC:196 SL:157 +FAA0 38 SEC A:37 X:02 Y:C4 P:E5 SP:F9 CYC:205 SL:157 +FAA1 A9 10 LDA #$10 A:37 X:02 Y:C4 P:E5 SP:F9 CYC:211 SL:157 +FAA3 60 RTS A:10 X:02 Y:C4 P:65 SP:F9 CYC:217 SL:157 +EE90 07 47 *SLO $47 = 37 A:10 X:02 Y:C4 P:65 SP:FB CYC:235 SL:157 +EE92 EA NOP A:7E X:02 Y:C4 P:64 SP:FB CYC:250 SL:157 +EE93 EA NOP A:7E X:02 Y:C4 P:64 SP:FB CYC:256 SL:157 +EE94 EA NOP A:7E X:02 Y:C4 P:64 SP:FB CYC:262 SL:157 +EE95 EA NOP A:7E X:02 Y:C4 P:64 SP:FB CYC:268 SL:157 +EE96 20 A4 FA JSR $FAA4 A:7E X:02 Y:C4 P:64 SP:FB CYC:274 SL:157 +FAA4 50 40 BVC $FAE6 A:7E X:02 Y:C4 P:64 SP:F9 CYC:292 SL:157 +FAA6 F0 3E BEQ $FAE6 A:7E X:02 Y:C4 P:64 SP:F9 CYC:298 SL:157 +FAA8 30 3C BMI $FAE6 A:7E X:02 Y:C4 P:64 SP:F9 CYC:304 SL:157 +FAAA B0 3A BCS $FAE6 A:7E X:02 Y:C4 P:64 SP:F9 CYC:310 SL:157 +FAAC C9 7E CMP #$7E A:7E X:02 Y:C4 P:64 SP:F9 CYC:316 SL:157 +FAAE D0 36 BNE $FAE6 A:7E X:02 Y:C4 P:67 SP:F9 CYC:322 SL:157 +FAB0 60 RTS A:7E X:02 Y:C4 P:67 SP:F9 CYC:328 SL:157 +EE99 A5 47 LDA $47 = 6E A:7E X:02 Y:C4 P:67 SP:FB CYC: 5 SL:158 +EE9B C9 6E CMP #$6E A:6E X:02 Y:C4 P:65 SP:FB CYC: 14 SL:158 +EE9D F0 02 BEQ $EEA1 A:6E X:02 Y:C4 P:67 SP:FB CYC: 20 SL:158 +EEA1 C8 INY A:6E X:02 Y:C4 P:67 SP:FB CYC: 29 SL:158 +EEA2 A9 A5 LDA #$A5 A:6E X:02 Y:C5 P:E5 SP:FB CYC: 35 SL:158 +EEA4 8D 47 06 STA $0647 = 6E A:A5 X:02 Y:C5 P:E5 SP:FB CYC: 41 SL:158 +EEA7 20 7B FA JSR $FA7B A:A5 X:02 Y:C5 P:E5 SP:FB CYC: 53 SL:158 +FA7B 24 01 BIT $01 = FF A:A5 X:02 Y:C5 P:E5 SP:F9 CYC: 71 SL:158 +FA7D 18 CLC A:A5 X:02 Y:C5 P:E5 SP:F9 CYC: 80 SL:158 +FA7E A9 B3 LDA #$B3 A:A5 X:02 Y:C5 P:E4 SP:F9 CYC: 86 SL:158 +FA80 60 RTS A:B3 X:02 Y:C5 P:E4 SP:F9 CYC: 92 SL:158 +EEAA 0F 47 06 *SLO $0647 = A5 A:B3 X:02 Y:C5 P:E4 SP:FB CYC:110 SL:158 +EEAD EA NOP A:FB X:02 Y:C5 P:E5 SP:FB CYC:128 SL:158 +EEAE EA NOP A:FB X:02 Y:C5 P:E5 SP:FB CYC:134 SL:158 +EEAF EA NOP A:FB X:02 Y:C5 P:E5 SP:FB CYC:140 SL:158 +EEB0 EA NOP A:FB X:02 Y:C5 P:E5 SP:FB CYC:146 SL:158 +EEB1 20 81 FA JSR $FA81 A:FB X:02 Y:C5 P:E5 SP:FB CYC:152 SL:158 +FA81 50 63 BVC $FAE6 A:FB X:02 Y:C5 P:E5 SP:F9 CYC:170 SL:158 +FA83 90 61 BCC $FAE6 A:FB X:02 Y:C5 P:E5 SP:F9 CYC:176 SL:158 +FA85 10 5F BPL $FAE6 A:FB X:02 Y:C5 P:E5 SP:F9 CYC:182 SL:158 +FA87 C9 FB CMP #$FB A:FB X:02 Y:C5 P:E5 SP:F9 CYC:188 SL:158 +FA89 D0 5B BNE $FAE6 A:FB X:02 Y:C5 P:67 SP:F9 CYC:194 SL:158 +FA8B 60 RTS A:FB X:02 Y:C5 P:67 SP:F9 CYC:200 SL:158 +EEB4 AD 47 06 LDA $0647 = 4A A:FB X:02 Y:C5 P:67 SP:FB CYC:218 SL:158 +EEB7 C9 4A CMP #$4A A:4A X:02 Y:C5 P:65 SP:FB CYC:230 SL:158 +EEB9 F0 02 BEQ $EEBD A:4A X:02 Y:C5 P:67 SP:FB CYC:236 SL:158 +EEBD C8 INY A:4A X:02 Y:C5 P:67 SP:FB CYC:245 SL:158 +EEBE A9 29 LDA #$29 A:4A X:02 Y:C6 P:E5 SP:FB CYC:251 SL:158 +EEC0 8D 47 06 STA $0647 = 4A A:29 X:02 Y:C6 P:65 SP:FB CYC:257 SL:158 +EEC3 20 8C FA JSR $FA8C A:29 X:02 Y:C6 P:65 SP:FB CYC:269 SL:158 +FA8C B8 CLV A:29 X:02 Y:C6 P:65 SP:F9 CYC:287 SL:158 +FA8D 18 CLC A:29 X:02 Y:C6 P:25 SP:F9 CYC:293 SL:158 +FA8E A9 C3 LDA #$C3 A:29 X:02 Y:C6 P:24 SP:F9 CYC:299 SL:158 +FA90 60 RTS A:C3 X:02 Y:C6 P:A4 SP:F9 CYC:305 SL:158 +EEC6 0F 47 06 *SLO $0647 = 29 A:C3 X:02 Y:C6 P:A4 SP:FB CYC:323 SL:158 +EEC9 EA NOP A:D3 X:02 Y:C6 P:A4 SP:FB CYC: 0 SL:159 +EECA EA NOP A:D3 X:02 Y:C6 P:A4 SP:FB CYC: 6 SL:159 +EECB EA NOP A:D3 X:02 Y:C6 P:A4 SP:FB CYC: 12 SL:159 +EECC EA NOP A:D3 X:02 Y:C6 P:A4 SP:FB CYC: 18 SL:159 +EECD 20 91 FA JSR $FA91 A:D3 X:02 Y:C6 P:A4 SP:FB CYC: 24 SL:159 +FA91 70 53 BVS $FAE6 A:D3 X:02 Y:C6 P:A4 SP:F9 CYC: 42 SL:159 +FA93 F0 51 BEQ $FAE6 A:D3 X:02 Y:C6 P:A4 SP:F9 CYC: 48 SL:159 +FA95 10 4F BPL $FAE6 A:D3 X:02 Y:C6 P:A4 SP:F9 CYC: 54 SL:159 +FA97 B0 4D BCS $FAE6 A:D3 X:02 Y:C6 P:A4 SP:F9 CYC: 60 SL:159 +FA99 C9 D3 CMP #$D3 A:D3 X:02 Y:C6 P:A4 SP:F9 CYC: 66 SL:159 +FA9B D0 49 BNE $FAE6 A:D3 X:02 Y:C6 P:27 SP:F9 CYC: 72 SL:159 +FA9D 60 RTS A:D3 X:02 Y:C6 P:27 SP:F9 CYC: 78 SL:159 +EED0 AD 47 06 LDA $0647 = 52 A:D3 X:02 Y:C6 P:27 SP:FB CYC: 96 SL:159 +EED3 C9 52 CMP #$52 A:52 X:02 Y:C6 P:25 SP:FB CYC:108 SL:159 +EED5 F0 02 BEQ $EED9 A:52 X:02 Y:C6 P:27 SP:FB CYC:114 SL:159 +EED9 C8 INY A:52 X:02 Y:C6 P:27 SP:FB CYC:123 SL:159 +EEDA A9 37 LDA #$37 A:52 X:02 Y:C7 P:A5 SP:FB CYC:129 SL:159 +EEDC 8D 47 06 STA $0647 = 52 A:37 X:02 Y:C7 P:25 SP:FB CYC:135 SL:159 +EEDF 20 9E FA JSR $FA9E A:37 X:02 Y:C7 P:25 SP:FB CYC:147 SL:159 +FA9E 24 01 BIT $01 = FF A:37 X:02 Y:C7 P:25 SP:F9 CYC:165 SL:159 +FAA0 38 SEC A:37 X:02 Y:C7 P:E5 SP:F9 CYC:174 SL:159 +FAA1 A9 10 LDA #$10 A:37 X:02 Y:C7 P:E5 SP:F9 CYC:180 SL:159 +FAA3 60 RTS A:10 X:02 Y:C7 P:65 SP:F9 CYC:186 SL:159 +EEE2 0F 47 06 *SLO $0647 = 37 A:10 X:02 Y:C7 P:65 SP:FB CYC:204 SL:159 +EEE5 EA NOP A:7E X:02 Y:C7 P:64 SP:FB CYC:222 SL:159 +EEE6 EA NOP A:7E X:02 Y:C7 P:64 SP:FB CYC:228 SL:159 +EEE7 EA NOP A:7E X:02 Y:C7 P:64 SP:FB CYC:234 SL:159 +EEE8 EA NOP A:7E X:02 Y:C7 P:64 SP:FB CYC:240 SL:159 +EEE9 20 A4 FA JSR $FAA4 A:7E X:02 Y:C7 P:64 SP:FB CYC:246 SL:159 +FAA4 50 40 BVC $FAE6 A:7E X:02 Y:C7 P:64 SP:F9 CYC:264 SL:159 +FAA6 F0 3E BEQ $FAE6 A:7E X:02 Y:C7 P:64 SP:F9 CYC:270 SL:159 +FAA8 30 3C BMI $FAE6 A:7E X:02 Y:C7 P:64 SP:F9 CYC:276 SL:159 +FAAA B0 3A BCS $FAE6 A:7E X:02 Y:C7 P:64 SP:F9 CYC:282 SL:159 +FAAC C9 7E CMP #$7E A:7E X:02 Y:C7 P:64 SP:F9 CYC:288 SL:159 +FAAE D0 36 BNE $FAE6 A:7E X:02 Y:C7 P:67 SP:F9 CYC:294 SL:159 +FAB0 60 RTS A:7E X:02 Y:C7 P:67 SP:F9 CYC:300 SL:159 +EEEC AD 47 06 LDA $0647 = 6E A:7E X:02 Y:C7 P:67 SP:FB CYC:318 SL:159 +EEEF C9 6E CMP #$6E A:6E X:02 Y:C7 P:65 SP:FB CYC:330 SL:159 +EEF1 F0 02 BEQ $EEF5 A:6E X:02 Y:C7 P:67 SP:FB CYC:336 SL:159 +EEF5 A9 A5 LDA #$A5 A:6E X:02 Y:C7 P:67 SP:FB CYC: 4 SL:160 +EEF7 8D 47 06 STA $0647 = 6E A:A5 X:02 Y:C7 P:E5 SP:FB CYC: 10 SL:160 +EEFA A9 48 LDA #$48 A:A5 X:02 Y:C7 P:E5 SP:FB CYC: 22 SL:160 +EEFC 85 45 STA $45 = 48 A:48 X:02 Y:C7 P:65 SP:FB CYC: 28 SL:160 +EEFE A9 05 LDA #$05 A:48 X:02 Y:C7 P:65 SP:FB CYC: 37 SL:160 +EF00 85 46 STA $46 = 05 A:05 X:02 Y:C7 P:65 SP:FB CYC: 43 SL:160 +EF02 A0 FF LDY #$FF A:05 X:02 Y:C7 P:65 SP:FB CYC: 52 SL:160 +EF04 20 7B FA JSR $FA7B A:05 X:02 Y:FF P:E5 SP:FB CYC: 58 SL:160 +FA7B 24 01 BIT $01 = FF A:05 X:02 Y:FF P:E5 SP:F9 CYC: 76 SL:160 +FA7D 18 CLC A:05 X:02 Y:FF P:E5 SP:F9 CYC: 85 SL:160 +FA7E A9 B3 LDA #$B3 A:05 X:02 Y:FF P:E4 SP:F9 CYC: 91 SL:160 +FA80 60 RTS A:B3 X:02 Y:FF P:E4 SP:F9 CYC: 97 SL:160 +EF07 13 45 *SLO ($45),Y = 0548 @ 0647 = A5 A:B3 X:02 Y:FF P:E4 SP:FB CYC:115 SL:160 +EF09 EA NOP A:FB X:02 Y:FF P:E5 SP:FB CYC:139 SL:160 +EF0A EA NOP A:FB X:02 Y:FF P:E5 SP:FB CYC:145 SL:160 +EF0B 08 PHP A:FB X:02 Y:FF P:E5 SP:FB CYC:151 SL:160 +EF0C 48 PHA A:FB X:02 Y:FF P:E5 SP:FA CYC:160 SL:160 +EF0D A0 C8 LDY #$C8 A:FB X:02 Y:FF P:E5 SP:F9 CYC:169 SL:160 +EF0F 68 PLA A:FB X:02 Y:C8 P:E5 SP:F9 CYC:175 SL:160 +EF10 28 PLP A:FB X:02 Y:C8 P:E5 SP:FA CYC:187 SL:160 +EF11 20 81 FA JSR $FA81 A:FB X:02 Y:C8 P:E5 SP:FB CYC:199 SL:160 +FA81 50 63 BVC $FAE6 A:FB X:02 Y:C8 P:E5 SP:F9 CYC:217 SL:160 +FA83 90 61 BCC $FAE6 A:FB X:02 Y:C8 P:E5 SP:F9 CYC:223 SL:160 +FA85 10 5F BPL $FAE6 A:FB X:02 Y:C8 P:E5 SP:F9 CYC:229 SL:160 +FA87 C9 FB CMP #$FB A:FB X:02 Y:C8 P:E5 SP:F9 CYC:235 SL:160 +FA89 D0 5B BNE $FAE6 A:FB X:02 Y:C8 P:67 SP:F9 CYC:241 SL:160 +FA8B 60 RTS A:FB X:02 Y:C8 P:67 SP:F9 CYC:247 SL:160 +EF14 AD 47 06 LDA $0647 = 4A A:FB X:02 Y:C8 P:67 SP:FB CYC:265 SL:160 +EF17 C9 4A CMP #$4A A:4A X:02 Y:C8 P:65 SP:FB CYC:277 SL:160 +EF19 F0 02 BEQ $EF1D A:4A X:02 Y:C8 P:67 SP:FB CYC:283 SL:160 +EF1D A0 FF LDY #$FF A:4A X:02 Y:C8 P:67 SP:FB CYC:292 SL:160 +EF1F A9 29 LDA #$29 A:4A X:02 Y:FF P:E5 SP:FB CYC:298 SL:160 +EF21 8D 47 06 STA $0647 = 4A A:29 X:02 Y:FF P:65 SP:FB CYC:304 SL:160 +EF24 20 8C FA JSR $FA8C A:29 X:02 Y:FF P:65 SP:FB CYC:316 SL:160 +FA8C B8 CLV A:29 X:02 Y:FF P:65 SP:F9 CYC:334 SL:160 +FA8D 18 CLC A:29 X:02 Y:FF P:25 SP:F9 CYC:340 SL:160 +FA8E A9 C3 LDA #$C3 A:29 X:02 Y:FF P:24 SP:F9 CYC: 5 SL:161 +FA90 60 RTS A:C3 X:02 Y:FF P:A4 SP:F9 CYC: 11 SL:161 +EF27 13 45 *SLO ($45),Y = 0548 @ 0647 = 29 A:C3 X:02 Y:FF P:A4 SP:FB CYC: 29 SL:161 +EF29 EA NOP A:D3 X:02 Y:FF P:A4 SP:FB CYC: 53 SL:161 +EF2A EA NOP A:D3 X:02 Y:FF P:A4 SP:FB CYC: 59 SL:161 +EF2B 08 PHP A:D3 X:02 Y:FF P:A4 SP:FB CYC: 65 SL:161 +EF2C 48 PHA A:D3 X:02 Y:FF P:A4 SP:FA CYC: 74 SL:161 +EF2D A0 C9 LDY #$C9 A:D3 X:02 Y:FF P:A4 SP:F9 CYC: 83 SL:161 +EF2F 68 PLA A:D3 X:02 Y:C9 P:A4 SP:F9 CYC: 89 SL:161 +EF30 28 PLP A:D3 X:02 Y:C9 P:A4 SP:FA CYC:101 SL:161 +EF31 20 91 FA JSR $FA91 A:D3 X:02 Y:C9 P:A4 SP:FB CYC:113 SL:161 +FA91 70 53 BVS $FAE6 A:D3 X:02 Y:C9 P:A4 SP:F9 CYC:131 SL:161 +FA93 F0 51 BEQ $FAE6 A:D3 X:02 Y:C9 P:A4 SP:F9 CYC:137 SL:161 +FA95 10 4F BPL $FAE6 A:D3 X:02 Y:C9 P:A4 SP:F9 CYC:143 SL:161 +FA97 B0 4D BCS $FAE6 A:D3 X:02 Y:C9 P:A4 SP:F9 CYC:149 SL:161 +FA99 C9 D3 CMP #$D3 A:D3 X:02 Y:C9 P:A4 SP:F9 CYC:155 SL:161 +FA9B D0 49 BNE $FAE6 A:D3 X:02 Y:C9 P:27 SP:F9 CYC:161 SL:161 +FA9D 60 RTS A:D3 X:02 Y:C9 P:27 SP:F9 CYC:167 SL:161 +EF34 AD 47 06 LDA $0647 = 52 A:D3 X:02 Y:C9 P:27 SP:FB CYC:185 SL:161 +EF37 C9 52 CMP #$52 A:52 X:02 Y:C9 P:25 SP:FB CYC:197 SL:161 +EF39 F0 02 BEQ $EF3D A:52 X:02 Y:C9 P:27 SP:FB CYC:203 SL:161 +EF3D A0 FF LDY #$FF A:52 X:02 Y:C9 P:27 SP:FB CYC:212 SL:161 +EF3F A9 37 LDA #$37 A:52 X:02 Y:FF P:A5 SP:FB CYC:218 SL:161 +EF41 8D 47 06 STA $0647 = 52 A:37 X:02 Y:FF P:25 SP:FB CYC:224 SL:161 +EF44 20 9E FA JSR $FA9E A:37 X:02 Y:FF P:25 SP:FB CYC:236 SL:161 +FA9E 24 01 BIT $01 = FF A:37 X:02 Y:FF P:25 SP:F9 CYC:254 SL:161 +FAA0 38 SEC A:37 X:02 Y:FF P:E5 SP:F9 CYC:263 SL:161 +FAA1 A9 10 LDA #$10 A:37 X:02 Y:FF P:E5 SP:F9 CYC:269 SL:161 +FAA3 60 RTS A:10 X:02 Y:FF P:65 SP:F9 CYC:275 SL:161 +EF47 13 45 *SLO ($45),Y = 0548 @ 0647 = 37 A:10 X:02 Y:FF P:65 SP:FB CYC:293 SL:161 +EF49 EA NOP A:7E X:02 Y:FF P:64 SP:FB CYC:317 SL:161 +EF4A EA NOP A:7E X:02 Y:FF P:64 SP:FB CYC:323 SL:161 +EF4B 08 PHP A:7E X:02 Y:FF P:64 SP:FB CYC:329 SL:161 +EF4C 48 PHA A:7E X:02 Y:FF P:64 SP:FA CYC:338 SL:161 +EF4D A0 CA LDY #$CA A:7E X:02 Y:FF P:64 SP:F9 CYC: 6 SL:162 +EF4F 68 PLA A:7E X:02 Y:CA P:E4 SP:F9 CYC: 12 SL:162 +EF50 28 PLP A:7E X:02 Y:CA P:64 SP:FA CYC: 24 SL:162 +EF51 20 A4 FA JSR $FAA4 A:7E X:02 Y:CA P:64 SP:FB CYC: 36 SL:162 +FAA4 50 40 BVC $FAE6 A:7E X:02 Y:CA P:64 SP:F9 CYC: 54 SL:162 +FAA6 F0 3E BEQ $FAE6 A:7E X:02 Y:CA P:64 SP:F9 CYC: 60 SL:162 +FAA8 30 3C BMI $FAE6 A:7E X:02 Y:CA P:64 SP:F9 CYC: 66 SL:162 +FAAA B0 3A BCS $FAE6 A:7E X:02 Y:CA P:64 SP:F9 CYC: 72 SL:162 +FAAC C9 7E CMP #$7E A:7E X:02 Y:CA P:64 SP:F9 CYC: 78 SL:162 +FAAE D0 36 BNE $FAE6 A:7E X:02 Y:CA P:67 SP:F9 CYC: 84 SL:162 +FAB0 60 RTS A:7E X:02 Y:CA P:67 SP:F9 CYC: 90 SL:162 +EF54 AD 47 06 LDA $0647 = 6E A:7E X:02 Y:CA P:67 SP:FB CYC:108 SL:162 +EF57 C9 6E CMP #$6E A:6E X:02 Y:CA P:65 SP:FB CYC:120 SL:162 +EF59 F0 02 BEQ $EF5D A:6E X:02 Y:CA P:67 SP:FB CYC:126 SL:162 +EF5D A0 CB LDY #$CB A:6E X:02 Y:CA P:67 SP:FB CYC:135 SL:162 +EF5F A2 FF LDX #$FF A:6E X:02 Y:CB P:E5 SP:FB CYC:141 SL:162 +EF61 A9 A5 LDA #$A5 A:6E X:FF Y:CB P:E5 SP:FB CYC:147 SL:162 +EF63 85 47 STA $47 = 6E A:A5 X:FF Y:CB P:E5 SP:FB CYC:153 SL:162 +EF65 20 7B FA JSR $FA7B A:A5 X:FF Y:CB P:E5 SP:FB CYC:162 SL:162 +FA7B 24 01 BIT $01 = FF A:A5 X:FF Y:CB P:E5 SP:F9 CYC:180 SL:162 +FA7D 18 CLC A:A5 X:FF Y:CB P:E5 SP:F9 CYC:189 SL:162 +FA7E A9 B3 LDA #$B3 A:A5 X:FF Y:CB P:E4 SP:F9 CYC:195 SL:162 +FA80 60 RTS A:B3 X:FF Y:CB P:E4 SP:F9 CYC:201 SL:162 +EF68 17 48 *SLO $48,X @ 47 = A5 A:B3 X:FF Y:CB P:E4 SP:FB CYC:219 SL:162 +EF6A EA NOP A:FB X:FF Y:CB P:E5 SP:FB CYC:237 SL:162 +EF6B EA NOP A:FB X:FF Y:CB P:E5 SP:FB CYC:243 SL:162 +EF6C EA NOP A:FB X:FF Y:CB P:E5 SP:FB CYC:249 SL:162 +EF6D EA NOP A:FB X:FF Y:CB P:E5 SP:FB CYC:255 SL:162 +EF6E 20 81 FA JSR $FA81 A:FB X:FF Y:CB P:E5 SP:FB CYC:261 SL:162 +FA81 50 63 BVC $FAE6 A:FB X:FF Y:CB P:E5 SP:F9 CYC:279 SL:162 +FA83 90 61 BCC $FAE6 A:FB X:FF Y:CB P:E5 SP:F9 CYC:285 SL:162 +FA85 10 5F BPL $FAE6 A:FB X:FF Y:CB P:E5 SP:F9 CYC:291 SL:162 +FA87 C9 FB CMP #$FB A:FB X:FF Y:CB P:E5 SP:F9 CYC:297 SL:162 +FA89 D0 5B BNE $FAE6 A:FB X:FF Y:CB P:67 SP:F9 CYC:303 SL:162 +FA8B 60 RTS A:FB X:FF Y:CB P:67 SP:F9 CYC:309 SL:162 +EF71 A5 47 LDA $47 = 4A A:FB X:FF Y:CB P:67 SP:FB CYC:327 SL:162 +EF73 C9 4A CMP #$4A A:4A X:FF Y:CB P:65 SP:FB CYC:336 SL:162 +EF75 F0 02 BEQ $EF79 A:4A X:FF Y:CB P:67 SP:FB CYC: 1 SL:163 +EF79 C8 INY A:4A X:FF Y:CB P:67 SP:FB CYC: 10 SL:163 +EF7A A9 29 LDA #$29 A:4A X:FF Y:CC P:E5 SP:FB CYC: 16 SL:163 +EF7C 85 47 STA $47 = 4A A:29 X:FF Y:CC P:65 SP:FB CYC: 22 SL:163 +EF7E 20 8C FA JSR $FA8C A:29 X:FF Y:CC P:65 SP:FB CYC: 31 SL:163 +FA8C B8 CLV A:29 X:FF Y:CC P:65 SP:F9 CYC: 49 SL:163 +FA8D 18 CLC A:29 X:FF Y:CC P:25 SP:F9 CYC: 55 SL:163 +FA8E A9 C3 LDA #$C3 A:29 X:FF Y:CC P:24 SP:F9 CYC: 61 SL:163 +FA90 60 RTS A:C3 X:FF Y:CC P:A4 SP:F9 CYC: 67 SL:163 +EF81 17 48 *SLO $48,X @ 47 = 29 A:C3 X:FF Y:CC P:A4 SP:FB CYC: 85 SL:163 +EF83 EA NOP A:D3 X:FF Y:CC P:A4 SP:FB CYC:103 SL:163 +EF84 EA NOP A:D3 X:FF Y:CC P:A4 SP:FB CYC:109 SL:163 +EF85 EA NOP A:D3 X:FF Y:CC P:A4 SP:FB CYC:115 SL:163 +EF86 EA NOP A:D3 X:FF Y:CC P:A4 SP:FB CYC:121 SL:163 +EF87 20 91 FA JSR $FA91 A:D3 X:FF Y:CC P:A4 SP:FB CYC:127 SL:163 +FA91 70 53 BVS $FAE6 A:D3 X:FF Y:CC P:A4 SP:F9 CYC:145 SL:163 +FA93 F0 51 BEQ $FAE6 A:D3 X:FF Y:CC P:A4 SP:F9 CYC:151 SL:163 +FA95 10 4F BPL $FAE6 A:D3 X:FF Y:CC P:A4 SP:F9 CYC:157 SL:163 +FA97 B0 4D BCS $FAE6 A:D3 X:FF Y:CC P:A4 SP:F9 CYC:163 SL:163 +FA99 C9 D3 CMP #$D3 A:D3 X:FF Y:CC P:A4 SP:F9 CYC:169 SL:163 +FA9B D0 49 BNE $FAE6 A:D3 X:FF Y:CC P:27 SP:F9 CYC:175 SL:163 +FA9D 60 RTS A:D3 X:FF Y:CC P:27 SP:F9 CYC:181 SL:163 +EF8A A5 47 LDA $47 = 52 A:D3 X:FF Y:CC P:27 SP:FB CYC:199 SL:163 +EF8C C9 52 CMP #$52 A:52 X:FF Y:CC P:25 SP:FB CYC:208 SL:163 +EF8E F0 02 BEQ $EF92 A:52 X:FF Y:CC P:27 SP:FB CYC:214 SL:163 +EF92 C8 INY A:52 X:FF Y:CC P:27 SP:FB CYC:223 SL:163 +EF93 A9 37 LDA #$37 A:52 X:FF Y:CD P:A5 SP:FB CYC:229 SL:163 +EF95 85 47 STA $47 = 52 A:37 X:FF Y:CD P:25 SP:FB CYC:235 SL:163 +EF97 20 9E FA JSR $FA9E A:37 X:FF Y:CD P:25 SP:FB CYC:244 SL:163 +FA9E 24 01 BIT $01 = FF A:37 X:FF Y:CD P:25 SP:F9 CYC:262 SL:163 +FAA0 38 SEC A:37 X:FF Y:CD P:E5 SP:F9 CYC:271 SL:163 +FAA1 A9 10 LDA #$10 A:37 X:FF Y:CD P:E5 SP:F9 CYC:277 SL:163 +FAA3 60 RTS A:10 X:FF Y:CD P:65 SP:F9 CYC:283 SL:163 +EF9A 17 48 *SLO $48,X @ 47 = 37 A:10 X:FF Y:CD P:65 SP:FB CYC:301 SL:163 +EF9C EA NOP A:7E X:FF Y:CD P:64 SP:FB CYC:319 SL:163 +EF9D EA NOP A:7E X:FF Y:CD P:64 SP:FB CYC:325 SL:163 +EF9E EA NOP A:7E X:FF Y:CD P:64 SP:FB CYC:331 SL:163 +EF9F EA NOP A:7E X:FF Y:CD P:64 SP:FB CYC:337 SL:163 +EFA0 20 A4 FA JSR $FAA4 A:7E X:FF Y:CD P:64 SP:FB CYC: 2 SL:164 +FAA4 50 40 BVC $FAE6 A:7E X:FF Y:CD P:64 SP:F9 CYC: 20 SL:164 +FAA6 F0 3E BEQ $FAE6 A:7E X:FF Y:CD P:64 SP:F9 CYC: 26 SL:164 +FAA8 30 3C BMI $FAE6 A:7E X:FF Y:CD P:64 SP:F9 CYC: 32 SL:164 +FAAA B0 3A BCS $FAE6 A:7E X:FF Y:CD P:64 SP:F9 CYC: 38 SL:164 +FAAC C9 7E CMP #$7E A:7E X:FF Y:CD P:64 SP:F9 CYC: 44 SL:164 +FAAE D0 36 BNE $FAE6 A:7E X:FF Y:CD P:67 SP:F9 CYC: 50 SL:164 +FAB0 60 RTS A:7E X:FF Y:CD P:67 SP:F9 CYC: 56 SL:164 +EFA3 A5 47 LDA $47 = 6E A:7E X:FF Y:CD P:67 SP:FB CYC: 74 SL:164 +EFA5 C9 6E CMP #$6E A:6E X:FF Y:CD P:65 SP:FB CYC: 83 SL:164 +EFA7 F0 02 BEQ $EFAB A:6E X:FF Y:CD P:67 SP:FB CYC: 89 SL:164 +EFAB A9 A5 LDA #$A5 A:6E X:FF Y:CD P:67 SP:FB CYC: 98 SL:164 +EFAD 8D 47 06 STA $0647 = 6E A:A5 X:FF Y:CD P:E5 SP:FB CYC:104 SL:164 +EFB0 A0 FF LDY #$FF A:A5 X:FF Y:CD P:E5 SP:FB CYC:116 SL:164 +EFB2 20 7B FA JSR $FA7B A:A5 X:FF Y:FF P:E5 SP:FB CYC:122 SL:164 +FA7B 24 01 BIT $01 = FF A:A5 X:FF Y:FF P:E5 SP:F9 CYC:140 SL:164 +FA7D 18 CLC A:A5 X:FF Y:FF P:E5 SP:F9 CYC:149 SL:164 +FA7E A9 B3 LDA #$B3 A:A5 X:FF Y:FF P:E4 SP:F9 CYC:155 SL:164 +FA80 60 RTS A:B3 X:FF Y:FF P:E4 SP:F9 CYC:161 SL:164 +EFB5 1B 48 05 *SLO $0548,Y @ 0647 = A5 A:B3 X:FF Y:FF P:E4 SP:FB CYC:179 SL:164 +EFB8 EA NOP A:FB X:FF Y:FF P:E5 SP:FB CYC:200 SL:164 +EFB9 EA NOP A:FB X:FF Y:FF P:E5 SP:FB CYC:206 SL:164 +EFBA 08 PHP A:FB X:FF Y:FF P:E5 SP:FB CYC:212 SL:164 +EFBB 48 PHA A:FB X:FF Y:FF P:E5 SP:FA CYC:221 SL:164 +EFBC A0 CE LDY #$CE A:FB X:FF Y:FF P:E5 SP:F9 CYC:230 SL:164 +EFBE 68 PLA A:FB X:FF Y:CE P:E5 SP:F9 CYC:236 SL:164 +EFBF 28 PLP A:FB X:FF Y:CE P:E5 SP:FA CYC:248 SL:164 +EFC0 20 81 FA JSR $FA81 A:FB X:FF Y:CE P:E5 SP:FB CYC:260 SL:164 +FA81 50 63 BVC $FAE6 A:FB X:FF Y:CE P:E5 SP:F9 CYC:278 SL:164 +FA83 90 61 BCC $FAE6 A:FB X:FF Y:CE P:E5 SP:F9 CYC:284 SL:164 +FA85 10 5F BPL $FAE6 A:FB X:FF Y:CE P:E5 SP:F9 CYC:290 SL:164 +FA87 C9 FB CMP #$FB A:FB X:FF Y:CE P:E5 SP:F9 CYC:296 SL:164 +FA89 D0 5B BNE $FAE6 A:FB X:FF Y:CE P:67 SP:F9 CYC:302 SL:164 +FA8B 60 RTS A:FB X:FF Y:CE P:67 SP:F9 CYC:308 SL:164 +EFC3 AD 47 06 LDA $0647 = 4A A:FB X:FF Y:CE P:67 SP:FB CYC:326 SL:164 +EFC6 C9 4A CMP #$4A A:4A X:FF Y:CE P:65 SP:FB CYC:338 SL:164 +EFC8 F0 02 BEQ $EFCC A:4A X:FF Y:CE P:67 SP:FB CYC: 3 SL:165 +EFCC A0 FF LDY #$FF A:4A X:FF Y:CE P:67 SP:FB CYC: 12 SL:165 +EFCE A9 29 LDA #$29 A:4A X:FF Y:FF P:E5 SP:FB CYC: 18 SL:165 +EFD0 8D 47 06 STA $0647 = 4A A:29 X:FF Y:FF P:65 SP:FB CYC: 24 SL:165 +EFD3 20 8C FA JSR $FA8C A:29 X:FF Y:FF P:65 SP:FB CYC: 36 SL:165 +FA8C B8 CLV A:29 X:FF Y:FF P:65 SP:F9 CYC: 54 SL:165 +FA8D 18 CLC A:29 X:FF Y:FF P:25 SP:F9 CYC: 60 SL:165 +FA8E A9 C3 LDA #$C3 A:29 X:FF Y:FF P:24 SP:F9 CYC: 66 SL:165 +FA90 60 RTS A:C3 X:FF Y:FF P:A4 SP:F9 CYC: 72 SL:165 +EFD6 1B 48 05 *SLO $0548,Y @ 0647 = 29 A:C3 X:FF Y:FF P:A4 SP:FB CYC: 90 SL:165 +EFD9 EA NOP A:D3 X:FF Y:FF P:A4 SP:FB CYC:111 SL:165 +EFDA EA NOP A:D3 X:FF Y:FF P:A4 SP:FB CYC:117 SL:165 +EFDB 08 PHP A:D3 X:FF Y:FF P:A4 SP:FB CYC:123 SL:165 +EFDC 48 PHA A:D3 X:FF Y:FF P:A4 SP:FA CYC:132 SL:165 +EFDD A0 CF LDY #$CF A:D3 X:FF Y:FF P:A4 SP:F9 CYC:141 SL:165 +EFDF 68 PLA A:D3 X:FF Y:CF P:A4 SP:F9 CYC:147 SL:165 +EFE0 28 PLP A:D3 X:FF Y:CF P:A4 SP:FA CYC:159 SL:165 +EFE1 20 91 FA JSR $FA91 A:D3 X:FF Y:CF P:A4 SP:FB CYC:171 SL:165 +FA91 70 53 BVS $FAE6 A:D3 X:FF Y:CF P:A4 SP:F9 CYC:189 SL:165 +FA93 F0 51 BEQ $FAE6 A:D3 X:FF Y:CF P:A4 SP:F9 CYC:195 SL:165 +FA95 10 4F BPL $FAE6 A:D3 X:FF Y:CF P:A4 SP:F9 CYC:201 SL:165 +FA97 B0 4D BCS $FAE6 A:D3 X:FF Y:CF P:A4 SP:F9 CYC:207 SL:165 +FA99 C9 D3 CMP #$D3 A:D3 X:FF Y:CF P:A4 SP:F9 CYC:213 SL:165 +FA9B D0 49 BNE $FAE6 A:D3 X:FF Y:CF P:27 SP:F9 CYC:219 SL:165 +FA9D 60 RTS A:D3 X:FF Y:CF P:27 SP:F9 CYC:225 SL:165 +EFE4 AD 47 06 LDA $0647 = 52 A:D3 X:FF Y:CF P:27 SP:FB CYC:243 SL:165 +EFE7 C9 52 CMP #$52 A:52 X:FF Y:CF P:25 SP:FB CYC:255 SL:165 +EFE9 F0 02 BEQ $EFED A:52 X:FF Y:CF P:27 SP:FB CYC:261 SL:165 +EFED A0 FF LDY #$FF A:52 X:FF Y:CF P:27 SP:FB CYC:270 SL:165 +EFEF A9 37 LDA #$37 A:52 X:FF Y:FF P:A5 SP:FB CYC:276 SL:165 +EFF1 8D 47 06 STA $0647 = 52 A:37 X:FF Y:FF P:25 SP:FB CYC:282 SL:165 +EFF4 20 9E FA JSR $FA9E A:37 X:FF Y:FF P:25 SP:FB CYC:294 SL:165 +FA9E 24 01 BIT $01 = FF A:37 X:FF Y:FF P:25 SP:F9 CYC:312 SL:165 +FAA0 38 SEC A:37 X:FF Y:FF P:E5 SP:F9 CYC:321 SL:165 +FAA1 A9 10 LDA #$10 A:37 X:FF Y:FF P:E5 SP:F9 CYC:327 SL:165 +FAA3 60 RTS A:10 X:FF Y:FF P:65 SP:F9 CYC:333 SL:165 +EFF7 1B 48 05 *SLO $0548,Y @ 0647 = 37 A:10 X:FF Y:FF P:65 SP:FB CYC: 10 SL:166 +EFFA EA NOP A:7E X:FF Y:FF P:64 SP:FB CYC: 31 SL:166 +EFFB EA NOP A:7E X:FF Y:FF P:64 SP:FB CYC: 37 SL:166 +EFFC 08 PHP A:7E X:FF Y:FF P:64 SP:FB CYC: 43 SL:166 +EFFD 48 PHA A:7E X:FF Y:FF P:64 SP:FA CYC: 52 SL:166 +EFFE A0 D0 LDY #$D0 A:7E X:FF Y:FF P:64 SP:F9 CYC: 61 SL:166 +F000 68 PLA A:7E X:FF Y:D0 P:E4 SP:F9 CYC: 67 SL:166 +F001 28 PLP A:7E X:FF Y:D0 P:64 SP:FA CYC: 79 SL:166 +F002 20 A4 FA JSR $FAA4 A:7E X:FF Y:D0 P:64 SP:FB CYC: 91 SL:166 +FAA4 50 40 BVC $FAE6 A:7E X:FF Y:D0 P:64 SP:F9 CYC:109 SL:166 +FAA6 F0 3E BEQ $FAE6 A:7E X:FF Y:D0 P:64 SP:F9 CYC:115 SL:166 +FAA8 30 3C BMI $FAE6 A:7E X:FF Y:D0 P:64 SP:F9 CYC:121 SL:166 +FAAA B0 3A BCS $FAE6 A:7E X:FF Y:D0 P:64 SP:F9 CYC:127 SL:166 +FAAC C9 7E CMP #$7E A:7E X:FF Y:D0 P:64 SP:F9 CYC:133 SL:166 +FAAE D0 36 BNE $FAE6 A:7E X:FF Y:D0 P:67 SP:F9 CYC:139 SL:166 +FAB0 60 RTS A:7E X:FF Y:D0 P:67 SP:F9 CYC:145 SL:166 +F005 AD 47 06 LDA $0647 = 6E A:7E X:FF Y:D0 P:67 SP:FB CYC:163 SL:166 +F008 C9 6E CMP #$6E A:6E X:FF Y:D0 P:65 SP:FB CYC:175 SL:166 +F00A F0 02 BEQ $F00E A:6E X:FF Y:D0 P:67 SP:FB CYC:181 SL:166 +F00E A0 D1 LDY #$D1 A:6E X:FF Y:D0 P:67 SP:FB CYC:190 SL:166 +F010 A2 FF LDX #$FF A:6E X:FF Y:D1 P:E5 SP:FB CYC:196 SL:166 +F012 A9 A5 LDA #$A5 A:6E X:FF Y:D1 P:E5 SP:FB CYC:202 SL:166 +F014 8D 47 06 STA $0647 = 6E A:A5 X:FF Y:D1 P:E5 SP:FB CYC:208 SL:166 +F017 20 7B FA JSR $FA7B A:A5 X:FF Y:D1 P:E5 SP:FB CYC:220 SL:166 +FA7B 24 01 BIT $01 = FF A:A5 X:FF Y:D1 P:E5 SP:F9 CYC:238 SL:166 +FA7D 18 CLC A:A5 X:FF Y:D1 P:E5 SP:F9 CYC:247 SL:166 +FA7E A9 B3 LDA #$B3 A:A5 X:FF Y:D1 P:E4 SP:F9 CYC:253 SL:166 +FA80 60 RTS A:B3 X:FF Y:D1 P:E4 SP:F9 CYC:259 SL:166 +F01A 1F 48 05 *SLO $0548,X @ 0647 = A5 A:B3 X:FF Y:D1 P:E4 SP:FB CYC:277 SL:166 +F01D EA NOP A:FB X:FF Y:D1 P:E5 SP:FB CYC:298 SL:166 +F01E EA NOP A:FB X:FF Y:D1 P:E5 SP:FB CYC:304 SL:166 +F01F EA NOP A:FB X:FF Y:D1 P:E5 SP:FB CYC:310 SL:166 +F020 EA NOP A:FB X:FF Y:D1 P:E5 SP:FB CYC:316 SL:166 +F021 20 81 FA JSR $FA81 A:FB X:FF Y:D1 P:E5 SP:FB CYC:322 SL:166 +FA81 50 63 BVC $FAE6 A:FB X:FF Y:D1 P:E5 SP:F9 CYC:340 SL:166 +FA83 90 61 BCC $FAE6 A:FB X:FF Y:D1 P:E5 SP:F9 CYC: 5 SL:167 +FA85 10 5F BPL $FAE6 A:FB X:FF Y:D1 P:E5 SP:F9 CYC: 11 SL:167 +FA87 C9 FB CMP #$FB A:FB X:FF Y:D1 P:E5 SP:F9 CYC: 17 SL:167 +FA89 D0 5B BNE $FAE6 A:FB X:FF Y:D1 P:67 SP:F9 CYC: 23 SL:167 +FA8B 60 RTS A:FB X:FF Y:D1 P:67 SP:F9 CYC: 29 SL:167 +F024 AD 47 06 LDA $0647 = 4A A:FB X:FF Y:D1 P:67 SP:FB CYC: 47 SL:167 +F027 C9 4A CMP #$4A A:4A X:FF Y:D1 P:65 SP:FB CYC: 59 SL:167 +F029 F0 02 BEQ $F02D A:4A X:FF Y:D1 P:67 SP:FB CYC: 65 SL:167 +F02D C8 INY A:4A X:FF Y:D1 P:67 SP:FB CYC: 74 SL:167 +F02E A9 29 LDA #$29 A:4A X:FF Y:D2 P:E5 SP:FB CYC: 80 SL:167 +F030 8D 47 06 STA $0647 = 4A A:29 X:FF Y:D2 P:65 SP:FB CYC: 86 SL:167 +F033 20 8C FA JSR $FA8C A:29 X:FF Y:D2 P:65 SP:FB CYC: 98 SL:167 +FA8C B8 CLV A:29 X:FF Y:D2 P:65 SP:F9 CYC:116 SL:167 +FA8D 18 CLC A:29 X:FF Y:D2 P:25 SP:F9 CYC:122 SL:167 +FA8E A9 C3 LDA #$C3 A:29 X:FF Y:D2 P:24 SP:F9 CYC:128 SL:167 +FA90 60 RTS A:C3 X:FF Y:D2 P:A4 SP:F9 CYC:134 SL:167 +F036 1F 48 05 *SLO $0548,X @ 0647 = 29 A:C3 X:FF Y:D2 P:A4 SP:FB CYC:152 SL:167 +F039 EA NOP A:D3 X:FF Y:D2 P:A4 SP:FB CYC:173 SL:167 +F03A EA NOP A:D3 X:FF Y:D2 P:A4 SP:FB CYC:179 SL:167 +F03B EA NOP A:D3 X:FF Y:D2 P:A4 SP:FB CYC:185 SL:167 +F03C EA NOP A:D3 X:FF Y:D2 P:A4 SP:FB CYC:191 SL:167 +F03D 20 91 FA JSR $FA91 A:D3 X:FF Y:D2 P:A4 SP:FB CYC:197 SL:167 +FA91 70 53 BVS $FAE6 A:D3 X:FF Y:D2 P:A4 SP:F9 CYC:215 SL:167 +FA93 F0 51 BEQ $FAE6 A:D3 X:FF Y:D2 P:A4 SP:F9 CYC:221 SL:167 +FA95 10 4F BPL $FAE6 A:D3 X:FF Y:D2 P:A4 SP:F9 CYC:227 SL:167 +FA97 B0 4D BCS $FAE6 A:D3 X:FF Y:D2 P:A4 SP:F9 CYC:233 SL:167 +FA99 C9 D3 CMP #$D3 A:D3 X:FF Y:D2 P:A4 SP:F9 CYC:239 SL:167 +FA9B D0 49 BNE $FAE6 A:D3 X:FF Y:D2 P:27 SP:F9 CYC:245 SL:167 +FA9D 60 RTS A:D3 X:FF Y:D2 P:27 SP:F9 CYC:251 SL:167 +F040 AD 47 06 LDA $0647 = 52 A:D3 X:FF Y:D2 P:27 SP:FB CYC:269 SL:167 +F043 C9 52 CMP #$52 A:52 X:FF Y:D2 P:25 SP:FB CYC:281 SL:167 +F045 F0 02 BEQ $F049 A:52 X:FF Y:D2 P:27 SP:FB CYC:287 SL:167 +F049 C8 INY A:52 X:FF Y:D2 P:27 SP:FB CYC:296 SL:167 +F04A A9 37 LDA #$37 A:52 X:FF Y:D3 P:A5 SP:FB CYC:302 SL:167 +F04C 8D 47 06 STA $0647 = 52 A:37 X:FF Y:D3 P:25 SP:FB CYC:308 SL:167 +F04F 20 9E FA JSR $FA9E A:37 X:FF Y:D3 P:25 SP:FB CYC:320 SL:167 +FA9E 24 01 BIT $01 = FF A:37 X:FF Y:D3 P:25 SP:F9 CYC:338 SL:167 +FAA0 38 SEC A:37 X:FF Y:D3 P:E5 SP:F9 CYC: 6 SL:168 +FAA1 A9 10 LDA #$10 A:37 X:FF Y:D3 P:E5 SP:F9 CYC: 12 SL:168 +FAA3 60 RTS A:10 X:FF Y:D3 P:65 SP:F9 CYC: 18 SL:168 +F052 1F 48 05 *SLO $0548,X @ 0647 = 37 A:10 X:FF Y:D3 P:65 SP:FB CYC: 36 SL:168 +F055 EA NOP A:7E X:FF Y:D3 P:64 SP:FB CYC: 57 SL:168 +F056 EA NOP A:7E X:FF Y:D3 P:64 SP:FB CYC: 63 SL:168 +F057 EA NOP A:7E X:FF Y:D3 P:64 SP:FB CYC: 69 SL:168 +F058 EA NOP A:7E X:FF Y:D3 P:64 SP:FB CYC: 75 SL:168 +F059 20 A4 FA JSR $FAA4 A:7E X:FF Y:D3 P:64 SP:FB CYC: 81 SL:168 +FAA4 50 40 BVC $FAE6 A:7E X:FF Y:D3 P:64 SP:F9 CYC: 99 SL:168 +FAA6 F0 3E BEQ $FAE6 A:7E X:FF Y:D3 P:64 SP:F9 CYC:105 SL:168 +FAA8 30 3C BMI $FAE6 A:7E X:FF Y:D3 P:64 SP:F9 CYC:111 SL:168 +FAAA B0 3A BCS $FAE6 A:7E X:FF Y:D3 P:64 SP:F9 CYC:117 SL:168 +FAAC C9 7E CMP #$7E A:7E X:FF Y:D3 P:64 SP:F9 CYC:123 SL:168 +FAAE D0 36 BNE $FAE6 A:7E X:FF Y:D3 P:67 SP:F9 CYC:129 SL:168 +FAB0 60 RTS A:7E X:FF Y:D3 P:67 SP:F9 CYC:135 SL:168 +F05C AD 47 06 LDA $0647 = 6E A:7E X:FF Y:D3 P:67 SP:FB CYC:153 SL:168 +F05F C9 6E CMP #$6E A:6E X:FF Y:D3 P:65 SP:FB CYC:165 SL:168 +F061 F0 02 BEQ $F065 A:6E X:FF Y:D3 P:67 SP:FB CYC:171 SL:168 +F065 60 RTS A:6E X:FF Y:D3 P:67 SP:FB CYC:180 SL:168 +C644 20 66 F0 JSR $F066 A:6E X:FF Y:D3 P:67 SP:FD CYC:198 SL:168 +F066 A9 FF LDA #$FF A:6E X:FF Y:D3 P:67 SP:FB CYC:216 SL:168 +F068 85 01 STA $01 = FF A:FF X:FF Y:D3 P:E5 SP:FB CYC:222 SL:168 +F06A A0 D4 LDY #$D4 A:FF X:FF Y:D3 P:E5 SP:FB CYC:231 SL:168 +F06C A2 02 LDX #$02 A:FF X:FF Y:D4 P:E5 SP:FB CYC:237 SL:168 +F06E A9 47 LDA #$47 A:FF X:02 Y:D4 P:65 SP:FB CYC:243 SL:168 +F070 85 47 STA $47 = 6E A:47 X:02 Y:D4 P:65 SP:FB CYC:249 SL:168 +F072 A9 06 LDA #$06 A:47 X:02 Y:D4 P:65 SP:FB CYC:258 SL:168 +F074 85 48 STA $48 = 06 A:06 X:02 Y:D4 P:65 SP:FB CYC:264 SL:168 +F076 A9 A5 LDA #$A5 A:06 X:02 Y:D4 P:65 SP:FB CYC:273 SL:168 +F078 8D 47 06 STA $0647 = 6E A:A5 X:02 Y:D4 P:E5 SP:FB CYC:279 SL:168 +F07B 20 53 FB JSR $FB53 A:A5 X:02 Y:D4 P:E5 SP:FB CYC:291 SL:168 +FB53 24 01 BIT $01 = FF A:A5 X:02 Y:D4 P:E5 SP:F9 CYC:309 SL:168 +FB55 18 CLC A:A5 X:02 Y:D4 P:E5 SP:F9 CYC:318 SL:168 +FB56 A9 B3 LDA #$B3 A:A5 X:02 Y:D4 P:E4 SP:F9 CYC:324 SL:168 +FB58 60 RTS A:B3 X:02 Y:D4 P:E4 SP:F9 CYC:330 SL:168 +F07E 23 45 *RLA ($45,X) @ 47 = 0647 = A5 A:B3 X:02 Y:D4 P:E4 SP:FB CYC: 7 SL:169 +F080 EA NOP A:02 X:02 Y:D4 P:65 SP:FB CYC: 31 SL:169 +F081 EA NOP A:02 X:02 Y:D4 P:65 SP:FB CYC: 37 SL:169 +F082 EA NOP A:02 X:02 Y:D4 P:65 SP:FB CYC: 43 SL:169 +F083 EA NOP A:02 X:02 Y:D4 P:65 SP:FB CYC: 49 SL:169 +F084 20 59 FB JSR $FB59 A:02 X:02 Y:D4 P:65 SP:FB CYC: 55 SL:169 +FB59 50 1A BVC $FB75 A:02 X:02 Y:D4 P:65 SP:F9 CYC: 73 SL:169 +FB5B 90 18 BCC $FB75 A:02 X:02 Y:D4 P:65 SP:F9 CYC: 79 SL:169 +FB5D 30 16 BMI $FB75 A:02 X:02 Y:D4 P:65 SP:F9 CYC: 85 SL:169 +FB5F C9 02 CMP #$02 A:02 X:02 Y:D4 P:65 SP:F9 CYC: 91 SL:169 +FB61 D0 12 BNE $FB75 A:02 X:02 Y:D4 P:67 SP:F9 CYC: 97 SL:169 +FB63 60 RTS A:02 X:02 Y:D4 P:67 SP:F9 CYC:103 SL:169 +F087 AD 47 06 LDA $0647 = 4A A:02 X:02 Y:D4 P:67 SP:FB CYC:121 SL:169 +F08A C9 4A CMP #$4A A:4A X:02 Y:D4 P:65 SP:FB CYC:133 SL:169 +F08C F0 02 BEQ $F090 A:4A X:02 Y:D4 P:67 SP:FB CYC:139 SL:169 +F090 C8 INY A:4A X:02 Y:D4 P:67 SP:FB CYC:148 SL:169 +F091 A9 29 LDA #$29 A:4A X:02 Y:D5 P:E5 SP:FB CYC:154 SL:169 +F093 8D 47 06 STA $0647 = 4A A:29 X:02 Y:D5 P:65 SP:FB CYC:160 SL:169 +F096 20 64 FB JSR $FB64 A:29 X:02 Y:D5 P:65 SP:FB CYC:172 SL:169 +FB64 B8 CLV A:29 X:02 Y:D5 P:65 SP:F9 CYC:190 SL:169 +FB65 18 CLC A:29 X:02 Y:D5 P:25 SP:F9 CYC:196 SL:169 +FB66 A9 42 LDA #$42 A:29 X:02 Y:D5 P:24 SP:F9 CYC:202 SL:169 +FB68 60 RTS A:42 X:02 Y:D5 P:24 SP:F9 CYC:208 SL:169 +F099 23 45 *RLA ($45,X) @ 47 = 0647 = 29 A:42 X:02 Y:D5 P:24 SP:FB CYC:226 SL:169 +F09B EA NOP A:42 X:02 Y:D5 P:24 SP:FB CYC:250 SL:169 +F09C EA NOP A:42 X:02 Y:D5 P:24 SP:FB CYC:256 SL:169 +F09D EA NOP A:42 X:02 Y:D5 P:24 SP:FB CYC:262 SL:169 +F09E EA NOP A:42 X:02 Y:D5 P:24 SP:FB CYC:268 SL:169 +F09F 20 69 FB JSR $FB69 A:42 X:02 Y:D5 P:24 SP:FB CYC:274 SL:169 +FB69 70 0A BVS $FB75 A:42 X:02 Y:D5 P:24 SP:F9 CYC:292 SL:169 +FB6B F0 08 BEQ $FB75 A:42 X:02 Y:D5 P:24 SP:F9 CYC:298 SL:169 +FB6D 30 06 BMI $FB75 A:42 X:02 Y:D5 P:24 SP:F9 CYC:304 SL:169 +FB6F B0 04 BCS $FB75 A:42 X:02 Y:D5 P:24 SP:F9 CYC:310 SL:169 +FB71 C9 42 CMP #$42 A:42 X:02 Y:D5 P:24 SP:F9 CYC:316 SL:169 +FB73 F0 02 BEQ $FB77 A:42 X:02 Y:D5 P:27 SP:F9 CYC:322 SL:169 +FB77 60 RTS A:42 X:02 Y:D5 P:27 SP:F9 CYC:331 SL:169 +F0A2 AD 47 06 LDA $0647 = 52 A:42 X:02 Y:D5 P:27 SP:FB CYC: 8 SL:170 +F0A5 C9 52 CMP #$52 A:52 X:02 Y:D5 P:25 SP:FB CYC: 20 SL:170 +F0A7 F0 02 BEQ $F0AB A:52 X:02 Y:D5 P:27 SP:FB CYC: 26 SL:170 +F0AB C8 INY A:52 X:02 Y:D5 P:27 SP:FB CYC: 35 SL:170 +F0AC A9 37 LDA #$37 A:52 X:02 Y:D6 P:A5 SP:FB CYC: 41 SL:170 +F0AE 8D 47 06 STA $0647 = 52 A:37 X:02 Y:D6 P:25 SP:FB CYC: 47 SL:170 +F0B1 20 68 FA JSR $FA68 A:37 X:02 Y:D6 P:25 SP:FB CYC: 59 SL:170 +FA68 24 01 BIT $01 = FF A:37 X:02 Y:D6 P:25 SP:F9 CYC: 77 SL:170 +FA6A 38 SEC A:37 X:02 Y:D6 P:E5 SP:F9 CYC: 86 SL:170 +FA6B A9 75 LDA #$75 A:37 X:02 Y:D6 P:E5 SP:F9 CYC: 92 SL:170 +FA6D 60 RTS A:75 X:02 Y:D6 P:65 SP:F9 CYC: 98 SL:170 +F0B4 23 45 *RLA ($45,X) @ 47 = 0647 = 37 A:75 X:02 Y:D6 P:65 SP:FB CYC:116 SL:170 +F0B6 EA NOP A:65 X:02 Y:D6 P:64 SP:FB CYC:140 SL:170 +F0B7 EA NOP A:65 X:02 Y:D6 P:64 SP:FB CYC:146 SL:170 +F0B8 EA NOP A:65 X:02 Y:D6 P:64 SP:FB CYC:152 SL:170 +F0B9 EA NOP A:65 X:02 Y:D6 P:64 SP:FB CYC:158 SL:170 +F0BA 20 6E FA JSR $FA6E A:65 X:02 Y:D6 P:64 SP:FB CYC:164 SL:170 +FA6E 50 76 BVC $FAE6 A:65 X:02 Y:D6 P:64 SP:F9 CYC:182 SL:170 +FA70 F0 74 BEQ $FAE6 A:65 X:02 Y:D6 P:64 SP:F9 CYC:188 SL:170 +FA72 30 72 BMI $FAE6 A:65 X:02 Y:D6 P:64 SP:F9 CYC:194 SL:170 +FA74 B0 70 BCS $FAE6 A:65 X:02 Y:D6 P:64 SP:F9 CYC:200 SL:170 +FA76 C9 65 CMP #$65 A:65 X:02 Y:D6 P:64 SP:F9 CYC:206 SL:170 +FA78 D0 6C BNE $FAE6 A:65 X:02 Y:D6 P:67 SP:F9 CYC:212 SL:170 +FA7A 60 RTS A:65 X:02 Y:D6 P:67 SP:F9 CYC:218 SL:170 +F0BD AD 47 06 LDA $0647 = 6F A:65 X:02 Y:D6 P:67 SP:FB CYC:236 SL:170 +F0C0 C9 6F CMP #$6F A:6F X:02 Y:D6 P:65 SP:FB CYC:248 SL:170 +F0C2 F0 02 BEQ $F0C6 A:6F X:02 Y:D6 P:67 SP:FB CYC:254 SL:170 +F0C6 C8 INY A:6F X:02 Y:D6 P:67 SP:FB CYC:263 SL:170 +F0C7 A9 A5 LDA #$A5 A:6F X:02 Y:D7 P:E5 SP:FB CYC:269 SL:170 +F0C9 85 47 STA $47 = 47 A:A5 X:02 Y:D7 P:E5 SP:FB CYC:275 SL:170 +F0CB 20 53 FB JSR $FB53 A:A5 X:02 Y:D7 P:E5 SP:FB CYC:284 SL:170 +FB53 24 01 BIT $01 = FF A:A5 X:02 Y:D7 P:E5 SP:F9 CYC:302 SL:170 +FB55 18 CLC A:A5 X:02 Y:D7 P:E5 SP:F9 CYC:311 SL:170 +FB56 A9 B3 LDA #$B3 A:A5 X:02 Y:D7 P:E4 SP:F9 CYC:317 SL:170 +FB58 60 RTS A:B3 X:02 Y:D7 P:E4 SP:F9 CYC:323 SL:170 +F0CE 27 47 *RLA $47 = A5 A:B3 X:02 Y:D7 P:E4 SP:FB CYC: 0 SL:171 +F0D0 EA NOP A:02 X:02 Y:D7 P:65 SP:FB CYC: 15 SL:171 +F0D1 EA NOP A:02 X:02 Y:D7 P:65 SP:FB CYC: 21 SL:171 +F0D2 EA NOP A:02 X:02 Y:D7 P:65 SP:FB CYC: 27 SL:171 +F0D3 EA NOP A:02 X:02 Y:D7 P:65 SP:FB CYC: 33 SL:171 +F0D4 20 59 FB JSR $FB59 A:02 X:02 Y:D7 P:65 SP:FB CYC: 39 SL:171 +FB59 50 1A BVC $FB75 A:02 X:02 Y:D7 P:65 SP:F9 CYC: 57 SL:171 +FB5B 90 18 BCC $FB75 A:02 X:02 Y:D7 P:65 SP:F9 CYC: 63 SL:171 +FB5D 30 16 BMI $FB75 A:02 X:02 Y:D7 P:65 SP:F9 CYC: 69 SL:171 +FB5F C9 02 CMP #$02 A:02 X:02 Y:D7 P:65 SP:F9 CYC: 75 SL:171 +FB61 D0 12 BNE $FB75 A:02 X:02 Y:D7 P:67 SP:F9 CYC: 81 SL:171 +FB63 60 RTS A:02 X:02 Y:D7 P:67 SP:F9 CYC: 87 SL:171 +F0D7 A5 47 LDA $47 = 4A A:02 X:02 Y:D7 P:67 SP:FB CYC:105 SL:171 +F0D9 C9 4A CMP #$4A A:4A X:02 Y:D7 P:65 SP:FB CYC:114 SL:171 +F0DB F0 02 BEQ $F0DF A:4A X:02 Y:D7 P:67 SP:FB CYC:120 SL:171 +F0DF C8 INY A:4A X:02 Y:D7 P:67 SP:FB CYC:129 SL:171 +F0E0 A9 29 LDA #$29 A:4A X:02 Y:D8 P:E5 SP:FB CYC:135 SL:171 +F0E2 85 47 STA $47 = 4A A:29 X:02 Y:D8 P:65 SP:FB CYC:141 SL:171 +F0E4 20 64 FB JSR $FB64 A:29 X:02 Y:D8 P:65 SP:FB CYC:150 SL:171 +FB64 B8 CLV A:29 X:02 Y:D8 P:65 SP:F9 CYC:168 SL:171 +FB65 18 CLC A:29 X:02 Y:D8 P:25 SP:F9 CYC:174 SL:171 +FB66 A9 42 LDA #$42 A:29 X:02 Y:D8 P:24 SP:F9 CYC:180 SL:171 +FB68 60 RTS A:42 X:02 Y:D8 P:24 SP:F9 CYC:186 SL:171 +F0E7 27 47 *RLA $47 = 29 A:42 X:02 Y:D8 P:24 SP:FB CYC:204 SL:171 +F0E9 EA NOP A:42 X:02 Y:D8 P:24 SP:FB CYC:219 SL:171 +F0EA EA NOP A:42 X:02 Y:D8 P:24 SP:FB CYC:225 SL:171 +F0EB EA NOP A:42 X:02 Y:D8 P:24 SP:FB CYC:231 SL:171 +F0EC EA NOP A:42 X:02 Y:D8 P:24 SP:FB CYC:237 SL:171 +F0ED 20 69 FB JSR $FB69 A:42 X:02 Y:D8 P:24 SP:FB CYC:243 SL:171 +FB69 70 0A BVS $FB75 A:42 X:02 Y:D8 P:24 SP:F9 CYC:261 SL:171 +FB6B F0 08 BEQ $FB75 A:42 X:02 Y:D8 P:24 SP:F9 CYC:267 SL:171 +FB6D 30 06 BMI $FB75 A:42 X:02 Y:D8 P:24 SP:F9 CYC:273 SL:171 +FB6F B0 04 BCS $FB75 A:42 X:02 Y:D8 P:24 SP:F9 CYC:279 SL:171 +FB71 C9 42 CMP #$42 A:42 X:02 Y:D8 P:24 SP:F9 CYC:285 SL:171 +FB73 F0 02 BEQ $FB77 A:42 X:02 Y:D8 P:27 SP:F9 CYC:291 SL:171 +FB77 60 RTS A:42 X:02 Y:D8 P:27 SP:F9 CYC:300 SL:171 +F0F0 A5 47 LDA $47 = 52 A:42 X:02 Y:D8 P:27 SP:FB CYC:318 SL:171 +F0F2 C9 52 CMP #$52 A:52 X:02 Y:D8 P:25 SP:FB CYC:327 SL:171 +F0F4 F0 02 BEQ $F0F8 A:52 X:02 Y:D8 P:27 SP:FB CYC:333 SL:171 +F0F8 C8 INY A:52 X:02 Y:D8 P:27 SP:FB CYC: 1 SL:172 +F0F9 A9 37 LDA #$37 A:52 X:02 Y:D9 P:A5 SP:FB CYC: 7 SL:172 +F0FB 85 47 STA $47 = 52 A:37 X:02 Y:D9 P:25 SP:FB CYC: 13 SL:172 +F0FD 20 68 FA JSR $FA68 A:37 X:02 Y:D9 P:25 SP:FB CYC: 22 SL:172 +FA68 24 01 BIT $01 = FF A:37 X:02 Y:D9 P:25 SP:F9 CYC: 40 SL:172 +FA6A 38 SEC A:37 X:02 Y:D9 P:E5 SP:F9 CYC: 49 SL:172 +FA6B A9 75 LDA #$75 A:37 X:02 Y:D9 P:E5 SP:F9 CYC: 55 SL:172 +FA6D 60 RTS A:75 X:02 Y:D9 P:65 SP:F9 CYC: 61 SL:172 +F100 27 47 *RLA $47 = 37 A:75 X:02 Y:D9 P:65 SP:FB CYC: 79 SL:172 +F102 EA NOP A:65 X:02 Y:D9 P:64 SP:FB CYC: 94 SL:172 +F103 EA NOP A:65 X:02 Y:D9 P:64 SP:FB CYC:100 SL:172 +F104 EA NOP A:65 X:02 Y:D9 P:64 SP:FB CYC:106 SL:172 +F105 EA NOP A:65 X:02 Y:D9 P:64 SP:FB CYC:112 SL:172 +F106 20 6E FA JSR $FA6E A:65 X:02 Y:D9 P:64 SP:FB CYC:118 SL:172 +FA6E 50 76 BVC $FAE6 A:65 X:02 Y:D9 P:64 SP:F9 CYC:136 SL:172 +FA70 F0 74 BEQ $FAE6 A:65 X:02 Y:D9 P:64 SP:F9 CYC:142 SL:172 +FA72 30 72 BMI $FAE6 A:65 X:02 Y:D9 P:64 SP:F9 CYC:148 SL:172 +FA74 B0 70 BCS $FAE6 A:65 X:02 Y:D9 P:64 SP:F9 CYC:154 SL:172 +FA76 C9 65 CMP #$65 A:65 X:02 Y:D9 P:64 SP:F9 CYC:160 SL:172 +FA78 D0 6C BNE $FAE6 A:65 X:02 Y:D9 P:67 SP:F9 CYC:166 SL:172 +FA7A 60 RTS A:65 X:02 Y:D9 P:67 SP:F9 CYC:172 SL:172 +F109 A5 47 LDA $47 = 6F A:65 X:02 Y:D9 P:67 SP:FB CYC:190 SL:172 +F10B C9 6F CMP #$6F A:6F X:02 Y:D9 P:65 SP:FB CYC:199 SL:172 +F10D F0 02 BEQ $F111 A:6F X:02 Y:D9 P:67 SP:FB CYC:205 SL:172 +F111 C8 INY A:6F X:02 Y:D9 P:67 SP:FB CYC:214 SL:172 +F112 A9 A5 LDA #$A5 A:6F X:02 Y:DA P:E5 SP:FB CYC:220 SL:172 +F114 8D 47 06 STA $0647 = 6F A:A5 X:02 Y:DA P:E5 SP:FB CYC:226 SL:172 +F117 20 53 FB JSR $FB53 A:A5 X:02 Y:DA P:E5 SP:FB CYC:238 SL:172 +FB53 24 01 BIT $01 = FF A:A5 X:02 Y:DA P:E5 SP:F9 CYC:256 SL:172 +FB55 18 CLC A:A5 X:02 Y:DA P:E5 SP:F9 CYC:265 SL:172 +FB56 A9 B3 LDA #$B3 A:A5 X:02 Y:DA P:E4 SP:F9 CYC:271 SL:172 +FB58 60 RTS A:B3 X:02 Y:DA P:E4 SP:F9 CYC:277 SL:172 +F11A 2F 47 06 *RLA $0647 = A5 A:B3 X:02 Y:DA P:E4 SP:FB CYC:295 SL:172 +F11D EA NOP A:02 X:02 Y:DA P:65 SP:FB CYC:313 SL:172 +F11E EA NOP A:02 X:02 Y:DA P:65 SP:FB CYC:319 SL:172 +F11F EA NOP A:02 X:02 Y:DA P:65 SP:FB CYC:325 SL:172 +F120 EA NOP A:02 X:02 Y:DA P:65 SP:FB CYC:331 SL:172 +F121 20 59 FB JSR $FB59 A:02 X:02 Y:DA P:65 SP:FB CYC:337 SL:172 +FB59 50 1A BVC $FB75 A:02 X:02 Y:DA P:65 SP:F9 CYC: 14 SL:173 +FB5B 90 18 BCC $FB75 A:02 X:02 Y:DA P:65 SP:F9 CYC: 20 SL:173 +FB5D 30 16 BMI $FB75 A:02 X:02 Y:DA P:65 SP:F9 CYC: 26 SL:173 +FB5F C9 02 CMP #$02 A:02 X:02 Y:DA P:65 SP:F9 CYC: 32 SL:173 +FB61 D0 12 BNE $FB75 A:02 X:02 Y:DA P:67 SP:F9 CYC: 38 SL:173 +FB63 60 RTS A:02 X:02 Y:DA P:67 SP:F9 CYC: 44 SL:173 +F124 AD 47 06 LDA $0647 = 4A A:02 X:02 Y:DA P:67 SP:FB CYC: 62 SL:173 +F127 C9 4A CMP #$4A A:4A X:02 Y:DA P:65 SP:FB CYC: 74 SL:173 +F129 F0 02 BEQ $F12D A:4A X:02 Y:DA P:67 SP:FB CYC: 80 SL:173 +F12D C8 INY A:4A X:02 Y:DA P:67 SP:FB CYC: 89 SL:173 +F12E A9 29 LDA #$29 A:4A X:02 Y:DB P:E5 SP:FB CYC: 95 SL:173 +F130 8D 47 06 STA $0647 = 4A A:29 X:02 Y:DB P:65 SP:FB CYC:101 SL:173 +F133 20 64 FB JSR $FB64 A:29 X:02 Y:DB P:65 SP:FB CYC:113 SL:173 +FB64 B8 CLV A:29 X:02 Y:DB P:65 SP:F9 CYC:131 SL:173 +FB65 18 CLC A:29 X:02 Y:DB P:25 SP:F9 CYC:137 SL:173 +FB66 A9 42 LDA #$42 A:29 X:02 Y:DB P:24 SP:F9 CYC:143 SL:173 +FB68 60 RTS A:42 X:02 Y:DB P:24 SP:F9 CYC:149 SL:173 +F136 2F 47 06 *RLA $0647 = 29 A:42 X:02 Y:DB P:24 SP:FB CYC:167 SL:173 +F139 EA NOP A:42 X:02 Y:DB P:24 SP:FB CYC:185 SL:173 +F13A EA NOP A:42 X:02 Y:DB P:24 SP:FB CYC:191 SL:173 +F13B EA NOP A:42 X:02 Y:DB P:24 SP:FB CYC:197 SL:173 +F13C EA NOP A:42 X:02 Y:DB P:24 SP:FB CYC:203 SL:173 +F13D 20 69 FB JSR $FB69 A:42 X:02 Y:DB P:24 SP:FB CYC:209 SL:173 +FB69 70 0A BVS $FB75 A:42 X:02 Y:DB P:24 SP:F9 CYC:227 SL:173 +FB6B F0 08 BEQ $FB75 A:42 X:02 Y:DB P:24 SP:F9 CYC:233 SL:173 +FB6D 30 06 BMI $FB75 A:42 X:02 Y:DB P:24 SP:F9 CYC:239 SL:173 +FB6F B0 04 BCS $FB75 A:42 X:02 Y:DB P:24 SP:F9 CYC:245 SL:173 +FB71 C9 42 CMP #$42 A:42 X:02 Y:DB P:24 SP:F9 CYC:251 SL:173 +FB73 F0 02 BEQ $FB77 A:42 X:02 Y:DB P:27 SP:F9 CYC:257 SL:173 +FB77 60 RTS A:42 X:02 Y:DB P:27 SP:F9 CYC:266 SL:173 +F140 AD 47 06 LDA $0647 = 52 A:42 X:02 Y:DB P:27 SP:FB CYC:284 SL:173 +F143 C9 52 CMP #$52 A:52 X:02 Y:DB P:25 SP:FB CYC:296 SL:173 +F145 F0 02 BEQ $F149 A:52 X:02 Y:DB P:27 SP:FB CYC:302 SL:173 +F149 C8 INY A:52 X:02 Y:DB P:27 SP:FB CYC:311 SL:173 +F14A A9 37 LDA #$37 A:52 X:02 Y:DC P:A5 SP:FB CYC:317 SL:173 +F14C 8D 47 06 STA $0647 = 52 A:37 X:02 Y:DC P:25 SP:FB CYC:323 SL:173 +F14F 20 68 FA JSR $FA68 A:37 X:02 Y:DC P:25 SP:FB CYC:335 SL:173 +FA68 24 01 BIT $01 = FF A:37 X:02 Y:DC P:25 SP:F9 CYC: 12 SL:174 +FA6A 38 SEC A:37 X:02 Y:DC P:E5 SP:F9 CYC: 21 SL:174 +FA6B A9 75 LDA #$75 A:37 X:02 Y:DC P:E5 SP:F9 CYC: 27 SL:174 +FA6D 60 RTS A:75 X:02 Y:DC P:65 SP:F9 CYC: 33 SL:174 +F152 2F 47 06 *RLA $0647 = 37 A:75 X:02 Y:DC P:65 SP:FB CYC: 51 SL:174 +F155 EA NOP A:65 X:02 Y:DC P:64 SP:FB CYC: 69 SL:174 +F156 EA NOP A:65 X:02 Y:DC P:64 SP:FB CYC: 75 SL:174 +F157 EA NOP A:65 X:02 Y:DC P:64 SP:FB CYC: 81 SL:174 +F158 EA NOP A:65 X:02 Y:DC P:64 SP:FB CYC: 87 SL:174 +F159 20 6E FA JSR $FA6E A:65 X:02 Y:DC P:64 SP:FB CYC: 93 SL:174 +FA6E 50 76 BVC $FAE6 A:65 X:02 Y:DC P:64 SP:F9 CYC:111 SL:174 +FA70 F0 74 BEQ $FAE6 A:65 X:02 Y:DC P:64 SP:F9 CYC:117 SL:174 +FA72 30 72 BMI $FAE6 A:65 X:02 Y:DC P:64 SP:F9 CYC:123 SL:174 +FA74 B0 70 BCS $FAE6 A:65 X:02 Y:DC P:64 SP:F9 CYC:129 SL:174 +FA76 C9 65 CMP #$65 A:65 X:02 Y:DC P:64 SP:F9 CYC:135 SL:174 +FA78 D0 6C BNE $FAE6 A:65 X:02 Y:DC P:67 SP:F9 CYC:141 SL:174 +FA7A 60 RTS A:65 X:02 Y:DC P:67 SP:F9 CYC:147 SL:174 +F15C AD 47 06 LDA $0647 = 6F A:65 X:02 Y:DC P:67 SP:FB CYC:165 SL:174 +F15F C9 6F CMP #$6F A:6F X:02 Y:DC P:65 SP:FB CYC:177 SL:174 +F161 F0 02 BEQ $F165 A:6F X:02 Y:DC P:67 SP:FB CYC:183 SL:174 +F165 A9 A5 LDA #$A5 A:6F X:02 Y:DC P:67 SP:FB CYC:192 SL:174 +F167 8D 47 06 STA $0647 = 6F A:A5 X:02 Y:DC P:E5 SP:FB CYC:198 SL:174 +F16A A9 48 LDA #$48 A:A5 X:02 Y:DC P:E5 SP:FB CYC:210 SL:174 +F16C 85 45 STA $45 = 48 A:48 X:02 Y:DC P:65 SP:FB CYC:216 SL:174 +F16E A9 05 LDA #$05 A:48 X:02 Y:DC P:65 SP:FB CYC:225 SL:174 +F170 85 46 STA $46 = 05 A:05 X:02 Y:DC P:65 SP:FB CYC:231 SL:174 +F172 A0 FF LDY #$FF A:05 X:02 Y:DC P:65 SP:FB CYC:240 SL:174 +F174 20 53 FB JSR $FB53 A:05 X:02 Y:FF P:E5 SP:FB CYC:246 SL:174 +FB53 24 01 BIT $01 = FF A:05 X:02 Y:FF P:E5 SP:F9 CYC:264 SL:174 +FB55 18 CLC A:05 X:02 Y:FF P:E5 SP:F9 CYC:273 SL:174 +FB56 A9 B3 LDA #$B3 A:05 X:02 Y:FF P:E4 SP:F9 CYC:279 SL:174 +FB58 60 RTS A:B3 X:02 Y:FF P:E4 SP:F9 CYC:285 SL:174 +F177 33 45 *RLA ($45),Y = 0548 @ 0647 = A5 A:B3 X:02 Y:FF P:E4 SP:FB CYC:303 SL:174 +F179 EA NOP A:02 X:02 Y:FF P:65 SP:FB CYC:327 SL:174 +F17A EA NOP A:02 X:02 Y:FF P:65 SP:FB CYC:333 SL:174 +F17B 08 PHP A:02 X:02 Y:FF P:65 SP:FB CYC:339 SL:174 +F17C 48 PHA A:02 X:02 Y:FF P:65 SP:FA CYC: 7 SL:175 +F17D A0 DD LDY #$DD A:02 X:02 Y:FF P:65 SP:F9 CYC: 16 SL:175 +F17F 68 PLA A:02 X:02 Y:DD P:E5 SP:F9 CYC: 22 SL:175 +F180 28 PLP A:02 X:02 Y:DD P:65 SP:FA CYC: 34 SL:175 +F181 20 59 FB JSR $FB59 A:02 X:02 Y:DD P:65 SP:FB CYC: 46 SL:175 +FB59 50 1A BVC $FB75 A:02 X:02 Y:DD P:65 SP:F9 CYC: 64 SL:175 +FB5B 90 18 BCC $FB75 A:02 X:02 Y:DD P:65 SP:F9 CYC: 70 SL:175 +FB5D 30 16 BMI $FB75 A:02 X:02 Y:DD P:65 SP:F9 CYC: 76 SL:175 +FB5F C9 02 CMP #$02 A:02 X:02 Y:DD P:65 SP:F9 CYC: 82 SL:175 +FB61 D0 12 BNE $FB75 A:02 X:02 Y:DD P:67 SP:F9 CYC: 88 SL:175 +FB63 60 RTS A:02 X:02 Y:DD P:67 SP:F9 CYC: 94 SL:175 +F184 AD 47 06 LDA $0647 = 4A A:02 X:02 Y:DD P:67 SP:FB CYC:112 SL:175 +F187 C9 4A CMP #$4A A:4A X:02 Y:DD P:65 SP:FB CYC:124 SL:175 +F189 F0 02 BEQ $F18D A:4A X:02 Y:DD P:67 SP:FB CYC:130 SL:175 +F18D A0 FF LDY #$FF A:4A X:02 Y:DD P:67 SP:FB CYC:139 SL:175 +F18F A9 29 LDA #$29 A:4A X:02 Y:FF P:E5 SP:FB CYC:145 SL:175 +F191 8D 47 06 STA $0647 = 4A A:29 X:02 Y:FF P:65 SP:FB CYC:151 SL:175 +F194 20 64 FB JSR $FB64 A:29 X:02 Y:FF P:65 SP:FB CYC:163 SL:175 +FB64 B8 CLV A:29 X:02 Y:FF P:65 SP:F9 CYC:181 SL:175 +FB65 18 CLC A:29 X:02 Y:FF P:25 SP:F9 CYC:187 SL:175 +FB66 A9 42 LDA #$42 A:29 X:02 Y:FF P:24 SP:F9 CYC:193 SL:175 +FB68 60 RTS A:42 X:02 Y:FF P:24 SP:F9 CYC:199 SL:175 +F197 33 45 *RLA ($45),Y = 0548 @ 0647 = 29 A:42 X:02 Y:FF P:24 SP:FB CYC:217 SL:175 +F199 EA NOP A:42 X:02 Y:FF P:24 SP:FB CYC:241 SL:175 +F19A EA NOP A:42 X:02 Y:FF P:24 SP:FB CYC:247 SL:175 +F19B 08 PHP A:42 X:02 Y:FF P:24 SP:FB CYC:253 SL:175 +F19C 48 PHA A:42 X:02 Y:FF P:24 SP:FA CYC:262 SL:175 +F19D A0 DE LDY #$DE A:42 X:02 Y:FF P:24 SP:F9 CYC:271 SL:175 +F19F 68 PLA A:42 X:02 Y:DE P:A4 SP:F9 CYC:277 SL:175 +F1A0 28 PLP A:42 X:02 Y:DE P:24 SP:FA CYC:289 SL:175 +F1A1 20 69 FB JSR $FB69 A:42 X:02 Y:DE P:24 SP:FB CYC:301 SL:175 +FB69 70 0A BVS $FB75 A:42 X:02 Y:DE P:24 SP:F9 CYC:319 SL:175 +FB6B F0 08 BEQ $FB75 A:42 X:02 Y:DE P:24 SP:F9 CYC:325 SL:175 +FB6D 30 06 BMI $FB75 A:42 X:02 Y:DE P:24 SP:F9 CYC:331 SL:175 +FB6F B0 04 BCS $FB75 A:42 X:02 Y:DE P:24 SP:F9 CYC:337 SL:175 +FB71 C9 42 CMP #$42 A:42 X:02 Y:DE P:24 SP:F9 CYC: 2 SL:176 +FB73 F0 02 BEQ $FB77 A:42 X:02 Y:DE P:27 SP:F9 CYC: 8 SL:176 +FB77 60 RTS A:42 X:02 Y:DE P:27 SP:F9 CYC: 17 SL:176 +F1A4 AD 47 06 LDA $0647 = 52 A:42 X:02 Y:DE P:27 SP:FB CYC: 35 SL:176 +F1A7 C9 52 CMP #$52 A:52 X:02 Y:DE P:25 SP:FB CYC: 47 SL:176 +F1A9 F0 02 BEQ $F1AD A:52 X:02 Y:DE P:27 SP:FB CYC: 53 SL:176 +F1AD A0 FF LDY #$FF A:52 X:02 Y:DE P:27 SP:FB CYC: 62 SL:176 +F1AF A9 37 LDA #$37 A:52 X:02 Y:FF P:A5 SP:FB CYC: 68 SL:176 +F1B1 8D 47 06 STA $0647 = 52 A:37 X:02 Y:FF P:25 SP:FB CYC: 74 SL:176 +F1B4 20 68 FA JSR $FA68 A:37 X:02 Y:FF P:25 SP:FB CYC: 86 SL:176 +FA68 24 01 BIT $01 = FF A:37 X:02 Y:FF P:25 SP:F9 CYC:104 SL:176 +FA6A 38 SEC A:37 X:02 Y:FF P:E5 SP:F9 CYC:113 SL:176 +FA6B A9 75 LDA #$75 A:37 X:02 Y:FF P:E5 SP:F9 CYC:119 SL:176 +FA6D 60 RTS A:75 X:02 Y:FF P:65 SP:F9 CYC:125 SL:176 +F1B7 33 45 *RLA ($45),Y = 0548 @ 0647 = 37 A:75 X:02 Y:FF P:65 SP:FB CYC:143 SL:176 +F1B9 EA NOP A:65 X:02 Y:FF P:64 SP:FB CYC:167 SL:176 +F1BA EA NOP A:65 X:02 Y:FF P:64 SP:FB CYC:173 SL:176 +F1BB 08 PHP A:65 X:02 Y:FF P:64 SP:FB CYC:179 SL:176 +F1BC 48 PHA A:65 X:02 Y:FF P:64 SP:FA CYC:188 SL:176 +F1BD A0 DF LDY #$DF A:65 X:02 Y:FF P:64 SP:F9 CYC:197 SL:176 +F1BF 68 PLA A:65 X:02 Y:DF P:E4 SP:F9 CYC:203 SL:176 +F1C0 28 PLP A:65 X:02 Y:DF P:64 SP:FA CYC:215 SL:176 +F1C1 20 6E FA JSR $FA6E A:65 X:02 Y:DF P:64 SP:FB CYC:227 SL:176 +FA6E 50 76 BVC $FAE6 A:65 X:02 Y:DF P:64 SP:F9 CYC:245 SL:176 +FA70 F0 74 BEQ $FAE6 A:65 X:02 Y:DF P:64 SP:F9 CYC:251 SL:176 +FA72 30 72 BMI $FAE6 A:65 X:02 Y:DF P:64 SP:F9 CYC:257 SL:176 +FA74 B0 70 BCS $FAE6 A:65 X:02 Y:DF P:64 SP:F9 CYC:263 SL:176 +FA76 C9 65 CMP #$65 A:65 X:02 Y:DF P:64 SP:F9 CYC:269 SL:176 +FA78 D0 6C BNE $FAE6 A:65 X:02 Y:DF P:67 SP:F9 CYC:275 SL:176 +FA7A 60 RTS A:65 X:02 Y:DF P:67 SP:F9 CYC:281 SL:176 +F1C4 AD 47 06 LDA $0647 = 6F A:65 X:02 Y:DF P:67 SP:FB CYC:299 SL:176 +F1C7 C9 6F CMP #$6F A:6F X:02 Y:DF P:65 SP:FB CYC:311 SL:176 +F1C9 F0 02 BEQ $F1CD A:6F X:02 Y:DF P:67 SP:FB CYC:317 SL:176 +F1CD A0 E0 LDY #$E0 A:6F X:02 Y:DF P:67 SP:FB CYC:326 SL:176 +F1CF A2 FF LDX #$FF A:6F X:02 Y:E0 P:E5 SP:FB CYC:332 SL:176 +F1D1 A9 A5 LDA #$A5 A:6F X:FF Y:E0 P:E5 SP:FB CYC:338 SL:176 +F1D3 85 47 STA $47 = 6F A:A5 X:FF Y:E0 P:E5 SP:FB CYC: 3 SL:177 +F1D5 20 53 FB JSR $FB53 A:A5 X:FF Y:E0 P:E5 SP:FB CYC: 12 SL:177 +FB53 24 01 BIT $01 = FF A:A5 X:FF Y:E0 P:E5 SP:F9 CYC: 30 SL:177 +FB55 18 CLC A:A5 X:FF Y:E0 P:E5 SP:F9 CYC: 39 SL:177 +FB56 A9 B3 LDA #$B3 A:A5 X:FF Y:E0 P:E4 SP:F9 CYC: 45 SL:177 +FB58 60 RTS A:B3 X:FF Y:E0 P:E4 SP:F9 CYC: 51 SL:177 +F1D8 37 48 *RLA $48,X @ 47 = A5 A:B3 X:FF Y:E0 P:E4 SP:FB CYC: 69 SL:177 +F1DA EA NOP A:02 X:FF Y:E0 P:65 SP:FB CYC: 87 SL:177 +F1DB EA NOP A:02 X:FF Y:E0 P:65 SP:FB CYC: 93 SL:177 +F1DC EA NOP A:02 X:FF Y:E0 P:65 SP:FB CYC: 99 SL:177 +F1DD EA NOP A:02 X:FF Y:E0 P:65 SP:FB CYC:105 SL:177 +F1DE 20 59 FB JSR $FB59 A:02 X:FF Y:E0 P:65 SP:FB CYC:111 SL:177 +FB59 50 1A BVC $FB75 A:02 X:FF Y:E0 P:65 SP:F9 CYC:129 SL:177 +FB5B 90 18 BCC $FB75 A:02 X:FF Y:E0 P:65 SP:F9 CYC:135 SL:177 +FB5D 30 16 BMI $FB75 A:02 X:FF Y:E0 P:65 SP:F9 CYC:141 SL:177 +FB5F C9 02 CMP #$02 A:02 X:FF Y:E0 P:65 SP:F9 CYC:147 SL:177 +FB61 D0 12 BNE $FB75 A:02 X:FF Y:E0 P:67 SP:F9 CYC:153 SL:177 +FB63 60 RTS A:02 X:FF Y:E0 P:67 SP:F9 CYC:159 SL:177 +F1E1 A5 47 LDA $47 = 4A A:02 X:FF Y:E0 P:67 SP:FB CYC:177 SL:177 +F1E3 C9 4A CMP #$4A A:4A X:FF Y:E0 P:65 SP:FB CYC:186 SL:177 +F1E5 F0 02 BEQ $F1E9 A:4A X:FF Y:E0 P:67 SP:FB CYC:192 SL:177 +F1E9 C8 INY A:4A X:FF Y:E0 P:67 SP:FB CYC:201 SL:177 +F1EA A9 29 LDA #$29 A:4A X:FF Y:E1 P:E5 SP:FB CYC:207 SL:177 +F1EC 85 47 STA $47 = 4A A:29 X:FF Y:E1 P:65 SP:FB CYC:213 SL:177 +F1EE 20 64 FB JSR $FB64 A:29 X:FF Y:E1 P:65 SP:FB CYC:222 SL:177 +FB64 B8 CLV A:29 X:FF Y:E1 P:65 SP:F9 CYC:240 SL:177 +FB65 18 CLC A:29 X:FF Y:E1 P:25 SP:F9 CYC:246 SL:177 +FB66 A9 42 LDA #$42 A:29 X:FF Y:E1 P:24 SP:F9 CYC:252 SL:177 +FB68 60 RTS A:42 X:FF Y:E1 P:24 SP:F9 CYC:258 SL:177 +F1F1 37 48 *RLA $48,X @ 47 = 29 A:42 X:FF Y:E1 P:24 SP:FB CYC:276 SL:177 +F1F3 EA NOP A:42 X:FF Y:E1 P:24 SP:FB CYC:294 SL:177 +F1F4 EA NOP A:42 X:FF Y:E1 P:24 SP:FB CYC:300 SL:177 +F1F5 EA NOP A:42 X:FF Y:E1 P:24 SP:FB CYC:306 SL:177 +F1F6 EA NOP A:42 X:FF Y:E1 P:24 SP:FB CYC:312 SL:177 +F1F7 20 69 FB JSR $FB69 A:42 X:FF Y:E1 P:24 SP:FB CYC:318 SL:177 +FB69 70 0A BVS $FB75 A:42 X:FF Y:E1 P:24 SP:F9 CYC:336 SL:177 +FB6B F0 08 BEQ $FB75 A:42 X:FF Y:E1 P:24 SP:F9 CYC: 1 SL:178 +FB6D 30 06 BMI $FB75 A:42 X:FF Y:E1 P:24 SP:F9 CYC: 7 SL:178 +FB6F B0 04 BCS $FB75 A:42 X:FF Y:E1 P:24 SP:F9 CYC: 13 SL:178 +FB71 C9 42 CMP #$42 A:42 X:FF Y:E1 P:24 SP:F9 CYC: 19 SL:178 +FB73 F0 02 BEQ $FB77 A:42 X:FF Y:E1 P:27 SP:F9 CYC: 25 SL:178 +FB77 60 RTS A:42 X:FF Y:E1 P:27 SP:F9 CYC: 34 SL:178 +F1FA A5 47 LDA $47 = 52 A:42 X:FF Y:E1 P:27 SP:FB CYC: 52 SL:178 +F1FC C9 52 CMP #$52 A:52 X:FF Y:E1 P:25 SP:FB CYC: 61 SL:178 +F1FE F0 02 BEQ $F202 A:52 X:FF Y:E1 P:27 SP:FB CYC: 67 SL:178 +F202 C8 INY A:52 X:FF Y:E1 P:27 SP:FB CYC: 76 SL:178 +F203 A9 37 LDA #$37 A:52 X:FF Y:E2 P:A5 SP:FB CYC: 82 SL:178 +F205 85 47 STA $47 = 52 A:37 X:FF Y:E2 P:25 SP:FB CYC: 88 SL:178 +F207 20 68 FA JSR $FA68 A:37 X:FF Y:E2 P:25 SP:FB CYC: 97 SL:178 +FA68 24 01 BIT $01 = FF A:37 X:FF Y:E2 P:25 SP:F9 CYC:115 SL:178 +FA6A 38 SEC A:37 X:FF Y:E2 P:E5 SP:F9 CYC:124 SL:178 +FA6B A9 75 LDA #$75 A:37 X:FF Y:E2 P:E5 SP:F9 CYC:130 SL:178 +FA6D 60 RTS A:75 X:FF Y:E2 P:65 SP:F9 CYC:136 SL:178 +F20A 37 48 *RLA $48,X @ 47 = 37 A:75 X:FF Y:E2 P:65 SP:FB CYC:154 SL:178 +F20C EA NOP A:65 X:FF Y:E2 P:64 SP:FB CYC:172 SL:178 +F20D EA NOP A:65 X:FF Y:E2 P:64 SP:FB CYC:178 SL:178 +F20E EA NOP A:65 X:FF Y:E2 P:64 SP:FB CYC:184 SL:178 +F20F EA NOP A:65 X:FF Y:E2 P:64 SP:FB CYC:190 SL:178 +F210 20 6E FA JSR $FA6E A:65 X:FF Y:E2 P:64 SP:FB CYC:196 SL:178 +FA6E 50 76 BVC $FAE6 A:65 X:FF Y:E2 P:64 SP:F9 CYC:214 SL:178 +FA70 F0 74 BEQ $FAE6 A:65 X:FF Y:E2 P:64 SP:F9 CYC:220 SL:178 +FA72 30 72 BMI $FAE6 A:65 X:FF Y:E2 P:64 SP:F9 CYC:226 SL:178 +FA74 B0 70 BCS $FAE6 A:65 X:FF Y:E2 P:64 SP:F9 CYC:232 SL:178 +FA76 C9 65 CMP #$65 A:65 X:FF Y:E2 P:64 SP:F9 CYC:238 SL:178 +FA78 D0 6C BNE $FAE6 A:65 X:FF Y:E2 P:67 SP:F9 CYC:244 SL:178 +FA7A 60 RTS A:65 X:FF Y:E2 P:67 SP:F9 CYC:250 SL:178 +F213 A5 47 LDA $47 = 6F A:65 X:FF Y:E2 P:67 SP:FB CYC:268 SL:178 +F215 C9 6F CMP #$6F A:6F X:FF Y:E2 P:65 SP:FB CYC:277 SL:178 +F217 F0 02 BEQ $F21B A:6F X:FF Y:E2 P:67 SP:FB CYC:283 SL:178 +F21B A9 A5 LDA #$A5 A:6F X:FF Y:E2 P:67 SP:FB CYC:292 SL:178 +F21D 8D 47 06 STA $0647 = 6F A:A5 X:FF Y:E2 P:E5 SP:FB CYC:298 SL:178 +F220 A0 FF LDY #$FF A:A5 X:FF Y:E2 P:E5 SP:FB CYC:310 SL:178 +F222 20 53 FB JSR $FB53 A:A5 X:FF Y:FF P:E5 SP:FB CYC:316 SL:178 +FB53 24 01 BIT $01 = FF A:A5 X:FF Y:FF P:E5 SP:F9 CYC:334 SL:178 +FB55 18 CLC A:A5 X:FF Y:FF P:E5 SP:F9 CYC: 2 SL:179 +FB56 A9 B3 LDA #$B3 A:A5 X:FF Y:FF P:E4 SP:F9 CYC: 8 SL:179 +FB58 60 RTS A:B3 X:FF Y:FF P:E4 SP:F9 CYC: 14 SL:179 +F225 3B 48 05 *RLA $0548,Y @ 0647 = A5 A:B3 X:FF Y:FF P:E4 SP:FB CYC: 32 SL:179 +F228 EA NOP A:02 X:FF Y:FF P:65 SP:FB CYC: 53 SL:179 +F229 EA NOP A:02 X:FF Y:FF P:65 SP:FB CYC: 59 SL:179 +F22A 08 PHP A:02 X:FF Y:FF P:65 SP:FB CYC: 65 SL:179 +F22B 48 PHA A:02 X:FF Y:FF P:65 SP:FA CYC: 74 SL:179 +F22C A0 E3 LDY #$E3 A:02 X:FF Y:FF P:65 SP:F9 CYC: 83 SL:179 +F22E 68 PLA A:02 X:FF Y:E3 P:E5 SP:F9 CYC: 89 SL:179 +F22F 28 PLP A:02 X:FF Y:E3 P:65 SP:FA CYC:101 SL:179 +F230 20 59 FB JSR $FB59 A:02 X:FF Y:E3 P:65 SP:FB CYC:113 SL:179 +FB59 50 1A BVC $FB75 A:02 X:FF Y:E3 P:65 SP:F9 CYC:131 SL:179 +FB5B 90 18 BCC $FB75 A:02 X:FF Y:E3 P:65 SP:F9 CYC:137 SL:179 +FB5D 30 16 BMI $FB75 A:02 X:FF Y:E3 P:65 SP:F9 CYC:143 SL:179 +FB5F C9 02 CMP #$02 A:02 X:FF Y:E3 P:65 SP:F9 CYC:149 SL:179 +FB61 D0 12 BNE $FB75 A:02 X:FF Y:E3 P:67 SP:F9 CYC:155 SL:179 +FB63 60 RTS A:02 X:FF Y:E3 P:67 SP:F9 CYC:161 SL:179 +F233 AD 47 06 LDA $0647 = 4A A:02 X:FF Y:E3 P:67 SP:FB CYC:179 SL:179 +F236 C9 4A CMP #$4A A:4A X:FF Y:E3 P:65 SP:FB CYC:191 SL:179 +F238 F0 02 BEQ $F23C A:4A X:FF Y:E3 P:67 SP:FB CYC:197 SL:179 +F23C A0 FF LDY #$FF A:4A X:FF Y:E3 P:67 SP:FB CYC:206 SL:179 +F23E A9 29 LDA #$29 A:4A X:FF Y:FF P:E5 SP:FB CYC:212 SL:179 +F240 8D 47 06 STA $0647 = 4A A:29 X:FF Y:FF P:65 SP:FB CYC:218 SL:179 +F243 20 64 FB JSR $FB64 A:29 X:FF Y:FF P:65 SP:FB CYC:230 SL:179 +FB64 B8 CLV A:29 X:FF Y:FF P:65 SP:F9 CYC:248 SL:179 +FB65 18 CLC A:29 X:FF Y:FF P:25 SP:F9 CYC:254 SL:179 +FB66 A9 42 LDA #$42 A:29 X:FF Y:FF P:24 SP:F9 CYC:260 SL:179 +FB68 60 RTS A:42 X:FF Y:FF P:24 SP:F9 CYC:266 SL:179 +F246 3B 48 05 *RLA $0548,Y @ 0647 = 29 A:42 X:FF Y:FF P:24 SP:FB CYC:284 SL:179 +F249 EA NOP A:42 X:FF Y:FF P:24 SP:FB CYC:305 SL:179 +F24A EA NOP A:42 X:FF Y:FF P:24 SP:FB CYC:311 SL:179 +F24B 08 PHP A:42 X:FF Y:FF P:24 SP:FB CYC:317 SL:179 +F24C 48 PHA A:42 X:FF Y:FF P:24 SP:FA CYC:326 SL:179 +F24D A0 E4 LDY #$E4 A:42 X:FF Y:FF P:24 SP:F9 CYC:335 SL:179 +F24F 68 PLA A:42 X:FF Y:E4 P:A4 SP:F9 CYC: 0 SL:180 +F250 28 PLP A:42 X:FF Y:E4 P:24 SP:FA CYC: 12 SL:180 +F251 20 69 FB JSR $FB69 A:42 X:FF Y:E4 P:24 SP:FB CYC: 24 SL:180 +FB69 70 0A BVS $FB75 A:42 X:FF Y:E4 P:24 SP:F9 CYC: 42 SL:180 +FB6B F0 08 BEQ $FB75 A:42 X:FF Y:E4 P:24 SP:F9 CYC: 48 SL:180 +FB6D 30 06 BMI $FB75 A:42 X:FF Y:E4 P:24 SP:F9 CYC: 54 SL:180 +FB6F B0 04 BCS $FB75 A:42 X:FF Y:E4 P:24 SP:F9 CYC: 60 SL:180 +FB71 C9 42 CMP #$42 A:42 X:FF Y:E4 P:24 SP:F9 CYC: 66 SL:180 +FB73 F0 02 BEQ $FB77 A:42 X:FF Y:E4 P:27 SP:F9 CYC: 72 SL:180 +FB77 60 RTS A:42 X:FF Y:E4 P:27 SP:F9 CYC: 81 SL:180 +F254 AD 47 06 LDA $0647 = 52 A:42 X:FF Y:E4 P:27 SP:FB CYC: 99 SL:180 +F257 C9 52 CMP #$52 A:52 X:FF Y:E4 P:25 SP:FB CYC:111 SL:180 +F259 F0 02 BEQ $F25D A:52 X:FF Y:E4 P:27 SP:FB CYC:117 SL:180 +F25D A0 FF LDY #$FF A:52 X:FF Y:E4 P:27 SP:FB CYC:126 SL:180 +F25F A9 37 LDA #$37 A:52 X:FF Y:FF P:A5 SP:FB CYC:132 SL:180 +F261 8D 47 06 STA $0647 = 52 A:37 X:FF Y:FF P:25 SP:FB CYC:138 SL:180 +F264 20 68 FA JSR $FA68 A:37 X:FF Y:FF P:25 SP:FB CYC:150 SL:180 +FA68 24 01 BIT $01 = FF A:37 X:FF Y:FF P:25 SP:F9 CYC:168 SL:180 +FA6A 38 SEC A:37 X:FF Y:FF P:E5 SP:F9 CYC:177 SL:180 +FA6B A9 75 LDA #$75 A:37 X:FF Y:FF P:E5 SP:F9 CYC:183 SL:180 +FA6D 60 RTS A:75 X:FF Y:FF P:65 SP:F9 CYC:189 SL:180 +F267 3B 48 05 *RLA $0548,Y @ 0647 = 37 A:75 X:FF Y:FF P:65 SP:FB CYC:207 SL:180 +F26A EA NOP A:65 X:FF Y:FF P:64 SP:FB CYC:228 SL:180 +F26B EA NOP A:65 X:FF Y:FF P:64 SP:FB CYC:234 SL:180 +F26C 08 PHP A:65 X:FF Y:FF P:64 SP:FB CYC:240 SL:180 +F26D 48 PHA A:65 X:FF Y:FF P:64 SP:FA CYC:249 SL:180 +F26E A0 E5 LDY #$E5 A:65 X:FF Y:FF P:64 SP:F9 CYC:258 SL:180 +F270 68 PLA A:65 X:FF Y:E5 P:E4 SP:F9 CYC:264 SL:180 +F271 28 PLP A:65 X:FF Y:E5 P:64 SP:FA CYC:276 SL:180 +F272 20 6E FA JSR $FA6E A:65 X:FF Y:E5 P:64 SP:FB CYC:288 SL:180 +FA6E 50 76 BVC $FAE6 A:65 X:FF Y:E5 P:64 SP:F9 CYC:306 SL:180 +FA70 F0 74 BEQ $FAE6 A:65 X:FF Y:E5 P:64 SP:F9 CYC:312 SL:180 +FA72 30 72 BMI $FAE6 A:65 X:FF Y:E5 P:64 SP:F9 CYC:318 SL:180 +FA74 B0 70 BCS $FAE6 A:65 X:FF Y:E5 P:64 SP:F9 CYC:324 SL:180 +FA76 C9 65 CMP #$65 A:65 X:FF Y:E5 P:64 SP:F9 CYC:330 SL:180 +FA78 D0 6C BNE $FAE6 A:65 X:FF Y:E5 P:67 SP:F9 CYC:336 SL:180 +FA7A 60 RTS A:65 X:FF Y:E5 P:67 SP:F9 CYC: 1 SL:181 +F275 AD 47 06 LDA $0647 = 6F A:65 X:FF Y:E5 P:67 SP:FB CYC: 19 SL:181 +F278 C9 6F CMP #$6F A:6F X:FF Y:E5 P:65 SP:FB CYC: 31 SL:181 +F27A F0 02 BEQ $F27E A:6F X:FF Y:E5 P:67 SP:FB CYC: 37 SL:181 +F27E A0 E6 LDY #$E6 A:6F X:FF Y:E5 P:67 SP:FB CYC: 46 SL:181 +F280 A2 FF LDX #$FF A:6F X:FF Y:E6 P:E5 SP:FB CYC: 52 SL:181 +F282 A9 A5 LDA #$A5 A:6F X:FF Y:E6 P:E5 SP:FB CYC: 58 SL:181 +F284 8D 47 06 STA $0647 = 6F A:A5 X:FF Y:E6 P:E5 SP:FB CYC: 64 SL:181 +F287 20 53 FB JSR $FB53 A:A5 X:FF Y:E6 P:E5 SP:FB CYC: 76 SL:181 +FB53 24 01 BIT $01 = FF A:A5 X:FF Y:E6 P:E5 SP:F9 CYC: 94 SL:181 +FB55 18 CLC A:A5 X:FF Y:E6 P:E5 SP:F9 CYC:103 SL:181 +FB56 A9 B3 LDA #$B3 A:A5 X:FF Y:E6 P:E4 SP:F9 CYC:109 SL:181 +FB58 60 RTS A:B3 X:FF Y:E6 P:E4 SP:F9 CYC:115 SL:181 +F28A 3F 48 05 *RLA $0548,X @ 0647 = A5 A:B3 X:FF Y:E6 P:E4 SP:FB CYC:133 SL:181 +F28D EA NOP A:02 X:FF Y:E6 P:65 SP:FB CYC:154 SL:181 +F28E EA NOP A:02 X:FF Y:E6 P:65 SP:FB CYC:160 SL:181 +F28F EA NOP A:02 X:FF Y:E6 P:65 SP:FB CYC:166 SL:181 +F290 EA NOP A:02 X:FF Y:E6 P:65 SP:FB CYC:172 SL:181 +F291 20 59 FB JSR $FB59 A:02 X:FF Y:E6 P:65 SP:FB CYC:178 SL:181 +FB59 50 1A BVC $FB75 A:02 X:FF Y:E6 P:65 SP:F9 CYC:196 SL:181 +FB5B 90 18 BCC $FB75 A:02 X:FF Y:E6 P:65 SP:F9 CYC:202 SL:181 +FB5D 30 16 BMI $FB75 A:02 X:FF Y:E6 P:65 SP:F9 CYC:208 SL:181 +FB5F C9 02 CMP #$02 A:02 X:FF Y:E6 P:65 SP:F9 CYC:214 SL:181 +FB61 D0 12 BNE $FB75 A:02 X:FF Y:E6 P:67 SP:F9 CYC:220 SL:181 +FB63 60 RTS A:02 X:FF Y:E6 P:67 SP:F9 CYC:226 SL:181 +F294 AD 47 06 LDA $0647 = 4A A:02 X:FF Y:E6 P:67 SP:FB CYC:244 SL:181 +F297 C9 4A CMP #$4A A:4A X:FF Y:E6 P:65 SP:FB CYC:256 SL:181 +F299 F0 02 BEQ $F29D A:4A X:FF Y:E6 P:67 SP:FB CYC:262 SL:181 +F29D C8 INY A:4A X:FF Y:E6 P:67 SP:FB CYC:271 SL:181 +F29E A9 29 LDA #$29 A:4A X:FF Y:E7 P:E5 SP:FB CYC:277 SL:181 +F2A0 8D 47 06 STA $0647 = 4A A:29 X:FF Y:E7 P:65 SP:FB CYC:283 SL:181 +F2A3 20 64 FB JSR $FB64 A:29 X:FF Y:E7 P:65 SP:FB CYC:295 SL:181 +FB64 B8 CLV A:29 X:FF Y:E7 P:65 SP:F9 CYC:313 SL:181 +FB65 18 CLC A:29 X:FF Y:E7 P:25 SP:F9 CYC:319 SL:181 +FB66 A9 42 LDA #$42 A:29 X:FF Y:E7 P:24 SP:F9 CYC:325 SL:181 +FB68 60 RTS A:42 X:FF Y:E7 P:24 SP:F9 CYC:331 SL:181 +F2A6 3F 48 05 *RLA $0548,X @ 0647 = 29 A:42 X:FF Y:E7 P:24 SP:FB CYC: 8 SL:182 +F2A9 EA NOP A:42 X:FF Y:E7 P:24 SP:FB CYC: 29 SL:182 +F2AA EA NOP A:42 X:FF Y:E7 P:24 SP:FB CYC: 35 SL:182 +F2AB EA NOP A:42 X:FF Y:E7 P:24 SP:FB CYC: 41 SL:182 +F2AC EA NOP A:42 X:FF Y:E7 P:24 SP:FB CYC: 47 SL:182 +F2AD 20 69 FB JSR $FB69 A:42 X:FF Y:E7 P:24 SP:FB CYC: 53 SL:182 +FB69 70 0A BVS $FB75 A:42 X:FF Y:E7 P:24 SP:F9 CYC: 71 SL:182 +FB6B F0 08 BEQ $FB75 A:42 X:FF Y:E7 P:24 SP:F9 CYC: 77 SL:182 +FB6D 30 06 BMI $FB75 A:42 X:FF Y:E7 P:24 SP:F9 CYC: 83 SL:182 +FB6F B0 04 BCS $FB75 A:42 X:FF Y:E7 P:24 SP:F9 CYC: 89 SL:182 +FB71 C9 42 CMP #$42 A:42 X:FF Y:E7 P:24 SP:F9 CYC: 95 SL:182 +FB73 F0 02 BEQ $FB77 A:42 X:FF Y:E7 P:27 SP:F9 CYC:101 SL:182 +FB77 60 RTS A:42 X:FF Y:E7 P:27 SP:F9 CYC:110 SL:182 +F2B0 AD 47 06 LDA $0647 = 52 A:42 X:FF Y:E7 P:27 SP:FB CYC:128 SL:182 +F2B3 C9 52 CMP #$52 A:52 X:FF Y:E7 P:25 SP:FB CYC:140 SL:182 +F2B5 F0 02 BEQ $F2B9 A:52 X:FF Y:E7 P:27 SP:FB CYC:146 SL:182 +F2B9 C8 INY A:52 X:FF Y:E7 P:27 SP:FB CYC:155 SL:182 +F2BA A9 37 LDA #$37 A:52 X:FF Y:E8 P:A5 SP:FB CYC:161 SL:182 +F2BC 8D 47 06 STA $0647 = 52 A:37 X:FF Y:E8 P:25 SP:FB CYC:167 SL:182 +F2BF 20 68 FA JSR $FA68 A:37 X:FF Y:E8 P:25 SP:FB CYC:179 SL:182 +FA68 24 01 BIT $01 = FF A:37 X:FF Y:E8 P:25 SP:F9 CYC:197 SL:182 +FA6A 38 SEC A:37 X:FF Y:E8 P:E5 SP:F9 CYC:206 SL:182 +FA6B A9 75 LDA #$75 A:37 X:FF Y:E8 P:E5 SP:F9 CYC:212 SL:182 +FA6D 60 RTS A:75 X:FF Y:E8 P:65 SP:F9 CYC:218 SL:182 +F2C2 3F 48 05 *RLA $0548,X @ 0647 = 37 A:75 X:FF Y:E8 P:65 SP:FB CYC:236 SL:182 +F2C5 EA NOP A:65 X:FF Y:E8 P:64 SP:FB CYC:257 SL:182 +F2C6 EA NOP A:65 X:FF Y:E8 P:64 SP:FB CYC:263 SL:182 +F2C7 EA NOP A:65 X:FF Y:E8 P:64 SP:FB CYC:269 SL:182 +F2C8 EA NOP A:65 X:FF Y:E8 P:64 SP:FB CYC:275 SL:182 +F2C9 20 6E FA JSR $FA6E A:65 X:FF Y:E8 P:64 SP:FB CYC:281 SL:182 +FA6E 50 76 BVC $FAE6 A:65 X:FF Y:E8 P:64 SP:F9 CYC:299 SL:182 +FA70 F0 74 BEQ $FAE6 A:65 X:FF Y:E8 P:64 SP:F9 CYC:305 SL:182 +FA72 30 72 BMI $FAE6 A:65 X:FF Y:E8 P:64 SP:F9 CYC:311 SL:182 +FA74 B0 70 BCS $FAE6 A:65 X:FF Y:E8 P:64 SP:F9 CYC:317 SL:182 +FA76 C9 65 CMP #$65 A:65 X:FF Y:E8 P:64 SP:F9 CYC:323 SL:182 +FA78 D0 6C BNE $FAE6 A:65 X:FF Y:E8 P:67 SP:F9 CYC:329 SL:182 +FA7A 60 RTS A:65 X:FF Y:E8 P:67 SP:F9 CYC:335 SL:182 +F2CC AD 47 06 LDA $0647 = 6F A:65 X:FF Y:E8 P:67 SP:FB CYC: 12 SL:183 +F2CF C9 6F CMP #$6F A:6F X:FF Y:E8 P:65 SP:FB CYC: 24 SL:183 +F2D1 F0 02 BEQ $F2D5 A:6F X:FF Y:E8 P:67 SP:FB CYC: 30 SL:183 +F2D5 60 RTS A:6F X:FF Y:E8 P:67 SP:FB CYC: 39 SL:183 +C647 20 D6 F2 JSR $F2D6 A:6F X:FF Y:E8 P:67 SP:FD CYC: 57 SL:183 +F2D6 A9 FF LDA #$FF A:6F X:FF Y:E8 P:67 SP:FB CYC: 75 SL:183 +F2D8 85 01 STA $01 = FF A:FF X:FF Y:E8 P:E5 SP:FB CYC: 81 SL:183 +F2DA A0 E9 LDY #$E9 A:FF X:FF Y:E8 P:E5 SP:FB CYC: 90 SL:183 +F2DC A2 02 LDX #$02 A:FF X:FF Y:E9 P:E5 SP:FB CYC: 96 SL:183 +F2DE A9 47 LDA #$47 A:FF X:02 Y:E9 P:65 SP:FB CYC:102 SL:183 +F2E0 85 47 STA $47 = 6F A:47 X:02 Y:E9 P:65 SP:FB CYC:108 SL:183 +F2E2 A9 06 LDA #$06 A:47 X:02 Y:E9 P:65 SP:FB CYC:117 SL:183 +F2E4 85 48 STA $48 = 06 A:06 X:02 Y:E9 P:65 SP:FB CYC:123 SL:183 +F2E6 A9 A5 LDA #$A5 A:06 X:02 Y:E9 P:65 SP:FB CYC:132 SL:183 +F2E8 8D 47 06 STA $0647 = 6F A:A5 X:02 Y:E9 P:E5 SP:FB CYC:138 SL:183 +F2EB 20 1D FB JSR $FB1D A:A5 X:02 Y:E9 P:E5 SP:FB CYC:150 SL:183 +FB1D 24 01 BIT $01 = FF A:A5 X:02 Y:E9 P:E5 SP:F9 CYC:168 SL:183 +FB1F 18 CLC A:A5 X:02 Y:E9 P:E5 SP:F9 CYC:177 SL:183 +FB20 A9 B3 LDA #$B3 A:A5 X:02 Y:E9 P:E4 SP:F9 CYC:183 SL:183 +FB22 60 RTS A:B3 X:02 Y:E9 P:E4 SP:F9 CYC:189 SL:183 +F2EE 43 45 *SRE ($45,X) @ 47 = 0647 = A5 A:B3 X:02 Y:E9 P:E4 SP:FB CYC:207 SL:183 +F2F0 EA NOP A:E1 X:02 Y:E9 P:E5 SP:FB CYC:231 SL:183 +F2F1 EA NOP A:E1 X:02 Y:E9 P:E5 SP:FB CYC:237 SL:183 +F2F2 EA NOP A:E1 X:02 Y:E9 P:E5 SP:FB CYC:243 SL:183 +F2F3 EA NOP A:E1 X:02 Y:E9 P:E5 SP:FB CYC:249 SL:183 +F2F4 20 23 FB JSR $FB23 A:E1 X:02 Y:E9 P:E5 SP:FB CYC:255 SL:183 +FB23 50 50 BVC $FB75 A:E1 X:02 Y:E9 P:E5 SP:F9 CYC:273 SL:183 +FB25 90 4E BCC $FB75 A:E1 X:02 Y:E9 P:E5 SP:F9 CYC:279 SL:183 +FB27 10 4C BPL $FB75 A:E1 X:02 Y:E9 P:E5 SP:F9 CYC:285 SL:183 +FB29 C9 E1 CMP #$E1 A:E1 X:02 Y:E9 P:E5 SP:F9 CYC:291 SL:183 +FB2B D0 48 BNE $FB75 A:E1 X:02 Y:E9 P:67 SP:F9 CYC:297 SL:183 +FB2D 60 RTS A:E1 X:02 Y:E9 P:67 SP:F9 CYC:303 SL:183 +F2F7 AD 47 06 LDA $0647 = 52 A:E1 X:02 Y:E9 P:67 SP:FB CYC:321 SL:183 +F2FA C9 52 CMP #$52 A:52 X:02 Y:E9 P:65 SP:FB CYC:333 SL:183 +F2FC F0 02 BEQ $F300 A:52 X:02 Y:E9 P:67 SP:FB CYC:339 SL:183 +F300 C8 INY A:52 X:02 Y:E9 P:67 SP:FB CYC: 10 SL:184 +F301 A9 29 LDA #$29 A:52 X:02 Y:EA P:E5 SP:FB CYC: 16 SL:184 +F303 8D 47 06 STA $0647 = 52 A:29 X:02 Y:EA P:65 SP:FB CYC: 22 SL:184 +F306 20 2E FB JSR $FB2E A:29 X:02 Y:EA P:65 SP:FB CYC: 34 SL:184 +FB2E B8 CLV A:29 X:02 Y:EA P:65 SP:F9 CYC: 52 SL:184 +FB2F 18 CLC A:29 X:02 Y:EA P:25 SP:F9 CYC: 58 SL:184 +FB30 A9 42 LDA #$42 A:29 X:02 Y:EA P:24 SP:F9 CYC: 64 SL:184 +FB32 60 RTS A:42 X:02 Y:EA P:24 SP:F9 CYC: 70 SL:184 +F309 43 45 *SRE ($45,X) @ 47 = 0647 = 29 A:42 X:02 Y:EA P:24 SP:FB CYC: 88 SL:184 +F30B EA NOP A:56 X:02 Y:EA P:25 SP:FB CYC:112 SL:184 +F30C EA NOP A:56 X:02 Y:EA P:25 SP:FB CYC:118 SL:184 +F30D EA NOP A:56 X:02 Y:EA P:25 SP:FB CYC:124 SL:184 +F30E EA NOP A:56 X:02 Y:EA P:25 SP:FB CYC:130 SL:184 +F30F 20 33 FB JSR $FB33 A:56 X:02 Y:EA P:25 SP:FB CYC:136 SL:184 +FB33 70 40 BVS $FB75 A:56 X:02 Y:EA P:25 SP:F9 CYC:154 SL:184 +FB35 F0 3E BEQ $FB75 A:56 X:02 Y:EA P:25 SP:F9 CYC:160 SL:184 +FB37 30 3C BMI $FB75 A:56 X:02 Y:EA P:25 SP:F9 CYC:166 SL:184 +FB39 90 3A BCC $FB75 A:56 X:02 Y:EA P:25 SP:F9 CYC:172 SL:184 +FB3B C9 56 CMP #$56 A:56 X:02 Y:EA P:25 SP:F9 CYC:178 SL:184 +FB3D D0 36 BNE $FB75 A:56 X:02 Y:EA P:27 SP:F9 CYC:184 SL:184 +FB3F 60 RTS A:56 X:02 Y:EA P:27 SP:F9 CYC:190 SL:184 +F312 AD 47 06 LDA $0647 = 14 A:56 X:02 Y:EA P:27 SP:FB CYC:208 SL:184 +F315 C9 14 CMP #$14 A:14 X:02 Y:EA P:25 SP:FB CYC:220 SL:184 +F317 F0 02 BEQ $F31B A:14 X:02 Y:EA P:27 SP:FB CYC:226 SL:184 +F31B C8 INY A:14 X:02 Y:EA P:27 SP:FB CYC:235 SL:184 +F31C A9 37 LDA #$37 A:14 X:02 Y:EB P:A5 SP:FB CYC:241 SL:184 +F31E 8D 47 06 STA $0647 = 14 A:37 X:02 Y:EB P:25 SP:FB CYC:247 SL:184 +F321 20 40 FB JSR $FB40 A:37 X:02 Y:EB P:25 SP:FB CYC:259 SL:184 +FB40 24 01 BIT $01 = FF A:37 X:02 Y:EB P:25 SP:F9 CYC:277 SL:184 +FB42 38 SEC A:37 X:02 Y:EB P:E5 SP:F9 CYC:286 SL:184 +FB43 A9 75 LDA #$75 A:37 X:02 Y:EB P:E5 SP:F9 CYC:292 SL:184 +FB45 60 RTS A:75 X:02 Y:EB P:65 SP:F9 CYC:298 SL:184 +F324 43 45 *SRE ($45,X) @ 47 = 0647 = 37 A:75 X:02 Y:EB P:65 SP:FB CYC:316 SL:184 +F326 EA NOP A:6E X:02 Y:EB P:65 SP:FB CYC:340 SL:184 +F327 EA NOP A:6E X:02 Y:EB P:65 SP:FB CYC: 5 SL:185 +F328 EA NOP A:6E X:02 Y:EB P:65 SP:FB CYC: 11 SL:185 +F329 EA NOP A:6E X:02 Y:EB P:65 SP:FB CYC: 17 SL:185 +F32A 20 46 FB JSR $FB46 A:6E X:02 Y:EB P:65 SP:FB CYC: 23 SL:185 +FB46 50 2D BVC $FB75 A:6E X:02 Y:EB P:65 SP:F9 CYC: 41 SL:185 +FB48 F0 2B BEQ $FB75 A:6E X:02 Y:EB P:65 SP:F9 CYC: 47 SL:185 +FB4A 30 29 BMI $FB75 A:6E X:02 Y:EB P:65 SP:F9 CYC: 53 SL:185 +FB4C 90 27 BCC $FB75 A:6E X:02 Y:EB P:65 SP:F9 CYC: 59 SL:185 +FB4E C9 6E CMP #$6E A:6E X:02 Y:EB P:65 SP:F9 CYC: 65 SL:185 +FB50 D0 23 BNE $FB75 A:6E X:02 Y:EB P:67 SP:F9 CYC: 71 SL:185 +FB52 60 RTS A:6E X:02 Y:EB P:67 SP:F9 CYC: 77 SL:185 +F32D AD 47 06 LDA $0647 = 1B A:6E X:02 Y:EB P:67 SP:FB CYC: 95 SL:185 +F330 C9 1B CMP #$1B A:1B X:02 Y:EB P:65 SP:FB CYC:107 SL:185 +F332 F0 02 BEQ $F336 A:1B X:02 Y:EB P:67 SP:FB CYC:113 SL:185 +F336 C8 INY A:1B X:02 Y:EB P:67 SP:FB CYC:122 SL:185 +F337 A9 A5 LDA #$A5 A:1B X:02 Y:EC P:E5 SP:FB CYC:128 SL:185 +F339 85 47 STA $47 = 47 A:A5 X:02 Y:EC P:E5 SP:FB CYC:134 SL:185 +F33B 20 1D FB JSR $FB1D A:A5 X:02 Y:EC P:E5 SP:FB CYC:143 SL:185 +FB1D 24 01 BIT $01 = FF A:A5 X:02 Y:EC P:E5 SP:F9 CYC:161 SL:185 +FB1F 18 CLC A:A5 X:02 Y:EC P:E5 SP:F9 CYC:170 SL:185 +FB20 A9 B3 LDA #$B3 A:A5 X:02 Y:EC P:E4 SP:F9 CYC:176 SL:185 +FB22 60 RTS A:B3 X:02 Y:EC P:E4 SP:F9 CYC:182 SL:185 +F33E 47 47 *SRE $47 = A5 A:B3 X:02 Y:EC P:E4 SP:FB CYC:200 SL:185 +F340 EA NOP A:E1 X:02 Y:EC P:E5 SP:FB CYC:215 SL:185 +F341 EA NOP A:E1 X:02 Y:EC P:E5 SP:FB CYC:221 SL:185 +F342 EA NOP A:E1 X:02 Y:EC P:E5 SP:FB CYC:227 SL:185 +F343 EA NOP A:E1 X:02 Y:EC P:E5 SP:FB CYC:233 SL:185 +F344 20 23 FB JSR $FB23 A:E1 X:02 Y:EC P:E5 SP:FB CYC:239 SL:185 +FB23 50 50 BVC $FB75 A:E1 X:02 Y:EC P:E5 SP:F9 CYC:257 SL:185 +FB25 90 4E BCC $FB75 A:E1 X:02 Y:EC P:E5 SP:F9 CYC:263 SL:185 +FB27 10 4C BPL $FB75 A:E1 X:02 Y:EC P:E5 SP:F9 CYC:269 SL:185 +FB29 C9 E1 CMP #$E1 A:E1 X:02 Y:EC P:E5 SP:F9 CYC:275 SL:185 +FB2B D0 48 BNE $FB75 A:E1 X:02 Y:EC P:67 SP:F9 CYC:281 SL:185 +FB2D 60 RTS A:E1 X:02 Y:EC P:67 SP:F9 CYC:287 SL:185 +F347 A5 47 LDA $47 = 52 A:E1 X:02 Y:EC P:67 SP:FB CYC:305 SL:185 +F349 C9 52 CMP #$52 A:52 X:02 Y:EC P:65 SP:FB CYC:314 SL:185 +F34B F0 02 BEQ $F34F A:52 X:02 Y:EC P:67 SP:FB CYC:320 SL:185 +F34F C8 INY A:52 X:02 Y:EC P:67 SP:FB CYC:329 SL:185 +F350 A9 29 LDA #$29 A:52 X:02 Y:ED P:E5 SP:FB CYC:335 SL:185 +F352 85 47 STA $47 = 52 A:29 X:02 Y:ED P:65 SP:FB CYC: 0 SL:186 +F354 20 2E FB JSR $FB2E A:29 X:02 Y:ED P:65 SP:FB CYC: 9 SL:186 +FB2E B8 CLV A:29 X:02 Y:ED P:65 SP:F9 CYC: 27 SL:186 +FB2F 18 CLC A:29 X:02 Y:ED P:25 SP:F9 CYC: 33 SL:186 +FB30 A9 42 LDA #$42 A:29 X:02 Y:ED P:24 SP:F9 CYC: 39 SL:186 +FB32 60 RTS A:42 X:02 Y:ED P:24 SP:F9 CYC: 45 SL:186 +F357 47 47 *SRE $47 = 29 A:42 X:02 Y:ED P:24 SP:FB CYC: 63 SL:186 +F359 EA NOP A:56 X:02 Y:ED P:25 SP:FB CYC: 78 SL:186 +F35A EA NOP A:56 X:02 Y:ED P:25 SP:FB CYC: 84 SL:186 +F35B EA NOP A:56 X:02 Y:ED P:25 SP:FB CYC: 90 SL:186 +F35C EA NOP A:56 X:02 Y:ED P:25 SP:FB CYC: 96 SL:186 +F35D 20 33 FB JSR $FB33 A:56 X:02 Y:ED P:25 SP:FB CYC:102 SL:186 +FB33 70 40 BVS $FB75 A:56 X:02 Y:ED P:25 SP:F9 CYC:120 SL:186 +FB35 F0 3E BEQ $FB75 A:56 X:02 Y:ED P:25 SP:F9 CYC:126 SL:186 +FB37 30 3C BMI $FB75 A:56 X:02 Y:ED P:25 SP:F9 CYC:132 SL:186 +FB39 90 3A BCC $FB75 A:56 X:02 Y:ED P:25 SP:F9 CYC:138 SL:186 +FB3B C9 56 CMP #$56 A:56 X:02 Y:ED P:25 SP:F9 CYC:144 SL:186 +FB3D D0 36 BNE $FB75 A:56 X:02 Y:ED P:27 SP:F9 CYC:150 SL:186 +FB3F 60 RTS A:56 X:02 Y:ED P:27 SP:F9 CYC:156 SL:186 +F360 A5 47 LDA $47 = 14 A:56 X:02 Y:ED P:27 SP:FB CYC:174 SL:186 +F362 C9 14 CMP #$14 A:14 X:02 Y:ED P:25 SP:FB CYC:183 SL:186 +F364 F0 02 BEQ $F368 A:14 X:02 Y:ED P:27 SP:FB CYC:189 SL:186 +F368 C8 INY A:14 X:02 Y:ED P:27 SP:FB CYC:198 SL:186 +F369 A9 37 LDA #$37 A:14 X:02 Y:EE P:A5 SP:FB CYC:204 SL:186 +F36B 85 47 STA $47 = 14 A:37 X:02 Y:EE P:25 SP:FB CYC:210 SL:186 +F36D 20 40 FB JSR $FB40 A:37 X:02 Y:EE P:25 SP:FB CYC:219 SL:186 +FB40 24 01 BIT $01 = FF A:37 X:02 Y:EE P:25 SP:F9 CYC:237 SL:186 +FB42 38 SEC A:37 X:02 Y:EE P:E5 SP:F9 CYC:246 SL:186 +FB43 A9 75 LDA #$75 A:37 X:02 Y:EE P:E5 SP:F9 CYC:252 SL:186 +FB45 60 RTS A:75 X:02 Y:EE P:65 SP:F9 CYC:258 SL:186 +F370 47 47 *SRE $47 = 37 A:75 X:02 Y:EE P:65 SP:FB CYC:276 SL:186 +F372 EA NOP A:6E X:02 Y:EE P:65 SP:FB CYC:291 SL:186 +F373 EA NOP A:6E X:02 Y:EE P:65 SP:FB CYC:297 SL:186 +F374 EA NOP A:6E X:02 Y:EE P:65 SP:FB CYC:303 SL:186 +F375 EA NOP A:6E X:02 Y:EE P:65 SP:FB CYC:309 SL:186 +F376 20 46 FB JSR $FB46 A:6E X:02 Y:EE P:65 SP:FB CYC:315 SL:186 +FB46 50 2D BVC $FB75 A:6E X:02 Y:EE P:65 SP:F9 CYC:333 SL:186 +FB48 F0 2B BEQ $FB75 A:6E X:02 Y:EE P:65 SP:F9 CYC:339 SL:186 +FB4A 30 29 BMI $FB75 A:6E X:02 Y:EE P:65 SP:F9 CYC: 4 SL:187 +FB4C 90 27 BCC $FB75 A:6E X:02 Y:EE P:65 SP:F9 CYC: 10 SL:187 +FB4E C9 6E CMP #$6E A:6E X:02 Y:EE P:65 SP:F9 CYC: 16 SL:187 +FB50 D0 23 BNE $FB75 A:6E X:02 Y:EE P:67 SP:F9 CYC: 22 SL:187 +FB52 60 RTS A:6E X:02 Y:EE P:67 SP:F9 CYC: 28 SL:187 +F379 A5 47 LDA $47 = 1B A:6E X:02 Y:EE P:67 SP:FB CYC: 46 SL:187 +F37B C9 1B CMP #$1B A:1B X:02 Y:EE P:65 SP:FB CYC: 55 SL:187 +F37D F0 02 BEQ $F381 A:1B X:02 Y:EE P:67 SP:FB CYC: 61 SL:187 +F381 C8 INY A:1B X:02 Y:EE P:67 SP:FB CYC: 70 SL:187 +F382 A9 A5 LDA #$A5 A:1B X:02 Y:EF P:E5 SP:FB CYC: 76 SL:187 +F384 8D 47 06 STA $0647 = 1B A:A5 X:02 Y:EF P:E5 SP:FB CYC: 82 SL:187 +F387 20 1D FB JSR $FB1D A:A5 X:02 Y:EF P:E5 SP:FB CYC: 94 SL:187 +FB1D 24 01 BIT $01 = FF A:A5 X:02 Y:EF P:E5 SP:F9 CYC:112 SL:187 +FB1F 18 CLC A:A5 X:02 Y:EF P:E5 SP:F9 CYC:121 SL:187 +FB20 A9 B3 LDA #$B3 A:A5 X:02 Y:EF P:E4 SP:F9 CYC:127 SL:187 +FB22 60 RTS A:B3 X:02 Y:EF P:E4 SP:F9 CYC:133 SL:187 +F38A 4F 47 06 *SRE $0647 = A5 A:B3 X:02 Y:EF P:E4 SP:FB CYC:151 SL:187 +F38D EA NOP A:E1 X:02 Y:EF P:E5 SP:FB CYC:169 SL:187 +F38E EA NOP A:E1 X:02 Y:EF P:E5 SP:FB CYC:175 SL:187 +F38F EA NOP A:E1 X:02 Y:EF P:E5 SP:FB CYC:181 SL:187 +F390 EA NOP A:E1 X:02 Y:EF P:E5 SP:FB CYC:187 SL:187 +F391 20 23 FB JSR $FB23 A:E1 X:02 Y:EF P:E5 SP:FB CYC:193 SL:187 +FB23 50 50 BVC $FB75 A:E1 X:02 Y:EF P:E5 SP:F9 CYC:211 SL:187 +FB25 90 4E BCC $FB75 A:E1 X:02 Y:EF P:E5 SP:F9 CYC:217 SL:187 +FB27 10 4C BPL $FB75 A:E1 X:02 Y:EF P:E5 SP:F9 CYC:223 SL:187 +FB29 C9 E1 CMP #$E1 A:E1 X:02 Y:EF P:E5 SP:F9 CYC:229 SL:187 +FB2B D0 48 BNE $FB75 A:E1 X:02 Y:EF P:67 SP:F9 CYC:235 SL:187 +FB2D 60 RTS A:E1 X:02 Y:EF P:67 SP:F9 CYC:241 SL:187 +F394 AD 47 06 LDA $0647 = 52 A:E1 X:02 Y:EF P:67 SP:FB CYC:259 SL:187 +F397 C9 52 CMP #$52 A:52 X:02 Y:EF P:65 SP:FB CYC:271 SL:187 +F399 F0 02 BEQ $F39D A:52 X:02 Y:EF P:67 SP:FB CYC:277 SL:187 +F39D C8 INY A:52 X:02 Y:EF P:67 SP:FB CYC:286 SL:187 +F39E A9 29 LDA #$29 A:52 X:02 Y:F0 P:E5 SP:FB CYC:292 SL:187 +F3A0 8D 47 06 STA $0647 = 52 A:29 X:02 Y:F0 P:65 SP:FB CYC:298 SL:187 +F3A3 20 2E FB JSR $FB2E A:29 X:02 Y:F0 P:65 SP:FB CYC:310 SL:187 +FB2E B8 CLV A:29 X:02 Y:F0 P:65 SP:F9 CYC:328 SL:187 +FB2F 18 CLC A:29 X:02 Y:F0 P:25 SP:F9 CYC:334 SL:187 +FB30 A9 42 LDA #$42 A:29 X:02 Y:F0 P:24 SP:F9 CYC:340 SL:187 +FB32 60 RTS A:42 X:02 Y:F0 P:24 SP:F9 CYC: 5 SL:188 +F3A6 4F 47 06 *SRE $0647 = 29 A:42 X:02 Y:F0 P:24 SP:FB CYC: 23 SL:188 +F3A9 EA NOP A:56 X:02 Y:F0 P:25 SP:FB CYC: 41 SL:188 +F3AA EA NOP A:56 X:02 Y:F0 P:25 SP:FB CYC: 47 SL:188 +F3AB EA NOP A:56 X:02 Y:F0 P:25 SP:FB CYC: 53 SL:188 +F3AC EA NOP A:56 X:02 Y:F0 P:25 SP:FB CYC: 59 SL:188 +F3AD 20 33 FB JSR $FB33 A:56 X:02 Y:F0 P:25 SP:FB CYC: 65 SL:188 +FB33 70 40 BVS $FB75 A:56 X:02 Y:F0 P:25 SP:F9 CYC: 83 SL:188 +FB35 F0 3E BEQ $FB75 A:56 X:02 Y:F0 P:25 SP:F9 CYC: 89 SL:188 +FB37 30 3C BMI $FB75 A:56 X:02 Y:F0 P:25 SP:F9 CYC: 95 SL:188 +FB39 90 3A BCC $FB75 A:56 X:02 Y:F0 P:25 SP:F9 CYC:101 SL:188 +FB3B C9 56 CMP #$56 A:56 X:02 Y:F0 P:25 SP:F9 CYC:107 SL:188 +FB3D D0 36 BNE $FB75 A:56 X:02 Y:F0 P:27 SP:F9 CYC:113 SL:188 +FB3F 60 RTS A:56 X:02 Y:F0 P:27 SP:F9 CYC:119 SL:188 +F3B0 AD 47 06 LDA $0647 = 14 A:56 X:02 Y:F0 P:27 SP:FB CYC:137 SL:188 +F3B3 C9 14 CMP #$14 A:14 X:02 Y:F0 P:25 SP:FB CYC:149 SL:188 +F3B5 F0 02 BEQ $F3B9 A:14 X:02 Y:F0 P:27 SP:FB CYC:155 SL:188 +F3B9 C8 INY A:14 X:02 Y:F0 P:27 SP:FB CYC:164 SL:188 +F3BA A9 37 LDA #$37 A:14 X:02 Y:F1 P:A5 SP:FB CYC:170 SL:188 +F3BC 8D 47 06 STA $0647 = 14 A:37 X:02 Y:F1 P:25 SP:FB CYC:176 SL:188 +F3BF 20 40 FB JSR $FB40 A:37 X:02 Y:F1 P:25 SP:FB CYC:188 SL:188 +FB40 24 01 BIT $01 = FF A:37 X:02 Y:F1 P:25 SP:F9 CYC:206 SL:188 +FB42 38 SEC A:37 X:02 Y:F1 P:E5 SP:F9 CYC:215 SL:188 +FB43 A9 75 LDA #$75 A:37 X:02 Y:F1 P:E5 SP:F9 CYC:221 SL:188 +FB45 60 RTS A:75 X:02 Y:F1 P:65 SP:F9 CYC:227 SL:188 +F3C2 4F 47 06 *SRE $0647 = 37 A:75 X:02 Y:F1 P:65 SP:FB CYC:245 SL:188 +F3C5 EA NOP A:6E X:02 Y:F1 P:65 SP:FB CYC:263 SL:188 +F3C6 EA NOP A:6E X:02 Y:F1 P:65 SP:FB CYC:269 SL:188 +F3C7 EA NOP A:6E X:02 Y:F1 P:65 SP:FB CYC:275 SL:188 +F3C8 EA NOP A:6E X:02 Y:F1 P:65 SP:FB CYC:281 SL:188 +F3C9 20 46 FB JSR $FB46 A:6E X:02 Y:F1 P:65 SP:FB CYC:287 SL:188 +FB46 50 2D BVC $FB75 A:6E X:02 Y:F1 P:65 SP:F9 CYC:305 SL:188 +FB48 F0 2B BEQ $FB75 A:6E X:02 Y:F1 P:65 SP:F9 CYC:311 SL:188 +FB4A 30 29 BMI $FB75 A:6E X:02 Y:F1 P:65 SP:F9 CYC:317 SL:188 +FB4C 90 27 BCC $FB75 A:6E X:02 Y:F1 P:65 SP:F9 CYC:323 SL:188 +FB4E C9 6E CMP #$6E A:6E X:02 Y:F1 P:65 SP:F9 CYC:329 SL:188 +FB50 D0 23 BNE $FB75 A:6E X:02 Y:F1 P:67 SP:F9 CYC:335 SL:188 +FB52 60 RTS A:6E X:02 Y:F1 P:67 SP:F9 CYC: 0 SL:189 +F3CC AD 47 06 LDA $0647 = 1B A:6E X:02 Y:F1 P:67 SP:FB CYC: 18 SL:189 +F3CF C9 1B CMP #$1B A:1B X:02 Y:F1 P:65 SP:FB CYC: 30 SL:189 +F3D1 F0 02 BEQ $F3D5 A:1B X:02 Y:F1 P:67 SP:FB CYC: 36 SL:189 +F3D5 A9 A5 LDA #$A5 A:1B X:02 Y:F1 P:67 SP:FB CYC: 45 SL:189 +F3D7 8D 47 06 STA $0647 = 1B A:A5 X:02 Y:F1 P:E5 SP:FB CYC: 51 SL:189 +F3DA A9 48 LDA #$48 A:A5 X:02 Y:F1 P:E5 SP:FB CYC: 63 SL:189 +F3DC 85 45 STA $45 = 48 A:48 X:02 Y:F1 P:65 SP:FB CYC: 69 SL:189 +F3DE A9 05 LDA #$05 A:48 X:02 Y:F1 P:65 SP:FB CYC: 78 SL:189 +F3E0 85 46 STA $46 = 05 A:05 X:02 Y:F1 P:65 SP:FB CYC: 84 SL:189 +F3E2 A0 FF LDY #$FF A:05 X:02 Y:F1 P:65 SP:FB CYC: 93 SL:189 +F3E4 20 1D FB JSR $FB1D A:05 X:02 Y:FF P:E5 SP:FB CYC: 99 SL:189 +FB1D 24 01 BIT $01 = FF A:05 X:02 Y:FF P:E5 SP:F9 CYC:117 SL:189 +FB1F 18 CLC A:05 X:02 Y:FF P:E5 SP:F9 CYC:126 SL:189 +FB20 A9 B3 LDA #$B3 A:05 X:02 Y:FF P:E4 SP:F9 CYC:132 SL:189 +FB22 60 RTS A:B3 X:02 Y:FF P:E4 SP:F9 CYC:138 SL:189 +F3E7 53 45 *SRE ($45),Y = 0548 @ 0647 = A5 A:B3 X:02 Y:FF P:E4 SP:FB CYC:156 SL:189 +F3E9 EA NOP A:E1 X:02 Y:FF P:E5 SP:FB CYC:180 SL:189 +F3EA EA NOP A:E1 X:02 Y:FF P:E5 SP:FB CYC:186 SL:189 +F3EB 08 PHP A:E1 X:02 Y:FF P:E5 SP:FB CYC:192 SL:189 +F3EC 48 PHA A:E1 X:02 Y:FF P:E5 SP:FA CYC:201 SL:189 +F3ED A0 F2 LDY #$F2 A:E1 X:02 Y:FF P:E5 SP:F9 CYC:210 SL:189 +F3EF 68 PLA A:E1 X:02 Y:F2 P:E5 SP:F9 CYC:216 SL:189 +F3F0 28 PLP A:E1 X:02 Y:F2 P:E5 SP:FA CYC:228 SL:189 +F3F1 20 23 FB JSR $FB23 A:E1 X:02 Y:F2 P:E5 SP:FB CYC:240 SL:189 +FB23 50 50 BVC $FB75 A:E1 X:02 Y:F2 P:E5 SP:F9 CYC:258 SL:189 +FB25 90 4E BCC $FB75 A:E1 X:02 Y:F2 P:E5 SP:F9 CYC:264 SL:189 +FB27 10 4C BPL $FB75 A:E1 X:02 Y:F2 P:E5 SP:F9 CYC:270 SL:189 +FB29 C9 E1 CMP #$E1 A:E1 X:02 Y:F2 P:E5 SP:F9 CYC:276 SL:189 +FB2B D0 48 BNE $FB75 A:E1 X:02 Y:F2 P:67 SP:F9 CYC:282 SL:189 +FB2D 60 RTS A:E1 X:02 Y:F2 P:67 SP:F9 CYC:288 SL:189 +F3F4 AD 47 06 LDA $0647 = 52 A:E1 X:02 Y:F2 P:67 SP:FB CYC:306 SL:189 +F3F7 C9 52 CMP #$52 A:52 X:02 Y:F2 P:65 SP:FB CYC:318 SL:189 +F3F9 F0 02 BEQ $F3FD A:52 X:02 Y:F2 P:67 SP:FB CYC:324 SL:189 +F3FD A0 FF LDY #$FF A:52 X:02 Y:F2 P:67 SP:FB CYC:333 SL:189 +F3FF A9 29 LDA #$29 A:52 X:02 Y:FF P:E5 SP:FB CYC:339 SL:189 +F401 8D 47 06 STA $0647 = 52 A:29 X:02 Y:FF P:65 SP:FB CYC: 4 SL:190 +F404 20 2E FB JSR $FB2E A:29 X:02 Y:FF P:65 SP:FB CYC: 16 SL:190 +FB2E B8 CLV A:29 X:02 Y:FF P:65 SP:F9 CYC: 34 SL:190 +FB2F 18 CLC A:29 X:02 Y:FF P:25 SP:F9 CYC: 40 SL:190 +FB30 A9 42 LDA #$42 A:29 X:02 Y:FF P:24 SP:F9 CYC: 46 SL:190 +FB32 60 RTS A:42 X:02 Y:FF P:24 SP:F9 CYC: 52 SL:190 +F407 53 45 *SRE ($45),Y = 0548 @ 0647 = 29 A:42 X:02 Y:FF P:24 SP:FB CYC: 70 SL:190 +F409 EA NOP A:56 X:02 Y:FF P:25 SP:FB CYC: 94 SL:190 +F40A EA NOP A:56 X:02 Y:FF P:25 SP:FB CYC:100 SL:190 +F40B 08 PHP A:56 X:02 Y:FF P:25 SP:FB CYC:106 SL:190 +F40C 48 PHA A:56 X:02 Y:FF P:25 SP:FA CYC:115 SL:190 +F40D A0 F3 LDY #$F3 A:56 X:02 Y:FF P:25 SP:F9 CYC:124 SL:190 +F40F 68 PLA A:56 X:02 Y:F3 P:A5 SP:F9 CYC:130 SL:190 +F410 28 PLP A:56 X:02 Y:F3 P:25 SP:FA CYC:142 SL:190 +F411 20 33 FB JSR $FB33 A:56 X:02 Y:F3 P:25 SP:FB CYC:154 SL:190 +FB33 70 40 BVS $FB75 A:56 X:02 Y:F3 P:25 SP:F9 CYC:172 SL:190 +FB35 F0 3E BEQ $FB75 A:56 X:02 Y:F3 P:25 SP:F9 CYC:178 SL:190 +FB37 30 3C BMI $FB75 A:56 X:02 Y:F3 P:25 SP:F9 CYC:184 SL:190 +FB39 90 3A BCC $FB75 A:56 X:02 Y:F3 P:25 SP:F9 CYC:190 SL:190 +FB3B C9 56 CMP #$56 A:56 X:02 Y:F3 P:25 SP:F9 CYC:196 SL:190 +FB3D D0 36 BNE $FB75 A:56 X:02 Y:F3 P:27 SP:F9 CYC:202 SL:190 +FB3F 60 RTS A:56 X:02 Y:F3 P:27 SP:F9 CYC:208 SL:190 +F414 AD 47 06 LDA $0647 = 14 A:56 X:02 Y:F3 P:27 SP:FB CYC:226 SL:190 +F417 C9 14 CMP #$14 A:14 X:02 Y:F3 P:25 SP:FB CYC:238 SL:190 +F419 F0 02 BEQ $F41D A:14 X:02 Y:F3 P:27 SP:FB CYC:244 SL:190 +F41D A0 FF LDY #$FF A:14 X:02 Y:F3 P:27 SP:FB CYC:253 SL:190 +F41F A9 37 LDA #$37 A:14 X:02 Y:FF P:A5 SP:FB CYC:259 SL:190 +F421 8D 47 06 STA $0647 = 14 A:37 X:02 Y:FF P:25 SP:FB CYC:265 SL:190 +F424 20 40 FB JSR $FB40 A:37 X:02 Y:FF P:25 SP:FB CYC:277 SL:190 +FB40 24 01 BIT $01 = FF A:37 X:02 Y:FF P:25 SP:F9 CYC:295 SL:190 +FB42 38 SEC A:37 X:02 Y:FF P:E5 SP:F9 CYC:304 SL:190 +FB43 A9 75 LDA #$75 A:37 X:02 Y:FF P:E5 SP:F9 CYC:310 SL:190 +FB45 60 RTS A:75 X:02 Y:FF P:65 SP:F9 CYC:316 SL:190 +F427 53 45 *SRE ($45),Y = 0548 @ 0647 = 37 A:75 X:02 Y:FF P:65 SP:FB CYC:334 SL:190 +F429 EA NOP A:6E X:02 Y:FF P:65 SP:FB CYC: 17 SL:191 +F42A EA NOP A:6E X:02 Y:FF P:65 SP:FB CYC: 23 SL:191 +F42B 08 PHP A:6E X:02 Y:FF P:65 SP:FB CYC: 29 SL:191 +F42C 48 PHA A:6E X:02 Y:FF P:65 SP:FA CYC: 38 SL:191 +F42D A0 F4 LDY #$F4 A:6E X:02 Y:FF P:65 SP:F9 CYC: 47 SL:191 +F42F 68 PLA A:6E X:02 Y:F4 P:E5 SP:F9 CYC: 53 SL:191 +F430 28 PLP A:6E X:02 Y:F4 P:65 SP:FA CYC: 65 SL:191 +F431 20 46 FB JSR $FB46 A:6E X:02 Y:F4 P:65 SP:FB CYC: 77 SL:191 +FB46 50 2D BVC $FB75 A:6E X:02 Y:F4 P:65 SP:F9 CYC: 95 SL:191 +FB48 F0 2B BEQ $FB75 A:6E X:02 Y:F4 P:65 SP:F9 CYC:101 SL:191 +FB4A 30 29 BMI $FB75 A:6E X:02 Y:F4 P:65 SP:F9 CYC:107 SL:191 +FB4C 90 27 BCC $FB75 A:6E X:02 Y:F4 P:65 SP:F9 CYC:113 SL:191 +FB4E C9 6E CMP #$6E A:6E X:02 Y:F4 P:65 SP:F9 CYC:119 SL:191 +FB50 D0 23 BNE $FB75 A:6E X:02 Y:F4 P:67 SP:F9 CYC:125 SL:191 +FB52 60 RTS A:6E X:02 Y:F4 P:67 SP:F9 CYC:131 SL:191 +F434 AD 47 06 LDA $0647 = 1B A:6E X:02 Y:F4 P:67 SP:FB CYC:149 SL:191 +F437 C9 1B CMP #$1B A:1B X:02 Y:F4 P:65 SP:FB CYC:161 SL:191 +F439 F0 02 BEQ $F43D A:1B X:02 Y:F4 P:67 SP:FB CYC:167 SL:191 +F43D A0 F5 LDY #$F5 A:1B X:02 Y:F4 P:67 SP:FB CYC:176 SL:191 +F43F A2 FF LDX #$FF A:1B X:02 Y:F5 P:E5 SP:FB CYC:182 SL:191 +F441 A9 A5 LDA #$A5 A:1B X:FF Y:F5 P:E5 SP:FB CYC:188 SL:191 +F443 85 47 STA $47 = 1B A:A5 X:FF Y:F5 P:E5 SP:FB CYC:194 SL:191 +F445 20 1D FB JSR $FB1D A:A5 X:FF Y:F5 P:E5 SP:FB CYC:203 SL:191 +FB1D 24 01 BIT $01 = FF A:A5 X:FF Y:F5 P:E5 SP:F9 CYC:221 SL:191 +FB1F 18 CLC A:A5 X:FF Y:F5 P:E5 SP:F9 CYC:230 SL:191 +FB20 A9 B3 LDA #$B3 A:A5 X:FF Y:F5 P:E4 SP:F9 CYC:236 SL:191 +FB22 60 RTS A:B3 X:FF Y:F5 P:E4 SP:F9 CYC:242 SL:191 +F448 57 48 *SRE $48,X @ 47 = A5 A:B3 X:FF Y:F5 P:E4 SP:FB CYC:260 SL:191 +F44A EA NOP A:E1 X:FF Y:F5 P:E5 SP:FB CYC:278 SL:191 +F44B EA NOP A:E1 X:FF Y:F5 P:E5 SP:FB CYC:284 SL:191 +F44C EA NOP A:E1 X:FF Y:F5 P:E5 SP:FB CYC:290 SL:191 +F44D EA NOP A:E1 X:FF Y:F5 P:E5 SP:FB CYC:296 SL:191 +F44E 20 23 FB JSR $FB23 A:E1 X:FF Y:F5 P:E5 SP:FB CYC:302 SL:191 +FB23 50 50 BVC $FB75 A:E1 X:FF Y:F5 P:E5 SP:F9 CYC:320 SL:191 +FB25 90 4E BCC $FB75 A:E1 X:FF Y:F5 P:E5 SP:F9 CYC:326 SL:191 +FB27 10 4C BPL $FB75 A:E1 X:FF Y:F5 P:E5 SP:F9 CYC:332 SL:191 +FB29 C9 E1 CMP #$E1 A:E1 X:FF Y:F5 P:E5 SP:F9 CYC:338 SL:191 +FB2B D0 48 BNE $FB75 A:E1 X:FF Y:F5 P:67 SP:F9 CYC: 3 SL:192 +FB2D 60 RTS A:E1 X:FF Y:F5 P:67 SP:F9 CYC: 9 SL:192 +F451 A5 47 LDA $47 = 52 A:E1 X:FF Y:F5 P:67 SP:FB CYC: 27 SL:192 +F453 C9 52 CMP #$52 A:52 X:FF Y:F5 P:65 SP:FB CYC: 36 SL:192 +F455 F0 02 BEQ $F459 A:52 X:FF Y:F5 P:67 SP:FB CYC: 42 SL:192 +F459 C8 INY A:52 X:FF Y:F5 P:67 SP:FB CYC: 51 SL:192 +F45A A9 29 LDA #$29 A:52 X:FF Y:F6 P:E5 SP:FB CYC: 57 SL:192 +F45C 85 47 STA $47 = 52 A:29 X:FF Y:F6 P:65 SP:FB CYC: 63 SL:192 +F45E 20 2E FB JSR $FB2E A:29 X:FF Y:F6 P:65 SP:FB CYC: 72 SL:192 +FB2E B8 CLV A:29 X:FF Y:F6 P:65 SP:F9 CYC: 90 SL:192 +FB2F 18 CLC A:29 X:FF Y:F6 P:25 SP:F9 CYC: 96 SL:192 +FB30 A9 42 LDA #$42 A:29 X:FF Y:F6 P:24 SP:F9 CYC:102 SL:192 +FB32 60 RTS A:42 X:FF Y:F6 P:24 SP:F9 CYC:108 SL:192 +F461 57 48 *SRE $48,X @ 47 = 29 A:42 X:FF Y:F6 P:24 SP:FB CYC:126 SL:192 +F463 EA NOP A:56 X:FF Y:F6 P:25 SP:FB CYC:144 SL:192 +F464 EA NOP A:56 X:FF Y:F6 P:25 SP:FB CYC:150 SL:192 +F465 EA NOP A:56 X:FF Y:F6 P:25 SP:FB CYC:156 SL:192 +F466 EA NOP A:56 X:FF Y:F6 P:25 SP:FB CYC:162 SL:192 +F467 20 33 FB JSR $FB33 A:56 X:FF Y:F6 P:25 SP:FB CYC:168 SL:192 +FB33 70 40 BVS $FB75 A:56 X:FF Y:F6 P:25 SP:F9 CYC:186 SL:192 +FB35 F0 3E BEQ $FB75 A:56 X:FF Y:F6 P:25 SP:F9 CYC:192 SL:192 +FB37 30 3C BMI $FB75 A:56 X:FF Y:F6 P:25 SP:F9 CYC:198 SL:192 +FB39 90 3A BCC $FB75 A:56 X:FF Y:F6 P:25 SP:F9 CYC:204 SL:192 +FB3B C9 56 CMP #$56 A:56 X:FF Y:F6 P:25 SP:F9 CYC:210 SL:192 +FB3D D0 36 BNE $FB75 A:56 X:FF Y:F6 P:27 SP:F9 CYC:216 SL:192 +FB3F 60 RTS A:56 X:FF Y:F6 P:27 SP:F9 CYC:222 SL:192 +F46A A5 47 LDA $47 = 14 A:56 X:FF Y:F6 P:27 SP:FB CYC:240 SL:192 +F46C C9 14 CMP #$14 A:14 X:FF Y:F6 P:25 SP:FB CYC:249 SL:192 +F46E F0 02 BEQ $F472 A:14 X:FF Y:F6 P:27 SP:FB CYC:255 SL:192 +F472 C8 INY A:14 X:FF Y:F6 P:27 SP:FB CYC:264 SL:192 +F473 A9 37 LDA #$37 A:14 X:FF Y:F7 P:A5 SP:FB CYC:270 SL:192 +F475 85 47 STA $47 = 14 A:37 X:FF Y:F7 P:25 SP:FB CYC:276 SL:192 +F477 20 40 FB JSR $FB40 A:37 X:FF Y:F7 P:25 SP:FB CYC:285 SL:192 +FB40 24 01 BIT $01 = FF A:37 X:FF Y:F7 P:25 SP:F9 CYC:303 SL:192 +FB42 38 SEC A:37 X:FF Y:F7 P:E5 SP:F9 CYC:312 SL:192 +FB43 A9 75 LDA #$75 A:37 X:FF Y:F7 P:E5 SP:F9 CYC:318 SL:192 +FB45 60 RTS A:75 X:FF Y:F7 P:65 SP:F9 CYC:324 SL:192 +F47A 57 48 *SRE $48,X @ 47 = 37 A:75 X:FF Y:F7 P:65 SP:FB CYC: 1 SL:193 +F47C EA NOP A:6E X:FF Y:F7 P:65 SP:FB CYC: 19 SL:193 +F47D EA NOP A:6E X:FF Y:F7 P:65 SP:FB CYC: 25 SL:193 +F47E EA NOP A:6E X:FF Y:F7 P:65 SP:FB CYC: 31 SL:193 +F47F EA NOP A:6E X:FF Y:F7 P:65 SP:FB CYC: 37 SL:193 +F480 20 46 FB JSR $FB46 A:6E X:FF Y:F7 P:65 SP:FB CYC: 43 SL:193 +FB46 50 2D BVC $FB75 A:6E X:FF Y:F7 P:65 SP:F9 CYC: 61 SL:193 +FB48 F0 2B BEQ $FB75 A:6E X:FF Y:F7 P:65 SP:F9 CYC: 67 SL:193 +FB4A 30 29 BMI $FB75 A:6E X:FF Y:F7 P:65 SP:F9 CYC: 73 SL:193 +FB4C 90 27 BCC $FB75 A:6E X:FF Y:F7 P:65 SP:F9 CYC: 79 SL:193 +FB4E C9 6E CMP #$6E A:6E X:FF Y:F7 P:65 SP:F9 CYC: 85 SL:193 +FB50 D0 23 BNE $FB75 A:6E X:FF Y:F7 P:67 SP:F9 CYC: 91 SL:193 +FB52 60 RTS A:6E X:FF Y:F7 P:67 SP:F9 CYC: 97 SL:193 +F483 A5 47 LDA $47 = 1B A:6E X:FF Y:F7 P:67 SP:FB CYC:115 SL:193 +F485 C9 1B CMP #$1B A:1B X:FF Y:F7 P:65 SP:FB CYC:124 SL:193 +F487 F0 02 BEQ $F48B A:1B X:FF Y:F7 P:67 SP:FB CYC:130 SL:193 +F48B A9 A5 LDA #$A5 A:1B X:FF Y:F7 P:67 SP:FB CYC:139 SL:193 +F48D 8D 47 06 STA $0647 = 1B A:A5 X:FF Y:F7 P:E5 SP:FB CYC:145 SL:193 +F490 A0 FF LDY #$FF A:A5 X:FF Y:F7 P:E5 SP:FB CYC:157 SL:193 +F492 20 1D FB JSR $FB1D A:A5 X:FF Y:FF P:E5 SP:FB CYC:163 SL:193 +FB1D 24 01 BIT $01 = FF A:A5 X:FF Y:FF P:E5 SP:F9 CYC:181 SL:193 +FB1F 18 CLC A:A5 X:FF Y:FF P:E5 SP:F9 CYC:190 SL:193 +FB20 A9 B3 LDA #$B3 A:A5 X:FF Y:FF P:E4 SP:F9 CYC:196 SL:193 +FB22 60 RTS A:B3 X:FF Y:FF P:E4 SP:F9 CYC:202 SL:193 +F495 5B 48 05 *SRE $0548,Y @ 0647 = A5 A:B3 X:FF Y:FF P:E4 SP:FB CYC:220 SL:193 +F498 EA NOP A:E1 X:FF Y:FF P:E5 SP:FB CYC:241 SL:193 +F499 EA NOP A:E1 X:FF Y:FF P:E5 SP:FB CYC:247 SL:193 +F49A 08 PHP A:E1 X:FF Y:FF P:E5 SP:FB CYC:253 SL:193 +F49B 48 PHA A:E1 X:FF Y:FF P:E5 SP:FA CYC:262 SL:193 +F49C A0 F8 LDY #$F8 A:E1 X:FF Y:FF P:E5 SP:F9 CYC:271 SL:193 +F49E 68 PLA A:E1 X:FF Y:F8 P:E5 SP:F9 CYC:277 SL:193 +F49F 28 PLP A:E1 X:FF Y:F8 P:E5 SP:FA CYC:289 SL:193 +F4A0 20 23 FB JSR $FB23 A:E1 X:FF Y:F8 P:E5 SP:FB CYC:301 SL:193 +FB23 50 50 BVC $FB75 A:E1 X:FF Y:F8 P:E5 SP:F9 CYC:319 SL:193 +FB25 90 4E BCC $FB75 A:E1 X:FF Y:F8 P:E5 SP:F9 CYC:325 SL:193 +FB27 10 4C BPL $FB75 A:E1 X:FF Y:F8 P:E5 SP:F9 CYC:331 SL:193 +FB29 C9 E1 CMP #$E1 A:E1 X:FF Y:F8 P:E5 SP:F9 CYC:337 SL:193 +FB2B D0 48 BNE $FB75 A:E1 X:FF Y:F8 P:67 SP:F9 CYC: 2 SL:194 +FB2D 60 RTS A:E1 X:FF Y:F8 P:67 SP:F9 CYC: 8 SL:194 +F4A3 AD 47 06 LDA $0647 = 52 A:E1 X:FF Y:F8 P:67 SP:FB CYC: 26 SL:194 +F4A6 C9 52 CMP #$52 A:52 X:FF Y:F8 P:65 SP:FB CYC: 38 SL:194 +F4A8 F0 02 BEQ $F4AC A:52 X:FF Y:F8 P:67 SP:FB CYC: 44 SL:194 +F4AC A0 FF LDY #$FF A:52 X:FF Y:F8 P:67 SP:FB CYC: 53 SL:194 +F4AE A9 29 LDA #$29 A:52 X:FF Y:FF P:E5 SP:FB CYC: 59 SL:194 +F4B0 8D 47 06 STA $0647 = 52 A:29 X:FF Y:FF P:65 SP:FB CYC: 65 SL:194 +F4B3 20 2E FB JSR $FB2E A:29 X:FF Y:FF P:65 SP:FB CYC: 77 SL:194 +FB2E B8 CLV A:29 X:FF Y:FF P:65 SP:F9 CYC: 95 SL:194 +FB2F 18 CLC A:29 X:FF Y:FF P:25 SP:F9 CYC:101 SL:194 +FB30 A9 42 LDA #$42 A:29 X:FF Y:FF P:24 SP:F9 CYC:107 SL:194 +FB32 60 RTS A:42 X:FF Y:FF P:24 SP:F9 CYC:113 SL:194 +F4B6 5B 48 05 *SRE $0548,Y @ 0647 = 29 A:42 X:FF Y:FF P:24 SP:FB CYC:131 SL:194 +F4B9 EA NOP A:56 X:FF Y:FF P:25 SP:FB CYC:152 SL:194 +F4BA EA NOP A:56 X:FF Y:FF P:25 SP:FB CYC:158 SL:194 +F4BB 08 PHP A:56 X:FF Y:FF P:25 SP:FB CYC:164 SL:194 +F4BC 48 PHA A:56 X:FF Y:FF P:25 SP:FA CYC:173 SL:194 +F4BD A0 F9 LDY #$F9 A:56 X:FF Y:FF P:25 SP:F9 CYC:182 SL:194 +F4BF 68 PLA A:56 X:FF Y:F9 P:A5 SP:F9 CYC:188 SL:194 +F4C0 28 PLP A:56 X:FF Y:F9 P:25 SP:FA CYC:200 SL:194 +F4C1 20 33 FB JSR $FB33 A:56 X:FF Y:F9 P:25 SP:FB CYC:212 SL:194 +FB33 70 40 BVS $FB75 A:56 X:FF Y:F9 P:25 SP:F9 CYC:230 SL:194 +FB35 F0 3E BEQ $FB75 A:56 X:FF Y:F9 P:25 SP:F9 CYC:236 SL:194 +FB37 30 3C BMI $FB75 A:56 X:FF Y:F9 P:25 SP:F9 CYC:242 SL:194 +FB39 90 3A BCC $FB75 A:56 X:FF Y:F9 P:25 SP:F9 CYC:248 SL:194 +FB3B C9 56 CMP #$56 A:56 X:FF Y:F9 P:25 SP:F9 CYC:254 SL:194 +FB3D D0 36 BNE $FB75 A:56 X:FF Y:F9 P:27 SP:F9 CYC:260 SL:194 +FB3F 60 RTS A:56 X:FF Y:F9 P:27 SP:F9 CYC:266 SL:194 +F4C4 AD 47 06 LDA $0647 = 14 A:56 X:FF Y:F9 P:27 SP:FB CYC:284 SL:194 +F4C7 C9 14 CMP #$14 A:14 X:FF Y:F9 P:25 SP:FB CYC:296 SL:194 +F4C9 F0 02 BEQ $F4CD A:14 X:FF Y:F9 P:27 SP:FB CYC:302 SL:194 +F4CD A0 FF LDY #$FF A:14 X:FF Y:F9 P:27 SP:FB CYC:311 SL:194 +F4CF A9 37 LDA #$37 A:14 X:FF Y:FF P:A5 SP:FB CYC:317 SL:194 +F4D1 8D 47 06 STA $0647 = 14 A:37 X:FF Y:FF P:25 SP:FB CYC:323 SL:194 +F4D4 20 40 FB JSR $FB40 A:37 X:FF Y:FF P:25 SP:FB CYC:335 SL:194 +FB40 24 01 BIT $01 = FF A:37 X:FF Y:FF P:25 SP:F9 CYC: 12 SL:195 +FB42 38 SEC A:37 X:FF Y:FF P:E5 SP:F9 CYC: 21 SL:195 +FB43 A9 75 LDA #$75 A:37 X:FF Y:FF P:E5 SP:F9 CYC: 27 SL:195 +FB45 60 RTS A:75 X:FF Y:FF P:65 SP:F9 CYC: 33 SL:195 +F4D7 5B 48 05 *SRE $0548,Y @ 0647 = 37 A:75 X:FF Y:FF P:65 SP:FB CYC: 51 SL:195 +F4DA EA NOP A:6E X:FF Y:FF P:65 SP:FB CYC: 72 SL:195 +F4DB EA NOP A:6E X:FF Y:FF P:65 SP:FB CYC: 78 SL:195 +F4DC 08 PHP A:6E X:FF Y:FF P:65 SP:FB CYC: 84 SL:195 +F4DD 48 PHA A:6E X:FF Y:FF P:65 SP:FA CYC: 93 SL:195 +F4DE A0 FA LDY #$FA A:6E X:FF Y:FF P:65 SP:F9 CYC:102 SL:195 +F4E0 68 PLA A:6E X:FF Y:FA P:E5 SP:F9 CYC:108 SL:195 +F4E1 28 PLP A:6E X:FF Y:FA P:65 SP:FA CYC:120 SL:195 +F4E2 20 46 FB JSR $FB46 A:6E X:FF Y:FA P:65 SP:FB CYC:132 SL:195 +FB46 50 2D BVC $FB75 A:6E X:FF Y:FA P:65 SP:F9 CYC:150 SL:195 +FB48 F0 2B BEQ $FB75 A:6E X:FF Y:FA P:65 SP:F9 CYC:156 SL:195 +FB4A 30 29 BMI $FB75 A:6E X:FF Y:FA P:65 SP:F9 CYC:162 SL:195 +FB4C 90 27 BCC $FB75 A:6E X:FF Y:FA P:65 SP:F9 CYC:168 SL:195 +FB4E C9 6E CMP #$6E A:6E X:FF Y:FA P:65 SP:F9 CYC:174 SL:195 +FB50 D0 23 BNE $FB75 A:6E X:FF Y:FA P:67 SP:F9 CYC:180 SL:195 +FB52 60 RTS A:6E X:FF Y:FA P:67 SP:F9 CYC:186 SL:195 +F4E5 AD 47 06 LDA $0647 = 1B A:6E X:FF Y:FA P:67 SP:FB CYC:204 SL:195 +F4E8 C9 1B CMP #$1B A:1B X:FF Y:FA P:65 SP:FB CYC:216 SL:195 +F4EA F0 02 BEQ $F4EE A:1B X:FF Y:FA P:67 SP:FB CYC:222 SL:195 +F4EE A0 FB LDY #$FB A:1B X:FF Y:FA P:67 SP:FB CYC:231 SL:195 +F4F0 A2 FF LDX #$FF A:1B X:FF Y:FB P:E5 SP:FB CYC:237 SL:195 +F4F2 A9 A5 LDA #$A5 A:1B X:FF Y:FB P:E5 SP:FB CYC:243 SL:195 +F4F4 8D 47 06 STA $0647 = 1B A:A5 X:FF Y:FB P:E5 SP:FB CYC:249 SL:195 +F4F7 20 1D FB JSR $FB1D A:A5 X:FF Y:FB P:E5 SP:FB CYC:261 SL:195 +FB1D 24 01 BIT $01 = FF A:A5 X:FF Y:FB P:E5 SP:F9 CYC:279 SL:195 +FB1F 18 CLC A:A5 X:FF Y:FB P:E5 SP:F9 CYC:288 SL:195 +FB20 A9 B3 LDA #$B3 A:A5 X:FF Y:FB P:E4 SP:F9 CYC:294 SL:195 +FB22 60 RTS A:B3 X:FF Y:FB P:E4 SP:F9 CYC:300 SL:195 +F4FA 5F 48 05 *SRE $0548,X @ 0647 = A5 A:B3 X:FF Y:FB P:E4 SP:FB CYC:318 SL:195 +F4FD EA NOP A:E1 X:FF Y:FB P:E5 SP:FB CYC:339 SL:195 +F4FE EA NOP A:E1 X:FF Y:FB P:E5 SP:FB CYC: 4 SL:196 +F4FF EA NOP A:E1 X:FF Y:FB P:E5 SP:FB CYC: 10 SL:196 +F500 EA NOP A:E1 X:FF Y:FB P:E5 SP:FB CYC: 16 SL:196 +F501 20 23 FB JSR $FB23 A:E1 X:FF Y:FB P:E5 SP:FB CYC: 22 SL:196 +FB23 50 50 BVC $FB75 A:E1 X:FF Y:FB P:E5 SP:F9 CYC: 40 SL:196 +FB25 90 4E BCC $FB75 A:E1 X:FF Y:FB P:E5 SP:F9 CYC: 46 SL:196 +FB27 10 4C BPL $FB75 A:E1 X:FF Y:FB P:E5 SP:F9 CYC: 52 SL:196 +FB29 C9 E1 CMP #$E1 A:E1 X:FF Y:FB P:E5 SP:F9 CYC: 58 SL:196 +FB2B D0 48 BNE $FB75 A:E1 X:FF Y:FB P:67 SP:F9 CYC: 64 SL:196 +FB2D 60 RTS A:E1 X:FF Y:FB P:67 SP:F9 CYC: 70 SL:196 +F504 AD 47 06 LDA $0647 = 52 A:E1 X:FF Y:FB P:67 SP:FB CYC: 88 SL:196 +F507 C9 52 CMP #$52 A:52 X:FF Y:FB P:65 SP:FB CYC:100 SL:196 +F509 F0 02 BEQ $F50D A:52 X:FF Y:FB P:67 SP:FB CYC:106 SL:196 +F50D C8 INY A:52 X:FF Y:FB P:67 SP:FB CYC:115 SL:196 +F50E A9 29 LDA #$29 A:52 X:FF Y:FC P:E5 SP:FB CYC:121 SL:196 +F510 8D 47 06 STA $0647 = 52 A:29 X:FF Y:FC P:65 SP:FB CYC:127 SL:196 +F513 20 2E FB JSR $FB2E A:29 X:FF Y:FC P:65 SP:FB CYC:139 SL:196 +FB2E B8 CLV A:29 X:FF Y:FC P:65 SP:F9 CYC:157 SL:196 +FB2F 18 CLC A:29 X:FF Y:FC P:25 SP:F9 CYC:163 SL:196 +FB30 A9 42 LDA #$42 A:29 X:FF Y:FC P:24 SP:F9 CYC:169 SL:196 +FB32 60 RTS A:42 X:FF Y:FC P:24 SP:F9 CYC:175 SL:196 +F516 5F 48 05 *SRE $0548,X @ 0647 = 29 A:42 X:FF Y:FC P:24 SP:FB CYC:193 SL:196 +F519 EA NOP A:56 X:FF Y:FC P:25 SP:FB CYC:214 SL:196 +F51A EA NOP A:56 X:FF Y:FC P:25 SP:FB CYC:220 SL:196 +F51B EA NOP A:56 X:FF Y:FC P:25 SP:FB CYC:226 SL:196 +F51C EA NOP A:56 X:FF Y:FC P:25 SP:FB CYC:232 SL:196 +F51D 20 33 FB JSR $FB33 A:56 X:FF Y:FC P:25 SP:FB CYC:238 SL:196 +FB33 70 40 BVS $FB75 A:56 X:FF Y:FC P:25 SP:F9 CYC:256 SL:196 +FB35 F0 3E BEQ $FB75 A:56 X:FF Y:FC P:25 SP:F9 CYC:262 SL:196 +FB37 30 3C BMI $FB75 A:56 X:FF Y:FC P:25 SP:F9 CYC:268 SL:196 +FB39 90 3A BCC $FB75 A:56 X:FF Y:FC P:25 SP:F9 CYC:274 SL:196 +FB3B C9 56 CMP #$56 A:56 X:FF Y:FC P:25 SP:F9 CYC:280 SL:196 +FB3D D0 36 BNE $FB75 A:56 X:FF Y:FC P:27 SP:F9 CYC:286 SL:196 +FB3F 60 RTS A:56 X:FF Y:FC P:27 SP:F9 CYC:292 SL:196 +F520 AD 47 06 LDA $0647 = 14 A:56 X:FF Y:FC P:27 SP:FB CYC:310 SL:196 +F523 C9 14 CMP #$14 A:14 X:FF Y:FC P:25 SP:FB CYC:322 SL:196 +F525 F0 02 BEQ $F529 A:14 X:FF Y:FC P:27 SP:FB CYC:328 SL:196 +F529 C8 INY A:14 X:FF Y:FC P:27 SP:FB CYC:337 SL:196 +F52A A9 37 LDA #$37 A:14 X:FF Y:FD P:A5 SP:FB CYC: 2 SL:197 +F52C 8D 47 06 STA $0647 = 14 A:37 X:FF Y:FD P:25 SP:FB CYC: 8 SL:197 +F52F 20 40 FB JSR $FB40 A:37 X:FF Y:FD P:25 SP:FB CYC: 20 SL:197 +FB40 24 01 BIT $01 = FF A:37 X:FF Y:FD P:25 SP:F9 CYC: 38 SL:197 +FB42 38 SEC A:37 X:FF Y:FD P:E5 SP:F9 CYC: 47 SL:197 +FB43 A9 75 LDA #$75 A:37 X:FF Y:FD P:E5 SP:F9 CYC: 53 SL:197 +FB45 60 RTS A:75 X:FF Y:FD P:65 SP:F9 CYC: 59 SL:197 +F532 5F 48 05 *SRE $0548,X @ 0647 = 37 A:75 X:FF Y:FD P:65 SP:FB CYC: 77 SL:197 +F535 EA NOP A:6E X:FF Y:FD P:65 SP:FB CYC: 98 SL:197 +F536 EA NOP A:6E X:FF Y:FD P:65 SP:FB CYC:104 SL:197 +F537 EA NOP A:6E X:FF Y:FD P:65 SP:FB CYC:110 SL:197 +F538 EA NOP A:6E X:FF Y:FD P:65 SP:FB CYC:116 SL:197 +F539 20 46 FB JSR $FB46 A:6E X:FF Y:FD P:65 SP:FB CYC:122 SL:197 +FB46 50 2D BVC $FB75 A:6E X:FF Y:FD P:65 SP:F9 CYC:140 SL:197 +FB48 F0 2B BEQ $FB75 A:6E X:FF Y:FD P:65 SP:F9 CYC:146 SL:197 +FB4A 30 29 BMI $FB75 A:6E X:FF Y:FD P:65 SP:F9 CYC:152 SL:197 +FB4C 90 27 BCC $FB75 A:6E X:FF Y:FD P:65 SP:F9 CYC:158 SL:197 +FB4E C9 6E CMP #$6E A:6E X:FF Y:FD P:65 SP:F9 CYC:164 SL:197 +FB50 D0 23 BNE $FB75 A:6E X:FF Y:FD P:67 SP:F9 CYC:170 SL:197 +FB52 60 RTS A:6E X:FF Y:FD P:67 SP:F9 CYC:176 SL:197 +F53C AD 47 06 LDA $0647 = 1B A:6E X:FF Y:FD P:67 SP:FB CYC:194 SL:197 +F53F C9 1B CMP #$1B A:1B X:FF Y:FD P:65 SP:FB CYC:206 SL:197 +F541 F0 02 BEQ $F545 A:1B X:FF Y:FD P:67 SP:FB CYC:212 SL:197 +F545 60 RTS A:1B X:FF Y:FD P:67 SP:FB CYC:221 SL:197 +C64A A5 00 LDA $00 = 00 A:1B X:FF Y:FD P:67 SP:FD CYC:239 SL:197 +C64C 85 11 STA $11 = 00 A:00 X:FF Y:FD P:67 SP:FD CYC:248 SL:197 +C64E A9 00 LDA #$00 A:00 X:FF Y:FD P:67 SP:FD CYC:257 SL:197 +C650 85 00 STA $00 = 00 A:00 X:FF Y:FD P:67 SP:FD CYC:263 SL:197 +C652 20 46 F5 JSR $F546 A:00 X:FF Y:FD P:67 SP:FD CYC:272 SL:197 +F546 A9 FF LDA #$FF A:00 X:FF Y:FD P:67 SP:FB CYC:290 SL:197 +F548 85 01 STA $01 = FF A:FF X:FF Y:FD P:E5 SP:FB CYC:296 SL:197 +F54A A0 01 LDY #$01 A:FF X:FF Y:FD P:E5 SP:FB CYC:305 SL:197 +F54C A2 02 LDX #$02 A:FF X:FF Y:01 P:65 SP:FB CYC:311 SL:197 +F54E A9 47 LDA #$47 A:FF X:02 Y:01 P:65 SP:FB CYC:317 SL:197 +F550 85 47 STA $47 = 1B A:47 X:02 Y:01 P:65 SP:FB CYC:323 SL:197 +F552 A9 06 LDA #$06 A:47 X:02 Y:01 P:65 SP:FB CYC:332 SL:197 +F554 85 48 STA $48 = 06 A:06 X:02 Y:01 P:65 SP:FB CYC:338 SL:197 +F556 A9 A5 LDA #$A5 A:06 X:02 Y:01 P:65 SP:FB CYC: 6 SL:198 +F558 8D 47 06 STA $0647 = 1B A:A5 X:02 Y:01 P:E5 SP:FB CYC: 12 SL:198 +F55B 20 E9 FA JSR $FAE9 A:A5 X:02 Y:01 P:E5 SP:FB CYC: 24 SL:198 +FAE9 24 01 BIT $01 = FF A:A5 X:02 Y:01 P:E5 SP:F9 CYC: 42 SL:198 +FAEB 18 CLC A:A5 X:02 Y:01 P:E5 SP:F9 CYC: 51 SL:198 +FAEC A9 B2 LDA #$B2 A:A5 X:02 Y:01 P:E4 SP:F9 CYC: 57 SL:198 +FAEE 60 RTS A:B2 X:02 Y:01 P:E4 SP:F9 CYC: 63 SL:198 +F55E 63 45 *RRA ($45,X) @ 47 = 0647 = A5 A:B2 X:02 Y:01 P:E4 SP:FB CYC: 81 SL:198 +F560 EA NOP A:05 X:02 Y:01 P:25 SP:FB CYC:105 SL:198 +F561 EA NOP A:05 X:02 Y:01 P:25 SP:FB CYC:111 SL:198 +F562 EA NOP A:05 X:02 Y:01 P:25 SP:FB CYC:117 SL:198 +F563 EA NOP A:05 X:02 Y:01 P:25 SP:FB CYC:123 SL:198 +F564 20 EF FA JSR $FAEF A:05 X:02 Y:01 P:25 SP:FB CYC:129 SL:198 +FAEF 70 2A BVS $FB1B A:05 X:02 Y:01 P:25 SP:F9 CYC:147 SL:198 +FAF1 90 28 BCC $FB1B A:05 X:02 Y:01 P:25 SP:F9 CYC:153 SL:198 +FAF3 30 26 BMI $FB1B A:05 X:02 Y:01 P:25 SP:F9 CYC:159 SL:198 +FAF5 C9 05 CMP #$05 A:05 X:02 Y:01 P:25 SP:F9 CYC:165 SL:198 +FAF7 D0 22 BNE $FB1B A:05 X:02 Y:01 P:27 SP:F9 CYC:171 SL:198 +FAF9 60 RTS A:05 X:02 Y:01 P:27 SP:F9 CYC:177 SL:198 +F567 AD 47 06 LDA $0647 = 52 A:05 X:02 Y:01 P:27 SP:FB CYC:195 SL:198 +F56A C9 52 CMP #$52 A:52 X:02 Y:01 P:25 SP:FB CYC:207 SL:198 +F56C F0 02 BEQ $F570 A:52 X:02 Y:01 P:27 SP:FB CYC:213 SL:198 +F570 C8 INY A:52 X:02 Y:01 P:27 SP:FB CYC:222 SL:198 +F571 A9 29 LDA #$29 A:52 X:02 Y:02 P:25 SP:FB CYC:228 SL:198 +F573 8D 47 06 STA $0647 = 52 A:29 X:02 Y:02 P:25 SP:FB CYC:234 SL:198 +F576 20 FA FA JSR $FAFA A:29 X:02 Y:02 P:25 SP:FB CYC:246 SL:198 +FAFA B8 CLV A:29 X:02 Y:02 P:25 SP:F9 CYC:264 SL:198 +FAFB 18 CLC A:29 X:02 Y:02 P:25 SP:F9 CYC:270 SL:198 +FAFC A9 42 LDA #$42 A:29 X:02 Y:02 P:24 SP:F9 CYC:276 SL:198 +FAFE 60 RTS A:42 X:02 Y:02 P:24 SP:F9 CYC:282 SL:198 +F579 63 45 *RRA ($45,X) @ 47 = 0647 = 29 A:42 X:02 Y:02 P:24 SP:FB CYC:300 SL:198 +F57B EA NOP A:57 X:02 Y:02 P:24 SP:FB CYC:324 SL:198 +F57C EA NOP A:57 X:02 Y:02 P:24 SP:FB CYC:330 SL:198 +F57D EA NOP A:57 X:02 Y:02 P:24 SP:FB CYC:336 SL:198 +F57E EA NOP A:57 X:02 Y:02 P:24 SP:FB CYC: 1 SL:199 +F57F 20 FF FA JSR $FAFF A:57 X:02 Y:02 P:24 SP:FB CYC: 7 SL:199 +FAFF 70 1A BVS $FB1B A:57 X:02 Y:02 P:24 SP:F9 CYC: 25 SL:199 +FB01 30 18 BMI $FB1B A:57 X:02 Y:02 P:24 SP:F9 CYC: 31 SL:199 +FB03 B0 16 BCS $FB1B A:57 X:02 Y:02 P:24 SP:F9 CYC: 37 SL:199 +FB05 C9 57 CMP #$57 A:57 X:02 Y:02 P:24 SP:F9 CYC: 43 SL:199 +FB07 D0 12 BNE $FB1B A:57 X:02 Y:02 P:27 SP:F9 CYC: 49 SL:199 +FB09 60 RTS A:57 X:02 Y:02 P:27 SP:F9 CYC: 55 SL:199 +F582 AD 47 06 LDA $0647 = 14 A:57 X:02 Y:02 P:27 SP:FB CYC: 73 SL:199 +F585 C9 14 CMP #$14 A:14 X:02 Y:02 P:25 SP:FB CYC: 85 SL:199 +F587 F0 02 BEQ $F58B A:14 X:02 Y:02 P:27 SP:FB CYC: 91 SL:199 +F58B C8 INY A:14 X:02 Y:02 P:27 SP:FB CYC:100 SL:199 +F58C A9 37 LDA #$37 A:14 X:02 Y:03 P:25 SP:FB CYC:106 SL:199 +F58E 8D 47 06 STA $0647 = 14 A:37 X:02 Y:03 P:25 SP:FB CYC:112 SL:199 +F591 20 0A FB JSR $FB0A A:37 X:02 Y:03 P:25 SP:FB CYC:124 SL:199 +FB0A 24 01 BIT $01 = FF A:37 X:02 Y:03 P:25 SP:F9 CYC:142 SL:199 +FB0C 38 SEC A:37 X:02 Y:03 P:E5 SP:F9 CYC:151 SL:199 +FB0D A9 75 LDA #$75 A:37 X:02 Y:03 P:E5 SP:F9 CYC:157 SL:199 +FB0F 60 RTS A:75 X:02 Y:03 P:65 SP:F9 CYC:163 SL:199 +F594 63 45 *RRA ($45,X) @ 47 = 0647 = 37 A:75 X:02 Y:03 P:65 SP:FB CYC:181 SL:199 +F596 EA NOP A:11 X:02 Y:03 P:25 SP:FB CYC:205 SL:199 +F597 EA NOP A:11 X:02 Y:03 P:25 SP:FB CYC:211 SL:199 +F598 EA NOP A:11 X:02 Y:03 P:25 SP:FB CYC:217 SL:199 +F599 EA NOP A:11 X:02 Y:03 P:25 SP:FB CYC:223 SL:199 +F59A 20 10 FB JSR $FB10 A:11 X:02 Y:03 P:25 SP:FB CYC:229 SL:199 +FB10 70 09 BVS $FB1B A:11 X:02 Y:03 P:25 SP:F9 CYC:247 SL:199 +FB12 30 07 BMI $FB1B A:11 X:02 Y:03 P:25 SP:F9 CYC:253 SL:199 +FB14 90 05 BCC $FB1B A:11 X:02 Y:03 P:25 SP:F9 CYC:259 SL:199 +FB16 C9 11 CMP #$11 A:11 X:02 Y:03 P:25 SP:F9 CYC:265 SL:199 +FB18 D0 01 BNE $FB1B A:11 X:02 Y:03 P:27 SP:F9 CYC:271 SL:199 +FB1A 60 RTS A:11 X:02 Y:03 P:27 SP:F9 CYC:277 SL:199 +F59D AD 47 06 LDA $0647 = 9B A:11 X:02 Y:03 P:27 SP:FB CYC:295 SL:199 +F5A0 C9 9B CMP #$9B A:9B X:02 Y:03 P:A5 SP:FB CYC:307 SL:199 +F5A2 F0 02 BEQ $F5A6 A:9B X:02 Y:03 P:27 SP:FB CYC:313 SL:199 +F5A6 C8 INY A:9B X:02 Y:03 P:27 SP:FB CYC:322 SL:199 +F5A7 A9 A5 LDA #$A5 A:9B X:02 Y:04 P:25 SP:FB CYC:328 SL:199 +F5A9 85 47 STA $47 = 47 A:A5 X:02 Y:04 P:A5 SP:FB CYC:334 SL:199 +F5AB 20 E9 FA JSR $FAE9 A:A5 X:02 Y:04 P:A5 SP:FB CYC: 2 SL:200 +FAE9 24 01 BIT $01 = FF A:A5 X:02 Y:04 P:A5 SP:F9 CYC: 20 SL:200 +FAEB 18 CLC A:A5 X:02 Y:04 P:E5 SP:F9 CYC: 29 SL:200 +FAEC A9 B2 LDA #$B2 A:A5 X:02 Y:04 P:E4 SP:F9 CYC: 35 SL:200 +FAEE 60 RTS A:B2 X:02 Y:04 P:E4 SP:F9 CYC: 41 SL:200 +F5AE 67 47 *RRA $47 = A5 A:B2 X:02 Y:04 P:E4 SP:FB CYC: 59 SL:200 +F5B0 EA NOP A:05 X:02 Y:04 P:25 SP:FB CYC: 74 SL:200 +F5B1 EA NOP A:05 X:02 Y:04 P:25 SP:FB CYC: 80 SL:200 +F5B2 EA NOP A:05 X:02 Y:04 P:25 SP:FB CYC: 86 SL:200 +F5B3 EA NOP A:05 X:02 Y:04 P:25 SP:FB CYC: 92 SL:200 +F5B4 20 EF FA JSR $FAEF A:05 X:02 Y:04 P:25 SP:FB CYC: 98 SL:200 +FAEF 70 2A BVS $FB1B A:05 X:02 Y:04 P:25 SP:F9 CYC:116 SL:200 +FAF1 90 28 BCC $FB1B A:05 X:02 Y:04 P:25 SP:F9 CYC:122 SL:200 +FAF3 30 26 BMI $FB1B A:05 X:02 Y:04 P:25 SP:F9 CYC:128 SL:200 +FAF5 C9 05 CMP #$05 A:05 X:02 Y:04 P:25 SP:F9 CYC:134 SL:200 +FAF7 D0 22 BNE $FB1B A:05 X:02 Y:04 P:27 SP:F9 CYC:140 SL:200 +FAF9 60 RTS A:05 X:02 Y:04 P:27 SP:F9 CYC:146 SL:200 +F5B7 A5 47 LDA $47 = 52 A:05 X:02 Y:04 P:27 SP:FB CYC:164 SL:200 +F5B9 C9 52 CMP #$52 A:52 X:02 Y:04 P:25 SP:FB CYC:173 SL:200 +F5BB F0 02 BEQ $F5BF A:52 X:02 Y:04 P:27 SP:FB CYC:179 SL:200 +F5BF C8 INY A:52 X:02 Y:04 P:27 SP:FB CYC:188 SL:200 +F5C0 A9 29 LDA #$29 A:52 X:02 Y:05 P:25 SP:FB CYC:194 SL:200 +F5C2 85 47 STA $47 = 52 A:29 X:02 Y:05 P:25 SP:FB CYC:200 SL:200 +F5C4 20 FA FA JSR $FAFA A:29 X:02 Y:05 P:25 SP:FB CYC:209 SL:200 +FAFA B8 CLV A:29 X:02 Y:05 P:25 SP:F9 CYC:227 SL:200 +FAFB 18 CLC A:29 X:02 Y:05 P:25 SP:F9 CYC:233 SL:200 +FAFC A9 42 LDA #$42 A:29 X:02 Y:05 P:24 SP:F9 CYC:239 SL:200 +FAFE 60 RTS A:42 X:02 Y:05 P:24 SP:F9 CYC:245 SL:200 +F5C7 67 47 *RRA $47 = 29 A:42 X:02 Y:05 P:24 SP:FB CYC:263 SL:200 +F5C9 EA NOP A:57 X:02 Y:05 P:24 SP:FB CYC:278 SL:200 +F5CA EA NOP A:57 X:02 Y:05 P:24 SP:FB CYC:284 SL:200 +F5CB EA NOP A:57 X:02 Y:05 P:24 SP:FB CYC:290 SL:200 +F5CC EA NOP A:57 X:02 Y:05 P:24 SP:FB CYC:296 SL:200 +F5CD 20 FF FA JSR $FAFF A:57 X:02 Y:05 P:24 SP:FB CYC:302 SL:200 +FAFF 70 1A BVS $FB1B A:57 X:02 Y:05 P:24 SP:F9 CYC:320 SL:200 +FB01 30 18 BMI $FB1B A:57 X:02 Y:05 P:24 SP:F9 CYC:326 SL:200 +FB03 B0 16 BCS $FB1B A:57 X:02 Y:05 P:24 SP:F9 CYC:332 SL:200 +FB05 C9 57 CMP #$57 A:57 X:02 Y:05 P:24 SP:F9 CYC:338 SL:200 +FB07 D0 12 BNE $FB1B A:57 X:02 Y:05 P:27 SP:F9 CYC: 3 SL:201 +FB09 60 RTS A:57 X:02 Y:05 P:27 SP:F9 CYC: 9 SL:201 +F5D0 A5 47 LDA $47 = 14 A:57 X:02 Y:05 P:27 SP:FB CYC: 27 SL:201 +F5D2 C9 14 CMP #$14 A:14 X:02 Y:05 P:25 SP:FB CYC: 36 SL:201 +F5D4 F0 02 BEQ $F5D8 A:14 X:02 Y:05 P:27 SP:FB CYC: 42 SL:201 +F5D8 C8 INY A:14 X:02 Y:05 P:27 SP:FB CYC: 51 SL:201 +F5D9 A9 37 LDA #$37 A:14 X:02 Y:06 P:25 SP:FB CYC: 57 SL:201 +F5DB 85 47 STA $47 = 14 A:37 X:02 Y:06 P:25 SP:FB CYC: 63 SL:201 +F5DD 20 0A FB JSR $FB0A A:37 X:02 Y:06 P:25 SP:FB CYC: 72 SL:201 +FB0A 24 01 BIT $01 = FF A:37 X:02 Y:06 P:25 SP:F9 CYC: 90 SL:201 +FB0C 38 SEC A:37 X:02 Y:06 P:E5 SP:F9 CYC: 99 SL:201 +FB0D A9 75 LDA #$75 A:37 X:02 Y:06 P:E5 SP:F9 CYC:105 SL:201 +FB0F 60 RTS A:75 X:02 Y:06 P:65 SP:F9 CYC:111 SL:201 +F5E0 67 47 *RRA $47 = 37 A:75 X:02 Y:06 P:65 SP:FB CYC:129 SL:201 +F5E2 EA NOP A:11 X:02 Y:06 P:25 SP:FB CYC:144 SL:201 +F5E3 EA NOP A:11 X:02 Y:06 P:25 SP:FB CYC:150 SL:201 +F5E4 EA NOP A:11 X:02 Y:06 P:25 SP:FB CYC:156 SL:201 +F5E5 EA NOP A:11 X:02 Y:06 P:25 SP:FB CYC:162 SL:201 +F5E6 20 10 FB JSR $FB10 A:11 X:02 Y:06 P:25 SP:FB CYC:168 SL:201 +FB10 70 09 BVS $FB1B A:11 X:02 Y:06 P:25 SP:F9 CYC:186 SL:201 +FB12 30 07 BMI $FB1B A:11 X:02 Y:06 P:25 SP:F9 CYC:192 SL:201 +FB14 90 05 BCC $FB1B A:11 X:02 Y:06 P:25 SP:F9 CYC:198 SL:201 +FB16 C9 11 CMP #$11 A:11 X:02 Y:06 P:25 SP:F9 CYC:204 SL:201 +FB18 D0 01 BNE $FB1B A:11 X:02 Y:06 P:27 SP:F9 CYC:210 SL:201 +FB1A 60 RTS A:11 X:02 Y:06 P:27 SP:F9 CYC:216 SL:201 +F5E9 A5 47 LDA $47 = 9B A:11 X:02 Y:06 P:27 SP:FB CYC:234 SL:201 +F5EB C9 9B CMP #$9B A:9B X:02 Y:06 P:A5 SP:FB CYC:243 SL:201 +F5ED F0 02 BEQ $F5F1 A:9B X:02 Y:06 P:27 SP:FB CYC:249 SL:201 +F5F1 C8 INY A:9B X:02 Y:06 P:27 SP:FB CYC:258 SL:201 +F5F2 A9 A5 LDA #$A5 A:9B X:02 Y:07 P:25 SP:FB CYC:264 SL:201 +F5F4 8D 47 06 STA $0647 = 9B A:A5 X:02 Y:07 P:A5 SP:FB CYC:270 SL:201 +F5F7 20 E9 FA JSR $FAE9 A:A5 X:02 Y:07 P:A5 SP:FB CYC:282 SL:201 +FAE9 24 01 BIT $01 = FF A:A5 X:02 Y:07 P:A5 SP:F9 CYC:300 SL:201 +FAEB 18 CLC A:A5 X:02 Y:07 P:E5 SP:F9 CYC:309 SL:201 +FAEC A9 B2 LDA #$B2 A:A5 X:02 Y:07 P:E4 SP:F9 CYC:315 SL:201 +FAEE 60 RTS A:B2 X:02 Y:07 P:E4 SP:F9 CYC:321 SL:201 +F5FA 6F 47 06 *RRA $0647 = A5 A:B2 X:02 Y:07 P:E4 SP:FB CYC:339 SL:201 +F5FD EA NOP A:05 X:02 Y:07 P:25 SP:FB CYC: 16 SL:202 +F5FE EA NOP A:05 X:02 Y:07 P:25 SP:FB CYC: 22 SL:202 +F5FF EA NOP A:05 X:02 Y:07 P:25 SP:FB CYC: 28 SL:202 +F600 EA NOP A:05 X:02 Y:07 P:25 SP:FB CYC: 34 SL:202 +F601 20 EF FA JSR $FAEF A:05 X:02 Y:07 P:25 SP:FB CYC: 40 SL:202 +FAEF 70 2A BVS $FB1B A:05 X:02 Y:07 P:25 SP:F9 CYC: 58 SL:202 +FAF1 90 28 BCC $FB1B A:05 X:02 Y:07 P:25 SP:F9 CYC: 64 SL:202 +FAF3 30 26 BMI $FB1B A:05 X:02 Y:07 P:25 SP:F9 CYC: 70 SL:202 +FAF5 C9 05 CMP #$05 A:05 X:02 Y:07 P:25 SP:F9 CYC: 76 SL:202 +FAF7 D0 22 BNE $FB1B A:05 X:02 Y:07 P:27 SP:F9 CYC: 82 SL:202 +FAF9 60 RTS A:05 X:02 Y:07 P:27 SP:F9 CYC: 88 SL:202 +F604 AD 47 06 LDA $0647 = 52 A:05 X:02 Y:07 P:27 SP:FB CYC:106 SL:202 +F607 C9 52 CMP #$52 A:52 X:02 Y:07 P:25 SP:FB CYC:118 SL:202 +F609 F0 02 BEQ $F60D A:52 X:02 Y:07 P:27 SP:FB CYC:124 SL:202 +F60D C8 INY A:52 X:02 Y:07 P:27 SP:FB CYC:133 SL:202 +F60E A9 29 LDA #$29 A:52 X:02 Y:08 P:25 SP:FB CYC:139 SL:202 +F610 8D 47 06 STA $0647 = 52 A:29 X:02 Y:08 P:25 SP:FB CYC:145 SL:202 +F613 20 FA FA JSR $FAFA A:29 X:02 Y:08 P:25 SP:FB CYC:157 SL:202 +FAFA B8 CLV A:29 X:02 Y:08 P:25 SP:F9 CYC:175 SL:202 +FAFB 18 CLC A:29 X:02 Y:08 P:25 SP:F9 CYC:181 SL:202 +FAFC A9 42 LDA #$42 A:29 X:02 Y:08 P:24 SP:F9 CYC:187 SL:202 +FAFE 60 RTS A:42 X:02 Y:08 P:24 SP:F9 CYC:193 SL:202 +F616 6F 47 06 *RRA $0647 = 29 A:42 X:02 Y:08 P:24 SP:FB CYC:211 SL:202 +F619 EA NOP A:57 X:02 Y:08 P:24 SP:FB CYC:229 SL:202 +F61A EA NOP A:57 X:02 Y:08 P:24 SP:FB CYC:235 SL:202 +F61B EA NOP A:57 X:02 Y:08 P:24 SP:FB CYC:241 SL:202 +F61C EA NOP A:57 X:02 Y:08 P:24 SP:FB CYC:247 SL:202 +F61D 20 FF FA JSR $FAFF A:57 X:02 Y:08 P:24 SP:FB CYC:253 SL:202 +FAFF 70 1A BVS $FB1B A:57 X:02 Y:08 P:24 SP:F9 CYC:271 SL:202 +FB01 30 18 BMI $FB1B A:57 X:02 Y:08 P:24 SP:F9 CYC:277 SL:202 +FB03 B0 16 BCS $FB1B A:57 X:02 Y:08 P:24 SP:F9 CYC:283 SL:202 +FB05 C9 57 CMP #$57 A:57 X:02 Y:08 P:24 SP:F9 CYC:289 SL:202 +FB07 D0 12 BNE $FB1B A:57 X:02 Y:08 P:27 SP:F9 CYC:295 SL:202 +FB09 60 RTS A:57 X:02 Y:08 P:27 SP:F9 CYC:301 SL:202 +F620 AD 47 06 LDA $0647 = 14 A:57 X:02 Y:08 P:27 SP:FB CYC:319 SL:202 +F623 C9 14 CMP #$14 A:14 X:02 Y:08 P:25 SP:FB CYC:331 SL:202 +F625 F0 02 BEQ $F629 A:14 X:02 Y:08 P:27 SP:FB CYC:337 SL:202 +F629 C8 INY A:14 X:02 Y:08 P:27 SP:FB CYC: 5 SL:203 +F62A A9 37 LDA #$37 A:14 X:02 Y:09 P:25 SP:FB CYC: 11 SL:203 +F62C 8D 47 06 STA $0647 = 14 A:37 X:02 Y:09 P:25 SP:FB CYC: 17 SL:203 +F62F 20 0A FB JSR $FB0A A:37 X:02 Y:09 P:25 SP:FB CYC: 29 SL:203 +FB0A 24 01 BIT $01 = FF A:37 X:02 Y:09 P:25 SP:F9 CYC: 47 SL:203 +FB0C 38 SEC A:37 X:02 Y:09 P:E5 SP:F9 CYC: 56 SL:203 +FB0D A9 75 LDA #$75 A:37 X:02 Y:09 P:E5 SP:F9 CYC: 62 SL:203 +FB0F 60 RTS A:75 X:02 Y:09 P:65 SP:F9 CYC: 68 SL:203 +F632 6F 47 06 *RRA $0647 = 37 A:75 X:02 Y:09 P:65 SP:FB CYC: 86 SL:203 +F635 EA NOP A:11 X:02 Y:09 P:25 SP:FB CYC:104 SL:203 +F636 EA NOP A:11 X:02 Y:09 P:25 SP:FB CYC:110 SL:203 +F637 EA NOP A:11 X:02 Y:09 P:25 SP:FB CYC:116 SL:203 +F638 EA NOP A:11 X:02 Y:09 P:25 SP:FB CYC:122 SL:203 +F639 20 10 FB JSR $FB10 A:11 X:02 Y:09 P:25 SP:FB CYC:128 SL:203 +FB10 70 09 BVS $FB1B A:11 X:02 Y:09 P:25 SP:F9 CYC:146 SL:203 +FB12 30 07 BMI $FB1B A:11 X:02 Y:09 P:25 SP:F9 CYC:152 SL:203 +FB14 90 05 BCC $FB1B A:11 X:02 Y:09 P:25 SP:F9 CYC:158 SL:203 +FB16 C9 11 CMP #$11 A:11 X:02 Y:09 P:25 SP:F9 CYC:164 SL:203 +FB18 D0 01 BNE $FB1B A:11 X:02 Y:09 P:27 SP:F9 CYC:170 SL:203 +FB1A 60 RTS A:11 X:02 Y:09 P:27 SP:F9 CYC:176 SL:203 +F63C AD 47 06 LDA $0647 = 9B A:11 X:02 Y:09 P:27 SP:FB CYC:194 SL:203 +F63F C9 9B CMP #$9B A:9B X:02 Y:09 P:A5 SP:FB CYC:206 SL:203 +F641 F0 02 BEQ $F645 A:9B X:02 Y:09 P:27 SP:FB CYC:212 SL:203 +F645 A9 A5 LDA #$A5 A:9B X:02 Y:09 P:27 SP:FB CYC:221 SL:203 +F647 8D 47 06 STA $0647 = 9B A:A5 X:02 Y:09 P:A5 SP:FB CYC:227 SL:203 +F64A A9 48 LDA #$48 A:A5 X:02 Y:09 P:A5 SP:FB CYC:239 SL:203 +F64C 85 45 STA $45 = 48 A:48 X:02 Y:09 P:25 SP:FB CYC:245 SL:203 +F64E A9 05 LDA #$05 A:48 X:02 Y:09 P:25 SP:FB CYC:254 SL:203 +F650 85 46 STA $46 = 05 A:05 X:02 Y:09 P:25 SP:FB CYC:260 SL:203 +F652 A0 FF LDY #$FF A:05 X:02 Y:09 P:25 SP:FB CYC:269 SL:203 +F654 20 E9 FA JSR $FAE9 A:05 X:02 Y:FF P:A5 SP:FB CYC:275 SL:203 +FAE9 24 01 BIT $01 = FF A:05 X:02 Y:FF P:A5 SP:F9 CYC:293 SL:203 +FAEB 18 CLC A:05 X:02 Y:FF P:E5 SP:F9 CYC:302 SL:203 +FAEC A9 B2 LDA #$B2 A:05 X:02 Y:FF P:E4 SP:F9 CYC:308 SL:203 +FAEE 60 RTS A:B2 X:02 Y:FF P:E4 SP:F9 CYC:314 SL:203 +F657 73 45 *RRA ($45),Y = 0548 @ 0647 = A5 A:B2 X:02 Y:FF P:E4 SP:FB CYC:332 SL:203 +F659 EA NOP A:05 X:02 Y:FF P:25 SP:FB CYC: 15 SL:204 +F65A EA NOP A:05 X:02 Y:FF P:25 SP:FB CYC: 21 SL:204 +F65B 08 PHP A:05 X:02 Y:FF P:25 SP:FB CYC: 27 SL:204 +F65C 48 PHA A:05 X:02 Y:FF P:25 SP:FA CYC: 36 SL:204 +F65D A0 0A LDY #$0A A:05 X:02 Y:FF P:25 SP:F9 CYC: 45 SL:204 +F65F 68 PLA A:05 X:02 Y:0A P:25 SP:F9 CYC: 51 SL:204 +F660 28 PLP A:05 X:02 Y:0A P:25 SP:FA CYC: 63 SL:204 +F661 20 EF FA JSR $FAEF A:05 X:02 Y:0A P:25 SP:FB CYC: 75 SL:204 +FAEF 70 2A BVS $FB1B A:05 X:02 Y:0A P:25 SP:F9 CYC: 93 SL:204 +FAF1 90 28 BCC $FB1B A:05 X:02 Y:0A P:25 SP:F9 CYC: 99 SL:204 +FAF3 30 26 BMI $FB1B A:05 X:02 Y:0A P:25 SP:F9 CYC:105 SL:204 +FAF5 C9 05 CMP #$05 A:05 X:02 Y:0A P:25 SP:F9 CYC:111 SL:204 +FAF7 D0 22 BNE $FB1B A:05 X:02 Y:0A P:27 SP:F9 CYC:117 SL:204 +FAF9 60 RTS A:05 X:02 Y:0A P:27 SP:F9 CYC:123 SL:204 +F664 AD 47 06 LDA $0647 = 52 A:05 X:02 Y:0A P:27 SP:FB CYC:141 SL:204 +F667 C9 52 CMP #$52 A:52 X:02 Y:0A P:25 SP:FB CYC:153 SL:204 +F669 F0 02 BEQ $F66D A:52 X:02 Y:0A P:27 SP:FB CYC:159 SL:204 +F66D A0 FF LDY #$FF A:52 X:02 Y:0A P:27 SP:FB CYC:168 SL:204 +F66F A9 29 LDA #$29 A:52 X:02 Y:FF P:A5 SP:FB CYC:174 SL:204 +F671 8D 47 06 STA $0647 = 52 A:29 X:02 Y:FF P:25 SP:FB CYC:180 SL:204 +F674 20 FA FA JSR $FAFA A:29 X:02 Y:FF P:25 SP:FB CYC:192 SL:204 +FAFA B8 CLV A:29 X:02 Y:FF P:25 SP:F9 CYC:210 SL:204 +FAFB 18 CLC A:29 X:02 Y:FF P:25 SP:F9 CYC:216 SL:204 +FAFC A9 42 LDA #$42 A:29 X:02 Y:FF P:24 SP:F9 CYC:222 SL:204 +FAFE 60 RTS A:42 X:02 Y:FF P:24 SP:F9 CYC:228 SL:204 +F677 73 45 *RRA ($45),Y = 0548 @ 0647 = 29 A:42 X:02 Y:FF P:24 SP:FB CYC:246 SL:204 +F679 EA NOP A:57 X:02 Y:FF P:24 SP:FB CYC:270 SL:204 +F67A EA NOP A:57 X:02 Y:FF P:24 SP:FB CYC:276 SL:204 +F67B 08 PHP A:57 X:02 Y:FF P:24 SP:FB CYC:282 SL:204 +F67C 48 PHA A:57 X:02 Y:FF P:24 SP:FA CYC:291 SL:204 +F67D A0 0B LDY #$0B A:57 X:02 Y:FF P:24 SP:F9 CYC:300 SL:204 +F67F 68 PLA A:57 X:02 Y:0B P:24 SP:F9 CYC:306 SL:204 +F680 28 PLP A:57 X:02 Y:0B P:24 SP:FA CYC:318 SL:204 +F681 20 FF FA JSR $FAFF A:57 X:02 Y:0B P:24 SP:FB CYC:330 SL:204 +FAFF 70 1A BVS $FB1B A:57 X:02 Y:0B P:24 SP:F9 CYC: 7 SL:205 +FB01 30 18 BMI $FB1B A:57 X:02 Y:0B P:24 SP:F9 CYC: 13 SL:205 +FB03 B0 16 BCS $FB1B A:57 X:02 Y:0B P:24 SP:F9 CYC: 19 SL:205 +FB05 C9 57 CMP #$57 A:57 X:02 Y:0B P:24 SP:F9 CYC: 25 SL:205 +FB07 D0 12 BNE $FB1B A:57 X:02 Y:0B P:27 SP:F9 CYC: 31 SL:205 +FB09 60 RTS A:57 X:02 Y:0B P:27 SP:F9 CYC: 37 SL:205 +F684 AD 47 06 LDA $0647 = 14 A:57 X:02 Y:0B P:27 SP:FB CYC: 55 SL:205 +F687 C9 14 CMP #$14 A:14 X:02 Y:0B P:25 SP:FB CYC: 67 SL:205 +F689 F0 02 BEQ $F68D A:14 X:02 Y:0B P:27 SP:FB CYC: 73 SL:205 +F68D A0 FF LDY #$FF A:14 X:02 Y:0B P:27 SP:FB CYC: 82 SL:205 +F68F A9 37 LDA #$37 A:14 X:02 Y:FF P:A5 SP:FB CYC: 88 SL:205 +F691 8D 47 06 STA $0647 = 14 A:37 X:02 Y:FF P:25 SP:FB CYC: 94 SL:205 +F694 20 0A FB JSR $FB0A A:37 X:02 Y:FF P:25 SP:FB CYC:106 SL:205 +FB0A 24 01 BIT $01 = FF A:37 X:02 Y:FF P:25 SP:F9 CYC:124 SL:205 +FB0C 38 SEC A:37 X:02 Y:FF P:E5 SP:F9 CYC:133 SL:205 +FB0D A9 75 LDA #$75 A:37 X:02 Y:FF P:E5 SP:F9 CYC:139 SL:205 +FB0F 60 RTS A:75 X:02 Y:FF P:65 SP:F9 CYC:145 SL:205 +F697 73 45 *RRA ($45),Y = 0548 @ 0647 = 37 A:75 X:02 Y:FF P:65 SP:FB CYC:163 SL:205 +F699 EA NOP A:11 X:02 Y:FF P:25 SP:FB CYC:187 SL:205 +F69A EA NOP A:11 X:02 Y:FF P:25 SP:FB CYC:193 SL:205 +F69B 08 PHP A:11 X:02 Y:FF P:25 SP:FB CYC:199 SL:205 +F69C 48 PHA A:11 X:02 Y:FF P:25 SP:FA CYC:208 SL:205 +F69D A0 0C LDY #$0C A:11 X:02 Y:FF P:25 SP:F9 CYC:217 SL:205 +F69F 68 PLA A:11 X:02 Y:0C P:25 SP:F9 CYC:223 SL:205 +F6A0 28 PLP A:11 X:02 Y:0C P:25 SP:FA CYC:235 SL:205 +F6A1 20 10 FB JSR $FB10 A:11 X:02 Y:0C P:25 SP:FB CYC:247 SL:205 +FB10 70 09 BVS $FB1B A:11 X:02 Y:0C P:25 SP:F9 CYC:265 SL:205 +FB12 30 07 BMI $FB1B A:11 X:02 Y:0C P:25 SP:F9 CYC:271 SL:205 +FB14 90 05 BCC $FB1B A:11 X:02 Y:0C P:25 SP:F9 CYC:277 SL:205 +FB16 C9 11 CMP #$11 A:11 X:02 Y:0C P:25 SP:F9 CYC:283 SL:205 +FB18 D0 01 BNE $FB1B A:11 X:02 Y:0C P:27 SP:F9 CYC:289 SL:205 +FB1A 60 RTS A:11 X:02 Y:0C P:27 SP:F9 CYC:295 SL:205 +F6A4 AD 47 06 LDA $0647 = 9B A:11 X:02 Y:0C P:27 SP:FB CYC:313 SL:205 +F6A7 C9 9B CMP #$9B A:9B X:02 Y:0C P:A5 SP:FB CYC:325 SL:205 +F6A9 F0 02 BEQ $F6AD A:9B X:02 Y:0C P:27 SP:FB CYC:331 SL:205 +F6AD A0 0D LDY #$0D A:9B X:02 Y:0C P:27 SP:FB CYC:340 SL:205 +F6AF A2 FF LDX #$FF A:9B X:02 Y:0D P:25 SP:FB CYC: 5 SL:206 +F6B1 A9 A5 LDA #$A5 A:9B X:FF Y:0D P:A5 SP:FB CYC: 11 SL:206 +F6B3 85 47 STA $47 = 9B A:A5 X:FF Y:0D P:A5 SP:FB CYC: 17 SL:206 +F6B5 20 E9 FA JSR $FAE9 A:A5 X:FF Y:0D P:A5 SP:FB CYC: 26 SL:206 +FAE9 24 01 BIT $01 = FF A:A5 X:FF Y:0D P:A5 SP:F9 CYC: 44 SL:206 +FAEB 18 CLC A:A5 X:FF Y:0D P:E5 SP:F9 CYC: 53 SL:206 +FAEC A9 B2 LDA #$B2 A:A5 X:FF Y:0D P:E4 SP:F9 CYC: 59 SL:206 +FAEE 60 RTS A:B2 X:FF Y:0D P:E4 SP:F9 CYC: 65 SL:206 +F6B8 77 48 *RRA $48,X @ 47 = A5 A:B2 X:FF Y:0D P:E4 SP:FB CYC: 83 SL:206 +F6BA EA NOP A:05 X:FF Y:0D P:25 SP:FB CYC:101 SL:206 +F6BB EA NOP A:05 X:FF Y:0D P:25 SP:FB CYC:107 SL:206 +F6BC EA NOP A:05 X:FF Y:0D P:25 SP:FB CYC:113 SL:206 +F6BD EA NOP A:05 X:FF Y:0D P:25 SP:FB CYC:119 SL:206 +F6BE 20 EF FA JSR $FAEF A:05 X:FF Y:0D P:25 SP:FB CYC:125 SL:206 +FAEF 70 2A BVS $FB1B A:05 X:FF Y:0D P:25 SP:F9 CYC:143 SL:206 +FAF1 90 28 BCC $FB1B A:05 X:FF Y:0D P:25 SP:F9 CYC:149 SL:206 +FAF3 30 26 BMI $FB1B A:05 X:FF Y:0D P:25 SP:F9 CYC:155 SL:206 +FAF5 C9 05 CMP #$05 A:05 X:FF Y:0D P:25 SP:F9 CYC:161 SL:206 +FAF7 D0 22 BNE $FB1B A:05 X:FF Y:0D P:27 SP:F9 CYC:167 SL:206 +FAF9 60 RTS A:05 X:FF Y:0D P:27 SP:F9 CYC:173 SL:206 +F6C1 A5 47 LDA $47 = 52 A:05 X:FF Y:0D P:27 SP:FB CYC:191 SL:206 +F6C3 C9 52 CMP #$52 A:52 X:FF Y:0D P:25 SP:FB CYC:200 SL:206 +F6C5 F0 02 BEQ $F6C9 A:52 X:FF Y:0D P:27 SP:FB CYC:206 SL:206 +F6C9 C8 INY A:52 X:FF Y:0D P:27 SP:FB CYC:215 SL:206 +F6CA A9 29 LDA #$29 A:52 X:FF Y:0E P:25 SP:FB CYC:221 SL:206 +F6CC 85 47 STA $47 = 52 A:29 X:FF Y:0E P:25 SP:FB CYC:227 SL:206 +F6CE 20 FA FA JSR $FAFA A:29 X:FF Y:0E P:25 SP:FB CYC:236 SL:206 +FAFA B8 CLV A:29 X:FF Y:0E P:25 SP:F9 CYC:254 SL:206 +FAFB 18 CLC A:29 X:FF Y:0E P:25 SP:F9 CYC:260 SL:206 +FAFC A9 42 LDA #$42 A:29 X:FF Y:0E P:24 SP:F9 CYC:266 SL:206 +FAFE 60 RTS A:42 X:FF Y:0E P:24 SP:F9 CYC:272 SL:206 +F6D1 77 48 *RRA $48,X @ 47 = 29 A:42 X:FF Y:0E P:24 SP:FB CYC:290 SL:206 +F6D3 EA NOP A:57 X:FF Y:0E P:24 SP:FB CYC:308 SL:206 +F6D4 EA NOP A:57 X:FF Y:0E P:24 SP:FB CYC:314 SL:206 +F6D5 EA NOP A:57 X:FF Y:0E P:24 SP:FB CYC:320 SL:206 +F6D6 EA NOP A:57 X:FF Y:0E P:24 SP:FB CYC:326 SL:206 +F6D7 20 FF FA JSR $FAFF A:57 X:FF Y:0E P:24 SP:FB CYC:332 SL:206 +FAFF 70 1A BVS $FB1B A:57 X:FF Y:0E P:24 SP:F9 CYC: 9 SL:207 +FB01 30 18 BMI $FB1B A:57 X:FF Y:0E P:24 SP:F9 CYC: 15 SL:207 +FB03 B0 16 BCS $FB1B A:57 X:FF Y:0E P:24 SP:F9 CYC: 21 SL:207 +FB05 C9 57 CMP #$57 A:57 X:FF Y:0E P:24 SP:F9 CYC: 27 SL:207 +FB07 D0 12 BNE $FB1B A:57 X:FF Y:0E P:27 SP:F9 CYC: 33 SL:207 +FB09 60 RTS A:57 X:FF Y:0E P:27 SP:F9 CYC: 39 SL:207 +F6DA A5 47 LDA $47 = 14 A:57 X:FF Y:0E P:27 SP:FB CYC: 57 SL:207 +F6DC C9 14 CMP #$14 A:14 X:FF Y:0E P:25 SP:FB CYC: 66 SL:207 +F6DE F0 02 BEQ $F6E2 A:14 X:FF Y:0E P:27 SP:FB CYC: 72 SL:207 +F6E2 C8 INY A:14 X:FF Y:0E P:27 SP:FB CYC: 81 SL:207 +F6E3 A9 37 LDA #$37 A:14 X:FF Y:0F P:25 SP:FB CYC: 87 SL:207 +F6E5 85 47 STA $47 = 14 A:37 X:FF Y:0F P:25 SP:FB CYC: 93 SL:207 +F6E7 20 0A FB JSR $FB0A A:37 X:FF Y:0F P:25 SP:FB CYC:102 SL:207 +FB0A 24 01 BIT $01 = FF A:37 X:FF Y:0F P:25 SP:F9 CYC:120 SL:207 +FB0C 38 SEC A:37 X:FF Y:0F P:E5 SP:F9 CYC:129 SL:207 +FB0D A9 75 LDA #$75 A:37 X:FF Y:0F P:E5 SP:F9 CYC:135 SL:207 +FB0F 60 RTS A:75 X:FF Y:0F P:65 SP:F9 CYC:141 SL:207 +F6EA 77 48 *RRA $48,X @ 47 = 37 A:75 X:FF Y:0F P:65 SP:FB CYC:159 SL:207 +F6EC EA NOP A:11 X:FF Y:0F P:25 SP:FB CYC:177 SL:207 +F6ED EA NOP A:11 X:FF Y:0F P:25 SP:FB CYC:183 SL:207 +F6EE EA NOP A:11 X:FF Y:0F P:25 SP:FB CYC:189 SL:207 +F6EF EA NOP A:11 X:FF Y:0F P:25 SP:FB CYC:195 SL:207 +F6F0 20 10 FB JSR $FB10 A:11 X:FF Y:0F P:25 SP:FB CYC:201 SL:207 +FB10 70 09 BVS $FB1B A:11 X:FF Y:0F P:25 SP:F9 CYC:219 SL:207 +FB12 30 07 BMI $FB1B A:11 X:FF Y:0F P:25 SP:F9 CYC:225 SL:207 +FB14 90 05 BCC $FB1B A:11 X:FF Y:0F P:25 SP:F9 CYC:231 SL:207 +FB16 C9 11 CMP #$11 A:11 X:FF Y:0F P:25 SP:F9 CYC:237 SL:207 +FB18 D0 01 BNE $FB1B A:11 X:FF Y:0F P:27 SP:F9 CYC:243 SL:207 +FB1A 60 RTS A:11 X:FF Y:0F P:27 SP:F9 CYC:249 SL:207 +F6F3 A5 47 LDA $47 = 9B A:11 X:FF Y:0F P:27 SP:FB CYC:267 SL:207 +F6F5 C9 9B CMP #$9B A:9B X:FF Y:0F P:A5 SP:FB CYC:276 SL:207 +F6F7 F0 02 BEQ $F6FB A:9B X:FF Y:0F P:27 SP:FB CYC:282 SL:207 +F6FB A9 A5 LDA #$A5 A:9B X:FF Y:0F P:27 SP:FB CYC:291 SL:207 +F6FD 8D 47 06 STA $0647 = 9B A:A5 X:FF Y:0F P:A5 SP:FB CYC:297 SL:207 +F700 A0 FF LDY #$FF A:A5 X:FF Y:0F P:A5 SP:FB CYC:309 SL:207 +F702 20 E9 FA JSR $FAE9 A:A5 X:FF Y:FF P:A5 SP:FB CYC:315 SL:207 +FAE9 24 01 BIT $01 = FF A:A5 X:FF Y:FF P:A5 SP:F9 CYC:333 SL:207 +FAEB 18 CLC A:A5 X:FF Y:FF P:E5 SP:F9 CYC: 1 SL:208 +FAEC A9 B2 LDA #$B2 A:A5 X:FF Y:FF P:E4 SP:F9 CYC: 7 SL:208 +FAEE 60 RTS A:B2 X:FF Y:FF P:E4 SP:F9 CYC: 13 SL:208 +F705 7B 48 05 *RRA $0548,Y @ 0647 = A5 A:B2 X:FF Y:FF P:E4 SP:FB CYC: 31 SL:208 +F708 EA NOP A:05 X:FF Y:FF P:25 SP:FB CYC: 52 SL:208 +F709 EA NOP A:05 X:FF Y:FF P:25 SP:FB CYC: 58 SL:208 +F70A 08 PHP A:05 X:FF Y:FF P:25 SP:FB CYC: 64 SL:208 +F70B 48 PHA A:05 X:FF Y:FF P:25 SP:FA CYC: 73 SL:208 +F70C A0 10 LDY #$10 A:05 X:FF Y:FF P:25 SP:F9 CYC: 82 SL:208 +F70E 68 PLA A:05 X:FF Y:10 P:25 SP:F9 CYC: 88 SL:208 +F70F 28 PLP A:05 X:FF Y:10 P:25 SP:FA CYC:100 SL:208 +F710 20 EF FA JSR $FAEF A:05 X:FF Y:10 P:25 SP:FB CYC:112 SL:208 +FAEF 70 2A BVS $FB1B A:05 X:FF Y:10 P:25 SP:F9 CYC:130 SL:208 +FAF1 90 28 BCC $FB1B A:05 X:FF Y:10 P:25 SP:F9 CYC:136 SL:208 +FAF3 30 26 BMI $FB1B A:05 X:FF Y:10 P:25 SP:F9 CYC:142 SL:208 +FAF5 C9 05 CMP #$05 A:05 X:FF Y:10 P:25 SP:F9 CYC:148 SL:208 +FAF7 D0 22 BNE $FB1B A:05 X:FF Y:10 P:27 SP:F9 CYC:154 SL:208 +FAF9 60 RTS A:05 X:FF Y:10 P:27 SP:F9 CYC:160 SL:208 +F713 AD 47 06 LDA $0647 = 52 A:05 X:FF Y:10 P:27 SP:FB CYC:178 SL:208 +F716 C9 52 CMP #$52 A:52 X:FF Y:10 P:25 SP:FB CYC:190 SL:208 +F718 F0 02 BEQ $F71C A:52 X:FF Y:10 P:27 SP:FB CYC:196 SL:208 +F71C A0 FF LDY #$FF A:52 X:FF Y:10 P:27 SP:FB CYC:205 SL:208 +F71E A9 29 LDA #$29 A:52 X:FF Y:FF P:A5 SP:FB CYC:211 SL:208 +F720 8D 47 06 STA $0647 = 52 A:29 X:FF Y:FF P:25 SP:FB CYC:217 SL:208 +F723 20 FA FA JSR $FAFA A:29 X:FF Y:FF P:25 SP:FB CYC:229 SL:208 +FAFA B8 CLV A:29 X:FF Y:FF P:25 SP:F9 CYC:247 SL:208 +FAFB 18 CLC A:29 X:FF Y:FF P:25 SP:F9 CYC:253 SL:208 +FAFC A9 42 LDA #$42 A:29 X:FF Y:FF P:24 SP:F9 CYC:259 SL:208 +FAFE 60 RTS A:42 X:FF Y:FF P:24 SP:F9 CYC:265 SL:208 +F726 7B 48 05 *RRA $0548,Y @ 0647 = 29 A:42 X:FF Y:FF P:24 SP:FB CYC:283 SL:208 +F729 EA NOP A:57 X:FF Y:FF P:24 SP:FB CYC:304 SL:208 +F72A EA NOP A:57 X:FF Y:FF P:24 SP:FB CYC:310 SL:208 +F72B 08 PHP A:57 X:FF Y:FF P:24 SP:FB CYC:316 SL:208 +F72C 48 PHA A:57 X:FF Y:FF P:24 SP:FA CYC:325 SL:208 +F72D A0 11 LDY #$11 A:57 X:FF Y:FF P:24 SP:F9 CYC:334 SL:208 +F72F 68 PLA A:57 X:FF Y:11 P:24 SP:F9 CYC:340 SL:208 +F730 28 PLP A:57 X:FF Y:11 P:24 SP:FA CYC: 11 SL:209 +F731 20 FF FA JSR $FAFF A:57 X:FF Y:11 P:24 SP:FB CYC: 23 SL:209 +FAFF 70 1A BVS $FB1B A:57 X:FF Y:11 P:24 SP:F9 CYC: 41 SL:209 +FB01 30 18 BMI $FB1B A:57 X:FF Y:11 P:24 SP:F9 CYC: 47 SL:209 +FB03 B0 16 BCS $FB1B A:57 X:FF Y:11 P:24 SP:F9 CYC: 53 SL:209 +FB05 C9 57 CMP #$57 A:57 X:FF Y:11 P:24 SP:F9 CYC: 59 SL:209 +FB07 D0 12 BNE $FB1B A:57 X:FF Y:11 P:27 SP:F9 CYC: 65 SL:209 +FB09 60 RTS A:57 X:FF Y:11 P:27 SP:F9 CYC: 71 SL:209 +F734 AD 47 06 LDA $0647 = 14 A:57 X:FF Y:11 P:27 SP:FB CYC: 89 SL:209 +F737 C9 14 CMP #$14 A:14 X:FF Y:11 P:25 SP:FB CYC:101 SL:209 +F739 F0 02 BEQ $F73D A:14 X:FF Y:11 P:27 SP:FB CYC:107 SL:209 +F73D A0 FF LDY #$FF A:14 X:FF Y:11 P:27 SP:FB CYC:116 SL:209 +F73F A9 37 LDA #$37 A:14 X:FF Y:FF P:A5 SP:FB CYC:122 SL:209 +F741 8D 47 06 STA $0647 = 14 A:37 X:FF Y:FF P:25 SP:FB CYC:128 SL:209 +F744 20 0A FB JSR $FB0A A:37 X:FF Y:FF P:25 SP:FB CYC:140 SL:209 +FB0A 24 01 BIT $01 = FF A:37 X:FF Y:FF P:25 SP:F9 CYC:158 SL:209 +FB0C 38 SEC A:37 X:FF Y:FF P:E5 SP:F9 CYC:167 SL:209 +FB0D A9 75 LDA #$75 A:37 X:FF Y:FF P:E5 SP:F9 CYC:173 SL:209 +FB0F 60 RTS A:75 X:FF Y:FF P:65 SP:F9 CYC:179 SL:209 +F747 7B 48 05 *RRA $0548,Y @ 0647 = 37 A:75 X:FF Y:FF P:65 SP:FB CYC:197 SL:209 +F74A EA NOP A:11 X:FF Y:FF P:25 SP:FB CYC:218 SL:209 +F74B EA NOP A:11 X:FF Y:FF P:25 SP:FB CYC:224 SL:209 +F74C 08 PHP A:11 X:FF Y:FF P:25 SP:FB CYC:230 SL:209 +F74D 48 PHA A:11 X:FF Y:FF P:25 SP:FA CYC:239 SL:209 +F74E A0 12 LDY #$12 A:11 X:FF Y:FF P:25 SP:F9 CYC:248 SL:209 +F750 68 PLA A:11 X:FF Y:12 P:25 SP:F9 CYC:254 SL:209 +F751 28 PLP A:11 X:FF Y:12 P:25 SP:FA CYC:266 SL:209 +F752 20 10 FB JSR $FB10 A:11 X:FF Y:12 P:25 SP:FB CYC:278 SL:209 +FB10 70 09 BVS $FB1B A:11 X:FF Y:12 P:25 SP:F9 CYC:296 SL:209 +FB12 30 07 BMI $FB1B A:11 X:FF Y:12 P:25 SP:F9 CYC:302 SL:209 +FB14 90 05 BCC $FB1B A:11 X:FF Y:12 P:25 SP:F9 CYC:308 SL:209 +FB16 C9 11 CMP #$11 A:11 X:FF Y:12 P:25 SP:F9 CYC:314 SL:209 +FB18 D0 01 BNE $FB1B A:11 X:FF Y:12 P:27 SP:F9 CYC:320 SL:209 +FB1A 60 RTS A:11 X:FF Y:12 P:27 SP:F9 CYC:326 SL:209 +F755 AD 47 06 LDA $0647 = 9B A:11 X:FF Y:12 P:27 SP:FB CYC: 3 SL:210 +F758 C9 9B CMP #$9B A:9B X:FF Y:12 P:A5 SP:FB CYC: 15 SL:210 +F75A F0 02 BEQ $F75E A:9B X:FF Y:12 P:27 SP:FB CYC: 21 SL:210 +F75E A0 13 LDY #$13 A:9B X:FF Y:12 P:27 SP:FB CYC: 30 SL:210 +F760 A2 FF LDX #$FF A:9B X:FF Y:13 P:25 SP:FB CYC: 36 SL:210 +F762 A9 A5 LDA #$A5 A:9B X:FF Y:13 P:A5 SP:FB CYC: 42 SL:210 +F764 8D 47 06 STA $0647 = 9B A:A5 X:FF Y:13 P:A5 SP:FB CYC: 48 SL:210 +F767 20 E9 FA JSR $FAE9 A:A5 X:FF Y:13 P:A5 SP:FB CYC: 60 SL:210 +FAE9 24 01 BIT $01 = FF A:A5 X:FF Y:13 P:A5 SP:F9 CYC: 78 SL:210 +FAEB 18 CLC A:A5 X:FF Y:13 P:E5 SP:F9 CYC: 87 SL:210 +FAEC A9 B2 LDA #$B2 A:A5 X:FF Y:13 P:E4 SP:F9 CYC: 93 SL:210 +FAEE 60 RTS A:B2 X:FF Y:13 P:E4 SP:F9 CYC: 99 SL:210 +F76A 7F 48 05 *RRA $0548,X @ 0647 = A5 A:B2 X:FF Y:13 P:E4 SP:FB CYC:117 SL:210 +F76D EA NOP A:05 X:FF Y:13 P:25 SP:FB CYC:138 SL:210 +F76E EA NOP A:05 X:FF Y:13 P:25 SP:FB CYC:144 SL:210 +F76F EA NOP A:05 X:FF Y:13 P:25 SP:FB CYC:150 SL:210 +F770 EA NOP A:05 X:FF Y:13 P:25 SP:FB CYC:156 SL:210 +F771 20 EF FA JSR $FAEF A:05 X:FF Y:13 P:25 SP:FB CYC:162 SL:210 +FAEF 70 2A BVS $FB1B A:05 X:FF Y:13 P:25 SP:F9 CYC:180 SL:210 +FAF1 90 28 BCC $FB1B A:05 X:FF Y:13 P:25 SP:F9 CYC:186 SL:210 +FAF3 30 26 BMI $FB1B A:05 X:FF Y:13 P:25 SP:F9 CYC:192 SL:210 +FAF5 C9 05 CMP #$05 A:05 X:FF Y:13 P:25 SP:F9 CYC:198 SL:210 +FAF7 D0 22 BNE $FB1B A:05 X:FF Y:13 P:27 SP:F9 CYC:204 SL:210 +FAF9 60 RTS A:05 X:FF Y:13 P:27 SP:F9 CYC:210 SL:210 +F774 AD 47 06 LDA $0647 = 52 A:05 X:FF Y:13 P:27 SP:FB CYC:228 SL:210 +F777 C9 52 CMP #$52 A:52 X:FF Y:13 P:25 SP:FB CYC:240 SL:210 +F779 F0 02 BEQ $F77D A:52 X:FF Y:13 P:27 SP:FB CYC:246 SL:210 +F77D C8 INY A:52 X:FF Y:13 P:27 SP:FB CYC:255 SL:210 +F77E A9 29 LDA #$29 A:52 X:FF Y:14 P:25 SP:FB CYC:261 SL:210 +F780 8D 47 06 STA $0647 = 52 A:29 X:FF Y:14 P:25 SP:FB CYC:267 SL:210 +F783 20 FA FA JSR $FAFA A:29 X:FF Y:14 P:25 SP:FB CYC:279 SL:210 +FAFA B8 CLV A:29 X:FF Y:14 P:25 SP:F9 CYC:297 SL:210 +FAFB 18 CLC A:29 X:FF Y:14 P:25 SP:F9 CYC:303 SL:210 +FAFC A9 42 LDA #$42 A:29 X:FF Y:14 P:24 SP:F9 CYC:309 SL:210 +FAFE 60 RTS A:42 X:FF Y:14 P:24 SP:F9 CYC:315 SL:210 +F786 7F 48 05 *RRA $0548,X @ 0647 = 29 A:42 X:FF Y:14 P:24 SP:FB CYC:333 SL:210 +F789 EA NOP A:57 X:FF Y:14 P:24 SP:FB CYC: 13 SL:211 +F78A EA NOP A:57 X:FF Y:14 P:24 SP:FB CYC: 19 SL:211 +F78B EA NOP A:57 X:FF Y:14 P:24 SP:FB CYC: 25 SL:211 +F78C EA NOP A:57 X:FF Y:14 P:24 SP:FB CYC: 31 SL:211 +F78D 20 FF FA JSR $FAFF A:57 X:FF Y:14 P:24 SP:FB CYC: 37 SL:211 +FAFF 70 1A BVS $FB1B A:57 X:FF Y:14 P:24 SP:F9 CYC: 55 SL:211 +FB01 30 18 BMI $FB1B A:57 X:FF Y:14 P:24 SP:F9 CYC: 61 SL:211 +FB03 B0 16 BCS $FB1B A:57 X:FF Y:14 P:24 SP:F9 CYC: 67 SL:211 +FB05 C9 57 CMP #$57 A:57 X:FF Y:14 P:24 SP:F9 CYC: 73 SL:211 +FB07 D0 12 BNE $FB1B A:57 X:FF Y:14 P:27 SP:F9 CYC: 79 SL:211 +FB09 60 RTS A:57 X:FF Y:14 P:27 SP:F9 CYC: 85 SL:211 +F790 AD 47 06 LDA $0647 = 14 A:57 X:FF Y:14 P:27 SP:FB CYC:103 SL:211 +F793 C9 14 CMP #$14 A:14 X:FF Y:14 P:25 SP:FB CYC:115 SL:211 +F795 F0 02 BEQ $F799 A:14 X:FF Y:14 P:27 SP:FB CYC:121 SL:211 +F799 C8 INY A:14 X:FF Y:14 P:27 SP:FB CYC:130 SL:211 +F79A A9 37 LDA #$37 A:14 X:FF Y:15 P:25 SP:FB CYC:136 SL:211 +F79C 8D 47 06 STA $0647 = 14 A:37 X:FF Y:15 P:25 SP:FB CYC:142 SL:211 +F79F 20 0A FB JSR $FB0A A:37 X:FF Y:15 P:25 SP:FB CYC:154 SL:211 +FB0A 24 01 BIT $01 = FF A:37 X:FF Y:15 P:25 SP:F9 CYC:172 SL:211 +FB0C 38 SEC A:37 X:FF Y:15 P:E5 SP:F9 CYC:181 SL:211 +FB0D A9 75 LDA #$75 A:37 X:FF Y:15 P:E5 SP:F9 CYC:187 SL:211 +FB0F 60 RTS A:75 X:FF Y:15 P:65 SP:F9 CYC:193 SL:211 +F7A2 7F 48 05 *RRA $0548,X @ 0647 = 37 A:75 X:FF Y:15 P:65 SP:FB CYC:211 SL:211 +F7A5 EA NOP A:11 X:FF Y:15 P:25 SP:FB CYC:232 SL:211 +F7A6 EA NOP A:11 X:FF Y:15 P:25 SP:FB CYC:238 SL:211 +F7A7 EA NOP A:11 X:FF Y:15 P:25 SP:FB CYC:244 SL:211 +F7A8 EA NOP A:11 X:FF Y:15 P:25 SP:FB CYC:250 SL:211 +F7A9 20 10 FB JSR $FB10 A:11 X:FF Y:15 P:25 SP:FB CYC:256 SL:211 +FB10 70 09 BVS $FB1B A:11 X:FF Y:15 P:25 SP:F9 CYC:274 SL:211 +FB12 30 07 BMI $FB1B A:11 X:FF Y:15 P:25 SP:F9 CYC:280 SL:211 +FB14 90 05 BCC $FB1B A:11 X:FF Y:15 P:25 SP:F9 CYC:286 SL:211 +FB16 C9 11 CMP #$11 A:11 X:FF Y:15 P:25 SP:F9 CYC:292 SL:211 +FB18 D0 01 BNE $FB1B A:11 X:FF Y:15 P:27 SP:F9 CYC:298 SL:211 +FB1A 60 RTS A:11 X:FF Y:15 P:27 SP:F9 CYC:304 SL:211 +F7AC AD 47 06 LDA $0647 = 9B A:11 X:FF Y:15 P:27 SP:FB CYC:322 SL:211 +F7AF C9 9B CMP #$9B A:9B X:FF Y:15 P:A5 SP:FB CYC:334 SL:211 +F7B1 F0 02 BEQ $F7B5 A:9B X:FF Y:15 P:27 SP:FB CYC:340 SL:211 +F7B5 60 RTS A:9B X:FF Y:15 P:27 SP:FB CYC: 8 SL:212 +C655 A5 00 LDA $00 = 00 A:9B X:FF Y:15 P:27 SP:FD CYC: 26 SL:212 +C657 05 10 ORA $10 = 00 A:00 X:FF Y:15 P:27 SP:FD CYC: 35 SL:212 +C659 05 11 ORA $11 = 00 A:00 X:FF Y:15 P:27 SP:FD CYC: 44 SL:212 +C65B F0 0E BEQ $C66B A:00 X:FF Y:15 P:27 SP:FD CYC: 53 SL:212 +C66B 20 89 C6 JSR $C689 A:00 X:FF Y:15 P:27 SP:FD CYC: 62 SL:212 +C689 A9 02 LDA #$02 A:00 X:FF Y:15 P:27 SP:FB CYC: 80 SL:212 +C68B 8D 15 40 STA $4015 = FF A:02 X:FF Y:15 P:25 SP:FB CYC: 86 SL:212 +C68E A9 3F LDA #$3F A:02 X:FF Y:15 P:25 SP:FB CYC: 98 SL:212 +C690 8D 04 40 STA $4004 = FF A:3F X:FF Y:15 P:25 SP:FB CYC:104 SL:212 +C693 A9 9A LDA #$9A A:3F X:FF Y:15 P:25 SP:FB CYC:116 SL:212 +C695 8D 05 40 STA $4005 = FF A:9A X:FF Y:15 P:A5 SP:FB CYC:122 SL:212 +C698 A9 FF LDA #$FF A:9A X:FF Y:15 P:A5 SP:FB CYC:134 SL:212 +C69A 8D 06 40 STA $4006 = FF A:FF X:FF Y:15 P:A5 SP:FB CYC:140 SL:212 +C69D A9 00 LDA #$00 A:FF X:FF Y:15 P:A5 SP:FB CYC:152 SL:212 +C69F 8D 07 40 STA $4007 = FF A:00 X:FF Y:15 P:27 SP:FB CYC:158 SL:212 +C6A2 60 RTS A:00 X:FF Y:15 P:27 SP:FB CYC:170 SL:212 +C66E 60 RTS A:00 X:FF Y:15 P:27 SP:FD CYC:188 SL:212 diff --git a/other/nestest.nes b/other/nestest.nes new file mode 100644 index 0000000000000000000000000000000000000000..fc2a88c36db9c5c2de9cca33be0e446e12007f17 GIT binary patch literal 24592 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 O2L?Sb=z;&AJn-*m;2p96 literal 0 HcmV?d00001 diff --git a/other/nestest.txt b/other/nestest.txt new file mode 100644 index 0000000..6c3657c --- /dev/null +++ b/other/nestest.txt @@ -0,0 +1,724 @@ + The ultimate NES CPU test ROM + ----------------------------- + + +V1.00 - 09/06/04 + +By: Kevin Horton + + +--- + + +What it is: + +This here is a pretty much all inclusive test suite for a NES CPU. +It was designed to test almost every combination of flags, instructions, +and registers. Some of these tests are very difficult, and so far, +Nesten and Nesticle failed it. Nintendulator passes, as does a real +NES (naturally). I haven't tested it with any more emualtors yet. + +I attempted to check the states of all flags after most instructions. +For example, CPY and CMP shouldn't affect the overflow flag, while SBC +and ADC should. Likewise, all forms of wrapping ARE tested for- zeropage +wrapping being the tests most emulators fail. + +i.e. + +LDA #001h +LDA 0ffh,X ;indexed zeropage read + +should read the byte from 000h... NOT 0100h. This is because zeropage +instructions cannot cross a page boundary. + +--- + +How to work it good: + +Simply run the .NES ROM on your emulator of choice. You can select a single +test to run, or you can run ALL tests in sequence by selecting the +appropriate option. + +Pressing Select will change pages and allow testing "invalid" opcodes. +Be aware that these will crash alot of emulators Nesten. + +Once a test completes, the result will be "OK" if the test passes, or a +2 digit hex number which indicates a failure of some kind. A list is +provided below for the failure and its cause. For a more detailed reason +for the failure, you should check out the .ASM file included with this +document. + +If the entire page of tests succeeds, "OK" will be displayed next to the +first entry on the page. If one or more tests fails, "Er" will be displayed +instead. + +--- + +NSF player testing: + +This ROM is set up to be usable inside an NSF player. It outputs the +results of the test audially. + +--- + +Emulator authors: + +This test program, when run on "automation", (i.e. set your program counter +to 0c000h) will perform all tests in sequence and shove the results of +the tests into locations 02h and 03h. + +--- + +Final notes: + +The hex numbers shown on the screen (or stored in the above mentioned +memory locations) are of the LAST test that failed in the group tested. +This means, there could be multiple failures in one or more groups. This +wasn't the best solution, but since there are close to 400 tests performed, +any other way wouldn't have had acceptable memory usage. So long as your +emulator bugs are fixed and the numbers are getting smaller, you're doing +good :-) + + +---------------------------------------- + +Test failure codes and what they mean: + +(byte 02h only) + +000h - tests completed successfully + +branch tests +------------ +001h - BCS failed to branch +002h - BCS branched when it shouldn't have +003h - BCC branched when it shouldn't have +004h - BCC failed to branch +005h - BEQ failed to branch +006h - BEQ branched when it shouldn't have +007h - BNE failed to branch +008h - BNE branched when it shouldn't have +009h - BVS failed to branch +00Ah - BVC branched when it shouldn't have +00Bh - BVC failed to branch +00Ch - BVS branched when it shouldn't have +00Dh - BPL failed to branch +00Eh - BPL branched when it shouldn't have +00Fh - BMI failed to branch +010h - BMI branched when it shouldn't have + +flag tests +---------- +011h - PHP/flags failure (bits set) +012h - PHP/flags failure (bits clear) +013h - PHP/flags failure (misc bit states) +014h - PLP/flags failure (misc bit states) +015h - PLP/flags failure (misc bit states) +016h - PHA/PLA failure (PLA didn't affect Z and N properly) +017h - PHA/PLA failure (PLA didn't affect Z and N properly) + +immediate instruction tests +--------------------------- +018h - ORA # failure +019h - ORA # failure +01Ah - AND # failure +01Bh - AND # failure +01Ch - EOR # failure +01Dh - EOR # failure +01Eh - ADC # failure (overflow/carry problems) +01Fh - ADC # failure (decimal mode was turned on) +020h - ADC # failure +021h - ADC # failure +022h - ADC # failure +023h - LDA # failure (didn't set N and Z correctly) +024h - LDA # failure (didn't set N and Z correctly) +025h - CMP # failure (messed up flags) +026h - CMP # failure (messed up flags) +027h - CMP # failure (messed up flags) +028h - CMP # failure (messed up flags) +029h - CMP # failure (messed up flags) +02Ah - CMP # failure (messed up flags) +02Bh - CPY # failure (messed up flags) +02Ch - CPY # failure (messed up flags) +02Dh - CPY # failure (messed up flags) +02Eh - CPY # failure (messed up flags) +02Fh - CPY # failure (messed up flags) +030h - CPY # failure (messed up flags) +031h - CPY # failure (messed up flags) +032h - CPX # failure (messed up flags) +033h - CPX # failure (messed up flags) +034h - CPX # failure (messed up flags) +035h - CPX # failure (messed up flags) +036h - CPX # failure (messed up flags) +037h - CPX # failure (messed up flags) +038h - CPX # failure (messed up flags) +039h - LDX # failure (didn't set N and Z correctly) +03Ah - LDX # failure (didn't set N and Z correctly) +03Bh - LDY # failure (didn't set N and Z correctly) +03Ch - LDY # failure (didn't set N and Z correctly) +03Dh - compare(s) stored the result in a register (whoops!) +071h - SBC # failure +072h - SBC # failure +073h - SBC # failure +074h - SBC # failure +075h - SBC # failure + + +implied instruction tests +------------------------- +03Eh - INX/DEX/INY/DEY did something bad +03Fh - INY/DEY messed up overflow or carry +040h - INX/DEX messed up overflow or carry +041h - TAY did something bad (changed wrong regs, messed up flags) +042h - TAX did something bad (changed wrong regs, messed up flags) +043h - TYA did something bad (changed wrong regs, messed up flags) +044h - TXA did something bad (changed wrong regs, messed up flags) +045h - TXS didn't set flags right, or TSX touched flags and it shouldn't have + +stack tests +----------- +046h - wrong data popped, or data not in right location on stack +047h - JSR didn't work as expected +048h - RTS/JSR shouldn't have affected flags +049h - RTI/RTS didn't work right when return addys/data were manually pushed + +accumulator tests +----------------- +04Ah - LSR A failed +04Bh - ASL A failed +04Ch - ROR A failed +04Dh - ROL A failed + +(indirect,x) tests +------------------ +058h - LDA didn't load the data it expected to load +059h - STA didn't store the data where it was supposed to +05Ah - ORA failure +05Bh - ORA failure +05Ch - AND failure +05Dh - AND failure +05Eh - EOR failure +05Fh - EOR failure +060h - ADC failure +061h - ADC failure +062h - ADC failure +063h - ADC failure +064h - ADC failure +065h - CMP failure +066h - CMP failure +067h - CMP failure +068h - CMP failure +069h - CMP failure +06Ah - CMP failure +06Bh - CMP failure +06Ch - SBC failure +06Dh - SBC failure +06Eh - SBC failure +06Fh - SBC failure +070h - SBC failure + +zeropage tests +-------------- +076h - LDA didn't set the flags properly +077h - STA affected flags it shouldn't +078h - LDY didn't set the flags properly +079h - STY affected flags it shouldn't +07Ah - LDX didn't set the flags properly +07Bh - STX affected flags it shouldn't +07Ch - BIT failure +07Dh - BIT failure +07Eh - ORA failure +07Fh - ORA failure +080h - AND failure +081h - AND failure +082h - EOR failure +083h - EOR failure +084h - ADC failure +085h - ADC failure +086h - ADC failure +087h - ADC failure +088h - ADC failure +089h - CMP failure +08Ah - CMP failure +08Bh - CMP failure +08Ch - CMP failure +08Dh - CMP failure +08Eh - CMP failure +08Fh - CMP failure +090h - SBC failure +091h - SBC failure +092h - SBC failure +093h - SBC failure +094h - SBC failure +095h - CPX failure +096h - CPX failure +097h - CPX failure +098h - CPX failure +099h - CPX failure +09Ah - CPX failure +09Bh - CPX failure +09Ch - CPY failure +09Dh - CPY failure +09Eh - CPY failure +09Fh - CPY failure +0A0h - CPY failure +0A1h - CPY failure +0A2h - CPY failure +0A3h - LSR failure +0A4h - LSR failure +0A5h - ASL failure +0A6h - ASL failure +0A7h - ROL failure +0A8h - ROL failure +0A9h - ROR failure +0AAh - ROR failure +0ABh - INC failure +0ACh - INC failure +0ADh - DEC failure +0AEh - DEC failure +0AFh - DEC failure + +Absolute tests +-------------- +0B0h - LDA didn't set the flags properly +0B1h - STA affected flags it shouldn't +0B2h - LDY didn't set the flags properly +0B3h - STY affected flags it shouldn't +0B4h - LDX didn't set the flags properly +0B5h - STX affected flags it shouldn't +0B6h - BIT failure +0B7h - BIT failure +0B8h - ORA failure +0B9h - ORA failure +0BAh - AND failure +0BBh - AND failure +0BCh - EOR failure +0BDh - EOR failure +0BEh - ADC failure +0BFh - ADC failure +0C0h - ADC failure +0C1h - ADC failure +0C2h - ADC failure +0C3h - CMP failure +0C4h - CMP failure +0C5h - CMP failure +0C6h - CMP failure +0C7h - CMP failure +0C8h - CMP failure +0C9h - CMP failure +0CAh - SBC failure +0CBh - SBC failure +0CCh - SBC failure +0CDh - SBC failure +0CEh - SBC failure +0CFh - CPX failure +0D0h - CPX failure +0D1h - CPX failure +0D2h - CPX failure +0D3h - CPX failure +0D4h - CPX failure +0D5h - CPX failure +0D6h - CPY failure +0D7h - CPY failure +0D8h - CPY failure +0D9h - CPY failure +0DAh - CPY failure +0DBh - CPY failure +0DCh - CPY failure +0DDh - LSR failure +0DEh - LSR failure +0DFh - ASL failure +0E0h - ASL failure +0E1h - ROR failure +0E2h - ROR failure +0E3h - ROL failure +0E4h - ROL failure +0E5h - INC failure +0E6h - INC failure +0E7h - DEC failure +0E8h - DEC failure +0E9h - DEC failure + +(indirect),y tests +------------------ +0EAh - LDA didn't load what it was supposed to +0EBh - read location should've wrapped around ffffh to 0000h +0ECh - should've wrapped zeropage address +0EDh - ORA failure +0EEh - ORA failure +0EFh - AND failure +0F0h - AND failure +0F1h - EOR failure +0F2h - EOR failure +0F3h - ADC failure +0F4h - ADC failure +0F5h - ADC failure +0F6h - ADC failure +0F7h - ADC failure +0F8h - CMP failure +0F9h - CMP failure +0FAh - CMP failure +0FBh - CMP failure +0FCh - CMP failure +0FDh - CMP failure +0FEh - CMP failure + +(error byte location 03h starts here) + +000h - no error, all tests pass +001h - SBC failure +002h - SBC failure +003h - SBC failure +004h - SBC failure +005h - SBC failure +006h - STA failure +007h - JMP () data reading didn't wrap properly (this fails on a 65C02) + +zeropage,x tests +---------------- +008h - LDY,X failure +009h - LDY,X failure +00Ah - STY,X failure +00Bh - ORA failure +00Ch - ORA failure +00Dh - AND failure +00Eh - AND failure +00Fh - EOR failure +010h - EOR failure +011h - ADC failure +012h - ADC failure +013h - ADC failure +014h - ADC failure +015h - ADC failure +016h - CMP failure +017h - CMP failure +018h - CMP failure +019h - CMP failure +01Ah - CMP failure +01Bh - CMP failure +01Ch - CMP failure +01Dh - SBC failure +01Eh - SBC failure +01Fh - SBC failure +020h - SBC failure +021h - SBC failure +022h - LDA failure +023h - LDA failure +024h - STA failure +025h - LSR failure +026h - LSR failure +027h - ASL failure +028h - ASL failure +029h - ROR failure +02Ah - ROR failure +02Bh - ROL failure +02Ch - ROL failure +02Dh - INC failure +02Eh - INC failure +02Fh - DEC failure +030h - DEC failure +031h - DEC failure +032h - LDX,Y failure +033h - LDX,Y failure +034h - STX,Y failure +035h - STX,Y failure + +absolute,y tests +---------------- +036h - LDA failure +037h - LDA failure to wrap properly from ffffh to 0000h +038h - LDA failure, page cross +039h - ORA failure +03Ah - ORA failure +03Bh - AND failure +03Ch - AND failure +03Dh - EOR failure +03Eh - EOR failure +03Fh - ADC failure +040h - ADC failure +041h - ADC failure +042h - ADC failure +043h - ADC failure +044h - CMP failure +045h - CMP failure +046h - CMP failure +047h - CMP failure +048h - CMP failure +049h - CMP failure +04Ah - CMP failure +04Bh - SBC failure +04Ch - SBC failure +04Dh - SBC failure +04Eh - SBC failure +04Fh - SBC failure +050h - STA failure + +absolute,x tests +---------------- +051h - LDY,X failure +052h - LDY,X failure (didn't page cross) +053h - ORA failure +054h - ORA failure +055h - AND failure +056h - AND failure +057h - EOR failure +058h - EOR failure +059h - ADC failure +05Ah - ADC failure +05Bh - ADC failure +05Ch - ADC failure +05Dh - ADC failure +05Eh - CMP failure +05Fh - CMP failure +060h - CMP failure +061h - CMP failure +062h - CMP failure +063h - CMP failure +064h - CMP failure +065h - SBC failure +066h - SBC failure +067h - SBC failure +068h - SBC failure +069h - SBC failure +06Ah - LDA failure +06Bh - LDA failure (didn't page cross) +06Ch - STA failure +06Dh - LSR failure +06Eh - LSR failure +06Fh - ASL failure +070h - ASL failure +071h - ROR failure +072h - ROR failure +073h - ROL failure +074h - ROL failure +075h - INC failure +076h - INC failure +077h - DEC failure +078h - DEC failure +079h - DEC failure +07Ah - LDX,Y failure +07Bh - LDX,Y failure + +------------------------------------ + +Invalid opcode tests... all errors are reported in byte 03h unless +specified. + +NOP - "invalid" opcode tests (error byte 02h) +--------------------------------------------- +04Eh - absolute,X NOPs less than 3 bytes long +04Fh - implied NOPs affects regs/flags +050h - ZP,X NOPs less than 2 bytes long +051h - absolute NOP less than 3 bytes long +052h - ZP NOPs less than 2 bytes long +053h - absolute,X NOPs less than 3 bytes long +054h - implied NOPs affects regs/flags +055h - ZP,X NOPs less than 2 bytes long +056h - absolute NOP less than 3 bytes long +057h - ZP NOPs less than 2 bytes long + +LAX - "invalid" opcode tests +---------------------------- +07Ch - LAX (indr,x) failure +07Dh - LAX (indr,x) failure +07Eh - LAX zeropage failure +07Fh - LAX zeropage failure +080h - LAX absolute failure +081h - LAX absolute failure +082h - LAX (indr),y failure +083h - LAX (indr),y failure +084h - LAX zp,y failure +085h - LAX zp,y failure +086h - LAX abs,y failure +087h - LAX abs,y failure + +SAX - "invalid" opcode tests +---------------------------- +088h - SAX (indr,x) failure +089h - SAX (indr,x) failure +08Ah - SAX zeropage failure +08Bh - SAX zeropage failure +08Ch - SAX absolute failure +08Dh - SAX absolute failure +08Eh - SAX zp,y failure +08Fh - SAX zp,y failure + +SBC - "invalid" opcode test +--------------------------- +090h - SBC failure +091h - SBC failure +092h - SBC failure +093h - SBC failure +094h - SBC failure + +DCP - "invalid" opcode tests +---------------------------- +095h - DCP (indr,x) failure +096h - DCP (indr,x) failure +097h - DCP (indr,x) failure +098h - DCP zeropage failure +099h - DCP zeropage failure +09Ah - DCP zeropage failure +09Bh - DCP absolute failure +09Ch - DCP absolute failure +09Dh - DCP absolute failure +09Eh - DCP (indr),y failure +09Fh - DCP (indr),y failure +0A0h - DCP (indr),y failure +0A1h - DCP zp,x failure +0A2h - DCP zp,x failure +0A3h - DCP zp,x failure +0A4h - DCP abs,y failure +0A5h - DCP abs,y failure +0A6h - DCP abs,y failure +0A7h - DCP abs,x failure +0A8h - DCP abs,x failure +0A9h - DCP abs,x failure + +ISB - "invalid" opcode tests +---------------------------- +0AAh - DCP (indr,x) failure +0ABh - DCP (indr,x) failure +0ACh - DCP (indr,x) failure +0ADh - DCP zeropage failure +0AEh - DCP zeropage failure +0AFh - DCP zeropage failure +0B0h - DCP absolute failure +0B1h - DCP absolute failure +0B2h - DCP absolute failure +0B3h - DCP (indr),y failure +0B4h - DCP (indr),y failure +0B5h - DCP (indr),y failure +0B6h - DCP zp,x failure +0B7h - DCP zp,x failure +0B8h - DCP zp,x failure +0B9h - DCP abs,y failure +0BAh - DCP abs,y failure +0BBh - DCP abs,y failure +0BCh - DCP abs,x failure +0BDh - DCP abs,x failure +0BEh - DCP abs,x failure + +SLO - "invalid" opcode tests +---------------------------- +0BFh - SLO (indr,x) failure +0C0h - SLO (indr,x) failure +0C1h - SLO (indr,x) failure +0C2h - SLO zeropage failure +0C3h - SLO zeropage failure +0C4h - SLO zeropage failure +0C5h - SLO absolute failure +0C6h - SLO absolute failure +0C7h - SLO absolute failure +0C8h - SLO (indr),y failure +0C9h - SLO (indr),y failure +0CAh - SLO (indr),y failure +0CBh - SLO zp,x failure +0CCh - SLO zp,x failure +0CDh - SLO zp,x failure +0CEh - SLO abs,y failure +0CFh - SLO abs,y failure +0D0h - SLO abs,y failure +0D1h - SLO abs,x failure +0D2h - SLO abs,x failure +0D3h - SLO abs,x failure + +RLA - "invalid" opcode tests +---------------------------- +0D4h - RLA (indr,x) failure +0D5h - RLA (indr,x) failure +0D6h - RLA (indr,x) failure +0D7h - RLA zeropage failure +0D8h - RLA zeropage failure +0D9h - RLA zeropage failure +0DAh - RLA absolute failure +0DBh - RLA absolute failure +0DCh - RLA absolute failure +0DDh - RLA (indr),y failure +0DEh - RLA (indr),y failure +0DFh - RLA (indr),y failure +0E0h - RLA zp,x failure +0E1h - RLA zp,x failure +0E2h - RLA zp,x failure +0E3h - RLA abs,y failure +0E4h - RLA abs,y failure +0E5h - RLA abs,y failure +0E6h - RLA abs,x failure +0E7h - RLA abs,x failure +0E8h - RLA abs,x failure + +SRE - "invalid" opcode tests +---------------------------- +0E8h - SRE (indr,x) failure +0EAh - SRE (indr,x) failure +0EBh - SRE (indr,x) failure +0ECh - SRE zeropage failure +0EDh - SRE zeropage failure +0EEh - SRE zeropage failure +0EFh - SRE absolute failure +0F0h - SRE absolute failure +0F1h - SRE absolute failure +0F2h - SRE (indr),y failure +0F3h - SRE (indr),y failure +0F4h - SRE (indr),y failure +0F5h - SRE zp,x failure +0F6h - SRE zp,x failure +0F7h - SRE zp,x failure +0F8h - SRE abs,y failure +0F9h - SRE abs,y failure +0FAh - SRE abs,y failure +0FBh - SRE abs,x failure +0FCh - SRE abs,x failure +0FDh - SRE abs,x failure + + +RRA - "invalid" opcode tests +---------------------------- +001h - RRA (indr,x) failure +002h - RRA (indr,x) failure +003h - RRA (indr,x) failure +004h - RRA zeropage failure +005h - RRA zeropage failure +006h - RRA zeropage failure +007h - RRA absolute failure +008h - RRA absolute failure +009h - RRA absolute failure +00Ah - RRA (indr),y failure +00Bh - RRA (indr),y failure +00Ch - RRA (indr),y failure +00Dh - RRA zp,x failure +00Eh - RRA zp,x failure +00Fh - RRA zp,x failure +010h - RRA abs,y failure +011h - RRA abs,y failure +012h - RRA abs,y failure +013h - RRA abs,x failure +014h - RRA abs,x failure +015h - RRA abs,x failure + + + + + + + + +001h - +002h - +003h - +004h - +005h - +006h - +007h - +008h - +009h - +00Ah - +00Bh - +00Ch - +00Dh - +00Eh - +00Fh - +010h - + + +Todo: check to see if decimal mode is missing on CPU diff --git a/other/nestopia.nes b/other/nestopia.nes new file mode 100644 index 0000000000000000000000000000000000000000..2f621f136870ab3855554c4c1401bd5de6a95eda GIT binary patch literal 131088 zcmeI*Z-^Y_9S884-Ob*g#N6H`xw|A%Cf?qqY4c*EZEb78^+n;dM^Oa(cBKec*kXK_ zm%C?1Xkct@`yy>gdn{eK2@N&=KjTGwqZkklilv2u+83#=Z=_HxSXpPEBTYeH*q4FN zm)p7T@408@Wkt(Cmkm zes#ONdGOJ6EWb0WCV5mGdQpEY8%yT5x}Vt=mVfg3%TIjX@_X-$Z(kg=dK*`^Klw0f zg`0VD{_$$kpDX^;?++$_?u20?8I6aMzjpfbcUR7bwPWv&)($6s+u3sL-JMN0CvSIJ z?O(<1-^A^6ar<|1{)gfn_R{rEy;hsJTI*%&ot3F>eP1!`yEe?!s#j-v(R$~x=yV+R zPKUjJFZSN?zk7?}`rgv%a_`i7x4yqo>HT!Q`&i}luGc2(la2qh`n$7uq*YGxQntUD zTpA{qhy6X-uB3lcacEbfyt8ZX=)R(@!SLK**n49zxU&86Am0ef{k`c_uUw!E2L17g z=={#6tCP*mr^*HL=2Ml?@nYx~Lw`E-r$c`x^k+hUHuPshe=hXrLVrH==RTEP0Hx1(tOM{(Az_M*o-)n4hx z-Rikc^}TmGKl@i6r{npT(%t!)tP|(=WKYD|&*SVDarVo&xYmK@R5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t9Xhf#QMa?NW5Ac%FHb6px#~ z_9*$4lWWEE)a#SA^2!6<0-ZL9GCJqn{D1xyn167W}C;#Z^TOr7v^?K{YveF{=(woXz$`u zapJ>2{K5C`yzS`Wsq#l3y#1%wFa2@tzv=Ge#sGDf1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNA}LkhH`s9lOq-p+Kg&Rqj_)ZWITQ3#9jA2_{dwsSBLKpZ^(D;k zWm)TG#ETapP}7S83VPcfTt?MhfPQo`jX0|m5G&!mq{;^Q6{rY)^2U5l6)0X zKqAnDn2*GJk$67}Ka&&TxSV?T${UgRAQBsq*o=JNSND>)*{wYezX^ziTA;CTJ>X0Z zbr!O~P(4eXGA!i55DUK#Y&FcP;Rp-w1P=2-+Yc2|R_UwwL? z^h@-sPw$iFkJqQ`+H6pLx-PQ^)u(lX>(jdPum3lGYOi~vcmIzz_OR2t|GoA7_rH79 zKleW?LkXp!M%nD~{a52oc4S12RKBx+|Ly(niuLPt-?#of&uPblskM0-Yt^Z0ay{{Q z+D=j0?q94Et2-(M=!gjH@%YUdc>XC#pqUx_=QW?k|d#e z;qHstFS7mP^8F+!amFpnGG)U|UAK4~N5#mGV_y`bVk}~Eyybely)D<}j_bMy( z&88g3je}NedwXxMvFyr}<5-;NrOjq@kAEsNG7gq#rS-FnRx4R;M^f@!d7Vb`QQGnC zs24h~8ugNjPYQ*)j7BR-3Wd2j&-2bIM;-zYfB*y_009U<00Izz00bZaf&W3^ E2{0}Wo&W#< literal 0 HcmV?d00001 diff --git a/other/nintendulator.nes b/other/nintendulator.nes new file mode 100644 index 0000000000000000000000000000000000000000..c55ded4cf1b59ce7b939c77dbb2caa20ec96cd76 GIT binary patch literal 131088 zcmeI*O>7+H9S7i<-Oc(VA6`3&?F3X!;D0M z?K&BxMjBMw9{5m%wdx{I)JTM{V1k13O%G`d*Q+fs%7?#B3CL0jvzfh zdB?y1>vz`UM=M|7`+xq6!pJmk~kBUn#>W^h($^2IL|F(tYUw`@X(_gmy@rUEvmjc!Z4AH#>2_qI{o>Rl?!3**hiza+mgTE+;Z%ro11P={@H1@ zpN-qk$L;fR`-M3FWAPXE()CWgR-3q9>t*Ymm8ouhe=+R8HO$ni*JpasdgsaLY#jDZ zhrRzQ_TKZqdy8RbZ|Q8gcY3{BKhUW3o?Y)gSvkAwy~+Ay`K&6g^p>!r{yh5mBrFNgk0=&ywSYUrF-75Y}_S3|!V`rDzuJ?gE$UVAQYW^>Jgsn$GR zN{X-AXW^1Z>10wmlYG8bw25S6ZKb#N;>6a`GikI{d=}$&6wUuC&brlJ^i-$XD?QS! zp6^sY{;>0#PxCk(&%c%K&d+6?IKMA@I?jF@XTOWH-^ay!9V}k6`7oVH{@q#mOY!d6 z!Dg#itEJQFOuE1L$${_@%&WyaMCqP%Z@RB_d96{TG|JT2D4~|hm0i^^j>RE+c27=> zhlFt|)TvQMw>M@+iRMNLb!Pv8gR^0rn-01Cw!??!L&6w^x^w^0QEGRL66(=~`r=X; z?>G{2{JY;d_U(``)e-}+bK zI{^X&2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7csfv>YbaSVF96rCal)MFnE-x=N*7RQ_~ zr1f+$U263gP7c$>e!aLZ<#9IKysvom#xBk_kCoq#mliJ0-7NKMwg2=N78gf*7nh0~ zAAjW3FHipT#Nwg7@uxTb@uzn;*LKnk`8qRtHUb0)5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&U_=XF#qo`eqPUle;C0U&GqOHO3{9w59#M<#vQlG4qS03svpId%r zd39s;!fG?BC5`3-tw-bOBPZ^C@YG`;4Br{v7=FVIJU#&e1PBlyK!5-N0t5&UAn+9g zhC+Y<0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF P5FkK+009C7zJkCPJig0y literal 0 HcmV?d00001 diff --git a/other/physics.0.1.nes b/other/physics.0.1.nes new file mode 100644 index 0000000000000000000000000000000000000000..5f0dcd43232c442f1100101a600c1426e1efa664 GIT binary patch literal 24592 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 literal 0 HcmV?d00001 diff --git a/other/pulsar.nes b/other/pulsar.nes new file mode 100644 index 0000000000000000000000000000000000000000..62a2995e4210ed9cbe95267105b93524ea11a510 GIT binary patch literal 131088 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�W!)ReIS6tZsW`^T#pzRD-(PX?v2duAO z-OUD=K#usZhSS$Gdg}0bCUcT1K6zNh8Zfgb9HCOtJ2?9=3Gh$j?u;mCyD@!pcekE; zE!j?kNla*POL9UOCLFeNa9pkr*O%*woLU1ZXCz4P3(O0E_nxmC_-pzo0*`4a?1fMW)*->_xHZ{lc#XtrJ^ zp^Yj9@Py@}2R+tY1%?E>x|+`V00upHT^yW|;8w#ZWIwTt*_#e4eZ8Fz+YQzSLQL}q zv1Iw-S3^23W%QWCE8&ZBn4=uXiv`6WFd&pAY!}yx$MXpkIFu?O^(MS7SO+!J56PJt zM!sovU@sD2B2&bXf@OtvRG1=LJSJe4Md$qWWiv= zg?Q>Q0}919hF2w48WNHX0DcY+1kb8oLbKCA;ZBJO&smR1Ay2QB>J9912cU(31Bo9f zHWmJ73!~6XH%M4Q3?_66{uTrrB}{IC1W4ho@@SjE#>~PhvtVa@Hy<2*QKo z&CfS8La{KT;6E>sNR7zzCVX9!(ak6=!Ea9SDk zmeEN1EzUb`FhQ+q&V&9N`yPh^SXL!GzZhZPYIfLdYqJU48-?nH9iuTAFbHzML+ICw z9Rj&bviQdQ>5uKQ&wQKB?yzUs1F#RkU{GDVmyBlg z(fZR#x7DbYK@1z#Y&#}90JPcB%?W&c&g8&Pg+?04fj@GPU)$Ak{&IU0xeZ4hKm_KN(~3hG^(A|xYHnI$nrZ*sZOdHR+tbY>Sy`h3|gLz z4FfkqA8&>omp~i`lGyX@s0}t|aSFOy@vxL+|FIdXS!cEyMJ{TH&8yjqCDuRNjWf>b zIZjew0}EWDmoiOGZ=pEwOV=^{>Cl%$DTsMRmW8Q=>H<0mTuqDFB)vAfSB}_)5sk1Q z*aX%S@;ER9XV|bk{~ad5FCsm=uJ}hUBoCus|{Y0<9cx*JJiR9tlE*oWFcQ zgX>!DVSJDH+a^@cLa67<(a5fxWE`7Qj0=^rhA-#VG6w~h)4D2!3JxAnbmi=5@A=`; z!I?c7;hsWYKRPTxmf>&E_>Drw?6x7266rQMWW^@H*pv(fbG8+CPo13wBl`5v*uGfD zfWga##I`;Nlpv1EiXSJEM zN%}zNNJ?;_*cssdmcPLZUr>Nb_AdcT2d1RJoB|JF{B>uOF1&5*F|GiSf#hI*W7r|` zB>{1K^Cr$d`0(M=jLn%Y>|9Bypp~!4_89g@SbE)<^t3|FsaS2!nofG<6vz1t`-s$D zx5?obMTXkaJ*UrU{z3J`(40J905(?oDE1r5U>bz3~K1<38zDq(5eD80*?k_sSvZ}Fgyb5Q22Jx zqJW%CGzVJa?yC7$GzIjiklO&hNUA2~^z!!Q%a?a|MYx9~LLQ#%KY#l4IR_V}A+Zop zC4O4IySu%;y4cX|DO?!1BqW{!Ir4ilBW@|M6vVM2iHfIm9{wgS9bGD*XN4~ylpxNi zV)Ug0VAsUzNobIWG;WS~E`nx@2M=5;WFvvuC5M`)!7~>$a{&Vfoet0m#3p#-JCGiD zRX~3^z7Lv`&?Z3vfsNrmLM)N9tieMpLRS@;f558-6n=0GkuBV4vcQ3nu}Fps$g@j1 z1&*j9em7KKg521bxFZ~1Bs@8gtX8qqv*yM82{+>%2!T8kK?s`0 zEXoVR0M$Y}PO92-X{KPurSOgqTlEml~e?dx4KMyJ#HmTOLS+h!vV1tvID>et! z%MtPbLKRI8lm`#wcqJ=!_~e7{e!Rc;;N$)LX^C?JBs?PFc3iihM%x?NQXY%LUCxM) zz32|M^QFxHjPtR!39(!v9aFH7ZVzhG?5@=r!~?%Q@DtKx@R@@N=~wMRyAS^*^18O} zn=y-up2x)DdK~irGRz>Nq+7%jF~|K76-hLJ_#-(AezrtLH3!C#2+pxcL=$b!rk4N% zaE(|8GLe#dC_ToY=g0`*cu72r$QmB+5L8Gw7;MiKr{T>xF^U}WcFfvAND+@9WsOUbN43`3~`Z>1~!N4N;*1=fljh%9^|aj_*P#)8E9SD^@k zMFLjw6-*(G74Dwv4O=Mnr}q3^|n&Q(ew}THmhY09$TII`!gq(UY?_IUrth`&eG! zd#0AD_ep~1TsI3%@jmxSRX$vZ-=^iXlU6A+4ojoo>IFrJ}Q6iV6tdhCp1~HrKcPj01c5NGsp-@rx7;**5rLx(K>b9NhB~k8Vj1g+Q8rE zJHNWvLh^-819En8y;bw?lCq9{A={X<%|hlLG>g-*Kw$8-`0EE7`vKzFGq)N51gEGA$?N!&2{ z7jM45x#7S7R8tu0W~))G6szqy@Od+vC7;Q}Y&AoUTlK;*64v9mCj9eOXoo}oFdj(~ zvT5w5);qu3j9idl{!oU>Vz9K#8HZMOy?Ws+m8&~=^WbDKb8vF-kL27!8*h%klV>%g z|D0$`;DvZ7`%S5)$&fQ5p^_6Y<6K$Re^;1I_#tdi_BZSWuscu}WUuJALdEGOF~|ah zvR1@Fb8(A^xr%o5tcp31Lu>J%0iMdW;bz>fCBuL-5?pe#ToN0JM71b~NvmWz!ppB& zm=}yDaZk@ImN-8bxB(!@s@1Ka-}5S9Q#c1=qBR>idqnXq17sd+xZTBWccB1Co6#yx z*;!t!g8_+w#F5E)BJ~j71sfYH9IklXkp2sXhAl&whfoTOOb!|W_re17)cF|lo&Tv{ zzmfmH_~9@8@_+fS-+0#e^?LJbt)G8+|N8$Z|6klq(rN@kVh@365p80x;e7Mwt1u!l zjkzeHaz!-&dN%A1$9g0Yf3~IJAmz#Z!g96MmPbROTXAam3!wxpVKzho4zb?q!lEFg z1}_835b2AOSqTXODj^~K!okCjKK$-?fBrXr^XHxxP~8;lwjk}TKmW;R=YTv3SoW;v z1?M++{0=#Uc-Rku>D3nJoecE_e++3fxgqNwlYcrJM8j}+^ZGXNw0x;%(asFVft(zE z@SX3x|MB;}_w(QR<~M)-;p5--t#5woTi^cP-sfNb_$QyAUw!ezFFyVBvrj+$^pnrt zzFb}Xj^Fv?YXVQuA+J|qrP>43!bi`Z9-W*#``{@VsULpl=l+*(efz!le%rUd^_{2L zbSAz3?7;^gK6?7}VcygTgPm2qcmj43PVQb`Z?A6O+`aw5Pd(8^iNB>W}DIy2NqBAEj-*u=nWMaoLRet!&zd%?-D;Pu?Av-QdmlUoAQA z0Am|*dU(ViZ^b3Ak%U_&NNcXvu}Qj~fGD9?tS6wsaw=yKPsX9qUR|yxSnPz)XjaW$ zo^#qPaOnQt-qGpV!Q*PXt(|fX;`0*@Nj-f`<|aqgc(?{|Ma)WgaWO>!ce>*RCpCxL z&wljdAARxpr?2kbe(}ZY>!17|zx|VK9~3U=20EuY)NA>}Cl5dR;K8%w)BUH}dg0{B z#}D{)lsbO+u+RiJvg+he!3jD(xqbE9f9L=9W<$yjNs_*r$?q1z+!nzyng1arU$S9!Kel`sMBlnN1{sT?SNC%Ct?Dx&o3{}aYtv1&F13ei;Fpb@=3fg z0)TlAKF;I77E?#Zvv|k&6D1DH&Sq058EhG>L0&ESLp+?!%{ddR zi|ZG6FD@^j9>00}`o(rJ;Q$0qFYb3R_bhVRv8C`)Bxe?Q35G8ol2EOLd5@tzv2&dM>$|&~EgMe~UL-l3^_+)?T*`^x4@e^kZijo%_D|BxIZK_B zrE#ZN0@>2_ix+oyuip?M;n08bnub7IfQJ|@Bwmox3{3`d2Jz(rX&#&jPf92}GL1}q z{zh7@W^witrygRePG_WpL97@I@K;wHRgNRR;17%SvA2PLfwr++D?&cgNn0dPT}0qn z8leWrxTD1d=XaApv)bNVUo3HWMx*8SiogtKdUk-6J7$%{Q}Qq2vvE2?8t;$eh3M0> zr$!SJ`!mTQKZT;S>a^6vX@Nw&Lw@%EE9FNmLsXUm^9 zcFB|`jto3@RF^jD*k^EhM3CYYI59y&xb0WhocOR1bOEbuv=~LiNANkC93Y-e=dv8o zt*b>Ku~=vqoT|V%UKV}Fmc>89nqm5x{cuEtH%jK`7Z)qsy$Ss08ekpifdCchlf7p} zt;A}8KL_)e2_nt$_*ubiTJR(IdsBGVWIk}%LbH2uvt6EFzIyZe_QlN=ul1tuPp&qQ z*B2mo*i)QQpp{ckN)4g8m*C)JNylM*=T4uT)M=$bz{%+Q<15w>N62%W1;969&3gVI zMRGi5nDCbXF)9qt!P8QRr_#oVC6NJ?fw)#7rN`_Lvg9CoAt?nFb1Tj5-R-%7+j0VA_JLz*i)Ao=qbK9v0f*>o{_y97mGlbmp@s2gY!WS1x=? z_zV&YHuL$2Mv?g``MKw7P{58;DTk6a2*>YVXBMPP&mp z&6Y@$4attawf^L8#UE8rT!OgWsO1hGd^g`}TLkZzcqjv4PDcmN9#vvIL!InD$uK1A zx6A?0KHe0d3+r)0V4r9g2fYxUg7RB0=1v|z)&f`7GMrrKtBqS(S?3^hl?>5h0U$X^;8p4qaXtm72!+m$q1Fy%$73o++F{bv; z+Ve3U7YKX+)4rkNx@4A0Xaslo-F!J0|Xa0!){bKf&Tf2rw%71AmWTDwDSi~ z-+%AD4?fDcNo?afxxPo`VRyM6brxU#_|uzP=D?%JCdnf}obcBJ&rREC%DW@s!3VkaK^ zF_Kk%uXT4nXew%3qtk0sN65H(<=Nwu#(x)T!B!3xI<>O6l+!3Lr&sdIZ@iq{)rH;7 z^}+3#p{xPKPlrQiHACk7`22yjJAUB1>-QhO2La(4Ts>SmomSUZQryW}C`8#5r@f}a z9Fw|IN?Y0|!@<$%;mz}h>q~)GNV`41IY%J7fIA|Zz@fDQCbJ$2j(C>IikzAKEldJr zi>387-OWmq=LZ{j)F^HbsB+c7C=SCnHOjsz?w8t<;Ze?D(+cx7UY-?KhpdYk0_vzZ zm@;8?62`C!CEP~!VS|n?5r^mzQ^#l}I}$E%`Nn!p(GW$*Hx`nk)E0?wD9(}1NQibb zo0JpgG|~s*fFOjO(FB{{fW?A!2t;*;KufsCFjLqj>ChQ-$Yp@X6f>d}atErRWetGS ztpmY8rqRU%!;qgGPEIbN2r=sYV8jOoJPWJ@90g%WjjO>}bCtVdb_H{!kjEF&5`{@5 z(9a|ihY)@rK*jFw1%w1+4PuJRhfBsj*(7ZbUrd&WSj};O#!-Yt2!+`Xy@+blD|Wv+ z6mQC@Idc>x98}P+?BY69HH3giM~;)Qz+n@PDgyPKTO(a;Om$eX=N4*~K6sK_bLVn4p%mb-E~f*@OTp#f2aik>VBfIB)m z^-M)HzaM`V2291B%x>9TkG$a^0POIQPJ$vLb zl|@8C1Q50yW6xUU;ND;dF$7%MtOu)X%;F?!cYUK`J(oY=YvZ=VQks3{{p*V_zxxV1 zZT`*MIjQdQo9}-6n}6}I{^h^;uU~F%Wj{P#-=3ddzW?>tpRcZO@8o?~w-?i6EvLPM zGk#`=;n;9?IzG~=ZfDK!xE?q2+aXc&+IThh4}bsL-^{J9zWwIg@8%X3H`X^&^eD^g zb4}T!uQcGgj|I~7E({v+(@NWG>1ylb_U6GBo=!(RVVOOJf5g_#R&zEj)3ENB_Vc?- zuU>yWzp%KdAlg$6^m_2eRu|XS4LEtcJ05YL)Nl#e574{SxqW}D0WrRKdbqyqb+Va_ zoyEDFp-l=nZOlq8z4YeWuYdQO-_30=efM|2f4Q`_sU5Mt^~~$SUu-Upear5sef040 zYI<>V`}AIdVDpe`^c$y_{R+oKT*{t#({>zY)G^nN;5KXQ8qg8UztmQ}Rl;kuzjS<- zUe7PD%+Jl2nyzlIkS`e~vbH?;?H|AU!#^yAI5!`Tkr#J={&)ZM^Dn>tiMjia9~qhP zbZZZv9ti^jk!|EbSLtkS>&?rZTxy9}&x0h&LciNse><0x>tr1x&ZXEfn*4jY5zD9H z@oW?)#x_f{OnQBLfGdE$q_GmaOzxTDK!&kUs1r+JwoD(Dkg}|sOYE)C%{KN6oP!8h zW>XGo>Jj+j!q+b{I2y#pIvP0F zEv3jkJmoa+%9T0YBq#LOZ?<-l>>`w&6E+@qDukPJ(qJ9iNc6Omq_s3O{27ifn7m;n z2kAYi;R2i}7xRLwa}X|g9$f?(4-N~7*5gGw*8;%zVs96Ez)cD4I@aRa`s&L3i*FTs zOB);XaJP?7=vUvfCc9QZef<36Pd|LPGlGMO99E%!+&n$o6JYTWrbP#q+;esMZs&Brr+a zBrxlzQt6Pi){tKF1wbr{qELrWsS9qvP@EDt{9*FLlnMuC=8@HUqnW8HEO+st6q8B> za&q0k{fg&R+S~h(_fV#9f`e6&~Udgcf({RtII zUEqcZyGdd_nqJ$QNoS2RlLaac&7oj-KI4E}v4`2d(22wbvLiChKlh{bf##9cWT9d=BZ|7Tv zGnn*33?vU#F$vV$;GDG-1Fij94=BQm1vAQum(}{`CCzZ$2M6!eH!&&i^Z@J}Its)u z{7%J&^@!da!-Zhs1xQQ)G10w>K99lGWaQx<$LCH)Rz)sFI9ITuXjhA>kZlUt93@;g zX!fPxl4>|j7?BvI)j`+{TRYTgLH@+e=NxxB=_cgzfPIX-=6w=ogQ&`3E?CFf*Z;u0 zrnHD&a9e)Y#qi))4t}>m^EDKN0qZtiW=;%@X040VMjDe2w?DhjcuWB%jB4@o$kWJD zV76k~ICmv|lZ(6idxC8@HyZz1wM@t{yTf7b_{?`4V;UqytBfRiVQzwwG4x2jO~<4z zS!uava#-K|q!NO<5L&=YSlzTn+Q67df5Wp}1V$F~gF%sl)pvPOXawQpo!`ED|KMa* zgObvopXnXgXQB8T(1VG}}#4%59cA{Vl2?=e7HYC(JacVS7u-nOnSVk_K7qqkGUfYGJYfC2M)v7dc zHHf2N23;Mr8;Tq4`nEP+JWu^$QkEmD;o=bTLefBBvtQ+9cG!%4S2z3|Qy>IrEKkXg zaKs%JEomH%Oq~*jK(tnr7n0VF3Z9H+XF&{YaiHV%Tr7`x2)R4dmf`nT(s9KRfEC*) zc%2_t!D=wUr~*B;ATF(G-uedy|9HsR-Suiy&xn z9Na>#fdDqH14=3y&4%LXMCNw)`o_-}>WXlODm%PdzJA!7;G0QE_7OYHe9Kaxp6KXd zj9QK)eEU1Cve8R^FLYs&@^+~x}V;He{*GE`ppJW zuC1ZYYn?_Cu-hZlCWEGxZ+WkFBey?nW9MP$NI-(#)hX2n*6GQV>mdu$LBE+x8?-(( zL#(B^)kh8y*5&x94`SZiqw#81Tdg8y?{tKYf%N0ta-5fT3k8e5*&ZqpsE#|uJrnIP zHyZ~8osb{CkfUAmJ(J)?Y8Ihb*_x%Qp-rI@)1DN8m=dVS7%^hLKljA5TT5J-2QG1bHRS= zlm15eQP>=Jj!vkv(#xA!)>y-OmTg`P)x%?_pc;09T&uG>1T*tP?DTyMAK}U2ti4|o zmwWB>dSR!SwtN)^{{h!e0|SH^&zG-Uff-d`m>?nPD57C;^V}=z_j-4 zGRqr|{sstsdwnNtJd_seB?9D?*fY6_&;V0d|~Za zq_=XV^AC?qEIvNn9XV|@)7!OC8@KBCpac0;XVuf&yW!}T-P>9+f^U6&>DA)0+F@;Z z{>=gj0ayL`%~eDOic3KP@_sp+Jzle)GuKto8-@}mSC9AnIG%1ra2{>A3#>lLRXWu@ zf{@k4rPV;rbZd4~oL!-Um3luMj1SKY%Qy`PPA7&f+vWMw<=r*z*v*BvVRPGPjR!$S z>Z=MhlUh|K6lQP9Ju%Rfys4!(>k9-xYm19U8$jx}RyXzyi|feW3S9pjG92%&FEC!l zocxWga=yx}x#4Fvb~6Rx(O3@mYGZL@d39|GhiggMx3U8I*^|6hBpe7kv{4GM30L3? z;s!k^1Ly9pKYrj6^4^rDFDd@8H>1osb|i&N*g;&`+uus3mv*-xEuNWxaDYN|I66T? zH&yjw2DP|=`Q6_$i}TRcMnPd3Vdfn25M$Bug(+5G!J#Cez1ZLuxVowOOs%4uZOU?3 zCGIM?P2EgK13-9@$T1+E1~vk9Jrbq|U(B=w*D@E#k`xMw+*PMmmyD!ZSw)8OPAF_! zn>n5M02D&58%0NBJW?RB);MHqb>iYr@05(k*c*;w35#US?C5KojTeDnZUaCcP@2!bF*hndSVZ#JgRIQ!}lhX}d1lfYy$mlfd> znX^!+#1`xw2ldkOg3s8}#K?HexJJFBi_6F7=l4$^zJK@h?*8fOT2JQg`Qv@0%ghyS z9&Rr%(dF7jCWX?`ent!M5JKef{>O#?iON5fh_*^UdMO!}lNFJwCkq@h^Y* z^Iv{`{P^jYUw{1k;o}e5kw38WRuNu4U7g`);3ukS3$*Qf`@1WfOUsLIU%q|y?H~W} z)wkchc=hVli?8QbR{_7&J#^SgGa|vNF@kul4YL=-5d02{YSPyOG=la_7wGmb*smOB z)zOGi?&n`ve}!sl;*OR6h=NtM7rJ zBZUq@F@>y79+`Q&w7Rvmw5AqG??G1bp@g6blUE%nz^2EVf=|!yo`s#;M-DkxXHZI= z1+JiBiV`6s^!rGr@WH_C+;@kquc|4WVGsa5)gDZ3EiTN>Ev)ds$%50u)Y3eZwN$zg z(B~O3--$8KHo(n|k}qBmg-$i*{He`2B?NW};%GJUoWg_HgF&Wx2rBG@RV zu=K$n65cIX3Xpx>cCZ96t}maHAkY9tz9tqBFK3>iK6v8rYWNuSxJ zmVP>`gbKZi(k_aYOrdN_rsHitm@}4u!6Gvb~QPyy`_cQO}jQF|<}QjSVFL z@1R;T9n513ycLai2<`+@7=XlrqgW*L3UPmoaiVbvX$$&b9Q$;cfvtF_@WM#KpS&R4 zk387$P*9ddVkqsRSBse9c|-*xfrQM4hk<5N05?LI%pyrkJ?)}8#>`6SC4Qddc))-G zvyK)t8DSJ`Y5~zFMfT>KK;gJjvdxm}E4k1Z>((tdBU&N&Z#W!;9jwYu-wI0NqNKrsa)qV?8sA>!%`$0 z+A;|i9UMx3FkBrZmX3BQn)eC5vVN#m`Kcr`aSBNGbVzX%R|sT3SBW)_FsCC9p8u6+871tzb*AS?z3kNn9_&-)7?E(+8W1`&Qc&~LnK0VM=s%2Tp#?;TNO!n>K~E6gaO z>B_qx=-2>n3zMkVqxjOmf*d6NR`y;D3NRqZ)U34B2lY;YjgTyqMyp&V73yZExq|?D z&!hiz!ZSe69=;JmD28!vDUQuS;PR0#!X(31C*U&W7p-ypLePtq%DxO!g1F{jB3dCB z{=t4{uo@U6zJs_I)}@-?VZLc!@rsBC;}4>~2WSxY&4_fG5g0_cn#!%izzc51Y(={U z^GD&tv&0?(KWcyjAm~luL$+!xrle!wo+Yjm2bKbaDU5x?02Bi@9#H@QpwV!S8R*!7HSA3r>Q`t=TRu_q81yCr3~rfud6^Zf`Su1GR0hrB>Eb+iP=kZ(b}cEb|Lqic#`0O}8|; zWLtE4@pOOxcsT=FJl);iU*28aJ<%&4nxqir9xTNP_LfC! zTOgK(PB{q0U`$YISO$_aND>lFfhWpC28tRkVTp2tz|Z|<>^B-~2!$gbf#KAY14HS; z5+1@3+Y)zO!;b_+?Vu@${mkfxfB7H=%)~)$0=7}|8r#XL3m!>;+F@7_wvX{>9XQc> z((>{o6R|j5N)k=rn$p#|H*?w=EW!itb~0w1W zayA~mQ!;+vk`Z7uJoULFxVq|OyW5X4;drqTW<_pVE`U3bZX$Qr7{{Sw%KZzId}yRx z$;pVA;9wUCPR>C$*D~DGC|3LWIaA17Ycs|t;K<9G!E9LjpN;1UoXKFmwU&b~Z*hcPEz+Q-9CdSf9(;QEe`Okphm? z1@z*P*#TruNr|G39HtfF3LoW})e{sY0~_HV@(TM^eGfNDBslh^TcZ_of2YJ#6sRW7 zg7>1=7$$zUi%z4XLWBz&M?hZ02Pk-`CPMTgW@@5E^h|tJ0|kzcL^#r4jln)NVW=(I z5mdIblS}&jE7{`h!^g|M)+s{s^h~lErNYs15WjoK7XSuk6T&VhD&N&9S23vU?fl}4 zufAE7C<|p(lHXF^EakNrMpmlCA)iN1- zwVvPImO1P8S9(C=R`+%fpe%?22`n)4b2PnkiMqAS7E`;-$S~ zqZYC;ydD*^!CG!Nv$gFkWv;lH7KPGU7v^O!Fq1vF&V6kA_V_Ajp*5`T>v-6u%URyTz4~XuBJp80U=i4H_|X> z=7C_7G~}}AWcrKPYI|x%Eg`E#F+!>kIVkONR4ri^%qKjiJgMLvjG$J%OI-j;pILO{ zk@=kLF&k5Is$VU5I?96SC~#Wn!M;QE(eSo`rO#?Oh=-4l6e${)m>kaS#7)W@8LSue z4Dc!bMI4t;hi)w5iPAu_C1yp|oAkx>L?ZC8XbPhZRy1gPp@DZm>d(oj<-1t>QjPE+ zWw^s=4HBK?OF_K!QQrDX?qCB`PAQPSXkJ7^=VqkW3I9Rw%}4pHuo#au9$eJ;r%%#C z5SpZrF*DxrALjG23~@9r8oxnh^u>8jJ|Z`VJczuGjf7JsQ3U}zP(vjWda&^PlKBW7 zjvMd>@}g#+ z4+nOPS`Vu(iH5K4{jEax(nr}8q=FP}crk2603S9-HoFxIWdA`DFV#()P{~ zxHG$DhrKH!RO>qG!a`d=^N-3Hs#luX_7w1A?n1)R%4XcHZKu;2=exNmuTQ8lD_38&zf&xy|_(agLs4NLG z49cEqB(k8<$YJ@Zg4M(A312)c$^s&Ywo$03o~G>yo%-MxrNJL6q0^IMiW4ye8Yl^CFj!|AVD&6XIOm3VPmV= ztd?(bHCC)bQ-mVfL<^I41OdySB)lL=uj(p%3HUF>*(;L{pUUW&$vKFDeTv29Pz=4O z4!Rp+(?)(CqAp*MBegQq)w{$bA#u_ENbD_3##ag6lb4932%|lVa##v)VZ~7@q=a#t z4Ul-;CIttNa1k3S~q2=&312=rIV>9;ZKn0f|o6!aQ@4)jQ~uO77M{7G0y#M1O`WKSNq z!C?vz3(Oy&krs=@V5fl9RIdd-5joVc2`Dx!VCno^YOo)Lw& z>YQj+e-u$3x96DTOg)`_cFzm~>>#6C$p#IyUNVU>v$p#3oAs(UJ~+n4kooiuZa)9= z^QZS8KYo0?5Vb05Iu`u-qbqv)4DR~A{Acl%z|pSc4<6p#a(l3KTD{ixtL;WTyS+R| zZYMu_((BA0X3x!b(W5#PG0SAKa4G!DMNn+9Cp!yInfL&yiR}b&rzk7Uo3|&ro zi^nsetscBh7j4QofZF{d9c_)R#LmqlG@vdFvp1GEi|8)`I8U;pv*!;Fm**KzePX|}EUf9Zy&v5_LLadDSk_V9~nAUJ`k;RoN|X!2X&>Ggf3Bn$cE{L;6--|BU8YdafDTdRAibd=uBxc(Lb;8CTQUtgL3_SH(M zUoqTQ0U#;LZ2AO2`{-7uiIw_Ee>8J{iK_|mhKc*HMWjDTEAm5CsY>1e4O}$8hrsKlChnb80~X&m+b56;_Uyx?QBH)vSF( zBI7`=4Pe-y2_YeJAmkJD$wHm0mwMqy>GSyC|NB4v^vh3wdVYNO^wZ(ly`~Ay<^B2n zotZJGh+)&aUq9aID8=<>v`Lm~2VF{oCf?~}dUk<-^n5zG{rN`_w&`C^j_SqT#i@q( z)8hk3;1ib8eH>Z<3E2h?SYd?JeHO*nsWR_!Q+3ZfCTgiY*hFqK)A{1pjWLN4x45b3 zGgF3>4ZefWB2dS6odT+K9X1Wv6JUjO0$;>WB%F(@Ta9##fO=sk1yT`Zg5nb>hMhjH zfYu_=mCaf;BTD&Z@y8L;8;>k+V)caiWZ23Mq##u?rz7UQC(nO>o1uS*Z-WlV2_%&k9z7h_aL)b>HJ zf{(ET*;q{#TSJZ#Mxff4q(8P(l+yem(N%Y}Tf#I2gGO|t3QiY5zWFWVvjX%txoG)N zQdp5Xmvh?-FBjL-`O?Pv@|$SV?WS8DZ7llR$hX;Y!;)1`%0RyqYg49))q+025xNu3 zG|{O5{U`e8!IZQMl%x7IDYcd7!a&3!>(e>jNDaH@=|@Xcnxw#HSd_ref{#gZx`p67v8*CFd&SWc+)d<02`ii5PcP*oBPl2pD(9V z5ZLq8R5$=+4a@;nZ^_pCYaPKO8+LJuQ$tJn_J+gY2!Z|9L2oj~B3@qrQRW6xvKAqK*KIuq%csErLR=Z6F3S*$D$3 zDT#%dkP_7yQWXicl$hWkG74U>BCIJ@ifIuFvkA1H*Z_xta?gDMU3n$>n`CJKh;rhC z@gnC6ex%*X0t5ykBbBJD4SkDv{sCA?UnAQBy-KDOwKI|=RVj`AB^B_=@F6xuKx@DDX zVn_b$F)A^`H0?{p87MP88A3Sd04Eb7=$eCK8yP7~F_KenskGKc4t3iuhz>7TP!*As zJRW$s943wXga8cgiC`mGCEa5BF`1`*7}sxoh;Q~!VSkRm zq?PHr26T>OuFkSPWNX30j|QS7K9+|*TU3SdppDl_65j;CYQ^>I_H}9R=9sWildG7uTI7LF2AAVEgx9FlEi2S5xnNQ( zB}w~e2=fd`GR7l;9YU1lBt;xeK!hlGR5l)$=0|vMQh)&ItglRL4Ufv9X6H#<-H2H9 zS|LZrfg&iT{M!s$(|f9KBezx_aLmy8gB{_*`g(cE71~`jOlTUlxPHFWP7PffJyroC ze6*OS3jXeA{QiITum7U||Nlz%{~rwn{!?q{Z}R{D@qhZ;>wo^+>wo#%>wo>*>wo*( z>wo{->;L%M>;L@Q>;L-O>;L}S>;L&reZJtEjCPDMq-dP6i>V`|1Iir%(}qJ&4BqJA zz@8D(#E6gr+i74=r)ofls$2gSLB^?AF~(K>6Wt>LI;h#<040u@xZn>c2!eX+?*RUK z7+X?2F&h8{AB>g*W{4;kuw9INh|W^

    )C;{JV%0tsi`VFVRfg7JurR3Vc0@R+Bf1 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 literal 0 HcmV?d00001 diff --git a/other/read2004.nes b/other/read2004.nes new file mode 100644 index 0000000000000000000000000000000000000000..bbc34886e86e5d36a158264706d600a74a106d31 GIT binary patch literal 24592 zcmeI4UuYe96~|{Xo!c}`({$6?D7suigzQBw_05MUF{=>6QiMgHuP+ycReV}1EZKU^ z;w6}%Z##kzhCbXIc8f0x3Il1MmZ0T6i9WepRvCse?5gW_yW7_9_xyfm__?4cC=1&& z%`cyO{`}7Gob#Lc&3#F)e)-u?#BtPIpPFf1`FG>m@5j-8)ZUNV`KecD+KcaZ$hDe>46Z@n2O{zkYLL zIJuQyI*f*s2PczzSjLB!PxoXHio8DbC`g_(Pn{B*kyz zEJ=!6ads*xei3JBQjFuQl@vdVv(riOlQ^4AikIT-Oj3L=&gPQh+i`X_DZUYB^GWfw zI6IdVUx~AYr1*TCollC-#@S+0d^*l9B*n+$?1`i}7iUXJ5y#oZ&dySO=^F)&c8)b-+4c9k32q2do3u z0qcNuz&cwtB@I$#~J4p;}Q1J(iSfOWt+U>&dySO=^F)&c8)b-+4c z9k32q2do3u0qcNuz&c>vmn@OYZ zCavgtaytESGMgT5oJoKF#kur&^K3eKdOm&q`nmMY?=Pfp4bG>3`N3lP*XTm}x9ExV z?Pw|edvq~S9mvpGzKyY<8R!4BB{;5uN>gFO%S zJlJ_)=b@d4?0~%w?0xW2cpvC}9ACH)b3Cl;haB~hT($D<4Y_J%o#!`4qfs3)&vTK< z>gebuI91l85#>50RuEYTBd#gpIby!(1H!<3TpXvbD8sKR5ug4_tiy}(g;V59yOMc$ zd&tu3%RBrp>9)6P%*VxX`ie6As@HrRCD!4^^@O*PFXJhhhqs3;y}qnFooa7yuU6h&U43JB zcehs7D=YPIIIKes1_P1Fs?({#sj^;Mqg;oS_|OYiR;KhvJV(s;>o=77E-v$;zEYMx zjuPvXlAq@k`7)l8d3bxs((9%E4%T4(B@8)Ib%Rnr$+%(Q0BY1(g)b3ev)<5U&*>9KTp<8yOQ~M zdq}At`jXAU)m7s8=hanW6S{Jr1jPPysV6JU1y_`4vgkufeCUOA#)bKEVO^&W2m|wR zah$&6{W{oe@mF$Fadnkb%;h>t=Hcxjc_>g`L$fOOONsZs+ka1Nrt4ck*&oOxCcFLj zgtOcKfD#|F5cde?@%`_Jd4Bzdj0?fVarTNb{HoH&QDQxO#Qo`spb|&Pe7rp*-~W_L zIAiPZ{Cl!~>_5N%2$2L@h36|E_D5v0LS7)h{|FgZ>;WY{WFhLNKkFA_o?pKq^isbP zcB!8%eH5B_(av8&*3CFd)-U;aBB~ zKmU|m*V{vuUeEKN7tdKC&V61y|AqBn0M{YU`-Y57nXLBqNS^<~dN>q)NCf8l2_=AV zrhh}s6MaC~nU9O(^gRFR$MawOm59rW@r6_5#du1t>+K1BEU`~FuX_WccPd_(LLS|$76Q1%CU5|c=I|C4YMeMpH9y%0X)r^I~G z2ZUYT`%2j5{ZE!YjuPwOqwK#B!6lxOd3bwBdH+MN^&enTh4=@){)WE(gOJEeWD=8D z??B1*#2%1wsTaDs*}N&|LFx1XWxk8cylCeyA&Mjql!%LuL&g^(sMwWU*V{u3SH literal 0 HcmV?d00001 diff --git a/other/readme.txt b/other/readme.txt new file mode 100644 index 0000000..27f5c47 --- /dev/null +++ b/other/readme.txt @@ -0,0 +1,15 @@ +up left up +down right down +left left down +right right up +A +B +Start StartGame +Select + +Program KZ-S +Graphics misaki +Special + Thanks Norix + +http://dev.fam.cx/~kz_s/ diff --git a/other/smbdis.asm b/other/smbdis.asm new file mode 100644 index 0000000..be5e1d7 --- /dev/null +++ b/other/smbdis.asm @@ -0,0 +1,16352 @@ +;SMBDIS.ASM - A COMPREHENSIVE SUPER MARIO BROS. DISASSEMBLY +;by doppelganger (doppelheathen@gmail.com) + +;This file is provided for your own use as-is. It will require the character rom data +;and an iNES file header to get it to work. + +;There are so many people I have to thank for this, that taking all the credit for +;myself would be an unforgivable act of arrogance. Without their help this would +;probably not be possible. So I thank all the peeps in the nesdev scene whose insight into +;the 6502 and the NES helped me learn how it works (you guys know who you are, there's no +;way I could have done this without your help), as well as the authors of x816 and SMB +;Utility, and the reverse-engineers who did the original Super Mario Bros. Hacking Project, +;which I compared notes with but did not copy from. Last but certainly not least, I thank +;Nintendo for creating this game and the NES, without which this disassembly would +;only be theory. + +;Assembles with x816. + +;------------------------------------------------------------------------------------- +;DEFINES + +;NES specific hardware defines + +PPU_CTRL_REG1 = $2000 +PPU_CTRL_REG2 = $2001 +PPU_STATUS = $2002 +PPU_SPR_ADDR = $2003 +PPU_SPR_DATA = $2004 +PPU_SCROLL_REG = $2005 +PPU_ADDRESS = $2006 +PPU_DATA = $2007 + +SND_REGISTER = $4000 +SND_SQUARE1_REG = $4000 +SND_SQUARE2_REG = $4004 +SND_TRIANGLE_REG = $4008 +SND_NOISE_REG = $400c +SND_DELTA_REG = $4010 +SND_MASTERCTRL_REG = $4015 + +SPR_DMA = $4014 +JOYPAD_PORT = $4016 +JOYPAD_PORT1 = $4016 +JOYPAD_PORT2 = $4017 + +; GAME SPECIFIC DEFINES + +ObjectOffset = $08 + +FrameCounter = $09 + +SavedJoypadBits = $06fc +SavedJoypad1Bits = $06fc +SavedJoypad2Bits = $06fd +JoypadBitMask = $074a +JoypadOverride = $0758 + +A_B_Buttons = $0a +PreviousA_B_Buttons = $0d +Up_Down_Buttons = $0b +Left_Right_Buttons = $0c + +GameEngineSubroutine = $0e + +Mirror_PPU_CTRL_REG1 = $0778 +Mirror_PPU_CTRL_REG2 = $0779 + +OperMode = $0770 +OperMode_Task = $0772 +ScreenRoutineTask = $073c + +GamePauseStatus = $0776 +GamePauseTimer = $0777 + +DemoAction = $0717 +DemoActionTimer = $0718 + +TimerControl = $0747 +IntervalTimerControl = $077f + +Timers = $0780 +SelectTimer = $0780 +PlayerAnimTimer = $0781 +JumpSwimTimer = $0782 +RunningTimer = $0783 +BlockBounceTimer = $0784 +SideCollisionTimer = $0785 +JumpspringTimer = $0786 +GameTimerCtrlTimer = $0787 +ClimbSideTimer = $0789 +EnemyFrameTimer = $078a +FrenzyEnemyTimer = $078f +BowserFireBreathTimer = $0790 +StompTimer = $0791 +AirBubbleTimer = $0792 +ScrollIntervalTimer = $0795 +EnemyIntervalTimer = $0796 +BrickCoinTimer = $079d +InjuryTimer = $079e +StarInvincibleTimer = $079f +ScreenTimer = $07a0 +WorldEndTimer = $07a1 +DemoTimer = $07a2 + +Sprite_Data = $0200 + +Sprite_Y_Position = $0200 +Sprite_Tilenumber = $0201 +Sprite_Attributes = $0202 +Sprite_X_Position = $0203 + +ScreenEdge_PageLoc = $071a +ScreenEdge_X_Pos = $071c +ScreenLeft_PageLoc = $071a +ScreenRight_PageLoc = $071b +ScreenLeft_X_Pos = $071c +ScreenRight_X_Pos = $071d + +PlayerFacingDir = $33 +DestinationPageLoc = $34 +VictoryWalkControl = $35 +ScrollFractional = $0768 +PrimaryMsgCounter = $0719 +SecondaryMsgCounter = $0749 + +HorizontalScroll = $073f +VerticalScroll = $0740 +ScrollLock = $0723 +ScrollThirtyTwo = $073d +Player_X_Scroll = $06ff +Player_Pos_ForScroll = $0755 +ScrollAmount = $0775 + +AreaData = $e7 +AreaDataLow = $e7 +AreaDataHigh = $e8 +EnemyData = $e9 +EnemyDataLow = $e9 +EnemyDataHigh = $ea + +AreaParserTaskNum = $071f +ColumnSets = $071e +CurrentPageLoc = $0725 +CurrentColumnPos = $0726 +BackloadingFlag = $0728 +BehindAreaParserFlag = $0729 +AreaObjectPageLoc = $072a +AreaObjectPageSel = $072b +AreaDataOffset = $072c +AreaObjOffsetBuffer = $072d +AreaObjectLength = $0730 +StaircaseControl = $0734 +AreaObjectHeight = $0735 +MushroomLedgeHalfLen = $0736 +EnemyDataOffset = $0739 +EnemyObjectPageLoc = $073a +EnemyObjectPageSel = $073b +MetatileBuffer = $06a1 +BlockBufferColumnPos = $06a0 +CurrentNTAddr_Low = $0721 +CurrentNTAddr_High = $0720 +AttributeBuffer = $03f9 + +LoopCommand = $0745 + +DisplayDigits = $07d7 +TopScoreDisplay = $07d7 +ScoreAndCoinDisplay = $07dd +PlayerScoreDisplay = $07dd +GameTimerDisplay = $07f8 +DigitModifier = $0134 + +VerticalFlipFlag = $0109 +FloateyNum_Control = $0110 +ShellChainCounter = $0125 +FloateyNum_Timer = $012c +FloateyNum_X_Pos = $0117 +FloateyNum_Y_Pos = $011e +FlagpoleFNum_Y_Pos = $010d +FlagpoleFNum_YMFDummy = $010e +FlagpoleScore = $010f +FlagpoleCollisionYPos = $070f +StompChainCounter = $0484 + +VRAM_Buffer1_Offset = $0300 +VRAM_Buffer1 = $0301 +VRAM_Buffer2_Offset = $0340 +VRAM_Buffer2 = $0341 +VRAM_Buffer_AddrCtrl = $0773 +Sprite0HitDetectFlag = $0722 +DisableScreenFlag = $0774 +DisableIntermediate = $0769 +ColorRotateOffset = $06d4 + +TerrainControl = $0727 +AreaStyle = $0733 +ForegroundScenery = $0741 +BackgroundScenery = $0742 +CloudTypeOverride = $0743 +BackgroundColorCtrl = $0744 +AreaType = $074e +AreaAddrsLOffset = $074f +AreaPointer = $0750 + +PlayerEntranceCtrl = $0710 +GameTimerSetting = $0715 +AltEntranceControl = $0752 +EntrancePage = $0751 +NumberOfPlayers = $077a +WarpZoneControl = $06d6 +ChangeAreaTimer = $06de + +MultiLoopCorrectCntr = $06d9 +MultiLoopPassCntr = $06da + +FetchNewGameTimerFlag = $0757 +GameTimerExpiredFlag = $0759 + +PrimaryHardMode = $076a +SecondaryHardMode = $06cc +WorldSelectNumber = $076b +WorldSelectEnableFlag = $07fc +ContinueWorld = $07fd + +CurrentPlayer = $0753 +PlayerSize = $0754 +PlayerStatus = $0756 + +OnscreenPlayerInfo = $075a +NumberofLives = $075a ;used by current player +HalfwayPage = $075b +LevelNumber = $075c ;the actual dash number +Hidden1UpFlag = $075d +CoinTally = $075e +WorldNumber = $075f +AreaNumber = $0760 ;internal number used to find areas + +CoinTallyFor1Ups = $0748 + +OffscreenPlayerInfo = $0761 +OffScr_NumberofLives = $0761 ;used by offscreen player +OffScr_HalfwayPage = $0762 +OffScr_LevelNumber = $0763 +OffScr_Hidden1UpFlag = $0764 +OffScr_CoinTally = $0765 +OffScr_WorldNumber = $0766 +OffScr_AreaNumber = $0767 + +BalPlatformAlignment = $03a0 +Platform_X_Scroll = $03a1 +PlatformCollisionFlag = $03a2 +YPlatformTopYPos = $0401 +YPlatformCenterYPos = $58 + +BrickCoinTimerFlag = $06bc +StarFlagTaskControl = $0746 + +PseudoRandomBitReg = $07a7 +WarmBootValidation = $07ff + +SprShuffleAmtOffset = $06e0 +SprShuffleAmt = $06e1 +SprDataOffset = $06e4 +Player_SprDataOffset = $06e4 +Enemy_SprDataOffset = $06e5 +Block_SprDataOffset = $06ec +Alt_SprDataOffset = $06ec +Bubble_SprDataOffset = $06ee +FBall_SprDataOffset = $06f1 +Misc_SprDataOffset = $06f3 +SprDataOffset_Ctrl = $03ee + +Player_State = $1d +Enemy_State = $1e +Fireball_State = $24 +Block_State = $26 +Misc_State = $2a + +Player_MovingDir = $45 +Enemy_MovingDir = $46 + +SprObject_X_Speed = $57 +Player_X_Speed = $57 +Enemy_X_Speed = $58 +Fireball_X_Speed = $5e +Block_X_Speed = $60 +Misc_X_Speed = $64 + +Jumpspring_FixedYPos = $58 +JumpspringAnimCtrl = $070e +JumpspringForce = $06db + +SprObject_PageLoc = $6d +Player_PageLoc = $6d +Enemy_PageLoc = $6e +Fireball_PageLoc = $74 +Block_PageLoc = $76 +Misc_PageLoc = $7a +Bubble_PageLoc = $83 + +SprObject_X_Position = $86 +Player_X_Position = $86 +Enemy_X_Position = $87 +Fireball_X_Position = $8d +Block_X_Position = $8f +Misc_X_Position = $93 +Bubble_X_Position = $9c + +SprObject_Y_Speed = $9f +Player_Y_Speed = $9f +Enemy_Y_Speed = $a0 +Fireball_Y_Speed = $a6 +Block_Y_Speed = $a8 +Misc_Y_Speed = $ac + +SprObject_Y_HighPos = $b5 +Player_Y_HighPos = $b5 +Enemy_Y_HighPos = $b6 +Fireball_Y_HighPos = $bc +Block_Y_HighPos = $be +Misc_Y_HighPos = $c2 +Bubble_Y_HighPos = $cb + +SprObject_Y_Position = $ce +Player_Y_Position = $ce +Enemy_Y_Position = $cf +Fireball_Y_Position = $d5 +Block_Y_Position = $d7 +Misc_Y_Position = $db +Bubble_Y_Position = $e4 + +SprObject_Rel_XPos = $03ad +Player_Rel_XPos = $03ad +Enemy_Rel_XPos = $03ae +Fireball_Rel_XPos = $03af +Bubble_Rel_XPos = $03b0 +Block_Rel_XPos = $03b1 +Misc_Rel_XPos = $03b3 + +SprObject_Rel_YPos = $03b8 +Player_Rel_YPos = $03b8 +Enemy_Rel_YPos = $03b9 +Fireball_Rel_YPos = $03ba +Bubble_Rel_YPos = $03bb +Block_Rel_YPos = $03bc +Misc_Rel_YPos = $03be + +SprObject_SprAttrib = $03c4 +Player_SprAttrib = $03c4 +Enemy_SprAttrib = $03c5 + +SprObject_X_MoveForce = $0400 +Enemy_X_MoveForce = $0401 + +SprObject_YMF_Dummy = $0416 +Player_YMF_Dummy = $0416 +Enemy_YMF_Dummy = $0417 +Bubble_YMF_Dummy = $042c + +SprObject_Y_MoveForce = $0433 +Player_Y_MoveForce = $0433 +Enemy_Y_MoveForce = $0434 +Block_Y_MoveForce = $043c + +DisableCollisionDet = $0716 +Player_CollisionBits = $0490 +Enemy_CollisionBits = $0491 + +SprObj_BoundBoxCtrl = $0499 +Player_BoundBoxCtrl = $0499 +Enemy_BoundBoxCtrl = $049a +Fireball_BoundBoxCtrl = $04a0 +Misc_BoundBoxCtrl = $04a2 + +EnemyFrenzyBuffer = $06cb +EnemyFrenzyQueue = $06cd +Enemy_Flag = $0f +Enemy_ID = $16 + +PlayerGfxOffset = $06d5 +Player_XSpeedAbsolute = $0700 +FrictionAdderHigh = $0701 +FrictionAdderLow = $0702 +RunningSpeed = $0703 +SwimmingFlag = $0704 +Player_X_MoveForce = $0705 +DiffToHaltJump = $0706 +JumpOrigin_Y_HighPos = $0707 +JumpOrigin_Y_Position = $0708 +VerticalForce = $0709 +VerticalForceDown = $070a +PlayerChangeSizeFlag = $070b +PlayerAnimTimerSet = $070c +PlayerAnimCtrl = $070d +DeathMusicLoaded = $0712 +FlagpoleSoundQueue = $0713 +CrouchingFlag = $0714 +MaximumLeftSpeed = $0450 +MaximumRightSpeed = $0456 + +SprObject_OffscrBits = $03d0 +Player_OffscreenBits = $03d0 +Enemy_OffscreenBits = $03d1 +FBall_OffscreenBits = $03d2 +Bubble_OffscreenBits = $03d3 +Block_OffscreenBits = $03d4 +Misc_OffscreenBits = $03d6 +EnemyOffscrBitsMasked = $03d8 + +Cannon_Offset = $046a +Cannon_PageLoc = $046b +Cannon_X_Position = $0471 +Cannon_Y_Position = $0477 +Cannon_Timer = $047d + +Whirlpool_Offset = $046a +Whirlpool_PageLoc = $046b +Whirlpool_LeftExtent = $0471 +Whirlpool_Length = $0477 +Whirlpool_Flag = $047d + +VineFlagOffset = $0398 +VineHeight = $0399 +VineObjOffset = $039a +VineStart_Y_Position = $039d + +Block_Orig_YPos = $03e4 +Block_BBuf_Low = $03e6 +Block_Metatile = $03e8 +Block_PageLoc2 = $03ea +Block_RepFlag = $03ec +Block_ResidualCounter = $03f0 +Block_Orig_XPos = $03f1 + +BoundingBox_UL_XPos = $04ac +BoundingBox_UL_YPos = $04ad +BoundingBox_DR_XPos = $04ae +BoundingBox_DR_YPos = $04af +BoundingBox_UL_Corner = $04ac +BoundingBox_LR_Corner = $04ae +EnemyBoundingBoxCoord = $04b0 + +PowerUpType = $39 + +FireballBouncingFlag = $3a +FireballCounter = $06ce +FireballThrowingTimer = $0711 + +HammerEnemyOffset = $06ae +JumpCoinMiscOffset = $06b7 + +Block_Buffer_1 = $0500 +Block_Buffer_2 = $05d0 + +HammerThrowingTimer = $03a2 +HammerBroJumpTimer = $3c +Misc_Collision_Flag = $06be + +RedPTroopaOrigXPos = $0401 +RedPTroopaCenterYPos = $58 + +XMovePrimaryCounter = $a0 +XMoveSecondaryCounter = $58 + +CheepCheepMoveMFlag = $58 +CheepCheepOrigYPos = $0434 +BitMFilter = $06dd + +LakituReappearTimer = $06d1 +LakituMoveSpeed = $58 +LakituMoveDirection = $a0 + +FirebarSpinState_Low = $58 +FirebarSpinState_High = $a0 +FirebarSpinSpeed = $0388 +FirebarSpinDirection = $34 + +DuplicateObj_Offset = $06cf +NumberofGroupEnemies = $06d3 + +BlooperMoveCounter = $a0 +BlooperMoveSpeed = $58 + +BowserBodyControls = $0363 +BowserFeetCounter = $0364 +BowserMovementSpeed = $0365 +BowserOrigXPos = $0366 +BowserFlameTimerCtrl = $0367 +BowserFront_Offset = $0368 +BridgeCollapseOffset = $0369 +BowserGfxFlag = $036a +BowserHitPoints = $0483 +MaxRangeFromOrigin = $06dc + +BowserFlamePRandomOfs = $0417 + +PiranhaPlantUpYPos = $0417 +PiranhaPlantDownYPos = $0434 +PiranhaPlant_Y_Speed = $58 +PiranhaPlant_MoveFlag = $a0 + +FireworksCounter = $06d7 +ExplosionGfxCounter = $58 +ExplosionTimerCounter = $a0 + +;sound related defines +Squ2_NoteLenBuffer = $07b3 +Squ2_NoteLenCounter = $07b4 +Squ2_EnvelopeDataCtrl = $07b5 +Squ1_NoteLenCounter = $07b6 +Squ1_EnvelopeDataCtrl = $07b7 +Tri_NoteLenBuffer = $07b8 +Tri_NoteLenCounter = $07b9 +Noise_BeatLenCounter = $07ba +Squ1_SfxLenCounter = $07bb +Squ2_SfxLenCounter = $07bd +Sfx_SecondaryCounter = $07be +Noise_SfxLenCounter = $07bf + +PauseSoundQueue = $fa +Square1SoundQueue = $ff +Square2SoundQueue = $fe +NoiseSoundQueue = $fd +AreaMusicQueue = $fb +EventMusicQueue = $fc + +Square1SoundBuffer = $f1 +Square2SoundBuffer = $f2 +NoiseSoundBuffer = $f3 +AreaMusicBuffer = $f4 +EventMusicBuffer = $07b1 +PauseSoundBuffer = $07b2 + +MusicData = $f5 +MusicDataLow = $f5 +MusicDataHigh = $f6 +MusicOffset_Square2 = $f7 +MusicOffset_Square1 = $f8 +MusicOffset_Triangle = $f9 +MusicOffset_Noise = $07b0 + +NoteLenLookupTblOfs = $f0 +DAC_Counter = $07c0 +NoiseDataLoopbackOfs = $07c1 +NoteLengthTblAdder = $07c4 +AreaMusicBuffer_Alt = $07c5 +PauseModeFlag = $07c6 +GroundMusicHeaderOfs = $07c7 +AltRegContentFlag = $07ca + +;------------------------------------------------------------------------------------- +;CONSTANTS + +;sound effects constants +Sfx_SmallJump = %10000000 +Sfx_Flagpole = %01000000 +Sfx_Fireball = %00100000 +Sfx_PipeDown_Injury = %00010000 +Sfx_EnemySmack = %00001000 +Sfx_EnemyStomp = %00000100 +Sfx_Bump = %00000010 +Sfx_BigJump = %00000001 + +Sfx_BowserFall = %10000000 +Sfx_ExtraLife = %01000000 +Sfx_PowerUpGrab = %00100000 +Sfx_TimerTick = %00010000 +Sfx_Blast = %00001000 +Sfx_GrowVine = %00000100 +Sfx_GrowPowerUp = %00000010 +Sfx_CoinGrab = %00000001 + +Sfx_BowserFlame = %00000010 +Sfx_BrickShatter = %00000001 + +;music constants +Silence = %10000000 + +StarPowerMusic = %01000000 +PipeIntroMusic = %00100000 +CloudMusic = %00010000 +CastleMusic = %00001000 +UndergroundMusic = %00000100 +WaterMusic = %00000010 +GroundMusic = %00000001 + +TimeRunningOutMusic = %01000000 +EndOfLevelMusic = %00100000 +AltGameOverMusic = %00010000 +EndOfCastleMusic = %00001000 +VictoryMusic = %00000100 +GameOverMusic = %00000010 +DeathMusic = %00000001 + +;enemy object constants +GreenKoopa = $00 +BuzzyBeetle = $02 +RedKoopa = $03 +HammerBro = $05 +Goomba = $06 +Bloober = $07 +BulletBill_FrenzyVar = $08 +GreyCheepCheep = $0a +RedCheepCheep = $0b +Podoboo = $0c +PiranhaPlant = $0d +GreenParatroopaJump = $0e +RedParatroopa = $0f +GreenParatroopaFly = $10 +Lakitu = $11 +Spiny = $12 +FlyCheepCheepFrenzy = $14 +FlyingCheepCheep = $14 +BowserFlame = $15 +Fireworks = $16 +BBill_CCheep_Frenzy = $17 +Stop_Frenzy = $18 +Bowser = $2d +PowerUpObject = $2e +VineObject = $2f +FlagpoleFlagObject = $30 +StarFlagObject = $31 +JumpspringObject = $32 +BulletBill_CannonVar = $33 +RetainerObject = $35 +TallEnemy = $09 + +;other constants +World1 = 0 +World2 = 1 +World3 = 2 +World4 = 3 +World5 = 4 +World6 = 5 +World7 = 6 +World8 = 7 +Level1 = 0 +Level2 = 1 +Level3 = 2 +Level4 = 3 + +WarmBootOffset = <$07d6 +ColdBootOffset = <$07fe +TitleScreenDataOffset = $1ec0 +SoundMemory = $07b0 +SwimTileRepOffset = PlayerGraphicsTable + $9e +MusicHeaderOffsetData = MusicHeaderData - 1 +MHD = MusicHeaderData + +A_Button = %10000000 +B_Button = %01000000 +Select_Button = %00100000 +Start_Button = %00010000 +Up_Dir = %00001000 +Down_Dir = %00000100 +Left_Dir = %00000010 +Right_Dir = %00000001 + +TitleScreenModeValue = 0 +GameModeValue = 1 +VictoryModeValue = 2 +GameOverModeValue = 3 + +;------------------------------------------------------------------------------------- +;DIRECTIVES + +; .index 8 +; .mem 8 + + .org $8000 + +;------------------------------------------------------------------------------------- + +Start: + sei ;pretty standard 6502 type init here + cld + lda #%00010000 ;init PPU control register 1 + sta PPU_CTRL_REG1 + ldx #$ff ;reset stack pointer + txs +VBlank1: lda PPU_STATUS ;wait two frames + bpl VBlank1 +VBlank2: lda PPU_STATUS + bpl VBlank2 + ldy #ColdBootOffset ;load default cold boot pointer + ldx #$05 ;this is where we check for a warm boot +WBootCheck: lda TopScoreDisplay,x ;check each score digit in the top score + cmp #10 ;to see if we have a valid digit + bcs ColdBoot ;if not, give up and proceed with cold boot + dex + bpl WBootCheck + lda WarmBootValidation ;second checkpoint, check to see if + cmp #$a5 ;another location has a specific value + bne ColdBoot + ldy #WarmBootOffset ;if passed both, load warm boot pointer +ColdBoot: jsr InitializeMemory ;clear memory using pointer in Y + sta SND_DELTA_REG+1 ;reset delta counter load register + sta OperMode ;reset primary mode of operation + lda #$a5 ;set warm boot flag + sta WarmBootValidation + sta PseudoRandomBitReg ;set seed for pseudorandom register + lda #%00001111 + sta SND_MASTERCTRL_REG ;enable all sound channels except dmc + lda #%00000110 + sta PPU_CTRL_REG2 ;turn off clipping for OAM and background + jsr MoveAllSpritesOffscreen + jsr InitializeNameTables ;initialize both name tables + inc DisableScreenFlag ;set flag to disable screen output + lda Mirror_PPU_CTRL_REG1 + ora #%10000000 ;enable NMIs + jsr WritePPUReg1 +EndlessLoop: jmp EndlessLoop ;endless loop, need I say more? + +;------------------------------------------------------------------------------------- +;$00 - vram buffer address table low, also used for pseudorandom bit +;$01 - vram buffer address table high + +VRAM_AddrTable_Low: + .db VRAM_Buffer1, >WaterPaletteData, >GroundPaletteData + .db >UndergroundPaletteData, >CastlePaletteData, >VRAM_Buffer1_Offset + .db >VRAM_Buffer2, >VRAM_Buffer2, >BowserPaletteData + .db >DaySnowPaletteData, >NightSnowPaletteData, >MushroomPaletteData + .db >MarioThanksMessage, >LuigiThanksMessage, >MushroomRetainerSaved + .db >PrincessSaved1, >PrincessSaved2, >WorldSelectMessage1 + .db >WorldSelectMessage2 + +VRAM_Buffer_Offset: + .db $09 + lda Enemy_State,x + cmp #$02 ;if enemy state defeated or otherwise + bcs FloateyPart ;$02 or greater, branch beyond this part +GetAltOffset: ldx SprDataOffset_Ctrl ;load some kind of control bit + ldy Alt_SprDataOffset,x ;get alternate OAM data offset + ldx ObjectOffset ;get enemy object offset again +FloateyPart: lda FloateyNum_Y_Pos,x ;get vertical coordinate for + cmp #$18 ;floatey number, if coordinate in the + bcc SetupNumSpr ;status bar, branch + sbc #$01 + sta FloateyNum_Y_Pos,x ;otherwise subtract one and store as new +SetupNumSpr: lda FloateyNum_Y_Pos,x ;get vertical coordinate + sbc #$08 ;subtract eight and dump into the + jsr DumpTwoSpr ;left and right sprite's Y coordinates + lda FloateyNum_X_Pos,x ;get horizontal coordinate + sta Sprite_X_Position,y ;store into X coordinate of left sprite + clc + adc #$08 ;add eight pixels and store into X + sta Sprite_X_Position+4,y ;coordinate of right sprite + lda #$02 + sta Sprite_Attributes,y ;set palette control in attribute bytes + sta Sprite_Attributes+4,y ;of left and right sprites + lda FloateyNum_Control,x + asl ;multiply our floatey number control by 2 + tax ;and use as offset for look-up table + lda FloateyNumTileData,x + sta Sprite_Tilenumber,y ;display first half of number of points + lda FloateyNumTileData+1,x + sta Sprite_Tilenumber+4,y ;display the second half + ldx ObjectOffset ;get enemy object offset and leave + rts + +;------------------------------------------------------------------------------------- + +ScreenRoutines: + lda ScreenRoutineTask ;run one of the following subroutines + jsr JumpEngine + + .dw InitScreen + .dw SetupIntermediate + .dw WriteTopStatusLine + .dw WriteBottomStatusLine + .dw DisplayTimeUp + .dw ResetSpritesAndScreenTimer + .dw DisplayIntermediate + .dw ResetSpritesAndScreenTimer + .dw AreaParserTaskControl + .dw GetAreaPalette + .dw GetBackgroundColor + .dw GetAlternatePalette1 + .dw DrawTitleScreen + .dw ClearBuffersDrawIcon + .dw WriteTopScore + +;------------------------------------------------------------------------------------- + +InitScreen: + jsr MoveAllSpritesOffscreen ;initialize all sprites including sprite #0 + jsr InitializeNameTables ;and erase both name and attribute tables + lda OperMode + beq NextSubtask ;if mode still 0, do not load + ldx #$03 ;into buffer pointer + jmp SetVRAMAddr_A + +;------------------------------------------------------------------------------------- + +SetupIntermediate: + lda BackgroundColorCtrl ;save current background color control + pha ;and player status to stack + lda PlayerStatus + pha + lda #$00 ;set background color to black + sta PlayerStatus ;and player status to not fiery + lda #$02 ;this is the ONLY time background color control + sta BackgroundColorCtrl ;is set to less than 4 + jsr GetPlayerColors + pla ;we only execute this routine for + sta PlayerStatus ;the intermediate lives display + pla ;and once we're done, we return bg + sta BackgroundColorCtrl ;color ctrl and player status from stack + jmp IncSubtask ;then move onto the next task + +;------------------------------------------------------------------------------------- + +AreaPalette: + .db $01, $02, $03, $04 + +GetAreaPalette: + ldy AreaType ;select appropriate palette to load + ldx AreaPalette,y ;based on area type +SetVRAMAddr_A: stx VRAM_Buffer_AddrCtrl ;store offset into buffer control +NextSubtask: jmp IncSubtask ;move onto next task + +;------------------------------------------------------------------------------------- +;$00 - used as temp counter in GetPlayerColors + +BGColorCtrl_Addr: + .db $00, $09, $0a, $04 + +BackgroundColors: + .db $22, $22, $0f, $0f ;used by area type if bg color ctrl not set + .db $0f, $22, $0f, $0f ;used by background color control if set + +PlayerColors: + .db $22, $16, $27, $18 ;mario's colors + .db $22, $30, $27, $19 ;luigi's colors + .db $22, $37, $27, $16 ;fiery (used by both) + +GetBackgroundColor: + ldy BackgroundColorCtrl ;check background color control + beq NoBGColor ;if not set, increment task and fetch palette + lda BGColorCtrl_Addr-4,y ;put appropriate palette into vram + sta VRAM_Buffer_AddrCtrl ;note that if set to 5-7, $0301 will not be read +NoBGColor: inc ScreenRoutineTask ;increment to next subtask and plod on through + +GetPlayerColors: + ldx VRAM_Buffer1_Offset ;get current buffer offset + ldy #$00 + lda CurrentPlayer ;check which player is on the screen + beq ChkFiery + ldy #$04 ;load offset for luigi +ChkFiery: lda PlayerStatus ;check player status + cmp #$02 + bne StartClrGet ;if fiery, load alternate offset for fiery player + ldy #$08 +StartClrGet: lda #$03 ;do four colors + sta $00 +ClrGetLoop: lda PlayerColors,y ;fetch player colors and store them + sta VRAM_Buffer1+3,x ;in the buffer + iny + inx + dec $00 + bpl ClrGetLoop + ldx VRAM_Buffer1_Offset ;load original offset from before + ldy BackgroundColorCtrl ;if this value is four or greater, it will be set + bne SetBGColor ;therefore use it as offset to background color + ldy AreaType ;otherwise use area type bits from area offset as offset +SetBGColor: lda BackgroundColors,y ;to background color instead + sta VRAM_Buffer1+3,x + lda #$3f ;set for sprite palette address + sta VRAM_Buffer1,x ;save to buffer + lda #$10 + sta VRAM_Buffer1+1,x + lda #$04 ;write length byte to buffer + sta VRAM_Buffer1+2,x + lda #$00 ;now the null terminator + sta VRAM_Buffer1+7,x + txa ;move the buffer pointer ahead 7 bytes + clc ;in case we want to write anything else later + adc #$07 +SetVRAMOffset: sta VRAM_Buffer1_Offset ;store as new vram buffer offset + rts + +;------------------------------------------------------------------------------------- + +GetAlternatePalette1: + lda AreaStyle ;check for mushroom level style + cmp #$01 + bne NoAltPal + lda #$0b ;if found, load appropriate palette +SetVRAMAddr_B: sta VRAM_Buffer_AddrCtrl +NoAltPal: jmp IncSubtask ;now onto the next task + +;------------------------------------------------------------------------------------- + +WriteTopStatusLine: + lda #$00 ;select main status bar + jsr WriteGameText ;output it + jmp IncSubtask ;onto the next task + +;------------------------------------------------------------------------------------- + +WriteBottomStatusLine: + jsr GetSBNybbles ;write player's score and coin tally to screen + ldx VRAM_Buffer1_Offset + lda #$20 ;write address for world-area number on screen + sta VRAM_Buffer1,x + lda #$73 + sta VRAM_Buffer1+1,x + lda #$03 ;write length for it + sta VRAM_Buffer1+2,x + ldy WorldNumber ;first the world number + iny + tya + sta VRAM_Buffer1+3,x + lda #$28 ;next the dash + sta VRAM_Buffer1+4,x + ldy LevelNumber ;next the level number + iny ;increment for proper number display + tya + sta VRAM_Buffer1+5,x + lda #$00 ;put null terminator on + sta VRAM_Buffer1+6,x + txa ;move the buffer offset up by 6 bytes + clc + adc #$06 + sta VRAM_Buffer1_Offset + jmp IncSubtask + +;------------------------------------------------------------------------------------- + +DisplayTimeUp: + lda GameTimerExpiredFlag ;if game timer not expired, increment task + beq NoTimeUp ;control 2 tasks forward, otherwise, stay here + lda #$00 + sta GameTimerExpiredFlag ;reset timer expiration flag + lda #$02 ;output time-up screen to buffer + jmp OutputInter +NoTimeUp: inc ScreenRoutineTask ;increment control task 2 tasks forward + jmp IncSubtask + +;------------------------------------------------------------------------------------- + +DisplayIntermediate: + lda OperMode ;check primary mode of operation + beq NoInter ;if in title screen mode, skip this + cmp #GameOverModeValue ;are we in game over mode? + beq GameOverInter ;if so, proceed to display game over screen + lda AltEntranceControl ;otherwise check for mode of alternate entry + bne NoInter ;and branch if found + ldy AreaType ;check if we are on castle level + cpy #$03 ;and if so, branch (possibly residual) + beq PlayerInter + lda DisableIntermediate ;if this flag is set, skip intermediate lives display + bne NoInter ;and jump to specific task, otherwise +PlayerInter: jsr DrawPlayer_Intermediate ;put player in appropriate place for + lda #$01 ;lives display, then output lives display to buffer +OutputInter: jsr WriteGameText + jsr ResetScreenTimer + lda #$00 + sta DisableScreenFlag ;reenable screen output + rts +GameOverInter: lda #$12 ;set screen timer + sta ScreenTimer + lda #$03 ;output game over screen to buffer + jsr WriteGameText + jmp IncModeTask_B +NoInter: lda #$08 ;set for specific task and leave + sta ScreenRoutineTask + rts + +;------------------------------------------------------------------------------------- + +AreaParserTaskControl: + inc DisableScreenFlag ;turn off screen +TaskLoop: jsr AreaParserTaskHandler ;render column set of current area + lda AreaParserTaskNum ;check number of tasks + bne TaskLoop ;if tasks still not all done, do another one + dec ColumnSets ;do we need to render more column sets? + bpl OutputCol + inc ScreenRoutineTask ;if not, move on to the next task +OutputCol: lda #$06 ;set vram buffer to output rendered column set + sta VRAM_Buffer_AddrCtrl ;on next NMI + rts + +;------------------------------------------------------------------------------------- + +;$00 - vram buffer address table low +;$01 - vram buffer address table high + +DrawTitleScreen: + lda OperMode ;are we in title screen mode? + bne IncModeTask_B ;if not, exit + lda #>TitleScreenDataOffset ;load address $1ec0 into + sta PPU_ADDRESS ;the vram address register + lda #Palette0_MTiles, >Palette1_MTiles, >Palette2_MTiles, >Palette3_MTiles + +Palette0_MTiles: + .db $24, $24, $24, $24 ;blank + .db $27, $27, $27, $27 ;black metatile + .db $24, $24, $24, $35 ;bush left + .db $36, $25, $37, $25 ;bush middle + .db $24, $38, $24, $24 ;bush right + .db $24, $30, $30, $26 ;mountain left + .db $26, $26, $34, $26 ;mountain left bottom/middle center + .db $24, $31, $24, $32 ;mountain middle top + .db $33, $26, $24, $33 ;mountain right + .db $34, $26, $26, $26 ;mountain right bottom + .db $26, $26, $26, $26 ;mountain middle bottom + .db $24, $c0, $24, $c0 ;bridge guardrail + .db $24, $7f, $7f, $24 ;chain + .db $b8, $ba, $b9, $bb ;tall tree top, top half + .db $b8, $bc, $b9, $bd ;short tree top + .db $ba, $bc, $bb, $bd ;tall tree top, bottom half + .db $60, $64, $61, $65 ;warp pipe end left, points up + .db $62, $66, $63, $67 ;warp pipe end right, points up + .db $60, $64, $61, $65 ;decoration pipe end left, points up + .db $62, $66, $63, $67 ;decoration pipe end right, points up + .db $68, $68, $69, $69 ;pipe shaft left + .db $26, $26, $6a, $6a ;pipe shaft right + .db $4b, $4c, $4d, $4e ;tree ledge left edge + .db $4d, $4f, $4d, $4f ;tree ledge middle + .db $4d, $4e, $50, $51 ;tree ledge right edge + .db $6b, $70, $2c, $2d ;mushroom left edge + .db $6c, $71, $6d, $72 ;mushroom middle + .db $6e, $73, $6f, $74 ;mushroom right edge + .db $86, $8a, $87, $8b ;sideways pipe end top + .db $88, $8c, $88, $8c ;sideways pipe shaft top + .db $89, $8d, $69, $69 ;sideways pipe joint top + .db $8e, $91, $8f, $92 ;sideways pipe end bottom + .db $26, $93, $26, $93 ;sideways pipe shaft bottom + .db $90, $94, $69, $69 ;sideways pipe joint bottom + .db $a4, $e9, $ea, $eb ;seaplant + .db $24, $24, $24, $24 ;blank, used on bricks or blocks that are hit + .db $24, $2f, $24, $3d ;flagpole ball + .db $a2, $a2, $a3, $a3 ;flagpole shaft + .db $24, $24, $24, $24 ;blank, used in conjunction with vines + +Palette1_MTiles: + .db $a2, $a2, $a3, $a3 ;vertical rope + .db $99, $24, $99, $24 ;horizontal rope + .db $24, $a2, $3e, $3f ;left pulley + .db $5b, $5c, $24, $a3 ;right pulley + .db $24, $24, $24, $24 ;blank used for balance rope + .db $9d, $47, $9e, $47 ;castle top + .db $47, $47, $27, $27 ;castle window left + .db $47, $47, $47, $47 ;castle brick wall + .db $27, $27, $47, $47 ;castle window right + .db $a9, $47, $aa, $47 ;castle top w/ brick + .db $9b, $27, $9c, $27 ;entrance top + .db $27, $27, $27, $27 ;entrance bottom + .db $52, $52, $52, $52 ;green ledge stump + .db $80, $a0, $81, $a1 ;fence + .db $be, $be, $bf, $bf ;tree trunk + .db $75, $ba, $76, $bb ;mushroom stump top + .db $ba, $ba, $bb, $bb ;mushroom stump bottom + .db $45, $47, $45, $47 ;breakable brick w/ line + .db $47, $47, $47, $47 ;breakable brick + .db $45, $47, $45, $47 ;breakable brick (not used) + .db $b4, $b6, $b5, $b7 ;cracked rock terrain + .db $45, $47, $45, $47 ;brick with line (power-up) + .db $45, $47, $45, $47 ;brick with line (vine) + .db $45, $47, $45, $47 ;brick with line (star) + .db $45, $47, $45, $47 ;brick with line (coins) + .db $45, $47, $45, $47 ;brick with line (1-up) + .db $47, $47, $47, $47 ;brick (power-up) + .db $47, $47, $47, $47 ;brick (vine) + .db $47, $47, $47, $47 ;brick (star) + .db $47, $47, $47, $47 ;brick (coins) + .db $47, $47, $47, $47 ;brick (1-up) + .db $24, $24, $24, $24 ;hidden block (1 coin) + .db $24, $24, $24, $24 ;hidden block (1-up) + .db $ab, $ac, $ad, $ae ;solid block (3-d block) + .db $5d, $5e, $5d, $5e ;solid block (white wall) + .db $c1, $24, $c1, $24 ;bridge + .db $c6, $c8, $c7, $c9 ;bullet bill cannon barrel + .db $ca, $cc, $cb, $cd ;bullet bill cannon top + .db $2a, $2a, $40, $40 ;bullet bill cannon bottom + .db $24, $24, $24, $24 ;blank used for jumpspring + .db $24, $47, $24, $47 ;half brick used for jumpspring + .db $82, $83, $84, $85 ;solid block (water level, green rock) + .db $24, $47, $24, $47 ;half brick (???) + .db $86, $8a, $87, $8b ;water pipe top + .db $8e, $91, $8f, $92 ;water pipe bottom + .db $24, $2f, $24, $3d ;flag ball (residual object) + +Palette2_MTiles: + .db $24, $24, $24, $35 ;cloud left + .db $36, $25, $37, $25 ;cloud middle + .db $24, $38, $24, $24 ;cloud right + .db $24, $24, $39, $24 ;cloud bottom left + .db $3a, $24, $3b, $24 ;cloud bottom middle + .db $3c, $24, $24, $24 ;cloud bottom right + .db $41, $26, $41, $26 ;water/lava top + .db $26, $26, $26, $26 ;water/lava + .db $b0, $b1, $b2, $b3 ;cloud level terrain + .db $77, $79, $77, $79 ;bowser's bridge + +Palette3_MTiles: + .db $53, $55, $54, $56 ;question block (coin) + .db $53, $55, $54, $56 ;question block (power-up) + .db $a5, $a7, $a6, $a8 ;coin + .db $c2, $c4, $c3, $c5 ;underwater coin + .db $57, $59, $58, $5a ;empty block + .db $7b, $7d, $7c, $7e ;axe + +;------------------------------------------------------------------------------------- +;VRAM BUFFER DATA FOR LOCATIONS IN PRG-ROM + +WaterPaletteData: + .db $3f, $00, $20 + .db $0f, $15, $12, $25 + .db $0f, $3a, $1a, $0f + .db $0f, $30, $12, $0f + .db $0f, $27, $12, $0f + .db $22, $16, $27, $18 + .db $0f, $10, $30, $27 + .db $0f, $16, $30, $27 + .db $0f, $0f, $30, $10 + .db $00 + +GroundPaletteData: + .db $3f, $00, $20 + .db $0f, $29, $1a, $0f + .db $0f, $36, $17, $0f + .db $0f, $30, $21, $0f + .db $0f, $27, $17, $0f + .db $0f, $16, $27, $18 + .db $0f, $1a, $30, $27 + .db $0f, $16, $30, $27 + .db $0f, $0f, $36, $17 + .db $00 + +UndergroundPaletteData: + .db $3f, $00, $20 + .db $0f, $29, $1a, $09 + .db $0f, $3c, $1c, $0f + .db $0f, $30, $21, $1c + .db $0f, $27, $17, $1c + .db $0f, $16, $27, $18 + .db $0f, $1c, $36, $17 + .db $0f, $16, $30, $27 + .db $0f, $0c, $3c, $1c + .db $00 + +CastlePaletteData: + .db $3f, $00, $20 + .db $0f, $30, $10, $00 + .db $0f, $30, $10, $00 + .db $0f, $30, $16, $00 + .db $0f, $27, $17, $00 + .db $0f, $16, $27, $18 + .db $0f, $1c, $36, $17 + .db $0f, $16, $30, $27 + .db $0f, $00, $30, $10 + .db $00 + +DaySnowPaletteData: + .db $3f, $00, $04 + .db $22, $30, $00, $10 + .db $00 + +NightSnowPaletteData: + .db $3f, $00, $04 + .db $0f, $30, $00, $10 + .db $00 + +MushroomPaletteData: + .db $3f, $00, $04 + .db $22, $27, $16, $0f + .db $00 + +BowserPaletteData: + .db $3f, $14, $04 + .db $0f, $1a, $30, $27 + .db $00 + +MarioThanksMessage: +;"THANK YOU MARIO!" + .db $25, $48, $10 + .db $1d, $11, $0a, $17, $14, $24 + .db $22, $18, $1e, $24 + .db $16, $0a, $1b, $12, $18, $2b + .db $00 + +LuigiThanksMessage: +;"THANK YOU LUIGI!" + .db $25, $48, $10 + .db $1d, $11, $0a, $17, $14, $24 + .db $22, $18, $1e, $24 + .db $15, $1e, $12, $10, $12, $2b + .db $00 + +MushroomRetainerSaved: +;"BUT OUR PRINCESS IS IN" + .db $25, $c5, $16 + .db $0b, $1e, $1d, $24, $18, $1e, $1b, $24 + .db $19, $1b, $12, $17, $0c, $0e, $1c, $1c, $24 + .db $12, $1c, $24, $12, $17 +;"ANOTHER CASTLE!" + .db $26, $05, $0f + .db $0a, $17, $18, $1d, $11, $0e, $1b, $24 + .db $0c, $0a, $1c, $1d, $15, $0e, $2b, $00 + +PrincessSaved1: +;"YOUR QUEST IS OVER." + .db $25, $a7, $13 + .db $22, $18, $1e, $1b, $24 + .db $1a, $1e, $0e, $1c, $1d, $24 + .db $12, $1c, $24, $18, $1f, $0e, $1b, $af + .db $00 + +PrincessSaved2: +;"WE PRESENT YOU A NEW QUEST." + .db $25, $e3, $1b + .db $20, $0e, $24 + .db $19, $1b, $0e, $1c, $0e, $17, $1d, $24 + .db $22, $18, $1e, $24, $0a, $24, $17, $0e, $20, $24 + .db $1a, $1e, $0e, $1c, $1d, $af + .db $00 + +WorldSelectMessage1: +;"PUSH BUTTON B" + .db $26, $4a, $0d + .db $19, $1e, $1c, $11, $24 + .db $0b, $1e, $1d, $1d, $18, $17, $24, $0b + .db $00 + +WorldSelectMessage2: +;"TO SELECT A WORLD" + .db $26, $88, $11 + .db $1d, $18, $24, $1c, $0e, $15, $0e, $0c, $1d, $24 + .db $0a, $24, $20, $18, $1b, $15, $0d + .db $00 + +;------------------------------------------------------------------------------------- +;$04 - address low to jump address +;$05 - address high to jump address +;$06 - jump address low +;$07 - jump address high + +JumpEngine: + asl ;shift bit from contents of A + tay + pla ;pull saved return address from stack + sta $04 ;save to indirect + pla + sta $05 + iny + lda ($04),y ;load pointer from indirect + sta $06 ;note that if an RTS is performed in next routine + iny ;it will return to the execution before the sub + lda ($04),y ;that called this routine + sta $07 + jmp ($06) ;jump to the address we loaded + +;------------------------------------------------------------------------------------- + +InitializeNameTables: + lda PPU_STATUS ;reset flip-flop + lda Mirror_PPU_CTRL_REG1 ;load mirror of ppu reg $2000 + ora #%00010000 ;set sprites for first 4k and background for second 4k + and #%11110000 ;clear rest of lower nybble, leave higher alone + jsr WritePPUReg1 + lda #$24 ;set vram address to start of name table 1 + jsr WriteNTAddr + lda #$20 ;and then set it to name table 0 +WriteNTAddr: sta PPU_ADDRESS + lda #$00 + sta PPU_ADDRESS + ldx #$04 ;clear name table with blank tile #24 + ldy #$c0 + lda #$24 +InitNTLoop: sta PPU_DATA ;count out exactly 768 tiles + dey + bne InitNTLoop + dex + bne InitNTLoop + ldy #64 ;now to clear the attribute table (with zero this time) + txa + sta VRAM_Buffer1_Offset ;init vram buffer 1 offset + sta VRAM_Buffer1 ;init vram buffer 1 +InitATLoop: sta PPU_DATA + dey + bne InitATLoop + sta HorizontalScroll ;reset scroll variables + sta VerticalScroll + jmp InitScroll ;initialize scroll registers to zero + +;------------------------------------------------------------------------------------- +;$00 - temp joypad bit + +ReadJoypads: + lda #$01 ;reset and clear strobe of joypad ports + sta JOYPAD_PORT + lsr + tax ;start with joypad 1's port + sta JOYPAD_PORT + jsr ReadPortBits + inx ;increment for joypad 2's port +ReadPortBits: ldy #$08 +PortLoop: pha ;push previous bit onto stack + lda JOYPAD_PORT,x ;read current bit on joypad port + sta $00 ;check d1 and d0 of port output + lsr ;this is necessary on the old + ora $00 ;famicom systems in japan + lsr + pla ;read bits from stack + rol ;rotate bit from carry flag + dey + bne PortLoop ;count down bits left + sta SavedJoypadBits,x ;save controller status here always + pha + and #%00110000 ;check for select or start + and JoypadBitMask,x ;if neither saved state nor current state + beq Save8Bits ;have any of these two set, branch + pla + and #%11001111 ;otherwise store without select + sta SavedJoypadBits,x ;or start bits and leave + rts +Save8Bits: pla + sta JoypadBitMask,x ;save with all bits in another place and leave + rts + +;------------------------------------------------------------------------------------- +;$00 - vram buffer address table low +;$01 - vram buffer address table high + +WriteBufferToScreen: + sta PPU_ADDRESS ;store high byte of vram address + iny + lda ($00),y ;load next byte (second) + sta PPU_ADDRESS ;store low byte of vram address + iny + lda ($00),y ;load next byte (third) + asl ;shift to left and save in stack + pha + lda Mirror_PPU_CTRL_REG1 ;load mirror of $2000, + ora #%00000100 ;set ppu to increment by 32 by default + bcs SetupWrites ;if d7 of third byte was clear, ppu will + and #%11111011 ;only increment by 1 +SetupWrites: jsr WritePPUReg1 ;write to register + pla ;pull from stack and shift to left again + asl + bcc GetLength ;if d6 of third byte was clear, do not repeat byte + ora #%00000010 ;otherwise set d1 and increment Y + iny +GetLength: lsr ;shift back to the right to get proper length + lsr ;note that d1 will now be in carry + tax +OutputToVRAM: bcs RepeatByte ;if carry set, repeat loading the same byte + iny ;otherwise increment Y to load next byte +RepeatByte: lda ($00),y ;load more data from buffer and write to vram + sta PPU_DATA + dex ;done writing? + bne OutputToVRAM + sec + tya + adc $00 ;add end length plus one to the indirect at $00 + sta $00 ;to allow this routine to read another set of updates + lda #$00 + adc $01 + sta $01 + lda #$3f ;sets vram address to $3f00 + sta PPU_ADDRESS + lda #$00 + sta PPU_ADDRESS + sta PPU_ADDRESS ;then reinitializes it for some reason + sta PPU_ADDRESS +UpdateScreen: ldx PPU_STATUS ;reset flip-flop + ldy #$00 ;load first byte from indirect as a pointer + lda ($00),y + bne WriteBufferToScreen ;if byte is zero we have no further updates to make here +InitScroll: sta PPU_SCROLL_REG ;store contents of A into scroll registers + sta PPU_SCROLL_REG ;and end whatever subroutine led us here + rts + +;------------------------------------------------------------------------------------- + +WritePPUReg1: + sta PPU_CTRL_REG1 ;write contents of A to PPU register 1 + sta Mirror_PPU_CTRL_REG1 ;and its mirror + rts + +;------------------------------------------------------------------------------------- +;$00 - used to store status bar nybbles +;$02 - used as temp vram offset +;$03 - used to store length of status bar number + +;status bar name table offset and length data +StatusBarData: + .db $f0, $06 ; top score display on title screen + .db $62, $06 ; player score + .db $62, $06 + .db $6d, $02 ; coin tally + .db $6d, $02 + .db $7a, $03 ; game timer + +StatusBarOffset: + .db $06, $0c, $12, $18, $1e, $24 + +PrintStatusBarNumbers: + sta $00 ;store player-specific offset + jsr OutputNumbers ;use first nybble to print the coin display + lda $00 ;move high nybble to low + lsr ;and print to score display + lsr + lsr + lsr + +OutputNumbers: + clc ;add 1 to low nybble + adc #$01 + and #%00001111 ;mask out high nybble + cmp #$06 + bcs ExitOutputN + pha ;save incremented value to stack for now and + asl ;shift to left and use as offset + tay + ldx VRAM_Buffer1_Offset ;get current buffer pointer + lda #$20 ;put at top of screen by default + cpy #$00 ;are we writing top score on title screen? + bne SetupNums + lda #$22 ;if so, put further down on the screen +SetupNums: sta VRAM_Buffer1,x + lda StatusBarData,y ;write low vram address and length of thing + sta VRAM_Buffer1+1,x ;we're printing to the buffer + lda StatusBarData+1,y + sta VRAM_Buffer1+2,x + sta $03 ;save length byte in counter + stx $02 ;and buffer pointer elsewhere for now + pla ;pull original incremented value from stack + tax + lda StatusBarOffset,x ;load offset to value we want to write + sec + sbc StatusBarData+1,y ;subtract from length byte we read before + tay ;use value as offset to display digits + ldx $02 +DigitPLoop: lda DisplayDigits,y ;write digits to the buffer + sta VRAM_Buffer1+3,x + inx + iny + dec $03 ;do this until all the digits are written + bne DigitPLoop + lda #$00 ;put null terminator at end + sta VRAM_Buffer1+3,x + inx ;increment buffer pointer by 3 + inx + inx + stx VRAM_Buffer1_Offset ;store it in case we want to use it again +ExitOutputN: rts + +;------------------------------------------------------------------------------------- + +DigitsMathRoutine: + lda OperMode ;check mode of operation + cmp #TitleScreenModeValue + beq EraseDMods ;if in title screen mode, branch to lock score + ldx #$05 +AddModLoop: lda DigitModifier,x ;load digit amount to increment + clc + adc DisplayDigits,y ;add to current digit + bmi BorrowOne ;if result is a negative number, branch to subtract + cmp #10 + bcs CarryOne ;if digit greater than $09, branch to add +StoreNewD: sta DisplayDigits,y ;store as new score or game timer digit + dey ;move onto next digits in score or game timer + dex ;and digit amounts to increment + bpl AddModLoop ;loop back if we're not done yet +EraseDMods: lda #$00 ;store zero here + ldx #$06 ;start with the last digit +EraseMLoop: sta DigitModifier-1,x ;initialize the digit amounts to increment + dex + bpl EraseMLoop ;do this until they're all reset, then leave + rts +BorrowOne: dec DigitModifier-1,x ;decrement the previous digit, then put $09 in + lda #$09 ;the game timer digit we're currently on to "borrow + bne StoreNewD ;the one", then do an unconditional branch back +CarryOne: sec ;subtract ten from our digit to make it a + sbc #10 ;proper BCD number, then increment the digit + inc DigitModifier-1,x ;preceding current digit to "carry the one" properly + jmp StoreNewD ;go back to just after we branched here + +;------------------------------------------------------------------------------------- + +UpdateTopScore: + ldx #$05 ;start with mario's score + jsr TopScoreCheck + ldx #$0b ;now do luigi's score + +TopScoreCheck: + ldy #$05 ;start with the lowest digit + sec +GetScoreDiff: lda PlayerScoreDisplay,x ;subtract each player digit from each high score digit + sbc TopScoreDisplay,y ;from lowest to highest, if any top score digit exceeds + dex ;any player digit, borrow will be set until a subsequent + dey ;subtraction clears it (player digit is higher than top) + bpl GetScoreDiff + bcc NoTopSc ;check to see if borrow is still set, if so, no new high score + inx ;increment X and Y once to the start of the score + iny +CopyScore: lda PlayerScoreDisplay,x ;store player's score digits into high score memory area + sta TopScoreDisplay,y + inx + iny + cpy #$06 ;do this until we have stored them all + bcc CopyScore +NoTopSc: rts + +;------------------------------------------------------------------------------------- + +DefaultSprOffsets: + .db $04, $30, $48, $60, $78, $90, $a8, $c0 + .db $d8, $e8, $24, $f8, $fc, $28, $2c + +Sprite0Data: + .db $18, $ff, $23, $58 + +;------------------------------------------------------------------------------------- + +InitializeGame: + ldy #$6f ;clear all memory as in initialization procedure, + jsr InitializeMemory ;but this time, clear only as far as $076f + ldy #$1f +ClrSndLoop: sta SoundMemory,y ;clear out memory used + dey ;by the sound engines + bpl ClrSndLoop + lda #$18 ;set demo timer + sta DemoTimer + jsr LoadAreaPointer + +InitializeArea: + ldy #$4b ;clear all memory again, only as far as $074b + jsr InitializeMemory ;this is only necessary if branching from + ldx #$21 + lda #$00 +ClrTimersLoop: sta Timers,x ;clear out memory between + dex ;$0780 and $07a1 + bpl ClrTimersLoop + lda HalfwayPage + ldy AltEntranceControl ;if AltEntranceControl not set, use halfway page, if any found + beq StartPage + lda EntrancePage ;otherwise use saved entry page number here +StartPage: sta ScreenLeft_PageLoc ;set as value here + sta CurrentPageLoc ;also set as current page + sta BackloadingFlag ;set flag here if halfway page or saved entry page number found + jsr GetScreenPosition ;get pixel coordinates for screen borders + ldy #$20 ;if on odd numbered page, use $2480 as start of rendering + and #%00000001 ;otherwise use $2080, this address used later as name table + beq SetInitNTHigh ;address for rendering of game area + ldy #$24 +SetInitNTHigh: sty CurrentNTAddr_High ;store name table address + ldy #$80 + sty CurrentNTAddr_Low + asl ;store LSB of page number in high nybble + asl ;of block buffer column position + asl + asl + sta BlockBufferColumnPos + dec AreaObjectLength ;set area object lengths for all empty + dec AreaObjectLength+1 + dec AreaObjectLength+2 + lda #$0b ;set value for renderer to update 12 column sets + sta ColumnSets ;12 column sets = 24 metatile columns = 1 1/2 screens + jsr GetAreaDataAddrs ;get enemy and level addresses and load header + lda PrimaryHardMode ;check to see if primary hard mode has been activated + bne SetSecHard ;if so, activate the secondary no matter where we're at + lda WorldNumber ;otherwise check world number + cmp #World5 ;if less than 5, do not activate secondary + bcc CheckHalfway + bne SetSecHard ;if not equal to, then world > 5, thus activate + lda LevelNumber ;otherwise, world 5, so check level number + cmp #Level3 ;if 1 or 2, do not set secondary hard mode flag + bcc CheckHalfway +SetSecHard: inc SecondaryHardMode ;set secondary hard mode flag for areas 5-3 and beyond +CheckHalfway: lda HalfwayPage + beq DoneInitArea + lda #$02 ;if halfway page set, overwrite start position from header + sta PlayerEntranceCtrl +DoneInitArea: lda #Silence ;silence music + sta AreaMusicQueue + lda #$01 ;disable screen output + sta DisableScreenFlag + inc OperMode_Task ;increment one of the modes + rts + +;------------------------------------------------------------------------------------- + +PrimaryGameSetup: + lda #$01 + sta FetchNewGameTimerFlag ;set flag to load game timer from header + sta PlayerSize ;set player's size to small + lda #$02 + sta NumberofLives ;give each player three lives + sta OffScr_NumberofLives + +SecondaryGameSetup: + lda #$00 + sta DisableScreenFlag ;enable screen output + tay +ClearVRLoop: sta VRAM_Buffer1-1,y ;clear buffer at $0300-$03ff + iny + bne ClearVRLoop + sta GameTimerExpiredFlag ;clear game timer exp flag + sta DisableIntermediate ;clear skip lives display flag + sta BackloadingFlag ;clear value here + lda #$ff + sta BalPlatformAlignment ;initialize balance platform assignment flag + lda ScreenLeft_PageLoc ;get left side page location + lsr Mirror_PPU_CTRL_REG1 ;shift LSB of ppu register #1 mirror out + and #$01 ;mask out all but LSB of page location + ror ;rotate LSB of page location into carry then onto mirror + rol Mirror_PPU_CTRL_REG1 ;this is to set the proper PPU name table + jsr GetAreaMusic ;load proper music into queue + lda #$38 ;load sprite shuffle amounts to be used later + sta SprShuffleAmt+2 + lda #$48 + sta SprShuffleAmt+1 + lda #$58 + sta SprShuffleAmt + ldx #$0e ;load default OAM offsets into $06e4-$06f2 +ShufAmtLoop: lda DefaultSprOffsets,x + sta SprDataOffset,x + dex ;do this until they're all set + bpl ShufAmtLoop + ldy #$03 ;set up sprite #0 +ISpr0Loop: lda Sprite0Data,y + sta Sprite_Data,y + dey + bpl ISpr0Loop + jsr DoNothing2 ;these jsrs doesn't do anything useful + jsr DoNothing1 + inc Sprite0HitDetectFlag ;set sprite #0 check flag + inc OperMode_Task ;increment to next task + rts + +;------------------------------------------------------------------------------------- + +;$06 - RAM address low +;$07 - RAM address high + +InitializeMemory: + ldx #$07 ;set initial high byte to $0700-$07ff + lda #$00 ;set initial low byte to start of page (at $00 of page) + sta $06 +InitPageLoop: stx $07 +InitByteLoop: cpx #$01 ;check to see if we're on the stack ($0100-$01ff) + bne InitByte ;if not, go ahead anyway + cpy #$60 ;otherwise, check to see if we're at $0160-$01ff + bcs SkipByte ;if so, skip write +InitByte: sta ($06),y ;otherwise, initialize byte with current low byte in Y +SkipByte: dey + cpy #$ff ;do this until all bytes in page have been erased + bne InitByteLoop + dex ;go onto the next page + bpl InitPageLoop ;do this until all pages of memory have been erased + rts + +;------------------------------------------------------------------------------------- + +MusicSelectData: + .db WaterMusic, GroundMusic, UndergroundMusic, CastleMusic + .db CloudMusic, PipeIntroMusic + +GetAreaMusic: + lda OperMode ;if in title screen mode, leave + beq ExitGetM + lda AltEntranceControl ;check for specific alternate mode of entry + cmp #$02 ;if found, branch without checking starting position + beq ChkAreaType ;from area object data header + ldy #$05 ;select music for pipe intro scene by default + lda PlayerEntranceCtrl ;check value from level header for certain values + cmp #$06 + beq StoreMusic ;load music for pipe intro scene if header + cmp #$07 ;start position either value $06 or $07 + beq StoreMusic +ChkAreaType: ldy AreaType ;load area type as offset for music bit + lda CloudTypeOverride + beq StoreMusic ;check for cloud type override + ldy #$04 ;select music for cloud type level if found +StoreMusic: lda MusicSelectData,y ;otherwise select appropriate music for level type + sta AreaMusicQueue ;store in queue and leave +ExitGetM: rts + +;------------------------------------------------------------------------------------- + +PlayerStarting_X_Pos: + .db $28, $18 + .db $38, $28 + +AltYPosOffset: + .db $08, $00 + +PlayerStarting_Y_Pos: + .db $00, $20, $b0, $50, $00, $00, $b0, $b0 + .db $f0 + +PlayerBGPriorityData: + .db $00, $20, $00, $00, $00, $00, $00, $00 + +GameTimerData: + .db $20 ;dummy byte, used as part of bg priority data + .db $04, $03, $02 + +Entrance_GameTimerSetup: + lda ScreenLeft_PageLoc ;set current page for area objects + sta Player_PageLoc ;as page location for player + lda #$28 ;store value here + sta VerticalForceDown ;for fractional movement downwards if necessary + lda #$01 ;set high byte of player position and + sta PlayerFacingDir ;set facing direction so that player faces right + sta Player_Y_HighPos + lda #$00 ;set player state to on the ground by default + sta Player_State + dec Player_CollisionBits ;initialize player's collision bits + ldy #$00 ;initialize halfway page + sty HalfwayPage + lda AreaType ;check area type + bne ChkStPos ;if water type, set swimming flag, otherwise do not set + iny +ChkStPos: sty SwimmingFlag + ldx PlayerEntranceCtrl ;get starting position loaded from header + ldy AltEntranceControl ;check alternate mode of entry flag for 0 or 1 + beq SetStPos + cpy #$01 + beq SetStPos + ldx AltYPosOffset-2,y ;if not 0 or 1, override $0710 with new offset in X +SetStPos: lda PlayerStarting_X_Pos,y ;load appropriate horizontal position + sta Player_X_Position ;and vertical positions for the player, using + lda PlayerStarting_Y_Pos,x ;AltEntranceControl as offset for horizontal and either $0710 + sta Player_Y_Position ;or value that overwrote $0710 as offset for vertical + lda PlayerBGPriorityData,x + sta Player_SprAttrib ;set player sprite attributes using offset in X + jsr GetPlayerColors ;get appropriate player palette + ldy GameTimerSetting ;get timer control value from header + beq ChkOverR ;if set to zero, branch (do not use dummy byte for this) + lda FetchNewGameTimerFlag ;do we need to set the game timer? if not, use + beq ChkOverR ;old game timer setting + lda GameTimerData,y ;if game timer is set and game timer flag is also set, + sta GameTimerDisplay ;use value of game timer control for first digit of game timer + lda #$01 + sta GameTimerDisplay+2 ;set last digit of game timer to 1 + lsr + sta GameTimerDisplay+1 ;set second digit of game timer + sta FetchNewGameTimerFlag ;clear flag for game timer reset + sta StarInvincibleTimer ;clear star mario timer +ChkOverR: ldy JoypadOverride ;if controller bits not set, branch to skip this part + beq ChkSwimE + lda #$03 ;set player state to climbing + sta Player_State + ldx #$00 ;set offset for first slot, for block object + jsr InitBlock_XY_Pos + lda #$f0 ;set vertical coordinate for block object + sta Block_Y_Position + ldx #$05 ;set offset in X for last enemy object buffer slot + ldy #$00 ;set offset in Y for object coordinates used earlier + jsr Setup_Vine ;do a sub to grow vine +ChkSwimE: ldy AreaType ;if level not water-type, + bne SetPESub ;skip this subroutine + jsr SetupBubble ;otherwise, execute sub to set up air bubbles +SetPESub: lda #$07 ;set to run player entrance subroutine + sta GameEngineSubroutine ;on the next frame of game engine + rts + +;------------------------------------------------------------------------------------- + +;page numbers are in order from -1 to -4 +HalfwayPageNybbles: + .db $56, $40 + .db $65, $70 + .db $66, $40 + .db $66, $40 + .db $66, $40 + .db $66, $60 + .db $65, $70 + .db $00, $00 + +PlayerLoseLife: + inc DisableScreenFlag ;disable screen and sprite 0 check + lda #$00 + sta Sprite0HitDetectFlag + lda #Silence ;silence music + sta EventMusicQueue + dec NumberofLives ;take one life from player + bpl StillInGame ;if player still has lives, branch + lda #$00 + sta OperMode_Task ;initialize mode task, + lda #GameOverModeValue ;switch to game over mode + sta OperMode ;and leave + rts +StillInGame: lda WorldNumber ;multiply world number by 2 and use + asl ;as offset + tax + lda LevelNumber ;if in area -3 or -4, increment + and #$02 ;offset by one byte, otherwise + beq GetHalfway ;leave offset alone + inx +GetHalfway: ldy HalfwayPageNybbles,x ;get halfway page number with offset + lda LevelNumber ;check area number's LSB + lsr + tya ;if in area -2 or -4, use lower nybble + bcs MaskHPNyb + lsr ;move higher nybble to lower if area + lsr ;number is -1 or -3 + lsr + lsr +MaskHPNyb: and #%00001111 ;mask out all but lower nybble + cmp ScreenLeft_PageLoc + beq SetHalfway ;left side of screen must be at the halfway page, + bcc SetHalfway ;otherwise player must start at the + lda #$00 ;beginning of the level +SetHalfway: sta HalfwayPage ;store as halfway page for player + jsr TransposePlayers ;switch players around if 2-player game + jmp ContinueGame ;continue the game + +;------------------------------------------------------------------------------------- + +GameOverMode: + lda OperMode_Task + jsr JumpEngine + + .dw SetupGameOver + .dw ScreenRoutines + .dw RunGameOver + +;------------------------------------------------------------------------------------- + +SetupGameOver: + lda #$00 ;reset screen routine task control for title screen, game, + sta ScreenRoutineTask ;and game over modes + sta Sprite0HitDetectFlag ;disable sprite 0 check + lda #GameOverMusic + sta EventMusicQueue ;put game over music in secondary queue + inc DisableScreenFlag ;disable screen output + inc OperMode_Task ;set secondary mode to 1 + rts + +;------------------------------------------------------------------------------------- + +RunGameOver: + lda #$00 ;reenable screen + sta DisableScreenFlag + lda SavedJoypad1Bits ;check controller for start pressed + and #Start_Button + bne TerminateGame + lda ScreenTimer ;if not pressed, wait for + bne GameIsOn ;screen timer to expire +TerminateGame: + lda #Silence ;silence music + sta EventMusicQueue + jsr TransposePlayers ;check if other player can keep + bcc ContinueGame ;going, and do so if possible + lda WorldNumber ;otherwise put world number of current + sta ContinueWorld ;player into secret continue function variable + lda #$00 + asl ;residual ASL instruction + sta OperMode_Task ;reset all modes to title screen and + sta ScreenTimer ;leave + sta OperMode + rts + +ContinueGame: + jsr LoadAreaPointer ;update level pointer with + lda #$01 ;actual world and area numbers, then + sta PlayerSize ;reset player's size, status, and + inc FetchNewGameTimerFlag ;set game timer flag to reload + lda #$00 ;game timer from header + sta TimerControl ;also set flag for timers to count again + sta PlayerStatus + sta GameEngineSubroutine ;reset task for game core + sta OperMode_Task ;set modes and leave + lda #$01 ;if in game over mode, switch back to + sta OperMode ;game mode, because game is still on +GameIsOn: rts + +TransposePlayers: + sec ;set carry flag by default to end game + lda NumberOfPlayers ;if only a 1 player game, leave + beq ExTrans + lda OffScr_NumberofLives ;does offscreen player have any lives left? + bmi ExTrans ;branch if not + lda CurrentPlayer ;invert bit to update + eor #%00000001 ;which player is on the screen + sta CurrentPlayer + ldx #$06 +TransLoop: lda OnscreenPlayerInfo,x ;transpose the information + pha ;of the onscreen player + lda OffscreenPlayerInfo,x ;with that of the offscreen player + sta OnscreenPlayerInfo,x + pla + sta OffscreenPlayerInfo,x + dex + bpl TransLoop + clc ;clear carry flag to get game going +ExTrans: rts + +;------------------------------------------------------------------------------------- + +DoNothing1: + lda #$ff ;this is residual code, this value is + sta $06c9 ;not used anywhere in the program +DoNothing2: + rts + +;------------------------------------------------------------------------------------- + +AreaParserTaskHandler: + ldy AreaParserTaskNum ;check number of tasks here + bne DoAPTasks ;if already set, go ahead + ldy #$08 + sty AreaParserTaskNum ;otherwise, set eight by default +DoAPTasks: dey + tya + jsr AreaParserTasks + dec AreaParserTaskNum ;if all tasks not complete do not + bne SkipATRender ;render attribute table yet + jsr RenderAttributeTables +SkipATRender: rts + +AreaParserTasks: + jsr JumpEngine + + .dw IncrementColumnPos + .dw RenderAreaGraphics + .dw RenderAreaGraphics + .dw AreaParserCore + .dw IncrementColumnPos + .dw RenderAreaGraphics + .dw RenderAreaGraphics + .dw AreaParserCore + +;------------------------------------------------------------------------------------- + +IncrementColumnPos: + inc CurrentColumnPos ;increment column where we're at + lda CurrentColumnPos + and #%00001111 ;mask out higher nybble + bne NoColWrap + sta CurrentColumnPos ;if no bits left set, wrap back to zero (0-f) + inc CurrentPageLoc ;and increment page number where we're at +NoColWrap: inc BlockBufferColumnPos ;increment column offset where we're at + lda BlockBufferColumnPos + and #%00011111 ;mask out all but 5 LSB (0-1f) + sta BlockBufferColumnPos ;and save + rts + +;------------------------------------------------------------------------------------- +;$00 - used as counter, store for low nybble for background, ceiling byte for terrain +;$01 - used to store floor byte for terrain +;$07 - used to store terrain metatile +;$06-$07 - used to store block buffer address + +BSceneDataOffsets: + .db $00, $30, $60 + +BackSceneryData: + .db $93, $00, $00, $11, $12, $12, $13, $00 ;clouds + .db $00, $51, $52, $53, $00, $00, $00, $00 + .db $00, $00, $01, $02, $02, $03, $00, $00 + .db $00, $00, $00, $00, $91, $92, $93, $00 + .db $00, $00, $00, $51, $52, $53, $41, $42 + .db $43, $00, $00, $00, $00, $00, $91, $92 + + .db $97, $87, $88, $89, $99, $00, $00, $00 ;mountains and bushes + .db $11, $12, $13, $a4, $a5, $a5, $a5, $a6 + .db $97, $98, $99, $01, $02, $03, $00, $a4 + .db $a5, $a6, $00, $11, $12, $12, $12, $13 + .db $00, $00, $00, $00, $01, $02, $02, $03 + .db $00, $a4, $a5, $a5, $a6, $00, $00, $00 + + .db $11, $12, $12, $13, $00, $00, $00, $00 ;trees and fences + .db $00, $00, $00, $9c, $00, $8b, $aa, $aa + .db $aa, $aa, $11, $12, $13, $8b, $00, $9c + .db $9c, $00, $00, $01, $02, $03, $11, $12 + .db $12, $13, $00, $00, $00, $00, $aa, $aa + .db $9c, $aa, $00, $8b, $00, $01, $02, $03 + +BackSceneryMetatiles: + .db $80, $83, $00 ;cloud left + .db $81, $84, $00 ;cloud middle + .db $82, $85, $00 ;cloud right + .db $02, $00, $00 ;bush left + .db $03, $00, $00 ;bush middle + .db $04, $00, $00 ;bush right + .db $00, $05, $06 ;mountain left + .db $07, $06, $0a ;mountain middle + .db $00, $08, $09 ;mountain right + .db $4d, $00, $00 ;fence + .db $0d, $0f, $4e ;tall tree + .db $0e, $4e, $4e ;short tree + +FSceneDataOffsets: + .db $00, $0d, $1a + +ForeSceneryData: + .db $86, $87, $87, $87, $87, $87, $87 ;in water + .db $87, $87, $87, $87, $69, $69 + + .db $00, $00, $00, $00, $00, $45, $47 ;wall + .db $47, $47, $47, $47, $00, $00 + + .db $00, $00, $00, $00, $00, $00, $00 ;over water + .db $00, $00, $00, $00, $86, $87 + +TerrainMetatiles: + .db $69, $54, $52, $62 + +TerrainRenderBits: + .db %00000000, %00000000 ;no ceiling or floor + .db %00000000, %00011000 ;no ceiling, floor 2 + .db %00000001, %00011000 ;ceiling 1, floor 2 + .db %00000111, %00011000 ;ceiling 3, floor 2 + .db %00001111, %00011000 ;ceiling 4, floor 2 + .db %11111111, %00011000 ;ceiling 8, floor 2 + .db %00000001, %00011111 ;ceiling 1, floor 5 + .db %00000111, %00011111 ;ceiling 3, floor 5 + .db %00001111, %00011111 ;ceiling 4, floor 5 + .db %10000001, %00011111 ;ceiling 1, floor 6 + .db %00000001, %00000000 ;ceiling 1, no floor + .db %10001111, %00011111 ;ceiling 4, floor 6 + .db %11110001, %00011111 ;ceiling 1, floor 9 + .db %11111001, %00011000 ;ceiling 1, middle 5, floor 2 + .db %11110001, %00011000 ;ceiling 1, middle 4, floor 2 + .db %11111111, %00011111 ;completely solid top to bottom + +AreaParserCore: + lda BackloadingFlag ;check to see if we are starting right of start + beq RenderSceneryTerrain ;if not, go ahead and render background, foreground and terrain + jsr ProcessAreaData ;otherwise skip ahead and load level data + +RenderSceneryTerrain: + ldx #$0c + lda #$00 +ClrMTBuf: sta MetatileBuffer,x ;clear out metatile buffer + dex + bpl ClrMTBuf + ldy BackgroundScenery ;do we need to render the background scenery? + beq RendFore ;if not, skip to check the foreground + lda CurrentPageLoc ;otherwise check for every third page +ThirdP: cmp #$03 + bmi RendBack ;if less than three we're there + sec + sbc #$03 ;if 3 or more, subtract 3 and + bpl ThirdP ;do an unconditional branch +RendBack: asl ;move results to higher nybble + asl + asl + asl + adc BSceneDataOffsets-1,y ;add to it offset loaded from here + adc CurrentColumnPos ;add to the result our current column position + tax + lda BackSceneryData,x ;load data from sum of offsets + beq RendFore ;if zero, no scenery for that part + pha + and #$0f ;save to stack and clear high nybble + sec + sbc #$01 ;subtract one (because low nybble is $01-$0c) + sta $00 ;save low nybble + asl ;multiply by three (shift to left and add result to old one) + adc $00 ;note that since d7 was nulled, the carry flag is always clear + tax ;save as offset for background scenery metatile data + pla ;get high nybble from stack, move low + lsr + lsr + lsr + lsr + tay ;use as second offset (used to determine height) + lda #$03 ;use previously saved memory location for counter + sta $00 +SceLoop1: lda BackSceneryMetatiles,x ;load metatile data from offset of (lsb - 1) * 3 + sta MetatileBuffer,y ;store into buffer from offset of (msb / 16) + inx + iny + cpy #$0b ;if at this location, leave loop + beq RendFore + dec $00 ;decrement until counter expires, barring exception + bne SceLoop1 +RendFore: ldx ForegroundScenery ;check for foreground data needed or not + beq RendTerr ;if not, skip this part + ldy FSceneDataOffsets-1,x ;load offset from location offset by header value, then + ldx #$00 ;reinit X +SceLoop2: lda ForeSceneryData,y ;load data until counter expires + beq NoFore ;do not store if zero found + sta MetatileBuffer,x +NoFore: iny + inx + cpx #$0d ;store up to end of metatile buffer + bne SceLoop2 +RendTerr: ldy AreaType ;check world type for water level + bne TerMTile ;if not water level, skip this part + lda WorldNumber ;check world number, if not world number eight + cmp #World8 ;then skip this part + bne TerMTile + lda #$62 ;if set as water level and world number eight, + jmp StoreMT ;use castle wall metatile as terrain type +TerMTile: lda TerrainMetatiles,y ;otherwise get appropriate metatile for area type + ldy CloudTypeOverride ;check for cloud type override + beq StoreMT ;if not set, keep value otherwise + lda #$88 ;use cloud block terrain +StoreMT: sta $07 ;store value here + ldx #$00 ;initialize X, use as metatile buffer offset + lda TerrainControl ;use yet another value from the header + asl ;multiply by 2 and use as yet another offset + tay +TerrLoop: lda TerrainRenderBits,y ;get one of the terrain rendering bit data + sta $00 + iny ;increment Y and use as offset next time around + sty $01 + lda CloudTypeOverride ;skip if value here is zero + beq NoCloud2 + cpx #$00 ;otherwise, check if we're doing the ceiling byte + beq NoCloud2 + lda $00 ;if not, mask out all but d3 + and #%00001000 + sta $00 +NoCloud2: ldy #$00 ;start at beginning of bitmasks +TerrBChk: lda Bitmasks,y ;load bitmask, then perform AND on contents of first byte + bit $00 + beq NextTBit ;if not set, skip this part (do not write terrain to buffer) + lda $07 + sta MetatileBuffer,x ;load terrain type metatile number and store into buffer here +NextTBit: inx ;continue until end of buffer + cpx #$0d + beq RendBBuf ;if we're at the end, break out of this loop + lda AreaType ;check world type for underground area + cmp #$02 + bne EndUChk ;if not underground, skip this part + cpx #$0b + bne EndUChk ;if we're at the bottom of the screen, override + lda #$54 ;old terrain type with ground level terrain type + sta $07 +EndUChk: iny ;increment bitmasks offset in Y + cpy #$08 + bne TerrBChk ;if not all bits checked, loop back + ldy $01 + bne TerrLoop ;unconditional branch, use Y to load next byte +RendBBuf: jsr ProcessAreaData ;do the area data loading routine now + lda BlockBufferColumnPos + jsr GetBlockBufferAddr ;get block buffer address from where we're at + ldx #$00 + ldy #$00 ;init index regs and start at beginning of smaller buffer +ChkMTLow: sty $00 + lda MetatileBuffer,x ;load stored metatile number + and #%11000000 ;mask out all but 2 MSB + asl + rol ;make %xx000000 into %000000xx + rol + tay ;use as offset in Y + lda MetatileBuffer,x ;reload original unmasked value here + cmp BlockBuffLowBounds,y ;check for certain values depending on bits set + bcs StrBlock ;if equal or greater, branch + lda #$00 ;if less, init value before storing +StrBlock: ldy $00 ;get offset for block buffer + sta ($06),y ;store value into block buffer + tya + clc ;add 16 (move down one row) to offset + adc #$10 + tay + inx ;increment column value + cpx #$0d + bcc ChkMTLow ;continue until we pass last row, then leave + rts + +;numbers lower than these with the same attribute bits +;will not be stored in the block buffer +BlockBuffLowBounds: + .db $10, $51, $88, $c0 + +;------------------------------------------------------------------------------------- +;$00 - used to store area object identifier +;$07 - used as adder to find proper area object code + +ProcessAreaData: + ldx #$02 ;start at the end of area object buffer +ProcADLoop: stx ObjectOffset + lda #$00 ;reset flag + sta BehindAreaParserFlag + ldy AreaDataOffset ;get offset of area data pointer + lda (AreaData),y ;get first byte of area object + cmp #$fd ;if end-of-area, skip all this crap + beq RdyDecode + lda AreaObjectLength,x ;check area object buffer flag + bpl RdyDecode ;if buffer not negative, branch, otherwise + iny + lda (AreaData),y ;get second byte of area object + asl ;check for page select bit (d7), branch if not set + bcc Chk1Row13 + lda AreaObjectPageSel ;check page select + bne Chk1Row13 + inc AreaObjectPageSel ;if not already set, set it now + inc AreaObjectPageLoc ;and increment page location +Chk1Row13: dey + lda (AreaData),y ;reread first byte of level object + and #$0f ;mask out high nybble + cmp #$0d ;row 13? + bne Chk1Row14 + iny ;if so, reread second byte of level object + lda (AreaData),y + dey ;decrement to get ready to read first byte + and #%01000000 ;check for d6 set (if not, object is page control) + bne CheckRear + lda AreaObjectPageSel ;if page select is set, do not reread + bne CheckRear + iny ;if d6 not set, reread second byte + lda (AreaData),y + and #%00011111 ;mask out all but 5 LSB and store in page control + sta AreaObjectPageLoc + inc AreaObjectPageSel ;increment page select + jmp NextAObj +Chk1Row14: cmp #$0e ;row 14? + bne CheckRear + lda BackloadingFlag ;check flag for saved page number and branch if set + bne RdyDecode ;to render the object (otherwise bg might not look right) +CheckRear: lda AreaObjectPageLoc ;check to see if current page of level object is + cmp CurrentPageLoc ;behind current page of renderer + bcc SetBehind ;if so branch +RdyDecode: jsr DecodeAreaData ;do sub and do not turn on flag + jmp ChkLength +SetBehind: inc BehindAreaParserFlag ;turn on flag if object is behind renderer +NextAObj: jsr IncAreaObjOffset ;increment buffer offset and move on +ChkLength: ldx ObjectOffset ;get buffer offset + lda AreaObjectLength,x ;check object length for anything stored here + bmi ProcLoopb ;if not, branch to handle loopback + dec AreaObjectLength,x ;otherwise decrement length or get rid of it +ProcLoopb: dex ;decrement buffer offset + bpl ProcADLoop ;and loopback unless exceeded buffer + lda BehindAreaParserFlag ;check for flag set if objects were behind renderer + bne ProcessAreaData ;branch if true to load more level data, otherwise + lda BackloadingFlag ;check for flag set if starting right of page $00 + bne ProcessAreaData ;branch if true to load more level data, otherwise leave +EndAParse: rts + +IncAreaObjOffset: + inc AreaDataOffset ;increment offset of level pointer + inc AreaDataOffset + lda #$00 ;reset page select + sta AreaObjectPageSel + rts + +DecodeAreaData: + lda AreaObjectLength,x ;check current buffer flag + bmi Chk1stB + ldy AreaObjOffsetBuffer,x ;if not, get offset from buffer +Chk1stB: ldx #$10 ;load offset of 16 for special row 15 + lda (AreaData),y ;get first byte of level object again + cmp #$fd + beq EndAParse ;if end of level, leave this routine + and #$0f ;otherwise, mask out low nybble + cmp #$0f ;row 15? + beq ChkRow14 ;if so, keep the offset of 16 + ldx #$08 ;otherwise load offset of 8 for special row 12 + cmp #$0c ;row 12? + beq ChkRow14 ;if so, keep the offset value of 8 + ldx #$00 ;otherwise nullify value by default +ChkRow14: stx $07 ;store whatever value we just loaded here + ldx ObjectOffset ;get object offset again + cmp #$0e ;row 14? + bne ChkRow13 + lda #$00 ;if so, load offset with $00 + sta $07 + lda #$2e ;and load A with another value + bne NormObj ;unconditional branch +ChkRow13: cmp #$0d ;row 13? + bne ChkSRows + lda #$22 ;if so, load offset with 34 + sta $07 + iny ;get next byte + lda (AreaData),y + and #%01000000 ;mask out all but d6 (page control obj bit) + beq LeavePar ;if d6 clear, branch to leave (we handled this earlier) + lda (AreaData),y ;otherwise, get byte again + and #%01111111 ;mask out d7 + cmp #$4b ;check for loop command in low nybble + bne Mask2MSB ;(plus d6 set for object other than page control) + inc LoopCommand ;if loop command, set loop command flag +Mask2MSB: and #%00111111 ;mask out d7 and d6 + jmp NormObj ;and jump +ChkSRows: cmp #$0c ;row 12-15? + bcs SpecObj + iny ;if not, get second byte of level object + lda (AreaData),y + and #%01110000 ;mask out all but d6-d4 + bne LrgObj ;if any bits set, branch to handle large object + lda #$16 + sta $07 ;otherwise set offset of 24 for small object + lda (AreaData),y ;reload second byte of level object + and #%00001111 ;mask out higher nybble and jump + jmp NormObj +LrgObj: sta $00 ;store value here (branch for large objects) + cmp #$70 ;check for vertical pipe object + bne NotWPipe + lda (AreaData),y ;if not, reload second byte + and #%00001000 ;mask out all but d3 (usage control bit) + beq NotWPipe ;if d3 clear, branch to get original value + lda #$00 ;otherwise, nullify value for warp pipe + sta $00 +NotWPipe: lda $00 ;get value and jump ahead + jmp MoveAOId +SpecObj: iny ;branch here for rows 12-15 + lda (AreaData),y + and #%01110000 ;get next byte and mask out all but d6-d4 +MoveAOId: lsr ;move d6-d4 to lower nybble + lsr + lsr + lsr +NormObj: sta $00 ;store value here (branch for small objects and rows 13 and 14) + lda AreaObjectLength,x ;is there something stored here already? + bpl RunAObj ;if so, branch to do its particular sub + lda AreaObjectPageLoc ;otherwise check to see if the object we've loaded is on the + cmp CurrentPageLoc ;same page as the renderer, and if so, branch + beq InitRear + ldy AreaDataOffset ;if not, get old offset of level pointer + lda (AreaData),y ;and reload first byte + and #%00001111 + cmp #$0e ;row 14? + bne LeavePar + lda BackloadingFlag ;if so, check backloading flag + bne StrAObj ;if set, branch to render object, else leave +LeavePar: rts +InitRear: lda BackloadingFlag ;check backloading flag to see if it's been initialized + beq BackColC ;branch to column-wise check + lda #$00 ;if not, initialize both backloading and + sta BackloadingFlag ;behind-renderer flags and leave + sta BehindAreaParserFlag + sta ObjectOffset +LoopCmdE: rts +BackColC: ldy AreaDataOffset ;get first byte again + lda (AreaData),y + and #%11110000 ;mask out low nybble and move high to low + lsr + lsr + lsr + lsr + cmp CurrentColumnPos ;is this where we're at? + bne LeavePar ;if not, branch to leave +StrAObj: lda AreaDataOffset ;if so, load area obj offset and store in buffer + sta AreaObjOffsetBuffer,x + jsr IncAreaObjOffset ;do sub to increment to next object data +RunAObj: lda $00 ;get stored value and add offset to it + clc ;then use the jump engine with current contents of A + adc $07 + jsr JumpEngine + +;large objects (rows $00-$0b or 00-11, d6-d4 set) + .dw VerticalPipe ;used by warp pipes + .dw AreaStyleObject + .dw RowOfBricks + .dw RowOfSolidBlocks + .dw RowOfCoins + .dw ColumnOfBricks + .dw ColumnOfSolidBlocks + .dw VerticalPipe ;used by decoration pipes + +;objects for special row $0c or 12 + .dw Hole_Empty + .dw PulleyRopeObject + .dw Bridge_High + .dw Bridge_Middle + .dw Bridge_Low + .dw Hole_Water + .dw QuestionBlockRow_High + .dw QuestionBlockRow_Low + +;objects for special row $0f or 15 + .dw EndlessRope + .dw BalancePlatRope + .dw CastleObject + .dw StaircaseObject + .dw ExitPipe + .dw FlagBalls_Residual + +;small objects (rows $00-$0b or 00-11, d6-d4 all clear) + .dw QuestionBlock ;power-up + .dw QuestionBlock ;coin + .dw QuestionBlock ;hidden, coin + .dw Hidden1UpBlock ;hidden, 1-up + .dw BrickWithItem ;brick, power-up + .dw BrickWithItem ;brick, vine + .dw BrickWithItem ;brick, star + .dw BrickWithCoins ;brick, coins + .dw BrickWithItem ;brick, 1-up + .dw WaterPipe + .dw EmptyBlock + .dw Jumpspring + +;objects for special row $0d or 13 (d6 set) + .dw IntroPipe + .dw FlagpoleObject + .dw AxeObj + .dw ChainObj + .dw CastleBridgeObj + .dw ScrollLockObject_Warp + .dw ScrollLockObject + .dw ScrollLockObject + .dw AreaFrenzy ;flying cheep-cheeps + .dw AreaFrenzy ;bullet bills or swimming cheep-cheeps + .dw AreaFrenzy ;stop frenzy + .dw LoopCmdE + +;object for special row $0e or 14 + .dw AlterAreaAttributes + +;------------------------------------------------------------------------------------- +;(these apply to all area object subroutines in this section unless otherwise stated) +;$00 - used to store offset used to find object code +;$07 - starts with adder from area parser, used to store row offset + +AlterAreaAttributes: + ldy AreaObjOffsetBuffer,x ;load offset for level object data saved in buffer + iny ;load second byte + lda (AreaData),y + pha ;save in stack for now + and #%01000000 + bne Alter2 ;branch if d6 is set + pla + pha ;pull and push offset to copy to A + and #%00001111 ;mask out high nybble and store as + sta TerrainControl ;new terrain height type bits + pla + and #%00110000 ;pull and mask out all but d5 and d4 + lsr ;move bits to lower nybble and store + lsr ;as new background scenery bits + lsr + lsr + sta BackgroundScenery ;then leave + rts +Alter2: pla + and #%00000111 ;mask out all but 3 LSB + cmp #$04 ;if four or greater, set color control bits + bcc SetFore ;and nullify foreground scenery bits + sta BackgroundColorCtrl + lda #$00 +SetFore: sta ForegroundScenery ;otherwise set new foreground scenery bits + rts + +;-------------------------------- + +ScrollLockObject_Warp: + ldx #$04 ;load value of 4 for game text routine as default + lda WorldNumber ;warp zone (4-3-2), then check world number + beq WarpNum + inx ;if world number > 1, increment for next warp zone (5) + ldy AreaType ;check area type + dey + bne WarpNum ;if ground area type, increment for last warp zone + inx ;(8-7-6) and move on +WarpNum: txa + sta WarpZoneControl ;store number here to be used by warp zone routine + jsr WriteGameText ;print text and warp zone numbers + lda #PiranhaPlant + jsr KillEnemies ;load identifier for piranha plants and do sub + +ScrollLockObject: + lda ScrollLock ;invert scroll lock to turn it on + eor #%00000001 + sta ScrollLock + rts + +;-------------------------------- +;$00 - used to store enemy identifier in KillEnemies + +KillEnemies: + sta $00 ;store identifier here + lda #$00 + ldx #$04 ;check for identifier in enemy object buffer +KillELoop: ldy Enemy_ID,x + cpy $00 ;if not found, branch + bne NoKillE + sta Enemy_Flag,x ;if found, deactivate enemy object flag +NoKillE: dex ;do this until all slots are checked + bpl KillELoop + rts + +;-------------------------------- + +FrenzyIDData: + .db FlyCheepCheepFrenzy, BBill_CCheep_Frenzy, Stop_Frenzy + +AreaFrenzy: ldx $00 ;use area object identifier bit as offset + lda FrenzyIDData-8,x ;note that it starts at 8, thus weird address here + ldy #$05 +FreCompLoop: dey ;check regular slots of enemy object buffer + bmi ExitAFrenzy ;if all slots checked and enemy object not found, branch to store + cmp Enemy_ID,y ;check for enemy object in buffer versus frenzy object + bne FreCompLoop + lda #$00 ;if enemy object already present, nullify queue and leave +ExitAFrenzy: sta EnemyFrenzyQueue ;store enemy into frenzy queue + rts + +;-------------------------------- +;$06 - used by MushroomLedge to store length + +AreaStyleObject: + lda AreaStyle ;load level object style and jump to the right sub + jsr JumpEngine + .dw TreeLedge ;also used for cloud type levels + .dw MushroomLedge + .dw BulletBillCannon + +TreeLedge: + jsr GetLrgObjAttrib ;get row and length of green ledge + lda AreaObjectLength,x ;check length counter for expiration + beq EndTreeL + bpl MidTreeL + tya + sta AreaObjectLength,x ;store lower nybble into buffer flag as length of ledge + lda CurrentPageLoc + ora CurrentColumnPos ;are we at the start of the level? + beq MidTreeL + lda #$16 ;render start of tree ledge + jmp NoUnder +MidTreeL: ldx $07 + lda #$17 ;render middle of tree ledge + sta MetatileBuffer,x ;note that this is also used if ledge position is + lda #$4c ;at the start of level for continuous effect + jmp AllUnder ;now render the part underneath +EndTreeL: lda #$18 ;render end of tree ledge + jmp NoUnder + +MushroomLedge: + jsr ChkLrgObjLength ;get shroom dimensions + sty $06 ;store length here for now + bcc EndMushL + lda AreaObjectLength,x ;divide length by 2 and store elsewhere + lsr + sta MushroomLedgeHalfLen,x + lda #$19 ;render start of mushroom + jmp NoUnder +EndMushL: lda #$1b ;if at the end, render end of mushroom + ldy AreaObjectLength,x + beq NoUnder + lda MushroomLedgeHalfLen,x ;get divided length and store where length + sta $06 ;was stored originally + ldx $07 + lda #$1a + sta MetatileBuffer,x ;render middle of mushroom + cpy $06 ;are we smack dab in the center? + bne MushLExit ;if not, branch to leave + inx + lda #$4f + sta MetatileBuffer,x ;render stem top of mushroom underneath the middle + lda #$50 +AllUnder: inx + ldy #$0f ;set $0f to render all way down + jmp RenderUnderPart ;now render the stem of mushroom +NoUnder: ldx $07 ;load row of ledge + ldy #$00 ;set 0 for no bottom on this part + jmp RenderUnderPart + +;-------------------------------- + +;tiles used by pulleys and rope object +PulleyRopeMetatiles: + .db $42, $41, $43 + +PulleyRopeObject: + jsr ChkLrgObjLength ;get length of pulley/rope object + ldy #$00 ;initialize metatile offset + bcs RenderPul ;if starting, render left pulley + iny + lda AreaObjectLength,x ;if not at the end, render rope + bne RenderPul + iny ;otherwise render right pulley +RenderPul: lda PulleyRopeMetatiles,y + sta MetatileBuffer ;render at the top of the screen +MushLExit: rts ;and leave + +;-------------------------------- +;$06 - used to store upper limit of rows for CastleObject + +CastleMetatiles: + .db $00, $45, $45, $45, $00 + .db $00, $48, $47, $46, $00 + .db $45, $49, $49, $49, $45 + .db $47, $47, $4a, $47, $47 + .db $47, $47, $4b, $47, $47 + .db $49, $49, $49, $49, $49 + .db $47, $4a, $47, $4a, $47 + .db $47, $4b, $47, $4b, $47 + .db $47, $47, $47, $47, $47 + .db $4a, $47, $4a, $47, $4a + .db $4b, $47, $4b, $47, $4b + +CastleObject: + jsr GetLrgObjAttrib ;save lower nybble as starting row + sty $07 ;if starting row is above $0a, game will crash!!! + ldy #$04 + jsr ChkLrgObjFixedLength ;load length of castle if not already loaded + txa + pha ;save obj buffer offset to stack + ldy AreaObjectLength,x ;use current length as offset for castle data + ldx $07 ;begin at starting row + lda #$0b + sta $06 ;load upper limit of number of rows to print +CRendLoop: lda CastleMetatiles,y ;load current byte using offset + sta MetatileBuffer,x + inx ;store in buffer and increment buffer offset + lda $06 + beq ChkCFloor ;have we reached upper limit yet? + iny ;if not, increment column-wise + iny ;to byte in next row + iny + iny + iny + dec $06 ;move closer to upper limit +ChkCFloor: cpx #$0b ;have we reached the row just before floor? + bne CRendLoop ;if not, go back and do another row + pla + tax ;get obj buffer offset from before + lda CurrentPageLoc + beq ExitCastle ;if we're at page 0, we do not need to do anything else + lda AreaObjectLength,x ;check length + cmp #$01 ;if length almost about to expire, put brick at floor + beq PlayerStop + ldy $07 ;check starting row for tall castle ($00) + bne NotTall + cmp #$03 ;if found, then check to see if we're at the second column + beq PlayerStop +NotTall: cmp #$02 ;if not tall castle, check to see if we're at the third column + bne ExitCastle ;if we aren't and the castle is tall, don't create flag yet + jsr GetAreaObjXPosition ;otherwise, obtain and save horizontal pixel coordinate + pha + jsr FindEmptyEnemySlot ;find an empty place on the enemy object buffer + pla + sta Enemy_X_Position,x ;then write horizontal coordinate for star flag + lda CurrentPageLoc + sta Enemy_PageLoc,x ;set page location for star flag + lda #$01 + sta Enemy_Y_HighPos,x ;set vertical high byte + sta Enemy_Flag,x ;set flag for buffer + lda #$90 + sta Enemy_Y_Position,x ;set vertical coordinate + lda #StarFlagObject ;set star flag value in buffer itself + sta Enemy_ID,x + rts +PlayerStop: ldy #$52 ;put brick at floor to stop player at end of level + sty MetatileBuffer+10 ;this is only done if we're on the second column +ExitCastle: rts + +;-------------------------------- + +WaterPipe: + jsr GetLrgObjAttrib ;get row and lower nybble + ldy AreaObjectLength,x ;get length (residual code, water pipe is 1 col thick) + ldx $07 ;get row + lda #$6b + sta MetatileBuffer,x ;draw something here and below it + lda #$6c + sta MetatileBuffer+1,x + rts + +;-------------------------------- +;$05 - used to store length of vertical shaft in RenderSidewaysPipe +;$06 - used to store leftover horizontal length in RenderSidewaysPipe +; and vertical length in VerticalPipe and GetPipeHeight + +IntroPipe: + ldy #$03 ;check if length set, if not set, set it + jsr ChkLrgObjFixedLength + ldy #$0a ;set fixed value and render the sideways part + jsr RenderSidewaysPipe + bcs NoBlankP ;if carry flag set, not time to draw vertical pipe part + ldx #$06 ;blank everything above the vertical pipe part +VPipeSectLoop: lda #$00 ;all the way to the top of the screen + sta MetatileBuffer,x ;because otherwise it will look like exit pipe + dex + bpl VPipeSectLoop + lda VerticalPipeData,y ;draw the end of the vertical pipe part + sta MetatileBuffer+7 +NoBlankP: rts + +SidePipeShaftData: + .db $15, $14 ;used to control whether or not vertical pipe shaft + .db $00, $00 ;is drawn, and if so, controls the metatile number +SidePipeTopPart: + .db $15, $1e ;top part of sideways part of pipe + .db $1d, $1c +SidePipeBottomPart: + .db $15, $21 ;bottom part of sideways part of pipe + .db $20, $1f + +ExitPipe: + ldy #$03 ;check if length set, if not set, set it + jsr ChkLrgObjFixedLength + jsr GetLrgObjAttrib ;get vertical length, then plow on through RenderSidewaysPipe + +RenderSidewaysPipe: + dey ;decrement twice to make room for shaft at bottom + dey ;and store here for now as vertical length + sty $05 + ldy AreaObjectLength,x ;get length left over and store here + sty $06 + ldx $05 ;get vertical length plus one, use as buffer offset + inx + lda SidePipeShaftData,y ;check for value $00 based on horizontal offset + cmp #$00 + beq DrawSidePart ;if found, do not draw the vertical pipe shaft + ldx #$00 + ldy $05 ;init buffer offset and get vertical length + jsr RenderUnderPart ;and render vertical shaft using tile number in A + clc ;clear carry flag to be used by IntroPipe +DrawSidePart: ldy $06 ;render side pipe part at the bottom + lda SidePipeTopPart,y + sta MetatileBuffer,x ;note that the pipe parts are stored + lda SidePipeBottomPart,y ;backwards horizontally + sta MetatileBuffer+1,x + rts + +VerticalPipeData: + .db $11, $10 ;used by pipes that lead somewhere + .db $15, $14 + .db $13, $12 ;used by decoration pipes + .db $15, $14 + +VerticalPipe: + jsr GetPipeHeight + lda $00 ;check to see if value was nullified earlier + beq WarpPipe ;(if d3, the usage control bit of second byte, was set) + iny + iny + iny + iny ;add four if usage control bit was not set +WarpPipe: tya ;save value in stack + pha + lda AreaNumber + ora WorldNumber ;if at world 1-1, do not add piranha plant ever + beq DrawPipe + ldy AreaObjectLength,x ;if on second column of pipe, branch + beq DrawPipe ;(because we only need to do this once) + jsr FindEmptyEnemySlot ;check for an empty moving data buffer space + bcs DrawPipe ;if not found, too many enemies, thus skip + jsr GetAreaObjXPosition ;get horizontal pixel coordinate + clc + adc #$08 ;add eight to put the piranha plant in the center + sta Enemy_X_Position,x ;store as enemy's horizontal coordinate + lda CurrentPageLoc ;add carry to current page number + adc #$00 + sta Enemy_PageLoc,x ;store as enemy's page coordinate + lda #$01 + sta Enemy_Y_HighPos,x + sta Enemy_Flag,x ;activate enemy flag + jsr GetAreaObjYPosition ;get piranha plant's vertical coordinate and store here + sta Enemy_Y_Position,x + lda #PiranhaPlant ;write piranha plant's value into buffer + sta Enemy_ID,x + jsr InitPiranhaPlant +DrawPipe: pla ;get value saved earlier and use as Y + tay + ldx $07 ;get buffer offset + lda VerticalPipeData,y ;draw the appropriate pipe with the Y we loaded earlier + sta MetatileBuffer,x ;render the top of the pipe + inx + lda VerticalPipeData+2,y ;render the rest of the pipe + ldy $06 ;subtract one from length and render the part underneath + dey + jmp RenderUnderPart + +GetPipeHeight: + ldy #$01 ;check for length loaded, if not, load + jsr ChkLrgObjFixedLength ;pipe length of 2 (horizontal) + jsr GetLrgObjAttrib + tya ;get saved lower nybble as height + and #$07 ;save only the three lower bits as + sta $06 ;vertical length, then load Y with + ldy AreaObjectLength,x ;length left over + rts + +FindEmptyEnemySlot: + ldx #$00 ;start at first enemy slot +EmptyChkLoop: clc ;clear carry flag by default + lda Enemy_Flag,x ;check enemy buffer for nonzero + beq ExitEmptyChk ;if zero, leave + inx + cpx #$05 ;if nonzero, check next value + bne EmptyChkLoop +ExitEmptyChk: rts ;if all values nonzero, carry flag is set + +;-------------------------------- + +Hole_Water: + jsr ChkLrgObjLength ;get low nybble and save as length + lda #$86 ;render waves + sta MetatileBuffer+10 + ldx #$0b + ldy #$01 ;now render the water underneath + lda #$87 + jmp RenderUnderPart + +;-------------------------------- + +QuestionBlockRow_High: + lda #$03 ;start on the fourth row + .db $2c ;BIT instruction opcode + +QuestionBlockRow_Low: + lda #$07 ;start on the eighth row + pha ;save whatever row to the stack for now + jsr ChkLrgObjLength ;get low nybble and save as length + pla + tax ;render question boxes with coins + lda #$c0 + sta MetatileBuffer,x + rts + +;-------------------------------- + +Bridge_High: + lda #$06 ;start on the seventh row from top of screen + .db $2c ;BIT instruction opcode + +Bridge_Middle: + lda #$07 ;start on the eighth row + .db $2c ;BIT instruction opcode + +Bridge_Low: + lda #$09 ;start on the tenth row + pha ;save whatever row to the stack for now + jsr ChkLrgObjLength ;get low nybble and save as length + pla + tax ;render bridge railing + lda #$0b + sta MetatileBuffer,x + inx + ldy #$00 ;now render the bridge itself + lda #$63 + jmp RenderUnderPart + +;-------------------------------- + +FlagBalls_Residual: + jsr GetLrgObjAttrib ;get low nybble from object byte + ldx #$02 ;render flag balls on third row from top + lda #$6d ;of screen downwards based on low nybble + jmp RenderUnderPart + +;-------------------------------- + +FlagpoleObject: + lda #$24 ;render flagpole ball on top + sta MetatileBuffer + ldx #$01 ;now render the flagpole shaft + ldy #$08 + lda #$25 + jsr RenderUnderPart + lda #$61 ;render solid block at the bottom + sta MetatileBuffer+10 + jsr GetAreaObjXPosition + sec ;get pixel coordinate of where the flagpole is, + sbc #$08 ;subtract eight pixels and use as horizontal + sta Enemy_X_Position+5 ;coordinate for the flag + lda CurrentPageLoc + sbc #$00 ;subtract borrow from page location and use as + sta Enemy_PageLoc+5 ;page location for the flag + lda #$30 + sta Enemy_Y_Position+5 ;set vertical coordinate for flag + lda #$b0 + sta FlagpoleFNum_Y_Pos ;set initial vertical coordinate for flagpole's floatey number + lda #FlagpoleFlagObject + sta Enemy_ID+5 ;set flag identifier, note that identifier and coordinates + inc Enemy_Flag+5 ;use last space in enemy object buffer + rts + +;-------------------------------- + +EndlessRope: + ldx #$00 ;render rope from the top to the bottom of screen + ldy #$0f + jmp DrawRope + +BalancePlatRope: + txa ;save object buffer offset for now + pha + ldx #$01 ;blank out all from second row to the bottom + ldy #$0f ;with blank used for balance platform rope + lda #$44 + jsr RenderUnderPart + pla ;get back object buffer offset + tax + jsr GetLrgObjAttrib ;get vertical length from lower nybble + ldx #$01 +DrawRope: lda #$40 ;render the actual rope + jmp RenderUnderPart + +;-------------------------------- + +CoinMetatileData: + .db $c3, $c2, $c2, $c2 + +RowOfCoins: + ldy AreaType ;get area type + lda CoinMetatileData,y ;load appropriate coin metatile + jmp GetRow + +;-------------------------------- + +C_ObjectRow: + .db $06, $07, $08 + +C_ObjectMetatile: + .db $c5, $0c, $89 + +CastleBridgeObj: + ldy #$0c ;load length of 13 columns + jsr ChkLrgObjFixedLength + jmp ChainObj + +AxeObj: + lda #$08 ;load bowser's palette into sprite portion of palette + sta VRAM_Buffer_AddrCtrl + +ChainObj: + ldy $00 ;get value loaded earlier from decoder + ldx C_ObjectRow-2,y ;get appropriate row and metatile for object + lda C_ObjectMetatile-2,y + jmp ColObj + +EmptyBlock: + jsr GetLrgObjAttrib ;get row location + ldx $07 + lda #$c4 +ColObj: ldy #$00 ;column length of 1 + jmp RenderUnderPart + +;-------------------------------- + +SolidBlockMetatiles: + .db $69, $61, $61, $62 + +BrickMetatiles: + .db $22, $51, $52, $52 + .db $88 ;used only by row of bricks object + +RowOfBricks: + ldy AreaType ;load area type obtained from area offset pointer + lda CloudTypeOverride ;check for cloud type override + beq DrawBricks + ldy #$04 ;if cloud type, override area type +DrawBricks: lda BrickMetatiles,y ;get appropriate metatile + jmp GetRow ;and go render it + +RowOfSolidBlocks: + ldy AreaType ;load area type obtained from area offset pointer + lda SolidBlockMetatiles,y ;get metatile +GetRow: pha ;store metatile here + jsr ChkLrgObjLength ;get row number, load length +DrawRow: ldx $07 + ldy #$00 ;set vertical height of 1 + pla + jmp RenderUnderPart ;render object + +ColumnOfBricks: + ldy AreaType ;load area type obtained from area offset + lda BrickMetatiles,y ;get metatile (no cloud override as for row) + jmp GetRow2 + +ColumnOfSolidBlocks: + ldy AreaType ;load area type obtained from area offset + lda SolidBlockMetatiles,y ;get metatile +GetRow2: pha ;save metatile to stack for now + jsr GetLrgObjAttrib ;get length and row + pla ;restore metatile + ldx $07 ;get starting row + jmp RenderUnderPart ;now render the column + +;-------------------------------- + +BulletBillCannon: + jsr GetLrgObjAttrib ;get row and length of bullet bill cannon + ldx $07 ;start at first row + lda #$64 ;render bullet bill cannon + sta MetatileBuffer,x + inx + dey ;done yet? + bmi SetupCannon + lda #$65 ;if not, render middle part + sta MetatileBuffer,x + inx + dey ;done yet? + bmi SetupCannon + lda #$66 ;if not, render bottom until length expires + jsr RenderUnderPart +SetupCannon: ldx Cannon_Offset ;get offset for data used by cannons and whirlpools + jsr GetAreaObjYPosition ;get proper vertical coordinate for cannon + sta Cannon_Y_Position,x ;and store it here + lda CurrentPageLoc + sta Cannon_PageLoc,x ;store page number for cannon here + jsr GetAreaObjXPosition ;get proper horizontal coordinate for cannon + sta Cannon_X_Position,x ;and store it here + inx + cpx #$06 ;increment and check offset + bcc StrCOffset ;if not yet reached sixth cannon, branch to save offset + ldx #$00 ;otherwise initialize it +StrCOffset: stx Cannon_Offset ;save new offset and leave + rts + +;-------------------------------- + +StaircaseHeightData: + .db $07, $07, $06, $05, $04, $03, $02, $01, $00 + +StaircaseRowData: + .db $03, $03, $04, $05, $06, $07, $08, $09, $0a + +StaircaseObject: + jsr ChkLrgObjLength ;check and load length + bcc NextStair ;if length already loaded, skip init part + lda #$09 ;start past the end for the bottom + sta StaircaseControl ;of the staircase +NextStair: dec StaircaseControl ;move onto next step (or first if starting) + ldy StaircaseControl + ldx StaircaseRowData,y ;get starting row and height to render + lda StaircaseHeightData,y + tay + lda #$61 ;now render solid block staircase + jmp RenderUnderPart + +;-------------------------------- + +Jumpspring: + jsr GetLrgObjAttrib + jsr FindEmptyEnemySlot ;find empty space in enemy object buffer + jsr GetAreaObjXPosition ;get horizontal coordinate for jumpspring + sta Enemy_X_Position,x ;and store + lda CurrentPageLoc ;store page location of jumpspring + sta Enemy_PageLoc,x + jsr GetAreaObjYPosition ;get vertical coordinate for jumpspring + sta Enemy_Y_Position,x ;and store + sta Jumpspring_FixedYPos,x ;store as permanent coordinate here + lda #JumpspringObject + sta Enemy_ID,x ;write jumpspring object to enemy object buffer + ldy #$01 + sty Enemy_Y_HighPos,x ;store vertical high byte + inc Enemy_Flag,x ;set flag for enemy object buffer + ldx $07 + lda #$67 ;draw metatiles in two rows where jumpspring is + sta MetatileBuffer,x + lda #$68 + sta MetatileBuffer+1,x + rts + +;-------------------------------- +;$07 - used to save ID of brick object + +Hidden1UpBlock: + lda Hidden1UpFlag ;if flag not set, do not render object + beq ExitDecBlock + lda #$00 ;if set, init for the next one + sta Hidden1UpFlag + jmp BrickWithItem ;jump to code shared with unbreakable bricks + +QuestionBlock: + jsr GetAreaObjectID ;get value from level decoder routine + jmp DrawQBlk ;go to render it + +BrickWithCoins: + lda #$00 ;initialize multi-coin timer flag + sta BrickCoinTimerFlag + +BrickWithItem: + jsr GetAreaObjectID ;save area object ID + sty $07 + lda #$00 ;load default adder for bricks with lines + ldy AreaType ;check level type for ground level + dey + beq BWithL ;if ground type, do not start with 5 + lda #$05 ;otherwise use adder for bricks without lines +BWithL: clc ;add object ID to adder + adc $07 + tay ;use as offset for metatile +DrawQBlk: lda BrickQBlockMetatiles,y ;get appropriate metatile for brick (question block + pha ;if branched to here from question block routine) + jsr GetLrgObjAttrib ;get row from location byte + jmp DrawRow ;now render the object + +GetAreaObjectID: + lda $00 ;get value saved from area parser routine + sec + sbc #$00 ;possibly residual code + tay ;save to Y +ExitDecBlock: rts + +;-------------------------------- + +HoleMetatiles: + .db $87, $00, $00, $00 + +Hole_Empty: + jsr ChkLrgObjLength ;get lower nybble and save as length + bcc NoWhirlP ;skip this part if length already loaded + lda AreaType ;check for water type level + bne NoWhirlP ;if not water type, skip this part + ldx Whirlpool_Offset ;get offset for data used by cannons and whirlpools + jsr GetAreaObjXPosition ;get proper vertical coordinate of where we're at + sec + sbc #$10 ;subtract 16 pixels + sta Whirlpool_LeftExtent,x ;store as left extent of whirlpool + lda CurrentPageLoc ;get page location of where we're at + sbc #$00 ;subtract borrow + sta Whirlpool_PageLoc,x ;save as page location of whirlpool + iny + iny ;increment length by 2 + tya + asl ;multiply by 16 to get size of whirlpool + asl ;note that whirlpool will always be + asl ;two blocks bigger than actual size of hole + asl ;and extend one block beyond each edge + sta Whirlpool_Length,x ;save size of whirlpool here + inx + cpx #$05 ;increment and check offset + bcc StrWOffset ;if not yet reached fifth whirlpool, branch to save offset + ldx #$00 ;otherwise initialize it +StrWOffset: stx Whirlpool_Offset ;save new offset here +NoWhirlP: ldx AreaType ;get appropriate metatile, then + lda HoleMetatiles,x ;render the hole proper + ldx #$08 + ldy #$0f ;start at ninth row and go to bottom, run RenderUnderPart + +;-------------------------------- + +RenderUnderPart: + sty AreaObjectHeight ;store vertical length to render + ldy MetatileBuffer,x ;check current spot to see if there's something + beq DrawThisRow ;we need to keep, if nothing, go ahead + cpy #$17 + beq WaitOneRow ;if middle part (tree ledge), wait until next row + cpy #$1a + beq WaitOneRow ;if middle part (mushroom ledge), wait until next row + cpy #$c0 + beq DrawThisRow ;if question block w/ coin, overwrite + cpy #$c0 + bcs WaitOneRow ;if any other metatile with palette 3, wait until next row + cpy #$54 + bne DrawThisRow ;if cracked rock terrain, overwrite + cmp #$50 + beq WaitOneRow ;if stem top of mushroom, wait until next row +DrawThisRow: sta MetatileBuffer,x ;render contents of A from routine that called this +WaitOneRow: inx + cpx #$0d ;stop rendering if we're at the bottom of the screen + bcs ExitUPartR + ldy AreaObjectHeight ;decrement, and stop rendering if there is no more length + dey + bpl RenderUnderPart +ExitUPartR: rts + +;-------------------------------- + +ChkLrgObjLength: + jsr GetLrgObjAttrib ;get row location and size (length if branched to from here) + +ChkLrgObjFixedLength: + lda AreaObjectLength,x ;check for set length counter + clc ;clear carry flag for not just starting + bpl LenSet ;if counter not set, load it, otherwise leave alone + tya ;save length into length counter + sta AreaObjectLength,x + sec ;set carry flag if just starting +LenSet: rts + + +GetLrgObjAttrib: + ldy AreaObjOffsetBuffer,x ;get offset saved from area obj decoding routine + lda (AreaData),y ;get first byte of level object + and #%00001111 + sta $07 ;save row location + iny + lda (AreaData),y ;get next byte, save lower nybble (length or height) + and #%00001111 ;as Y, then leave + tay + rts + +;-------------------------------- + +GetAreaObjXPosition: + lda CurrentColumnPos ;multiply current offset where we're at by 16 + asl ;to obtain horizontal pixel coordinate + asl + asl + asl + rts + +;-------------------------------- + +GetAreaObjYPosition: + lda $07 ;multiply value by 16 + asl + asl ;this will give us the proper vertical pixel coordinate + asl + asl + clc + adc #32 ;add 32 pixels for the status bar + rts + +;------------------------------------------------------------------------------------- +;$06-$07 - used to store block buffer address used as indirect + +BlockBufferAddr: + .db Block_Buffer_1, >Block_Buffer_2 + +GetBlockBufferAddr: + pha ;take value of A, save + lsr ;move high nybble to low + lsr + lsr + lsr + tay ;use nybble as pointer to high byte + lda BlockBufferAddr+2,y ;of indirect here + sta $07 + pla + and #%00001111 ;pull from stack, mask out high nybble + clc + adc BlockBufferAddr,y ;add to low byte + sta $06 ;store here and leave + rts + +;------------------------------------------------------------------------------------- + +;unused space + .db $ff, $ff + +;------------------------------------------------------------------------------------- + +AreaDataOfsLoopback: + .db $12, $36, $0e, $0e, $0e, $32, $32, $32, $0a, $26, $40 + +;------------------------------------------------------------------------------------- + +LoadAreaPointer: + jsr FindAreaPointer ;find it and store it here + sta AreaPointer +GetAreaType: and #%01100000 ;mask out all but d6 and d5 + asl + rol + rol + rol ;make %0xx00000 into %000000xx + sta AreaType ;save 2 MSB as area type + rts + +FindAreaPointer: + ldy WorldNumber ;load offset from world variable + lda WorldAddrOffsets,y + clc ;add area number used to find data + adc AreaNumber + tay + lda AreaAddrOffsets,y ;from there we have our area pointer + rts + + +GetAreaDataAddrs: + lda AreaPointer ;use 2 MSB for Y + jsr GetAreaType + tay + lda AreaPointer ;mask out all but 5 LSB + and #%00011111 + sta AreaAddrsLOffset ;save as low offset + lda EnemyAddrHOffsets,y ;load base value with 2 altered MSB, + clc ;then add base value to 5 LSB, result + adc AreaAddrsLOffset ;becomes offset for level data + tay + lda EnemyDataAddrLow,y ;use offset to load pointer + sta EnemyDataLow + lda EnemyDataAddrHigh,y + sta EnemyDataHigh + ldy AreaType ;use area type as offset + lda AreaDataHOffsets,y ;do the same thing but with different base value + clc + adc AreaAddrsLOffset + tay + lda AreaDataAddrLow,y ;use this offset to load another pointer + sta AreaDataLow + lda AreaDataAddrHigh,y + sta AreaDataHigh + ldy #$00 ;load first byte of header + lda (AreaData),y + pha ;save it to the stack for now + and #%00000111 ;save 3 LSB for foreground scenery or bg color control + cmp #$04 + bcc StoreFore + sta BackgroundColorCtrl ;if 4 or greater, save value here as bg color control + lda #$00 +StoreFore: sta ForegroundScenery ;if less, save value here as foreground scenery + pla ;pull byte from stack and push it back + pha + and #%00111000 ;save player entrance control bits + lsr ;shift bits over to LSBs + lsr + lsr + sta PlayerEntranceCtrl ;save value here as player entrance control + pla ;pull byte again but do not push it back + and #%11000000 ;save 2 MSB for game timer setting + clc + rol ;rotate bits over to LSBs + rol + rol + sta GameTimerSetting ;save value here as game timer setting + iny + lda (AreaData),y ;load second byte of header + pha ;save to stack + and #%00001111 ;mask out all but lower nybble + sta TerrainControl + pla ;pull and push byte to copy it to A + pha + and #%00110000 ;save 2 MSB for background scenery type + lsr + lsr ;shift bits to LSBs + lsr + lsr + sta BackgroundScenery ;save as background scenery + pla + and #%11000000 + clc + rol ;rotate bits over to LSBs + rol + rol + cmp #%00000011 ;if set to 3, store here + bne StoreStyle ;and nullify other value + sta CloudTypeOverride ;otherwise store value in other place + lda #$00 +StoreStyle: sta AreaStyle + lda AreaDataLow ;increment area data address by 2 bytes + clc + adc #$02 + sta AreaDataLow + lda AreaDataHigh + adc #$00 + sta AreaDataHigh + rts + +;------------------------------------------------------------------------------------- +;GAME LEVELS DATA + +WorldAddrOffsets: + .db World1Areas-AreaAddrOffsets, World2Areas-AreaAddrOffsets + .db World3Areas-AreaAddrOffsets, World4Areas-AreaAddrOffsets + .db World5Areas-AreaAddrOffsets, World6Areas-AreaAddrOffsets + .db World7Areas-AreaAddrOffsets, World8Areas-AreaAddrOffsets + +AreaAddrOffsets: +World1Areas: .db $25, $29, $c0, $26, $60 +World2Areas: .db $28, $29, $01, $27, $62 +World3Areas: .db $24, $35, $20, $63 +World4Areas: .db $22, $29, $41, $2c, $61 +World5Areas: .db $2a, $31, $26, $62 +World6Areas: .db $2e, $23, $2d, $60 +World7Areas: .db $33, $29, $01, $27, $64 +World8Areas: .db $30, $32, $21, $65 + +;bonus area data offsets, included here for comparison purposes +;underground bonus area - c2 +;cloud area 1 (day) - 2b +;cloud area 2 (night) - 34 +;water area (5-2/6-2) - 00 +;water area (8-4) - 02 +;warp zone area (4-2) - 2f + +EnemyAddrHOffsets: + .db $1f, $06, $1c, $00 + +EnemyDataAddrLow: + .db E_CastleArea1, >E_CastleArea2, >E_CastleArea3, >E_CastleArea4, >E_CastleArea5, >E_CastleArea6 + .db >E_GroundArea1, >E_GroundArea2, >E_GroundArea3, >E_GroundArea4, >E_GroundArea5, >E_GroundArea6 + .db >E_GroundArea7, >E_GroundArea8, >E_GroundArea9, >E_GroundArea10, >E_GroundArea11, >E_GroundArea12 + .db >E_GroundArea13, >E_GroundArea14, >E_GroundArea15, >E_GroundArea16, >E_GroundArea17, >E_GroundArea18 + .db >E_GroundArea19, >E_GroundArea20, >E_GroundArea21, >E_GroundArea22, >E_UndergroundArea1 + .db >E_UndergroundArea2, >E_UndergroundArea3, >E_WaterArea1, >E_WaterArea2, >E_WaterArea3 + +AreaDataHOffsets: + .db $00, $03, $19, $1c + +AreaDataAddrLow: + .db L_WaterArea1, >L_WaterArea2, >L_WaterArea3, >L_GroundArea1, >L_GroundArea2, >L_GroundArea3 + .db >L_GroundArea4, >L_GroundArea5, >L_GroundArea6, >L_GroundArea7, >L_GroundArea8, >L_GroundArea9 + .db >L_GroundArea10, >L_GroundArea11, >L_GroundArea12, >L_GroundArea13, >L_GroundArea14, >L_GroundArea15 + .db >L_GroundArea16, >L_GroundArea17, >L_GroundArea18, >L_GroundArea19, >L_GroundArea20, >L_GroundArea21 + .db >L_GroundArea22, >L_UndergroundArea1, >L_UndergroundArea2, >L_UndergroundArea3, >L_CastleArea1 + .db >L_CastleArea2, >L_CastleArea3, >L_CastleArea4, >L_CastleArea5, >L_CastleArea6 + +;ENEMY OBJECT DATA + +;level 1-4/6-4 +E_CastleArea1: + .db $76, $dd, $bb, $4c, $ea, $1d, $1b, $cc, $56, $5d + .db $16, $9d, $c6, $1d, $36, $9d, $c9, $1d, $04, $db + .db $49, $1d, $84, $1b, $c9, $5d, $88, $95, $0f, $08 + .db $30, $4c, $78, $2d, $a6, $28, $90, $b5 + .db $ff + +;level 4-4 +E_CastleArea2: + .db $0f, $03, $56, $1b, $c9, $1b, $0f, $07, $36, $1b + .db $aa, $1b, $48, $95, $0f, $0a, $2a, $1b, $5b, $0c + .db $78, $2d, $90, $b5 + .db $ff + +;level 2-4/5-4 +E_CastleArea3: + .db $0b, $8c, $4b, $4c, $77, $5f, $eb, $0c, $bd, $db + .db $19, $9d, $75, $1d, $7d, $5b, $d9, $1d, $3d, $dd + .db $99, $1d, $26, $9d, $5a, $2b, $8a, $2c, $ca, $1b + .db $20, $95, $7b, $5c, $db, $4c, $1b, $cc, $3b, $cc + .db $78, $2d, $a6, $28, $90, $b5 + .db $ff + +;level 3-4 +E_CastleArea4: + .db $0b, $8c, $3b, $1d, $8b, $1d, $ab, $0c, $db, $1d + .db $0f, $03, $65, $1d, $6b, $1b, $05, $9d, $0b, $1b + .db $05, $9b, $0b, $1d, $8b, $0c, $1b, $8c, $70, $15 + .db $7b, $0c, $db, $0c, $0f, $08, $78, $2d, $a6, $28 + .db $90, $b5 + .db $ff + +;level 7-4 +E_CastleArea5: + .db $27, $a9, $4b, $0c, $68, $29, $0f, $06, $77, $1b + .db $0f, $0b, $60, $15, $4b, $8c, $78, $2d, $90, $b5 + .db $ff + +;level 8-4 +E_CastleArea6: + .db $0f, $03, $8e, $65, $e1, $bb, $38, $6d, $a8, $3e, $e5, $e7 + .db $0f, $08, $0b, $02, $2b, $02, $5e, $65, $e1, $bb, $0e + .db $db, $0e, $bb, $8e, $db, $0e, $fe, $65, $ec, $0f, $0d + .db $4e, $65, $e1, $0f, $0e, $4e, $02, $e0, $0f, $10, $fe, $e5, $e1 + .db $1b, $85, $7b, $0c, $5b, $95, $78, $2d, $90, $b5 + .db $ff + +;level 3-3 +E_GroundArea1: + .db $a5, $86, $e4, $28, $18, $a8, $45, $83, $69, $03 + .db $c6, $29, $9b, $83, $16, $a4, $88, $24, $e9, $28 + .db $05, $a8, $7b, $28, $24, $8f, $c8, $03, $e8, $03 + .db $46, $a8, $85, $24, $c8, $24 + .db $ff + +;level 8-3 +E_GroundArea2: + .db $eb, $8e, $0f, $03, $fb, $05, $17, $85, $db, $8e + .db $0f, $07, $57, $05, $7b, $05, $9b, $80, $2b, $85 + .db $fb, $05, $0f, $0b, $1b, $05, $9b, $05 + .db $ff + +;level 4-1 +E_GroundArea3: + .db $2e, $c2, $66, $e2, $11, $0f, $07, $02, $11, $0f, $0c + .db $12, $11 + .db $ff + +;level 6-2 +E_GroundArea4: + .db $0e, $c2, $a8, $ab, $00, $bb, $8e, $6b, $82, $de, $00, $a0 + .db $33, $86, $43, $06, $3e, $b4, $a0, $cb, $02, $0f, $07 + .db $7e, $42, $a6, $83, $02, $0f, $0a, $3b, $02, $cb, $37 + .db $0f, $0c, $e3, $0e + .db $ff + +;level 3-1 +E_GroundArea5: + .db $9b, $8e, $ca, $0e, $ee, $42, $44, $5b, $86, $80, $b8 + .db $1b, $80, $50, $ba, $10, $b7, $5b, $00, $17, $85 + .db $4b, $05, $fe, $34, $40, $b7, $86, $c6, $06, $5b, $80 + .db $83, $00, $d0, $38, $5b, $8e, $8a, $0e, $a6, $00 + .db $bb, $0e, $c5, $80, $f3, $00 + .db $ff + +;level 1-1 +E_GroundArea6: + .db $1e, $c2, $00, $6b, $06, $8b, $86, $63, $b7, $0f, $05 + .db $03, $06, $23, $06, $4b, $b7, $bb, $00, $5b, $b7 + .db $fb, $37, $3b, $b7, $0f, $0b, $1b, $37 + .db $ff + +;level 1-3/5-3 +E_GroundArea7: + .db $2b, $d7, $e3, $03, $c2, $86, $e2, $06, $76, $a5 + .db $a3, $8f, $03, $86, $2b, $57, $68, $28, $e9, $28 + .db $e5, $83, $24, $8f, $36, $a8, $5b, $03 + .db $ff + +;level 2-3/7-3 +E_GroundArea8: + .db $0f, $02, $78, $40, $48, $ce, $f8, $c3, $f8, $c3 + .db $0f, $07, $7b, $43, $c6, $d0, $0f, $8a, $c8, $50 + .db $ff + +;level 2-1 +E_GroundArea9: + .db $85, $86, $0b, $80, $1b, $00, $db, $37, $77, $80 + .db $eb, $37, $fe, $2b, $20, $2b, $80, $7b, $38, $ab, $b8 + .db $77, $86, $fe, $42, $20, $49, $86, $8b, $06, $9b, $80 + .db $7b, $8e, $5b, $b7, $9b, $0e, $bb, $0e, $9b, $80 +;end of data terminator here is also used by pipe intro area +E_GroundArea10: + .db $ff + +;level 5-1 +E_GroundArea11: + .db $0b, $80, $60, $38, $10, $b8, $c0, $3b, $db, $8e + .db $40, $b8, $f0, $38, $7b, $8e, $a0, $b8, $c0, $b8 + .db $fb, $00, $a0, $b8, $30, $bb, $ee, $42, $88, $0f, $0b + .db $2b, $0e, $67, $0e + .db $ff + +;cloud level used in levels 2-1 and 5-2 +E_GroundArea12: + .db $0a, $aa, $0e, $28, $2a, $0e, $31, $88 + .db $ff + +;level 4-3 +E_GroundArea13: + .db $c7, $83, $d7, $03, $42, $8f, $7a, $03, $05, $a4 + .db $78, $24, $a6, $25, $e4, $25, $4b, $83, $e3, $03 + .db $05, $a4, $89, $24, $b5, $24, $09, $a4, $65, $24 + .db $c9, $24, $0f, $08, $85, $25 + .db $ff + +;level 6-3 +E_GroundArea14: + .db $cd, $a5, $b5, $a8, $07, $a8, $76, $28, $cc, $25 + .db $65, $a4, $a9, $24, $e5, $24, $19, $a4, $0f, $07 + .db $95, $28, $e6, $24, $19, $a4, $d7, $29, $16, $a9 + .db $58, $29, $97, $29 + .db $ff + +;level 6-1 +E_GroundArea15: + .db $0f, $02, $02, $11, $0f, $07, $02, $11 + .db $ff + +;warp zone area used in level 4-2 +E_GroundArea16: + .db $ff + +;level 8-1 +E_GroundArea17: + .db $2b, $82, $ab, $38, $de, $42, $e2, $1b, $b8, $eb + .db $3b, $db, $80, $8b, $b8, $1b, $82, $fb, $b8, $7b + .db $80, $fb, $3c, $5b, $bc, $7b, $b8, $1b, $8e, $cb + .db $0e, $1b, $8e, $0f, $0d, $2b, $3b, $bb, $b8, $eb, $82 + .db $4b, $b8, $bb, $38, $3b, $b7, $bb, $02, $0f, $13 + .db $1b, $00, $cb, $80, $6b, $bc + .db $ff + +;level 5-2 +E_GroundArea18: + .db $7b, $80, $ae, $00, $80, $8b, $8e, $e8, $05, $f9, $86 + .db $17, $86, $16, $85, $4e, $2b, $80, $ab, $8e, $87, $85 + .db $c3, $05, $8b, $82, $9b, $02, $ab, $02, $bb, $86 + .db $cb, $06, $d3, $03, $3b, $8e, $6b, $0e, $a7, $8e + .db $ff + +;level 8-2 +E_GroundArea19: + .db $29, $8e, $52, $11, $83, $0e, $0f, $03, $9b, $0e + .db $2b, $8e, $5b, $0e, $cb, $8e, $fb, $0e, $fb, $82 + .db $9b, $82, $bb, $02, $fe, $42, $e8, $bb, $8e, $0f, $0a + .db $ab, $0e, $cb, $0e, $f9, $0e, $88, $86, $a6, $06 + .db $db, $02, $b6, $8e + .db $ff + +;level 7-1 +E_GroundArea20: + .db $ab, $ce, $de, $42, $c0, $cb, $ce, $5b, $8e, $1b, $ce + .db $4b, $85, $67, $45, $0f, $07, $2b, $00, $7b, $85 + .db $97, $05, $0f, $0a, $92, $02 + .db $ff + +;cloud level used in levels 3-1 and 6-2 +E_GroundArea21: + .db $0a, $aa, $0e, $24, $4a, $1e, $23, $aa + .db $ff + +;level 3-2 +E_GroundArea22: + .db $1b, $80, $bb, $38, $4b, $bc, $eb, $3b, $0f, $04 + .db $2b, $00, $ab, $38, $eb, $00, $cb, $8e, $fb, $80 + .db $ab, $b8, $6b, $80, $fb, $3c, $9b, $bb, $5b, $bc + .db $fb, $00, $6b, $b8, $fb, $38 + .db $ff + +;level 1-2 +E_UndergroundArea1: + .db $0b, $86, $1a, $06, $db, $06, $de, $c2, $02, $f0, $3b + .db $bb, $80, $eb, $06, $0b, $86, $93, $06, $f0, $39 + .db $0f, $06, $60, $b8, $1b, $86, $a0, $b9, $b7, $27 + .db $bd, $27, $2b, $83, $a1, $26, $a9, $26, $ee, $25, $0b + .db $27, $b4 + .db $ff + +;level 4-2 +E_UndergroundArea2: + .db $0f, $02, $1e, $2f, $60, $e0, $3a, $a5, $a7, $db, $80 + .db $3b, $82, $8b, $02, $fe, $42, $68, $70, $bb, $25, $a7 + .db $2c, $27, $b2, $26, $b9, $26, $9b, $80, $a8, $82 + .db $b5, $27, $bc, $27, $b0, $bb, $3b, $82, $87, $34 + .db $ee, $25, $6b + .db $ff + +;underground bonus rooms area used in many levels +E_UndergroundArea3: + .db $1e, $a5, $0a, $2e, $28, $27, $2e, $33, $c7, $0f, $03, $1e, $40, $07 + .db $2e, $30, $e7, $0f, $05, $1e, $24, $44, $0f, $07, $1e, $22, $6a + .db $2e, $23, $ab, $0f, $09, $1e, $41, $68, $1e, $2a, $8a, $2e, $23, $a2 + .db $2e, $32, $ea + .db $ff + +;water area used in levels 5-2 and 6-2 +E_WaterArea1: + .db $3b, $87, $66, $27, $cc, $27, $ee, $31, $87, $ee, $23, $a7 + .db $3b, $87, $db, $07 + .db $ff + +;level 2-2/7-2 +E_WaterArea2: + .db $0f, $01, $2e, $25, $2b, $2e, $25, $4b, $4e, $25, $cb, $6b, $07 + .db $97, $47, $e9, $87, $47, $c7, $7a, $07, $d6, $c7 + .db $78, $07, $38, $87, $ab, $47, $e3, $07, $9b, $87 + .db $0f, $09, $68, $47, $db, $c7, $3b, $c7 + .db $ff + +;water area used in level 8-4 +E_WaterArea3: + .db $47, $9b, $cb, $07, $fa, $1d, $86, $9b, $3a, $87 + .db $56, $07, $88, $1b, $07, $9d, $2e, $65, $f0 + .db $ff + +;AREA OBJECT DATA + +;level 1-4/6-4 +L_CastleArea1: + .db $9b, $07 + .db $05, $32, $06, $33, $07, $34, $ce, $03, $dc, $51 + .db $ee, $07, $73, $e0, $74, $0a, $7e, $06, $9e, $0a + .db $ce, $06, $e4, $00, $e8, $0a, $fe, $0a, $2e, $89 + .db $4e, $0b, $54, $0a, $14, $8a, $c4, $0a, $34, $8a + .db $7e, $06, $c7, $0a, $01, $e0, $02, $0a, $47, $0a + .db $81, $60, $82, $0a, $c7, $0a, $0e, $87, $7e, $02 + .db $a7, $02, $b3, $02, $d7, $02, $e3, $02, $07, $82 + .db $13, $02, $3e, $06, $7e, $02, $ae, $07, $fe, $0a + .db $0d, $c4, $cd, $43, $ce, $09, $de, $0b, $dd, $42 + .db $fe, $02, $5d, $c7 + .db $fd + +;level 4-4 +L_CastleArea2: + .db $5b, $07 + .db $05, $32, $06, $33, $07, $34, $5e, $0a, $68, $64 + .db $98, $64, $a8, $64, $ce, $06, $fe, $02, $0d, $01 + .db $1e, $0e, $7e, $02, $94, $63, $b4, $63, $d4, $63 + .db $f4, $63, $14, $e3, $2e, $0e, $5e, $02, $64, $35 + .db $88, $72, $be, $0e, $0d, $04, $ae, $02, $ce, $08 + .db $cd, $4b, $fe, $02, $0d, $05, $68, $31, $7e, $0a + .db $96, $31, $a9, $63, $a8, $33, $d5, $30, $ee, $02 + .db $e6, $62, $f4, $61, $04, $b1, $08, $3f, $44, $33 + .db $94, $63, $a4, $31, $e4, $31, $04, $bf, $08, $3f + .db $04, $bf, $08, $3f, $cd, $4b, $03, $e4, $0e, $03 + .db $2e, $01, $7e, $06, $be, $02, $de, $06, $fe, $0a + .db $0d, $c4, $cd, $43, $ce, $09, $de, $0b, $dd, $42 + .db $fe, $02, $5d, $c7 + .db $fd + +;level 2-4/5-4 +L_CastleArea3: + .db $9b, $07 + .db $05, $32, $06, $33, $07, $34, $fe, $00, $27, $b1 + .db $65, $32, $75, $0a, $71, $00, $b7, $31, $08, $e4 + .db $18, $64, $1e, $04, $57, $3b, $bb, $0a, $17, $8a + .db $27, $3a, $73, $0a, $7b, $0a, $d7, $0a, $e7, $3a + .db $3b, $8a, $97, $0a, $fe, $08, $24, $8a, $2e, $00 + .db $3e, $40, $38, $64, $6f, $00, $9f, $00, $be, $43 + .db $c8, $0a, $c9, $63, $ce, $07, $fe, $07, $2e, $81 + .db $66, $42, $6a, $42, $79, $0a, $be, $00, $c8, $64 + .db $f8, $64, $08, $e4, $2e, $07, $7e, $03, $9e, $07 + .db $be, $03, $de, $07, $fe, $0a, $03, $a5, $0d, $44 + .db $cd, $43, $ce, $09, $dd, $42, $de, $0b, $fe, $02 + .db $5d, $c7 + .db $fd + +;level 3-4 +L_CastleArea4: + .db $9b, $07 + .db $05, $32, $06, $33, $07, $34, $fe, $06, $0c, $81 + .db $39, $0a, $5c, $01, $89, $0a, $ac, $01, $d9, $0a + .db $fc, $01, $2e, $83, $a7, $01, $b7, $00, $c7, $01 + .db $de, $0a, $fe, $02, $4e, $83, $5a, $32, $63, $0a + .db $69, $0a, $7e, $02, $ee, $03, $fa, $32, $03, $8a + .db $09, $0a, $1e, $02, $ee, $03, $fa, $32, $03, $8a + .db $09, $0a, $14, $42, $1e, $02, $7e, $0a, $9e, $07 + .db $fe, $0a, $2e, $86, $5e, $0a, $8e, $06, $be, $0a + .db $ee, $07, $3e, $83, $5e, $07, $fe, $0a, $0d, $c4 + .db $41, $52, $51, $52, $cd, $43, $ce, $09, $de, $0b + .db $dd, $42, $fe, $02, $5d, $c7 + .db $fd + +;level 7-4 +L_CastleArea5: + .db $5b, $07 + .db $05, $32, $06, $33, $07, $34, $fe, $0a, $ae, $86 + .db $be, $07, $fe, $02, $0d, $02, $27, $32, $46, $61 + .db $55, $62, $5e, $0e, $1e, $82, $68, $3c, $74, $3a + .db $7d, $4b, $5e, $8e, $7d, $4b, $7e, $82, $84, $62 + .db $94, $61, $a4, $31, $bd, $4b, $ce, $06, $fe, $02 + .db $0d, $06, $34, $31, $3e, $0a, $64, $32, $75, $0a + .db $7b, $61, $a4, $33, $ae, $02, $de, $0e, $3e, $82 + .db $64, $32, $78, $32, $b4, $36, $c8, $36, $dd, $4b + .db $44, $b2, $58, $32, $94, $63, $a4, $3e, $ba, $30 + .db $c9, $61, $ce, $06, $dd, $4b, $ce, $86, $dd, $4b + .db $fe, $02, $2e, $86, $5e, $02, $7e, $06, $fe, $02 + .db $1e, $86, $3e, $02, $5e, $06, $7e, $02, $9e, $06 + .db $fe, $0a, $0d, $c4, $cd, $43, $ce, $09, $de, $0b + .db $dd, $42, $fe, $02, $5d, $c7 + .db $fd + +;level 8-4 +L_CastleArea6: + .db $5b, $06 + .db $05, $32, $06, $33, $07, $34, $5e, $0a, $ae, $02 + .db $0d, $01, $39, $73, $0d, $03, $39, $7b, $4d, $4b + .db $de, $06, $1e, $8a, $ae, $06, $c4, $33, $16, $fe + .db $a5, $77, $fe, $02, $fe, $82, $0d, $07, $39, $73 + .db $a8, $74, $ed, $4b, $49, $fb, $e8, $74, $fe, $0a + .db $2e, $82, $67, $02, $84, $7a, $87, $31, $0d, $0b + .db $fe, $02, $0d, $0c, $39, $73, $5e, $06, $c6, $76 + .db $45, $ff, $be, $0a, $dd, $48, $fe, $06, $3d, $cb + .db $46, $7e, $ad, $4a, $fe, $82, $39, $f3, $a9, $7b + .db $4e, $8a, $9e, $07, $fe, $0a, $0d, $c4, $cd, $43 + .db $ce, $09, $de, $0b, $dd, $42, $fe, $02, $5d, $c7 + .db $fd + +;level 3-3 +L_GroundArea1: + .db $94, $11 + .db $0f, $26, $fe, $10, $28, $94, $65, $15, $eb, $12 + .db $fa, $41, $4a, $96, $54, $40, $a4, $42, $b7, $13 + .db $e9, $19, $f5, $15, $11, $80, $47, $42, $71, $13 + .db $80, $41, $15, $92, $1b, $1f, $24, $40, $55, $12 + .db $64, $40, $95, $12, $a4, $40, $d2, $12, $e1, $40 + .db $13, $c0, $2c, $17, $2f, $12, $49, $13, $83, $40 + .db $9f, $14, $a3, $40, $17, $92, $83, $13, $92, $41 + .db $b9, $14, $c5, $12, $c8, $40, $d4, $40, $4b, $92 + .db $78, $1b, $9c, $94, $9f, $11, $df, $14, $fe, $11 + .db $7d, $c1, $9e, $42, $cf, $20 + .db $fd + +;level 8-3 +L_GroundArea2: + .db $90, $b1 + .db $0f, $26, $29, $91, $7e, $42, $fe, $40, $28, $92 + .db $4e, $42, $2e, $c0, $57, $73, $c3, $25, $c7, $27 + .db $23, $84, $33, $20, $5c, $01, $77, $63, $88, $62 + .db $99, $61, $aa, $60, $bc, $01, $ee, $42, $4e, $c0 + .db $69, $11, $7e, $42, $de, $40, $f8, $62, $0e, $c2 + .db $ae, $40, $d7, $63, $e7, $63, $33, $a7, $37, $27 + .db $43, $04, $cc, $01, $e7, $73, $0c, $81, $3e, $42 + .db $0d, $0a, $5e, $40, $88, $72, $be, $42, $e7, $87 + .db $fe, $40, $39, $e1, $4e, $00, $69, $60, $87, $60 + .db $a5, $60, $c3, $31, $fe, $31, $6d, $c1, $be, $42 + .db $ef, $20 + .db $fd + +;level 4-1 +L_GroundArea3: + .db $52, $21 + .db $0f, $20, $6e, $40, $58, $f2, $93, $01, $97, $00 + .db $0c, $81, $97, $40, $a6, $41, $c7, $40, $0d, $04 + .db $03, $01, $07, $01, $23, $01, $27, $01, $ec, $03 + .db $ac, $f3, $c3, $03, $78, $e2, $94, $43, $47, $f3 + .db $74, $43, $47, $fb, $74, $43, $2c, $f1, $4c, $63 + .db $47, $00, $57, $21, $5c, $01, $7c, $72, $39, $f1 + .db $ec, $02, $4c, $81, $d8, $62, $ec, $01, $0d, $0d + .db $0f, $38, $c7, $07, $ed, $4a, $1d, $c1, $5f, $26 + .db $fd + +;level 6-2 +L_GroundArea4: + .db $54, $21 + .db $0f, $26, $a7, $22, $37, $fb, $73, $20, $83, $07 + .db $87, $02, $93, $20, $c7, $73, $04, $f1, $06, $31 + .db $39, $71, $59, $71, $e7, $73, $37, $a0, $47, $04 + .db $86, $7c, $e5, $71, $e7, $31, $33, $a4, $39, $71 + .db $a9, $71, $d3, $23, $08, $f2, $13, $05, $27, $02 + .db $49, $71, $75, $75, $e8, $72, $67, $f3, $99, $71 + .db $e7, $20, $f4, $72, $f7, $31, $17, $a0, $33, $20 + .db $39, $71, $73, $28, $bc, $05, $39, $f1, $79, $71 + .db $a6, $21, $c3, $06, $d3, $20, $dc, $00, $fc, $00 + .db $07, $a2, $13, $21, $5f, $32, $8c, $00, $98, $7a + .db $c7, $63, $d9, $61, $03, $a2, $07, $22, $74, $72 + .db $77, $31, $e7, $73, $39, $f1, $58, $72, $77, $73 + .db $d8, $72, $7f, $b1, $97, $73, $b6, $64, $c5, $65 + .db $d4, $66, $e3, $67, $f3, $67, $8d, $c1, $cf, $26 + .db $fd + +;level 3-1 +L_GroundArea5: + .db $52, $31 + .db $0f, $20, $6e, $66, $07, $81, $36, $01, $66, $00 + .db $a7, $22, $08, $f2, $67, $7b, $dc, $02, $98, $f2 + .db $d7, $20, $39, $f1, $9f, $33, $dc, $27, $dc, $57 + .db $23, $83, $57, $63, $6c, $51, $87, $63, $99, $61 + .db $a3, $06, $b3, $21, $77, $f3, $f3, $21, $f7, $2a + .db $13, $81, $23, $22, $53, $00, $63, $22, $e9, $0b + .db $0c, $83, $13, $21, $16, $22, $33, $05, $8f, $35 + .db $ec, $01, $63, $a0, $67, $20, $73, $01, $77, $01 + .db $83, $20, $87, $20, $b3, $20, $b7, $20, $c3, $01 + .db $c7, $00, $d3, $20, $d7, $20, $67, $a0, $77, $07 + .db $87, $22, $e8, $62, $f5, $65, $1c, $82, $7f, $38 + .db $8d, $c1, $cf, $26 + .db $fd + +;level 1-1 +L_GroundArea6: + .db $50, $21 + .db $07, $81, $47, $24, $57, $00, $63, $01, $77, $01 + .db $c9, $71, $68, $f2, $e7, $73, $97, $fb, $06, $83 + .db $5c, $01, $d7, $22, $e7, $00, $03, $a7, $6c, $02 + .db $b3, $22, $e3, $01, $e7, $07, $47, $a0, $57, $06 + .db $a7, $01, $d3, $00, $d7, $01, $07, $81, $67, $20 + .db $93, $22, $03, $a3, $1c, $61, $17, $21, $6f, $33 + .db $c7, $63, $d8, $62, $e9, $61, $fa, $60, $4f, $b3 + .db $87, $63, $9c, $01, $b7, $63, $c8, $62, $d9, $61 + .db $ea, $60, $39, $f1, $87, $21, $a7, $01, $b7, $20 + .db $39, $f1, $5f, $38, $6d, $c1, $af, $26 + .db $fd + +;level 1-3/5-3 +L_GroundArea7: + .db $90, $11 + .db $0f, $26, $fe, $10, $2a, $93, $87, $17, $a3, $14 + .db $b2, $42, $0a, $92, $19, $40, $36, $14, $50, $41 + .db $82, $16, $2b, $93, $24, $41, $bb, $14, $b8, $00 + .db $c2, $43, $c3, $13, $1b, $94, $67, $12, $c4, $15 + .db $53, $c1, $d2, $41, $12, $c1, $29, $13, $85, $17 + .db $1b, $92, $1a, $42, $47, $13, $83, $41, $a7, $13 + .db $0e, $91, $a7, $63, $b7, $63, $c5, $65, $d5, $65 + .db $dd, $4a, $e3, $67, $f3, $67, $8d, $c1, $ae, $42 + .db $df, $20 + .db $fd + +;level 2-3/7-3 +L_GroundArea8: + .db $90, $11 + .db $0f, $26, $6e, $10, $8b, $17, $af, $32, $d8, $62 + .db $e8, $62, $fc, $3f, $ad, $c8, $f8, $64, $0c, $be + .db $43, $43, $f8, $64, $0c, $bf, $73, $40, $84, $40 + .db $93, $40, $a4, $40, $b3, $40, $f8, $64, $48, $e4 + .db $5c, $39, $83, $40, $92, $41, $b3, $40, $f8, $64 + .db $48, $e4, $5c, $39, $f8, $64, $13, $c2, $37, $65 + .db $4c, $24, $63, $00, $97, $65, $c3, $42, $0b, $97 + .db $ac, $32, $f8, $64, $0c, $be, $53, $45, $9d, $48 + .db $f8, $64, $2a, $e2, $3c, $47, $56, $43, $ba, $62 + .db $f8, $64, $0c, $b7, $88, $64, $bc, $31, $d4, $45 + .db $fc, $31, $3c, $b1, $78, $64, $8c, $38, $0b, $9c + .db $1a, $33, $18, $61, $28, $61, $39, $60, $5d, $4a + .db $ee, $11, $0f, $b8, $1d, $c1, $3e, $42, $6f, $20 + .db $fd + +;level 2-1 +L_GroundArea9: + .db $52, $31 + .db $0f, $20, $6e, $40, $f7, $20, $07, $84, $17, $20 + .db $4f, $34, $c3, $03, $c7, $02, $d3, $22, $27, $e3 + .db $39, $61, $e7, $73, $5c, $e4, $57, $00, $6c, $73 + .db $47, $a0, $53, $06, $63, $22, $a7, $73, $fc, $73 + .db $13, $a1, $33, $05, $43, $21, $5c, $72, $c3, $23 + .db $cc, $03, $77, $fb, $ac, $02, $39, $f1, $a7, $73 + .db $d3, $04, $e8, $72, $e3, $22, $26, $f4, $bc, $02 + .db $8c, $81, $a8, $62, $17, $87, $43, $24, $a7, $01 + .db $c3, $04, $08, $f2, $97, $21, $a3, $02, $c9, $0b + .db $e1, $69, $f1, $69, $8d, $c1, $cf, $26 + .db $fd + +;pipe intro area +L_GroundArea10: + .db $38, $11 + .db $0f, $26, $ad, $40, $3d, $c7 + .db $fd + +;level 5-1 +L_GroundArea11: + .db $95, $b1 + .db $0f, $26, $0d, $02, $c8, $72, $1c, $81, $38, $72 + .db $0d, $05, $97, $34, $98, $62, $a3, $20, $b3, $06 + .db $c3, $20, $cc, $03, $f9, $91, $2c, $81, $48, $62 + .db $0d, $09, $37, $63, $47, $03, $57, $21, $8c, $02 + .db $c5, $79, $c7, $31, $f9, $11, $39, $f1, $a9, $11 + .db $6f, $b4, $d3, $65, $e3, $65, $7d, $c1, $bf, $26 + .db $fd + +;cloud level used in levels 2-1 and 5-2 +L_GroundArea12: + .db $00, $c1 + .db $4c, $00, $f4, $4f, $0d, $02, $02, $42, $43, $4f + .db $52, $c2, $de, $00, $5a, $c2, $4d, $c7 + .db $fd + +;level 4-3 +L_GroundArea13: + .db $90, $51 + .db $0f, $26, $ee, $10, $0b, $94, $33, $14, $42, $42 + .db $77, $16, $86, $44, $02, $92, $4a, $16, $69, $42 + .db $73, $14, $b0, $00, $c7, $12, $05, $c0, $1c, $17 + .db $1f, $11, $36, $12, $8f, $14, $91, $40, $1b, $94 + .db $35, $12, $34, $42, $60, $42, $61, $12, $87, $12 + .db $96, $40, $a3, $14, $1c, $98, $1f, $11, $47, $12 + .db $9f, $15, $cc, $15, $cf, $11, $05, $c0, $1f, $15 + .db $39, $12, $7c, $16, $7f, $11, $82, $40, $98, $12 + .db $df, $15, $16, $c4, $17, $14, $54, $12, $9b, $16 + .db $28, $94, $ce, $01, $3d, $c1, $5e, $42, $8f, $20 + .db $fd + +;level 6-3 +L_GroundArea14: + .db $97, $11 + .db $0f, $26, $fe, $10, $2b, $92, $57, $12, $8b, $12 + .db $c0, $41, $f7, $13, $5b, $92, $69, $0b, $bb, $12 + .db $b2, $46, $19, $93, $71, $00, $17, $94, $7c, $14 + .db $7f, $11, $93, $41, $bf, $15, $fc, $13, $ff, $11 + .db $2f, $95, $50, $42, $51, $12, $58, $14, $a6, $12 + .db $db, $12, $1b, $93, $46, $43, $7b, $12, $8d, $49 + .db $b7, $14, $1b, $94, $49, $0b, $bb, $12, $fc, $13 + .db $ff, $12, $03, $c1, $2f, $15, $43, $12, $4b, $13 + .db $77, $13, $9d, $4a, $15, $c1, $a1, $41, $c3, $12 + .db $fe, $01, $7d, $c1, $9e, $42, $cf, $20 + .db $fd + +;level 6-1 +L_GroundArea15: + .db $52, $21 + .db $0f, $20, $6e, $44, $0c, $f1, $4c, $01, $aa, $35 + .db $d9, $34, $ee, $20, $08, $b3, $37, $32, $43, $04 + .db $4e, $21, $53, $20, $7c, $01, $97, $21, $b7, $07 + .db $9c, $81, $e7, $42, $5f, $b3, $97, $63, $ac, $02 + .db $c5, $41, $49, $e0, $58, $61, $76, $64, $85, $65 + .db $94, $66, $a4, $22, $a6, $03, $c8, $22, $dc, $02 + .db $68, $f2, $96, $42, $13, $82, $17, $02, $af, $34 + .db $f6, $21, $fc, $06, $26, $80, $2a, $24, $36, $01 + .db $8c, $00, $ff, $35, $4e, $a0, $55, $21, $77, $20 + .db $87, $07, $89, $22, $ae, $21, $4c, $82, $9f, $34 + .db $ec, $01, $03, $e7, $13, $67, $8d, $4a, $ad, $41 + .db $0f, $a6 + .db $fd + +;warp zone area used in level 4-2 +L_GroundArea16: + .db $10, $51 + .db $4c, $00, $c7, $12, $c6, $42, $03, $92, $02, $42 + .db $29, $12, $63, $12, $62, $42, $69, $14, $a5, $12 + .db $a4, $42, $e2, $14, $e1, $44, $f8, $16, $37, $c1 + .db $8f, $38, $02, $bb, $28, $7a, $68, $7a, $a8, $7a + .db $e0, $6a, $f0, $6a, $6d, $c5 + .db $fd + +;level 8-1 +L_GroundArea17: + .db $92, $31 + .db $0f, $20, $6e, $40, $0d, $02, $37, $73, $ec, $00 + .db $0c, $80, $3c, $00, $6c, $00, $9c, $00, $06, $c0 + .db $c7, $73, $06, $83, $28, $72, $96, $40, $e7, $73 + .db $26, $c0, $87, $7b, $d2, $41, $39, $f1, $c8, $f2 + .db $97, $e3, $a3, $23, $e7, $02, $e3, $07, $f3, $22 + .db $37, $e3, $9c, $00, $bc, $00, $ec, $00, $0c, $80 + .db $3c, $00, $86, $21, $a6, $06, $b6, $24, $5c, $80 + .db $7c, $00, $9c, $00, $29, $e1, $dc, $05, $f6, $41 + .db $dc, $80, $e8, $72, $0c, $81, $27, $73, $4c, $01 + .db $66, $74, $0d, $11, $3f, $35, $b6, $41, $2c, $82 + .db $36, $40, $7c, $02, $86, $40, $f9, $61, $39, $e1 + .db $ac, $04, $c6, $41, $0c, $83, $16, $41, $88, $f2 + .db $39, $f1, $7c, $00, $89, $61, $9c, $00, $a7, $63 + .db $bc, $00, $c5, $65, $dc, $00, $e3, $67, $f3, $67 + .db $8d, $c1, $cf, $26 + .db $fd + +;level 5-2 +L_GroundArea18: + .db $55, $b1 + .db $0f, $26, $cf, $33, $07, $b2, $15, $11, $52, $42 + .db $99, $0b, $ac, $02, $d3, $24, $d6, $42, $d7, $25 + .db $23, $84, $cf, $33, $07, $e3, $19, $61, $78, $7a + .db $ef, $33, $2c, $81, $46, $64, $55, $65, $65, $65 + .db $ec, $74, $47, $82, $53, $05, $63, $21, $62, $41 + .db $96, $22, $9a, $41, $cc, $03, $b9, $91, $39, $f1 + .db $63, $26, $67, $27, $d3, $06, $fc, $01, $18, $e2 + .db $d9, $07, $e9, $04, $0c, $86, $37, $22, $93, $24 + .db $87, $84, $ac, $02, $c2, $41, $c3, $23, $d9, $71 + .db $fc, $01, $7f, $b1, $9c, $00, $a7, $63, $b6, $64 + .db $cc, $00, $d4, $66, $e3, $67, $f3, $67, $8d, $c1 + .db $cf, $26 + .db $fd + +;level 8-2 +L_GroundArea19: + .db $50, $b1 + .db $0f, $26, $fc, $00, $1f, $b3, $5c, $00, $65, $65 + .db $74, $66, $83, $67, $93, $67, $dc, $73, $4c, $80 + .db $b3, $20, $c9, $0b, $c3, $08, $d3, $2f, $dc, $00 + .db $2c, $80, $4c, $00, $8c, $00, $d3, $2e, $ed, $4a + .db $fc, $00, $d7, $a1, $ec, $01, $4c, $80, $59, $11 + .db $d8, $11, $da, $10, $37, $a0, $47, $04, $99, $11 + .db $e7, $21, $3a, $90, $67, $20, $76, $10, $77, $60 + .db $87, $07, $d8, $12, $39, $f1, $ac, $00, $e9, $71 + .db $0c, $80, $2c, $00, $4c, $05, $c7, $7b, $39, $f1 + .db $ec, $00, $f9, $11, $0c, $82, $6f, $34, $f8, $11 + .db $fa, $10, $7f, $b2, $ac, $00, $b6, $64, $cc, $01 + .db $e3, $67, $f3, $67, $8d, $c1, $cf, $26 + .db $fd + +;level 7-1 +L_GroundArea20: + .db $52, $b1 + .db $0f, $20, $6e, $45, $39, $91, $b3, $04, $c3, $21 + .db $c8, $11, $ca, $10, $49, $91, $7c, $73, $e8, $12 + .db $88, $91, $8a, $10, $e7, $21, $05, $91, $07, $30 + .db $17, $07, $27, $20, $49, $11, $9c, $01, $c8, $72 + .db $23, $a6, $27, $26, $d3, $03, $d8, $7a, $89, $91 + .db $d8, $72, $39, $f1, $a9, $11, $09, $f1, $63, $24 + .db $67, $24, $d8, $62, $28, $91, $2a, $10, $56, $21 + .db $70, $04, $79, $0b, $8c, $00, $94, $21, $9f, $35 + .db $2f, $b8, $3d, $c1, $7f, $26 + .db $fd + +;cloud level used in levels 3-1 and 6-2 +L_GroundArea21: + .db $06, $c1 + .db $4c, $00, $f4, $4f, $0d, $02, $06, $20, $24, $4f + .db $35, $a0, $36, $20, $53, $46, $d5, $20, $d6, $20 + .db $34, $a1, $73, $49, $74, $20, $94, $20, $b4, $20 + .db $d4, $20, $f4, $20, $2e, $80, $59, $42, $4d, $c7 + .db $fd + +;level 3-2 +L_GroundArea22: + .db $96, $31 + .db $0f, $26, $0d, $03, $1a, $60, $77, $42, $c4, $00 + .db $c8, $62, $b9, $e1, $d3, $06, $d7, $07, $f9, $61 + .db $0c, $81, $4e, $b1, $8e, $b1, $bc, $01, $e4, $50 + .db $e9, $61, $0c, $81, $0d, $0a, $84, $43, $98, $72 + .db $0d, $0c, $0f, $38, $1d, $c1, $5f, $26 + .db $fd + +;level 1-2 +L_UndergroundArea1: + .db $48, $0f + .db $0e, $01, $5e, $02, $a7, $00, $bc, $73, $1a, $e0 + .db $39, $61, $58, $62, $77, $63, $97, $63, $b8, $62 + .db $d6, $07, $f8, $62, $19, $e1, $75, $52, $86, $40 + .db $87, $50, $95, $52, $93, $43, $a5, $21, $c5, $52 + .db $d6, $40, $d7, $20, $e5, $06, $e6, $51, $3e, $8d + .db $5e, $03, $67, $52, $77, $52, $7e, $02, $9e, $03 + .db $a6, $43, $a7, $23, $de, $05, $fe, $02, $1e, $83 + .db $33, $54, $46, $40, $47, $21, $56, $04, $5e, $02 + .db $83, $54, $93, $52, $96, $07, $97, $50, $be, $03 + .db $c7, $23, $fe, $02, $0c, $82, $43, $45, $45, $24 + .db $46, $24, $90, $08, $95, $51, $78, $fa, $d7, $73 + .db $39, $f1, $8c, $01, $a8, $52, $b8, $52, $cc, $01 + .db $5f, $b3, $97, $63, $9e, $00, $0e, $81, $16, $24 + .db $66, $04, $8e, $00, $fe, $01, $08, $d2, $0e, $06 + .db $6f, $47, $9e, $0f, $0e, $82, $2d, $47, $28, $7a + .db $68, $7a, $a8, $7a, $ae, $01, $de, $0f, $6d, $c5 + .db $fd + +;level 4-2 +L_UndergroundArea2: + .db $48, $0f + .db $0e, $01, $5e, $02, $bc, $01, $fc, $01, $2c, $82 + .db $41, $52, $4e, $04, $67, $25, $68, $24, $69, $24 + .db $ba, $42, $c7, $04, $de, $0b, $b2, $87, $fe, $02 + .db $2c, $e1, $2c, $71, $67, $01, $77, $00, $87, $01 + .db $8e, $00, $ee, $01, $f6, $02, $03, $85, $05, $02 + .db $13, $21, $16, $02, $27, $02, $2e, $02, $88, $72 + .db $c7, $20, $d7, $07, $e4, $76, $07, $a0, $17, $06 + .db $48, $7a, $76, $20, $98, $72, $79, $e1, $88, $62 + .db $9c, $01, $b7, $73, $dc, $01, $f8, $62, $fe, $01 + .db $08, $e2, $0e, $00, $6e, $02, $73, $20, $77, $23 + .db $83, $04, $93, $20, $ae, $00, $fe, $0a, $0e, $82 + .db $39, $71, $a8, $72, $e7, $73, $0c, $81, $8f, $32 + .db $ae, $00, $fe, $04, $04, $d1, $17, $04, $26, $49 + .db $27, $29, $df, $33, $fe, $02, $44, $f6, $7c, $01 + .db $8e, $06, $bf, $47, $ee, $0f, $4d, $c7, $0e, $82 + .db $68, $7a, $ae, $01, $de, $0f, $6d, $c5 + .db $fd + +;underground bonus rooms area used in many levels +L_UndergroundArea3: + .db $48, $01 + .db $0e, $01, $00, $5a, $3e, $06, $45, $46, $47, $46 + .db $53, $44, $ae, $01, $df, $4a, $4d, $c7, $0e, $81 + .db $00, $5a, $2e, $04, $37, $28, $3a, $48, $46, $47 + .db $c7, $07, $ce, $0f, $df, $4a, $4d, $c7, $0e, $81 + .db $00, $5a, $33, $53, $43, $51, $46, $40, $47, $50 + .db $53, $04, $55, $40, $56, $50, $62, $43, $64, $40 + .db $65, $50, $71, $41, $73, $51, $83, $51, $94, $40 + .db $95, $50, $a3, $50, $a5, $40, $a6, $50, $b3, $51 + .db $b6, $40, $b7, $50, $c3, $53, $df, $4a, $4d, $c7 + .db $0e, $81, $00, $5a, $2e, $02, $36, $47, $37, $52 + .db $3a, $49, $47, $25, $a7, $52, $d7, $04, $df, $4a + .db $4d, $c7, $0e, $81, $00, $5a, $3e, $02, $44, $51 + .db $53, $44, $54, $44, $55, $24, $a1, $54, $ae, $01 + .db $b4, $21, $df, $4a, $e5, $07, $4d, $c7 + .db $fd + +;water area used in levels 5-2 and 6-2 +L_WaterArea1: + .db $41, $01 + .db $b4, $34, $c8, $52, $f2, $51, $47, $d3, $6c, $03 + .db $65, $49, $9e, $07, $be, $01, $cc, $03, $fe, $07 + .db $0d, $c9, $1e, $01, $6c, $01, $62, $35, $63, $53 + .db $8a, $41, $ac, $01, $b3, $53, $e9, $51, $26, $c3 + .db $27, $33, $63, $43, $64, $33, $ba, $60, $c9, $61 + .db $ce, $0b, $e5, $09, $ee, $0f, $7d, $ca, $7d, $47 + .db $fd + +;level 2-2/7-2 +L_WaterArea2: + .db $41, $01 + .db $b8, $52, $ea, $41, $27, $b2, $b3, $42, $16, $d4 + .db $4a, $42, $a5, $51, $a7, $31, $27, $d3, $08, $e2 + .db $16, $64, $2c, $04, $38, $42, $76, $64, $88, $62 + .db $de, $07, $fe, $01, $0d, $c9, $23, $32, $31, $51 + .db $98, $52, $0d, $c9, $59, $42, $63, $53, $67, $31 + .db $14, $c2, $36, $31, $87, $53, $17, $e3, $29, $61 + .db $30, $62, $3c, $08, $42, $37, $59, $40, $6a, $42 + .db $99, $40, $c9, $61, $d7, $63, $39, $d1, $58, $52 + .db $c3, $67, $d3, $31, $dc, $06, $f7, $42, $fa, $42 + .db $23, $b1, $43, $67, $c3, $34, $c7, $34, $d1, $51 + .db $43, $b3, $47, $33, $9a, $30, $a9, $61, $b8, $62 + .db $be, $0b, $d5, $09, $de, $0f, $0d, $ca, $7d, $47 + .db $fd + +;water area used in level 8-4 +L_WaterArea3: + .db $49, $0f + .db $1e, $01, $39, $73, $5e, $07, $ae, $0b, $1e, $82 + .db $6e, $88, $9e, $02, $0d, $04, $2e, $0b, $45, $09 + .db $4e, $0f, $ed, $47 + .db $fd + +;------------------------------------------------------------------------------------- + +;unused space + .db $ff + +;------------------------------------------------------------------------------------- + +;indirect jump routine called when +;$0770 is set to 1 +GameMode: + lda OperMode_Task + jsr JumpEngine + + .dw InitializeArea + .dw ScreenRoutines + .dw SecondaryGameSetup + .dw GameCoreRoutine + +;------------------------------------------------------------------------------------- + +GameCoreRoutine: + ldx CurrentPlayer ;get which player is on the screen + lda SavedJoypadBits,x ;use appropriate player's controller bits + sta SavedJoypadBits ;as the master controller bits + jsr GameRoutines ;execute one of many possible subs + lda OperMode_Task ;check major task of operating mode + cmp #$03 ;if we are supposed to be here, + bcs GameEngine ;branch to the game engine itself + rts + +GameEngine: + jsr ProcFireball_Bubble ;process fireballs and air bubbles + ldx #$00 +ProcELoop: stx ObjectOffset ;put incremented offset in X as enemy object offset + jsr EnemiesAndLoopsCore ;process enemy objects + jsr FloateyNumbersRoutine ;process floatey numbers + inx + cpx #$06 ;do these two subroutines until the whole buffer is done + bne ProcELoop + jsr GetPlayerOffscreenBits ;get offscreen bits for player object + jsr RelativePlayerPosition ;get relative coordinates for player object + jsr PlayerGfxHandler ;draw the player + jsr BlockObjMT_Updater ;replace block objects with metatiles if necessary + ldx #$01 + stx ObjectOffset ;set offset for second + jsr BlockObjectsCore ;process second block object + dex + stx ObjectOffset ;set offset for first + jsr BlockObjectsCore ;process first block object + jsr MiscObjectsCore ;process misc objects (hammer, jumping coins) + jsr ProcessCannons ;process bullet bill cannons + jsr ProcessWhirlpools ;process whirlpools + jsr FlagpoleRoutine ;process the flagpole + jsr RunGameTimer ;count down the game timer + jsr ColorRotation ;cycle one of the background colors + lda Player_Y_HighPos + cmp #$02 ;if player is below the screen, don't bother with the music + bpl NoChgMus + lda StarInvincibleTimer ;if star mario invincibility timer at zero, + beq ClrPlrPal ;skip this part + cmp #$04 + bne NoChgMus ;if not yet at a certain point, continue + lda IntervalTimerControl ;if interval timer not yet expired, + bne NoChgMus ;branch ahead, don't bother with the music + jsr GetAreaMusic ;to re-attain appropriate level music +NoChgMus: ldy StarInvincibleTimer ;get invincibility timer + lda FrameCounter ;get frame counter + cpy #$08 ;if timer still above certain point, + bcs CycleTwo ;branch to cycle player's palette quickly + lsr ;otherwise, divide by 8 to cycle every eighth frame + lsr +CycleTwo: lsr ;if branched here, divide by 2 to cycle every other frame + jsr CyclePlayerPalette ;do sub to cycle the palette (note: shares fire flower code) + jmp SaveAB ;then skip this sub to finish up the game engine +ClrPlrPal: jsr ResetPalStar ;do sub to clear player's palette bits in attributes +SaveAB: lda A_B_Buttons ;save current A and B button + sta PreviousA_B_Buttons ;into temp variable to be used on next frame + lda #$00 + sta Left_Right_Buttons ;nullify left and right buttons temp variable +UpdScrollVar: lda VRAM_Buffer_AddrCtrl + cmp #$06 ;if vram address controller set to 6 (one of two $0341s) + beq ExitEng ;then branch to leave + lda AreaParserTaskNum ;otherwise check number of tasks + bne RunParser + lda ScrollThirtyTwo ;get horizontal scroll in 0-31 or $00-$20 range + cmp #$20 ;check to see if exceeded $21 + bmi ExitEng ;branch to leave if not + lda ScrollThirtyTwo + sbc #$20 ;otherwise subtract $20 to set appropriately + sta ScrollThirtyTwo ;and store + lda #$00 ;reset vram buffer offset used in conjunction with + sta VRAM_Buffer2_Offset ;level graphics buffer at $0341-$035f +RunParser: jsr AreaParserTaskHandler ;update the name table with more level graphics +ExitEng: rts ;and after all that, we're finally done! + +;------------------------------------------------------------------------------------- + +ScrollHandler: + lda Player_X_Scroll ;load value saved here + clc + adc Platform_X_Scroll ;add value used by left/right platforms + sta Player_X_Scroll ;save as new value here to impose force on scroll + lda ScrollLock ;check scroll lock flag + bne InitScrlAmt ;skip a bunch of code here if set + lda Player_Pos_ForScroll + cmp #$50 ;check player's horizontal screen position + bcc InitScrlAmt ;if less than 80 pixels to the right, branch + lda SideCollisionTimer ;if timer related to player's side collision + bne InitScrlAmt ;not expired, branch + ldy Player_X_Scroll ;get value and decrement by one + dey ;if value originally set to zero or otherwise + bmi InitScrlAmt ;negative for left movement, branch + iny + cpy #$02 ;if value $01, branch and do not decrement + bcc ChkNearMid + dey ;otherwise decrement by one +ChkNearMid: lda Player_Pos_ForScroll + cmp #$70 ;check player's horizontal screen position + bcc ScrollScreen ;if less than 112 pixels to the right, branch + ldy Player_X_Scroll ;otherwise get original value undecremented + +ScrollScreen: + tya + sta ScrollAmount ;save value here + clc + adc ScrollThirtyTwo ;add to value already set here + sta ScrollThirtyTwo ;save as new value here + tya + clc + adc ScreenLeft_X_Pos ;add to left side coordinate + sta ScreenLeft_X_Pos ;save as new left side coordinate + sta HorizontalScroll ;save here also + lda ScreenLeft_PageLoc + adc #$00 ;add carry to page location for left + sta ScreenLeft_PageLoc ;side of the screen + and #$01 ;get LSB of page location + sta $00 ;save as temp variable for PPU register 1 mirror + lda Mirror_PPU_CTRL_REG1 ;get PPU register 1 mirror + and #%11111110 ;save all bits except d0 + ora $00 ;get saved bit here and save in PPU register 1 + sta Mirror_PPU_CTRL_REG1 ;mirror to be used to set name table later + jsr GetScreenPosition ;figure out where the right side is + lda #$08 + sta ScrollIntervalTimer ;set scroll timer (residual, not used elsewhere) + jmp ChkPOffscr ;skip this part +InitScrlAmt: lda #$00 + sta ScrollAmount ;initialize value here +ChkPOffscr: ldx #$00 ;set X for player offset + jsr GetXOffscreenBits ;get horizontal offscreen bits for player + sta $00 ;save them here + ldy #$00 ;load default offset (left side) + asl ;if d7 of offscreen bits are set, + bcs KeepOnscr ;branch with default offset + iny ;otherwise use different offset (right side) + lda $00 + and #%00100000 ;check offscreen bits for d5 set + beq InitPlatScrl ;if not set, branch ahead of this part +KeepOnscr: lda ScreenEdge_X_Pos,y ;get left or right side coordinate based on offset + sec + sbc X_SubtracterData,y ;subtract amount based on offset + sta Player_X_Position ;store as player position to prevent movement further + lda ScreenEdge_PageLoc,y ;get left or right page location based on offset + sbc #$00 ;subtract borrow + sta Player_PageLoc ;save as player's page location + lda Left_Right_Buttons ;check saved controller bits + cmp OffscrJoypadBitsData,y ;against bits based on offset + beq InitPlatScrl ;if not equal, branch + lda #$00 + sta Player_X_Speed ;otherwise nullify horizontal speed of player +InitPlatScrl: lda #$00 ;nullify platform force imposed on scroll + sta Platform_X_Scroll + rts + +X_SubtracterData: + .db $00, $10 + +OffscrJoypadBitsData: + .db $01, $02 + +;------------------------------------------------------------------------------------- + +GetScreenPosition: + lda ScreenLeft_X_Pos ;get coordinate of screen's left boundary + clc + adc #$ff ;add 255 pixels + sta ScreenRight_X_Pos ;store as coordinate of screen's right boundary + lda ScreenLeft_PageLoc ;get page number where left boundary is + adc #$00 ;add carry from before + sta ScreenRight_PageLoc ;store as page number where right boundary is + rts + +;------------------------------------------------------------------------------------- + +GameRoutines: + lda GameEngineSubroutine ;run routine based on number (a few of these routines are + jsr JumpEngine ;merely placeholders as conditions for other routines) + + .dw Entrance_GameTimerSetup + .dw Vine_AutoClimb + .dw SideExitPipeEntry + .dw VerticalPipeEntry + .dw FlagpoleSlide + .dw PlayerEndLevel + .dw PlayerLoseLife + .dw PlayerEntrance + .dw PlayerCtrlRoutine + .dw PlayerChangeSize + .dw PlayerInjuryBlink + .dw PlayerDeath + .dw PlayerFireFlower + +;------------------------------------------------------------------------------------- + +PlayerEntrance: + lda AltEntranceControl ;check for mode of alternate entry + cmp #$02 + beq EntrMode2 ;if found, branch to enter from pipe or with vine + lda #$00 + ldy Player_Y_Position ;if vertical position above a certain + cpy #$30 ;point, nullify controller bits and continue + bcc AutoControlPlayer ;with player movement code, do not return + lda PlayerEntranceCtrl ;check player entry bits from header + cmp #$06 + beq ChkBehPipe ;if set to 6 or 7, execute pipe intro code + cmp #$07 ;otherwise branch to normal entry + bne PlayerRdy +ChkBehPipe: lda Player_SprAttrib ;check for sprite attributes + bne IntroEntr ;branch if found + lda #$01 + jmp AutoControlPlayer ;force player to walk to the right +IntroEntr: jsr EnterSidePipe ;execute sub to move player to the right + dec ChangeAreaTimer ;decrement timer for change of area + bne ExitEntr ;branch to exit if not yet expired + inc DisableIntermediate ;set flag to skip world and lives display + jmp NextArea ;jump to increment to next area and set modes +EntrMode2: lda JoypadOverride ;if controller override bits set here, + bne VineEntr ;branch to enter with vine + lda #$ff ;otherwise, set value here then execute sub + jsr MovePlayerYAxis ;to move player upwards (note $ff = -1) + lda Player_Y_Position ;check to see if player is at a specific coordinate + cmp #$91 ;if player risen to a certain point (this requires pipes + bcc PlayerRdy ;to be at specific height to look/function right) branch + rts ;to the last part, otherwise leave +VineEntr: lda VineHeight + cmp #$60 ;check vine height + bne ExitEntr ;if vine not yet reached maximum height, branch to leave + lda Player_Y_Position ;get player's vertical coordinate + cmp #$99 ;check player's vertical coordinate against preset value + ldy #$00 ;load default values to be written to + lda #$01 ;this value moves player to the right off the vine + bcc OffVine ;if vertical coordinate < preset value, use defaults + lda #$03 + sta Player_State ;otherwise set player state to climbing + iny ;increment value in Y + lda #$08 ;set block in block buffer to cover hole, then + sta Block_Buffer_1+$b4 ;use same value to force player to climb +OffVine: sty DisableCollisionDet ;set collision detection disable flag + jsr AutoControlPlayer ;use contents of A to move player up or right, execute sub + lda Player_X_Position + cmp #$48 ;check player's horizontal position + bcc ExitEntr ;if not far enough to the right, branch to leave +PlayerRdy: lda #$08 ;set routine to be executed by game engine next frame + sta GameEngineSubroutine + lda #$01 ;set to face player to the right + sta PlayerFacingDir + lsr ;init A + sta AltEntranceControl ;init mode of entry + sta DisableCollisionDet ;init collision detection disable flag + sta JoypadOverride ;nullify controller override bits +ExitEntr: rts ;leave! + +;------------------------------------------------------------------------------------- +;$07 - used to hold upper limit of high byte when player falls down hole + +AutoControlPlayer: + sta SavedJoypadBits ;override controller bits with contents of A if executing here + +PlayerCtrlRoutine: + lda GameEngineSubroutine ;check task here + cmp #$0b ;if certain value is set, branch to skip controller bit loading + beq SizeChk + lda AreaType ;are we in a water type area? + bne SaveJoyp ;if not, branch + ldy Player_Y_HighPos + dey ;if not in vertical area between + bne DisJoyp ;status bar and bottom, branch + lda Player_Y_Position + cmp #$d0 ;if nearing the bottom of the screen or + bcc SaveJoyp ;not in the vertical area between status bar or bottom, +DisJoyp: lda #$00 ;disable controller bits + sta SavedJoypadBits +SaveJoyp: lda SavedJoypadBits ;otherwise store A and B buttons in $0a + and #%11000000 + sta A_B_Buttons + lda SavedJoypadBits ;store left and right buttons in $0c + and #%00000011 + sta Left_Right_Buttons + lda SavedJoypadBits ;store up and down buttons in $0b + and #%00001100 + sta Up_Down_Buttons + and #%00000100 ;check for pressing down + beq SizeChk ;if not, branch + lda Player_State ;check player's state + bne SizeChk ;if not on the ground, branch + ldy Left_Right_Buttons ;check left and right + beq SizeChk ;if neither pressed, branch + lda #$00 + sta Left_Right_Buttons ;if pressing down while on the ground, + sta Up_Down_Buttons ;nullify directional bits +SizeChk: jsr PlayerMovementSubs ;run movement subroutines + ldy #$01 ;is player small? + lda PlayerSize + bne ChkMoveDir + ldy #$00 ;check for if crouching + lda CrouchingFlag + beq ChkMoveDir ;if not, branch ahead + ldy #$02 ;if big and crouching, load y with 2 +ChkMoveDir: sty Player_BoundBoxCtrl ;set contents of Y as player's bounding box size control + lda #$01 ;set moving direction to right by default + ldy Player_X_Speed ;check player's horizontal speed + beq PlayerSubs ;if not moving at all horizontally, skip this part + bpl SetMoveDir ;if moving to the right, use default moving direction + asl ;otherwise change to move to the left +SetMoveDir: sta Player_MovingDir ;set moving direction +PlayerSubs: jsr ScrollHandler ;move the screen if necessary + jsr GetPlayerOffscreenBits ;get player's offscreen bits + jsr RelativePlayerPosition ;get coordinates relative to the screen + ldx #$00 ;set offset for player object + jsr BoundingBoxCore ;get player's bounding box coordinates + jsr PlayerBGCollision ;do collision detection and process + lda Player_Y_Position + cmp #$40 ;check to see if player is higher than 64th pixel + bcc PlayerHole ;if so, branch ahead + lda GameEngineSubroutine + cmp #$05 ;if running end-of-level routine, branch ahead + beq PlayerHole + cmp #$07 ;if running player entrance routine, branch ahead + beq PlayerHole + cmp #$04 ;if running routines $00-$03, branch ahead + bcc PlayerHole + lda Player_SprAttrib + and #%11011111 ;otherwise nullify player's + sta Player_SprAttrib ;background priority flag +PlayerHole: lda Player_Y_HighPos ;check player's vertical high byte + cmp #$02 ;for below the screen + bmi ExitCtrl ;branch to leave if not that far down + ldx #$01 + stx ScrollLock ;set scroll lock + ldy #$04 + sty $07 ;set value here + ldx #$00 ;use X as flag, and clear for cloud level + ldy GameTimerExpiredFlag ;check game timer expiration flag + bne HoleDie ;if set, branch + ldy CloudTypeOverride ;check for cloud type override + bne ChkHoleX ;skip to last part if found +HoleDie: inx ;set flag in X for player death + ldy GameEngineSubroutine + cpy #$0b ;check for some other routine running + beq ChkHoleX ;if so, branch ahead + ldy DeathMusicLoaded ;check value here + bne HoleBottom ;if already set, branch to next part + iny + sty EventMusicQueue ;otherwise play death music + sty DeathMusicLoaded ;and set value here +HoleBottom: ldy #$06 + sty $07 ;change value here +ChkHoleX: cmp $07 ;compare vertical high byte with value set here + bmi ExitCtrl ;if less, branch to leave + dex ;otherwise decrement flag in X + bmi CloudExit ;if flag was clear, branch to set modes and other values + ldy EventMusicBuffer ;check to see if music is still playing + bne ExitCtrl ;branch to leave if so + lda #$06 ;otherwise set to run lose life routine + sta GameEngineSubroutine ;on next frame +ExitCtrl: rts ;leave + +CloudExit: + lda #$00 + sta JoypadOverride ;clear controller override bits if any are set + jsr SetEntr ;do sub to set secondary mode + inc AltEntranceControl ;set mode of entry to 3 + rts + +;------------------------------------------------------------------------------------- + +Vine_AutoClimb: + lda Player_Y_HighPos ;check to see whether player reached position + bne AutoClimb ;above the status bar yet and if so, set modes + lda Player_Y_Position + cmp #$e4 + bcc SetEntr +AutoClimb: lda #%00001000 ;set controller bits override to up + sta JoypadOverride + ldy #$03 ;set player state to climbing + sty Player_State + jmp AutoControlPlayer +SetEntr: lda #$02 ;set starting position to override + sta AltEntranceControl + jmp ChgAreaMode ;set modes + +;------------------------------------------------------------------------------------- + +VerticalPipeEntry: + lda #$01 ;set 1 as movement amount + jsr MovePlayerYAxis ;do sub to move player downwards + jsr ScrollHandler ;do sub to scroll screen with saved force if necessary + ldy #$00 ;load default mode of entry + lda WarpZoneControl ;check warp zone control variable/flag + bne ChgAreaPipe ;if set, branch to use mode 0 + iny + lda AreaType ;check for castle level type + cmp #$03 + bne ChgAreaPipe ;if not castle type level, use mode 1 + iny + jmp ChgAreaPipe ;otherwise use mode 2 + +MovePlayerYAxis: + clc + adc Player_Y_Position ;add contents of A to player position + sta Player_Y_Position + rts + +;------------------------------------------------------------------------------------- + +SideExitPipeEntry: + jsr EnterSidePipe ;execute sub to move player to the right + ldy #$02 +ChgAreaPipe: dec ChangeAreaTimer ;decrement timer for change of area + bne ExitCAPipe + sty AltEntranceControl ;when timer expires set mode of alternate entry +ChgAreaMode: inc DisableScreenFlag ;set flag to disable screen output + lda #$00 + sta OperMode_Task ;set secondary mode of operation + sta Sprite0HitDetectFlag ;disable sprite 0 check +ExitCAPipe: rts ;leave + +EnterSidePipe: + lda #$08 ;set player's horizontal speed + sta Player_X_Speed + ldy #$01 ;set controller right button by default + lda Player_X_Position ;mask out higher nybble of player's + and #%00001111 ;horizontal position + bne RightPipe + sta Player_X_Speed ;if lower nybble = 0, set as horizontal speed + tay ;and nullify controller bit override here +RightPipe: tya ;use contents of Y to + jsr AutoControlPlayer ;execute player control routine with ctrl bits nulled + rts + +;------------------------------------------------------------------------------------- + +PlayerChangeSize: + lda TimerControl ;check master timer control + cmp #$f8 ;for specific moment in time + bne EndChgSize ;branch if before or after that point + jmp InitChangeSize ;otherwise run code to get growing/shrinking going +EndChgSize: cmp #$c4 ;check again for another specific moment + bne ExitChgSize ;and branch to leave if before or after that point + jsr DonePlayerTask ;otherwise do sub to init timer control and set routine +ExitChgSize: rts ;and then leave + +;------------------------------------------------------------------------------------- + +PlayerInjuryBlink: + lda TimerControl ;check master timer control + cmp #$f0 ;for specific moment in time + bcs ExitBlink ;branch if before that point + cmp #$c8 ;check again for another specific point + beq DonePlayerTask ;branch if at that point, and not before or after + jmp PlayerCtrlRoutine ;otherwise run player control routine +ExitBlink: bne ExitBoth ;do unconditional branch to leave + +InitChangeSize: + ldy PlayerChangeSizeFlag ;if growing/shrinking flag already set + bne ExitBoth ;then branch to leave + sty PlayerAnimCtrl ;otherwise initialize player's animation frame control + inc PlayerChangeSizeFlag ;set growing/shrinking flag + lda PlayerSize + eor #$01 ;invert player's size + sta PlayerSize +ExitBoth: rts ;leave + +;------------------------------------------------------------------------------------- +;$00 - used in CyclePlayerPalette to store current palette to cycle + +PlayerDeath: + lda TimerControl ;check master timer control + cmp #$f0 ;for specific moment in time + bcs ExitDeath ;branch to leave if before that point + jmp PlayerCtrlRoutine ;otherwise run player control routine + +DonePlayerTask: + lda #$00 + sta TimerControl ;initialize master timer control to continue timers + lda #$08 + sta GameEngineSubroutine ;set player control routine to run next frame + rts ;leave + +PlayerFireFlower: + lda TimerControl ;check master timer control + cmp #$c0 ;for specific moment in time + beq ResetPalFireFlower ;branch if at moment, not before or after + lda FrameCounter ;get frame counter + lsr + lsr ;divide by four to change every four frames + +CyclePlayerPalette: + and #$03 ;mask out all but d1-d0 (previously d3-d2) + sta $00 ;store result here to use as palette bits + lda Player_SprAttrib ;get player attributes + and #%11111100 ;save any other bits but palette bits + ora $00 ;add palette bits + sta Player_SprAttrib ;store as new player attributes + rts ;and leave + +ResetPalFireFlower: + jsr DonePlayerTask ;do sub to init timer control and run player control routine + +ResetPalStar: + lda Player_SprAttrib ;get player attributes + and #%11111100 ;mask out palette bits to force palette 0 + sta Player_SprAttrib ;store as new player attributes + rts ;and leave + +ExitDeath: + rts ;leave from death routine + +;------------------------------------------------------------------------------------- + +FlagpoleSlide: + lda Enemy_ID+5 ;check special use enemy slot + cmp #FlagpoleFlagObject ;for flagpole flag object + bne NoFPObj ;if not found, branch to something residual + lda FlagpoleSoundQueue ;load flagpole sound + sta Square1SoundQueue ;into square 1's sfx queue + lda #$00 + sta FlagpoleSoundQueue ;init flagpole sound queue + ldy Player_Y_Position + cpy #$9e ;check to see if player has slid down + bcs SlidePlayer ;far enough, and if so, branch with no controller bits set + lda #$04 ;otherwise force player to climb down (to slide) +SlidePlayer: jmp AutoControlPlayer ;jump to player control routine +NoFPObj: inc GameEngineSubroutine ;increment to next routine (this may + rts ;be residual code) + +;------------------------------------------------------------------------------------- + +Hidden1UpCoinAmts: + .db $15, $23, $16, $1b, $17, $18, $23, $63 + +PlayerEndLevel: + lda #$01 ;force player to walk to the right + jsr AutoControlPlayer + lda Player_Y_Position ;check player's vertical position + cmp #$ae + bcc ChkStop ;if player is not yet off the flagpole, skip this part + lda ScrollLock ;if scroll lock not set, branch ahead to next part + beq ChkStop ;because we only need to do this part once + lda #EndOfLevelMusic + sta EventMusicQueue ;load win level music in event music queue + lda #$00 + sta ScrollLock ;turn off scroll lock to skip this part later +ChkStop: lda Player_CollisionBits ;get player collision bits + lsr ;check for d0 set + bcs RdyNextA ;if d0 set, skip to next part + lda StarFlagTaskControl ;if star flag task control already set, + bne InCastle ;go ahead with the rest of the code + inc StarFlagTaskControl ;otherwise set task control now (this gets ball rolling!) +InCastle: lda #%00100000 ;set player's background priority bit to + sta Player_SprAttrib ;give illusion of being inside the castle +RdyNextA: lda StarFlagTaskControl + cmp #$05 ;if star flag task control not yet set + bne ExitNA ;beyond last valid task number, branch to leave + inc LevelNumber ;increment level number used for game logic + lda LevelNumber + cmp #$03 ;check to see if we have yet reached level -4 + bne NextArea ;and skip this last part here if not + ldy WorldNumber ;get world number as offset + lda CoinTallyFor1Ups ;check third area coin tally for bonus 1-ups + cmp Hidden1UpCoinAmts,y ;against minimum value, if player has not collected + bcc NextArea ;at least this number of coins, leave flag clear + inc Hidden1UpFlag ;otherwise set hidden 1-up box control flag +NextArea: inc AreaNumber ;increment area number used for address loader + jsr LoadAreaPointer ;get new level pointer + inc FetchNewGameTimerFlag ;set flag to load new game timer + jsr ChgAreaMode ;do sub to set secondary mode, disable screen and sprite 0 + sta HalfwayPage ;reset halfway page to 0 (beginning) + lda #Silence + sta EventMusicQueue ;silence music and leave +ExitNA: rts + +;------------------------------------------------------------------------------------- + +PlayerMovementSubs: + lda #$00 ;set A to init crouch flag by default + ldy PlayerSize ;is player small? + bne SetCrouch ;if so, branch + lda Player_State ;check state of player + bne ProcMove ;if not on the ground, branch + lda Up_Down_Buttons ;load controller bits for up and down + and #%00000100 ;single out bit for down button +SetCrouch: sta CrouchingFlag ;store value in crouch flag +ProcMove: jsr PlayerPhysicsSub ;run sub related to jumping and swimming + lda PlayerChangeSizeFlag ;if growing/shrinking flag set, + bne NoMoveSub ;branch to leave + lda Player_State + cmp #$03 ;get player state + beq MoveSubs ;if climbing, branch ahead, leave timer unset + ldy #$18 + sty ClimbSideTimer ;otherwise reset timer now +MoveSubs: jsr JumpEngine + + .dw OnGroundStateSub + .dw JumpSwimSub + .dw FallingSub + .dw ClimbingSub + +NoMoveSub: rts + +;------------------------------------------------------------------------------------- +;$00 - used by ClimbingSub to store high vertical adder + +OnGroundStateSub: + jsr GetPlayerAnimSpeed ;do a sub to set animation frame timing + lda Left_Right_Buttons + beq GndMove ;if left/right controller bits not set, skip instruction + sta PlayerFacingDir ;otherwise set new facing direction +GndMove: jsr ImposeFriction ;do a sub to impose friction on player's walk/run + jsr MovePlayerHorizontally ;do another sub to move player horizontally + sta Player_X_Scroll ;set returned value as player's movement speed for scroll + rts + +;-------------------------------- + +FallingSub: + lda VerticalForceDown + sta VerticalForce ;dump vertical movement force for falling into main one + jmp LRAir ;movement force, then skip ahead to process left/right movement + +;-------------------------------- + +JumpSwimSub: + ldy Player_Y_Speed ;if player's vertical speed zero + bpl DumpFall ;or moving downwards, branch to falling + lda A_B_Buttons + and #A_Button ;check to see if A button is being pressed + and PreviousA_B_Buttons ;and was pressed in previous frame + bne ProcSwim ;if so, branch elsewhere + lda JumpOrigin_Y_Position ;get vertical position player jumped from + sec + sbc Player_Y_Position ;subtract current from original vertical coordinate + cmp DiffToHaltJump ;compare to value set here to see if player is in mid-jump + bcc ProcSwim ;or just starting to jump, if just starting, skip ahead +DumpFall: lda VerticalForceDown ;otherwise dump falling into main fractional + sta VerticalForce +ProcSwim: lda SwimmingFlag ;if swimming flag not set, + beq LRAir ;branch ahead to last part + jsr GetPlayerAnimSpeed ;do a sub to get animation frame timing + lda Player_Y_Position + cmp #$14 ;check vertical position against preset value + bcs LRWater ;if not yet reached a certain position, branch ahead + lda #$18 + sta VerticalForce ;otherwise set fractional +LRWater: lda Left_Right_Buttons ;check left/right controller bits (check for swimming) + beq LRAir ;if not pressing any, skip + sta PlayerFacingDir ;otherwise set facing direction accordingly +LRAir: lda Left_Right_Buttons ;check left/right controller bits (check for jumping/falling) + beq JSMove ;if not pressing any, skip + jsr ImposeFriction ;otherwise process horizontal movement +JSMove: jsr MovePlayerHorizontally ;do a sub to move player horizontally + sta Player_X_Scroll ;set player's speed here, to be used for scroll later + lda GameEngineSubroutine + cmp #$0b ;check for specific routine selected + bne ExitMov1 ;branch if not set to run + lda #$28 + sta VerticalForce ;otherwise set fractional +ExitMov1: jmp MovePlayerVertically ;jump to move player vertically, then leave + +;-------------------------------- + +ClimbAdderLow: + .db $0e, $04, $fc, $f2 +ClimbAdderHigh: + .db $00, $00, $ff, $ff + +ClimbingSub: + lda Player_YMF_Dummy + clc ;add movement force to dummy variable + adc Player_Y_MoveForce ;save with carry + sta Player_YMF_Dummy + ldy #$00 ;set default adder here + lda Player_Y_Speed ;get player's vertical speed + bpl MoveOnVine ;if not moving upwards, branch + dey ;otherwise set adder to $ff +MoveOnVine: sty $00 ;store adder here + adc Player_Y_Position ;add carry to player's vertical position + sta Player_Y_Position ;and store to move player up or down + lda Player_Y_HighPos + adc $00 ;add carry to player's page location + sta Player_Y_HighPos ;and store + lda Left_Right_Buttons ;compare left/right controller bits + and Player_CollisionBits ;to collision flag + beq InitCSTimer ;if not set, skip to end + ldy ClimbSideTimer ;otherwise check timer + bne ExitCSub ;if timer not expired, branch to leave + ldy #$18 + sty ClimbSideTimer ;otherwise set timer now + ldx #$00 ;set default offset here + ldy PlayerFacingDir ;get facing direction + lsr ;move right button controller bit to carry + bcs ClimbFD ;if controller right pressed, branch ahead + inx + inx ;otherwise increment offset by 2 bytes +ClimbFD: dey ;check to see if facing right + beq CSetFDir ;if so, branch, do not increment + inx ;otherwise increment by 1 byte +CSetFDir: lda Player_X_Position + clc ;add or subtract from player's horizontal position + adc ClimbAdderLow,x ;using value here as adder and X as offset + sta Player_X_Position + lda Player_PageLoc ;add or subtract carry or borrow using value here + adc ClimbAdderHigh,x ;from the player's page location + sta Player_PageLoc + lda Left_Right_Buttons ;get left/right controller bits again + eor #%00000011 ;invert them and store them while player + sta PlayerFacingDir ;is on vine to face player in opposite direction +ExitCSub: rts ;then leave +InitCSTimer: sta ClimbSideTimer ;initialize timer here + rts + +;------------------------------------------------------------------------------------- +;$00 - used to store offset to friction data + +JumpMForceData: + .db $20, $20, $1e, $28, $28, $0d, $04 + +FallMForceData: + .db $70, $70, $60, $90, $90, $0a, $09 + +PlayerYSpdData: + .db $fc, $fc, $fc, $fb, $fb, $fe, $ff + +InitMForceData: + .db $00, $00, $00, $00, $00, $80, $00 + +MaxLeftXSpdData: + .db $d8, $e8, $f0 + +MaxRightXSpdData: + .db $28, $18, $10 + .db $0c ;used for pipe intros + +FrictionData: + .db $e4, $98, $d0 + +Climb_Y_SpeedData: + .db $00, $ff, $01 + +Climb_Y_MForceData: + .db $00, $20, $ff + +PlayerPhysicsSub: + lda Player_State ;check player state + cmp #$03 + bne CheckForJumping ;if not climbing, branch + ldy #$00 + lda Up_Down_Buttons ;get controller bits for up/down + and Player_CollisionBits ;check against player's collision detection bits + beq ProcClimb ;if not pressing up or down, branch + iny + and #%00001000 ;check for pressing up + bne ProcClimb + iny +ProcClimb: ldx Climb_Y_MForceData,y ;load value here + stx Player_Y_MoveForce ;store as vertical movement force + lda #$08 ;load default animation timing + ldx Climb_Y_SpeedData,y ;load some other value here + stx Player_Y_Speed ;store as vertical speed + bmi SetCAnim ;if climbing down, use default animation timing value + lsr ;otherwise divide timer setting by 2 +SetCAnim: sta PlayerAnimTimerSet ;store animation timer setting and leave + rts + +CheckForJumping: + lda JumpspringAnimCtrl ;if jumpspring animating, + bne NoJump ;skip ahead to something else + lda A_B_Buttons ;check for A button press + and #A_Button + beq NoJump ;if not, branch to something else + and PreviousA_B_Buttons ;if button not pressed in previous frame, branch + beq ProcJumping +NoJump: jmp X_Physics ;otherwise, jump to something else + +ProcJumping: + lda Player_State ;check player state + beq InitJS ;if on the ground, branch + lda SwimmingFlag ;if swimming flag not set, jump to do something else + beq NoJump ;to prevent midair jumping, otherwise continue + lda JumpSwimTimer ;if jump/swim timer nonzero, branch + bne InitJS + lda Player_Y_Speed ;check player's vertical speed + bpl InitJS ;if player's vertical speed motionless or down, branch + jmp X_Physics ;if timer at zero and player still rising, do not swim +InitJS: lda #$20 ;set jump/swim timer + sta JumpSwimTimer + ldy #$00 ;initialize vertical force and dummy variable + sty Player_YMF_Dummy + sty Player_Y_MoveForce + lda Player_Y_HighPos ;get vertical high and low bytes of jump origin + sta JumpOrigin_Y_HighPos ;and store them next to each other here + lda Player_Y_Position + sta JumpOrigin_Y_Position + lda #$01 ;set player state to jumping/swimming + sta Player_State + lda Player_XSpeedAbsolute ;check value related to walking/running speed + cmp #$09 + bcc ChkWtr ;branch if below certain values, increment Y + iny ;for each amount equal or exceeded + cmp #$10 + bcc ChkWtr + iny + cmp #$19 + bcc ChkWtr + iny + cmp #$1c + bcc ChkWtr ;note that for jumping, range is 0-4 for Y + iny +ChkWtr: lda #$01 ;set value here (apparently always set to 1) + sta DiffToHaltJump + lda SwimmingFlag ;if swimming flag disabled, branch + beq GetYPhy + ldy #$05 ;otherwise set Y to 5, range is 5-6 + lda Whirlpool_Flag ;if whirlpool flag not set, branch + beq GetYPhy + iny ;otherwise increment to 6 +GetYPhy: lda JumpMForceData,y ;store appropriate jump/swim + sta VerticalForce ;data here + lda FallMForceData,y + sta VerticalForceDown + lda InitMForceData,y + sta Player_Y_MoveForce + lda PlayerYSpdData,y + sta Player_Y_Speed + lda SwimmingFlag ;if swimming flag disabled, branch + beq PJumpSnd + lda #Sfx_EnemyStomp ;load swim/goomba stomp sound into + sta Square1SoundQueue ;square 1's sfx queue + lda Player_Y_Position + cmp #$14 ;check vertical low byte of player position + bcs X_Physics ;if below a certain point, branch + lda #$00 ;otherwise reset player's vertical speed + sta Player_Y_Speed ;and jump to something else to keep player + jmp X_Physics ;from swimming above water level +PJumpSnd: lda #Sfx_BigJump ;load big mario's jump sound by default + ldy PlayerSize ;is mario big? + beq SJumpSnd + lda #Sfx_SmallJump ;if not, load small mario's jump sound +SJumpSnd: sta Square1SoundQueue ;store appropriate jump sound in square 1 sfx queue +X_Physics: ldy #$00 + sty $00 ;init value here + lda Player_State ;if mario is on the ground, branch + beq ProcPRun + lda Player_XSpeedAbsolute ;check something that seems to be related + cmp #$19 ;to mario's speed + bcs GetXPhy ;if =>$19 branch here + bcc ChkRFast ;if not branch elsewhere +ProcPRun: iny ;if mario on the ground, increment Y + lda AreaType ;check area type + beq ChkRFast ;if water type, branch + dey ;decrement Y by default for non-water type area + lda Left_Right_Buttons ;get left/right controller bits + cmp Player_MovingDir ;check against moving direction + bne ChkRFast ;if controller bits <> moving direction, skip this part + lda A_B_Buttons ;check for b button pressed + and #B_Button + bne SetRTmr ;if pressed, skip ahead to set timer + lda RunningTimer ;check for running timer set + bne GetXPhy ;if set, branch +ChkRFast: iny ;if running timer not set or level type is water, + inc $00 ;increment Y again and temp variable in memory + lda RunningSpeed + bne FastXSp ;if running speed set here, branch + lda Player_XSpeedAbsolute + cmp #$21 ;otherwise check player's walking/running speed + bcc GetXPhy ;if less than a certain amount, branch ahead +FastXSp: inc $00 ;if running speed set or speed => $21 increment $00 + jmp GetXPhy ;and jump ahead +SetRTmr: lda #$0a ;if b button pressed, set running timer + sta RunningTimer +GetXPhy: lda MaxLeftXSpdData,y ;get maximum speed to the left + sta MaximumLeftSpeed + lda GameEngineSubroutine ;check for specific routine running + cmp #$07 ;(player entrance) + bne GetXPhy2 ;if not running, skip and use old value of Y + ldy #$03 ;otherwise set Y to 3 +GetXPhy2: lda MaxRightXSpdData,y ;get maximum speed to the right + sta MaximumRightSpeed + ldy $00 ;get other value in memory + lda FrictionData,y ;get value using value in memory as offset + sta FrictionAdderLow + lda #$00 + sta FrictionAdderHigh ;init something here + lda PlayerFacingDir + cmp Player_MovingDir ;check facing direction against moving direction + beq ExitPhy ;if the same, branch to leave + asl FrictionAdderLow ;otherwise shift d7 of friction adder low into carry + rol FrictionAdderHigh ;then rotate carry onto d0 of friction adder high +ExitPhy: rts ;and then leave + +;------------------------------------------------------------------------------------- + +PlayerAnimTmrData: + .db $02, $04, $07 + +GetPlayerAnimSpeed: + ldy #$00 ;initialize offset in Y + lda Player_XSpeedAbsolute ;check player's walking/running speed + cmp #$1c ;against preset amount + bcs SetRunSpd ;if greater than a certain amount, branch ahead + iny ;otherwise increment Y + cmp #$0e ;compare against lower amount + bcs ChkSkid ;if greater than this but not greater than first, skip increment + iny ;otherwise increment Y again +ChkSkid: lda SavedJoypadBits ;get controller bits + and #%01111111 ;mask out A button + beq SetAnimSpd ;if no other buttons pressed, branch ahead of all this + and #$03 ;mask out all others except left and right + cmp Player_MovingDir ;check against moving direction + bne ProcSkid ;if left/right controller bits <> moving direction, branch + lda #$00 ;otherwise set zero value here +SetRunSpd: sta RunningSpeed ;store zero or running speed here + jmp SetAnimSpd +ProcSkid: lda Player_XSpeedAbsolute ;check player's walking/running speed + cmp #$0b ;against one last amount + bcs SetAnimSpd ;if greater than this amount, branch + lda PlayerFacingDir + sta Player_MovingDir ;otherwise use facing direction to set moving direction + lda #$00 + sta Player_X_Speed ;nullify player's horizontal speed + sta Player_X_MoveForce ;and dummy variable for player +SetAnimSpd: lda PlayerAnimTmrData,y ;get animation timer setting using Y as offset + sta PlayerAnimTimerSet + rts + +;------------------------------------------------------------------------------------- + +ImposeFriction: + and Player_CollisionBits ;perform AND between left/right controller bits and collision flag + cmp #$00 ;then compare to zero (this instruction is redundant) + bne JoypFrict ;if any bits set, branch to next part + lda Player_X_Speed + beq SetAbsSpd ;if player has no horizontal speed, branch ahead to last part + bpl RghtFrict ;if player moving to the right, branch to slow + bmi LeftFrict ;otherwise logic dictates player moving left, branch to slow +JoypFrict: lsr ;put right controller bit into carry + bcc RghtFrict ;if left button pressed, carry = 0, thus branch +LeftFrict: lda Player_X_MoveForce ;load value set here + clc + adc FrictionAdderLow ;add to it another value set here + sta Player_X_MoveForce ;store here + lda Player_X_Speed + adc FrictionAdderHigh ;add value plus carry to horizontal speed + sta Player_X_Speed ;set as new horizontal speed + cmp MaximumRightSpeed ;compare against maximum value for right movement + bmi XSpdSign ;if horizontal speed greater negatively, branch + lda MaximumRightSpeed ;otherwise set preset value as horizontal speed + sta Player_X_Speed ;thus slowing the player's left movement down + jmp SetAbsSpd ;skip to the end +RghtFrict: lda Player_X_MoveForce ;load value set here + sec + sbc FrictionAdderLow ;subtract from it another value set here + sta Player_X_MoveForce ;store here + lda Player_X_Speed + sbc FrictionAdderHigh ;subtract value plus borrow from horizontal speed + sta Player_X_Speed ;set as new horizontal speed + cmp MaximumLeftSpeed ;compare against maximum value for left movement + bpl XSpdSign ;if horizontal speed greater positively, branch + lda MaximumLeftSpeed ;otherwise set preset value as horizontal speed + sta Player_X_Speed ;thus slowing the player's right movement down +XSpdSign: cmp #$00 ;if player not moving or moving to the right, + bpl SetAbsSpd ;branch and leave horizontal speed value unmodified + eor #$ff + clc ;otherwise get two's compliment to get absolute + adc #$01 ;unsigned walking/running speed +SetAbsSpd: sta Player_XSpeedAbsolute ;store walking/running speed here and leave + rts + +;------------------------------------------------------------------------------------- +;$00 - used to store downward movement force in FireballObjCore +;$02 - used to store maximum vertical speed in FireballObjCore +;$07 - used to store pseudorandom bit in BubbleCheck + +ProcFireball_Bubble: + lda PlayerStatus ;check player's status + cmp #$02 + bcc ProcAirBubbles ;if not fiery, branch + lda A_B_Buttons + and #B_Button ;check for b button pressed + beq ProcFireballs ;branch if not pressed + and PreviousA_B_Buttons + bne ProcFireballs ;if button pressed in previous frame, branch + lda FireballCounter ;load fireball counter + and #%00000001 ;get LSB and use as offset for buffer + tax + lda Fireball_State,x ;load fireball state + bne ProcFireballs ;if not inactive, branch + ldy Player_Y_HighPos ;if player too high or too low, branch + dey + bne ProcFireballs + lda CrouchingFlag ;if player crouching, branch + bne ProcFireballs + lda Player_State ;if player's state = climbing, branch + cmp #$03 + beq ProcFireballs + lda #Sfx_Fireball ;play fireball sound effect + sta Square1SoundQueue + lda #$02 ;load state + sta Fireball_State,x + ldy PlayerAnimTimerSet ;copy animation frame timer setting + sty FireballThrowingTimer ;into fireball throwing timer + dey + sty PlayerAnimTimer ;decrement and store in player's animation timer + inc FireballCounter ;increment fireball counter + +ProcFireballs: + ldx #$00 + jsr FireballObjCore ;process first fireball object + ldx #$01 + jsr FireballObjCore ;process second fireball object, then do air bubbles + +ProcAirBubbles: + lda AreaType ;if not water type level, skip the rest of this + bne BublExit + ldx #$02 ;otherwise load counter and use as offset +BublLoop: stx ObjectOffset ;store offset + jsr BubbleCheck ;check timers and coordinates, create air bubble + jsr RelativeBubblePosition ;get relative coordinates + jsr GetBubbleOffscreenBits ;get offscreen information + jsr DrawBubble ;draw the air bubble + dex + bpl BublLoop ;do this until all three are handled +BublExit: rts ;then leave + +FireballXSpdData: + .db $40, $c0 + +FireballObjCore: + stx ObjectOffset ;store offset as current object + lda Fireball_State,x ;check for d7 = 1 + asl + bcs FireballExplosion ;if so, branch to get relative coordinates and draw explosion + ldy Fireball_State,x ;if fireball inactive, branch to leave + beq NoFBall + dey ;if fireball state set to 1, skip this part and just run it + beq RunFB + lda Player_X_Position ;get player's horizontal position + adc #$04 ;add four pixels and store as fireball's horizontal position + sta Fireball_X_Position,x + lda Player_PageLoc ;get player's page location + adc #$00 ;add carry and store as fireball's page location + sta Fireball_PageLoc,x + lda Player_Y_Position ;get player's vertical position and store + sta Fireball_Y_Position,x + lda #$01 ;set high byte of vertical position + sta Fireball_Y_HighPos,x + ldy PlayerFacingDir ;get player's facing direction + dey ;decrement to use as offset here + lda FireballXSpdData,y ;set horizontal speed of fireball accordingly + sta Fireball_X_Speed,x + lda #$04 ;set vertical speed of fireball + sta Fireball_Y_Speed,x + lda #$07 + sta Fireball_BoundBoxCtrl,x ;set bounding box size control for fireball + dec Fireball_State,x ;decrement state to 1 to skip this part from now on +RunFB: txa ;add 7 to offset to use + clc ;as fireball offset for next routines + adc #$07 + tax + lda #$50 ;set downward movement force here + sta $00 + lda #$03 ;set maximum speed here + sta $02 + lda #$00 + jsr ImposeGravity ;do sub here to impose gravity on fireball and move vertically + jsr MoveObjectHorizontally ;do another sub to move it horizontally + ldx ObjectOffset ;return fireball offset to X + jsr RelativeFireballPosition ;get relative coordinates + jsr GetFireballOffscreenBits ;get offscreen information + jsr GetFireballBoundBox ;get bounding box coordinates + jsr FireballBGCollision ;do fireball to background collision detection + lda FBall_OffscreenBits ;get fireball offscreen bits + and #%11001100 ;mask out certain bits + bne EraseFB ;if any bits still set, branch to kill fireball + jsr FireballEnemyCollision ;do fireball to enemy collision detection and deal with collisions + jmp DrawFireball ;draw fireball appropriately and leave +EraseFB: lda #$00 ;erase fireball state + sta Fireball_State,x +NoFBall: rts ;leave + +FireballExplosion: + jsr RelativeFireballPosition + jmp DrawExplosion_Fireball + +BubbleCheck: + lda PseudoRandomBitReg+1,x ;get part of LSFR + and #$01 + sta $07 ;store pseudorandom bit here + lda Bubble_Y_Position,x ;get vertical coordinate for air bubble + cmp #$f8 ;if offscreen coordinate not set, + bne MoveBubl ;branch to move air bubble + lda AirBubbleTimer ;if air bubble timer not expired, + bne ExitBubl ;branch to leave, otherwise create new air bubble + +SetupBubble: + ldy #$00 ;load default value here + lda PlayerFacingDir ;get player's facing direction + lsr ;move d0 to carry + bcc PosBubl ;branch to use default value if facing left + ldy #$08 ;otherwise load alternate value here +PosBubl: tya ;use value loaded as adder + adc Player_X_Position ;add to player's horizontal position + sta Bubble_X_Position,x ;save as horizontal position for airbubble + lda Player_PageLoc + adc #$00 ;add carry to player's page location + sta Bubble_PageLoc,x ;save as page location for airbubble + lda Player_Y_Position + clc ;add eight pixels to player's vertical position + adc #$08 + sta Bubble_Y_Position,x ;save as vertical position for air bubble + lda #$01 + sta Bubble_Y_HighPos,x ;set vertical high byte for air bubble + ldy $07 ;get pseudorandom bit, use as offset + lda BubbleTimerData,y ;get data for air bubble timer + sta AirBubbleTimer ;set air bubble timer +MoveBubl: ldy $07 ;get pseudorandom bit again, use as offset + lda Bubble_YMF_Dummy,x + sec ;subtract pseudorandom amount from dummy variable + sbc Bubble_MForceData,y + sta Bubble_YMF_Dummy,x ;save dummy variable + lda Bubble_Y_Position,x + sbc #$00 ;subtract borrow from airbubble's vertical coordinate + cmp #$20 ;if below the status bar, + bcs Y_Bubl ;branch to go ahead and use to move air bubble upwards + lda #$f8 ;otherwise set offscreen coordinate +Y_Bubl: sta Bubble_Y_Position,x ;store as new vertical coordinate for air bubble +ExitBubl: rts ;leave + +Bubble_MForceData: + .db $ff, $50 + +BubbleTimerData: + .db $40, $20 + +;------------------------------------------------------------------------------------- + +RunGameTimer: + lda OperMode ;get primary mode of operation + beq ExGTimer ;branch to leave if in title screen mode + lda GameEngineSubroutine + cmp #$08 ;if routine number less than eight running, + bcc ExGTimer ;branch to leave + cmp #$0b ;if running death routine, + beq ExGTimer ;branch to leave + lda Player_Y_HighPos + cmp #$02 ;if player below the screen, + bcs ExGTimer ;branch to leave regardless of level type + lda GameTimerCtrlTimer ;if game timer control not yet expired, + bne ExGTimer ;branch to leave + lda GameTimerDisplay + ora GameTimerDisplay+1 ;otherwise check game timer digits + ora GameTimerDisplay+2 + beq TimeUpOn ;if game timer digits at 000, branch to time-up code + ldy GameTimerDisplay ;otherwise check first digit + dey ;if first digit not on 1, + bne ResGTCtrl ;branch to reset game timer control + lda GameTimerDisplay+1 ;otherwise check second and third digits + ora GameTimerDisplay+2 + bne ResGTCtrl ;if timer not at 100, branch to reset game timer control + lda #TimeRunningOutMusic + sta EventMusicQueue ;otherwise load time running out music +ResGTCtrl: lda #$18 ;reset game timer control + sta GameTimerCtrlTimer + ldy #$23 ;set offset for last digit + lda #$ff ;set value to decrement game timer digit + sta DigitModifier+5 + jsr DigitsMathRoutine ;do sub to decrement game timer slowly + lda #$a4 ;set status nybbles to update game timer display + jmp PrintStatusBarNumbers ;do sub to update the display +TimeUpOn: sta PlayerStatus ;init player status (note A will always be zero here) + jsr ForceInjury ;do sub to kill the player (note player is small here) + inc GameTimerExpiredFlag ;set game timer expiration flag +ExGTimer: rts ;leave + +;------------------------------------------------------------------------------------- + +WarpZoneObject: + lda ScrollLock ;check for scroll lock flag + beq ExGTimer ;branch if not set to leave + lda Player_Y_Position ;check to see if player's vertical coordinate has + and Player_Y_HighPos ;same bits set as in vertical high byte (why?) + bne ExGTimer ;if so, branch to leave + sta ScrollLock ;otherwise nullify scroll lock flag + inc WarpZoneControl ;increment warp zone flag to make warp pipes for warp zone + jmp EraseEnemyObject ;kill this object + +;------------------------------------------------------------------------------------- +;$00 - used in WhirlpoolActivate to store whirlpool length / 2, page location of center of whirlpool +;and also to store movement force exerted on player +;$01 - used in ProcessWhirlpools to store page location of right extent of whirlpool +;and in WhirlpoolActivate to store center of whirlpool +;$02 - used in ProcessWhirlpools to store right extent of whirlpool and in +;WhirlpoolActivate to store maximum vertical speed + +ProcessWhirlpools: + lda AreaType ;check for water type level + bne ExitWh ;branch to leave if not found + sta Whirlpool_Flag ;otherwise initialize whirlpool flag + lda TimerControl ;if master timer control set, + bne ExitWh ;branch to leave + ldy #$04 ;otherwise start with last whirlpool data +WhLoop: lda Whirlpool_LeftExtent,y ;get left extent of whirlpool + clc + adc Whirlpool_Length,y ;add length of whirlpool + sta $02 ;store result as right extent here + lda Whirlpool_PageLoc,y ;get page location + beq NextWh ;if none or page 0, branch to get next data + adc #$00 ;add carry + sta $01 ;store result as page location of right extent here + lda Player_X_Position ;get player's horizontal position + sec + sbc Whirlpool_LeftExtent,y ;subtract left extent + lda Player_PageLoc ;get player's page location + sbc Whirlpool_PageLoc,y ;subtract borrow + bmi NextWh ;if player too far left, branch to get next data + lda $02 ;otherwise get right extent + sec + sbc Player_X_Position ;subtract player's horizontal coordinate + lda $01 ;get right extent's page location + sbc Player_PageLoc ;subtract borrow + bpl WhirlpoolActivate ;if player within right extent, branch to whirlpool code +NextWh: dey ;move onto next whirlpool data + bpl WhLoop ;do this until all whirlpools are checked +ExitWh: rts ;leave + +WhirlpoolActivate: + lda Whirlpool_Length,y ;get length of whirlpool + lsr ;divide by 2 + sta $00 ;save here + lda Whirlpool_LeftExtent,y ;get left extent of whirlpool + clc + adc $00 ;add length divided by 2 + sta $01 ;save as center of whirlpool + lda Whirlpool_PageLoc,y ;get page location + adc #$00 ;add carry + sta $00 ;save as page location of whirlpool center + lda FrameCounter ;get frame counter + lsr ;shift d0 into carry (to run on every other frame) + bcc WhPull ;if d0 not set, branch to last part of code + lda $01 ;get center + sec + sbc Player_X_Position ;subtract player's horizontal coordinate + lda $00 ;get page location of center + sbc Player_PageLoc ;subtract borrow + bpl LeftWh ;if player to the left of center, branch + lda Player_X_Position ;otherwise slowly pull player left, towards the center + sec + sbc #$01 ;subtract one pixel + sta Player_X_Position ;set player's new horizontal coordinate + lda Player_PageLoc + sbc #$00 ;subtract borrow + jmp SetPWh ;jump to set player's new page location +LeftWh: lda Player_CollisionBits ;get player's collision bits + lsr ;shift d0 into carry + bcc WhPull ;if d0 not set, branch + lda Player_X_Position ;otherwise slowly pull player right, towards the center + clc + adc #$01 ;add one pixel + sta Player_X_Position ;set player's new horizontal coordinate + lda Player_PageLoc + adc #$00 ;add carry +SetPWh: sta Player_PageLoc ;set player's new page location +WhPull: lda #$10 + sta $00 ;set vertical movement force + lda #$01 + sta Whirlpool_Flag ;set whirlpool flag to be used later + sta $02 ;also set maximum vertical speed + lsr + tax ;set X for player offset + jmp ImposeGravity ;jump to put whirlpool effect on player vertically, do not return + +;------------------------------------------------------------------------------------- + +FlagpoleScoreMods: + .db $05, $02, $08, $04, $01 + +FlagpoleScoreDigits: + .db $03, $03, $04, $04, $04 + +FlagpoleRoutine: + ldx #$05 ;set enemy object offset + stx ObjectOffset ;to special use slot + lda Enemy_ID,x + cmp #FlagpoleFlagObject ;if flagpole flag not found, + bne ExitFlagP ;branch to leave + lda GameEngineSubroutine + cmp #$04 ;if flagpole slide routine not running, + bne SkipScore ;branch to near the end of code + lda Player_State + cmp #$03 ;if player state not climbing, + bne SkipScore ;branch to near the end of code + lda Enemy_Y_Position,x ;check flagpole flag's vertical coordinate + cmp #$aa ;if flagpole flag down to a certain point, + bcs GiveFPScr ;branch to end the level + lda Player_Y_Position ;check player's vertical coordinate + cmp #$a2 ;if player down to a certain point, + bcs GiveFPScr ;branch to end the level + lda Enemy_YMF_Dummy,x + adc #$ff ;add movement amount to dummy variable + sta Enemy_YMF_Dummy,x ;save dummy variable + lda Enemy_Y_Position,x ;get flag's vertical coordinate + adc #$01 ;add 1 plus carry to move flag, and + sta Enemy_Y_Position,x ;store vertical coordinate + lda FlagpoleFNum_YMFDummy + sec ;subtract movement amount from dummy variable + sbc #$ff + sta FlagpoleFNum_YMFDummy ;save dummy variable + lda FlagpoleFNum_Y_Pos + sbc #$01 ;subtract one plus borrow to move floatey number, + sta FlagpoleFNum_Y_Pos ;and store vertical coordinate here +SkipScore: jmp FPGfx ;jump to skip ahead and draw flag and floatey number +GiveFPScr: ldy FlagpoleScore ;get score offset from earlier (when player touched flagpole) + lda FlagpoleScoreMods,y ;get amount to award player points + ldx FlagpoleScoreDigits,y ;get digit with which to award points + sta DigitModifier,x ;store in digit modifier + jsr AddToScore ;do sub to award player points depending on height of collision + lda #$05 + sta GameEngineSubroutine ;set to run end-of-level subroutine on next frame +FPGfx: jsr GetEnemyOffscreenBits ;get offscreen information + jsr RelativeEnemyPosition ;get relative coordinates + jsr FlagpoleGfxHandler ;draw flagpole flag and floatey number +ExitFlagP: rts + +;------------------------------------------------------------------------------------- + +Jumpspring_Y_PosData: + .db $08, $10, $08, $00 + +JumpspringHandler: + jsr GetEnemyOffscreenBits ;get offscreen information + lda TimerControl ;check master timer control + bne DrawJSpr ;branch to last section if set + lda JumpspringAnimCtrl ;check jumpspring frame control + beq DrawJSpr ;branch to last section if not set + tay + dey ;subtract one from frame control, + tya ;the only way a poor nmos 6502 can + and #%00000010 ;mask out all but d1, original value still in Y + bne DownJSpr ;if set, branch to move player up + inc Player_Y_Position + inc Player_Y_Position ;move player's vertical position down two pixels + jmp PosJSpr ;skip to next part +DownJSpr: dec Player_Y_Position ;move player's vertical position up two pixels + dec Player_Y_Position +PosJSpr: lda Jumpspring_FixedYPos,x ;get permanent vertical position + clc + adc Jumpspring_Y_PosData,y ;add value using frame control as offset + sta Enemy_Y_Position,x ;store as new vertical position + cpy #$01 ;check frame control offset (second frame is $00) + bcc BounceJS ;if offset not yet at third frame ($01), skip to next part + lda A_B_Buttons + and #A_Button ;check saved controller bits for A button press + beq BounceJS ;skip to next part if A not pressed + and PreviousA_B_Buttons ;check for A button pressed in previous frame + bne BounceJS ;skip to next part if so + lda #$f4 + sta JumpspringForce ;otherwise write new jumpspring force here +BounceJS: cpy #$03 ;check frame control offset again + bne DrawJSpr ;skip to last part if not yet at fifth frame ($03) + lda JumpspringForce + sta Player_Y_Speed ;store jumpspring force as player's new vertical speed + lda #$00 + sta JumpspringAnimCtrl ;initialize jumpspring frame control +DrawJSpr: jsr RelativeEnemyPosition ;get jumpspring's relative coordinates + jsr EnemyGfxHandler ;draw jumpspring + jsr OffscreenBoundsCheck ;check to see if we need to kill it + lda JumpspringAnimCtrl ;if frame control at zero, don't bother + beq ExJSpring ;trying to animate it, just leave + lda JumpspringTimer + bne ExJSpring ;if jumpspring timer not expired yet, leave + lda #$04 + sta JumpspringTimer ;otherwise initialize jumpspring timer + inc JumpspringAnimCtrl ;increment frame control to animate jumpspring +ExJSpring: rts ;leave + +;------------------------------------------------------------------------------------- + +Setup_Vine: + lda #VineObject ;load identifier for vine object + sta Enemy_ID,x ;store in buffer + lda #$01 + sta Enemy_Flag,x ;set flag for enemy object buffer + lda Block_PageLoc,y + sta Enemy_PageLoc,x ;copy page location from previous object + lda Block_X_Position,y + sta Enemy_X_Position,x ;copy horizontal coordinate from previous object + lda Block_Y_Position,y + sta Enemy_Y_Position,x ;copy vertical coordinate from previous object + ldy VineFlagOffset ;load vine flag/offset to next available vine slot + bne NextVO ;if set at all, don't bother to store vertical + sta VineStart_Y_Position ;otherwise store vertical coordinate here +NextVO: txa ;store object offset to next available vine slot + sta VineObjOffset,y ;using vine flag as offset + inc VineFlagOffset ;increment vine flag offset + lda #Sfx_GrowVine + sta Square2SoundQueue ;load vine grow sound + rts + +;------------------------------------------------------------------------------------- +;$06-$07 - used as address to block buffer data +;$02 - used as vertical high nybble of block buffer offset + +VineHeightData: + .db $30, $60 + +VineObjectHandler: + cpx #$05 ;check enemy offset for special use slot + bne ExitVH ;if not in last slot, branch to leave + ldy VineFlagOffset + dey ;decrement vine flag in Y, use as offset + lda VineHeight + cmp VineHeightData,y ;if vine has reached certain height, + beq RunVSubs ;branch ahead to skip this part + lda FrameCounter ;get frame counter + lsr ;shift d1 into carry + lsr + bcc RunVSubs ;if d1 not set (2 frames every 4) skip this part + lda Enemy_Y_Position+5 + sbc #$01 ;subtract vertical position of vine + sta Enemy_Y_Position+5 ;one pixel every frame it's time + inc VineHeight ;increment vine height +RunVSubs: lda VineHeight ;if vine still very small, + cmp #$08 ;branch to leave + bcc ExitVH + jsr RelativeEnemyPosition ;get relative coordinates of vine, + jsr GetEnemyOffscreenBits ;and any offscreen bits + ldy #$00 ;initialize offset used in draw vine sub +VDrawLoop: jsr DrawVine ;draw vine + iny ;increment offset + cpy VineFlagOffset ;if offset in Y and offset here + bne VDrawLoop ;do not yet match, loop back to draw more vine + lda Enemy_OffscreenBits + and #%00001100 ;mask offscreen bits + beq WrCMTile ;if none of the saved offscreen bits set, skip ahead + dey ;otherwise decrement Y to get proper offset again +KillVine: ldx VineObjOffset,y ;get enemy object offset for this vine object + jsr EraseEnemyObject ;kill this vine object + dey ;decrement Y + bpl KillVine ;if any vine objects left, loop back to kill it + sta VineFlagOffset ;initialize vine flag/offset + sta VineHeight ;initialize vine height +WrCMTile: lda VineHeight ;check vine height + cmp #$20 ;if vine small (less than 32 pixels tall) + bcc ExitVH ;then branch ahead to leave + ldx #$06 ;set offset in X to last enemy slot + lda #$01 ;set A to obtain horizontal in $04, but we don't care + ldy #$1b ;set Y to offset to get block at ($04, $10) of coordinates + jsr BlockBufferCollision ;do a sub to get block buffer address set, return contents + ldy $02 + cpy #$d0 ;if vertical high nybble offset beyond extent of + bcs ExitVH ;current block buffer, branch to leave, do not write + lda ($06),y ;otherwise check contents of block buffer at + bne ExitVH ;current offset, if not empty, branch to leave + lda #$26 + sta ($06),y ;otherwise, write climbing metatile to block buffer +ExitVH: ldx ObjectOffset ;get enemy object offset and leave + rts + +;------------------------------------------------------------------------------------- + +CannonBitmasks: + .db %00001111, %00000111 + +ProcessCannons: + lda AreaType ;get area type + beq ExCannon ;if water type area, branch to leave + ldx #$02 +ThreeSChk: stx ObjectOffset ;start at third enemy slot + lda Enemy_Flag,x ;check enemy buffer flag + bne Chk_BB ;if set, branch to check enemy + lda PseudoRandomBitReg+1,x ;otherwise get part of LSFR + ldy SecondaryHardMode ;get secondary hard mode flag, use as offset + and CannonBitmasks,y ;mask out bits of LSFR as decided by flag + cmp #$06 ;check to see if lower nybble is above certain value + bcs Chk_BB ;if so, branch to check enemy + tay ;transfer masked contents of LSFR to Y as pseudorandom offset + lda Cannon_PageLoc,y ;get page location + beq Chk_BB ;if not set or on page 0, branch to check enemy + lda Cannon_Timer,y ;get cannon timer + beq FireCannon ;if expired, branch to fire cannon + sbc #$00 ;otherwise subtract borrow (note carry will always be clear here) + sta Cannon_Timer,y ;to count timer down + jmp Chk_BB ;then jump ahead to check enemy + +FireCannon: + lda TimerControl ;if master timer control set, + bne Chk_BB ;branch to check enemy + lda #$0e ;otherwise we start creating one + sta Cannon_Timer,y ;first, reset cannon timer + lda Cannon_PageLoc,y ;get page location of cannon + sta Enemy_PageLoc,x ;save as page location of bullet bill + lda Cannon_X_Position,y ;get horizontal coordinate of cannon + sta Enemy_X_Position,x ;save as horizontal coordinate of bullet bill + lda Cannon_Y_Position,y ;get vertical coordinate of cannon + sec + sbc #$08 ;subtract eight pixels (because enemies are 24 pixels tall) + sta Enemy_Y_Position,x ;save as vertical coordinate of bullet bill + lda #$01 + sta Enemy_Y_HighPos,x ;set vertical high byte of bullet bill + sta Enemy_Flag,x ;set buffer flag + lsr ;shift right once to init A + sta Enemy_State,x ;then initialize enemy's state + lda #$09 + sta Enemy_BoundBoxCtrl,x ;set bounding box size control for bullet bill + lda #BulletBill_CannonVar + sta Enemy_ID,x ;load identifier for bullet bill (cannon variant) + jmp Next3Slt ;move onto next slot +Chk_BB: lda Enemy_ID,x ;check enemy identifier for bullet bill (cannon variant) + cmp #BulletBill_CannonVar + bne Next3Slt ;if not found, branch to get next slot + jsr OffscreenBoundsCheck ;otherwise, check to see if it went offscreen + lda Enemy_Flag,x ;check enemy buffer flag + beq Next3Slt ;if not set, branch to get next slot + jsr GetEnemyOffscreenBits ;otherwise, get offscreen information + jsr BulletBillHandler ;then do sub to handle bullet bill +Next3Slt: dex ;move onto next slot + bpl ThreeSChk ;do this until first three slots are checked +ExCannon: rts ;then leave + +;-------------------------------- + +BulletBillXSpdData: + .db $18, $e8 + +BulletBillHandler: + lda TimerControl ;if master timer control set, + bne RunBBSubs ;branch to run subroutines except movement sub + lda Enemy_State,x + bne ChkDSte ;if bullet bill's state set, branch to check defeated state + lda Enemy_OffscreenBits ;otherwise load offscreen bits + and #%00001100 ;mask out bits + cmp #%00001100 ;check to see if all bits are set + beq KillBB ;if so, branch to kill this object + ldy #$01 ;set to move right by default + jsr PlayerEnemyDiff ;get horizontal difference between player and bullet bill + bmi SetupBB ;if enemy to the left of player, branch + iny ;otherwise increment to move left +SetupBB: sty Enemy_MovingDir,x ;set bullet bill's moving direction + dey ;decrement to use as offset + lda BulletBillXSpdData,y ;get horizontal speed based on moving direction + sta Enemy_X_Speed,x ;and store it + lda $00 ;get horizontal difference + adc #$28 ;add 40 pixels + cmp #$50 ;if less than a certain amount, player is too close + bcc KillBB ;to cannon either on left or right side, thus branch + lda #$01 + sta Enemy_State,x ;otherwise set bullet bill's state + lda #$0a + sta EnemyFrameTimer,x ;set enemy frame timer + lda #Sfx_Blast + sta Square2SoundQueue ;play fireworks/gunfire sound +ChkDSte: lda Enemy_State,x ;check enemy state for d5 set + and #%00100000 + beq BBFly ;if not set, skip to move horizontally + jsr MoveD_EnemyVertically ;otherwise do sub to move bullet bill vertically +BBFly: jsr MoveEnemyHorizontally ;do sub to move bullet bill horizontally +RunBBSubs: jsr GetEnemyOffscreenBits ;get offscreen information + jsr RelativeEnemyPosition ;get relative coordinates + jsr GetEnemyBoundBox ;get bounding box coordinates + jsr PlayerEnemyCollision ;handle player to enemy collisions + jmp EnemyGfxHandler ;draw the bullet bill and leave +KillBB: jsr EraseEnemyObject ;kill bullet bill and leave + rts + +;------------------------------------------------------------------------------------- + +HammerEnemyOfsData: + .db $04, $04, $04, $05, $05, $05 + .db $06, $06, $06 + +HammerXSpdData: + .db $10, $f0 + +SpawnHammerObj: + lda PseudoRandomBitReg+1 ;get pseudorandom bits from + and #%00000111 ;second part of LSFR + bne SetMOfs ;if any bits are set, branch and use as offset + lda PseudoRandomBitReg+1 + and #%00001000 ;get d3 from same part of LSFR +SetMOfs: tay ;use either d3 or d2-d0 for offset here + lda Misc_State,y ;if any values loaded in + bne NoHammer ;$2a-$32 where offset is then leave with carry clear + ldx HammerEnemyOfsData,y ;get offset of enemy slot to check using Y as offset + lda Enemy_Flag,x ;check enemy buffer flag at offset + bne NoHammer ;if buffer flag set, branch to leave with carry clear + ldx ObjectOffset ;get original enemy object offset + txa + sta HammerEnemyOffset,y ;save here + lda #$90 + sta Misc_State,y ;save hammer's state here + lda #$07 + sta Misc_BoundBoxCtrl,y ;set something else entirely, here + sec ;return with carry set + rts +NoHammer: ldx ObjectOffset ;get original enemy object offset + clc ;return with carry clear + rts + +;-------------------------------- +;$00 - used to set downward force +;$01 - used to set upward force (residual) +;$02 - used to set maximum speed + +ProcHammerObj: + lda TimerControl ;if master timer control set + bne RunHSubs ;skip all of this code and go to last subs at the end + lda Misc_State,x ;otherwise get hammer's state + and #%01111111 ;mask out d7 + ldy HammerEnemyOffset,x ;get enemy object offset that spawned this hammer + cmp #$02 ;check hammer's state + beq SetHSpd ;if currently at 2, branch + bcs SetHPos ;if greater than 2, branch elsewhere + txa + clc ;add 13 bytes to use + adc #$0d ;proper misc object + tax ;return offset to X + lda #$10 + sta $00 ;set downward movement force + lda #$0f + sta $01 ;set upward movement force (not used) + lda #$04 + sta $02 ;set maximum vertical speed + lda #$00 ;set A to impose gravity on hammer + jsr ImposeGravity ;do sub to impose gravity on hammer and move vertically + jsr MoveObjectHorizontally ;do sub to move it horizontally + ldx ObjectOffset ;get original misc object offset + jmp RunAllH ;branch to essential subroutines +SetHSpd: lda #$fe + sta Misc_Y_Speed,x ;set hammer's vertical speed + lda Enemy_State,y ;get enemy object state + and #%11110111 ;mask out d3 + sta Enemy_State,y ;store new state + ldx Enemy_MovingDir,y ;get enemy's moving direction + dex ;decrement to use as offset + lda HammerXSpdData,x ;get proper speed to use based on moving direction + ldx ObjectOffset ;reobtain hammer's buffer offset + sta Misc_X_Speed,x ;set hammer's horizontal speed +SetHPos: dec Misc_State,x ;decrement hammer's state + lda Enemy_X_Position,y ;get enemy's horizontal position + clc + adc #$02 ;set position 2 pixels to the right + sta Misc_X_Position,x ;store as hammer's horizontal position + lda Enemy_PageLoc,y ;get enemy's page location + adc #$00 ;add carry + sta Misc_PageLoc,x ;store as hammer's page location + lda Enemy_Y_Position,y ;get enemy's vertical position + sec + sbc #$0a ;move position 10 pixels upward + sta Misc_Y_Position,x ;store as hammer's vertical position + lda #$01 + sta Misc_Y_HighPos,x ;set hammer's vertical high byte + bne RunHSubs ;unconditional branch to skip first routine +RunAllH: jsr PlayerHammerCollision ;handle collisions +RunHSubs: jsr GetMiscOffscreenBits ;get offscreen information + jsr RelativeMiscPosition ;get relative coordinates + jsr GetMiscBoundBox ;get bounding box coordinates + jsr DrawHammer ;draw the hammer + rts ;and we are done here + +;------------------------------------------------------------------------------------- +;$02 - used to store vertical high nybble offset from block buffer routine +;$06 - used to store low byte of block buffer address + +CoinBlock: + jsr FindEmptyMiscSlot ;set offset for empty or last misc object buffer slot + lda Block_PageLoc,x ;get page location of block object + sta Misc_PageLoc,y ;store as page location of misc object + lda Block_X_Position,x ;get horizontal coordinate of block object + ora #$05 ;add 5 pixels + sta Misc_X_Position,y ;store as horizontal coordinate of misc object + lda Block_Y_Position,x ;get vertical coordinate of block object + sbc #$10 ;subtract 16 pixels + sta Misc_Y_Position,y ;store as vertical coordinate of misc object + jmp JCoinC ;jump to rest of code as applies to this misc object + +SetupJumpCoin: + jsr FindEmptyMiscSlot ;set offset for empty or last misc object buffer slot + lda Block_PageLoc2,x ;get page location saved earlier + sta Misc_PageLoc,y ;and save as page location for misc object + lda $06 ;get low byte of block buffer offset + asl + asl ;multiply by 16 to use lower nybble + asl + asl + ora #$05 ;add five pixels + sta Misc_X_Position,y ;save as horizontal coordinate for misc object + lda $02 ;get vertical high nybble offset from earlier + adc #$20 ;add 32 pixels for the status bar + sta Misc_Y_Position,y ;store as vertical coordinate +JCoinC: lda #$fb + sta Misc_Y_Speed,y ;set vertical speed + lda #$01 + sta Misc_Y_HighPos,y ;set vertical high byte + sta Misc_State,y ;set state for misc object + sta Square2SoundQueue ;load coin grab sound + stx ObjectOffset ;store current control bit as misc object offset + jsr GiveOneCoin ;update coin tally on the screen and coin amount variable + inc CoinTallyFor1Ups ;increment coin tally used to activate 1-up block flag + rts + +FindEmptyMiscSlot: + ldy #$08 ;start at end of misc objects buffer +FMiscLoop: lda Misc_State,y ;get misc object state + beq UseMiscS ;branch if none found to use current offset + dey ;decrement offset + cpy #$05 ;do this for three slots + bne FMiscLoop ;do this until all slots are checked + ldy #$08 ;if no empty slots found, use last slot +UseMiscS: sty JumpCoinMiscOffset ;store offset of misc object buffer here (residual) + rts + +;------------------------------------------------------------------------------------- + +MiscObjectsCore: + ldx #$08 ;set at end of misc object buffer +MiscLoop: stx ObjectOffset ;store misc object offset here + lda Misc_State,x ;check misc object state + beq MiscLoopBack ;branch to check next slot + asl ;otherwise shift d7 into carry + bcc ProcJumpCoin ;if d7 not set, jumping coin, thus skip to rest of code here + jsr ProcHammerObj ;otherwise go to process hammer, + jmp MiscLoopBack ;then check next slot + +;-------------------------------- +;$00 - used to set downward force +;$01 - used to set upward force (residual) +;$02 - used to set maximum speed + +ProcJumpCoin: + ldy Misc_State,x ;check misc object state + dey ;decrement to see if it's set to 1 + beq JCoinRun ;if so, branch to handle jumping coin + inc Misc_State,x ;otherwise increment state to either start off or as timer + lda Misc_X_Position,x ;get horizontal coordinate for misc object + clc ;whether its jumping coin (state 0 only) or floatey number + adc ScrollAmount ;add current scroll speed + sta Misc_X_Position,x ;store as new horizontal coordinate + lda Misc_PageLoc,x ;get page location + adc #$00 ;add carry + sta Misc_PageLoc,x ;store as new page location + lda Misc_State,x + cmp #$30 ;check state of object for preset value + bne RunJCSubs ;if not yet reached, branch to subroutines + lda #$00 + sta Misc_State,x ;otherwise nullify object state + jmp MiscLoopBack ;and move onto next slot +JCoinRun: txa + clc ;add 13 bytes to offset for next subroutine + adc #$0d + tax + lda #$50 ;set downward movement amount + sta $00 + lda #$06 ;set maximum vertical speed + sta $02 + lsr ;divide by 2 and set + sta $01 ;as upward movement amount (apparently residual) + lda #$00 ;set A to impose gravity on jumping coin + jsr ImposeGravity ;do sub to move coin vertically and impose gravity on it + ldx ObjectOffset ;get original misc object offset + lda Misc_Y_Speed,x ;check vertical speed + cmp #$05 + bne RunJCSubs ;if not moving downward fast enough, keep state as-is + inc Misc_State,x ;otherwise increment state to change to floatey number +RunJCSubs: jsr RelativeMiscPosition ;get relative coordinates + jsr GetMiscOffscreenBits ;get offscreen information + jsr GetMiscBoundBox ;get bounding box coordinates (why?) + jsr JCoinGfxHandler ;draw the coin or floatey number + +MiscLoopBack: + dex ;decrement misc object offset + bpl MiscLoop ;loop back until all misc objects handled + rts ;then leave + +;------------------------------------------------------------------------------------- + +CoinTallyOffsets: + .db $17, $1d + +ScoreOffsets: + .db $0b, $11 + +StatusBarNybbles: + .db $02, $13 + +GiveOneCoin: + lda #$01 ;set digit modifier to add 1 coin + sta DigitModifier+5 ;to the current player's coin tally + ldx CurrentPlayer ;get current player on the screen + ldy CoinTallyOffsets,x ;get offset for player's coin tally + jsr DigitsMathRoutine ;update the coin tally + inc CoinTally ;increment onscreen player's coin amount + lda CoinTally + cmp #100 ;does player have 100 coins yet? + bne CoinPoints ;if not, skip all of this + lda #$00 + sta CoinTally ;otherwise, reinitialize coin amount + inc NumberofLives ;give the player an extra life + lda #Sfx_ExtraLife + sta Square2SoundQueue ;play 1-up sound + +CoinPoints: + lda #$02 ;set digit modifier to award + sta DigitModifier+4 ;200 points to the player + +AddToScore: + ldx CurrentPlayer ;get current player + ldy ScoreOffsets,x ;get offset for player's score + jsr DigitsMathRoutine ;update the score internally with value in digit modifier + +GetSBNybbles: + ldy CurrentPlayer ;get current player + lda StatusBarNybbles,y ;get nybbles based on player, use to update score and coins + +UpdateNumber: + jsr PrintStatusBarNumbers ;print status bar numbers based on nybbles, whatever they be + ldy VRAM_Buffer1_Offset + lda VRAM_Buffer1-6,y ;check highest digit of score + bne NoZSup ;if zero, overwrite with space tile for zero suppression + lda #$24 + sta VRAM_Buffer1-6,y +NoZSup: ldx ObjectOffset ;get enemy object buffer offset + rts + +;------------------------------------------------------------------------------------- + +SetupPowerUp: + lda #PowerUpObject ;load power-up identifier into + sta Enemy_ID+5 ;special use slot of enemy object buffer + lda Block_PageLoc,x ;store page location of block object + sta Enemy_PageLoc+5 ;as page location of power-up object + lda Block_X_Position,x ;store horizontal coordinate of block object + sta Enemy_X_Position+5 ;as horizontal coordinate of power-up object + lda #$01 + sta Enemy_Y_HighPos+5 ;set vertical high byte of power-up object + lda Block_Y_Position,x ;get vertical coordinate of block object + sec + sbc #$08 ;subtract 8 pixels + sta Enemy_Y_Position+5 ;and use as vertical coordinate of power-up object +PwrUpJmp: lda #$01 ;this is a residual jump point in enemy object jump table + sta Enemy_State+5 ;set power-up object's state + sta Enemy_Flag+5 ;set buffer flag + lda #$03 + sta Enemy_BoundBoxCtrl+5 ;set bounding box size control for power-up object + lda PowerUpType + cmp #$02 ;check currently loaded power-up type + bcs PutBehind ;if star or 1-up, branch ahead + lda PlayerStatus ;otherwise check player's current status + cmp #$02 + bcc StrType ;if player not fiery, use status as power-up type + lsr ;otherwise shift right to force fire flower type +StrType: sta PowerUpType ;store type here +PutBehind: lda #%00100000 + sta Enemy_SprAttrib+5 ;set background priority bit + lda #Sfx_GrowPowerUp + sta Square2SoundQueue ;load power-up reveal sound and leave + rts + +;------------------------------------------------------------------------------------- + +PowerUpObjHandler: + ldx #$05 ;set object offset for last slot in enemy object buffer + stx ObjectOffset + lda Enemy_State+5 ;check power-up object's state + beq ExitPUp ;if not set, branch to leave + asl ;shift to check if d7 was set in object state + bcc GrowThePowerUp ;if not set, branch ahead to skip this part + lda TimerControl ;if master timer control set, + bne RunPUSubs ;branch ahead to enemy object routines + lda PowerUpType ;check power-up type + beq ShroomM ;if normal mushroom, branch ahead to move it + cmp #$03 + beq ShroomM ;if 1-up mushroom, branch ahead to move it + cmp #$02 + bne RunPUSubs ;if not star, branch elsewhere to skip movement + jsr MoveJumpingEnemy ;otherwise impose gravity on star power-up and make it jump + jsr EnemyJump ;note that green paratroopa shares the same code here + jmp RunPUSubs ;then jump to other power-up subroutines +ShroomM: jsr MoveNormalEnemy ;do sub to make mushrooms move + jsr EnemyToBGCollisionDet ;deal with collisions + jmp RunPUSubs ;run the other subroutines + +GrowThePowerUp: + lda FrameCounter ;get frame counter + and #$03 ;mask out all but 2 LSB + bne ChkPUSte ;if any bits set here, branch + dec Enemy_Y_Position+5 ;otherwise decrement vertical coordinate slowly + lda Enemy_State+5 ;load power-up object state + inc Enemy_State+5 ;increment state for next frame (to make power-up rise) + cmp #$11 ;if power-up object state not yet past 16th pixel, + bcc ChkPUSte ;branch ahead to last part here + lda #$10 + sta Enemy_X_Speed,x ;otherwise set horizontal speed + lda #%10000000 + sta Enemy_State+5 ;and then set d7 in power-up object's state + asl ;shift once to init A + sta Enemy_SprAttrib+5 ;initialize background priority bit set here + rol ;rotate A to set right moving direction + sta Enemy_MovingDir,x ;set moving direction +ChkPUSte: lda Enemy_State+5 ;check power-up object's state + cmp #$06 ;for if power-up has risen enough + bcc ExitPUp ;if not, don't even bother running these routines +RunPUSubs: jsr RelativeEnemyPosition ;get coordinates relative to screen + jsr GetEnemyOffscreenBits ;get offscreen bits + jsr GetEnemyBoundBox ;get bounding box coordinates + jsr DrawPowerUp ;draw the power-up object + jsr PlayerEnemyCollision ;check for collision with player + jsr OffscreenBoundsCheck ;check to see if it went offscreen +ExitPUp: rts ;and we're done + +;------------------------------------------------------------------------------------- +;These apply to all routines in this section unless otherwise noted: +;$00 - used to store metatile from block buffer routine +;$02 - used to store vertical high nybble offset from block buffer routine +;$05 - used to store metatile stored in A at beginning of PlayerHeadCollision +;$06-$07 - used as block buffer address indirect + +BlockYPosAdderData: + .db $04, $12 + +PlayerHeadCollision: + pha ;store metatile number to stack + lda #$11 ;load unbreakable block object state by default + ldx SprDataOffset_Ctrl ;load offset control bit here + ldy PlayerSize ;check player's size + bne DBlockSte ;if small, branch + lda #$12 ;otherwise load breakable block object state +DBlockSte: sta Block_State,x ;store into block object buffer + jsr DestroyBlockMetatile ;store blank metatile in vram buffer to write to name table + ldx SprDataOffset_Ctrl ;load offset control bit + lda $02 ;get vertical high nybble offset used in block buffer routine + sta Block_Orig_YPos,x ;set as vertical coordinate for block object + tay + lda $06 ;get low byte of block buffer address used in same routine + sta Block_BBuf_Low,x ;save as offset here to be used later + lda ($06),y ;get contents of block buffer at old address at $06, $07 + jsr BlockBumpedChk ;do a sub to check which block player bumped head on + sta $00 ;store metatile here + ldy PlayerSize ;check player's size + bne ChkBrick ;if small, use metatile itself as contents of A + tya ;otherwise init A (note: big = 0) +ChkBrick: bcc PutMTileB ;if no match was found in previous sub, skip ahead + ldy #$11 ;otherwise load unbreakable state into block object buffer + sty Block_State,x ;note this applies to both player sizes + lda #$c4 ;load empty block metatile into A for now + ldy $00 ;get metatile from before + cpy #$58 ;is it brick with coins (with line)? + beq StartBTmr ;if so, branch + cpy #$5d ;is it brick with coins (without line)? + bne PutMTileB ;if not, branch ahead to store empty block metatile +StartBTmr: lda BrickCoinTimerFlag ;check brick coin timer flag + bne ContBTmr ;if set, timer expired or counting down, thus branch + lda #$0b + sta BrickCoinTimer ;if not set, set brick coin timer + inc BrickCoinTimerFlag ;and set flag linked to it +ContBTmr: lda BrickCoinTimer ;check brick coin timer + bne PutOldMT ;if not yet expired, branch to use current metatile + ldy #$c4 ;otherwise use empty block metatile +PutOldMT: tya ;put metatile into A +PutMTileB: sta Block_Metatile,x ;store whatever metatile be appropriate here + jsr InitBlock_XY_Pos ;get block object horizontal coordinates saved + ldy $02 ;get vertical high nybble offset + lda #$23 + sta ($06),y ;write blank metatile $23 to block buffer + lda #$10 + sta BlockBounceTimer ;set block bounce timer + pla ;pull original metatile from stack + sta $05 ;and save here + ldy #$00 ;set default offset + lda CrouchingFlag ;is player crouching? + bne SmallBP ;if so, branch to increment offset + lda PlayerSize ;is player big? + beq BigBP ;if so, branch to use default offset +SmallBP: iny ;increment for small or big and crouching +BigBP: lda Player_Y_Position ;get player's vertical coordinate + clc + adc BlockYPosAdderData,y ;add value determined by size + and #$f0 ;mask out low nybble to get 16-pixel correspondence + sta Block_Y_Position,x ;save as vertical coordinate for block object + ldy Block_State,x ;get block object state + cpy #$11 + beq Unbreak ;if set to value loaded for unbreakable, branch + jsr BrickShatter ;execute code for breakable brick + jmp InvOBit ;skip subroutine to do last part of code here +Unbreak: jsr BumpBlock ;execute code for unbreakable brick or question block +InvOBit: lda SprDataOffset_Ctrl ;invert control bit used by block objects + eor #$01 ;and floatey numbers + sta SprDataOffset_Ctrl + rts ;leave! + +;-------------------------------- + +InitBlock_XY_Pos: + lda Player_X_Position ;get player's horizontal coordinate + clc + adc #$08 ;add eight pixels + and #$f0 ;mask out low nybble to give 16-pixel correspondence + sta Block_X_Position,x ;save as horizontal coordinate for block object + lda Player_PageLoc + adc #$00 ;add carry to page location of player + sta Block_PageLoc,x ;save as page location of block object + sta Block_PageLoc2,x ;save elsewhere to be used later + lda Player_Y_HighPos + sta Block_Y_HighPos,x ;save vertical high byte of player into + rts ;vertical high byte of block object and leave + +;-------------------------------- + +BumpBlock: + jsr CheckTopOfBlock ;check to see if there's a coin directly above this block + lda #Sfx_Bump + sta Square1SoundQueue ;play bump sound + lda #$00 + sta Block_X_Speed,x ;initialize horizontal speed for block object + sta Block_Y_MoveForce,x ;init fractional movement force + sta Player_Y_Speed ;init player's vertical speed + lda #$fe + sta Block_Y_Speed,x ;set vertical speed for block object + lda $05 ;get original metatile from stack + jsr BlockBumpedChk ;do a sub to check which block player bumped head on + bcc ExitBlockChk ;if no match was found, branch to leave + tya ;move block number to A + cmp #$09 ;if block number was within 0-8 range, + bcc BlockCode ;branch to use current number + sbc #$05 ;otherwise subtract 5 for second set to get proper number +BlockCode: jsr JumpEngine ;run appropriate subroutine depending on block number + + .dw MushFlowerBlock + .dw CoinBlock + .dw CoinBlock + .dw ExtraLifeMushBlock + .dw MushFlowerBlock + .dw VineBlock + .dw StarBlock + .dw CoinBlock + .dw ExtraLifeMushBlock + +;-------------------------------- + +MushFlowerBlock: + lda #$00 ;load mushroom/fire flower into power-up type + .db $2c ;BIT instruction opcode + +StarBlock: + lda #$02 ;load star into power-up type + .db $2c ;BIT instruction opcode + +ExtraLifeMushBlock: + lda #$03 ;load 1-up mushroom into power-up type + sta $39 ;store correct power-up type + jmp SetupPowerUp + +VineBlock: + ldx #$05 ;load last slot for enemy object buffer + ldy SprDataOffset_Ctrl ;get control bit + jsr Setup_Vine ;set up vine object + +ExitBlockChk: + rts ;leave + +;-------------------------------- + +BrickQBlockMetatiles: + .db $c1, $c0, $5f, $60 ;used by question blocks + + ;these two sets are functionally identical, but look different + .db $55, $56, $57, $58, $59 ;used by ground level types + .db $5a, $5b, $5c, $5d, $5e ;used by other level types + +BlockBumpedChk: + ldy #$0d ;start at end of metatile data +BumpChkLoop: cmp BrickQBlockMetatiles,y ;check to see if current metatile matches + beq MatchBump ;metatile found in block buffer, branch if so + dey ;otherwise move onto next metatile + bpl BumpChkLoop ;do this until all metatiles are checked + clc ;if none match, return with carry clear +MatchBump: rts ;note carry is set if found match + +;-------------------------------- + +BrickShatter: + jsr CheckTopOfBlock ;check to see if there's a coin directly above this block + lda #Sfx_BrickShatter + sta Block_RepFlag,x ;set flag for block object to immediately replace metatile + sta NoiseSoundQueue ;load brick shatter sound + jsr SpawnBrickChunks ;create brick chunk objects + lda #$fe + sta Player_Y_Speed ;set vertical speed for player + lda #$05 + sta DigitModifier+5 ;set digit modifier to give player 50 points + jsr AddToScore ;do sub to update the score + ldx SprDataOffset_Ctrl ;load control bit and leave + rts + +;-------------------------------- + +CheckTopOfBlock: + ldx SprDataOffset_Ctrl ;load control bit + ldy $02 ;get vertical high nybble offset used in block buffer + beq TopEx ;branch to leave if set to zero, because we're at the top + tya ;otherwise set to A + sec + sbc #$10 ;subtract $10 to move up one row in the block buffer + sta $02 ;store as new vertical high nybble offset + tay + lda ($06),y ;get contents of block buffer in same column, one row up + cmp #$c2 ;is it a coin? (not underwater) + bne TopEx ;if not, branch to leave + lda #$00 + sta ($06),y ;otherwise put blank metatile where coin was + jsr RemoveCoin_Axe ;write blank metatile to vram buffer + ldx SprDataOffset_Ctrl ;get control bit + jsr SetupJumpCoin ;create jumping coin object and update coin variables +TopEx: rts ;leave! + +;-------------------------------- + +SpawnBrickChunks: + lda Block_X_Position,x ;set horizontal coordinate of block object + sta Block_Orig_XPos,x ;as original horizontal coordinate here + lda #$f0 + sta Block_X_Speed,x ;set horizontal speed for brick chunk objects + sta Block_X_Speed+2,x + lda #$fa + sta Block_Y_Speed,x ;set vertical speed for one + lda #$fc + sta Block_Y_Speed+2,x ;set lower vertical speed for the other + lda #$00 + sta Block_Y_MoveForce,x ;init fractional movement force for both + sta Block_Y_MoveForce+2,x + lda Block_PageLoc,x + sta Block_PageLoc+2,x ;copy page location + lda Block_X_Position,x + sta Block_X_Position+2,x ;copy horizontal coordinate + lda Block_Y_Position,x + clc ;add 8 pixels to vertical coordinate + adc #$08 ;and save as vertical coordinate for one of them + sta Block_Y_Position+2,x + lda #$fa + sta Block_Y_Speed,x ;set vertical speed...again??? (redundant) + rts + +;------------------------------------------------------------------------------------- + +BlockObjectsCore: + lda Block_State,x ;get state of block object + beq UpdSte ;if not set, branch to leave + and #$0f ;mask out high nybble + pha ;push to stack + tay ;put in Y for now + txa + clc + adc #$09 ;add 9 bytes to offset (note two block objects are created + tax ;when using brick chunks, but only one offset for both) + dey ;decrement Y to check for solid block state + beq BouncingBlockHandler ;branch if found, otherwise continue for brick chunks + jsr ImposeGravityBlock ;do sub to impose gravity on one block object object + jsr MoveObjectHorizontally ;do another sub to move horizontally + txa + clc ;move onto next block object + adc #$02 + tax + jsr ImposeGravityBlock ;do sub to impose gravity on other block object + jsr MoveObjectHorizontally ;do another sub to move horizontally + ldx ObjectOffset ;get block object offset used for both + jsr RelativeBlockPosition ;get relative coordinates + jsr GetBlockOffscreenBits ;get offscreen information + jsr DrawBrickChunks ;draw the brick chunks + pla ;get lower nybble of saved state + ldy Block_Y_HighPos,x ;check vertical high byte of block object + beq UpdSte ;if above the screen, branch to kill it + pha ;otherwise save state back into stack + lda #$f0 + cmp Block_Y_Position+2,x ;check to see if bottom block object went + bcs ChkTop ;to the bottom of the screen, and branch if not + sta Block_Y_Position+2,x ;otherwise set offscreen coordinate +ChkTop: lda Block_Y_Position,x ;get top block object's vertical coordinate + cmp #$f0 ;see if it went to the bottom of the screen + pla ;pull block object state from stack + bcc UpdSte ;if not, branch to save state + bcs KillBlock ;otherwise do unconditional branch to kill it + +BouncingBlockHandler: + jsr ImposeGravityBlock ;do sub to impose gravity on block object + ldx ObjectOffset ;get block object offset + jsr RelativeBlockPosition ;get relative coordinates + jsr GetBlockOffscreenBits ;get offscreen information + jsr DrawBlock ;draw the block + lda Block_Y_Position,x ;get vertical coordinate + and #$0f ;mask out high nybble + cmp #$05 ;check to see if low nybble wrapped around + pla ;pull state from stack + bcs UpdSte ;if still above amount, not time to kill block yet, thus branch + lda #$01 + sta Block_RepFlag,x ;otherwise set flag to replace metatile +KillBlock: lda #$00 ;if branched here, nullify object state +UpdSte: sta Block_State,x ;store contents of A in block object state + rts + +;------------------------------------------------------------------------------------- +;$02 - used to store offset to block buffer +;$06-$07 - used to store block buffer address + +BlockObjMT_Updater: + ldx #$01 ;set offset to start with second block object +UpdateLoop: stx ObjectOffset ;set offset here + lda VRAM_Buffer1 ;if vram buffer already being used here, + bne NextBUpd ;branch to move onto next block object + lda Block_RepFlag,x ;if flag for block object already clear, + beq NextBUpd ;branch to move onto next block object + lda Block_BBuf_Low,x ;get low byte of block buffer + sta $06 ;store into block buffer address + lda #$05 + sta $07 ;set high byte of block buffer address + lda Block_Orig_YPos,x ;get original vertical coordinate of block object + sta $02 ;store here and use as offset to block buffer + tay + lda Block_Metatile,x ;get metatile to be written + sta ($06),y ;write it to the block buffer + jsr ReplaceBlockMetatile ;do sub to replace metatile where block object is + lda #$00 + sta Block_RepFlag,x ;clear block object flag +NextBUpd: dex ;decrement block object offset + bpl UpdateLoop ;do this until both block objects are dealt with + rts ;then leave + +;------------------------------------------------------------------------------------- +;$00 - used to store high nybble of horizontal speed as adder +;$01 - used to store low nybble of horizontal speed +;$02 - used to store adder to page location + +MoveEnemyHorizontally: + inx ;increment offset for enemy offset + jsr MoveObjectHorizontally ;position object horizontally according to + ldx ObjectOffset ;counters, return with saved value in A, + rts ;put enemy offset back in X and leave + +MovePlayerHorizontally: + lda JumpspringAnimCtrl ;if jumpspring currently animating, + bne ExXMove ;branch to leave + tax ;otherwise set zero for offset to use player's stuff + +MoveObjectHorizontally: + lda SprObject_X_Speed,x ;get currently saved value (horizontal + asl ;speed, secondary counter, whatever) + asl ;and move low nybble to high + asl + asl + sta $01 ;store result here + lda SprObject_X_Speed,x ;get saved value again + lsr ;move high nybble to low + lsr + lsr + lsr + cmp #$08 ;if < 8, branch, do not change + bcc SaveXSpd + ora #%11110000 ;otherwise alter high nybble +SaveXSpd: sta $00 ;save result here + ldy #$00 ;load default Y value here + cmp #$00 ;if result positive, leave Y alone + bpl UseAdder + dey ;otherwise decrement Y +UseAdder: sty $02 ;save Y here + lda SprObject_X_MoveForce,x ;get whatever number's here + clc + adc $01 ;add low nybble moved to high + sta SprObject_X_MoveForce,x ;store result here + lda #$00 ;init A + rol ;rotate carry into d0 + pha ;push onto stack + ror ;rotate d0 back onto carry + lda SprObject_X_Position,x + adc $00 ;add carry plus saved value (high nybble moved to low + sta SprObject_X_Position,x ;plus $f0 if necessary) to object's horizontal position + lda SprObject_PageLoc,x + adc $02 ;add carry plus other saved value to the + sta SprObject_PageLoc,x ;object's page location and save + pla + clc ;pull old carry from stack and add + adc $00 ;to high nybble moved to low +ExXMove: rts ;and leave + +;------------------------------------------------------------------------------------- +;$00 - used for downward force +;$01 - used for upward force +;$02 - used for maximum vertical speed + +MovePlayerVertically: + ldx #$00 ;set X for player offset + lda TimerControl + bne NoJSChk ;if master timer control set, branch ahead + lda JumpspringAnimCtrl ;otherwise check to see if jumpspring is animating + bne ExXMove ;branch to leave if so +NoJSChk: lda VerticalForce ;dump vertical force + sta $00 + lda #$04 ;set maximum vertical speed here + jmp ImposeGravitySprObj ;then jump to move player vertically + +;-------------------------------- + +MoveD_EnemyVertically: + ldy #$3d ;set quick movement amount downwards + lda Enemy_State,x ;then check enemy state + cmp #$05 ;if not set to unique state for spiny's egg, go ahead + bne ContVMove ;and use, otherwise set different movement amount, continue on + +MoveFallingPlatform: + ldy #$20 ;set movement amount +ContVMove: jmp SetHiMax ;jump to skip the rest of this + +;-------------------------------- + +MoveRedPTroopaDown: + ldy #$00 ;set Y to move downwards + jmp MoveRedPTroopa ;skip to movement routine + +MoveRedPTroopaUp: + ldy #$01 ;set Y to move upwards + +MoveRedPTroopa: + inx ;increment X for enemy offset + lda #$03 + sta $00 ;set downward movement amount here + lda #$06 + sta $01 ;set upward movement amount here + lda #$02 + sta $02 ;set maximum speed here + tya ;set movement direction in A, and + jmp RedPTroopaGrav ;jump to move this thing + +;-------------------------------- + +MoveDropPlatform: + ldy #$7f ;set movement amount for drop platform + bne SetMdMax ;skip ahead of other value set here + +MoveEnemySlowVert: + ldy #$0f ;set movement amount for bowser/other objects +SetMdMax: lda #$02 ;set maximum speed in A + bne SetXMoveAmt ;unconditional branch + +;-------------------------------- + +MoveJ_EnemyVertically: + ldy #$1c ;set movement amount for podoboo/other objects +SetHiMax: lda #$03 ;set maximum speed in A +SetXMoveAmt: sty $00 ;set movement amount here + inx ;increment X for enemy offset + jsr ImposeGravitySprObj ;do a sub to move enemy object downwards + ldx ObjectOffset ;get enemy object buffer offset and leave + rts + +;-------------------------------- + +MaxSpdBlockData: + .db $06, $08 + +ResidualGravityCode: + ldy #$00 ;this part appears to be residual, + .db $2c ;no code branches or jumps to it... + +ImposeGravityBlock: + ldy #$01 ;set offset for maximum speed + lda #$50 ;set movement amount here + sta $00 + lda MaxSpdBlockData,y ;get maximum speed + +ImposeGravitySprObj: + sta $02 ;set maximum speed here + lda #$00 ;set value to move downwards + jmp ImposeGravity ;jump to the code that actually moves it + +;-------------------------------- + +MovePlatformDown: + lda #$00 ;save value to stack (if branching here, execute next + .db $2c ;part as BIT instruction) + +MovePlatformUp: + lda #$01 ;save value to stack + pha + ldy Enemy_ID,x ;get enemy object identifier + inx ;increment offset for enemy object + lda #$05 ;load default value here + cpy #$29 ;residual comparison, object #29 never executes + bne SetDplSpd ;this code, thus unconditional branch here + lda #$09 ;residual code +SetDplSpd: sta $00 ;save downward movement amount here + lda #$0a ;save upward movement amount here + sta $01 + lda #$03 ;save maximum vertical speed here + sta $02 + pla ;get value from stack + tay ;use as Y, then move onto code shared by red koopa + +RedPTroopaGrav: + jsr ImposeGravity ;do a sub to move object gradually + ldx ObjectOffset ;get enemy object offset and leave + rts + +;------------------------------------------------------------------------------------- +;$00 - used for downward force +;$01 - used for upward force +;$07 - used as adder for vertical position + +ImposeGravity: + pha ;push value to stack + lda SprObject_YMF_Dummy,x + clc ;add value in movement force to contents of dummy variable + adc SprObject_Y_MoveForce,x + sta SprObject_YMF_Dummy,x + ldy #$00 ;set Y to zero by default + lda SprObject_Y_Speed,x ;get current vertical speed + bpl AlterYP ;if currently moving downwards, do not decrement Y + dey ;otherwise decrement Y +AlterYP: sty $07 ;store Y here + adc SprObject_Y_Position,x ;add vertical position to vertical speed plus carry + sta SprObject_Y_Position,x ;store as new vertical position + lda SprObject_Y_HighPos,x + adc $07 ;add carry plus contents of $07 to vertical high byte + sta SprObject_Y_HighPos,x ;store as new vertical high byte + lda SprObject_Y_MoveForce,x + clc + adc $00 ;add downward movement amount to contents of $0433 + sta SprObject_Y_MoveForce,x + lda SprObject_Y_Speed,x ;add carry to vertical speed and store + adc #$00 + sta SprObject_Y_Speed,x + cmp $02 ;compare to maximum speed + bmi ChkUpM ;if less than preset value, skip this part + lda SprObject_Y_MoveForce,x + cmp #$80 ;if less positively than preset maximum, skip this part + bcc ChkUpM + lda $02 + sta SprObject_Y_Speed,x ;keep vertical speed within maximum value + lda #$00 + sta SprObject_Y_MoveForce,x ;clear fractional +ChkUpM: pla ;get value from stack + beq ExVMove ;if set to zero, branch to leave + lda $02 + eor #%11111111 ;otherwise get two's compliment of maximum speed + tay + iny + sty $07 ;store two's compliment here + lda SprObject_Y_MoveForce,x + sec ;subtract upward movement amount from contents + sbc $01 ;of movement force, note that $01 is twice as large as $00, + sta SprObject_Y_MoveForce,x ;thus it effectively undoes add we did earlier + lda SprObject_Y_Speed,x + sbc #$00 ;subtract borrow from vertical speed and store + sta SprObject_Y_Speed,x + cmp $07 ;compare vertical speed to two's compliment + bpl ExVMove ;if less negatively than preset maximum, skip this part + lda SprObject_Y_MoveForce,x + cmp #$80 ;check if fractional part is above certain amount, + bcs ExVMove ;and if so, branch to leave + lda $07 + sta SprObject_Y_Speed,x ;keep vertical speed within maximum value + lda #$ff + sta SprObject_Y_MoveForce,x ;clear fractional +ExVMove: rts ;leave! + +;------------------------------------------------------------------------------------- + +EnemiesAndLoopsCore: + lda Enemy_Flag,x ;check data here for MSB set + pha ;save in stack + asl + bcs ChkBowserF ;if MSB set in enemy flag, branch ahead of jumps + pla ;get from stack + beq ChkAreaTsk ;if data zero, branch + jmp RunEnemyObjectsCore ;otherwise, jump to run enemy subroutines +ChkAreaTsk: lda AreaParserTaskNum ;check number of tasks to perform + and #$07 + cmp #$07 ;if at a specific task, jump and leave + beq ExitELCore + jmp ProcLoopCommand ;otherwise, jump to process loop command/load enemies +ChkBowserF: pla ;get data from stack + and #%00001111 ;mask out high nybble + tay + lda Enemy_Flag,y ;use as pointer and load same place with different offset + bne ExitELCore + sta Enemy_Flag,x ;if second enemy flag not set, also clear first one +ExitELCore: rts + +;-------------------------------- + +;loop command data +LoopCmdWorldNumber: + .db $03, $03, $06, $06, $06, $06, $06, $06, $07, $07, $07 + +LoopCmdPageNumber: + .db $05, $09, $04, $05, $06, $08, $09, $0a, $06, $0b, $10 + +LoopCmdYPosition: + .db $40, $b0, $b0, $80, $40, $40, $80, $40, $f0, $f0, $f0 + +ExecGameLoopback: + lda Player_PageLoc ;send player back four pages + sec + sbc #$04 + sta Player_PageLoc + lda CurrentPageLoc ;send current page back four pages + sec + sbc #$04 + sta CurrentPageLoc + lda ScreenLeft_PageLoc ;subtract four from page location + sec ;of screen's left border + sbc #$04 + sta ScreenLeft_PageLoc + lda ScreenRight_PageLoc ;do the same for the page location + sec ;of screen's right border + sbc #$04 + sta ScreenRight_PageLoc + lda AreaObjectPageLoc ;subtract four from page control + sec ;for area objects + sbc #$04 + sta AreaObjectPageLoc + lda #$00 ;initialize page select for both + sta EnemyObjectPageSel ;area and enemy objects + sta AreaObjectPageSel + sta EnemyDataOffset ;initialize enemy object data offset + sta EnemyObjectPageLoc ;and enemy object page control + lda AreaDataOfsLoopback,y ;adjust area object offset based on + sta AreaDataOffset ;which loop command we encountered + rts + +ProcLoopCommand: + lda LoopCommand ;check if loop command was found + beq ChkEnemyFrenzy + lda CurrentColumnPos ;check to see if we're still on the first page + bne ChkEnemyFrenzy ;if not, do not loop yet + ldy #$0b ;start at the end of each set of loop data +FindLoop: dey + bmi ChkEnemyFrenzy ;if all data is checked and not match, do not loop + lda WorldNumber ;check to see if one of the world numbers + cmp LoopCmdWorldNumber,y ;matches our current world number + bne FindLoop + lda CurrentPageLoc ;check to see if one of the page numbers + cmp LoopCmdPageNumber,y ;matches the page we're currently on + bne FindLoop + lda Player_Y_Position ;check to see if the player is at the correct position + cmp LoopCmdYPosition,y ;if not, branch to check for world 7 + bne WrongChk + lda Player_State ;check to see if the player is + cmp #$00 ;on solid ground (i.e. not jumping or falling) + bne WrongChk ;if not, player fails to pass loop, and loopback + lda WorldNumber ;are we in world 7? (check performed on correct + cmp #World7 ;vertical position and on solid ground) + bne InitMLp ;if not, initialize flags used there, otherwise + inc MultiLoopCorrectCntr ;increment counter for correct progression +IncMLoop: inc MultiLoopPassCntr ;increment master multi-part counter + lda MultiLoopPassCntr ;have we done all three parts? + cmp #$03 + bne InitLCmd ;if not, skip this part + lda MultiLoopCorrectCntr ;if so, have we done them all correctly? + cmp #$03 + beq InitMLp ;if so, branch past unnecessary check here + bne DoLpBack ;unconditional branch if previous branch fails +WrongChk: lda WorldNumber ;are we in world 7? (check performed on + cmp #World7 ;incorrect vertical position or not on solid ground) + beq IncMLoop +DoLpBack: jsr ExecGameLoopback ;if player is not in right place, loop back + jsr KillAllEnemies +InitMLp: lda #$00 ;initialize counters used for multi-part loop commands + sta MultiLoopPassCntr + sta MultiLoopCorrectCntr +InitLCmd: lda #$00 ;initialize loop command flag + sta LoopCommand + +;-------------------------------- + +ChkEnemyFrenzy: + lda EnemyFrenzyQueue ;check for enemy object in frenzy queue + beq ProcessEnemyData ;if not, skip this part + sta Enemy_ID,x ;store as enemy object identifier here + lda #$01 + sta Enemy_Flag,x ;activate enemy object flag + lda #$00 + sta Enemy_State,x ;initialize state and frenzy queue + sta EnemyFrenzyQueue + jmp InitEnemyObject ;and then jump to deal with this enemy + +;-------------------------------- +;$06 - used to hold page location of extended right boundary +;$07 - used to hold high nybble of position of extended right boundary + +ProcessEnemyData: + ldy EnemyDataOffset ;get offset of enemy object data + lda (EnemyData),y ;load first byte + cmp #$ff ;check for EOD terminator + bne CheckEndofBuffer + jmp CheckFrenzyBuffer ;if found, jump to check frenzy buffer, otherwise + +CheckEndofBuffer: + and #%00001111 ;check for special row $0e + cmp #$0e + beq CheckRightBounds ;if found, branch, otherwise + cpx #$05 ;check for end of buffer + bcc CheckRightBounds ;if not at end of buffer, branch + iny + lda (EnemyData),y ;check for specific value here + and #%00111111 ;not sure what this was intended for, exactly + cmp #$2e ;this part is quite possibly residual code + beq CheckRightBounds ;but it has the effect of keeping enemies out of + rts ;the sixth slot + +CheckRightBounds: + lda ScreenRight_X_Pos ;add 48 to pixel coordinate of right boundary + clc + adc #$30 + and #%11110000 ;store high nybble + sta $07 + lda ScreenRight_PageLoc ;add carry to page location of right boundary + adc #$00 + sta $06 ;store page location + carry + ldy EnemyDataOffset + iny + lda (EnemyData),y ;if MSB of enemy object is clear, branch to check for row $0f + asl + bcc CheckPageCtrlRow + lda EnemyObjectPageSel ;if page select already set, do not set again + bne CheckPageCtrlRow + inc EnemyObjectPageSel ;otherwise, if MSB is set, set page select + inc EnemyObjectPageLoc ;and increment page control + +CheckPageCtrlRow: + dey + lda (EnemyData),y ;reread first byte + and #$0f + cmp #$0f ;check for special row $0f + bne PositionEnemyObj ;if not found, branch to position enemy object + lda EnemyObjectPageSel ;if page select set, + bne PositionEnemyObj ;branch without reading second byte + iny + lda (EnemyData),y ;otherwise, get second byte, mask out 2 MSB + and #%00111111 + sta EnemyObjectPageLoc ;store as page control for enemy object data + inc EnemyDataOffset ;increment enemy object data offset 2 bytes + inc EnemyDataOffset + inc EnemyObjectPageSel ;set page select for enemy object data and + jmp ProcLoopCommand ;jump back to process loop commands again + +PositionEnemyObj: + lda EnemyObjectPageLoc ;store page control as page location + sta Enemy_PageLoc,x ;for enemy object + lda (EnemyData),y ;get first byte of enemy object + and #%11110000 + sta Enemy_X_Position,x ;store column position + cmp ScreenRight_X_Pos ;check column position against right boundary + lda Enemy_PageLoc,x ;without subtracting, then subtract borrow + sbc ScreenRight_PageLoc ;from page location + bcs CheckRightExtBounds ;if enemy object beyond or at boundary, branch + lda (EnemyData),y + and #%00001111 ;check for special row $0e + cmp #$0e ;if found, jump elsewhere + beq ParseRow0e + jmp CheckThreeBytes ;if not found, unconditional jump + +CheckRightExtBounds: + lda $07 ;check right boundary + 48 against + cmp Enemy_X_Position,x ;column position without subtracting, + lda $06 ;then subtract borrow from page control temp + sbc Enemy_PageLoc,x ;plus carry + bcc CheckFrenzyBuffer ;if enemy object beyond extended boundary, branch + lda #$01 ;store value in vertical high byte + sta Enemy_Y_HighPos,x + lda (EnemyData),y ;get first byte again + asl ;multiply by four to get the vertical + asl ;coordinate + asl + asl + sta Enemy_Y_Position,x + cmp #$e0 ;do one last check for special row $0e + beq ParseRow0e ;(necessary if branched to $c1cb) + iny + lda (EnemyData),y ;get second byte of object + and #%01000000 ;check to see if hard mode bit is set + beq CheckForEnemyGroup ;if not, branch to check for group enemy objects + lda SecondaryHardMode ;if set, check to see if secondary hard mode flag + beq Inc2B ;is on, and if not, branch to skip this object completely + +CheckForEnemyGroup: + lda (EnemyData),y ;get second byte and mask out 2 MSB + and #%00111111 + cmp #$37 ;check for value below $37 + bcc BuzzyBeetleMutate + cmp #$3f ;if $37 or greater, check for value + bcc DoGroup ;below $3f, branch if below $3f + +BuzzyBeetleMutate: + cmp #Goomba ;if below $37, check for goomba + bne StrID ;value ($3f or more always fails) + ldy PrimaryHardMode ;check if primary hard mode flag is set + beq StrID ;and if so, change goomba to buzzy beetle + lda #BuzzyBeetle +StrID: sta Enemy_ID,x ;store enemy object number into buffer + lda #$01 + sta Enemy_Flag,x ;set flag for enemy in buffer + jsr InitEnemyObject + lda Enemy_Flag,x ;check to see if flag is set + bne Inc2B ;if not, leave, otherwise branch + rts + +CheckFrenzyBuffer: + lda EnemyFrenzyBuffer ;if enemy object stored in frenzy buffer + bne StrFre ;then branch ahead to store in enemy object buffer + lda VineFlagOffset ;otherwise check vine flag offset + cmp #$01 + bne ExEPar ;if other value <> 1, leave + lda #VineObject ;otherwise put vine in enemy identifier +StrFre: sta Enemy_ID,x ;store contents of frenzy buffer into enemy identifier value + +InitEnemyObject: + lda #$00 ;initialize enemy state + sta Enemy_State,x + jsr CheckpointEnemyID ;jump ahead to run jump engine and subroutines +ExEPar: rts ;then leave + +DoGroup: + jmp HandleGroupEnemies ;handle enemy group objects + +ParseRow0e: + iny ;increment Y to load third byte of object + iny + lda (EnemyData),y + lsr ;move 3 MSB to the bottom, effectively + lsr ;making %xxx00000 into %00000xxx + lsr + lsr + lsr + cmp WorldNumber ;is it the same world number as we're on? + bne NotUse ;if not, do not use (this allows multiple uses + dey ;of the same area, like the underground bonus areas) + lda (EnemyData),y ;otherwise, get second byte and use as offset + sta AreaPointer ;to addresses for level and enemy object data + iny + lda (EnemyData),y ;get third byte again, and this time mask out + and #%00011111 ;the 3 MSB from before, save as page number to be + sta EntrancePage ;used upon entry to area, if area is entered +NotUse: jmp Inc3B + +CheckThreeBytes: + ldy EnemyDataOffset ;load current offset for enemy object data + lda (EnemyData),y ;get first byte + and #%00001111 ;check for special row $0e + cmp #$0e + bne Inc2B +Inc3B: inc EnemyDataOffset ;if row = $0e, increment three bytes +Inc2B: inc EnemyDataOffset ;otherwise increment two bytes + inc EnemyDataOffset + lda #$00 ;init page select for enemy objects + sta EnemyObjectPageSel + ldx ObjectOffset ;reload current offset in enemy buffers + rts ;and leave + +CheckpointEnemyID: + lda Enemy_ID,x + cmp #$15 ;check enemy object identifier for $15 or greater + bcs InitEnemyRoutines ;and branch straight to the jump engine if found + tay ;save identifier in Y register for now + lda Enemy_Y_Position,x + adc #$08 ;add eight pixels to what will eventually be the + sta Enemy_Y_Position,x ;enemy object's vertical coordinate ($00-$14 only) + lda #$01 + sta EnemyOffscrBitsMasked,x ;set offscreen masked bit + tya ;get identifier back and use as offset for jump engine + +InitEnemyRoutines: + jsr JumpEngine + +;jump engine table for newly loaded enemy objects + + .dw InitNormalEnemy ;for objects $00-$0f + .dw InitNormalEnemy + .dw InitNormalEnemy + .dw InitRedKoopa + .dw NoInitCode + .dw InitHammerBro + .dw InitGoomba + .dw InitBloober + .dw InitBulletBill + .dw NoInitCode + .dw InitCheepCheep + .dw InitCheepCheep + .dw InitPodoboo + .dw InitPiranhaPlant + .dw InitJumpGPTroopa + .dw InitRedPTroopa + + .dw InitHorizFlySwimEnemy ;for objects $10-$1f + .dw InitLakitu + .dw InitEnemyFrenzy + .dw NoInitCode + .dw InitEnemyFrenzy + .dw InitEnemyFrenzy + .dw InitEnemyFrenzy + .dw InitEnemyFrenzy + .dw EndFrenzy + .dw NoInitCode + .dw NoInitCode + .dw InitShortFirebar + .dw InitShortFirebar + .dw InitShortFirebar + .dw InitShortFirebar + .dw InitLongFirebar + + .dw NoInitCode ;for objects $20-$2f + .dw NoInitCode + .dw NoInitCode + .dw NoInitCode + .dw InitBalPlatform + .dw InitVertPlatform + .dw LargeLiftUp + .dw LargeLiftDown + .dw InitHoriPlatform + .dw InitDropPlatform + .dw InitHoriPlatform + .dw PlatLiftUp + .dw PlatLiftDown + .dw InitBowser + .dw PwrUpJmp ;possibly dummy value + .dw Setup_Vine + + .dw NoInitCode ;for objects $30-$36 + .dw NoInitCode + .dw NoInitCode + .dw NoInitCode + .dw NoInitCode + .dw InitRetainerObj + .dw EndOfEnemyInitCode + +;------------------------------------------------------------------------------------- + +NoInitCode: + rts ;this executed when enemy object has no init code + +;-------------------------------- + +InitGoomba: + jsr InitNormalEnemy ;set appropriate horizontal speed + jmp SmallBBox ;set $09 as bounding box control, set other values + +;-------------------------------- + +InitPodoboo: + lda #$02 ;set enemy position to below + sta Enemy_Y_HighPos,x ;the bottom of the screen + sta Enemy_Y_Position,x + lsr + sta EnemyIntervalTimer,x ;set timer for enemy + lsr + sta Enemy_State,x ;initialize enemy state, then jump to use + jmp SmallBBox ;$09 as bounding box size and set other things + +;-------------------------------- + +InitRetainerObj: + lda #$b8 ;set fixed vertical position for + sta Enemy_Y_Position,x ;princess/mushroom retainer object + rts + +;-------------------------------- + +NormalXSpdData: + .db $f8, $f4 + +InitNormalEnemy: + ldy #$01 ;load offset of 1 by default + lda PrimaryHardMode ;check for primary hard mode flag set + bne GetESpd + dey ;if not set, decrement offset +GetESpd: lda NormalXSpdData,y ;get appropriate horizontal speed +SetESpd: sta Enemy_X_Speed,x ;store as speed for enemy object + jmp TallBBox ;branch to set bounding box control and other data + +;-------------------------------- + +InitRedKoopa: + jsr InitNormalEnemy ;load appropriate horizontal speed + lda #$01 ;set enemy state for red koopa troopa $03 + sta Enemy_State,x + rts + +;-------------------------------- + +HBroWalkingTimerData: + .db $80, $50 + +InitHammerBro: + lda #$00 ;init horizontal speed and timer used by hammer bro + sta HammerThrowingTimer,x ;apparently to time hammer throwing + sta Enemy_X_Speed,x + ldy SecondaryHardMode ;get secondary hard mode flag + lda HBroWalkingTimerData,y + sta EnemyIntervalTimer,x ;set value as delay for hammer bro to walk left + lda #$0b ;set specific value for bounding box size control + jmp SetBBox + +;-------------------------------- + +InitHorizFlySwimEnemy: + lda #$00 ;initialize horizontal speed + jmp SetESpd + +;-------------------------------- + +InitBloober: + lda #$00 ;initialize horizontal speed + sta BlooperMoveSpeed,x +SmallBBox: lda #$09 ;set specific bounding box size control + bne SetBBox ;unconditional branch + +;-------------------------------- + +InitRedPTroopa: + ldy #$30 ;load central position adder for 48 pixels down + lda Enemy_Y_Position,x ;set vertical coordinate into location to + sta RedPTroopaOrigXPos,x ;be used as original vertical coordinate + bpl GetCent ;if vertical coordinate < $80 + ldy #$e0 ;if => $80, load position adder for 32 pixels up +GetCent: tya ;send central position adder to A + adc Enemy_Y_Position,x ;add to current vertical coordinate + sta RedPTroopaCenterYPos,x ;store as central vertical coordinate +TallBBox: lda #$03 ;set specific bounding box size control +SetBBox: sta Enemy_BoundBoxCtrl,x ;set bounding box control here + lda #$02 ;set moving direction for left + sta Enemy_MovingDir,x +InitVStf: lda #$00 ;initialize vertical speed + sta Enemy_Y_Speed,x ;and movement force + sta Enemy_Y_MoveForce,x + rts + +;-------------------------------- + +InitBulletBill: + lda #$02 ;set moving direction for left + sta Enemy_MovingDir,x + lda #$09 ;set bounding box control for $09 + sta Enemy_BoundBoxCtrl,x + rts + +;-------------------------------- + +InitCheepCheep: + jsr SmallBBox ;set vertical bounding box, speed, init others + lda PseudoRandomBitReg,x ;check one portion of LSFR + and #%00010000 ;get d4 from it + sta CheepCheepMoveMFlag,x ;save as movement flag of some sort + lda Enemy_Y_Position,x + sta CheepCheepOrigYPos,x ;save original vertical coordinate here + rts + +;-------------------------------- + +InitLakitu: + lda EnemyFrenzyBuffer ;check to see if an enemy is already in + bne KillLakitu ;the frenzy buffer, and branch to kill lakitu if so + +SetupLakitu: + lda #$00 ;erase counter for lakitu's reappearance + sta LakituReappearTimer + jsr InitHorizFlySwimEnemy ;set $03 as bounding box, set other attributes + jmp TallBBox2 ;set $03 as bounding box again (not necessary) and leave + +KillLakitu: + jmp EraseEnemyObject + +;-------------------------------- +;$01-$03 - used to hold pseudorandom difference adjusters + +PRDiffAdjustData: + .db $26, $2c, $32, $38 + .db $20, $22, $24, $26 + .db $13, $14, $15, $16 + +LakituAndSpinyHandler: + lda FrenzyEnemyTimer ;if timer here not expired, leave + bne ExLSHand + cpx #$05 ;if we are on the special use slot, leave + bcs ExLSHand + lda #$80 ;set timer + sta FrenzyEnemyTimer + ldy #$04 ;start with the last enemy slot +ChkLak: lda Enemy_ID,y ;check all enemy slots to see + cmp #Lakitu ;if lakitu is on one of them + beq CreateSpiny ;if so, branch out of this loop + dey ;otherwise check another slot + bpl ChkLak ;loop until all slots are checked + inc LakituReappearTimer ;increment reappearance timer + lda LakituReappearTimer + cmp #$07 ;check to see if we're up to a certain value yet + bcc ExLSHand ;if not, leave + ldx #$04 ;start with the last enemy slot again +ChkNoEn: lda Enemy_Flag,x ;check enemy buffer flag for non-active enemy slot + beq CreateL ;branch out of loop if found + dex ;otherwise check next slot + bpl ChkNoEn ;branch until all slots are checked + bmi RetEOfs ;if no empty slots were found, branch to leave +CreateL: lda #$00 ;initialize enemy state + sta Enemy_State,x + lda #Lakitu ;create lakitu enemy object + sta Enemy_ID,x + jsr SetupLakitu ;do a sub to set up lakitu + lda #$20 + jsr PutAtRightExtent ;finish setting up lakitu +RetEOfs: ldx ObjectOffset ;get enemy object buffer offset again and leave +ExLSHand: rts + +;-------------------------------- + +CreateSpiny: + lda Player_Y_Position ;if player above a certain point, branch to leave + cmp #$2c + bcc ExLSHand + lda Enemy_State,y ;if lakitu is not in normal state, branch to leave + bne ExLSHand + lda Enemy_PageLoc,y ;store horizontal coordinates (high and low) of lakitu + sta Enemy_PageLoc,x ;into the coordinates of the spiny we're going to create + lda Enemy_X_Position,y + sta Enemy_X_Position,x + lda #$01 ;put spiny within vertical screen unit + sta Enemy_Y_HighPos,x + lda Enemy_Y_Position,y ;put spiny eight pixels above where lakitu is + sec + sbc #$08 + sta Enemy_Y_Position,x + lda PseudoRandomBitReg,x ;get 2 LSB of LSFR and save to Y + and #%00000011 + tay + ldx #$02 +DifLoop: lda PRDiffAdjustData,y ;get three values and save them + sta $01,x ;to $01-$03 + iny + iny ;increment Y four bytes for each value + iny + iny + dex ;decrement X for each one + bpl DifLoop ;loop until all three are written + ldx ObjectOffset ;get enemy object buffer offset + jsr PlayerLakituDiff ;move enemy, change direction, get value - difference + ldy Player_X_Speed ;check player's horizontal speed + cpy #$08 + bcs SetSpSpd ;if moving faster than a certain amount, branch elsewhere + tay ;otherwise save value in A to Y for now + lda PseudoRandomBitReg+1,x + and #%00000011 ;get one of the LSFR parts and save the 2 LSB + beq UsePosv ;branch if neither bits are set + tya + eor #%11111111 ;otherwise get two's compliment of Y + tay + iny +UsePosv: tya ;put value from A in Y back to A (they will be lost anyway) +SetSpSpd: jsr SmallBBox ;set bounding box control, init attributes, lose contents of A + ldy #$02 + sta Enemy_X_Speed,x ;set horizontal speed to zero because previous contents + cmp #$00 ;of A were lost...branch here will never be taken for + bmi SpinyRte ;the same reason + dey +SpinyRte: sty Enemy_MovingDir,x ;set moving direction to the right + lda #$fd + sta Enemy_Y_Speed,x ;set vertical speed to move upwards + lda #$01 + sta Enemy_Flag,x ;enable enemy object by setting flag + lda #$05 + sta Enemy_State,x ;put spiny in egg state and leave +ChpChpEx: rts + +;-------------------------------- + +FirebarSpinSpdData: + .db $28, $38, $28, $38, $28 + +FirebarSpinDirData: + .db $00, $00, $10, $10, $00 + +InitLongFirebar: + jsr DuplicateEnemyObj ;create enemy object for long firebar + +InitShortFirebar: + lda #$00 ;initialize low byte of spin state + sta FirebarSpinState_Low,x + lda Enemy_ID,x ;subtract $1b from enemy identifier + sec ;to get proper offset for firebar data + sbc #$1b + tay + lda FirebarSpinSpdData,y ;get spinning speed of firebar + sta FirebarSpinSpeed,x + lda FirebarSpinDirData,y ;get spinning direction of firebar + sta FirebarSpinDirection,x + lda Enemy_Y_Position,x + clc ;add four pixels to vertical coordinate + adc #$04 + sta Enemy_Y_Position,x + lda Enemy_X_Position,x + clc ;add four pixels to horizontal coordinate + adc #$04 + sta Enemy_X_Position,x + lda Enemy_PageLoc,x + adc #$00 ;add carry to page location + sta Enemy_PageLoc,x + jmp TallBBox2 ;set bounding box control (not used) and leave + +;-------------------------------- +;$00-$01 - used to hold pseudorandom bits + +FlyCCXPositionData: + .db $80, $30, $40, $80 + .db $30, $50, $50, $70 + .db $20, $40, $80, $a0 + .db $70, $40, $90, $68 + +FlyCCXSpeedData: + .db $0e, $05, $06, $0e + .db $1c, $20, $10, $0c + .db $1e, $22, $18, $14 + +FlyCCTimerData: + .db $10, $60, $20, $48 + +InitFlyingCheepCheep: + lda FrenzyEnemyTimer ;if timer here not expired yet, branch to leave + bne ChpChpEx + jsr SmallBBox ;jump to set bounding box size $09 and init other values + lda PseudoRandomBitReg+1,x + and #%00000011 ;set pseudorandom offset here + tay + lda FlyCCTimerData,y ;load timer with pseudorandom offset + sta FrenzyEnemyTimer + ldy #$03 ;load Y with default value + lda SecondaryHardMode + beq MaxCC ;if secondary hard mode flag not set, do not increment Y + iny ;otherwise, increment Y to allow as many as four onscreen +MaxCC: sty $00 ;store whatever pseudorandom bits are in Y + cpx $00 ;compare enemy object buffer offset with Y + bcs ChpChpEx ;if X => Y, branch to leave + lda PseudoRandomBitReg,x + and #%00000011 ;get last two bits of LSFR, first part + sta $00 ;and store in two places + sta $01 + lda #$fb ;set vertical speed for cheep-cheep + sta Enemy_Y_Speed,x + lda #$00 ;load default value + ldy Player_X_Speed ;check player's horizontal speed + beq GSeed ;if player not moving left or right, skip this part + lda #$04 + cpy #$19 ;if moving to the right but not very quickly, + bcc GSeed ;do not change A + asl ;otherwise, multiply A by 2 +GSeed: pha ;save to stack + clc + adc $00 ;add to last two bits of LSFR we saved earlier + sta $00 ;save it there + lda PseudoRandomBitReg+1,x + and #%00000011 ;if neither of the last two bits of second LSFR set, + beq RSeed ;skip this part and save contents of $00 + lda PseudoRandomBitReg+2,x + and #%00001111 ;otherwise overwrite with lower nybble of + sta $00 ;third LSFR part +RSeed: pla ;get value from stack we saved earlier + clc + adc $01 ;add to last two bits of LSFR we saved in other place + tay ;use as pseudorandom offset here + lda FlyCCXSpeedData,y ;get horizontal speed using pseudorandom offset + sta Enemy_X_Speed,x + lda #$01 ;set to move towards the right + sta Enemy_MovingDir,x + lda Player_X_Speed ;if player moving left or right, branch ahead of this part + bne D2XPos1 + ldy $00 ;get first LSFR or third LSFR lower nybble + tya ;and check for d1 set + and #%00000010 + beq D2XPos1 ;if d1 not set, branch + lda Enemy_X_Speed,x + eor #$ff ;if d1 set, change horizontal speed + clc ;into two's compliment, thus moving in the opposite + adc #$01 ;direction + sta Enemy_X_Speed,x + inc Enemy_MovingDir,x ;increment to move towards the left +D2XPos1: tya ;get first LSFR or third LSFR lower nybble again + and #%00000010 + beq D2XPos2 ;check for d1 set again, branch again if not set + lda Player_X_Position ;get player's horizontal position + clc + adc FlyCCXPositionData,y ;if d1 set, add value obtained from pseudorandom offset + sta Enemy_X_Position,x ;and save as enemy's horizontal position + lda Player_PageLoc ;get player's page location + adc #$00 ;add carry and jump past this part + jmp FinCCSt +D2XPos2: lda Player_X_Position ;get player's horizontal position + sec + sbc FlyCCXPositionData,y ;if d1 not set, subtract value obtained from pseudorandom + sta Enemy_X_Position,x ;offset and save as enemy's horizontal position + lda Player_PageLoc ;get player's page location + sbc #$00 ;subtract borrow +FinCCSt: sta Enemy_PageLoc,x ;save as enemy's page location + lda #$01 + sta Enemy_Flag,x ;set enemy's buffer flag + sta Enemy_Y_HighPos,x ;set enemy's high vertical byte + lda #$f8 + sta Enemy_Y_Position,x ;put enemy below the screen, and we are done + rts + +;-------------------------------- + +InitBowser: + jsr DuplicateEnemyObj ;jump to create another bowser object + stx BowserFront_Offset ;save offset of first here + lda #$00 + sta BowserBodyControls ;initialize bowser's body controls + sta BridgeCollapseOffset ;and bridge collapse offset + lda Enemy_X_Position,x + sta BowserOrigXPos ;store original horizontal position here + lda #$df + sta BowserFireBreathTimer ;store something here + sta Enemy_MovingDir,x ;and in moving direction + lda #$20 + sta BowserFeetCounter ;set bowser's feet timer and in enemy timer + sta EnemyFrameTimer,x + lda #$05 + sta BowserHitPoints ;give bowser 5 hit points + lsr + sta BowserMovementSpeed ;set default movement speed here + rts + +;-------------------------------- + +DuplicateEnemyObj: + ldy #$ff ;start at beginning of enemy slots +FSLoop: iny ;increment one slot + lda Enemy_Flag,y ;check enemy buffer flag for empty slot + bne FSLoop ;if set, branch and keep checking + sty DuplicateObj_Offset ;otherwise set offset here + txa ;transfer original enemy buffer offset + ora #%10000000 ;store with d7 set as flag in new enemy + sta Enemy_Flag,y ;slot as well as enemy offset + lda Enemy_PageLoc,x + sta Enemy_PageLoc,y ;copy page location and horizontal coordinates + lda Enemy_X_Position,x ;from original enemy to new enemy + sta Enemy_X_Position,y + lda #$01 + sta Enemy_Flag,x ;set flag as normal for original enemy + sta Enemy_Y_HighPos,y ;set high vertical byte for new enemy + lda Enemy_Y_Position,x + sta Enemy_Y_Position,y ;copy vertical coordinate from original to new +FlmEx: rts ;and then leave + +;-------------------------------- + +FlameYPosData: + .db $90, $80, $70, $90 + +FlameYMFAdderData: + .db $ff, $01 + +InitBowserFlame: + lda FrenzyEnemyTimer ;if timer not expired yet, branch to leave + bne FlmEx + sta Enemy_Y_MoveForce,x ;reset something here + lda NoiseSoundQueue + ora #Sfx_BowserFlame ;load bowser's flame sound into queue + sta NoiseSoundQueue + ldy BowserFront_Offset ;get bowser's buffer offset + lda Enemy_ID,y ;check for bowser + cmp #Bowser + beq SpawnFromMouth ;branch if found + jsr SetFlameTimer ;get timer data based on flame counter + clc + adc #$20 ;add 32 frames by default + ldy SecondaryHardMode + beq SetFrT ;if secondary mode flag not set, use as timer setting + sec + sbc #$10 ;otherwise subtract 16 frames for secondary hard mode +SetFrT: sta FrenzyEnemyTimer ;set timer accordingly + lda PseudoRandomBitReg,x + and #%00000011 ;get 2 LSB from first part of LSFR + sta BowserFlamePRandomOfs,x ;set here + tay ;use as offset + lda FlameYPosData,y ;load vertical position based on pseudorandom offset + +PutAtRightExtent: + sta Enemy_Y_Position,x ;set vertical position + lda ScreenRight_X_Pos + clc + adc #$20 ;place enemy 32 pixels beyond right side of screen + sta Enemy_X_Position,x + lda ScreenRight_PageLoc + adc #$00 ;add carry + sta Enemy_PageLoc,x + jmp FinishFlame ;skip this part to finish setting values + +SpawnFromMouth: + lda Enemy_X_Position,y ;get bowser's horizontal position + sec + sbc #$0e ;subtract 14 pixels + sta Enemy_X_Position,x ;save as flame's horizontal position + lda Enemy_PageLoc,y + sta Enemy_PageLoc,x ;copy page location from bowser to flame + lda Enemy_Y_Position,y + clc ;add 8 pixels to bowser's vertical position + adc #$08 + sta Enemy_Y_Position,x ;save as flame's vertical position + lda PseudoRandomBitReg,x + and #%00000011 ;get 2 LSB from first part of LSFR + sta Enemy_YMF_Dummy,x ;save here + tay ;use as offset + lda FlameYPosData,y ;get value here using bits as offset + ldy #$00 ;load default offset + cmp Enemy_Y_Position,x ;compare value to flame's current vertical position + bcc SetMF ;if less, do not increment offset + iny ;otherwise increment now +SetMF: lda FlameYMFAdderData,y ;get value here and save + sta Enemy_Y_MoveForce,x ;to vertical movement force + lda #$00 + sta EnemyFrenzyBuffer ;clear enemy frenzy buffer + +FinishFlame: + lda #$08 ;set $08 for bounding box control + sta Enemy_BoundBoxCtrl,x + lda #$01 ;set high byte of vertical and + sta Enemy_Y_HighPos,x ;enemy buffer flag + sta Enemy_Flag,x + lsr + sta Enemy_X_MoveForce,x ;initialize horizontal movement force, and + sta Enemy_State,x ;enemy state + rts + +;-------------------------------- + +FireworksXPosData: + .db $00, $30, $60, $60, $00, $20 + +FireworksYPosData: + .db $60, $40, $70, $40, $60, $30 + +InitFireworks: + lda FrenzyEnemyTimer ;if timer not expired yet, branch to leave + bne ExitFWk + lda #$20 ;otherwise reset timer + sta FrenzyEnemyTimer + dec FireworksCounter ;decrement for each explosion + ldy #$06 ;start at last slot +StarFChk: dey + lda Enemy_ID,y ;check for presence of star flag object + cmp #StarFlagObject ;if there isn't a star flag object, + bne StarFChk ;routine goes into infinite loop = crash + lda Enemy_X_Position,y + sec ;get horizontal coordinate of star flag object, then + sbc #$30 ;subtract 48 pixels from it and save to + pha ;the stack + lda Enemy_PageLoc,y + sbc #$00 ;subtract the carry from the page location + sta $00 ;of the star flag object + lda FireworksCounter ;get fireworks counter + clc + adc Enemy_State,y ;add state of star flag object (possibly not necessary) + tay ;use as offset + pla ;get saved horizontal coordinate of star flag - 48 pixels + clc + adc FireworksXPosData,y ;add number based on offset of fireworks counter + sta Enemy_X_Position,x ;store as the fireworks object horizontal coordinate + lda $00 + adc #$00 ;add carry and store as page location for + sta Enemy_PageLoc,x ;the fireworks object + lda FireworksYPosData,y ;get vertical position using same offset + sta Enemy_Y_Position,x ;and store as vertical coordinate for fireworks object + lda #$01 + sta Enemy_Y_HighPos,x ;store in vertical high byte + sta Enemy_Flag,x ;and activate enemy buffer flag + lsr + sta ExplosionGfxCounter,x ;initialize explosion counter + lda #$08 + sta ExplosionTimerCounter,x ;set explosion timing counter +ExitFWk: rts + +;-------------------------------- + +Bitmasks: + .db %00000001, %00000010, %00000100, %00001000, %00010000, %00100000, %01000000, %10000000 + +Enemy17YPosData: + .db $40, $30, $90, $50, $20, $60, $a0, $70 + +SwimCC_IDData: + .db $0a, $0b + +BulletBillCheepCheep: + lda FrenzyEnemyTimer ;if timer not expired yet, branch to leave + bne ExF17 + lda AreaType ;are we in a water-type level? + bne DoBulletBills ;if not, branch elsewhere + cpx #$03 ;are we past third enemy slot? + bcs ExF17 ;if so, branch to leave + ldy #$00 ;load default offset + lda PseudoRandomBitReg,x + cmp #$aa ;check first part of LSFR against preset value + bcc ChkW2 ;if less than preset, do not increment offset + iny ;otherwise increment +ChkW2: lda WorldNumber ;check world number + cmp #World2 + beq Get17ID ;if we're on world 2, do not increment offset + iny ;otherwise increment +Get17ID: tya + and #%00000001 ;mask out all but last bit of offset + tay + lda SwimCC_IDData,y ;load identifier for cheep-cheeps +Set17ID: sta Enemy_ID,x ;store whatever's in A as enemy identifier + lda BitMFilter + cmp #$ff ;if not all bits set, skip init part and compare bits + bne GetRBit + lda #$00 ;initialize vertical position filter + sta BitMFilter +GetRBit: lda PseudoRandomBitReg,x ;get first part of LSFR + and #%00000111 ;mask out all but 3 LSB +ChkRBit: tay ;use as offset + lda Bitmasks,y ;load bitmask + bit BitMFilter ;perform AND on filter without changing it + beq AddFBit + iny ;increment offset + tya + and #%00000111 ;mask out all but 3 LSB thus keeping it 0-7 + jmp ChkRBit ;do another check +AddFBit: ora BitMFilter ;add bit to already set bits in filter + sta BitMFilter ;and store + lda Enemy17YPosData,y ;load vertical position using offset + jsr PutAtRightExtent ;set vertical position and other values + sta Enemy_YMF_Dummy,x ;initialize dummy variable + lda #$20 ;set timer + sta FrenzyEnemyTimer + jmp CheckpointEnemyID ;process our new enemy object + +DoBulletBills: + ldy #$ff ;start at beginning of enemy slots +BB_SLoop: iny ;move onto the next slot + cpy #$05 ;branch to play sound if we've done all slots + bcs FireBulletBill + lda Enemy_Flag,y ;if enemy buffer flag not set, + beq BB_SLoop ;loop back and check another slot + lda Enemy_ID,y + cmp #BulletBill_FrenzyVar ;check enemy identifier for + bne BB_SLoop ;bullet bill object (frenzy variant) +ExF17: rts ;if found, leave + +FireBulletBill: + lda Square2SoundQueue + ora #Sfx_Blast ;play fireworks/gunfire sound + sta Square2SoundQueue + lda #BulletBill_FrenzyVar ;load identifier for bullet bill object + bne Set17ID ;unconditional branch + +;-------------------------------- +;$00 - used to store Y position of group enemies +;$01 - used to store enemy ID +;$02 - used to store page location of right side of screen +;$03 - used to store X position of right side of screen + +HandleGroupEnemies: + ldy #$00 ;load value for green koopa troopa + sec + sbc #$37 ;subtract $37 from second byte read + pha ;save result in stack for now + cmp #$04 ;was byte in $3b-$3e range? + bcs SnglID ;if so, branch + pha ;save another copy to stack + ldy #Goomba ;load value for goomba enemy + lda PrimaryHardMode ;if primary hard mode flag not set, + beq PullID ;branch, otherwise change to value + ldy #BuzzyBeetle ;for buzzy beetle +PullID: pla ;get second copy from stack +SnglID: sty $01 ;save enemy id here + ldy #$b0 ;load default y coordinate + and #$02 ;check to see if d1 was set + beq SetYGp ;if so, move y coordinate up, + ldy #$70 ;otherwise branch and use default +SetYGp: sty $00 ;save y coordinate here + lda ScreenRight_PageLoc ;get page number of right edge of screen + sta $02 ;save here + lda ScreenRight_X_Pos ;get pixel coordinate of right edge + sta $03 ;save here + ldy #$02 ;load two enemies by default + pla ;get first copy from stack + lsr ;check to see if d0 was set + bcc CntGrp ;if not, use default value + iny ;otherwise increment to three enemies +CntGrp: sty NumberofGroupEnemies ;save number of enemies here +GrLoop: ldx #$ff ;start at beginning of enemy buffers +GSltLp: inx ;increment and branch if past + cpx #$05 ;end of buffers + bcs NextED + lda Enemy_Flag,x ;check to see if enemy is already + bne GSltLp ;stored in buffer, and branch if so + lda $01 + sta Enemy_ID,x ;store enemy object identifier + lda $02 + sta Enemy_PageLoc,x ;store page location for enemy object + lda $03 + sta Enemy_X_Position,x ;store x coordinate for enemy object + clc + adc #$18 ;add 24 pixels for next enemy + sta $03 + lda $02 ;add carry to page location for + adc #$00 ;next enemy + sta $02 + lda $00 ;store y coordinate for enemy object + sta Enemy_Y_Position,x + lda #$01 ;activate flag for buffer, and + sta Enemy_Y_HighPos,x ;put enemy within the screen vertically + sta Enemy_Flag,x + jsr CheckpointEnemyID ;process each enemy object separately + dec NumberofGroupEnemies ;do this until we run out of enemy objects + bne GrLoop +NextED: jmp Inc2B ;jump to increment data offset and leave + +;-------------------------------- + +InitPiranhaPlant: + lda #$01 ;set initial speed + sta PiranhaPlant_Y_Speed,x + lsr + sta Enemy_State,x ;initialize enemy state and what would normally + sta PiranhaPlant_MoveFlag,x ;be used as vertical speed, but not in this case + lda Enemy_Y_Position,x + sta PiranhaPlantDownYPos,x ;save original vertical coordinate here + sec + sbc #$18 + sta PiranhaPlantUpYPos,x ;save original vertical coordinate - 24 pixels here + lda #$09 + jmp SetBBox2 ;set specific value for bounding box control + +;-------------------------------- + +InitEnemyFrenzy: + lda Enemy_ID,x ;load enemy identifier + sta EnemyFrenzyBuffer ;save in enemy frenzy buffer + sec + sbc #$12 ;subtract 12 and use as offset for jump engine + jsr JumpEngine + +;frenzy object jump table + .dw LakituAndSpinyHandler + .dw NoFrenzyCode + .dw InitFlyingCheepCheep + .dw InitBowserFlame + .dw InitFireworks + .dw BulletBillCheepCheep + +;-------------------------------- + +NoFrenzyCode: + rts + +;-------------------------------- + +EndFrenzy: + ldy #$05 ;start at last slot +LakituChk: lda Enemy_ID,y ;check enemy identifiers + cmp #Lakitu ;for lakitu + bne NextFSlot + lda #$01 ;if found, set state + sta Enemy_State,y +NextFSlot: dey ;move onto the next slot + bpl LakituChk ;do this until all slots are checked + lda #$00 + sta EnemyFrenzyBuffer ;empty enemy frenzy buffer + sta Enemy_Flag,x ;disable enemy buffer flag for this object + rts + +;-------------------------------- + +InitJumpGPTroopa: + lda #$02 ;set for movement to the left + sta Enemy_MovingDir,x + lda #$f8 ;set horizontal speed + sta Enemy_X_Speed,x +TallBBox2: lda #$03 ;set specific value for bounding box control +SetBBox2: sta Enemy_BoundBoxCtrl,x ;set bounding box control then leave + rts + +;-------------------------------- + +InitBalPlatform: + dec Enemy_Y_Position,x ;raise vertical position by two pixels + dec Enemy_Y_Position,x + ldy SecondaryHardMode ;if secondary hard mode flag not set, + bne AlignP ;branch ahead + ldy #$02 ;otherwise set value here + jsr PosPlatform ;do a sub to add or subtract pixels +AlignP: ldy #$ff ;set default value here for now + lda BalPlatformAlignment ;get current balance platform alignment + sta Enemy_State,x ;set platform alignment to object state here + bpl SetBPA ;if old alignment $ff, put $ff as alignment for negative + txa ;if old contents already $ff, put + tay ;object offset as alignment to make next positive +SetBPA: sty BalPlatformAlignment ;store whatever value's in Y here + lda #$00 + sta Enemy_MovingDir,x ;init moving direction + tay ;init Y + jsr PosPlatform ;do a sub to add 8 pixels, then run shared code here + +;-------------------------------- + +InitDropPlatform: + lda #$ff + sta PlatformCollisionFlag,x ;set some value here + jmp CommonPlatCode ;then jump ahead to execute more code + +;-------------------------------- + +InitHoriPlatform: + lda #$00 + sta XMoveSecondaryCounter,x ;init one of the moving counters + jmp CommonPlatCode ;jump ahead to execute more code + +;-------------------------------- + +InitVertPlatform: + ldy #$40 ;set default value here + lda Enemy_Y_Position,x ;check vertical position + bpl SetYO ;if above a certain point, skip this part + eor #$ff + clc ;otherwise get two's compliment + adc #$01 + ldy #$c0 ;get alternate value to add to vertical position +SetYO: sta YPlatformTopYPos,x ;save as top vertical position + tya + clc ;load value from earlier, add number of pixels + adc Enemy_Y_Position,x ;to vertical position + sta YPlatformCenterYPos,x ;save result as central vertical position + +;-------------------------------- + +CommonPlatCode: + jsr InitVStf ;do a sub to init certain other values +SPBBox: lda #$05 ;set default bounding box size control + ldy AreaType + cpy #$03 ;check for castle-type level + beq CasPBB ;use default value if found + ldy SecondaryHardMode ;otherwise check for secondary hard mode flag + bne CasPBB ;if set, use default value + lda #$06 ;use alternate value if not castle or secondary not set +CasPBB: sta Enemy_BoundBoxCtrl,x ;set bounding box size control here and leave + rts + +;-------------------------------- + +LargeLiftUp: + jsr PlatLiftUp ;execute code for platforms going up + jmp LargeLiftBBox ;overwrite bounding box for large platforms + +LargeLiftDown: + jsr PlatLiftDown ;execute code for platforms going down + +LargeLiftBBox: + jmp SPBBox ;jump to overwrite bounding box size control + +;-------------------------------- + +PlatLiftUp: + lda #$10 ;set movement amount here + sta Enemy_Y_MoveForce,x + lda #$ff ;set moving speed for platforms going up + sta Enemy_Y_Speed,x + jmp CommonSmallLift ;skip ahead to part we should be executing + +;-------------------------------- + +PlatLiftDown: + lda #$f0 ;set movement amount here + sta Enemy_Y_MoveForce,x + lda #$00 ;set moving speed for platforms going down + sta Enemy_Y_Speed,x + +;-------------------------------- + +CommonSmallLift: + ldy #$01 + jsr PosPlatform ;do a sub to add 12 pixels due to preset value + lda #$04 + sta Enemy_BoundBoxCtrl,x ;set bounding box control for small platforms + rts + +;-------------------------------- + +PlatPosDataLow: + .db $08,$0c,$f8 + +PlatPosDataHigh: + .db $00,$00,$ff + +PosPlatform: + lda Enemy_X_Position,x ;get horizontal coordinate + clc + adc PlatPosDataLow,y ;add or subtract pixels depending on offset + sta Enemy_X_Position,x ;store as new horizontal coordinate + lda Enemy_PageLoc,x + adc PlatPosDataHigh,y ;add or subtract page location depending on offset + sta Enemy_PageLoc,x ;store as new page location + rts ;and go back + +;-------------------------------- + +EndOfEnemyInitCode: + rts + +;------------------------------------------------------------------------------------- + +RunEnemyObjectsCore: + ldx ObjectOffset ;get offset for enemy object buffer + lda #$00 ;load value 0 for jump engine by default + ldy Enemy_ID,x + cpy #$15 ;if enemy object < $15, use default value + bcc JmpEO + tya ;otherwise subtract $14 from the value and use + sbc #$14 ;as value for jump engine +JmpEO: jsr JumpEngine + + .dw RunNormalEnemies ;for objects $00-$14 + + .dw RunBowserFlame ;for objects $15-$1f + .dw RunFireworks + .dw NoRunCode + .dw NoRunCode + .dw NoRunCode + .dw NoRunCode + .dw RunFirebarObj + .dw RunFirebarObj + .dw RunFirebarObj + .dw RunFirebarObj + .dw RunFirebarObj + + .dw RunFirebarObj ;for objects $20-$2f + .dw RunFirebarObj + .dw RunFirebarObj + .dw NoRunCode + .dw RunLargePlatform + .dw RunLargePlatform + .dw RunLargePlatform + .dw RunLargePlatform + .dw RunLargePlatform + .dw RunLargePlatform + .dw RunLargePlatform + .dw RunSmallPlatform + .dw RunSmallPlatform + .dw RunBowser + .dw PowerUpObjHandler + .dw VineObjectHandler + + .dw NoRunCode ;for objects $30-$35 + .dw RunStarFlagObj + .dw JumpspringHandler + .dw NoRunCode + .dw WarpZoneObject + .dw RunRetainerObj + +;-------------------------------- + +NoRunCode: + rts + +;-------------------------------- + +RunRetainerObj: + jsr GetEnemyOffscreenBits + jsr RelativeEnemyPosition + jmp EnemyGfxHandler + +;-------------------------------- + +RunNormalEnemies: + lda #$00 ;init sprite attributes + sta Enemy_SprAttrib,x + jsr GetEnemyOffscreenBits + jsr RelativeEnemyPosition + jsr EnemyGfxHandler + jsr GetEnemyBoundBox + jsr EnemyToBGCollisionDet + jsr EnemiesCollision + jsr PlayerEnemyCollision + ldy TimerControl ;if master timer control set, skip to last routine + bne SkipMove + jsr EnemyMovementSubs +SkipMove: jmp OffscreenBoundsCheck + +EnemyMovementSubs: + lda Enemy_ID,x + jsr JumpEngine + + .dw MoveNormalEnemy ;only objects $00-$14 use this table + .dw MoveNormalEnemy + .dw MoveNormalEnemy + .dw MoveNormalEnemy + .dw MoveNormalEnemy + .dw ProcHammerBro + .dw MoveNormalEnemy + .dw MoveBloober + .dw MoveBulletBill + .dw NoMoveCode + .dw MoveSwimmingCheepCheep + .dw MoveSwimmingCheepCheep + .dw MovePodoboo + .dw MovePiranhaPlant + .dw MoveJumpingEnemy + .dw ProcMoveRedPTroopa + .dw MoveFlyGreenPTroopa + .dw MoveLakitu + .dw MoveNormalEnemy + .dw NoMoveCode ;dummy + .dw MoveFlyingCheepCheep + +;-------------------------------- + +NoMoveCode: + rts + +;-------------------------------- + +RunBowserFlame: + jsr ProcBowserFlame + jsr GetEnemyOffscreenBits + jsr RelativeEnemyPosition + jsr GetEnemyBoundBox + jsr PlayerEnemyCollision + jmp OffscreenBoundsCheck + +;-------------------------------- + +RunFirebarObj: + jsr ProcFirebar + jmp OffscreenBoundsCheck + +;-------------------------------- + +RunSmallPlatform: + jsr GetEnemyOffscreenBits + jsr RelativeEnemyPosition + jsr SmallPlatformBoundBox + jsr SmallPlatformCollision + jsr RelativeEnemyPosition + jsr DrawSmallPlatform + jsr MoveSmallPlatform + jmp OffscreenBoundsCheck + +;-------------------------------- + +RunLargePlatform: + jsr GetEnemyOffscreenBits + jsr RelativeEnemyPosition + jsr LargePlatformBoundBox + jsr LargePlatformCollision + lda TimerControl ;if master timer control set, + bne SkipPT ;skip subroutine tree + jsr LargePlatformSubroutines +SkipPT: jsr RelativeEnemyPosition + jsr DrawLargePlatform + jmp OffscreenBoundsCheck + +;-------------------------------- + +LargePlatformSubroutines: + lda Enemy_ID,x ;subtract $24 to get proper offset for jump table + sec + sbc #$24 + jsr JumpEngine + + .dw BalancePlatform ;table used by objects $24-$2a + .dw YMovingPlatform + .dw MoveLargeLiftPlat + .dw MoveLargeLiftPlat + .dw XMovingPlatform + .dw DropPlatform + .dw RightPlatform + +;------------------------------------------------------------------------------------- + +EraseEnemyObject: + lda #$00 ;clear all enemy object variables + sta Enemy_Flag,x + sta Enemy_ID,x + sta Enemy_State,x + sta FloateyNum_Control,x + sta EnemyIntervalTimer,x + sta ShellChainCounter,x + sta Enemy_SprAttrib,x + sta EnemyFrameTimer,x + rts + +;------------------------------------------------------------------------------------- + +MovePodoboo: + lda EnemyIntervalTimer,x ;check enemy timer + bne PdbM ;branch to move enemy if not expired + jsr InitPodoboo ;otherwise set up podoboo again + lda PseudoRandomBitReg+1,x ;get part of LSFR + ora #%10000000 ;set d7 + sta Enemy_Y_MoveForce,x ;store as movement force + and #%00001111 ;mask out high nybble + ora #$06 ;set for at least six intervals + sta EnemyIntervalTimer,x ;store as new enemy timer + lda #$f9 + sta Enemy_Y_Speed,x ;set vertical speed to move podoboo upwards +PdbM: jmp MoveJ_EnemyVertically ;branch to impose gravity on podoboo + +;-------------------------------- +;$00 - used in HammerBroJumpCode as bitmask + +HammerThrowTmrData: + .db $30, $1c + +XSpeedAdderData: + .db $00, $e8, $00, $18 + +RevivedXSpeed: + .db $08, $f8, $0c, $f4 + +ProcHammerBro: + lda Enemy_State,x ;check hammer bro's enemy state for d5 set + and #%00100000 + beq ChkJH ;if not set, go ahead with code + jmp MoveDefeatedEnemy ;otherwise jump to something else +ChkJH: lda HammerBroJumpTimer,x ;check jump timer + beq HammerBroJumpCode ;if expired, branch to jump + dec HammerBroJumpTimer,x ;otherwise decrement jump timer + lda Enemy_OffscreenBits + and #%00001100 ;check offscreen bits + bne MoveHammerBroXDir ;if hammer bro a little offscreen, skip to movement code + lda HammerThrowingTimer,x ;check hammer throwing timer + bne DecHT ;if not expired, skip ahead, do not throw hammer + ldy SecondaryHardMode ;otherwise get secondary hard mode flag + lda HammerThrowTmrData,y ;get timer data using flag as offset + sta HammerThrowingTimer,x ;set as new timer + jsr SpawnHammerObj ;do a sub here to spawn hammer object + bcc DecHT ;if carry clear, hammer not spawned, skip to decrement timer + lda Enemy_State,x + ora #%00001000 ;set d3 in enemy state for hammer throw + sta Enemy_State,x + jmp MoveHammerBroXDir ;jump to move hammer bro +DecHT: dec HammerThrowingTimer,x ;decrement timer + jmp MoveHammerBroXDir ;jump to move hammer bro + +HammerBroJumpLData: + .db $20, $37 + +HammerBroJumpCode: + lda Enemy_State,x ;get hammer bro's enemy state + and #%00000111 ;mask out all but 3 LSB + cmp #$01 ;check for d0 set (for jumping) + beq MoveHammerBroXDir ;if set, branch ahead to moving code + lda #$00 ;load default value here + sta $00 ;save into temp variable for now + ldy #$fa ;set default vertical speed + lda Enemy_Y_Position,x ;check hammer bro's vertical coordinate + bmi SetHJ ;if on the bottom half of the screen, use current speed + ldy #$fd ;otherwise set alternate vertical speed + cmp #$70 ;check to see if hammer bro is above the middle of screen + inc $00 ;increment preset value to $01 + bcc SetHJ ;if above the middle of the screen, use current speed and $01 + dec $00 ;otherwise return value to $00 + lda PseudoRandomBitReg+1,x ;get part of LSFR, mask out all but LSB + and #$01 + bne SetHJ ;if d0 of LSFR set, branch and use current speed and $00 + ldy #$fa ;otherwise reset to default vertical speed +SetHJ: sty Enemy_Y_Speed,x ;set vertical speed for jumping + lda Enemy_State,x ;set d0 in enemy state for jumping + ora #$01 + sta Enemy_State,x + lda $00 ;load preset value here to use as bitmask + and PseudoRandomBitReg+2,x ;and do bit-wise comparison with part of LSFR + tay ;then use as offset + lda SecondaryHardMode ;check secondary hard mode flag + bne HJump + tay ;if secondary hard mode flag clear, set offset to 0 +HJump: lda HammerBroJumpLData,y ;get jump length timer data using offset from before + sta EnemyFrameTimer,x ;save in enemy timer + lda PseudoRandomBitReg+1,x + ora #%11000000 ;get contents of part of LSFR, set d7 and d6, then + sta HammerBroJumpTimer,x ;store in jump timer + +MoveHammerBroXDir: + ldy #$fc ;move hammer bro a little to the left + lda FrameCounter + and #%01000000 ;change hammer bro's direction every 64 frames + bne Shimmy + ldy #$04 ;if d6 set in counter, move him a little to the right +Shimmy: sty Enemy_X_Speed,x ;store horizontal speed + ldy #$01 ;set to face right by default + jsr PlayerEnemyDiff ;get horizontal difference between player and hammer bro + bmi SetShim ;if enemy to the left of player, skip this part + iny ;set to face left + lda EnemyIntervalTimer,x ;check walking timer + bne SetShim ;if not yet expired, skip to set moving direction + lda #$f8 + sta Enemy_X_Speed,x ;otherwise, make the hammer bro walk left towards player +SetShim: sty Enemy_MovingDir,x ;set moving direction + +MoveNormalEnemy: + ldy #$00 ;init Y to leave horizontal movement as-is + lda Enemy_State,x + and #%01000000 ;check enemy state for d6 set, if set skip + bne FallE ;to move enemy vertically, then horizontally if necessary + lda Enemy_State,x + asl ;check enemy state for d7 set + bcs SteadM ;if set, branch to move enemy horizontally + lda Enemy_State,x + and #%00100000 ;check enemy state for d5 set + bne MoveDefeatedEnemy ;if set, branch to move defeated enemy object + lda Enemy_State,x + and #%00000111 ;check d2-d0 of enemy state for any set bits + beq SteadM ;if enemy in normal state, branch to move enemy horizontally + cmp #$05 + beq FallE ;if enemy in state used by spiny's egg, go ahead here + cmp #$03 + bcs ReviveStunned ;if enemy in states $03 or $04, skip ahead to yet another part +FallE: jsr MoveD_EnemyVertically ;do a sub here to move enemy downwards + ldy #$00 + lda Enemy_State,x ;check for enemy state $02 + cmp #$02 + beq MEHor ;if found, branch to move enemy horizontally + and #%01000000 ;check for d6 set + beq SteadM ;if not set, branch to something else + lda Enemy_ID,x + cmp #PowerUpObject ;check for power-up object + beq SteadM + bne SlowM ;if any other object where d6 set, jump to set Y +MEHor: jmp MoveEnemyHorizontally ;jump here to move enemy horizontally for <> $2e and d6 set + +SlowM: ldy #$01 ;if branched here, increment Y to slow horizontal movement +SteadM: lda Enemy_X_Speed,x ;get current horizontal speed + pha ;save to stack + bpl AddHS ;if not moving or moving right, skip, leave Y alone + iny + iny ;otherwise increment Y to next data +AddHS: clc + adc XSpeedAdderData,y ;add value here to slow enemy down if necessary + sta Enemy_X_Speed,x ;save as horizontal speed temporarily + jsr MoveEnemyHorizontally ;then do a sub to move horizontally + pla + sta Enemy_X_Speed,x ;get old horizontal speed from stack and return to + rts ;original memory location, then leave + +ReviveStunned: + lda EnemyIntervalTimer,x ;if enemy timer not expired yet, + bne ChkKillGoomba ;skip ahead to something else + sta Enemy_State,x ;otherwise initialize enemy state to normal + lda FrameCounter + and #$01 ;get d0 of frame counter + tay ;use as Y and increment for movement direction + iny + sty Enemy_MovingDir,x ;store as pseudorandom movement direction + dey ;decrement for use as pointer + lda PrimaryHardMode ;check primary hard mode flag + beq SetRSpd ;if not set, use pointer as-is + iny + iny ;otherwise increment 2 bytes to next data +SetRSpd: lda RevivedXSpeed,y ;load and store new horizontal speed + sta Enemy_X_Speed,x ;and leave + rts + +MoveDefeatedEnemy: + jsr MoveD_EnemyVertically ;execute sub to move defeated enemy downwards + jmp MoveEnemyHorizontally ;now move defeated enemy horizontally + +ChkKillGoomba: + cmp #$0e ;check to see if enemy timer has reached + bne NKGmba ;a certain point, and branch to leave if not + lda Enemy_ID,x + cmp #Goomba ;check for goomba object + bne NKGmba ;branch if not found + jsr EraseEnemyObject ;otherwise, kill this goomba object +NKGmba: rts ;leave! + +;-------------------------------- + +MoveJumpingEnemy: + jsr MoveJ_EnemyVertically ;do a sub to impose gravity on green paratroopa + jmp MoveEnemyHorizontally ;jump to move enemy horizontally + +;-------------------------------- + +ProcMoveRedPTroopa: + lda Enemy_Y_Speed,x + ora Enemy_Y_MoveForce,x ;check for any vertical force or speed + bne MoveRedPTUpOrDown ;branch if any found + sta Enemy_YMF_Dummy,x ;initialize something here + lda Enemy_Y_Position,x ;check current vs. original vertical coordinate + cmp RedPTroopaOrigXPos,x + bcs MoveRedPTUpOrDown ;if current => original, skip ahead to more code + lda FrameCounter ;get frame counter + and #%00000111 ;mask out all but 3 LSB + bne NoIncPT ;if any bits set, branch to leave + inc Enemy_Y_Position,x ;otherwise increment red paratroopa's vertical position +NoIncPT: rts ;leave + +MoveRedPTUpOrDown: + lda Enemy_Y_Position,x ;check current vs. central vertical coordinate + cmp RedPTroopaCenterYPos,x + bcc MovPTDwn ;if current < central, jump to move downwards + jmp MoveRedPTroopaUp ;otherwise jump to move upwards +MovPTDwn: jmp MoveRedPTroopaDown ;move downwards + +;-------------------------------- +;$00 - used to store adder for movement, also used as adder for platform +;$01 - used to store maximum value for secondary counter + +MoveFlyGreenPTroopa: + jsr XMoveCntr_GreenPTroopa ;do sub to increment primary and secondary counters + jsr MoveWithXMCntrs ;do sub to move green paratroopa accordingly, and horizontally + ldy #$01 ;set Y to move green paratroopa down + lda FrameCounter + and #%00000011 ;check frame counter 2 LSB for any bits set + bne NoMGPT ;branch to leave if set to move up/down every fourth frame + lda FrameCounter + and #%01000000 ;check frame counter for d6 set + bne YSway ;branch to move green paratroopa down if set + ldy #$ff ;otherwise set Y to move green paratroopa up +YSway: sty $00 ;store adder here + lda Enemy_Y_Position,x + clc ;add or subtract from vertical position + adc $00 ;to give green paratroopa a wavy flight + sta Enemy_Y_Position,x +NoMGPT: rts ;leave! + +XMoveCntr_GreenPTroopa: + lda #$13 ;load preset maximum value for secondary counter + +XMoveCntr_Platform: + sta $01 ;store value here + lda FrameCounter + and #%00000011 ;branch to leave if not on + bne NoIncXM ;every fourth frame + ldy XMoveSecondaryCounter,x ;get secondary counter + lda XMovePrimaryCounter,x ;get primary counter + lsr + bcs DecSeXM ;if d0 of primary counter set, branch elsewhere + cpy $01 ;compare secondary counter to preset maximum value + beq IncPXM ;if equal, branch ahead of this part + inc XMoveSecondaryCounter,x ;increment secondary counter and leave +NoIncXM: rts +IncPXM: inc XMovePrimaryCounter,x ;increment primary counter and leave + rts +DecSeXM: tya ;put secondary counter in A + beq IncPXM ;if secondary counter at zero, branch back + dec XMoveSecondaryCounter,x ;otherwise decrement secondary counter and leave + rts + +MoveWithXMCntrs: + lda XMoveSecondaryCounter,x ;save secondary counter to stack + pha + ldy #$01 ;set value here by default + lda XMovePrimaryCounter,x + and #%00000010 ;if d1 of primary counter is + bne XMRight ;set, branch ahead of this part here + lda XMoveSecondaryCounter,x + eor #$ff ;otherwise change secondary + clc ;counter to two's compliment + adc #$01 + sta XMoveSecondaryCounter,x + ldy #$02 ;load alternate value here +XMRight: sty Enemy_MovingDir,x ;store as moving direction + jsr MoveEnemyHorizontally + sta $00 ;save value obtained from sub here + pla ;get secondary counter from stack + sta XMoveSecondaryCounter,x ;and return to original place + rts + +;-------------------------------- + +BlooberBitmasks: + .db %00111111, %00000011 + +MoveBloober: + lda Enemy_State,x + and #%00100000 ;check enemy state for d5 set + bne MoveDefeatedBloober ;branch if set to move defeated bloober + ldy SecondaryHardMode ;use secondary hard mode flag as offset + lda PseudoRandomBitReg+1,x ;get LSFR + and BlooberBitmasks,y ;mask out bits in LSFR using bitmask loaded with offset + bne BlooberSwim ;if any bits set, skip ahead to make swim + txa + lsr ;check to see if on second or fourth slot (1 or 3) + bcc FBLeft ;if not, branch to figure out moving direction + ldy Player_MovingDir ;otherwise, load player's moving direction and + bcs SBMDir ;do an unconditional branch to set +FBLeft: ldy #$02 ;set left moving direction by default + jsr PlayerEnemyDiff ;get horizontal difference between player and bloober + bpl SBMDir ;if enemy to the right of player, keep left + dey ;otherwise decrement to set right moving direction +SBMDir: sty Enemy_MovingDir,x ;set moving direction of bloober, then continue on here + +BlooberSwim: + jsr ProcSwimmingB ;execute sub to make bloober swim characteristically + lda Enemy_Y_Position,x ;get vertical coordinate + sec + sbc Enemy_Y_MoveForce,x ;subtract movement force + cmp #$20 ;check to see if position is above edge of status bar + bcc SwimX ;if so, don't do it + sta Enemy_Y_Position,x ;otherwise, set new vertical position, make bloober swim +SwimX: ldy Enemy_MovingDir,x ;check moving direction + dey + bne LeftSwim ;if moving to the left, branch to second part + lda Enemy_X_Position,x + clc ;add movement speed to horizontal coordinate + adc BlooperMoveSpeed,x + sta Enemy_X_Position,x ;store result as new horizontal coordinate + lda Enemy_PageLoc,x + adc #$00 ;add carry to page location + sta Enemy_PageLoc,x ;store as new page location and leave + rts + +LeftSwim: + lda Enemy_X_Position,x + sec ;subtract movement speed from horizontal coordinate + sbc BlooperMoveSpeed,x + sta Enemy_X_Position,x ;store result as new horizontal coordinate + lda Enemy_PageLoc,x + sbc #$00 ;subtract borrow from page location + sta Enemy_PageLoc,x ;store as new page location and leave + rts + +MoveDefeatedBloober: + jmp MoveEnemySlowVert ;jump to move defeated bloober downwards + +ProcSwimmingB: + lda BlooperMoveCounter,x ;get enemy's movement counter + and #%00000010 ;check for d1 set + bne ChkForFloatdown ;branch if set + lda FrameCounter + and #%00000111 ;get 3 LSB of frame counter + pha ;and save it to the stack + lda BlooperMoveCounter,x ;get enemy's movement counter + lsr ;check for d0 set + bcs SlowSwim ;branch if set + pla ;pull 3 LSB of frame counter from the stack + bne BSwimE ;branch to leave, execute code only every eighth frame + lda Enemy_Y_MoveForce,x + clc ;add to movement force to speed up swim + adc #$01 + sta Enemy_Y_MoveForce,x ;set movement force + sta BlooperMoveSpeed,x ;set as movement speed + cmp #$02 + bne BSwimE ;if certain horizontal speed, branch to leave + inc BlooperMoveCounter,x ;otherwise increment movement counter +BSwimE: rts + +SlowSwim: + pla ;pull 3 LSB of frame counter from the stack + bne NoSSw ;branch to leave, execute code only every eighth frame + lda Enemy_Y_MoveForce,x + sec ;subtract from movement force to slow swim + sbc #$01 + sta Enemy_Y_MoveForce,x ;set movement force + sta BlooperMoveSpeed,x ;set as movement speed + bne NoSSw ;if any speed, branch to leave + inc BlooperMoveCounter,x ;otherwise increment movement counter + lda #$02 + sta EnemyIntervalTimer,x ;set enemy's timer +NoSSw: rts ;leave + +ChkForFloatdown: + lda EnemyIntervalTimer,x ;get enemy timer + beq ChkNearPlayer ;branch if expired + +Floatdown: + lda FrameCounter ;get frame counter + lsr ;check for d0 set + bcs NoFD ;branch to leave on every other frame + inc Enemy_Y_Position,x ;otherwise increment vertical coordinate +NoFD: rts ;leave + +ChkNearPlayer: + lda Enemy_Y_Position,x ;get vertical coordinate + adc #$10 ;add sixteen pixels + cmp Player_Y_Position ;compare result with player's vertical coordinate + bcc Floatdown ;if modified vertical less than player's, branch + lda #$00 + sta BlooperMoveCounter,x ;otherwise nullify movement counter + rts + +;-------------------------------- + +MoveBulletBill: + lda Enemy_State,x ;check bullet bill's enemy object state for d5 set + and #%00100000 + beq NotDefB ;if not set, continue with movement code + jmp MoveJ_EnemyVertically ;otherwise jump to move defeated bullet bill downwards +NotDefB: lda #$e8 ;set bullet bill's horizontal speed + sta Enemy_X_Speed,x ;and move it accordingly (note: this bullet bill + jmp MoveEnemyHorizontally ;object occurs in frenzy object $17, not from cannons) + +;-------------------------------- +;$02 - used to hold preset values +;$03 - used to hold enemy state + +SwimCCXMoveData: + .db $40, $80 + .db $04, $04 ;residual data, not used + +MoveSwimmingCheepCheep: + lda Enemy_State,x ;check cheep-cheep's enemy object state + and #%00100000 ;for d5 set + beq CCSwim ;if not set, continue with movement code + jmp MoveEnemySlowVert ;otherwise jump to move defeated cheep-cheep downwards +CCSwim: sta $03 ;save enemy state in $03 + lda Enemy_ID,x ;get enemy identifier + sec + sbc #$0a ;subtract ten for cheep-cheep identifiers + tay ;use as offset + lda SwimCCXMoveData,y ;load value here + sta $02 + lda Enemy_X_MoveForce,x ;load horizontal force + sec + sbc $02 ;subtract preset value from horizontal force + sta Enemy_X_MoveForce,x ;store as new horizontal force + lda Enemy_X_Position,x ;get horizontal coordinate + sbc #$00 ;subtract borrow (thus moving it slowly) + sta Enemy_X_Position,x ;and save as new horizontal coordinate + lda Enemy_PageLoc,x + sbc #$00 ;subtract borrow again, this time from the + sta Enemy_PageLoc,x ;page location, then save + lda #$20 + sta $02 ;save new value here + cpx #$02 ;check enemy object offset + bcc ExSwCC ;if in first or second slot, branch to leave + lda CheepCheepMoveMFlag,x ;check movement flag + cmp #$10 ;if movement speed set to $00, + bcc CCSwimUpwards ;branch to move upwards + lda Enemy_YMF_Dummy,x + clc + adc $02 ;add preset value to dummy variable to get carry + sta Enemy_YMF_Dummy,x ;and save dummy + lda Enemy_Y_Position,x ;get vertical coordinate + adc $03 ;add carry to it plus enemy state to slowly move it downwards + sta Enemy_Y_Position,x ;save as new vertical coordinate + lda Enemy_Y_HighPos,x + adc #$00 ;add carry to page location and + jmp ChkSwimYPos ;jump to end of movement code + +CCSwimUpwards: + lda Enemy_YMF_Dummy,x + sec + sbc $02 ;subtract preset value to dummy variable to get borrow + sta Enemy_YMF_Dummy,x ;and save dummy + lda Enemy_Y_Position,x ;get vertical coordinate + sbc $03 ;subtract borrow to it plus enemy state to slowly move it upwards + sta Enemy_Y_Position,x ;save as new vertical coordinate + lda Enemy_Y_HighPos,x + sbc #$00 ;subtract borrow from page location + +ChkSwimYPos: + sta Enemy_Y_HighPos,x ;save new page location here + ldy #$00 ;load movement speed to upwards by default + lda Enemy_Y_Position,x ;get vertical coordinate + sec + sbc CheepCheepOrigYPos,x ;subtract original coordinate from current + bpl YPDiff ;if result positive, skip to next part + ldy #$10 ;otherwise load movement speed to downwards + eor #$ff + clc ;get two's compliment of result + adc #$01 ;to obtain total difference of original vs. current +YPDiff: cmp #$0f ;if difference between original vs. current vertical + bcc ExSwCC ;coordinates < 15 pixels, leave movement speed alone + tya + sta CheepCheepMoveMFlag,x ;otherwise change movement speed +ExSwCC: rts ;leave + +;-------------------------------- +;$00 - used as counter for firebar parts +;$01 - used for oscillated high byte of spin state or to hold horizontal adder +;$02 - used for oscillated high byte of spin state or to hold vertical adder +;$03 - used for mirror data +;$04 - used to store player's sprite 1 X coordinate +;$05 - used to evaluate mirror data +;$06 - used to store either screen X coordinate or sprite data offset +;$07 - used to store screen Y coordinate +;$ed - used to hold maximum length of firebar +;$ef - used to hold high byte of spinstate + +;horizontal adder is at first byte + high byte of spinstate, +;vertical adder is same + 8 bytes, two's compliment +;if greater than $08 for proper oscillation +FirebarPosLookupTbl: + .db $00, $01, $03, $04, $05, $06, $07, $07, $08 + .db $00, $03, $06, $09, $0b, $0d, $0e, $0f, $10 + .db $00, $04, $09, $0d, $10, $13, $16, $17, $18 + .db $00, $06, $0c, $12, $16, $1a, $1d, $1f, $20 + .db $00, $07, $0f, $16, $1c, $21, $25, $27, $28 + .db $00, $09, $12, $1b, $21, $27, $2c, $2f, $30 + .db $00, $0b, $15, $1f, $27, $2e, $33, $37, $38 + .db $00, $0c, $18, $24, $2d, $35, $3b, $3e, $40 + .db $00, $0e, $1b, $28, $32, $3b, $42, $46, $48 + .db $00, $0f, $1f, $2d, $38, $42, $4a, $4e, $50 + .db $00, $11, $22, $31, $3e, $49, $51, $56, $58 + +FirebarMirrorData: + .db $01, $03, $02, $00 + +FirebarTblOffsets: + .db $00, $09, $12, $1b, $24, $2d + .db $36, $3f, $48, $51, $5a, $63 + +FirebarYPos: + .db $0c, $18 + +ProcFirebar: + jsr GetEnemyOffscreenBits ;get offscreen information + lda Enemy_OffscreenBits ;check for d3 set + and #%00001000 ;if so, branch to leave + bne SkipFBar + lda TimerControl ;if master timer control set, branch + bne SusFbar ;ahead of this part + lda FirebarSpinSpeed,x ;load spinning speed of firebar + jsr FirebarSpin ;modify current spinstate + and #%00011111 ;mask out all but 5 LSB + sta FirebarSpinState_High,x ;and store as new high byte of spinstate +SusFbar: lda FirebarSpinState_High,x ;get high byte of spinstate + ldy Enemy_ID,x ;check enemy identifier + cpy #$1f + bcc SetupGFB ;if < $1f (long firebar), branch + cmp #$08 ;check high byte of spinstate + beq SkpFSte ;if eight, branch to change + cmp #$18 + bne SetupGFB ;if not at twenty-four branch to not change +SkpFSte: clc + adc #$01 ;add one to spinning thing to avoid horizontal state + sta FirebarSpinState_High,x +SetupGFB: sta $ef ;save high byte of spinning thing, modified or otherwise + jsr RelativeEnemyPosition ;get relative coordinates to screen + jsr GetFirebarPosition ;do a sub here (residual, too early to be used now) + ldy Enemy_SprDataOffset,x ;get OAM data offset + lda Enemy_Rel_YPos ;get relative vertical coordinate + sta Sprite_Y_Position,y ;store as Y in OAM data + sta $07 ;also save here + lda Enemy_Rel_XPos ;get relative horizontal coordinate + sta Sprite_X_Position,y ;store as X in OAM data + sta $06 ;also save here + lda #$01 + sta $00 ;set $01 value here (not necessary) + jsr FirebarCollision ;draw fireball part and do collision detection + ldy #$05 ;load value for short firebars by default + lda Enemy_ID,x + cmp #$1f ;are we doing a long firebar? + bcc SetMFbar ;no, branch then + ldy #$0b ;otherwise load value for long firebars +SetMFbar: sty $ed ;store maximum value for length of firebars + lda #$00 + sta $00 ;initialize counter here +DrawFbar: lda $ef ;load high byte of spinstate + jsr GetFirebarPosition ;get fireball position data depending on firebar part + jsr DrawFirebar_Collision ;position it properly, draw it and do collision detection + lda $00 ;check which firebar part + cmp #$04 + bne NextFbar + ldy DuplicateObj_Offset ;if we arrive at fifth firebar part, + lda Enemy_SprDataOffset,y ;get offset from long firebar and load OAM data offset + sta $06 ;using long firebar offset, then store as new one here +NextFbar: inc $00 ;move onto the next firebar part + lda $00 + cmp $ed ;if we end up at the maximum part, go on and leave + bcc DrawFbar ;otherwise go back and do another +SkipFBar: rts + +DrawFirebar_Collision: + lda $03 ;store mirror data elsewhere + sta $05 + ldy $06 ;load OAM data offset for firebar + lda $01 ;load horizontal adder we got from position loader + lsr $05 ;shift LSB of mirror data + bcs AddHA ;if carry was set, skip this part + eor #$ff + adc #$01 ;otherwise get two's compliment of horizontal adder +AddHA: clc ;add horizontal coordinate relative to screen to + adc Enemy_Rel_XPos ;horizontal adder, modified or otherwise + sta Sprite_X_Position,y ;store as X coordinate here + sta $06 ;store here for now, note offset is saved in Y still + cmp Enemy_Rel_XPos ;compare X coordinate of sprite to original X of firebar + bcs SubtR1 ;if sprite coordinate => original coordinate, branch + lda Enemy_Rel_XPos + sec ;otherwise subtract sprite X from the + sbc $06 ;original one and skip this part + jmp ChkFOfs +SubtR1: sec ;subtract original X from the + sbc Enemy_Rel_XPos ;current sprite X +ChkFOfs: cmp #$59 ;if difference of coordinates within a certain range, + bcc VAHandl ;continue by handling vertical adder + lda #$f8 ;otherwise, load offscreen Y coordinate + bne SetVFbr ;and unconditionally branch to move sprite offscreen +VAHandl: lda Enemy_Rel_YPos ;if vertical relative coordinate offscreen, + cmp #$f8 ;skip ahead of this part and write into sprite Y coordinate + beq SetVFbr + lda $02 ;load vertical adder we got from position loader + lsr $05 ;shift LSB of mirror data one more time + bcs AddVA ;if carry was set, skip this part + eor #$ff + adc #$01 ;otherwise get two's compliment of second part +AddVA: clc ;add vertical coordinate relative to screen to + adc Enemy_Rel_YPos ;the second data, modified or otherwise +SetVFbr: sta Sprite_Y_Position,y ;store as Y coordinate here + sta $07 ;also store here for now + +FirebarCollision: + jsr DrawFirebar ;run sub here to draw current tile of firebar + tya ;return OAM data offset and save + pha ;to the stack for now + lda StarInvincibleTimer ;if star mario invincibility timer + ora TimerControl ;or master timer controls set + bne NoColFB ;then skip all of this + sta $05 ;otherwise initialize counter + ldy Player_Y_HighPos + dey ;if player's vertical high byte offscreen, + bne NoColFB ;skip all of this + ldy Player_Y_Position ;get player's vertical position + lda PlayerSize ;get player's size + bne AdjSm ;if player small, branch to alter variables + lda CrouchingFlag + beq BigJp ;if player big and not crouching, jump ahead +AdjSm: inc $05 ;if small or big but crouching, execute this part + inc $05 ;first increment our counter twice (setting $02 as flag) + tya + clc ;then add 24 pixels to the player's + adc #$18 ;vertical coordinate + tay +BigJp: tya ;get vertical coordinate, altered or otherwise, from Y +FBCLoop: sec ;subtract vertical position of firebar + sbc $07 ;from the vertical coordinate of the player + bpl ChkVFBD ;if player lower on the screen than firebar, + eor #$ff ;skip two's compliment part + clc ;otherwise get two's compliment + adc #$01 +ChkVFBD: cmp #$08 ;if difference => 8 pixels, skip ahead of this part + bcs Chk2Ofs + lda $06 ;if firebar on far right on the screen, skip this, + cmp #$f0 ;because, really, what's the point? + bcs Chk2Ofs + lda Sprite_X_Position+4 ;get OAM X coordinate for sprite #1 + clc + adc #$04 ;add four pixels + sta $04 ;store here + sec ;subtract horizontal coordinate of firebar + sbc $06 ;from the X coordinate of player's sprite 1 + bpl ChkFBCl ;if modded X coordinate to the right of firebar + eor #$ff ;skip two's compliment part + clc ;otherwise get two's compliment + adc #$01 +ChkFBCl: cmp #$08 ;if difference < 8 pixels, collision, thus branch + bcc ChgSDir ;to process +Chk2Ofs: lda $05 ;if value of $02 was set earlier for whatever reason, + cmp #$02 ;branch to increment OAM offset and leave, no collision + beq NoColFB + ldy $05 ;otherwise get temp here and use as offset + lda Player_Y_Position + clc + adc FirebarYPos,y ;add value loaded with offset to player's vertical coordinate + inc $05 ;then increment temp and jump back + jmp FBCLoop +ChgSDir: ldx #$01 ;set movement direction by default + lda $04 ;if OAM X coordinate of player's sprite 1 + cmp $06 ;is greater than horizontal coordinate of firebar + bcs SetSDir ;then do not alter movement direction + inx ;otherwise increment it +SetSDir: stx Enemy_MovingDir ;store movement direction here + ldx #$00 + lda $00 ;save value written to $00 to stack + pha + jsr InjurePlayer ;perform sub to hurt or kill player + pla + sta $00 ;get value of $00 from stack +NoColFB: pla ;get OAM data offset + clc ;add four to it and save + adc #$04 + sta $06 + ldx ObjectOffset ;get enemy object buffer offset and leave + rts + +GetFirebarPosition: + pha ;save high byte of spinstate to the stack + and #%00001111 ;mask out low nybble + cmp #$09 + bcc GetHAdder ;if lower than $09, branch ahead + eor #%00001111 ;otherwise get two's compliment to oscillate + clc + adc #$01 +GetHAdder: sta $01 ;store result, modified or not, here + ldy $00 ;load number of firebar ball where we're at + lda FirebarTblOffsets,y ;load offset to firebar position data + clc + adc $01 ;add oscillated high byte of spinstate + tay ;to offset here and use as new offset + lda FirebarPosLookupTbl,y ;get data here and store as horizontal adder + sta $01 + pla ;pull whatever was in A from the stack + pha ;save it again because we still need it + clc + adc #$08 ;add eight this time, to get vertical adder + and #%00001111 ;mask out high nybble + cmp #$09 ;if lower than $09, branch ahead + bcc GetVAdder + eor #%00001111 ;otherwise get two's compliment + clc + adc #$01 +GetVAdder: sta $02 ;store result here + ldy $00 + lda FirebarTblOffsets,y ;load offset to firebar position data again + clc + adc $02 ;this time add value in $02 to offset here and use as offset + tay + lda FirebarPosLookupTbl,y ;get data here and store as vertica adder + sta $02 + pla ;pull out whatever was in A one last time + lsr ;divide by eight or shift three to the right + lsr + lsr + tay ;use as offset + lda FirebarMirrorData,y ;load mirroring data here + sta $03 ;store + rts + +;-------------------------------- + +PRandomSubtracter: + .db $f8, $a0, $70, $bd, $00 + +FlyCCBPriority: + .db $20, $20, $20, $00, $00 + +MoveFlyingCheepCheep: + lda Enemy_State,x ;check cheep-cheep's enemy state + and #%00100000 ;for d5 set + beq FlyCC ;branch to continue code if not set + lda #$00 + sta Enemy_SprAttrib,x ;otherwise clear sprite attributes + jmp MoveJ_EnemyVertically ;and jump to move defeated cheep-cheep downwards +FlyCC: jsr MoveEnemyHorizontally ;move cheep-cheep horizontally based on speed and force + ldy #$0d ;set vertical movement amount + lda #$05 ;set maximum speed + jsr SetXMoveAmt ;branch to impose gravity on flying cheep-cheep + lda Enemy_Y_MoveForce,x + lsr ;get vertical movement force and + lsr ;move high nybble to low + lsr + lsr + tay ;save as offset (note this tends to go into reach of code) + lda Enemy_Y_Position,x ;get vertical position + sec ;subtract pseudorandom value based on offset from position + sbc PRandomSubtracter,y + bpl AddCCF ;if result within top half of screen, skip this part + eor #$ff + clc ;otherwise get two's compliment + adc #$01 +AddCCF: cmp #$08 ;if result or two's compliment greater than eight, + bcs BPGet ;skip to the end without changing movement force + lda Enemy_Y_MoveForce,x + clc + adc #$10 ;otherwise add to it + sta Enemy_Y_MoveForce,x + lsr ;move high nybble to low again + lsr + lsr + lsr + tay +BPGet: lda FlyCCBPriority,y ;load bg priority data and store (this is very likely + sta Enemy_SprAttrib,x ;broken or residual code, value is overwritten before + rts ;drawing it next frame), then leave + +;-------------------------------- +;$00 - used to hold horizontal difference +;$01-$03 - used to hold difference adjusters + +LakituDiffAdj: + .db $15, $30, $40 + +MoveLakitu: + lda Enemy_State,x ;check lakitu's enemy state + and #%00100000 ;for d5 set + beq ChkLS ;if not set, continue with code + jmp MoveD_EnemyVertically ;otherwise jump to move defeated lakitu downwards +ChkLS: lda Enemy_State,x ;if lakitu's enemy state not set at all, + beq Fr12S ;go ahead and continue with code + lda #$00 + sta LakituMoveDirection,x ;otherwise initialize moving direction to move to left + sta EnemyFrenzyBuffer ;initialize frenzy buffer + lda #$10 + bne SetLSpd ;load horizontal speed and do unconditional branch +Fr12S: lda #Spiny + sta EnemyFrenzyBuffer ;set spiny identifier in frenzy buffer + ldy #$02 +LdLDa: lda LakituDiffAdj,y ;load values + sta $0001,y ;store in zero page + dey + bpl LdLDa ;do this until all values are stired + jsr PlayerLakituDiff ;execute sub to set speed and create spinys +SetLSpd: sta LakituMoveSpeed,x ;set movement speed returned from sub + ldy #$01 ;set moving direction to right by default + lda LakituMoveDirection,x + and #$01 ;get LSB of moving direction + bne SetLMov ;if set, branch to the end to use moving direction + lda LakituMoveSpeed,x + eor #$ff ;get two's compliment of moving speed + clc + adc #$01 + sta LakituMoveSpeed,x ;store as new moving speed + iny ;increment moving direction to left +SetLMov: sty Enemy_MovingDir,x ;store moving direction + jmp MoveEnemyHorizontally ;move lakitu horizontally + +PlayerLakituDiff: + ldy #$00 ;set Y for default value + jsr PlayerEnemyDiff ;get horizontal difference between enemy and player + bpl ChkLakDif ;branch if enemy is to the right of the player + iny ;increment Y for left of player + lda $00 + eor #$ff ;get two's compliment of low byte of horizontal difference + clc + adc #$01 ;store two's compliment as horizontal difference + sta $00 +ChkLakDif: lda $00 ;get low byte of horizontal difference + cmp #$3c ;if within a certain distance of player, branch + bcc ChkPSpeed + lda #$3c ;otherwise set maximum distance + sta $00 + lda Enemy_ID,x ;check if lakitu is in our current enemy slot + cmp #Lakitu + bne ChkPSpeed ;if not, branch elsewhere + tya ;compare contents of Y, now in A + cmp LakituMoveDirection,x ;to what is being used as horizontal movement direction + beq ChkPSpeed ;if moving toward the player, branch, do not alter + lda LakituMoveDirection,x ;if moving to the left beyond maximum distance, + beq SetLMovD ;branch and alter without delay + dec LakituMoveSpeed,x ;decrement horizontal speed + lda LakituMoveSpeed,x ;if horizontal speed not yet at zero, branch to leave + bne ExMoveLak +SetLMovD: tya ;set horizontal direction depending on horizontal + sta LakituMoveDirection,x ;difference between enemy and player if necessary +ChkPSpeed: lda $00 + and #%00111100 ;mask out all but four bits in the middle + lsr ;divide masked difference by four + lsr + sta $00 ;store as new value + ldy #$00 ;init offset + lda Player_X_Speed + beq SubDifAdj ;if player not moving horizontally, branch + lda ScrollAmount + beq SubDifAdj ;if scroll speed not set, branch to same place + iny ;otherwise increment offset + lda Player_X_Speed + cmp #$19 ;if player not running, branch + bcc ChkSpinyO + lda ScrollAmount + cmp #$02 ;if scroll speed below a certain amount, branch + bcc ChkSpinyO ;to same place + iny ;otherwise increment once more +ChkSpinyO: lda Enemy_ID,x ;check for spiny object + cmp #Spiny + bne ChkEmySpd ;branch if not found + lda Player_X_Speed ;if player not moving, skip this part + bne SubDifAdj +ChkEmySpd: lda Enemy_Y_Speed,x ;check vertical speed + bne SubDifAdj ;branch if nonzero + ldy #$00 ;otherwise reinit offset +SubDifAdj: lda $0001,y ;get one of three saved values from earlier + ldy $00 ;get saved horizontal difference +SPixelLak: sec ;subtract one for each pixel of horizontal difference + sbc #$01 ;from one of three saved values + dey + bpl SPixelLak ;branch until all pixels are subtracted, to adjust difference +ExMoveLak: rts ;leave!!! + +;------------------------------------------------------------------------------------- +;$04-$05 - used to store name table address in little endian order + +BridgeCollapseData: + .db $1a ;axe + .db $58 ;chain + .db $98, $96, $94, $92, $90, $8e, $8c ;bridge + .db $8a, $88, $86, $84, $82, $80 + +BridgeCollapse: + ldx BowserFront_Offset ;get enemy offset for bowser + lda Enemy_ID,x ;check enemy object identifier for bowser + cmp #Bowser ;if not found, branch ahead, + bne SetM2 ;metatile removal not necessary + stx ObjectOffset ;store as enemy offset here + lda Enemy_State,x ;if bowser in normal state, skip all of this + beq RemoveBridge + and #%01000000 ;if bowser's state has d6 clear, skip to silence music + beq SetM2 + lda Enemy_Y_Position,x ;check bowser's vertical coordinate + cmp #$e0 ;if bowser not yet low enough, skip this part ahead + bcc MoveD_Bowser +SetM2: lda #Silence ;silence music + sta EventMusicQueue + inc OperMode_Task ;move onto next secondary mode in autoctrl mode + jmp KillAllEnemies ;jump to empty all enemy slots and then leave + +MoveD_Bowser: + jsr MoveEnemySlowVert ;do a sub to move bowser downwards + jmp BowserGfxHandler ;jump to draw bowser's front and rear, then leave + +RemoveBridge: + dec BowserFeetCounter ;decrement timer to control bowser's feet + bne NoBFall ;if not expired, skip all of this + lda #$04 + sta BowserFeetCounter ;otherwise, set timer now + lda BowserBodyControls + eor #$01 ;invert bit to control bowser's feet + sta BowserBodyControls + lda #$22 ;put high byte of name table address here for now + sta $05 + ldy BridgeCollapseOffset ;get bridge collapse offset here + lda BridgeCollapseData,y ;load low byte of name table address and store here + sta $04 + ldy VRAM_Buffer1_Offset ;increment vram buffer offset + iny + ldx #$0c ;set offset for tile data for sub to draw blank metatile + jsr RemBridge ;do sub here to remove bowser's bridge metatiles + ldx ObjectOffset ;get enemy offset + jsr MoveVOffset ;set new vram buffer offset + lda #Sfx_Blast ;load the fireworks/gunfire sound into the square 2 sfx + sta Square2SoundQueue ;queue while at the same time loading the brick + lda #Sfx_BrickShatter ;shatter sound into the noise sfx queue thus + sta NoiseSoundQueue ;producing the unique sound of the bridge collapsing + inc BridgeCollapseOffset ;increment bridge collapse offset + lda BridgeCollapseOffset + cmp #$0f ;if bridge collapse offset has not yet reached + bne NoBFall ;the end, go ahead and skip this part + jsr InitVStf ;initialize whatever vertical speed bowser has + lda #%01000000 + sta Enemy_State,x ;set bowser's state to one of defeated states (d6 set) + lda #Sfx_BowserFall + sta Square2SoundQueue ;play bowser defeat sound +NoBFall: jmp BowserGfxHandler ;jump to code that draws bowser + +;-------------------------------- + +PRandomRange: + .db $21, $41, $11, $31 + +RunBowser: + lda Enemy_State,x ;if d5 in enemy state is not set + and #%00100000 ;then branch elsewhere to run bowser + beq BowserControl + lda Enemy_Y_Position,x ;otherwise check vertical position + cmp #$e0 ;if above a certain point, branch to move defeated bowser + bcc MoveD_Bowser ;otherwise proceed to KillAllEnemies + +KillAllEnemies: + ldx #$04 ;start with last enemy slot +KillLoop: jsr EraseEnemyObject ;branch to kill enemy objects + dex ;move onto next enemy slot + bpl KillLoop ;do this until all slots are emptied + sta EnemyFrenzyBuffer ;empty frenzy buffer + ldx ObjectOffset ;get enemy object offset and leave + rts + +BowserControl: + lda #$00 + sta EnemyFrenzyBuffer ;empty frenzy buffer + lda TimerControl ;if master timer control not set, + beq ChkMouth ;skip jump and execute code here + jmp SkipToFB ;otherwise, jump over a bunch of code +ChkMouth: lda BowserBodyControls ;check bowser's mouth + bpl FeetTmr ;if bit clear, go ahead with code here + jmp HammerChk ;otherwise skip a whole section starting here +FeetTmr: dec BowserFeetCounter ;decrement timer to control bowser's feet + bne ResetMDr ;if not expired, skip this part + lda #$20 ;otherwise, reset timer + sta BowserFeetCounter + lda BowserBodyControls ;and invert bit used + eor #%00000001 ;to control bowser's feet + sta BowserBodyControls +ResetMDr: lda FrameCounter ;check frame counter + and #%00001111 ;if not on every sixteenth frame, skip + bne B_FaceP ;ahead to continue code + lda #$02 ;otherwise reset moving/facing direction every + sta Enemy_MovingDir,x ;sixteen frames +B_FaceP: lda EnemyFrameTimer,x ;if timer set here expired, + beq GetPRCmp ;branch to next section + jsr PlayerEnemyDiff ;get horizontal difference between player and bowser, + bpl GetPRCmp ;and branch if bowser to the right of the player + lda #$01 + sta Enemy_MovingDir,x ;set bowser to move and face to the right + lda #$02 + sta BowserMovementSpeed ;set movement speed + lda #$20 + sta EnemyFrameTimer,x ;set timer here + sta BowserFireBreathTimer ;set timer used for bowser's flame + lda Enemy_X_Position,x + cmp #$c8 ;if bowser to the right past a certain point, + bcs HammerChk ;skip ahead to some other section +GetPRCmp: lda FrameCounter ;get frame counter + and #%00000011 + bne HammerChk ;execute this code every fourth frame, otherwise branch + lda Enemy_X_Position,x + cmp BowserOrigXPos ;if bowser not at original horizontal position, + bne GetDToO ;branch to skip this part + lda PseudoRandomBitReg,x + and #%00000011 ;get pseudorandom offset + tay + lda PRandomRange,y ;load value using pseudorandom offset + sta MaxRangeFromOrigin ;and store here +GetDToO: lda Enemy_X_Position,x + clc ;add movement speed to bowser's horizontal + adc BowserMovementSpeed ;coordinate and save as new horizontal position + sta Enemy_X_Position,x + ldy Enemy_MovingDir,x + cpy #$01 ;if bowser moving and facing to the right, skip ahead + beq HammerChk + ldy #$ff ;set default movement speed here (move left) + sec ;get difference of current vs. original + sbc BowserOrigXPos ;horizontal position + bpl CompDToO ;if current position to the right of original, skip ahead + eor #$ff + clc ;get two's compliment + adc #$01 + ldy #$01 ;set alternate movement speed here (move right) +CompDToO: cmp MaxRangeFromOrigin ;compare difference with pseudorandom value + bcc HammerChk ;if difference < pseudorandom value, leave speed alone + sty BowserMovementSpeed ;otherwise change bowser's movement speed +HammerChk: lda EnemyFrameTimer,x ;if timer set here not expired yet, skip ahead to + bne MakeBJump ;some other section of code + jsr MoveEnemySlowVert ;otherwise start by moving bowser downwards + lda WorldNumber ;check world number + cmp #World6 + bcc SetHmrTmr ;if world 1-5, skip this part (not time to throw hammers yet) + lda FrameCounter + and #%00000011 ;check to see if it's time to execute sub + bne SetHmrTmr ;if not, skip sub, otherwise + jsr SpawnHammerObj ;execute sub on every fourth frame to spawn misc object (hammer) +SetHmrTmr: lda Enemy_Y_Position,x ;get current vertical position + cmp #$80 ;if still above a certain point + bcc ChkFireB ;then skip to world number check for flames + lda PseudoRandomBitReg,x + and #%00000011 ;get pseudorandom offset + tay + lda PRandomRange,y ;get value using pseudorandom offset + sta EnemyFrameTimer,x ;set for timer here +SkipToFB: jmp ChkFireB ;jump to execute flames code +MakeBJump: cmp #$01 ;if timer not yet about to expire, + bne ChkFireB ;skip ahead to next part + dec Enemy_Y_Position,x ;otherwise decrement vertical coordinate + jsr InitVStf ;initialize movement amount + lda #$fe + sta Enemy_Y_Speed,x ;set vertical speed to move bowser upwards +ChkFireB: lda WorldNumber ;check world number here + cmp #World8 ;world 8? + beq SpawnFBr ;if so, execute this part here + cmp #World6 ;world 6-7? + bcs BowserGfxHandler ;if so, skip this part here +SpawnFBr: lda BowserFireBreathTimer ;check timer here + bne BowserGfxHandler ;if not expired yet, skip all of this + lda #$20 + sta BowserFireBreathTimer ;set timer here + lda BowserBodyControls + eor #%10000000 ;invert bowser's mouth bit to open + sta BowserBodyControls ;and close bowser's mouth + bmi ChkFireB ;if bowser's mouth open, loop back + jsr SetFlameTimer ;get timing for bowser's flame + ldy SecondaryHardMode + beq SetFBTmr ;if secondary hard mode flag not set, skip this + sec + sbc #$10 ;otherwise subtract from value in A +SetFBTmr: sta BowserFireBreathTimer ;set value as timer here + lda #BowserFlame ;put bowser's flame identifier + sta EnemyFrenzyBuffer ;in enemy frenzy buffer + +;-------------------------------- + +BowserGfxHandler: + jsr ProcessBowserHalf ;do a sub here to process bowser's front + ldy #$10 ;load default value here to position bowser's rear + lda Enemy_MovingDir,x ;check moving direction + lsr + bcc CopyFToR ;if moving left, use default + ldy #$f0 ;otherwise load alternate positioning value here +CopyFToR: tya ;move bowser's rear object position value to A + clc + adc Enemy_X_Position,x ;add to bowser's front object horizontal coordinate + ldy DuplicateObj_Offset ;get bowser's rear object offset + sta Enemy_X_Position,y ;store A as bowser's rear horizontal coordinate + lda Enemy_Y_Position,x + clc ;add eight pixels to bowser's front object + adc #$08 ;vertical coordinate and store as vertical coordinate + sta Enemy_Y_Position,y ;for bowser's rear + lda Enemy_State,x + sta Enemy_State,y ;copy enemy state directly from front to rear + lda Enemy_MovingDir,x + sta Enemy_MovingDir,y ;copy moving direction also + lda ObjectOffset ;save enemy object offset of front to stack + pha + ldx DuplicateObj_Offset ;put enemy object offset of rear as current + stx ObjectOffset + lda #Bowser ;set bowser's enemy identifier + sta Enemy_ID,x ;store in bowser's rear object + jsr ProcessBowserHalf ;do a sub here to process bowser's rear + pla + sta ObjectOffset ;get original enemy object offset + tax + lda #$00 ;nullify bowser's front/rear graphics flag + sta BowserGfxFlag +ExBGfxH: rts ;leave! + +ProcessBowserHalf: + inc BowserGfxFlag ;increment bowser's graphics flag, then run subroutines + jsr RunRetainerObj ;to get offscreen bits, relative position and draw bowser (finally!) + lda Enemy_State,x + bne ExBGfxH ;if either enemy object not in normal state, branch to leave + lda #$0a + sta Enemy_BoundBoxCtrl,x ;set bounding box size control + jsr GetEnemyBoundBox ;get bounding box coordinates + jmp PlayerEnemyCollision ;do player-to-enemy collision detection + +;------------------------------------------------------------------------------------- +;$00 - used to hold movement force and tile number +;$01 - used to hold sprite attribute data + +FlameTimerData: + .db $bf, $40, $bf, $bf, $bf, $40, $40, $bf + +SetFlameTimer: + ldy BowserFlameTimerCtrl ;load counter as offset + inc BowserFlameTimerCtrl ;increment + lda BowserFlameTimerCtrl ;mask out all but 3 LSB + and #%00000111 ;to keep in range of 0-7 + sta BowserFlameTimerCtrl + lda FlameTimerData,y ;load value to be used then leave +ExFl: rts + +ProcBowserFlame: + lda TimerControl ;if master timer control flag set, + bne SetGfxF ;skip all of this + lda #$40 ;load default movement force + ldy SecondaryHardMode + beq SFlmX ;if secondary hard mode flag not set, use default + lda #$60 ;otherwise load alternate movement force to go faster +SFlmX: sta $00 ;store value here + lda Enemy_X_MoveForce,x + sec ;subtract value from movement force + sbc $00 + sta Enemy_X_MoveForce,x ;save new value + lda Enemy_X_Position,x + sbc #$01 ;subtract one from horizontal position to move + sta Enemy_X_Position,x ;to the left + lda Enemy_PageLoc,x + sbc #$00 ;subtract borrow from page location + sta Enemy_PageLoc,x + ldy BowserFlamePRandomOfs,x ;get some value here and use as offset + lda Enemy_Y_Position,x ;load vertical coordinate + cmp FlameYPosData,y ;compare against coordinate data using $0417,x as offset + beq SetGfxF ;if equal, branch and do not modify coordinate + clc + adc Enemy_Y_MoveForce,x ;otherwise add value here to coordinate and store + sta Enemy_Y_Position,x ;as new vertical coordinate +SetGfxF: jsr RelativeEnemyPosition ;get new relative coordinates + lda Enemy_State,x ;if bowser's flame not in normal state, + bne ExFl ;branch to leave + lda #$51 ;otherwise, continue + sta $00 ;write first tile number + ldy #$02 ;load attributes without vertical flip by default + lda FrameCounter + and #%00000010 ;invert vertical flip bit every 2 frames + beq FlmeAt ;if d1 not set, write default value + ldy #$82 ;otherwise write value with vertical flip bit set +FlmeAt: sty $01 ;set bowser's flame sprite attributes here + ldy Enemy_SprDataOffset,x ;get OAM data offset + ldx #$00 + +DrawFlameLoop: + lda Enemy_Rel_YPos ;get Y relative coordinate of current enemy object + sta Sprite_Y_Position,y ;write into Y coordinate of OAM data + lda $00 + sta Sprite_Tilenumber,y ;write current tile number into OAM data + inc $00 ;increment tile number to draw more bowser's flame + lda $01 + sta Sprite_Attributes,y ;write saved attributes into OAM data + lda Enemy_Rel_XPos + sta Sprite_X_Position,y ;write X relative coordinate of current enemy object + clc + adc #$08 + sta Enemy_Rel_XPos ;then add eight to it and store + iny + iny + iny + iny ;increment Y four times to move onto the next OAM + inx ;move onto the next OAM, and branch if three + cpx #$03 ;have not yet been done + bcc DrawFlameLoop + ldx ObjectOffset ;reload original enemy offset + jsr GetEnemyOffscreenBits ;get offscreen information + ldy Enemy_SprDataOffset,x ;get OAM data offset + lda Enemy_OffscreenBits ;get enemy object offscreen bits + lsr ;move d0 to carry and result to stack + pha + bcc M3FOfs ;branch if carry not set + lda #$f8 ;otherwise move sprite offscreen, this part likely + sta Sprite_Y_Position+12,y ;residual since flame is only made of three sprites +M3FOfs: pla ;get bits from stack + lsr ;move d1 to carry and move bits back to stack + pha + bcc M2FOfs ;branch if carry not set again + lda #$f8 ;otherwise move third sprite offscreen + sta Sprite_Y_Position+8,y +M2FOfs: pla ;get bits from stack again + lsr ;move d2 to carry and move bits back to stack again + pha + bcc M1FOfs ;branch if carry not set yet again + lda #$f8 ;otherwise move second sprite offscreen + sta Sprite_Y_Position+4,y +M1FOfs: pla ;get bits from stack one last time + lsr ;move d3 to carry + bcc ExFlmeD ;branch if carry not set one last time + lda #$f8 + sta Sprite_Y_Position,y ;otherwise move first sprite offscreen +ExFlmeD: rts ;leave + +;-------------------------------- + +RunFireworks: + dec ExplosionTimerCounter,x ;decrement explosion timing counter here + bne SetupExpl ;if not expired, skip this part + lda #$08 + sta ExplosionTimerCounter,x ;reset counter + inc ExplosionGfxCounter,x ;increment explosion graphics counter + lda ExplosionGfxCounter,x + cmp #$03 ;check explosion graphics counter + bcs FireworksSoundScore ;if at a certain point, branch to kill this object +SetupExpl: jsr RelativeEnemyPosition ;get relative coordinates of explosion + lda Enemy_Rel_YPos ;copy relative coordinates + sta Fireball_Rel_YPos ;from the enemy object to the fireball object + lda Enemy_Rel_XPos ;first vertical, then horizontal + sta Fireball_Rel_XPos + ldy Enemy_SprDataOffset,x ;get OAM data offset + lda ExplosionGfxCounter,x ;get explosion graphics counter + jsr DrawExplosion_Fireworks ;do a sub to draw the explosion then leave + rts + +FireworksSoundScore: + lda #$00 ;disable enemy buffer flag + sta Enemy_Flag,x + lda #Sfx_Blast ;play fireworks/gunfire sound + sta Square2SoundQueue + lda #$05 ;set part of score modifier for 500 points + sta DigitModifier+4 + jmp EndAreaPoints ;jump to award points accordingly then leave + +;-------------------------------- + +StarFlagYPosAdder: + .db $00, $00, $08, $08 + +StarFlagXPosAdder: + .db $00, $08, $00, $08 + +StarFlagTileData: + .db $54, $55, $56, $57 + +RunStarFlagObj: + lda #$00 ;initialize enemy frenzy buffer + sta EnemyFrenzyBuffer + lda StarFlagTaskControl ;check star flag object task number here + cmp #$05 ;if greater than 5, branch to exit + bcs StarFlagExit + jsr JumpEngine ;otherwise jump to appropriate sub + + .dw StarFlagExit + .dw GameTimerFireworks + .dw AwardGameTimerPoints + .dw RaiseFlagSetoffFWorks + .dw DelayToAreaEnd + +GameTimerFireworks: + ldy #$05 ;set default state for star flag object + lda GameTimerDisplay+2 ;get game timer's last digit + cmp #$01 + beq SetFWC ;if last digit of game timer set to 1, skip ahead + ldy #$03 ;otherwise load new value for state + cmp #$03 + beq SetFWC ;if last digit of game timer set to 3, skip ahead + ldy #$00 ;otherwise load one more potential value for state + cmp #$06 + beq SetFWC ;if last digit of game timer set to 6, skip ahead + lda #$ff ;otherwise set value for no fireworks +SetFWC: sta FireworksCounter ;set fireworks counter here + sty Enemy_State,x ;set whatever state we have in star flag object + +IncrementSFTask1: + inc StarFlagTaskControl ;increment star flag object task number + +StarFlagExit: + rts ;leave + +AwardGameTimerPoints: + lda GameTimerDisplay ;check all game timer digits for any intervals left + ora GameTimerDisplay+1 + ora GameTimerDisplay+2 + beq IncrementSFTask1 ;if no time left on game timer at all, branch to next task + lda FrameCounter + and #%00000100 ;check frame counter for d2 set (skip ahead + beq NoTTick ;for four frames every four frames) branch if not set + lda #Sfx_TimerTick + sta Square2SoundQueue ;load timer tick sound +NoTTick: ldy #$23 ;set offset here to subtract from game timer's last digit + lda #$ff ;set adder here to $ff, or -1, to subtract one + sta DigitModifier+5 ;from the last digit of the game timer + jsr DigitsMathRoutine ;subtract digit + lda #$05 ;set now to add 50 points + sta DigitModifier+5 ;per game timer interval subtracted + +EndAreaPoints: + ldy #$0b ;load offset for mario's score by default + lda CurrentPlayer ;check player on the screen + beq ELPGive ;if mario, do not change + ldy #$11 ;otherwise load offset for luigi's score +ELPGive: jsr DigitsMathRoutine ;award 50 points per game timer interval + lda CurrentPlayer ;get player on the screen (or 500 points per + asl ;fireworks explosion if branched here from there) + asl ;shift to high nybble + asl + asl + ora #%00000100 ;add four to set nybble for game timer + jmp UpdateNumber ;jump to print the new score and game timer + +RaiseFlagSetoffFWorks: + lda Enemy_Y_Position,x ;check star flag's vertical position + cmp #$72 ;against preset value + bcc SetoffF ;if star flag higher vertically, branch to other code + dec Enemy_Y_Position,x ;otherwise, raise star flag by one pixel + jmp DrawStarFlag ;and skip this part here +SetoffF: lda FireworksCounter ;check fireworks counter + beq DrawFlagSetTimer ;if no fireworks left to go off, skip this part + bmi DrawFlagSetTimer ;if no fireworks set to go off, skip this part + lda #Fireworks + sta EnemyFrenzyBuffer ;otherwise set fireworks object in frenzy queue + +DrawStarFlag: + jsr RelativeEnemyPosition ;get relative coordinates of star flag + ldy Enemy_SprDataOffset,x ;get OAM data offset + ldx #$03 ;do four sprites +DSFLoop: lda Enemy_Rel_YPos ;get relative vertical coordinate + clc + adc StarFlagYPosAdder,x ;add Y coordinate adder data + sta Sprite_Y_Position,y ;store as Y coordinate + lda StarFlagTileData,x ;get tile number + sta Sprite_Tilenumber,y ;store as tile number + lda #$22 ;set palette and background priority bits + sta Sprite_Attributes,y ;store as attributes + lda Enemy_Rel_XPos ;get relative horizontal coordinate + clc + adc StarFlagXPosAdder,x ;add X coordinate adder data + sta Sprite_X_Position,y ;store as X coordinate + iny + iny ;increment OAM data offset four bytes + iny ;for next sprite + iny + dex ;move onto next sprite + bpl DSFLoop ;do this until all sprites are done + ldx ObjectOffset ;get enemy object offset and leave + rts + +DrawFlagSetTimer: + jsr DrawStarFlag ;do sub to draw star flag + lda #$06 + sta EnemyIntervalTimer,x ;set interval timer here + +IncrementSFTask2: + inc StarFlagTaskControl ;move onto next task + rts + +DelayToAreaEnd: + jsr DrawStarFlag ;do sub to draw star flag + lda EnemyIntervalTimer,x ;if interval timer set in previous task + bne StarFlagExit2 ;not yet expired, branch to leave + lda EventMusicBuffer ;if event music buffer empty, + beq IncrementSFTask2 ;branch to increment task + +StarFlagExit2: + rts ;otherwise leave + +;-------------------------------- +;$00 - used to store horizontal difference between player and piranha plant + +MovePiranhaPlant: + lda Enemy_State,x ;check enemy state + bne PutinPipe ;if set at all, branch to leave + lda EnemyFrameTimer,x ;check enemy's timer here + bne PutinPipe ;branch to end if not yet expired + lda PiranhaPlant_MoveFlag,x ;check movement flag + bne SetupToMovePPlant ;if moving, skip to part ahead + lda PiranhaPlant_Y_Speed,x ;if currently rising, branch + bmi ReversePlantSpeed ;to move enemy upwards out of pipe + jsr PlayerEnemyDiff ;get horizontal difference between player and + bpl ChkPlayerNearPipe ;piranha plant, and branch if enemy to right of player + lda $00 ;otherwise get saved horizontal difference + eor #$ff + clc ;and change to two's compliment + adc #$01 + sta $00 ;save as new horizontal difference + +ChkPlayerNearPipe: + lda $00 ;get saved horizontal difference + cmp #$21 + bcc PutinPipe ;if player within a certain distance, branch to leave + +ReversePlantSpeed: + lda PiranhaPlant_Y_Speed,x ;get vertical speed + eor #$ff + clc ;change to two's compliment + adc #$01 + sta PiranhaPlant_Y_Speed,x ;save as new vertical speed + inc PiranhaPlant_MoveFlag,x ;increment to set movement flag + +SetupToMovePPlant: + lda PiranhaPlantDownYPos,x ;get original vertical coordinate (lowest point) + ldy PiranhaPlant_Y_Speed,x ;get vertical speed + bpl RiseFallPiranhaPlant ;branch if moving downwards + lda PiranhaPlantUpYPos,x ;otherwise get other vertical coordinate (highest point) + +RiseFallPiranhaPlant: + sta $00 ;save vertical coordinate here + lda FrameCounter ;get frame counter + lsr + bcc PutinPipe ;branch to leave if d0 set (execute code every other frame) + lda TimerControl ;get master timer control + bne PutinPipe ;branch to leave if set (likely not necessary) + lda Enemy_Y_Position,x ;get current vertical coordinate + clc + adc PiranhaPlant_Y_Speed,x ;add vertical speed to move up or down + sta Enemy_Y_Position,x ;save as new vertical coordinate + cmp $00 ;compare against low or high coordinate + bne PutinPipe ;branch to leave if not yet reached + lda #$00 + sta PiranhaPlant_MoveFlag,x ;otherwise clear movement flag + lda #$40 + sta EnemyFrameTimer,x ;set timer to delay piranha plant movement + +PutinPipe: + lda #%00100000 ;set background priority bit in sprite + sta Enemy_SprAttrib,x ;attributes to give illusion of being inside pipe + rts ;then leave + +;------------------------------------------------------------------------------------- +;$07 - spinning speed + +FirebarSpin: + sta $07 ;save spinning speed here + lda FirebarSpinDirection,x ;check spinning direction + bne SpinCounterClockwise ;if moving counter-clockwise, branch to other part + ldy #$18 ;possibly residual ldy + lda FirebarSpinState_Low,x + clc ;add spinning speed to what would normally be + adc $07 ;the horizontal speed + sta FirebarSpinState_Low,x + lda FirebarSpinState_High,x ;add carry to what would normally be the vertical speed + adc #$00 + rts + +SpinCounterClockwise: + ldy #$08 ;possibly residual ldy + lda FirebarSpinState_Low,x + sec ;subtract spinning speed to what would normally be + sbc $07 ;the horizontal speed + sta FirebarSpinState_Low,x + lda FirebarSpinState_High,x ;add carry to what would normally be the vertical speed + sbc #$00 + rts + +;------------------------------------------------------------------------------------- +;$00 - used to hold collision flag, Y movement force + 5 or low byte of name table for rope +;$01 - used to hold high byte of name table for rope +;$02 - used to hold page location of rope + +BalancePlatform: + lda Enemy_Y_HighPos,x ;check high byte of vertical position + cmp #$03 + bne DoBPl + jmp EraseEnemyObject ;if far below screen, kill the object +DoBPl: lda Enemy_State,x ;get object's state (set to $ff or other platform offset) + bpl CheckBalPlatform ;if doing other balance platform, branch to leave + rts + +CheckBalPlatform: + tay ;save offset from state as Y + lda PlatformCollisionFlag,x ;get collision flag of platform + sta $00 ;store here + lda Enemy_MovingDir,x ;get moving direction + beq ChkForFall + jmp PlatformFall ;if set, jump here + +ChkForFall: + lda #$2d ;check if platform is above a certain point + cmp Enemy_Y_Position,x + bcc ChkOtherForFall ;if not, branch elsewhere + cpy $00 ;if collision flag is set to same value as + beq MakePlatformFall ;enemy state, branch to make platforms fall + clc + adc #$02 ;otherwise add 2 pixels to vertical position + sta Enemy_Y_Position,x ;of current platform and branch elsewhere + jmp StopPlatforms ;to make platforms stop + +MakePlatformFall: + jmp InitPlatformFall ;make platforms fall + +ChkOtherForFall: + cmp Enemy_Y_Position,y ;check if other platform is above a certain point + bcc ChkToMoveBalPlat ;if not, branch elsewhere + cpx $00 ;if collision flag is set to same value as + beq MakePlatformFall ;enemy state, branch to make platforms fall + clc + adc #$02 ;otherwise add 2 pixels to vertical position + sta Enemy_Y_Position,y ;of other platform and branch elsewhere + jmp StopPlatforms ;jump to stop movement and do not return + +ChkToMoveBalPlat: + lda Enemy_Y_Position,x ;save vertical position to stack + pha + lda PlatformCollisionFlag,x ;get collision flag + bpl ColFlg ;branch if collision + lda Enemy_Y_MoveForce,x + clc ;add $05 to contents of moveforce, whatever they be + adc #$05 + sta $00 ;store here + lda Enemy_Y_Speed,x + adc #$00 ;add carry to vertical speed + bmi PlatDn ;branch if moving downwards + bne PlatUp ;branch elsewhere if moving upwards + lda $00 + cmp #$0b ;check if there's still a little force left + bcc PlatSt ;if not enough, branch to stop movement + bcs PlatUp ;otherwise keep branch to move upwards +ColFlg: cmp ObjectOffset ;if collision flag matches + beq PlatDn ;current enemy object offset, branch +PlatUp: jsr MovePlatformUp ;do a sub to move upwards + jmp DoOtherPlatform ;jump ahead to remaining code +PlatSt: jsr StopPlatforms ;do a sub to stop movement + jmp DoOtherPlatform ;jump ahead to remaining code +PlatDn: jsr MovePlatformDown ;do a sub to move downwards + +DoOtherPlatform: + ldy Enemy_State,x ;get offset of other platform + pla ;get old vertical coordinate from stack + sec + sbc Enemy_Y_Position,x ;get difference of old vs. new coordinate + clc + adc Enemy_Y_Position,y ;add difference to vertical coordinate of other + sta Enemy_Y_Position,y ;platform to move it in the opposite direction + lda PlatformCollisionFlag,x ;if no collision, skip this part here + bmi DrawEraseRope + tax ;put offset which collision occurred here + jsr PositionPlayerOnVPlat ;and use it to position player accordingly + +DrawEraseRope: + ldy ObjectOffset ;get enemy object offset + lda Enemy_Y_Speed,y ;check to see if current platform is + ora Enemy_Y_MoveForce,y ;moving at all + beq ExitRp ;if not, skip all of this and branch to leave + ldx VRAM_Buffer1_Offset ;get vram buffer offset + cpx #$20 ;if offset beyond a certain point, go ahead + bcs ExitRp ;and skip this, branch to leave + lda Enemy_Y_Speed,y + pha ;save two copies of vertical speed to stack + pha + jsr SetupPlatformRope ;do a sub to figure out where to put new bg tiles + lda $01 ;write name table address to vram buffer + sta VRAM_Buffer1,x ;first the high byte, then the low + lda $00 + sta VRAM_Buffer1+1,x + lda #$02 ;set length for 2 bytes + sta VRAM_Buffer1+2,x + lda Enemy_Y_Speed,y ;if platform moving upwards, branch + bmi EraseR1 ;to do something else + lda #$a2 + sta VRAM_Buffer1+3,x ;otherwise put tile numbers for left + lda #$a3 ;and right sides of rope in vram buffer + sta VRAM_Buffer1+4,x + jmp OtherRope ;jump to skip this part +EraseR1: lda #$24 ;put blank tiles in vram buffer + sta VRAM_Buffer1+3,x ;to erase rope + sta VRAM_Buffer1+4,x + +OtherRope: + lda Enemy_State,y ;get offset of other platform from state + tay ;use as Y here + pla ;pull second copy of vertical speed from stack + eor #$ff ;invert bits to reverse speed + jsr SetupPlatformRope ;do sub again to figure out where to put bg tiles + lda $01 ;write name table address to vram buffer + sta VRAM_Buffer1+5,x ;this time we're doing putting tiles for + lda $00 ;the other platform + sta VRAM_Buffer1+6,x + lda #$02 + sta VRAM_Buffer1+7,x ;set length again for 2 bytes + pla ;pull first copy of vertical speed from stack + bpl EraseR2 ;if moving upwards (note inversion earlier), skip this + lda #$a2 + sta VRAM_Buffer1+8,x ;otherwise put tile numbers for left + lda #$a3 ;and right sides of rope in vram + sta VRAM_Buffer1+9,x ;transfer buffer + jmp EndRp ;jump to skip this part +EraseR2: lda #$24 ;put blank tiles in vram buffer + sta VRAM_Buffer1+8,x ;to erase rope + sta VRAM_Buffer1+9,x +EndRp: lda #$00 ;put null terminator at the end + sta VRAM_Buffer1+10,x + lda VRAM_Buffer1_Offset ;add ten bytes to the vram buffer offset + clc ;and store + adc #10 + sta VRAM_Buffer1_Offset +ExitRp: ldx ObjectOffset ;get enemy object buffer offset and leave + rts + +SetupPlatformRope: + pha ;save second/third copy to stack + lda Enemy_X_Position,y ;get horizontal coordinate + clc + adc #$08 ;add eight pixels + ldx SecondaryHardMode ;if secondary hard mode flag set, + bne GetLRp ;use coordinate as-is + clc + adc #$10 ;otherwise add sixteen more pixels +GetLRp: pha ;save modified horizontal coordinate to stack + lda Enemy_PageLoc,y + adc #$00 ;add carry to page location + sta $02 ;and save here + pla ;pull modified horizontal coordinate + and #%11110000 ;from the stack, mask out low nybble + lsr ;and shift three bits to the right + lsr + lsr + sta $00 ;store result here as part of name table low byte + ldx Enemy_Y_Position,y ;get vertical coordinate + pla ;get second/third copy of vertical speed from stack + bpl GetHRp ;skip this part if moving downwards or not at all + txa + clc + adc #$08 ;add eight to vertical coordinate and + tax ;save as X +GetHRp: txa ;move vertical coordinate to A + ldx VRAM_Buffer1_Offset ;get vram buffer offset + asl + rol ;rotate d7 to d0 and d6 into carry + pha ;save modified vertical coordinate to stack + rol ;rotate carry to d0, thus d7 and d6 are at 2 LSB + and #%00000011 ;mask out all bits but d7 and d6, then set + ora #%00100000 ;d5 to get appropriate high byte of name table + sta $01 ;address, then store + lda $02 ;get saved page location from earlier + and #$01 ;mask out all but LSB + asl + asl ;shift twice to the left and save with the + ora $01 ;rest of the bits of the high byte, to get + sta $01 ;the proper name table and the right place on it + pla ;get modified vertical coordinate from stack + and #%11100000 ;mask out low nybble and LSB of high nybble + clc + adc $00 ;add to horizontal part saved here + sta $00 ;save as name table low byte + lda Enemy_Y_Position,y + cmp #$e8 ;if vertical position not below the + bcc ExPRp ;bottom of the screen, we're done, branch to leave + lda $00 + and #%10111111 ;mask out d6 of low byte of name table address + sta $00 +ExPRp: rts ;leave! + +InitPlatformFall: + tya ;move offset of other platform from Y to X + tax + jsr GetEnemyOffscreenBits ;get offscreen bits + lda #$06 + jsr SetupFloateyNumber ;award 1000 points to player + lda Player_Rel_XPos + sta FloateyNum_X_Pos,x ;put floatey number coordinates where player is + lda Player_Y_Position + sta FloateyNum_Y_Pos,x + lda #$01 ;set moving direction as flag for + sta Enemy_MovingDir,x ;falling platforms + +StopPlatforms: + jsr InitVStf ;initialize vertical speed and low byte + sta Enemy_Y_Speed,y ;for both platforms and leave + sta Enemy_Y_MoveForce,y + rts + +PlatformFall: + tya ;save offset for other platform to stack + pha + jsr MoveFallingPlatform ;make current platform fall + pla + tax ;pull offset from stack and save to X + jsr MoveFallingPlatform ;make other platform fall + ldx ObjectOffset + lda PlatformCollisionFlag,x ;if player not standing on either platform, + bmi ExPF ;skip this part + tax ;transfer collision flag offset as offset to X + jsr PositionPlayerOnVPlat ;and position player appropriately +ExPF: ldx ObjectOffset ;get enemy object buffer offset and leave + rts + +;-------------------------------- + +YMovingPlatform: + lda Enemy_Y_Speed,x ;if platform moving up or down, skip ahead to + ora Enemy_Y_MoveForce,x ;check on other position + bne ChkYCenterPos + sta Enemy_YMF_Dummy,x ;initialize dummy variable + lda Enemy_Y_Position,x + cmp YPlatformTopYPos,x ;if current vertical position => top position, branch + bcs ChkYCenterPos ;ahead of all this + lda FrameCounter + and #%00000111 ;check for every eighth frame + bne SkipIY + inc Enemy_Y_Position,x ;increase vertical position every eighth frame +SkipIY: jmp ChkYPCollision ;skip ahead to last part + +ChkYCenterPos: + lda Enemy_Y_Position,x ;if current vertical position < central position, branch + cmp YPlatformCenterYPos,x ;to slow ascent/move downwards + bcc YMDown + jsr MovePlatformUp ;otherwise start slowing descent/moving upwards + jmp ChkYPCollision +YMDown: jsr MovePlatformDown ;start slowing ascent/moving downwards + +ChkYPCollision: + lda PlatformCollisionFlag,x ;if collision flag not set here, branch + bmi ExYPl ;to leave + jsr PositionPlayerOnVPlat ;otherwise position player appropriately +ExYPl: rts ;leave + +;-------------------------------- +;$00 - used as adder to position player hotizontally + +XMovingPlatform: + lda #$0e ;load preset maximum value for secondary counter + jsr XMoveCntr_Platform ;do a sub to increment counters for movement + jsr MoveWithXMCntrs ;do a sub to move platform accordingly, and return value + lda PlatformCollisionFlag,x ;if no collision with player, + bmi ExXMP ;branch ahead to leave + +PositionPlayerOnHPlat: + lda Player_X_Position + clc ;add saved value from second subroutine to + adc $00 ;current player's position to position + sta Player_X_Position ;player accordingly in horizontal position + lda Player_PageLoc ;get player's page location + ldy $00 ;check to see if saved value here is positive or negative + bmi PPHSubt ;if negative, branch to subtract + adc #$00 ;otherwise add carry to page location + jmp SetPVar ;jump to skip subtraction +PPHSubt: sbc #$00 ;subtract borrow from page location +SetPVar: sta Player_PageLoc ;save result to player's page location + sty Platform_X_Scroll ;put saved value from second sub here to be used later + jsr PositionPlayerOnVPlat ;position player vertically and appropriately +ExXMP: rts ;and we are done here + +;-------------------------------- + +DropPlatform: + lda PlatformCollisionFlag,x ;if no collision between platform and player + bmi ExDPl ;occurred, just leave without moving anything + jsr MoveDropPlatform ;otherwise do a sub to move platform down very quickly + jsr PositionPlayerOnVPlat ;do a sub to position player appropriately +ExDPl: rts ;leave + +;-------------------------------- +;$00 - residual value from sub + +RightPlatform: + jsr MoveEnemyHorizontally ;move platform with current horizontal speed, if any + sta $00 ;store saved value here (residual code) + lda PlatformCollisionFlag,x ;check collision flag, if no collision between player + bmi ExRPl ;and platform, branch ahead, leave speed unaltered + lda #$10 + sta Enemy_X_Speed,x ;otherwise set new speed (gets moving if motionless) + jsr PositionPlayerOnHPlat ;use saved value from earlier sub to position player +ExRPl: rts ;then leave + +;-------------------------------- + +MoveLargeLiftPlat: + jsr MoveLiftPlatforms ;execute common to all large and small lift platforms + jmp ChkYPCollision ;branch to position player correctly + +MoveSmallPlatform: + jsr MoveLiftPlatforms ;execute common to all large and small lift platforms + jmp ChkSmallPlatCollision ;branch to position player correctly + +MoveLiftPlatforms: + lda TimerControl ;if master timer control set, skip all of this + bne ExLiftP ;and branch to leave + lda Enemy_YMF_Dummy,x + clc ;add contents of movement amount to whatever's here + adc Enemy_Y_MoveForce,x + sta Enemy_YMF_Dummy,x + lda Enemy_Y_Position,x ;add whatever vertical speed is set to current + adc Enemy_Y_Speed,x ;vertical position plus carry to move up or down + sta Enemy_Y_Position,x ;and then leave + rts + +ChkSmallPlatCollision: + lda PlatformCollisionFlag,x ;get bounding box counter saved in collision flag + beq ExLiftP ;if none found, leave player position alone + jsr PositionPlayerOnS_Plat ;use to position player correctly +ExLiftP: rts ;then leave + +;------------------------------------------------------------------------------------- +;$00 - page location of extended left boundary +;$01 - extended left boundary position +;$02 - page location of extended right boundary +;$03 - extended right boundary position + +OffscreenBoundsCheck: + lda Enemy_ID,x ;check for cheep-cheep object + cmp #FlyingCheepCheep ;branch to leave if found + beq ExScrnBd + lda ScreenLeft_X_Pos ;get horizontal coordinate for left side of screen + ldy Enemy_ID,x + cpy #HammerBro ;check for hammer bro object + beq LimitB + cpy #PiranhaPlant ;check for piranha plant object + bne ExtendLB ;these two will be erased sooner than others if too far left +LimitB: adc #$38 ;add 56 pixels to coordinate if hammer bro or piranha plant +ExtendLB: sbc #$48 ;subtract 72 pixels regardless of enemy object + sta $01 ;store result here + lda ScreenLeft_PageLoc + sbc #$00 ;subtract borrow from page location of left side + sta $00 ;store result here + lda ScreenRight_X_Pos ;add 72 pixels to the right side horizontal coordinate + adc #$48 + sta $03 ;store result here + lda ScreenRight_PageLoc + adc #$00 ;then add the carry to the page location + sta $02 ;and store result here + lda Enemy_X_Position,x ;compare horizontal coordinate of the enemy object + cmp $01 ;to modified horizontal left edge coordinate to get carry + lda Enemy_PageLoc,x + sbc $00 ;then subtract it from the page coordinate of the enemy object + bmi TooFar ;if enemy object is too far left, branch to erase it + lda Enemy_X_Position,x ;compare horizontal coordinate of the enemy object + cmp $03 ;to modified horizontal right edge coordinate to get carry + lda Enemy_PageLoc,x + sbc $02 ;then subtract it from the page coordinate of the enemy object + bmi ExScrnBd ;if enemy object is on the screen, leave, do not erase enemy + lda Enemy_State,x ;if at this point, enemy is offscreen to the right, so check + cmp #HammerBro ;if in state used by spiny's egg, do not erase + beq ExScrnBd + cpy #PiranhaPlant ;if piranha plant, do not erase + beq ExScrnBd + cpy #FlagpoleFlagObject ;if flagpole flag, do not erase + beq ExScrnBd + cpy #StarFlagObject ;if star flag, do not erase + beq ExScrnBd + cpy #JumpspringObject ;if jumpspring, do not erase + beq ExScrnBd ;erase all others too far to the right +TooFar: jsr EraseEnemyObject ;erase object if necessary +ExScrnBd: rts ;leave + +;------------------------------------------------------------------------------------- + +;some unused space + .db $ff, $ff, $ff + +;------------------------------------------------------------------------------------- +;$01 - enemy buffer offset + +FireballEnemyCollision: + lda Fireball_State,x ;check to see if fireball state is set at all + beq ExitFBallEnemy ;branch to leave if not + asl + bcs ExitFBallEnemy ;branch to leave also if d7 in state is set + lda FrameCounter + lsr ;get LSB of frame counter + bcs ExitFBallEnemy ;branch to leave if set (do routine every other frame) + txa + asl ;multiply fireball offset by four + asl + clc + adc #$1c ;then add $1c or 28 bytes to it + tay ;to use fireball's bounding box coordinates + ldx #$04 + +FireballEnemyCDLoop: + stx $01 ;store enemy object offset here + tya + pha ;push fireball offset to the stack + lda Enemy_State,x + and #%00100000 ;check to see if d5 is set in enemy state + bne NoFToECol ;if so, skip to next enemy slot + lda Enemy_Flag,x ;check to see if buffer flag is set + beq NoFToECol ;if not, skip to next enemy slot + lda Enemy_ID,x ;check enemy identifier + cmp #$24 + bcc GoombaDie ;if < $24, branch to check further + cmp #$2b + bcc NoFToECol ;if in range $24-$2a, skip to next enemy slot +GoombaDie: cmp #Goomba ;check for goomba identifier + bne NotGoomba ;if not found, continue with code + lda Enemy_State,x ;otherwise check for defeated state + cmp #$02 ;if stomped or otherwise defeated, + bcs NoFToECol ;skip to next enemy slot +NotGoomba: lda EnemyOffscrBitsMasked,x ;if any masked offscreen bits set, + bne NoFToECol ;skip to next enemy slot + txa + asl ;otherwise multiply enemy offset by four + asl + clc + adc #$04 ;add 4 bytes to it + tax ;to use enemy's bounding box coordinates + jsr SprObjectCollisionCore ;do fireball-to-enemy collision detection + ldx ObjectOffset ;return fireball's original offset + bcc NoFToECol ;if carry clear, no collision, thus do next enemy slot + lda #%10000000 + sta Fireball_State,x ;set d7 in enemy state + ldx $01 ;get enemy offset + jsr HandleEnemyFBallCol ;jump to handle fireball to enemy collision +NoFToECol: pla ;pull fireball offset from stack + tay ;put it in Y + ldx $01 ;get enemy object offset + dex ;decrement it + bpl FireballEnemyCDLoop ;loop back until collision detection done on all enemies + +ExitFBallEnemy: + ldx ObjectOffset ;get original fireball offset and leave + rts + +BowserIdentities: + .db Goomba, GreenKoopa, BuzzyBeetle, Spiny, Lakitu, Bloober, HammerBro, Bowser + +HandleEnemyFBallCol: + jsr RelativeEnemyPosition ;get relative coordinate of enemy + ldx $01 ;get current enemy object offset + lda Enemy_Flag,x ;check buffer flag for d7 set + bpl ChkBuzzyBeetle ;branch if not set to continue + and #%00001111 ;otherwise mask out high nybble and + tax ;use low nybble as enemy offset + lda Enemy_ID,x + cmp #Bowser ;check enemy identifier for bowser + beq HurtBowser ;branch if found + ldx $01 ;otherwise retrieve current enemy offset + +ChkBuzzyBeetle: + lda Enemy_ID,x + cmp #BuzzyBeetle ;check for buzzy beetle + beq ExHCF ;branch if found to leave (buzzy beetles fireproof) + cmp #Bowser ;check for bowser one more time (necessary if d7 of flag was clear) + bne ChkOtherEnemies ;if not found, branch to check other enemies + +HurtBowser: + dec BowserHitPoints ;decrement bowser's hit points + bne ExHCF ;if bowser still has hit points, branch to leave + jsr InitVStf ;otherwise do sub to init vertical speed and movement force + sta Enemy_X_Speed,x ;initialize horizontal speed + sta EnemyFrenzyBuffer ;init enemy frenzy buffer + lda #$fe + sta Enemy_Y_Speed,x ;set vertical speed to make defeated bowser jump a little + ldy WorldNumber ;use world number as offset + lda BowserIdentities,y ;get enemy identifier to replace bowser with + sta Enemy_ID,x ;set as new enemy identifier + lda #$20 ;set A to use starting value for state + cpy #$03 ;check to see if using offset of 3 or more + bcs SetDBSte ;branch if so + ora #$03 ;otherwise add 3 to enemy state +SetDBSte: sta Enemy_State,x ;set defeated enemy state + lda #Sfx_BowserFall + sta Square2SoundQueue ;load bowser defeat sound + ldx $01 ;get enemy offset + lda #$09 ;award 5000 points to player for defeating bowser + bne EnemySmackScore ;unconditional branch to award points + +ChkOtherEnemies: + cmp #BulletBill_FrenzyVar + beq ExHCF ;branch to leave if bullet bill (frenzy variant) + cmp #Podoboo + beq ExHCF ;branch to leave if podoboo + cmp #$15 + bcs ExHCF ;branch to leave if identifier => $15 + +ShellOrBlockDefeat: + lda Enemy_ID,x ;check for piranha plant + cmp #PiranhaPlant + bne StnE ;branch if not found + lda Enemy_Y_Position,x + adc #$18 ;add 24 pixels to enemy object's vertical position + sta Enemy_Y_Position,x +StnE: jsr ChkToStunEnemies ;do yet another sub + lda Enemy_State,x + and #%00011111 ;mask out 2 MSB of enemy object's state + ora #%00100000 ;set d5 to defeat enemy and save as new state + sta Enemy_State,x + lda #$02 ;award 200 points by default + ldy Enemy_ID,x ;check for hammer bro + cpy #HammerBro + bne GoombaPoints ;branch if not found + lda #$06 ;award 1000 points for hammer bro + +GoombaPoints: + cpy #Goomba ;check for goomba + bne EnemySmackScore ;branch if not found + lda #$01 ;award 100 points for goomba + +EnemySmackScore: + jsr SetupFloateyNumber ;update necessary score variables + lda #Sfx_EnemySmack ;play smack enemy sound + sta Square1SoundQueue +ExHCF: rts ;and now let's leave + +;------------------------------------------------------------------------------------- + +PlayerHammerCollision: + lda FrameCounter ;get frame counter + lsr ;shift d0 into carry + bcc ExPHC ;branch to leave if d0 not set to execute every other frame + lda TimerControl ;if either master timer control + ora Misc_OffscreenBits ;or any offscreen bits for hammer are set, + bne ExPHC ;branch to leave + txa + asl ;multiply misc object offset by four + asl + clc + adc #$24 ;add 36 or $24 bytes to get proper offset + tay ;for misc object bounding box coordinates + jsr PlayerCollisionCore ;do player-to-hammer collision detection + ldx ObjectOffset ;get misc object offset + bcc ClHCol ;if no collision, then branch + lda Misc_Collision_Flag,x ;otherwise read collision flag + bne ExPHC ;if collision flag already set, branch to leave + lda #$01 + sta Misc_Collision_Flag,x ;otherwise set collision flag now + lda Misc_X_Speed,x + eor #$ff ;get two's compliment of + clc ;hammer's horizontal speed + adc #$01 + sta Misc_X_Speed,x ;set to send hammer flying the opposite direction + lda StarInvincibleTimer ;if star mario invincibility timer set, + bne ExPHC ;branch to leave + jmp InjurePlayer ;otherwise jump to hurt player, do not return +ClHCol: lda #$00 ;clear collision flag + sta Misc_Collision_Flag,x +ExPHC: rts + +;------------------------------------------------------------------------------------- + +HandlePowerUpCollision: + jsr EraseEnemyObject ;erase the power-up object + lda #$06 + jsr SetupFloateyNumber ;award 1000 points to player by default + lda #Sfx_PowerUpGrab + sta Square2SoundQueue ;play the power-up sound + lda PowerUpType ;check power-up type + cmp #$02 + bcc Shroom_Flower_PUp ;if mushroom or fire flower, branch + cmp #$03 + beq SetFor1Up ;if 1-up mushroom, branch + lda #$23 ;otherwise set star mario invincibility + sta StarInvincibleTimer ;timer, and load the star mario music + lda #StarPowerMusic ;into the area music queue, then leave + sta AreaMusicQueue + rts + +Shroom_Flower_PUp: + lda PlayerStatus ;if player status = small, branch + beq UpToSuper + cmp #$01 ;if player status not super, leave + bne NoPUp + ldx ObjectOffset ;get enemy offset, not necessary + lda #$02 ;set player status to fiery + sta PlayerStatus + jsr GetPlayerColors ;run sub to change colors of player + ldx ObjectOffset ;get enemy offset again, and again not necessary + lda #$0c ;set value to be used by subroutine tree (fiery) + jmp UpToFiery ;jump to set values accordingly + +SetFor1Up: + lda #$0b ;change 1000 points into 1-up instead + sta FloateyNum_Control,x ;and then leave + rts + +UpToSuper: + lda #$01 ;set player status to super + sta PlayerStatus + lda #$09 ;set value to be used by subroutine tree (super) + +UpToFiery: + ldy #$00 ;set value to be used as new player state + jsr SetPRout ;set values to stop certain things in motion +NoPUp: rts + +;-------------------------------- + +ResidualXSpdData: + .db $18, $e8 + +KickedShellXSpdData: + .db $30, $d0 + +DemotedKoopaXSpdData: + .db $08, $f8 + +PlayerEnemyCollision: + lda FrameCounter ;check counter for d0 set + lsr + bcs NoPUp ;if set, branch to leave + jsr CheckPlayerVertical ;if player object is completely offscreen or + bcs NoPECol ;if down past 224th pixel row, branch to leave + lda EnemyOffscrBitsMasked,x ;if current enemy is offscreen by any amount, + bne NoPECol ;go ahead and branch to leave + lda GameEngineSubroutine + cmp #$08 ;if not set to run player control routine + bne NoPECol ;on next frame, branch to leave + lda Enemy_State,x + and #%00100000 ;if enemy state has d5 set, branch to leave + bne NoPECol + jsr GetEnemyBoundBoxOfs ;get bounding box offset for current enemy object + jsr PlayerCollisionCore ;do collision detection on player vs. enemy + ldx ObjectOffset ;get enemy object buffer offset + bcs CheckForPUpCollision ;if collision, branch past this part here + lda Enemy_CollisionBits,x + and #%11111110 ;otherwise, clear d0 of current enemy object's + sta Enemy_CollisionBits,x ;collision bit +NoPECol: rts + +CheckForPUpCollision: + ldy Enemy_ID,x + cpy #PowerUpObject ;check for power-up object + bne EColl ;if not found, branch to next part + jmp HandlePowerUpCollision ;otherwise, unconditional jump backwards +EColl: lda StarInvincibleTimer ;if star mario invincibility timer expired, + beq HandlePECollisions ;perform task here, otherwise kill enemy like + jmp ShellOrBlockDefeat ;hit with a shell, or from beneath + +KickedShellPtsData: + .db $0a, $06, $04 + +HandlePECollisions: + lda Enemy_CollisionBits,x ;check enemy collision bits for d0 set + and #%00000001 ;or for being offscreen at all + ora EnemyOffscrBitsMasked,x + bne ExPEC ;branch to leave if either is true + lda #$01 + ora Enemy_CollisionBits,x ;otherwise set d0 now + sta Enemy_CollisionBits,x + cpy #Spiny ;branch if spiny + beq ChkForPlayerInjury + cpy #PiranhaPlant ;branch if piranha plant + beq InjurePlayer + cpy #Podoboo ;branch if podoboo + beq InjurePlayer + cpy #BulletBill_CannonVar ;branch if bullet bill + beq ChkForPlayerInjury + cpy #$15 ;branch if object => $15 + bcs InjurePlayer + lda AreaType ;branch if water type level + beq InjurePlayer + lda Enemy_State,x ;branch if d7 of enemy state was set + asl + bcs ChkForPlayerInjury + lda Enemy_State,x ;mask out all but 3 LSB of enemy state + and #%00000111 + cmp #$02 ;branch if enemy is in normal or falling state + bcc ChkForPlayerInjury + lda Enemy_ID,x ;branch to leave if goomba in defeated state + cmp #Goomba + beq ExPEC + lda #Sfx_EnemySmack ;play smack enemy sound + sta Square1SoundQueue + lda Enemy_State,x ;set d7 in enemy state, thus become moving shell + ora #%10000000 + sta Enemy_State,x + jsr EnemyFacePlayer ;set moving direction and get offset + lda KickedShellXSpdData,y ;load and set horizontal speed data with offset + sta Enemy_X_Speed,x + lda #$03 ;add three to whatever the stomp counter contains + clc ;to give points for kicking the shell + adc StompChainCounter + ldy EnemyIntervalTimer,x ;check shell enemy's timer + cpy #$03 ;if above a certain point, branch using the points + bcs KSPts ;data obtained from the stomp counter + 3 + lda KickedShellPtsData,y ;otherwise, set points based on proximity to timer expiration +KSPts: jsr SetupFloateyNumber ;set values for floatey number now +ExPEC: rts ;leave!!! + +ChkForPlayerInjury: + lda Player_Y_Speed ;check player's vertical speed + bmi ChkInj ;perform procedure below if player moving upwards + bne EnemyStomped ;or not at all, and branch elsewhere if moving downwards +ChkInj: lda Enemy_ID,x ;branch if enemy object < $07 + cmp #Bloober + bcc ChkETmrs + lda Player_Y_Position ;add 12 pixels to player's vertical position + clc + adc #$0c + cmp Enemy_Y_Position,x ;compare modified player's position to enemy's position + bcc EnemyStomped ;branch if this player's position above (less than) enemy's +ChkETmrs: lda StompTimer ;check stomp timer + bne EnemyStomped ;branch if set + lda InjuryTimer ;check to see if injured invincibility timer still + bne ExInjColRoutines ;counting down, and branch elsewhere to leave if so + lda Player_Rel_XPos + cmp Enemy_Rel_XPos ;if player's relative position to the left of enemy's + bcc TInjE ;relative position, branch here + jmp ChkEnemyFaceRight ;otherwise do a jump here +TInjE: lda Enemy_MovingDir,x ;if enemy moving towards the left, + cmp #$01 ;branch, otherwise do a jump here + bne InjurePlayer ;to turn the enemy around + jmp LInj + +InjurePlayer: + lda InjuryTimer ;check again to see if injured invincibility timer is + bne ExInjColRoutines ;at zero, and branch to leave if so + +ForceInjury: + ldx PlayerStatus ;check player's status + beq KillPlayer ;branch if small + sta PlayerStatus ;otherwise set player's status to small + lda #$08 + sta InjuryTimer ;set injured invincibility timer + asl + sta Square1SoundQueue ;play pipedown/injury sound + jsr GetPlayerColors ;change player's palette if necessary + lda #$0a ;set subroutine to run on next frame +SetKRout: ldy #$01 ;set new player state +SetPRout: sta GameEngineSubroutine ;load new value to run subroutine on next frame + sty Player_State ;store new player state + ldy #$ff + sty TimerControl ;set master timer control flag to halt timers + iny + sty ScrollAmount ;initialize scroll speed + +ExInjColRoutines: + ldx ObjectOffset ;get enemy offset and leave + rts + +KillPlayer: + stx Player_X_Speed ;halt player's horizontal movement by initializing speed + inx + stx EventMusicQueue ;set event music queue to death music + lda #$fc + sta Player_Y_Speed ;set new vertical speed + lda #$0b ;set subroutine to run on next frame + bne SetKRout ;branch to set player's state and other things + +StompedEnemyPtsData: + .db $02, $06, $05, $06 + +EnemyStomped: + lda Enemy_ID,x ;check for spiny, branch to hurt player + cmp #Spiny ;if found + beq InjurePlayer + lda #Sfx_EnemyStomp ;otherwise play stomp/swim sound + sta Square1SoundQueue + lda Enemy_ID,x + ldy #$00 ;initialize points data offset for stomped enemies + cmp #FlyingCheepCheep ;branch for cheep-cheep + beq EnemyStompedPts + cmp #BulletBill_FrenzyVar ;branch for either bullet bill object + beq EnemyStompedPts + cmp #BulletBill_CannonVar + beq EnemyStompedPts + cmp #Podoboo ;branch for podoboo (this branch is logically impossible + beq EnemyStompedPts ;for cpu to take due to earlier checking of podoboo) + iny ;increment points data offset + cmp #HammerBro ;branch for hammer bro + beq EnemyStompedPts + iny ;increment points data offset + cmp #Lakitu ;branch for lakitu + beq EnemyStompedPts + iny ;increment points data offset + cmp #Bloober ;branch if NOT bloober + bne ChkForDemoteKoopa + +EnemyStompedPts: + lda StompedEnemyPtsData,y ;load points data using offset in Y + jsr SetupFloateyNumber ;run sub to set floatey number controls + lda Enemy_MovingDir,x + pha ;save enemy movement direction to stack + jsr SetStun ;run sub to kill enemy + pla + sta Enemy_MovingDir,x ;return enemy movement direction from stack + lda #%00100000 + sta Enemy_State,x ;set d5 in enemy state + jsr InitVStf ;nullify vertical speed, physics-related thing, + sta Enemy_X_Speed,x ;and horizontal speed + lda #$fd ;set player's vertical speed, to give bounce + sta Player_Y_Speed + rts + +ChkForDemoteKoopa: + cmp #$09 ;branch elsewhere if enemy object < $09 + bcc HandleStompedShellE + and #%00000001 ;demote koopa paratroopas to ordinary troopas + sta Enemy_ID,x + ldy #$00 ;return enemy to normal state + sty Enemy_State,x + lda #$03 ;award 400 points to the player + jsr SetupFloateyNumber + jsr InitVStf ;nullify physics-related thing and vertical speed + jsr EnemyFacePlayer ;turn enemy around if necessary + lda DemotedKoopaXSpdData,y + sta Enemy_X_Speed,x ;set appropriate moving speed based on direction + jmp SBnce ;then move onto something else + +RevivalRateData: + .db $10, $0b + +HandleStompedShellE: + lda #$04 ;set defeated state for enemy + sta Enemy_State,x + inc StompChainCounter ;increment the stomp counter + lda StompChainCounter ;add whatever is in the stomp counter + clc ;to whatever is in the stomp timer + adc StompTimer + jsr SetupFloateyNumber ;award points accordingly + inc StompTimer ;increment stomp timer of some sort + ldy PrimaryHardMode ;check primary hard mode flag + lda RevivalRateData,y ;load timer setting according to flag + sta EnemyIntervalTimer,x ;set as enemy timer to revive stomped enemy +SBnce: lda #$fc ;set player's vertical speed for bounce + sta Player_Y_Speed ;and then leave!!! + rts + +ChkEnemyFaceRight: + lda Enemy_MovingDir,x ;check to see if enemy is moving to the right + cmp #$01 + bne LInj ;if not, branch + jmp InjurePlayer ;otherwise go back to hurt player +LInj: jsr EnemyTurnAround ;turn the enemy around, if necessary + jmp InjurePlayer ;go back to hurt player + + +EnemyFacePlayer: + ldy #$01 ;set to move right by default + jsr PlayerEnemyDiff ;get horizontal difference between player and enemy + bpl SFcRt ;if enemy is to the right of player, do not increment + iny ;otherwise, increment to set to move to the left +SFcRt: sty Enemy_MovingDir,x ;set moving direction here + dey ;then decrement to use as a proper offset + rts + +SetupFloateyNumber: + sta FloateyNum_Control,x ;set number of points control for floatey numbers + lda #$30 + sta FloateyNum_Timer,x ;set timer for floatey numbers + lda Enemy_Y_Position,x + sta FloateyNum_Y_Pos,x ;set vertical coordinate + lda Enemy_Rel_XPos + sta FloateyNum_X_Pos,x ;set horizontal coordinate and leave +ExSFN: rts + +;------------------------------------------------------------------------------------- +;$01 - used to hold enemy offset for second enemy + +SetBitsMask: + .db %10000000, %01000000, %00100000, %00010000, %00001000, %00000100, %00000010 + +ClearBitsMask: + .db %01111111, %10111111, %11011111, %11101111, %11110111, %11111011, %11111101 + +EnemiesCollision: + lda FrameCounter ;check counter for d0 set + lsr + bcc ExSFN ;if d0 not set, leave + lda AreaType + beq ExSFN ;if water area type, leave + lda Enemy_ID,x + cmp #$15 ;if enemy object => $15, branch to leave + bcs ExitECRoutine + cmp #Lakitu ;if lakitu, branch to leave + beq ExitECRoutine + cmp #PiranhaPlant ;if piranha plant, branch to leave + beq ExitECRoutine + lda EnemyOffscrBitsMasked,x ;if masked offscreen bits nonzero, branch to leave + bne ExitECRoutine + jsr GetEnemyBoundBoxOfs ;otherwise, do sub, get appropriate bounding box offset for + dex ;first enemy we're going to compare, then decrement for second + bmi ExitECRoutine ;branch to leave if there are no other enemies +ECLoop: stx $01 ;save enemy object buffer offset for second enemy here + tya ;save first enemy's bounding box offset to stack + pha + lda Enemy_Flag,x ;check enemy object enable flag + beq ReadyNextEnemy ;branch if flag not set + lda Enemy_ID,x + cmp #$15 ;check for enemy object => $15 + bcs ReadyNextEnemy ;branch if true + cmp #Lakitu + beq ReadyNextEnemy ;branch if enemy object is lakitu + cmp #PiranhaPlant + beq ReadyNextEnemy ;branch if enemy object is piranha plant + lda EnemyOffscrBitsMasked,x + bne ReadyNextEnemy ;branch if masked offscreen bits set + txa ;get second enemy object's bounding box offset + asl ;multiply by four, then add four + asl + clc + adc #$04 + tax ;use as new contents of X + jsr SprObjectCollisionCore ;do collision detection using the two enemies here + ldx ObjectOffset ;use first enemy offset for X + ldy $01 ;use second enemy offset for Y + bcc NoEnemyCollision ;if carry clear, no collision, branch ahead of this + lda Enemy_State,x + ora Enemy_State,y ;check both enemy states for d7 set + and #%10000000 + bne YesEC ;branch if at least one of them is set + lda Enemy_CollisionBits,y ;load first enemy's collision-related bits + and SetBitsMask,x ;check to see if bit connected to second enemy is + bne ReadyNextEnemy ;already set, and move onto next enemy slot if set + lda Enemy_CollisionBits,y + ora SetBitsMask,x ;if the bit is not set, set it now + sta Enemy_CollisionBits,y +YesEC: jsr ProcEnemyCollisions ;react according to the nature of collision + jmp ReadyNextEnemy ;move onto next enemy slot + +NoEnemyCollision: + lda Enemy_CollisionBits,y ;load first enemy's collision-related bits + and ClearBitsMask,x ;clear bit connected to second enemy + sta Enemy_CollisionBits,y ;then move onto next enemy slot + +ReadyNextEnemy: + pla ;get first enemy's bounding box offset from the stack + tay ;use as Y again + ldx $01 ;get and decrement second enemy's object buffer offset + dex + bpl ECLoop ;loop until all enemy slots have been checked + +ExitECRoutine: + ldx ObjectOffset ;get enemy object buffer offset + rts ;leave + +ProcEnemyCollisions: + lda Enemy_State,y ;check both enemy states for d5 set + ora Enemy_State,x + and #%00100000 ;if d5 is set in either state, or both, branch + bne ExitProcessEColl ;to leave and do nothing else at this point + lda Enemy_State,x + cmp #$06 ;if second enemy state < $06, branch elsewhere + bcc ProcSecondEnemyColl + lda Enemy_ID,x ;check second enemy identifier for hammer bro + cmp #HammerBro ;if hammer bro found in alt state, branch to leave + beq ExitProcessEColl + lda Enemy_State,y ;check first enemy state for d7 set + asl + bcc ShellCollisions ;branch if d7 is clear + lda #$06 + jsr SetupFloateyNumber ;award 1000 points for killing enemy + jsr ShellOrBlockDefeat ;then kill enemy, then load + ldy $01 ;original offset of second enemy + +ShellCollisions: + tya ;move Y to X + tax + jsr ShellOrBlockDefeat ;kill second enemy + ldx ObjectOffset + lda ShellChainCounter,x ;get chain counter for shell + clc + adc #$04 ;add four to get appropriate point offset + ldx $01 + jsr SetupFloateyNumber ;award appropriate number of points for second enemy + ldx ObjectOffset ;load original offset of first enemy + inc ShellChainCounter,x ;increment chain counter for additional enemies + +ExitProcessEColl: + rts ;leave!!! + +ProcSecondEnemyColl: + lda Enemy_State,y ;if first enemy state < $06, branch elsewhere + cmp #$06 + bcc MoveEOfs + lda Enemy_ID,y ;check first enemy identifier for hammer bro + cmp #HammerBro ;if hammer bro found in alt state, branch to leave + beq ExitProcessEColl + jsr ShellOrBlockDefeat ;otherwise, kill first enemy + ldy $01 + lda ShellChainCounter,y ;get chain counter for shell + clc + adc #$04 ;add four to get appropriate point offset + ldx ObjectOffset + jsr SetupFloateyNumber ;award appropriate number of points for first enemy + ldx $01 ;load original offset of second enemy + inc ShellChainCounter,x ;increment chain counter for additional enemies + rts ;leave!!! + +MoveEOfs: + tya ;move Y ($01) to X + tax + jsr EnemyTurnAround ;do the sub here using value from $01 + ldx ObjectOffset ;then do it again using value from $08 + +EnemyTurnAround: + lda Enemy_ID,x ;check for specific enemies + cmp #PiranhaPlant + beq ExTA ;if piranha plant, leave + cmp #Lakitu + beq ExTA ;if lakitu, leave + cmp #HammerBro + beq ExTA ;if hammer bro, leave + cmp #Spiny + beq RXSpd ;if spiny, turn it around + cmp #GreenParatroopaJump + beq RXSpd ;if green paratroopa, turn it around + cmp #$07 + bcs ExTA ;if any OTHER enemy object => $07, leave +RXSpd: lda Enemy_X_Speed,x ;load horizontal speed + eor #$ff ;get two's compliment for horizontal speed + tay + iny + sty Enemy_X_Speed,x ;store as new horizontal speed + lda Enemy_MovingDir,x + eor #%00000011 ;invert moving direction and store, then leave + sta Enemy_MovingDir,x ;thus effectively turning the enemy around +ExTA: rts ;leave!!! + +;------------------------------------------------------------------------------------- +;$00 - vertical position of platform + +LargePlatformCollision: + lda #$ff ;save value here + sta PlatformCollisionFlag,x + lda TimerControl ;check master timer control + bne ExLPC ;if set, branch to leave + lda Enemy_State,x ;if d7 set in object state, + bmi ExLPC ;branch to leave + lda Enemy_ID,x + cmp #$24 ;check enemy object identifier for + bne ChkForPlayerC_LargeP ;balance platform, branch if not found + lda Enemy_State,x + tax ;set state as enemy offset here + jsr ChkForPlayerC_LargeP ;perform code with state offset, then original offset, in X + +ChkForPlayerC_LargeP: + jsr CheckPlayerVertical ;figure out if player is below a certain point + bcs ExLPC ;or offscreen, branch to leave if true + txa + jsr GetEnemyBoundBoxOfsArg ;get bounding box offset in Y + lda Enemy_Y_Position,x ;store vertical coordinate in + sta $00 ;temp variable for now + txa ;send offset we're on to the stack + pha + jsr PlayerCollisionCore ;do player-to-platform collision detection + pla ;retrieve offset from the stack + tax + bcc ExLPC ;if no collision, branch to leave + jsr ProcLPlatCollisions ;otherwise collision, perform sub +ExLPC: ldx ObjectOffset ;get enemy object buffer offset and leave + rts + +;-------------------------------- +;$00 - counter for bounding boxes + +SmallPlatformCollision: + lda TimerControl ;if master timer control set, + bne ExSPC ;branch to leave + sta PlatformCollisionFlag,x ;otherwise initialize collision flag + jsr CheckPlayerVertical ;do a sub to see if player is below a certain point + bcs ExSPC ;or entirely offscreen, and branch to leave if true + lda #$02 + sta $00 ;load counter here for 2 bounding boxes + +ChkSmallPlatLoop: + ldx ObjectOffset ;get enemy object offset + jsr GetEnemyBoundBoxOfs ;get bounding box offset in Y + and #%00000010 ;if d1 of offscreen lower nybble bits was set + bne ExSPC ;then branch to leave + lda BoundingBox_UL_YPos,y ;check top of platform's bounding box for being + cmp #$20 ;above a specific point + bcc MoveBoundBox ;if so, branch, don't do collision detection + jsr PlayerCollisionCore ;otherwise, perform player-to-platform collision detection + bcs ProcSPlatCollisions ;skip ahead if collision + +MoveBoundBox: + lda BoundingBox_UL_YPos,y ;move bounding box vertical coordinates + clc ;128 pixels downwards + adc #$80 + sta BoundingBox_UL_YPos,y + lda BoundingBox_DR_YPos,y + clc + adc #$80 + sta BoundingBox_DR_YPos,y + dec $00 ;decrement counter we set earlier + bne ChkSmallPlatLoop ;loop back until both bounding boxes are checked +ExSPC: ldx ObjectOffset ;get enemy object buffer offset, then leave + rts + +;-------------------------------- + +ProcSPlatCollisions: + ldx ObjectOffset ;return enemy object buffer offset to X, then continue + +ProcLPlatCollisions: + lda BoundingBox_DR_YPos,y ;get difference by subtracting the top + sec ;of the player's bounding box from the bottom + sbc BoundingBox_UL_YPos ;of the platform's bounding box + cmp #$04 ;if difference too large or negative, + bcs ChkForTopCollision ;branch, do not alter vertical speed of player + lda Player_Y_Speed ;check to see if player's vertical speed is moving down + bpl ChkForTopCollision ;if so, don't mess with it + lda #$01 ;otherwise, set vertical + sta Player_Y_Speed ;speed of player to kill jump + +ChkForTopCollision: + lda BoundingBox_DR_YPos ;get difference by subtracting the top + sec ;of the platform's bounding box from the bottom + sbc BoundingBox_UL_YPos,y ;of the player's bounding box + cmp #$06 + bcs PlatformSideCollisions ;if difference not close enough, skip all of this + lda Player_Y_Speed + bmi PlatformSideCollisions ;if player's vertical speed moving upwards, skip this + lda $00 ;get saved bounding box counter from earlier + ldy Enemy_ID,x + cpy #$2b ;if either of the two small platform objects are found, + beq SetCollisionFlag ;regardless of which one, branch to use bounding box counter + cpy #$2c ;as contents of collision flag + beq SetCollisionFlag + txa ;otherwise use enemy object buffer offset + +SetCollisionFlag: + ldx ObjectOffset ;get enemy object buffer offset + sta PlatformCollisionFlag,x ;save either bounding box counter or enemy offset here + lda #$00 + sta Player_State ;set player state to normal then leave + rts + +PlatformSideCollisions: + lda #$01 ;set value here to indicate possible horizontal + sta $00 ;collision on left side of platform + lda BoundingBox_DR_XPos ;get difference by subtracting platform's left edge + sec ;from player's right edge + sbc BoundingBox_UL_XPos,y + cmp #$08 ;if difference close enough, skip all of this + bcc SideC + inc $00 ;otherwise increment value set here for right side collision + lda BoundingBox_DR_XPos,y ;get difference by subtracting player's left edge + clc ;from platform's right edge + sbc BoundingBox_UL_XPos + cmp #$09 ;if difference not close enough, skip subroutine + bcs NoSideC ;and instead branch to leave (no collision) +SideC: jsr ImpedePlayerMove ;deal with horizontal collision +NoSideC: ldx ObjectOffset ;return with enemy object buffer offset + rts + +;------------------------------------------------------------------------------------- + +PlayerPosSPlatData: + .db $80, $00 + +PositionPlayerOnS_Plat: + tay ;use bounding box counter saved in collision flag + lda Enemy_Y_Position,x ;for offset + clc ;add positioning data using offset to the vertical + adc PlayerPosSPlatData-1,y ;coordinate + .db $2c ;BIT instruction opcode + +PositionPlayerOnVPlat: + lda Enemy_Y_Position,x ;get vertical coordinate + ldy GameEngineSubroutine + cpy #$0b ;if certain routine being executed on this frame, + beq ExPlPos ;skip all of this + ldy Enemy_Y_HighPos,x + cpy #$01 ;if vertical high byte offscreen, skip this + bne ExPlPos + sec ;subtract 32 pixels from vertical coordinate + sbc #$20 ;for the player object's height + sta Player_Y_Position ;save as player's new vertical coordinate + tya + sbc #$00 ;subtract borrow and store as player's + sta Player_Y_HighPos ;new vertical high byte + lda #$00 + sta Player_Y_Speed ;initialize vertical speed and low byte of force + sta Player_Y_MoveForce ;and then leave +ExPlPos: rts + +;------------------------------------------------------------------------------------- + +CheckPlayerVertical: + lda Player_OffscreenBits ;if player object is completely offscreen + cmp #$f0 ;vertically, leave this routine + bcs ExCPV + ldy Player_Y_HighPos ;if player high vertical byte is not + dey ;within the screen, leave this routine + bne ExCPV + lda Player_Y_Position ;if on the screen, check to see how far down + cmp #$d0 ;the player is vertically +ExCPV: rts + +;------------------------------------------------------------------------------------- + +GetEnemyBoundBoxOfs: + lda ObjectOffset ;get enemy object buffer offset + +GetEnemyBoundBoxOfsArg: + asl ;multiply A by four, then add four + asl ;to skip player's bounding box + clc + adc #$04 + tay ;send to Y + lda Enemy_OffscreenBits ;get offscreen bits for enemy object + and #%00001111 ;save low nybble + cmp #%00001111 ;check for all bits set + rts + +;------------------------------------------------------------------------------------- +;$00-$01 - used to hold many values, essentially temp variables +;$04 - holds lower nybble of vertical coordinate from block buffer routine +;$eb - used to hold block buffer adder + +PlayerBGUpperExtent: + .db $20, $10 + +PlayerBGCollision: + lda DisableCollisionDet ;if collision detection disabled flag set, + bne ExPBGCol ;branch to leave + lda GameEngineSubroutine + cmp #$0b ;if running routine #11 or $0b + beq ExPBGCol ;branch to leave + cmp #$04 + bcc ExPBGCol ;if running routines $00-$03 branch to leave + lda #$01 ;load default player state for swimming + ldy SwimmingFlag ;if swimming flag set, + bne SetPSte ;branch ahead to set default state + lda Player_State ;if player in normal state, + beq SetFallS ;branch to set default state for falling + cmp #$03 + bne ChkOnScr ;if in any other state besides climbing, skip to next part +SetFallS: lda #$02 ;load default player state for falling +SetPSte: sta Player_State ;set whatever player state is appropriate +ChkOnScr: lda Player_Y_HighPos + cmp #$01 ;check player's vertical high byte for still on the screen + bne ExPBGCol ;branch to leave if not + lda #$ff + sta Player_CollisionBits ;initialize player's collision flag + lda Player_Y_Position + cmp #$cf ;check player's vertical coordinate + bcc ChkCollSize ;if not too close to the bottom of screen, continue +ExPBGCol: rts ;otherwise leave + +ChkCollSize: + ldy #$02 ;load default offset + lda CrouchingFlag + bne GBBAdr ;if player crouching, skip ahead + lda PlayerSize + bne GBBAdr ;if player small, skip ahead + dey ;otherwise decrement offset for big player not crouching + lda SwimmingFlag + bne GBBAdr ;if swimming flag set, skip ahead + dey ;otherwise decrement offset +GBBAdr: lda BlockBufferAdderData,y ;get value using offset + sta $eb ;store value here + tay ;put value into Y, as offset for block buffer routine + ldx PlayerSize ;get player's size as offset + lda CrouchingFlag + beq HeadChk ;if player not crouching, branch ahead + inx ;otherwise increment size as offset +HeadChk: lda Player_Y_Position ;get player's vertical coordinate + cmp PlayerBGUpperExtent,x ;compare with upper extent value based on offset + bcc DoFootCheck ;if player is too high, skip this part + jsr BlockBufferColli_Head ;do player-to-bg collision detection on top of + beq DoFootCheck ;player, and branch if nothing above player's head + jsr CheckForCoinMTiles ;check to see if player touched coin with their head + bcs AwardTouchedCoin ;if so, branch to some other part of code + ldy Player_Y_Speed ;check player's vertical speed + bpl DoFootCheck ;if player not moving upwards, branch elsewhere + ldy $04 ;check lower nybble of vertical coordinate returned + cpy #$04 ;from collision detection routine + bcc DoFootCheck ;if low nybble < 4, branch + jsr CheckForSolidMTiles ;check to see what player's head bumped on + bcs SolidOrClimb ;if player collided with solid metatile, branch + ldy AreaType ;otherwise check area type + beq NYSpd ;if water level, branch ahead + ldy BlockBounceTimer ;if block bounce timer not expired, + bne NYSpd ;branch ahead, do not process collision + jsr PlayerHeadCollision ;otherwise do a sub to process collision + jmp DoFootCheck ;jump ahead to skip these other parts here + +SolidOrClimb: + cmp #$26 ;if climbing metatile, + beq NYSpd ;branch ahead and do not play sound + lda #Sfx_Bump + sta Square1SoundQueue ;otherwise load bump sound +NYSpd: lda #$01 ;set player's vertical speed to nullify + sta Player_Y_Speed ;jump or swim + +DoFootCheck: + ldy $eb ;get block buffer adder offset + lda Player_Y_Position + cmp #$cf ;check to see how low player is + bcs DoPlayerSideCheck ;if player is too far down on screen, skip all of this + jsr BlockBufferColli_Feet ;do player-to-bg collision detection on bottom left of player + jsr CheckForCoinMTiles ;check to see if player touched coin with their left foot + bcs AwardTouchedCoin ;if so, branch to some other part of code + pha ;save bottom left metatile to stack + jsr BlockBufferColli_Feet ;do player-to-bg collision detection on bottom right of player + sta $00 ;save bottom right metatile here + pla + sta $01 ;pull bottom left metatile and save here + bne ChkFootMTile ;if anything here, skip this part + lda $00 ;otherwise check for anything in bottom right metatile + beq DoPlayerSideCheck ;and skip ahead if not + jsr CheckForCoinMTiles ;check to see if player touched coin with their right foot + bcc ChkFootMTile ;if not, skip unconditional jump and continue code + +AwardTouchedCoin: + jmp HandleCoinMetatile ;follow the code to erase coin and award to player 1 coin + +ChkFootMTile: + jsr CheckForClimbMTiles ;check to see if player landed on climbable metatiles + bcs DoPlayerSideCheck ;if so, branch + ldy Player_Y_Speed ;check player's vertical speed + bmi DoPlayerSideCheck ;if player moving upwards, branch + cmp #$c5 + bne ContChk ;if player did not touch axe, skip ahead + jmp HandleAxeMetatile ;otherwise jump to set modes of operation +ContChk: jsr ChkInvisibleMTiles ;do sub to check for hidden coin or 1-up blocks + beq DoPlayerSideCheck ;if either found, branch + ldy JumpspringAnimCtrl ;if jumpspring animating right now, + bne InitSteP ;branch ahead + ldy $04 ;check lower nybble of vertical coordinate returned + cpy #$05 ;from collision detection routine + bcc LandPlyr ;if lower nybble < 5, branch + lda Player_MovingDir + sta $00 ;use player's moving direction as temp variable + jmp ImpedePlayerMove ;jump to impede player's movement in that direction +LandPlyr: jsr ChkForLandJumpSpring ;do sub to check for jumpspring metatiles and deal with it + lda #$f0 + and Player_Y_Position ;mask out lower nybble of player's vertical position + sta Player_Y_Position ;and store as new vertical position to land player properly + jsr HandlePipeEntry ;do sub to process potential pipe entry + lda #$00 + sta Player_Y_Speed ;initialize vertical speed and fractional + sta Player_Y_MoveForce ;movement force to stop player's vertical movement + sta StompChainCounter ;initialize enemy stomp counter +InitSteP: lda #$00 + sta Player_State ;set player's state to normal + +DoPlayerSideCheck: + ldy $eb ;get block buffer adder offset + iny + iny ;increment offset 2 bytes to use adders for side collisions + lda #$02 ;set value here to be used as counter + sta $00 + +SideCheckLoop: + iny ;move onto the next one + sty $eb ;store it + lda Player_Y_Position + cmp #$20 ;check player's vertical position + bcc BHalf ;if player is in status bar area, branch ahead to skip this part + cmp #$e4 + bcs ExSCH ;branch to leave if player is too far down + jsr BlockBufferColli_Side ;do player-to-bg collision detection on one half of player + beq BHalf ;branch ahead if nothing found + cmp #$1c ;otherwise check for pipe metatiles + beq BHalf ;if collided with sideways pipe (top), branch ahead + cmp #$6b + beq BHalf ;if collided with water pipe (top), branch ahead + jsr CheckForClimbMTiles ;do sub to see if player bumped into anything climbable + bcc CheckSideMTiles ;if not, branch to alternate section of code +BHalf: ldy $eb ;load block adder offset + iny ;increment it + lda Player_Y_Position ;get player's vertical position + cmp #$08 + bcc ExSCH ;if too high, branch to leave + cmp #$d0 + bcs ExSCH ;if too low, branch to leave + jsr BlockBufferColli_Side ;do player-to-bg collision detection on other half of player + bne CheckSideMTiles ;if something found, branch + dec $00 ;otherwise decrement counter + bne SideCheckLoop ;run code until both sides of player are checked +ExSCH: rts ;leave + +CheckSideMTiles: + jsr ChkInvisibleMTiles ;check for hidden or coin 1-up blocks + beq ExCSM ;branch to leave if either found + jsr CheckForClimbMTiles ;check for climbable metatiles + bcc ContSChk ;if not found, skip and continue with code + jmp HandleClimbing ;otherwise jump to handle climbing +ContSChk: jsr CheckForCoinMTiles ;check to see if player touched coin + bcs HandleCoinMetatile ;if so, execute code to erase coin and award to player 1 coin + jsr ChkJumpspringMetatiles ;check for jumpspring metatiles + bcc ChkPBtm ;if not found, branch ahead to continue cude + lda JumpspringAnimCtrl ;otherwise check jumpspring animation control + bne ExCSM ;branch to leave if set + jmp StopPlayerMove ;otherwise jump to impede player's movement +ChkPBtm: ldy Player_State ;get player's state + cpy #$00 ;check for player's state set to normal + bne StopPlayerMove ;if not, branch to impede player's movement + ldy PlayerFacingDir ;get player's facing direction + dey + bne StopPlayerMove ;if facing left, branch to impede movement + cmp #$6c ;otherwise check for pipe metatiles + beq PipeDwnS ;if collided with sideways pipe (bottom), branch + cmp #$1f ;if collided with water pipe (bottom), continue + bne StopPlayerMove ;otherwise branch to impede player's movement +PipeDwnS: lda Player_SprAttrib ;check player's attributes + bne PlyrPipe ;if already set, branch, do not play sound again + ldy #Sfx_PipeDown_Injury + sty Square1SoundQueue ;otherwise load pipedown/injury sound +PlyrPipe: ora #%00100000 + sta Player_SprAttrib ;set background priority bit in player attributes + lda Player_X_Position + and #%00001111 ;get lower nybble of player's horizontal coordinate + beq ChkGERtn ;if at zero, branch ahead to skip this part + ldy #$00 ;set default offset for timer setting data + lda ScreenLeft_PageLoc ;load page location for left side of screen + beq SetCATmr ;if at page zero, use default offset + iny ;otherwise increment offset +SetCATmr: lda AreaChangeTimerData,y ;set timer for change of area as appropriate + sta ChangeAreaTimer +ChkGERtn: lda GameEngineSubroutine ;get number of game engine routine running + cmp #$07 + beq ExCSM ;if running player entrance routine or + cmp #$08 ;player control routine, go ahead and branch to leave + bne ExCSM + lda #$02 + sta GameEngineSubroutine ;otherwise set sideways pipe entry routine to run + rts ;and leave + +;-------------------------------- +;$02 - high nybble of vertical coordinate from block buffer +;$04 - low nybble of horizontal coordinate from block buffer +;$06-$07 - block buffer address + +StopPlayerMove: + jsr ImpedePlayerMove ;stop player's movement +ExCSM: rts ;leave + +AreaChangeTimerData: + .db $a0, $34 + +HandleCoinMetatile: + jsr ErACM ;do sub to erase coin metatile from block buffer + inc CoinTallyFor1Ups ;increment coin tally used for 1-up blocks + jmp GiveOneCoin ;update coin amount and tally on the screen + +HandleAxeMetatile: + lda #$00 + sta OperMode_Task ;reset secondary mode + lda #$02 + sta OperMode ;set primary mode to autoctrl mode + lda #$18 + sta Player_X_Speed ;set horizontal speed and continue to erase axe metatile +ErACM: ldy $02 ;load vertical high nybble offset for block buffer + lda #$00 ;load blank metatile + sta ($06),y ;store to remove old contents from block buffer + jmp RemoveCoin_Axe ;update the screen accordingly + +;-------------------------------- +;$02 - high nybble of vertical coordinate from block buffer +;$04 - low nybble of horizontal coordinate from block buffer +;$06-$07 - block buffer address + +ClimbXPosAdder: + .db $f9, $07 + +ClimbPLocAdder: + .db $ff, $00 + +FlagpoleYPosData: + .db $18, $22, $50, $68, $90 + +HandleClimbing: + ldy $04 ;check low nybble of horizontal coordinate returned from + cpy #$06 ;collision detection routine against certain values, this + bcc ExHC ;makes actual physical part of vine or flagpole thinner + cpy #$0a ;than 16 pixels + bcc ChkForFlagpole +ExHC: rts ;leave if too far left or too far right + +ChkForFlagpole: + cmp #$24 ;check climbing metatiles + beq FlagpoleCollision ;branch if flagpole ball found + cmp #$25 + bne VineCollision ;branch to alternate code if flagpole shaft not found + +FlagpoleCollision: + lda GameEngineSubroutine + cmp #$05 ;check for end-of-level routine running + beq PutPlayerOnVine ;if running, branch to end of climbing code + lda #$01 + sta PlayerFacingDir ;set player's facing direction to right + inc ScrollLock ;set scroll lock flag + lda GameEngineSubroutine + cmp #$04 ;check for flagpole slide routine running + beq RunFR ;if running, branch to end of flagpole code here + lda #BulletBill_CannonVar ;load identifier for bullet bills (cannon variant) + jsr KillEnemies ;get rid of them + lda #Silence + sta EventMusicQueue ;silence music + lsr + sta FlagpoleSoundQueue ;load flagpole sound into flagpole sound queue + ldx #$04 ;start at end of vertical coordinate data + lda Player_Y_Position + sta FlagpoleCollisionYPos ;store player's vertical coordinate here to be used later + +ChkFlagpoleYPosLoop: + cmp FlagpoleYPosData,x ;compare with current vertical coordinate data + bcs MtchF ;if player's => current, branch to use current offset + dex ;otherwise decrement offset to use + bne ChkFlagpoleYPosLoop ;do this until all data is checked (use last one if all checked) +MtchF: stx FlagpoleScore ;store offset here to be used later +RunFR: lda #$04 + sta GameEngineSubroutine ;set value to run flagpole slide routine + jmp PutPlayerOnVine ;jump to end of climbing code + +VineCollision: + cmp #$26 ;check for climbing metatile used on vines + bne PutPlayerOnVine + lda Player_Y_Position ;check player's vertical coordinate + cmp #$20 ;for being in status bar area + bcs PutPlayerOnVine ;branch if not that far up + lda #$01 + sta GameEngineSubroutine ;otherwise set to run autoclimb routine next frame + +PutPlayerOnVine: + lda #$03 ;set player state to climbing + sta Player_State + lda #$00 ;nullify player's horizontal speed + sta Player_X_Speed ;and fractional horizontal movement force + sta Player_X_MoveForce + lda Player_X_Position ;get player's horizontal coordinate + sec + sbc ScreenLeft_X_Pos ;subtract from left side horizontal coordinate + cmp #$10 + bcs SetVXPl ;if 16 or more pixels difference, do not alter facing direction + lda #$02 + sta PlayerFacingDir ;otherwise force player to face left +SetVXPl: ldy PlayerFacingDir ;get current facing direction, use as offset + lda $06 ;get low byte of block buffer address + asl + asl ;move low nybble to high + asl + asl + clc + adc ClimbXPosAdder-1,y ;add pixels depending on facing direction + sta Player_X_Position ;store as player's horizontal coordinate + lda $06 ;get low byte of block buffer address again + bne ExPVne ;if not zero, branch + lda ScreenRight_PageLoc ;load page location of right side of screen + clc + adc ClimbPLocAdder-1,y ;add depending on facing location + sta Player_PageLoc ;store as player's page location +ExPVne: rts ;finally, we're done! + +;-------------------------------- + +ChkInvisibleMTiles: + cmp #$5f ;check for hidden coin block + beq ExCInvT ;branch to leave if found + cmp #$60 ;check for hidden 1-up block +ExCInvT: rts ;leave with zero flag set if either found + +;-------------------------------- +;$00-$01 - used to hold bottom right and bottom left metatiles (in that order) +;$00 - used as flag by ImpedePlayerMove to restrict specific movement + +ChkForLandJumpSpring: + jsr ChkJumpspringMetatiles ;do sub to check if player landed on jumpspring + bcc ExCJSp ;if carry not set, jumpspring not found, therefore leave + lda #$70 + sta VerticalForce ;otherwise set vertical movement force for player + lda #$f9 + sta JumpspringForce ;set default jumpspring force + lda #$03 + sta JumpspringTimer ;set jumpspring timer to be used later + lsr + sta JumpspringAnimCtrl ;set jumpspring animation control to start animating +ExCJSp: rts ;and leave + +ChkJumpspringMetatiles: + cmp #$67 ;check for top jumpspring metatile + beq JSFnd ;branch to set carry if found + cmp #$68 ;check for bottom jumpspring metatile + clc ;clear carry flag + bne NoJSFnd ;branch to use cleared carry if not found +JSFnd: sec ;set carry if found +NoJSFnd: rts ;leave + +HandlePipeEntry: + lda Up_Down_Buttons ;check saved controller bits from earlier + and #%00000100 ;for pressing down + beq ExPipeE ;if not pressing down, branch to leave + lda $00 + cmp #$11 ;check right foot metatile for warp pipe right metatile + bne ExPipeE ;branch to leave if not found + lda $01 + cmp #$10 ;check left foot metatile for warp pipe left metatile + bne ExPipeE ;branch to leave if not found + lda #$30 + sta ChangeAreaTimer ;set timer for change of area + lda #$03 + sta GameEngineSubroutine ;set to run vertical pipe entry routine on next frame + lda #Sfx_PipeDown_Injury + sta Square1SoundQueue ;load pipedown/injury sound + lda #%00100000 + sta Player_SprAttrib ;set background priority bit in player's attributes + lda WarpZoneControl ;check warp zone control + beq ExPipeE ;branch to leave if none found + and #%00000011 ;mask out all but 2 LSB + asl + asl ;multiply by four + tax ;save as offset to warp zone numbers (starts at left pipe) + lda Player_X_Position ;get player's horizontal position + cmp #$60 + bcc GetWNum ;if player at left, not near middle, use offset and skip ahead + inx ;otherwise increment for middle pipe + cmp #$a0 + bcc GetWNum ;if player at middle, but not too far right, use offset and skip + inx ;otherwise increment for last pipe +GetWNum: ldy WarpZoneNumbers,x ;get warp zone numbers + dey ;decrement for use as world number + sty WorldNumber ;store as world number and offset + ldx WorldAddrOffsets,y ;get offset to where this world's area offsets are + lda AreaAddrOffsets,x ;get area offset based on world offset + sta AreaPointer ;store area offset here to be used to change areas + lda #Silence + sta EventMusicQueue ;silence music + lda #$00 + sta EntrancePage ;initialize starting page number + sta AreaNumber ;initialize area number used for area address offset + sta LevelNumber ;initialize level number used for world display + sta AltEntranceControl ;initialize mode of entry + inc Hidden1UpFlag ;set flag for hidden 1-up blocks + inc FetchNewGameTimerFlag ;set flag to load new game timer +ExPipeE: rts ;leave!!! + +ImpedePlayerMove: + lda #$00 ;initialize value here + ldy Player_X_Speed ;get player's horizontal speed + ldx $00 ;check value set earlier for + dex ;left side collision + bne RImpd ;if right side collision, skip this part + inx ;return value to X + cpy #$00 ;if player moving to the left, + bmi ExIPM ;branch to invert bit and leave + lda #$ff ;otherwise load A with value to be used later + jmp NXSpd ;and jump to affect movement +RImpd: ldx #$02 ;return $02 to X + cpy #$01 ;if player moving to the right, + bpl ExIPM ;branch to invert bit and leave + lda #$01 ;otherwise load A with value to be used here +NXSpd: ldy #$10 + sty SideCollisionTimer ;set timer of some sort + ldy #$00 + sty Player_X_Speed ;nullify player's horizontal speed + cmp #$00 ;if value set in A not set to $ff, + bpl PlatF ;branch ahead, do not decrement Y + dey ;otherwise decrement Y now +PlatF: sty $00 ;store Y as high bits of horizontal adder + clc + adc Player_X_Position ;add contents of A to player's horizontal + sta Player_X_Position ;position to move player left or right + lda Player_PageLoc + adc $00 ;add high bits and carry to + sta Player_PageLoc ;page location if necessary +ExIPM: txa ;invert contents of X + eor #$ff + and Player_CollisionBits ;mask out bit that was set here + sta Player_CollisionBits ;store to clear bit + rts + +;-------------------------------- + +SolidMTileUpperExt: + .db $10, $61, $88, $c4 + +CheckForSolidMTiles: + jsr GetMTileAttrib ;find appropriate offset based on metatile's 2 MSB + cmp SolidMTileUpperExt,x ;compare current metatile with solid metatiles + rts + +ClimbMTileUpperExt: + .db $24, $6d, $8a, $c6 + +CheckForClimbMTiles: + jsr GetMTileAttrib ;find appropriate offset based on metatile's 2 MSB + cmp ClimbMTileUpperExt,x ;compare current metatile with climbable metatiles + rts + +CheckForCoinMTiles: + cmp #$c2 ;check for regular coin + beq CoinSd ;branch if found + cmp #$c3 ;check for underwater coin + beq CoinSd ;branch if found + clc ;otherwise clear carry and leave + rts +CoinSd: lda #Sfx_CoinGrab + sta Square2SoundQueue ;load coin grab sound and leave + rts + +GetMTileAttrib: + tay ;save metatile value into Y + and #%11000000 ;mask out all but 2 MSB + asl + rol ;shift and rotate d7-d6 to d1-d0 + rol + tax ;use as offset for metatile data + tya ;get original metatile value back +ExEBG: rts ;leave + +;------------------------------------------------------------------------------------- +;$06-$07 - address from block buffer routine + +EnemyBGCStateData: + .db $01, $01, $02, $02, $02, $05 + +EnemyBGCXSpdData: + .db $10, $f0 + +EnemyToBGCollisionDet: + lda Enemy_State,x ;check enemy state for d6 set + and #%00100000 + bne ExEBG ;if set, branch to leave + jsr SubtEnemyYPos ;otherwise, do a subroutine here + bcc ExEBG ;if enemy vertical coord + 62 < 68, branch to leave + ldy Enemy_ID,x + cpy #Spiny ;if enemy object is not spiny, branch elsewhere + bne DoIDCheckBGColl + lda Enemy_Y_Position,x + cmp #$25 ;if enemy vertical coordinate < 36 branch to leave + bcc ExEBG + +DoIDCheckBGColl: + cpy #GreenParatroopaJump ;check for some other enemy object + bne HBChk ;branch if not found + jmp EnemyJump ;otherwise jump elsewhere +HBChk: cpy #HammerBro ;check for hammer bro + bne CInvu ;branch if not found + jmp HammerBroBGColl ;otherwise jump elsewhere +CInvu: cpy #Spiny ;if enemy object is spiny, branch + beq YesIn + cpy #PowerUpObject ;if special power-up object, branch + beq YesIn + cpy #$07 ;if enemy object =>$07, branch to leave + bcs ExEBGChk +YesIn: jsr ChkUnderEnemy ;if enemy object < $07, or = $12 or $2e, do this sub + bne HandleEToBGCollision ;if block underneath enemy, branch + +NoEToBGCollision: + jmp ChkForRedKoopa ;otherwise skip and do something else + +;-------------------------------- +;$02 - vertical coordinate from block buffer routine + +HandleEToBGCollision: + jsr ChkForNonSolids ;if something is underneath enemy, find out what + beq NoEToBGCollision ;if blank $26, coins, or hidden blocks, jump, enemy falls through + cmp #$23 + bne LandEnemyProperly ;check for blank metatile $23 and branch if not found + ldy $02 ;get vertical coordinate used to find block + lda #$00 ;store default blank metatile in that spot so we won't + sta ($06),y ;trigger this routine accidentally again + lda Enemy_ID,x + cmp #$15 ;if enemy object => $15, branch ahead + bcs ChkToStunEnemies + cmp #Goomba ;if enemy object not goomba, branch ahead of this routine + bne GiveOEPoints + jsr KillEnemyAboveBlock ;if enemy object IS goomba, do this sub + +GiveOEPoints: + lda #$01 ;award 100 points for hitting block beneath enemy + jsr SetupFloateyNumber + +ChkToStunEnemies: + cmp #$09 ;perform many comparisons on enemy object identifier + bcc SetStun + cmp #$11 ;if the enemy object identifier is equal to the values + bcs SetStun ;$09, $0e, $0f or $10, it will be modified, and not + cmp #$0a ;modified if not any of those values, note that piranha plant will + bcc Demote ;always fail this test because A will still have vertical + cmp #PiranhaPlant ;coordinate from previous addition, also these comparisons + bcc SetStun ;are only necessary if branching from $d7a1 +Demote: and #%00000001 ;erase all but LSB, essentially turning enemy object + sta Enemy_ID,x ;into green or red koopa troopa to demote them +SetStun: lda Enemy_State,x ;load enemy state + and #%11110000 ;save high nybble + ora #%00000010 + sta Enemy_State,x ;set d1 of enemy state + dec Enemy_Y_Position,x + dec Enemy_Y_Position,x ;subtract two pixels from enemy's vertical position + lda Enemy_ID,x + cmp #Bloober ;check for bloober object + beq SetWYSpd + lda #$fd ;set default vertical speed + ldy AreaType + bne SetNotW ;if area type not water, set as speed, otherwise +SetWYSpd: lda #$ff ;change the vertical speed +SetNotW: sta Enemy_Y_Speed,x ;set vertical speed now + ldy #$01 + jsr PlayerEnemyDiff ;get horizontal difference between player and enemy object + bpl ChkBBill ;branch if enemy is to the right of player + iny ;increment Y if not +ChkBBill: lda Enemy_ID,x + cmp #BulletBill_CannonVar ;check for bullet bill (cannon variant) + beq NoCDirF + cmp #BulletBill_FrenzyVar ;check for bullet bill (frenzy variant) + beq NoCDirF ;branch if either found, direction does not change + sty Enemy_MovingDir,x ;store as moving direction +NoCDirF: dey ;decrement and use as offset + lda EnemyBGCXSpdData,y ;get proper horizontal speed + sta Enemy_X_Speed,x ;and store, then leave +ExEBGChk: rts + +;-------------------------------- +;$04 - low nybble of vertical coordinate from block buffer routine + +LandEnemyProperly: + lda $04 ;check lower nybble of vertical coordinate saved earlier + sec + sbc #$08 ;subtract eight pixels + cmp #$05 ;used to determine whether enemy landed from falling + bcs ChkForRedKoopa ;branch if lower nybble in range of $0d-$0f before subtract + lda Enemy_State,x + and #%01000000 ;branch if d6 in enemy state is set + bne LandEnemyInitState + lda Enemy_State,x + asl ;branch if d7 in enemy state is not set + bcc ChkLandedEnemyState +SChkA: jmp DoEnemySideCheck ;if lower nybble < $0d, d7 set but d6 not set, jump here + +ChkLandedEnemyState: + lda Enemy_State,x ;if enemy in normal state, branch back to jump here + beq SChkA + cmp #$05 ;if in state used by spiny's egg + beq ProcEnemyDirection ;then branch elsewhere + cmp #$03 ;if already in state used by koopas and buzzy beetles + bcs ExSteChk ;or in higher numbered state, branch to leave + lda Enemy_State,x ;load enemy state again (why?) + cmp #$02 ;if not in $02 state (used by koopas and buzzy beetles) + bne ProcEnemyDirection ;then branch elsewhere + lda #$10 ;load default timer here + ldy Enemy_ID,x ;check enemy identifier for spiny + cpy #Spiny + bne SetForStn ;branch if not found + lda #$00 ;set timer for $00 if spiny +SetForStn: sta EnemyIntervalTimer,x ;set timer here + lda #$03 ;set state here, apparently used to render + sta Enemy_State,x ;upside-down koopas and buzzy beetles + jsr EnemyLanding ;then land it properly +ExSteChk: rts ;then leave + +ProcEnemyDirection: + lda Enemy_ID,x ;check enemy identifier for goomba + cmp #Goomba ;branch if found + beq LandEnemyInitState + cmp #Spiny ;check for spiny + bne InvtD ;branch if not found + lda #$01 + sta Enemy_MovingDir,x ;send enemy moving to the right by default + lda #$08 + sta Enemy_X_Speed,x ;set horizontal speed accordingly + lda FrameCounter + and #%00000111 ;if timed appropriately, spiny will skip over + beq LandEnemyInitState ;trying to face the player +InvtD: ldy #$01 ;load 1 for enemy to face the left (inverted here) + jsr PlayerEnemyDiff ;get horizontal difference between player and enemy + bpl CNwCDir ;if enemy to the right of player, branch + iny ;if to the left, increment by one for enemy to face right (inverted) +CNwCDir: tya + cmp Enemy_MovingDir,x ;compare direction in A with current direction in memory + bne LandEnemyInitState + jsr ChkForBump_HammerBroJ ;if equal, not facing in correct dir, do sub to turn around + +LandEnemyInitState: + jsr EnemyLanding ;land enemy properly + lda Enemy_State,x + and #%10000000 ;if d7 of enemy state is set, branch + bne NMovShellFallBit + lda #$00 ;otherwise initialize enemy state and leave + sta Enemy_State,x ;note this will also turn spiny's egg into spiny + rts + +NMovShellFallBit: + lda Enemy_State,x ;nullify d6 of enemy state, save other bits + and #%10111111 ;and store, then leave + sta Enemy_State,x + rts + +;-------------------------------- + +ChkForRedKoopa: + lda Enemy_ID,x ;check for red koopa troopa $03 + cmp #RedKoopa + bne Chk2MSBSt ;branch if not found + lda Enemy_State,x + beq ChkForBump_HammerBroJ ;if enemy found and in normal state, branch +Chk2MSBSt: lda Enemy_State,x ;save enemy state into Y + tay + asl ;check for d7 set + bcc GetSteFromD ;branch if not set + lda Enemy_State,x + ora #%01000000 ;set d6 + jmp SetD6Ste ;jump ahead of this part +GetSteFromD: lda EnemyBGCStateData,y ;load new enemy state with old as offset +SetD6Ste: sta Enemy_State,x ;set as new state + +;-------------------------------- +;$00 - used to store bitmask (not used but initialized here) +;$eb - used in DoEnemySideCheck as counter and to compare moving directions + +DoEnemySideCheck: + lda Enemy_Y_Position,x ;if enemy within status bar, branch to leave + cmp #$20 ;because there's nothing there that impedes movement + bcc ExESdeC + ldy #$16 ;start by finding block to the left of enemy ($00,$14) + lda #$02 ;set value here in what is also used as + sta $eb ;OAM data offset +SdeCLoop: lda $eb ;check value + cmp Enemy_MovingDir,x ;compare value against moving direction + bne NextSdeC ;branch if different and do not seek block there + lda #$01 ;set flag in A for save horizontal coordinate + jsr BlockBufferChk_Enemy ;find block to left or right of enemy object + beq NextSdeC ;if nothing found, branch + jsr ChkForNonSolids ;check for non-solid blocks + bne ChkForBump_HammerBroJ ;branch if not found +NextSdeC: dec $eb ;move to the next direction + iny + cpy #$18 ;increment Y, loop only if Y < $18, thus we check + bcc SdeCLoop ;enemy ($00, $14) and ($10, $14) pixel coordinates +ExESdeC: rts + +ChkForBump_HammerBroJ: + cpx #$05 ;check if we're on the special use slot + beq NoBump ;and if so, branch ahead and do not play sound + lda Enemy_State,x ;if enemy state d7 not set, branch + asl ;ahead and do not play sound + bcc NoBump + lda #Sfx_Bump ;otherwise, play bump sound + sta Square1SoundQueue ;sound will never be played if branching from ChkForRedKoopa +NoBump: lda Enemy_ID,x ;check for hammer bro + cmp #$05 + bne InvEnemyDir ;branch if not found + lda #$00 + sta $00 ;initialize value here for bitmask + ldy #$fa ;load default vertical speed for jumping + jmp SetHJ ;jump to code that makes hammer bro jump + +InvEnemyDir: + jmp RXSpd ;jump to turn the enemy around + +;-------------------------------- +;$00 - used to hold horizontal difference between player and enemy + +PlayerEnemyDiff: + lda Enemy_X_Position,x ;get distance between enemy object's + sec ;horizontal coordinate and the player's + sbc Player_X_Position ;horizontal coordinate + sta $00 ;and store here + lda Enemy_PageLoc,x + sbc Player_PageLoc ;subtract borrow, then leave + rts + +;-------------------------------- + +EnemyLanding: + jsr InitVStf ;do something here to vertical speed and something else + lda Enemy_Y_Position,x + and #%11110000 ;save high nybble of vertical coordinate, and + ora #%00001000 ;set d3, then store, probably used to set enemy object + sta Enemy_Y_Position,x ;neatly on whatever it's landing on + rts + +SubtEnemyYPos: + lda Enemy_Y_Position,x ;add 62 pixels to enemy object's + clc ;vertical coordinate + adc #$3e + cmp #$44 ;compare against a certain range + rts ;and leave with flags set for conditional branch + +EnemyJump: + jsr SubtEnemyYPos ;do a sub here + bcc DoSide ;if enemy vertical coord + 62 < 68, branch to leave + lda Enemy_Y_Speed,x + clc ;add two to vertical speed + adc #$02 + cmp #$03 ;if green paratroopa not falling, branch ahead + bcc DoSide + jsr ChkUnderEnemy ;otherwise, check to see if green paratroopa is + beq DoSide ;standing on anything, then branch to same place if not + jsr ChkForNonSolids ;check for non-solid blocks + beq DoSide ;branch if found + jsr EnemyLanding ;change vertical coordinate and speed + lda #$fd + sta Enemy_Y_Speed,x ;make the paratroopa jump again +DoSide: jmp DoEnemySideCheck ;check for horizontal blockage, then leave + +;-------------------------------- + +HammerBroBGColl: + jsr ChkUnderEnemy ;check to see if hammer bro is standing on anything + beq NoUnderHammerBro + cmp #$23 ;check for blank metatile $23 and branch if not found + bne UnderHammerBro + +KillEnemyAboveBlock: + jsr ShellOrBlockDefeat ;do this sub to kill enemy + lda #$fc ;alter vertical speed of enemy and leave + sta Enemy_Y_Speed,x + rts + +UnderHammerBro: + lda EnemyFrameTimer,x ;check timer used by hammer bro + bne NoUnderHammerBro ;branch if not expired + lda Enemy_State,x + and #%10001000 ;save d7 and d3 from enemy state, nullify other bits + sta Enemy_State,x ;and store + jsr EnemyLanding ;modify vertical coordinate, speed and something else + jmp DoEnemySideCheck ;then check for horizontal blockage and leave + +NoUnderHammerBro: + lda Enemy_State,x ;if hammer bro is not standing on anything, set d0 + ora #$01 ;in the enemy state to indicate jumping or falling, then leave + sta Enemy_State,x + rts + +ChkUnderEnemy: + lda #$00 ;set flag in A for save vertical coordinate + ldy #$15 ;set Y to check the bottom middle (8,18) of enemy object + jmp BlockBufferChk_Enemy ;hop to it! + +ChkForNonSolids: + cmp #$26 ;blank metatile used for vines? + beq NSFnd + cmp #$c2 ;regular coin? + beq NSFnd + cmp #$c3 ;underwater coin? + beq NSFnd + cmp #$5f ;hidden coin block? + beq NSFnd + cmp #$60 ;hidden 1-up block? +NSFnd: rts + +;------------------------------------------------------------------------------------- + +FireballBGCollision: + lda Fireball_Y_Position,x ;check fireball's vertical coordinate + cmp #$18 + bcc ClearBounceFlag ;if within the status bar area of the screen, branch ahead + jsr BlockBufferChk_FBall ;do fireball to background collision detection on bottom of it + beq ClearBounceFlag ;if nothing underneath fireball, branch + jsr ChkForNonSolids ;check for non-solid metatiles + beq ClearBounceFlag ;branch if any found + lda Fireball_Y_Speed,x ;if fireball's vertical speed set to move upwards, + bmi InitFireballExplode ;branch to set exploding bit in fireball's state + lda FireballBouncingFlag,x ;if bouncing flag already set, + bne InitFireballExplode ;branch to set exploding bit in fireball's state + lda #$fd + sta Fireball_Y_Speed,x ;otherwise set vertical speed to move upwards (give it bounce) + lda #$01 + sta FireballBouncingFlag,x ;set bouncing flag + lda Fireball_Y_Position,x + and #$f8 ;modify vertical coordinate to land it properly + sta Fireball_Y_Position,x ;store as new vertical coordinate + rts ;leave + +ClearBounceFlag: + lda #$00 + sta FireballBouncingFlag,x ;clear bouncing flag by default + rts ;leave + +InitFireballExplode: + lda #$80 + sta Fireball_State,x ;set exploding flag in fireball's state + lda #Sfx_Bump + sta Square1SoundQueue ;load bump sound + rts ;leave + +;------------------------------------------------------------------------------------- +;$00 - used to hold one of bitmasks, or offset +;$01 - used for relative X coordinate, also used to store middle screen page location +;$02 - used for relative Y coordinate, also used to store middle screen coordinate + +;this data added to relative coordinates of sprite objects +;stored in order: left edge, top edge, right edge, bottom edge +BoundBoxCtrlData: + .db $02, $08, $0e, $20 + .db $03, $14, $0d, $20 + .db $02, $14, $0e, $20 + .db $02, $09, $0e, $15 + .db $00, $00, $18, $06 + .db $00, $00, $20, $0d + .db $00, $00, $30, $0d + .db $00, $00, $08, $08 + .db $06, $04, $0a, $08 + .db $03, $0e, $0d, $14 + .db $00, $02, $10, $15 + .db $04, $04, $0c, $1c + +GetFireballBoundBox: + txa ;add seven bytes to offset + clc ;to use in routines as offset for fireball + adc #$07 + tax + ldy #$02 ;set offset for relative coordinates + bne FBallB ;unconditional branch + +GetMiscBoundBox: + txa ;add nine bytes to offset + clc ;to use in routines as offset for misc object + adc #$09 + tax + ldy #$06 ;set offset for relative coordinates +FBallB: jsr BoundingBoxCore ;get bounding box coordinates + jmp CheckRightScreenBBox ;jump to handle any offscreen coordinates + +GetEnemyBoundBox: + ldy #$48 ;store bitmask here for now + sty $00 + ldy #$44 ;store another bitmask here for now and jump + jmp GetMaskedOffScrBits + +SmallPlatformBoundBox: + ldy #$08 ;store bitmask here for now + sty $00 + ldy #$04 ;store another bitmask here for now + +GetMaskedOffScrBits: + lda Enemy_X_Position,x ;get enemy object position relative + sec ;to the left side of the screen + sbc ScreenLeft_X_Pos + sta $01 ;store here + lda Enemy_PageLoc,x ;subtract borrow from current page location + sbc ScreenLeft_PageLoc ;of left side + bmi CMBits ;if enemy object is beyond left edge, branch + ora $01 + beq CMBits ;if precisely at the left edge, branch + ldy $00 ;if to the right of left edge, use value in $00 for A +CMBits: tya ;otherwise use contents of Y + and Enemy_OffscreenBits ;preserve bitwise whatever's in here + sta EnemyOffscrBitsMasked,x ;save masked offscreen bits here + bne MoveBoundBoxOffscreen ;if anything set here, branch + jmp SetupEOffsetFBBox ;otherwise, do something else + +LargePlatformBoundBox: + inx ;increment X to get the proper offset + jsr GetXOffscreenBits ;then jump directly to the sub for horizontal offscreen bits + dex ;decrement to return to original offset + cmp #$fe ;if completely offscreen, branch to put entire bounding + bcs MoveBoundBoxOffscreen ;box offscreen, otherwise start getting coordinates + +SetupEOffsetFBBox: + txa ;add 1 to offset to properly address + clc ;the enemy object memory locations + adc #$01 + tax + ldy #$01 ;load 1 as offset here, same reason + jsr BoundingBoxCore ;do a sub to get the coordinates of the bounding box + jmp CheckRightScreenBBox ;jump to handle offscreen coordinates of bounding box + +MoveBoundBoxOffscreen: + txa ;multiply offset by 4 + asl + asl + tay ;use as offset here + lda #$ff + sta EnemyBoundingBoxCoord,y ;load value into four locations here and leave + sta EnemyBoundingBoxCoord+1,y + sta EnemyBoundingBoxCoord+2,y + sta EnemyBoundingBoxCoord+3,y + rts + +BoundingBoxCore: + stx $00 ;save offset here + lda SprObject_Rel_YPos,y ;store object coordinates relative to screen + sta $02 ;vertically and horizontally, respectively + lda SprObject_Rel_XPos,y + sta $01 + txa ;multiply offset by four and save to stack + asl + asl + pha + tay ;use as offset for Y, X is left alone + lda SprObj_BoundBoxCtrl,x ;load value here to be used as offset for X + asl ;multiply that by four and use as X + asl + tax + lda $01 ;add the first number in the bounding box data to the + clc ;relative horizontal coordinate using enemy object offset + adc BoundBoxCtrlData,x ;and store somewhere using same offset * 4 + sta BoundingBox_UL_Corner,y ;store here + lda $01 + clc + adc BoundBoxCtrlData+2,x ;add the third number in the bounding box data to the + sta BoundingBox_LR_Corner,y ;relative horizontal coordinate and store + inx ;increment both offsets + iny + lda $02 ;add the second number to the relative vertical coordinate + clc ;using incremented offset and store using the other + adc BoundBoxCtrlData,x ;incremented offset + sta BoundingBox_UL_Corner,y + lda $02 + clc + adc BoundBoxCtrlData+2,x ;add the fourth number to the relative vertical coordinate + sta BoundingBox_LR_Corner,y ;and store + pla ;get original offset loaded into $00 * y from stack + tay ;use as Y + ldx $00 ;get original offset and use as X again + rts + +CheckRightScreenBBox: + lda ScreenLeft_X_Pos ;add 128 pixels to left side of screen + clc ;and store as horizontal coordinate of middle + adc #$80 + sta $02 + lda ScreenLeft_PageLoc ;add carry to page location of left side of screen + adc #$00 ;and store as page location of middle + sta $01 + lda SprObject_X_Position,x ;get horizontal coordinate + cmp $02 ;compare against middle horizontal coordinate + lda SprObject_PageLoc,x ;get page location + sbc $01 ;subtract from middle page location + bcc CheckLeftScreenBBox ;if object is on the left side of the screen, branch + lda BoundingBox_DR_XPos,y ;check right-side edge of bounding box for offscreen + bmi NoOfs ;coordinates, branch if still on the screen + lda #$ff ;load offscreen value here to use on one or both horizontal sides + ldx BoundingBox_UL_XPos,y ;check left-side edge of bounding box for offscreen + bmi SORte ;coordinates, and branch if still on the screen + sta BoundingBox_UL_XPos,y ;store offscreen value for left side +SORte: sta BoundingBox_DR_XPos,y ;store offscreen value for right side +NoOfs: ldx ObjectOffset ;get object offset and leave + rts + +CheckLeftScreenBBox: + lda BoundingBox_UL_XPos,y ;check left-side edge of bounding box for offscreen + bpl NoOfs2 ;coordinates, and branch if still on the screen + cmp #$a0 ;check to see if left-side edge is in the middle of the + bcc NoOfs2 ;screen or really offscreen, and branch if still on + lda #$00 + ldx BoundingBox_DR_XPos,y ;check right-side edge of bounding box for offscreen + bpl SOLft ;coordinates, branch if still onscreen + sta BoundingBox_DR_XPos,y ;store offscreen value for right side +SOLft: sta BoundingBox_UL_XPos,y ;store offscreen value for left side +NoOfs2: ldx ObjectOffset ;get object offset and leave + rts + +;------------------------------------------------------------------------------------- +;$06 - second object's offset +;$07 - counter + +PlayerCollisionCore: + ldx #$00 ;initialize X to use player's bounding box for comparison + +SprObjectCollisionCore: + sty $06 ;save contents of Y here + lda #$01 + sta $07 ;save value 1 here as counter, compare horizontal coordinates first + +CollisionCoreLoop: + lda BoundingBox_UL_Corner,y ;compare left/top coordinates + cmp BoundingBox_UL_Corner,x ;of first and second objects' bounding boxes + bcs FirstBoxGreater ;if first left/top => second, branch + cmp BoundingBox_LR_Corner,x ;otherwise compare to right/bottom of second + bcc SecondBoxVerticalChk ;if first left/top < second right/bottom, branch elsewhere + beq CollisionFound ;if somehow equal, collision, thus branch + lda BoundingBox_LR_Corner,y ;if somehow greater, check to see if bottom of + cmp BoundingBox_UL_Corner,y ;first object's bounding box is greater than its top + bcc CollisionFound ;if somehow less, vertical wrap collision, thus branch + cmp BoundingBox_UL_Corner,x ;otherwise compare bottom of first bounding box to the top + bcs CollisionFound ;of second box, and if equal or greater, collision, thus branch + ldy $06 ;otherwise return with carry clear and Y = $0006 + rts ;note horizontal wrapping never occurs + +SecondBoxVerticalChk: + lda BoundingBox_LR_Corner,x ;check to see if the vertical bottom of the box + cmp BoundingBox_UL_Corner,x ;is greater than the vertical top + bcc CollisionFound ;if somehow less, vertical wrap collision, thus branch + lda BoundingBox_LR_Corner,y ;otherwise compare horizontal right or vertical bottom + cmp BoundingBox_UL_Corner,x ;of first box with horizontal left or vertical top of second box + bcs CollisionFound ;if equal or greater, collision, thus branch + ldy $06 ;otherwise return with carry clear and Y = $0006 + rts + +FirstBoxGreater: + cmp BoundingBox_UL_Corner,x ;compare first and second box horizontal left/vertical top again + beq CollisionFound ;if first coordinate = second, collision, thus branch + cmp BoundingBox_LR_Corner,x ;if not, compare with second object right or bottom edge + bcc CollisionFound ;if left/top of first less than or equal to right/bottom of second + beq CollisionFound ;then collision, thus branch + cmp BoundingBox_LR_Corner,y ;otherwise check to see if top of first box is greater than bottom + bcc NoCollisionFound ;if less than or equal, no collision, branch to end + beq NoCollisionFound + lda BoundingBox_LR_Corner,y ;otherwise compare bottom of first to top of second + cmp BoundingBox_UL_Corner,x ;if bottom of first is greater than top of second, vertical wrap + bcs CollisionFound ;collision, and branch, otherwise, proceed onwards here + +NoCollisionFound: + clc ;clear carry, then load value set earlier, then leave + ldy $06 ;like previous ones, if horizontal coordinates do not collide, we do + rts ;not bother checking vertical ones, because what's the point? + +CollisionFound: + inx ;increment offsets on both objects to check + iny ;the vertical coordinates + dec $07 ;decrement counter to reflect this + bpl CollisionCoreLoop ;if counter not expired, branch to loop + sec ;otherwise we already did both sets, therefore collision, so set carry + ldy $06 ;load original value set here earlier, then leave + rts + +;------------------------------------------------------------------------------------- +;$02 - modified y coordinate +;$03 - stores metatile involved in block buffer collisions +;$04 - comes in with offset to block buffer adder data, goes out with low nybble x/y coordinate +;$05 - modified x coordinate +;$06-$07 - block buffer address + +BlockBufferChk_Enemy: + pha ;save contents of A to stack + txa + clc ;add 1 to X to run sub with enemy offset in mind + adc #$01 + tax + pla ;pull A from stack and jump elsewhere + jmp BBChk_E + +ResidualMiscObjectCode: + txa + clc ;supposedly used once to set offset for + adc #$0d ;miscellaneous objects + tax + ldy #$1b ;supposedly used once to set offset for block buffer data + jmp ResJmpM ;probably used in early stages to do misc to bg collision detection + +BlockBufferChk_FBall: + ldy #$1a ;set offset for block buffer adder data + txa + clc + adc #$07 ;add seven bytes to use + tax +ResJmpM: lda #$00 ;set A to return vertical coordinate +BBChk_E: jsr BlockBufferCollision ;do collision detection subroutine for sprite object + ldx ObjectOffset ;get object offset + cmp #$00 ;check to see if object bumped into anything + rts + +BlockBufferAdderData: + .db $00, $07, $0e + +BlockBuffer_X_Adder: + .db $08, $03, $0c, $02, $02, $0d, $0d, $08 + .db $03, $0c, $02, $02, $0d, $0d, $08, $03 + .db $0c, $02, $02, $0d, $0d, $08, $00, $10 + .db $04, $14, $04, $04 + +BlockBuffer_Y_Adder: + .db $04, $20, $20, $08, $18, $08, $18, $02 + .db $20, $20, $08, $18, $08, $18, $12, $20 + .db $20, $18, $18, $18, $18, $18, $14, $14 + .db $06, $06, $08, $10 + +BlockBufferColli_Feet: + iny ;if branched here, increment to next set of adders + +BlockBufferColli_Head: + lda #$00 ;set flag to return vertical coordinate + .db $2c ;BIT instruction opcode + +BlockBufferColli_Side: + lda #$01 ;set flag to return horizontal coordinate + ldx #$00 ;set offset for player object + +BlockBufferCollision: + pha ;save contents of A to stack + sty $04 ;save contents of Y here + lda BlockBuffer_X_Adder,y ;add horizontal coordinate + clc ;of object to value obtained using Y as offset + adc SprObject_X_Position,x + sta $05 ;store here + lda SprObject_PageLoc,x + adc #$00 ;add carry to page location + and #$01 ;get LSB, mask out all other bits + lsr ;move to carry + ora $05 ;get stored value + ror ;rotate carry to MSB of A + lsr ;and effectively move high nybble to + lsr ;lower, LSB which became MSB will be + lsr ;d4 at this point + jsr GetBlockBufferAddr ;get address of block buffer into $06, $07 + ldy $04 ;get old contents of Y + lda SprObject_Y_Position,x ;get vertical coordinate of object + clc + adc BlockBuffer_Y_Adder,y ;add it to value obtained using Y as offset + and #%11110000 ;mask out low nybble + sec + sbc #$20 ;subtract 32 pixels for the status bar + sta $02 ;store result here + tay ;use as offset for block buffer + lda ($06),y ;check current content of block buffer + sta $03 ;and store here + ldy $04 ;get old contents of Y again + pla ;pull A from stack + bne RetXC ;if A = 1, branch + lda SprObject_Y_Position,x ;if A = 0, load vertical coordinate + jmp RetYC ;and jump +RetXC: lda SprObject_X_Position,x ;otherwise load horizontal coordinate +RetYC: and #%00001111 ;and mask out high nybble + sta $04 ;store masked out result here + lda $03 ;get saved content of block buffer + rts ;and leave + +;------------------------------------------------------------------------------------- + +;unused byte + .db $ff + +;------------------------------------------------------------------------------------- +;$00 - offset to vine Y coordinate adder +;$02 - offset to sprite data + +VineYPosAdder: + .db $00, $30 + +DrawVine: + sty $00 ;save offset here + lda Enemy_Rel_YPos ;get relative vertical coordinate + clc + adc VineYPosAdder,y ;add value using offset in Y to get value + ldx VineObjOffset,y ;get offset to vine + ldy Enemy_SprDataOffset,x ;get sprite data offset + sty $02 ;store sprite data offset here + jsr SixSpriteStacker ;stack six sprites on top of each other vertically + lda Enemy_Rel_XPos ;get relative horizontal coordinate + sta Sprite_X_Position,y ;store in first, third and fifth sprites + sta Sprite_X_Position+8,y + sta Sprite_X_Position+16,y + clc + adc #$06 ;add six pixels to second, fourth and sixth sprites + sta Sprite_X_Position+4,y ;to give characteristic staggered vine shape to + sta Sprite_X_Position+12,y ;our vertical stack of sprites + sta Sprite_X_Position+20,y + lda #%00100001 ;set bg priority and palette attribute bits + sta Sprite_Attributes,y ;set in first, third and fifth sprites + sta Sprite_Attributes+8,y + sta Sprite_Attributes+16,y + ora #%01000000 ;additionally, set horizontal flip bit + sta Sprite_Attributes+4,y ;for second, fourth and sixth sprites + sta Sprite_Attributes+12,y + sta Sprite_Attributes+20,y + ldx #$05 ;set tiles for six sprites +VineTL: lda #$e1 ;set tile number for sprite + sta Sprite_Tilenumber,y + iny ;move offset to next sprite data + iny + iny + iny + dex ;move onto next sprite + bpl VineTL ;loop until all sprites are done + ldy $02 ;get original offset + lda $00 ;get offset to vine adding data + bne SkpVTop ;if offset not zero, skip this part + lda #$e0 + sta Sprite_Tilenumber,y ;set other tile number for top of vine +SkpVTop: ldx #$00 ;start with the first sprite again +ChkFTop: lda VineStart_Y_Position ;get original starting vertical coordinate + sec + sbc Sprite_Y_Position,y ;subtract top-most sprite's Y coordinate + cmp #$64 ;if two coordinates are less than 100/$64 pixels + bcc NextVSp ;apart, skip this to leave sprite alone + lda #$f8 + sta Sprite_Y_Position,y ;otherwise move sprite offscreen +NextVSp: iny ;move offset to next OAM data + iny + iny + iny + inx ;move onto next sprite + cpx #$06 ;do this until all sprites are checked + bne ChkFTop + ldy $00 ;return offset set earlier + rts + +SixSpriteStacker: + ldx #$06 ;do six sprites +StkLp: sta Sprite_Data,y ;store X or Y coordinate into OAM data + clc + adc #$08 ;add eight pixels + iny + iny ;move offset four bytes forward + iny + iny + dex ;do another sprite + bne StkLp ;do this until all sprites are done + ldy $02 ;get saved OAM data offset and leave + rts + +;------------------------------------------------------------------------------------- + +FirstSprXPos: + .db $04, $00, $04, $00 + +FirstSprYPos: + .db $00, $04, $00, $04 + +SecondSprXPos: + .db $00, $08, $00, $08 + +SecondSprYPos: + .db $08, $00, $08, $00 + +FirstSprTilenum: + .db $80, $82, $81, $83 + +SecondSprTilenum: + .db $81, $83, $80, $82 + +HammerSprAttrib: + .db $03, $03, $c3, $c3 + +DrawHammer: + ldy Misc_SprDataOffset,x ;get misc object OAM data offset + lda TimerControl + bne ForceHPose ;if master timer control set, skip this part + lda Misc_State,x ;otherwise get hammer's state + and #%01111111 ;mask out d7 + cmp #$01 ;check to see if set to 1 yet + beq GetHPose ;if so, branch +ForceHPose: ldx #$00 ;reset offset here + beq RenderH ;do unconditional branch to rendering part +GetHPose: lda FrameCounter ;get frame counter + lsr ;move d3-d2 to d1-d0 + lsr + and #%00000011 ;mask out all but d1-d0 (changes every four frames) + tax ;use as timing offset +RenderH: lda Misc_Rel_YPos ;get relative vertical coordinate + clc + adc FirstSprYPos,x ;add first sprite vertical adder based on offset + sta Sprite_Y_Position,y ;store as sprite Y coordinate for first sprite + clc + adc SecondSprYPos,x ;add second sprite vertical adder based on offset + sta Sprite_Y_Position+4,y ;store as sprite Y coordinate for second sprite + lda Misc_Rel_XPos ;get relative horizontal coordinate + clc + adc FirstSprXPos,x ;add first sprite horizontal adder based on offset + sta Sprite_X_Position,y ;store as sprite X coordinate for first sprite + clc + adc SecondSprXPos,x ;add second sprite horizontal adder based on offset + sta Sprite_X_Position+4,y ;store as sprite X coordinate for second sprite + lda FirstSprTilenum,x + sta Sprite_Tilenumber,y ;get and store tile number of first sprite + lda SecondSprTilenum,x + sta Sprite_Tilenumber+4,y ;get and store tile number of second sprite + lda HammerSprAttrib,x + sta Sprite_Attributes,y ;get and store attribute bytes for both + sta Sprite_Attributes+4,y ;note in this case they use the same data + ldx ObjectOffset ;get misc object offset + lda Misc_OffscreenBits + and #%11111100 ;check offscreen bits + beq NoHOffscr ;if all bits clear, leave object alone + lda #$00 + sta Misc_State,x ;otherwise nullify misc object state + lda #$f8 + jsr DumpTwoSpr ;do sub to move hammer sprites offscreen +NoHOffscr: rts ;leave + +;------------------------------------------------------------------------------------- +;$00-$01 - used to hold tile numbers ($01 addressed in draw floatey number part) +;$02 - used to hold Y coordinate for floatey number +;$03 - residual byte used for flip (but value set here affects nothing) +;$04 - attribute byte for floatey number +;$05 - used as X coordinate for floatey number + +FlagpoleScoreNumTiles: + .db $f9, $50 + .db $f7, $50 + .db $fa, $fb + .db $f8, $fb + .db $f6, $fb + +FlagpoleGfxHandler: + ldy Enemy_SprDataOffset,x ;get sprite data offset for flagpole flag + lda Enemy_Rel_XPos ;get relative horizontal coordinate + sta Sprite_X_Position,y ;store as X coordinate for first sprite + clc + adc #$08 ;add eight pixels and store + sta Sprite_X_Position+4,y ;as X coordinate for second and third sprites + sta Sprite_X_Position+8,y + clc + adc #$0c ;add twelve more pixels and + sta $05 ;store here to be used later by floatey number + lda Enemy_Y_Position,x ;get vertical coordinate + jsr DumpTwoSpr ;and do sub to dump into first and second sprites + adc #$08 ;add eight pixels + sta Sprite_Y_Position+8,y ;and store into third sprite + lda FlagpoleFNum_Y_Pos ;get vertical coordinate for floatey number + sta $02 ;store it here + lda #$01 + sta $03 ;set value for flip which will not be used, and + sta $04 ;attribute byte for floatey number + sta Sprite_Attributes,y ;set attribute bytes for all three sprites + sta Sprite_Attributes+4,y + sta Sprite_Attributes+8,y + lda #$7e + sta Sprite_Tilenumber,y ;put triangle shaped tile + sta Sprite_Tilenumber+8,y ;into first and third sprites + lda #$7f + sta Sprite_Tilenumber+4,y ;put skull tile into second sprite + lda FlagpoleCollisionYPos ;get vertical coordinate at time of collision + beq ChkFlagOffscreen ;if zero, branch ahead + tya + clc ;add 12 bytes to sprite data offset + adc #$0c + tay ;put back in Y + lda FlagpoleScore ;get offset used to award points for touching flagpole + asl ;multiply by 2 to get proper offset here + tax + lda FlagpoleScoreNumTiles,x ;get appropriate tile data + sta $00 + lda FlagpoleScoreNumTiles+1,x + jsr DrawOneSpriteRow ;use it to render floatey number + +ChkFlagOffscreen: + ldx ObjectOffset ;get object offset for flag + ldy Enemy_SprDataOffset,x ;get OAM data offset + lda Enemy_OffscreenBits ;get offscreen bits + and #%00001110 ;mask out all but d3-d1 + beq ExitDumpSpr ;if none of these bits set, branch to leave + +;------------------------------------------------------------------------------------- + +MoveSixSpritesOffscreen: + lda #$f8 ;set offscreen coordinate if jumping here + +DumpSixSpr: + sta Sprite_Data+20,y ;dump A contents + sta Sprite_Data+16,y ;into third row sprites + +DumpFourSpr: + sta Sprite_Data+12,y ;into second row sprites + +DumpThreeSpr: + sta Sprite_Data+8,y + +DumpTwoSpr: + sta Sprite_Data+4,y ;and into first row sprites + sta Sprite_Data,y + +ExitDumpSpr: + rts + +;------------------------------------------------------------------------------------- + +DrawLargePlatform: + ldy Enemy_SprDataOffset,x ;get OAM data offset + sty $02 ;store here + iny ;add 3 to it for offset + iny ;to X coordinate + iny + lda Enemy_Rel_XPos ;get horizontal relative coordinate + jsr SixSpriteStacker ;store X coordinates using A as base, stack horizontally + ldx ObjectOffset + lda Enemy_Y_Position,x ;get vertical coordinate + jsr DumpFourSpr ;dump into first four sprites as Y coordinate + ldy AreaType + cpy #$03 ;check for castle-type level + beq ShrinkPlatform + ldy SecondaryHardMode ;check for secondary hard mode flag set + beq SetLast2Platform ;branch if not set elsewhere + +ShrinkPlatform: + lda #$f8 ;load offscreen coordinate if flag set or castle-type level + +SetLast2Platform: + ldy Enemy_SprDataOffset,x ;get OAM data offset + sta Sprite_Y_Position+16,y ;store vertical coordinate or offscreen + sta Sprite_Y_Position+20,y ;coordinate into last two sprites as Y coordinate + lda #$5b ;load default tile for platform (girder) + ldx CloudTypeOverride + beq SetPlatformTilenum ;if cloud level override flag not set, use + lda #$75 ;otherwise load other tile for platform (puff) + +SetPlatformTilenum: + ldx ObjectOffset ;get enemy object buffer offset + iny ;increment Y for tile offset + jsr DumpSixSpr ;dump tile number into all six sprites + lda #$02 ;set palette controls + iny ;increment Y for sprite attributes + jsr DumpSixSpr ;dump attributes into all six sprites + inx ;increment X for enemy objects + jsr GetXOffscreenBits ;get offscreen bits again + dex + ldy Enemy_SprDataOffset,x ;get OAM data offset + asl ;rotate d7 into carry, save remaining + pha ;bits to the stack + bcc SChk2 + lda #$f8 ;if d7 was set, move first sprite offscreen + sta Sprite_Y_Position,y +SChk2: pla ;get bits from stack + asl ;rotate d6 into carry + pha ;save to stack + bcc SChk3 + lda #$f8 ;if d6 was set, move second sprite offscreen + sta Sprite_Y_Position+4,y +SChk3: pla ;get bits from stack + asl ;rotate d5 into carry + pha ;save to stack + bcc SChk4 + lda #$f8 ;if d5 was set, move third sprite offscreen + sta Sprite_Y_Position+8,y +SChk4: pla ;get bits from stack + asl ;rotate d4 into carry + pha ;save to stack + bcc SChk5 + lda #$f8 ;if d4 was set, move fourth sprite offscreen + sta Sprite_Y_Position+12,y +SChk5: pla ;get bits from stack + asl ;rotate d3 into carry + pha ;save to stack + bcc SChk6 + lda #$f8 ;if d3 was set, move fifth sprite offscreen + sta Sprite_Y_Position+16,y +SChk6: pla ;get bits from stack + asl ;rotate d2 into carry + bcc SLChk ;save to stack + lda #$f8 + sta Sprite_Y_Position+20,y ;if d2 was set, move sixth sprite offscreen +SLChk: lda Enemy_OffscreenBits ;check d7 of offscreen bits + asl ;and if d7 is not set, skip sub + bcc ExDLPl + jsr MoveSixSpritesOffscreen ;otherwise branch to move all sprites offscreen +ExDLPl: rts + +;------------------------------------------------------------------------------------- + +DrawFloateyNumber_Coin: + lda FrameCounter ;get frame counter + lsr ;divide by 2 + bcs NotRsNum ;branch if d0 not set to raise number every other frame + dec Misc_Y_Position,x ;otherwise, decrement vertical coordinate +NotRsNum: lda Misc_Y_Position,x ;get vertical coordinate + jsr DumpTwoSpr ;dump into both sprites + lda Misc_Rel_XPos ;get relative horizontal coordinate + sta Sprite_X_Position,y ;store as X coordinate for first sprite + clc + adc #$08 ;add eight pixels + sta Sprite_X_Position+4,y ;store as X coordinate for second sprite + lda #$02 + sta Sprite_Attributes,y ;store attribute byte in both sprites + sta Sprite_Attributes+4,y + lda #$f7 + sta Sprite_Tilenumber,y ;put tile numbers into both sprites + lda #$fb ;that resemble "200" + sta Sprite_Tilenumber+4,y + jmp ExJCGfx ;then jump to leave (why not an rts here instead?) + +JumpingCoinTiles: + .db $60, $61, $62, $63 + +JCoinGfxHandler: + ldy Misc_SprDataOffset,x ;get coin/floatey number's OAM data offset + lda Misc_State,x ;get state of misc object + cmp #$02 ;if 2 or greater, + bcs DrawFloateyNumber_Coin ;branch to draw floatey number + lda Misc_Y_Position,x ;store vertical coordinate as + sta Sprite_Y_Position,y ;Y coordinate for first sprite + clc + adc #$08 ;add eight pixels + sta Sprite_Y_Position+4,y ;store as Y coordinate for second sprite + lda Misc_Rel_XPos ;get relative horizontal coordinate + sta Sprite_X_Position,y + sta Sprite_X_Position+4,y ;store as X coordinate for first and second sprites + lda FrameCounter ;get frame counter + lsr ;divide by 2 to alter every other frame + and #%00000011 ;mask out d2-d1 + tax ;use as graphical offset + lda JumpingCoinTiles,x ;load tile number + iny ;increment OAM data offset to write tile numbers + jsr DumpTwoSpr ;do sub to dump tile number into both sprites + dey ;decrement to get old offset + lda #$02 + sta Sprite_Attributes,y ;set attribute byte in first sprite + lda #$82 + sta Sprite_Attributes+4,y ;set attribute byte with vertical flip in second sprite + ldx ObjectOffset ;get misc object offset +ExJCGfx: rts ;leave + +;------------------------------------------------------------------------------------- +;$00-$01 - used to hold tiles for drawing the power-up, $00 also used to hold power-up type +;$02 - used to hold bottom row Y position +;$03 - used to hold flip control (not used here) +;$04 - used to hold sprite attributes +;$05 - used to hold X position +;$07 - counter + +;tiles arranged in top left, right, bottom left, right order +PowerUpGfxTable: + .db $76, $77, $78, $79 ;regular mushroom + .db $d6, $d6, $d9, $d9 ;fire flower + .db $8d, $8d, $e4, $e4 ;star + .db $76, $77, $78, $79 ;1-up mushroom + +PowerUpAttributes: + .db $02, $01, $02, $01 + +DrawPowerUp: + ldy Enemy_SprDataOffset+5 ;get power-up's sprite data offset + lda Enemy_Rel_YPos ;get relative vertical coordinate + clc + adc #$08 ;add eight pixels + sta $02 ;store result here + lda Enemy_Rel_XPos ;get relative horizontal coordinate + sta $05 ;store here + ldx PowerUpType ;get power-up type + lda PowerUpAttributes,x ;get attribute data for power-up type + ora Enemy_SprAttrib+5 ;add background priority bit if set + sta $04 ;store attributes here + txa + pha ;save power-up type to the stack + asl + asl ;multiply by four to get proper offset + tax ;use as X + lda #$01 + sta $07 ;set counter here to draw two rows of sprite object + sta $03 ;init d1 of flip control + +PUpDrawLoop: + lda PowerUpGfxTable,x ;load left tile of power-up object + sta $00 + lda PowerUpGfxTable+1,x ;load right tile + jsr DrawOneSpriteRow ;branch to draw one row of our power-up object + dec $07 ;decrement counter + bpl PUpDrawLoop ;branch until two rows are drawn + ldy Enemy_SprDataOffset+5 ;get sprite data offset again + pla ;pull saved power-up type from the stack + beq PUpOfs ;if regular mushroom, branch, do not change colors or flip + cmp #$03 + beq PUpOfs ;if 1-up mushroom, branch, do not change colors or flip + sta $00 ;store power-up type here now + lda FrameCounter ;get frame counter + lsr ;divide by 2 to change colors every two frames + and #%00000011 ;mask out all but d1 and d0 (previously d2 and d1) + ora Enemy_SprAttrib+5 ;add background priority bit if any set + sta Sprite_Attributes,y ;set as new palette bits for top left and + sta Sprite_Attributes+4,y ;top right sprites for fire flower and star + ldx $00 + dex ;check power-up type for fire flower + beq FlipPUpRightSide ;if found, skip this part + sta Sprite_Attributes+8,y ;otherwise set new palette bits for bottom left + sta Sprite_Attributes+12,y ;and bottom right sprites as well for star only + +FlipPUpRightSide: + lda Sprite_Attributes+4,y + ora #%01000000 ;set horizontal flip bit for top right sprite + sta Sprite_Attributes+4,y + lda Sprite_Attributes+12,y + ora #%01000000 ;set horizontal flip bit for bottom right sprite + sta Sprite_Attributes+12,y ;note these are only done for fire flower and star power-ups +PUpOfs: jmp SprObjectOffscrChk ;jump to check to see if power-up is offscreen at all, then leave + +;------------------------------------------------------------------------------------- +;$00-$01 - used in DrawEnemyObjRow to hold sprite tile numbers +;$02 - used to store Y position +;$03 - used to store moving direction, used to flip enemies horizontally +;$04 - used to store enemy's sprite attributes +;$05 - used to store X position +;$eb - used to hold sprite data offset +;$ec - used to hold either altered enemy state or special value used in gfx handler as condition +;$ed - used to hold enemy state from buffer +;$ef - used to hold enemy code used in gfx handler (may or may not resemble Enemy_ID values) + +;tiles arranged in top left, right, middle left, right, bottom left, right order +EnemyGraphicsTable: + .db $fc, $fc, $aa, $ab, $ac, $ad ;buzzy beetle frame 1 + .db $fc, $fc, $ae, $af, $b0, $b1 ; frame 2 + .db $fc, $a5, $a6, $a7, $a8, $a9 ;koopa troopa frame 1 + .db $fc, $a0, $a1, $a2, $a3, $a4 ; frame 2 + .db $69, $a5, $6a, $a7, $a8, $a9 ;koopa paratroopa frame 1 + .db $6b, $a0, $6c, $a2, $a3, $a4 ; frame 2 + .db $fc, $fc, $96, $97, $98, $99 ;spiny frame 1 + .db $fc, $fc, $9a, $9b, $9c, $9d ; frame 2 + .db $fc, $fc, $8f, $8e, $8e, $8f ;spiny's egg frame 1 + .db $fc, $fc, $95, $94, $94, $95 ; frame 2 + .db $fc, $fc, $dc, $dc, $df, $df ;bloober frame 1 + .db $dc, $dc, $dd, $dd, $de, $de ; frame 2 + .db $fc, $fc, $b2, $b3, $b4, $b5 ;cheep-cheep frame 1 + .db $fc, $fc, $b6, $b3, $b7, $b5 ; frame 2 + .db $fc, $fc, $70, $71, $72, $73 ;goomba + .db $fc, $fc, $6e, $6e, $6f, $6f ;koopa shell frame 1 (upside-down) + .db $fc, $fc, $6d, $6d, $6f, $6f ; frame 2 + .db $fc, $fc, $6f, $6f, $6e, $6e ;koopa shell frame 1 (rightsideup) + .db $fc, $fc, $6f, $6f, $6d, $6d ; frame 2 + .db $fc, $fc, $f4, $f4, $f5, $f5 ;buzzy beetle shell frame 1 (rightsideup) + .db $fc, $fc, $f4, $f4, $f5, $f5 ; frame 2 + .db $fc, $fc, $f5, $f5, $f4, $f4 ;buzzy beetle shell frame 1 (upside-down) + .db $fc, $fc, $f5, $f5, $f4, $f4 ; frame 2 + .db $fc, $fc, $fc, $fc, $ef, $ef ;defeated goomba + .db $b9, $b8, $bb, $ba, $bc, $bc ;lakitu frame 1 + .db $fc, $fc, $bd, $bd, $bc, $bc ; frame 2 + .db $7a, $7b, $da, $db, $d8, $d8 ;princess + .db $cd, $cd, $ce, $ce, $cf, $cf ;mushroom retainer + .db $7d, $7c, $d1, $8c, $d3, $d2 ;hammer bro frame 1 + .db $7d, $7c, $89, $88, $8b, $8a ; frame 2 + .db $d5, $d4, $e3, $e2, $d3, $d2 ; frame 3 + .db $d5, $d4, $e3, $e2, $8b, $8a ; frame 4 + .db $e5, $e5, $e6, $e6, $eb, $eb ;piranha plant frame 1 + .db $ec, $ec, $ed, $ed, $ee, $ee ; frame 2 + .db $fc, $fc, $d0, $d0, $d7, $d7 ;podoboo + .db $bf, $be, $c1, $c0, $c2, $fc ;bowser front frame 1 + .db $c4, $c3, $c6, $c5, $c8, $c7 ;bowser rear frame 1 + .db $bf, $be, $ca, $c9, $c2, $fc ; front frame 2 + .db $c4, $c3, $c6, $c5, $cc, $cb ; rear frame 2 + .db $fc, $fc, $e8, $e7, $ea, $e9 ;bullet bill + .db $f2, $f2, $f3, $f3, $f2, $f2 ;jumpspring frame 1 + .db $f1, $f1, $f1, $f1, $fc, $fc ; frame 2 + .db $f0, $f0, $fc, $fc, $fc, $fc ; frame 3 + +EnemyGfxTableOffsets: + .db $0c, $0c, $00, $0c, $0c, $a8, $54, $3c + .db $ea, $18, $48, $48, $cc, $c0, $18, $18 + .db $18, $90, $24, $ff, $48, $9c, $d2, $d8 + .db $f0, $f6, $fc + +EnemyAttributeData: + .db $01, $02, $03, $02, $01, $01, $03, $03 + .db $03, $01, $01, $02, $02, $21, $01, $02 + .db $01, $01, $02, $ff, $02, $02, $01, $01 + .db $02, $02, $02 + +EnemyAnimTimingBMask: + .db $08, $18 + +JumpspringFrameOffsets: + .db $18, $19, $1a, $19, $18 + +EnemyGfxHandler: + lda Enemy_Y_Position,x ;get enemy object vertical position + sta $02 + lda Enemy_Rel_XPos ;get enemy object horizontal position + sta $05 ;relative to screen + ldy Enemy_SprDataOffset,x + sty $eb ;get sprite data offset + lda #$00 + sta VerticalFlipFlag ;initialize vertical flip flag by default + lda Enemy_MovingDir,x + sta $03 ;get enemy object moving direction + lda Enemy_SprAttrib,x + sta $04 ;get enemy object sprite attributes + lda Enemy_ID,x + cmp #PiranhaPlant ;is enemy object piranha plant? + bne CheckForRetainerObj ;if not, branch + ldy PiranhaPlant_Y_Speed,x + bmi CheckForRetainerObj ;if piranha plant moving upwards, branch + ldy EnemyFrameTimer,x + beq CheckForRetainerObj ;if timer for movement expired, branch + rts ;if all conditions fail, leave + +CheckForRetainerObj: + lda Enemy_State,x ;store enemy state + sta $ed + and #%00011111 ;nullify all but 5 LSB and use as Y + tay + lda Enemy_ID,x ;check for mushroom retainer/princess object + cmp #RetainerObject + bne CheckForBulletBillCV ;if not found, branch + ldy #$00 ;if found, nullify saved state in Y + lda #$01 ;set value that will not be used + sta $03 + lda #$15 ;set value $15 as code for mushroom retainer/princess object + +CheckForBulletBillCV: + cmp #BulletBill_CannonVar ;otherwise check for bullet bill object + bne CheckForJumpspring ;if not found, branch again + dec $02 ;decrement saved vertical position + lda #$03 + ldy EnemyFrameTimer,x ;get timer for enemy object + beq SBBAt ;if expired, do not set priority bit + ora #%00100000 ;otherwise do so +SBBAt: sta $04 ;set new sprite attributes + ldy #$00 ;nullify saved enemy state both in Y and in + sty $ed ;memory location here + lda #$08 ;set specific value to unconditionally branch once + +CheckForJumpspring: + cmp #JumpspringObject ;check for jumpspring object + bne CheckForPodoboo + ldy #$03 ;set enemy state -2 MSB here for jumpspring object + ldx JumpspringAnimCtrl ;get current frame number for jumpspring object + lda JumpspringFrameOffsets,x ;load data using frame number as offset + +CheckForPodoboo: + sta $ef ;store saved enemy object value here + sty $ec ;and Y here (enemy state -2 MSB if not changed) + ldx ObjectOffset ;get enemy object offset + cmp #$0c ;check for podoboo object + bne CheckBowserGfxFlag ;branch if not found + lda Enemy_Y_Speed,x ;if moving upwards, branch + bmi CheckBowserGfxFlag + inc VerticalFlipFlag ;otherwise, set flag for vertical flip + +CheckBowserGfxFlag: + lda BowserGfxFlag ;if not drawing bowser at all, skip to something else + beq CheckForGoomba + ldy #$16 ;if set to 1, draw bowser's front + cmp #$01 + beq SBwsrGfxOfs + iny ;otherwise draw bowser's rear +SBwsrGfxOfs: sty $ef + +CheckForGoomba: + ldy $ef ;check value for goomba object + cpy #Goomba + bne CheckBowserFront ;branch if not found + lda Enemy_State,x + cmp #$02 ;check for defeated state + bcc GmbaAnim ;if not defeated, go ahead and animate + ldx #$04 ;if defeated, write new value here + stx $ec +GmbaAnim: and #%00100000 ;check for d5 set in enemy object state + ora TimerControl ;or timer disable flag set + bne CheckBowserFront ;if either condition true, do not animate goomba + lda FrameCounter + and #%00001000 ;check for every eighth frame + bne CheckBowserFront + lda $03 + eor #%00000011 ;invert bits to flip horizontally every eight frames + sta $03 ;leave alone otherwise + +CheckBowserFront: + lda EnemyAttributeData,y ;load sprite attribute using enemy object + ora $04 ;as offset, and add to bits already loaded + sta $04 + lda EnemyGfxTableOffsets,y ;load value based on enemy object as offset + tax ;save as X + ldy $ec ;get previously saved value + lda BowserGfxFlag + beq CheckForSpiny ;if not drawing bowser object at all, skip all of this + cmp #$01 + bne CheckBowserRear ;if not drawing front part, branch to draw the rear part + lda BowserBodyControls ;check bowser's body control bits + bpl ChkFrontSte ;branch if d7 not set (control's bowser's mouth) + ldx #$de ;otherwise load offset for second frame +ChkFrontSte: lda $ed ;check saved enemy state + and #%00100000 ;if bowser not defeated, do not set flag + beq DrawBowser + +FlipBowserOver: + stx VerticalFlipFlag ;set vertical flip flag to nonzero + +DrawBowser: + jmp DrawEnemyObject ;draw bowser's graphics now + +CheckBowserRear: + lda BowserBodyControls ;check bowser's body control bits + and #$01 + beq ChkRearSte ;branch if d0 not set (control's bowser's feet) + ldx #$e4 ;otherwise load offset for second frame +ChkRearSte: lda $ed ;check saved enemy state + and #%00100000 ;if bowser not defeated, do not set flag + beq DrawBowser + lda $02 ;subtract 16 pixels from + sec ;saved vertical coordinate + sbc #$10 + sta $02 + jmp FlipBowserOver ;jump to set vertical flip flag + +CheckForSpiny: + cpx #$24 ;check if value loaded is for spiny + bne CheckForLakitu ;if not found, branch + cpy #$05 ;if enemy state set to $05, do this, + bne NotEgg ;otherwise branch + ldx #$30 ;set to spiny egg offset + lda #$02 + sta $03 ;set enemy direction to reverse sprites horizontally + lda #$05 + sta $ec ;set enemy state +NotEgg: jmp CheckForHammerBro ;skip a big chunk of this if we found spiny but not in egg + +CheckForLakitu: + cpx #$90 ;check value for lakitu's offset loaded + bne CheckUpsideDownShell ;branch if not loaded + lda $ed + and #%00100000 ;check for d5 set in enemy state + bne NoLAFr ;branch if set + lda FrenzyEnemyTimer + cmp #$10 ;check timer to see if we've reached a certain range + bcs NoLAFr ;branch if not + ldx #$96 ;if d6 not set and timer in range, load alt frame for lakitu +NoLAFr: jmp CheckDefeatedState ;skip this next part if we found lakitu but alt frame not needed + +CheckUpsideDownShell: + lda $ef ;check for enemy object => $04 + cmp #$04 + bcs CheckRightSideUpShell ;branch if true + cpy #$02 + bcc CheckRightSideUpShell ;branch if enemy state < $02 + ldx #$5a ;set for upside-down koopa shell by default + ldy $ef + cpy #BuzzyBeetle ;check for buzzy beetle object + bne CheckRightSideUpShell + ldx #$7e ;set for upside-down buzzy beetle shell if found + inc $02 ;increment vertical position by one pixel + +CheckRightSideUpShell: + lda $ec ;check for value set here + cmp #$04 ;if enemy state < $02, do not change to shell, if + bne CheckForHammerBro ;enemy state => $02 but not = $04, leave shell upside-down + ldx #$72 ;set right-side up buzzy beetle shell by default + inc $02 ;increment saved vertical position by one pixel + ldy $ef + cpy #BuzzyBeetle ;check for buzzy beetle object + beq CheckForDefdGoomba ;branch if found + ldx #$66 ;change to right-side up koopa shell if not found + inc $02 ;and increment saved vertical position again + +CheckForDefdGoomba: + cpy #Goomba ;check for goomba object (necessary if previously + bne CheckForHammerBro ;failed buzzy beetle object test) + ldx #$54 ;load for regular goomba + lda $ed ;note that this only gets performed if enemy state => $02 + and #%00100000 ;check saved enemy state for d5 set + bne CheckForHammerBro ;branch if set + ldx #$8a ;load offset for defeated goomba + dec $02 ;set different value and decrement saved vertical position + +CheckForHammerBro: + ldy ObjectOffset + lda $ef ;check for hammer bro object + cmp #HammerBro + bne CheckForBloober ;branch if not found + lda $ed + beq CheckToAnimateEnemy ;branch if not in normal enemy state + and #%00001000 + beq CheckDefeatedState ;if d3 not set, branch further away + ldx #$b4 ;otherwise load offset for different frame + bne CheckToAnimateEnemy ;unconditional branch + +CheckForBloober: + cpx #$48 ;check for cheep-cheep offset loaded + beq CheckToAnimateEnemy ;branch if found + lda EnemyIntervalTimer,y + cmp #$05 + bcs CheckDefeatedState ;branch if some timer is above a certain point + cpx #$3c ;check for bloober offset loaded + bne CheckToAnimateEnemy ;branch if not found this time + cmp #$01 + beq CheckDefeatedState ;branch if timer is set to certain point + inc $02 ;increment saved vertical coordinate three pixels + inc $02 + inc $02 + jmp CheckAnimationStop ;and do something else + +CheckToAnimateEnemy: + lda $ef ;check for specific enemy objects + cmp #Goomba + beq CheckDefeatedState ;branch if goomba + cmp #$08 + beq CheckDefeatedState ;branch if bullet bill (note both variants use $08 here) + cmp #Podoboo + beq CheckDefeatedState ;branch if podoboo + cmp #$18 ;branch if => $18 + bcs CheckDefeatedState + ldy #$00 + cmp #$15 ;check for mushroom retainer/princess object + bne CheckForSecondFrame ;which uses different code here, branch if not found + iny ;residual instruction + lda WorldNumber ;are we on world 8? + cmp #World8 + bcs CheckDefeatedState ;if so, leave the offset alone (use princess) + ldx #$a2 ;otherwise, set for mushroom retainer object instead + lda #$03 ;set alternate state here + sta $ec + bne CheckDefeatedState ;unconditional branch + +CheckForSecondFrame: + lda FrameCounter ;load frame counter + and EnemyAnimTimingBMask,y ;mask it (partly residual, one byte not ever used) + bne CheckDefeatedState ;branch if timing is off + +CheckAnimationStop: + lda $ed ;check saved enemy state + and #%10100000 ;for d7 or d5, or check for timers stopped + ora TimerControl + bne CheckDefeatedState ;if either condition true, branch + txa + clc + adc #$06 ;add $06 to current enemy offset + tax ;to animate various enemy objects + +CheckDefeatedState: + lda $ed ;check saved enemy state + and #%00100000 ;for d5 set + beq DrawEnemyObject ;branch if not set + lda $ef + cmp #$04 ;check for saved enemy object => $04 + bcc DrawEnemyObject ;branch if less + ldy #$01 + sty VerticalFlipFlag ;set vertical flip flag + dey + sty $ec ;init saved value here + +DrawEnemyObject: + ldy $eb ;load sprite data offset + jsr DrawEnemyObjRow ;draw six tiles of data + jsr DrawEnemyObjRow ;into sprite data + jsr DrawEnemyObjRow + ldx ObjectOffset ;get enemy object offset + ldy Enemy_SprDataOffset,x ;get sprite data offset + lda $ef + cmp #$08 ;get saved enemy object and check + bne CheckForVerticalFlip ;for bullet bill, branch if not found + +SkipToOffScrChk: + jmp SprObjectOffscrChk ;jump if found + +CheckForVerticalFlip: + lda VerticalFlipFlag ;check if vertical flip flag is set here + beq CheckForESymmetry ;branch if not + lda Sprite_Attributes,y ;get attributes of first sprite we dealt with + ora #%10000000 ;set bit for vertical flip + iny + iny ;increment two bytes so that we store the vertical flip + jsr DumpSixSpr ;in attribute bytes of enemy obj sprite data + dey + dey ;now go back to the Y coordinate offset + tya + tax ;give offset to X + lda $ef + cmp #HammerBro ;check saved enemy object for hammer bro + beq FlipEnemyVertically + cmp #Lakitu ;check saved enemy object for lakitu + beq FlipEnemyVertically ;branch for hammer bro or lakitu + cmp #$15 + bcs FlipEnemyVertically ;also branch if enemy object => $15 + txa + clc + adc #$08 ;if not selected objects or => $15, set + tax ;offset in X for next row + +FlipEnemyVertically: + lda Sprite_Tilenumber,x ;load first or second row tiles + pha ;and save tiles to the stack + lda Sprite_Tilenumber+4,x + pha + lda Sprite_Tilenumber+16,y ;exchange third row tiles + sta Sprite_Tilenumber,x ;with first or second row tiles + lda Sprite_Tilenumber+20,y + sta Sprite_Tilenumber+4,x + pla ;pull first or second row tiles from stack + sta Sprite_Tilenumber+20,y ;and save in third row + pla + sta Sprite_Tilenumber+16,y + +CheckForESymmetry: + lda BowserGfxFlag ;are we drawing bowser at all? + bne SkipToOffScrChk ;branch if so + lda $ef + ldx $ec ;get alternate enemy state + cmp #$05 ;check for hammer bro object + bne ContES + jmp SprObjectOffscrChk ;jump if found +ContES: cmp #Bloober ;check for bloober object + beq MirrorEnemyGfx + cmp #PiranhaPlant ;check for piranha plant object + beq MirrorEnemyGfx + cmp #Podoboo ;check for podoboo object + beq MirrorEnemyGfx ;branch if either of three are found + cmp #Spiny ;check for spiny object + bne ESRtnr ;branch closer if not found + cpx #$05 ;check spiny's state + bne CheckToMirrorLakitu ;branch if not an egg, otherwise +ESRtnr: cmp #$15 ;check for princess/mushroom retainer object + bne SpnySC + lda #$42 ;set horizontal flip on bottom right sprite + sta Sprite_Attributes+20,y ;note that palette bits were already set earlier +SpnySC: cpx #$02 ;if alternate enemy state set to 1 or 0, branch + bcc CheckToMirrorLakitu + +MirrorEnemyGfx: + lda BowserGfxFlag ;if enemy object is bowser, skip all of this + bne CheckToMirrorLakitu + lda Sprite_Attributes,y ;load attribute bits of first sprite + and #%10100011 + sta Sprite_Attributes,y ;save vertical flip, priority, and palette bits + sta Sprite_Attributes+8,y ;in left sprite column of enemy object OAM data + sta Sprite_Attributes+16,y + ora #%01000000 ;set horizontal flip + cpx #$05 ;check for state used by spiny's egg + bne EggExc ;if alternate state not set to $05, branch + ora #%10000000 ;otherwise set vertical flip +EggExc: sta Sprite_Attributes+4,y ;set bits of right sprite column + sta Sprite_Attributes+12,y ;of enemy object sprite data + sta Sprite_Attributes+20,y + cpx #$04 ;check alternate enemy state + bne CheckToMirrorLakitu ;branch if not $04 + lda Sprite_Attributes+8,y ;get second row left sprite attributes + ora #%10000000 + sta Sprite_Attributes+8,y ;store bits with vertical flip in + sta Sprite_Attributes+16,y ;second and third row left sprites + ora #%01000000 + sta Sprite_Attributes+12,y ;store with horizontal and vertical flip in + sta Sprite_Attributes+20,y ;second and third row right sprites + +CheckToMirrorLakitu: + lda $ef ;check for lakitu enemy object + cmp #Lakitu + bne CheckToMirrorJSpring ;branch if not found + lda VerticalFlipFlag + bne NVFLak ;branch if vertical flip flag not set + lda Sprite_Attributes+16,y ;save vertical flip and palette bits + and #%10000001 ;in third row left sprite + sta Sprite_Attributes+16,y + lda Sprite_Attributes+20,y ;set horizontal flip and palette bits + ora #%01000001 ;in third row right sprite + sta Sprite_Attributes+20,y + ldx FrenzyEnemyTimer ;check timer + cpx #$10 + bcs SprObjectOffscrChk ;branch if timer has not reached a certain range + sta Sprite_Attributes+12,y ;otherwise set same for second row right sprite + and #%10000001 + sta Sprite_Attributes+8,y ;preserve vertical flip and palette bits for left sprite + bcc SprObjectOffscrChk ;unconditional branch +NVFLak: lda Sprite_Attributes,y ;get first row left sprite attributes + and #%10000001 + sta Sprite_Attributes,y ;save vertical flip and palette bits + lda Sprite_Attributes+4,y ;get first row right sprite attributes + ora #%01000001 ;set horizontal flip and palette bits + sta Sprite_Attributes+4,y ;note that vertical flip is left as-is + +CheckToMirrorJSpring: + lda $ef ;check for jumpspring object (any frame) + cmp #$18 + bcc SprObjectOffscrChk ;branch if not jumpspring object at all + lda #$82 + sta Sprite_Attributes+8,y ;set vertical flip and palette bits of + sta Sprite_Attributes+16,y ;second and third row left sprites + ora #%01000000 + sta Sprite_Attributes+12,y ;set, in addition to those, horizontal flip + sta Sprite_Attributes+20,y ;for second and third row right sprites + +SprObjectOffscrChk: + ldx ObjectOffset ;get enemy buffer offset + lda Enemy_OffscreenBits ;check offscreen information + lsr + lsr ;shift three times to the right + lsr ;which puts d2 into carry + pha ;save to stack + bcc LcChk ;branch if not set + lda #$04 ;set for right column sprites + jsr MoveESprColOffscreen ;and move them offscreen +LcChk: pla ;get from stack + lsr ;move d3 to carry + pha ;save to stack + bcc Row3C ;branch if not set + lda #$00 ;set for left column sprites, + jsr MoveESprColOffscreen ;move them offscreen +Row3C: pla ;get from stack again + lsr ;move d5 to carry this time + lsr + pha ;save to stack again + bcc Row23C ;branch if carry not set + lda #$10 ;set for third row of sprites + jsr MoveESprRowOffscreen ;and move them offscreen +Row23C: pla ;get from stack + lsr ;move d6 into carry + pha ;save to stack + bcc AllRowC + lda #$08 ;set for second and third rows + jsr MoveESprRowOffscreen ;move them offscreen +AllRowC: pla ;get from stack once more + lsr ;move d7 into carry + bcc ExEGHandler + jsr MoveESprRowOffscreen ;move all sprites offscreen (A should be 0 by now) + lda Enemy_ID,x + cmp #Podoboo ;check enemy identifier for podoboo + beq ExEGHandler ;skip this part if found, we do not want to erase podoboo! + lda Enemy_Y_HighPos,x ;check high byte of vertical position + cmp #$02 ;if not yet past the bottom of the screen, branch + bne ExEGHandler + jsr EraseEnemyObject ;what it says + +ExEGHandler: + rts + +DrawEnemyObjRow: + lda EnemyGraphicsTable,x ;load two tiles of enemy graphics + sta $00 + lda EnemyGraphicsTable+1,x + +DrawOneSpriteRow: + sta $01 + jmp DrawSpriteObject ;draw them + +MoveESprRowOffscreen: + clc ;add A to enemy object OAM data offset + adc Enemy_SprDataOffset,x + tay ;use as offset + lda #$f8 + jmp DumpTwoSpr ;move first row of sprites offscreen + +MoveESprColOffscreen: + clc ;add A to enemy object OAM data offset + adc Enemy_SprDataOffset,x + tay ;use as offset + jsr MoveColOffscreen ;move first and second row sprites in column offscreen + sta Sprite_Data+16,y ;move third row sprite in column offscreen + rts + +;------------------------------------------------------------------------------------- +;$00-$01 - tile numbers +;$02 - relative Y position +;$03 - horizontal flip flag (not used here) +;$04 - attributes +;$05 - relative X position + +DefaultBlockObjTiles: + .db $85, $85, $86, $86 ;brick w/ line (these are sprite tiles, not BG!) + +DrawBlock: + lda Block_Rel_YPos ;get relative vertical coordinate of block object + sta $02 ;store here + lda Block_Rel_XPos ;get relative horizontal coordinate of block object + sta $05 ;store here + lda #$03 + sta $04 ;set attribute byte here + lsr + sta $03 ;set horizontal flip bit here (will not be used) + ldy Block_SprDataOffset,x ;get sprite data offset + ldx #$00 ;reset X for use as offset to tile data +DBlkLoop: lda DefaultBlockObjTiles,x ;get left tile number + sta $00 ;set here + lda DefaultBlockObjTiles+1,x ;get right tile number + jsr DrawOneSpriteRow ;do sub to write tile numbers to first row of sprites + cpx #$04 ;check incremented offset + bne DBlkLoop ;and loop back until all four sprites are done + ldx ObjectOffset ;get block object offset + ldy Block_SprDataOffset,x ;get sprite data offset + lda AreaType + cmp #$01 ;check for ground level type area + beq ChkRep ;if found, branch to next part + lda #$86 + sta Sprite_Tilenumber,y ;otherwise remove brick tiles with lines + sta Sprite_Tilenumber+4,y ;and replace then with lineless brick tiles +ChkRep: lda Block_Metatile,x ;check replacement metatile + cmp #$c4 ;if not used block metatile, then + bne BlkOffscr ;branch ahead to use current graphics + lda #$87 ;set A for used block tile + iny ;increment Y to write to tile bytes + jsr DumpFourSpr ;do sub to dump into all four sprites + dey ;return Y to original offset + lda #$03 ;set palette bits + ldx AreaType + dex ;check for ground level type area again + beq SetBFlip ;if found, use current palette bits + lsr ;otherwise set to $01 +SetBFlip: ldx ObjectOffset ;put block object offset back in X + sta Sprite_Attributes,y ;store attribute byte as-is in first sprite + ora #%01000000 + sta Sprite_Attributes+4,y ;set horizontal flip bit for second sprite + ora #%10000000 + sta Sprite_Attributes+12,y ;set both flip bits for fourth sprite + and #%10000011 + sta Sprite_Attributes+8,y ;set vertical flip bit for third sprite +BlkOffscr: lda Block_OffscreenBits ;get offscreen bits for block object + pha ;save to stack + and #%00000100 ;check to see if d2 in offscreen bits are set + beq PullOfsB ;if not set, branch, otherwise move sprites offscreen + lda #$f8 ;move offscreen two OAMs + sta Sprite_Y_Position+4,y ;on the right side + sta Sprite_Y_Position+12,y +PullOfsB: pla ;pull offscreen bits from stack +ChkLeftCo: and #%00001000 ;check to see if d3 in offscreen bits are set + beq ExDBlk ;if not set, branch, otherwise move sprites offscreen + +MoveColOffscreen: + lda #$f8 ;move offscreen two OAMs + sta Sprite_Y_Position,y ;on the left side (or two rows of enemy on either side + sta Sprite_Y_Position+8,y ;if branched here from enemy graphics handler) +ExDBlk: rts + +;------------------------------------------------------------------------------------- +;$00 - used to hold palette bits for attribute byte or relative X position + +DrawBrickChunks: + lda #$02 ;set palette bits here + sta $00 + lda #$75 ;set tile number for ball (something residual, likely) + ldy GameEngineSubroutine + cpy #$05 ;if end-of-level routine running, + beq DChunks ;use palette and tile number assigned + lda #$03 ;otherwise set different palette bits + sta $00 + lda #$84 ;and set tile number for brick chunks +DChunks: ldy Block_SprDataOffset,x ;get OAM data offset + iny ;increment to start with tile bytes in OAM + jsr DumpFourSpr ;do sub to dump tile number into all four sprites + lda FrameCounter ;get frame counter + asl + asl + asl ;move low nybble to high + asl + and #$c0 ;get what was originally d3-d2 of low nybble + ora $00 ;add palette bits + iny ;increment offset for attribute bytes + jsr DumpFourSpr ;do sub to dump attribute data into all four sprites + dey + dey ;decrement offset to Y coordinate + lda Block_Rel_YPos ;get first block object's relative vertical coordinate + jsr DumpTwoSpr ;do sub to dump current Y coordinate into two sprites + lda Block_Rel_XPos ;get first block object's relative horizontal coordinate + sta Sprite_X_Position,y ;save into X coordinate of first sprite + lda Block_Orig_XPos,x ;get original horizontal coordinate + sec + sbc ScreenLeft_X_Pos ;subtract coordinate of left side from original coordinate + sta $00 ;store result as relative horizontal coordinate of original + sec + sbc Block_Rel_XPos ;get difference of relative positions of original - current + adc $00 ;add original relative position to result + adc #$06 ;plus 6 pixels to position second brick chunk correctly + sta Sprite_X_Position+4,y ;save into X coordinate of second sprite + lda Block_Rel_YPos+1 ;get second block object's relative vertical coordinate + sta Sprite_Y_Position+8,y + sta Sprite_Y_Position+12,y ;dump into Y coordinates of third and fourth sprites + lda Block_Rel_XPos+1 ;get second block object's relative horizontal coordinate + sta Sprite_X_Position+8,y ;save into X coordinate of third sprite + lda $00 ;use original relative horizontal position + sec + sbc Block_Rel_XPos+1 ;get difference of relative positions of original - current + adc $00 ;add original relative position to result + adc #$06 ;plus 6 pixels to position fourth brick chunk correctly + sta Sprite_X_Position+12,y ;save into X coordinate of fourth sprite + lda Block_OffscreenBits ;get offscreen bits for block object + jsr ChkLeftCo ;do sub to move left half of sprites offscreen if necessary + lda Block_OffscreenBits ;get offscreen bits again + asl ;shift d7 into carry + bcc ChnkOfs ;if d7 not set, branch to last part + lda #$f8 + jsr DumpTwoSpr ;otherwise move top sprites offscreen +ChnkOfs: lda $00 ;if relative position on left side of screen, + bpl ExBCDr ;go ahead and leave + lda Sprite_X_Position,y ;otherwise compare left-side X coordinate + cmp Sprite_X_Position+4,y ;to right-side X coordinate + bcc ExBCDr ;branch to leave if less + lda #$f8 ;otherwise move right half of sprites offscreen + sta Sprite_Y_Position+4,y + sta Sprite_Y_Position+12,y +ExBCDr: rts ;leave + +;------------------------------------------------------------------------------------- + +DrawFireball: + ldy FBall_SprDataOffset,x ;get fireball's sprite data offset + lda Fireball_Rel_YPos ;get relative vertical coordinate + sta Sprite_Y_Position,y ;store as sprite Y coordinate + lda Fireball_Rel_XPos ;get relative horizontal coordinate + sta Sprite_X_Position,y ;store as sprite X coordinate, then do shared code + +DrawFirebar: + lda FrameCounter ;get frame counter + lsr ;divide by four + lsr + pha ;save result to stack + and #$01 ;mask out all but last bit + eor #$64 ;set either tile $64 or $65 as fireball tile + sta Sprite_Tilenumber,y ;thus tile changes every four frames + pla ;get from stack + lsr ;divide by four again + lsr + lda #$02 ;load value $02 to set palette in attrib byte + bcc FireA ;if last bit shifted out was not set, skip this + ora #%11000000 ;otherwise flip both ways every eight frames +FireA: sta Sprite_Attributes,y ;store attribute byte and leave + rts + +;------------------------------------------------------------------------------------- + +ExplosionTiles: + .db $68, $67, $66 + +DrawExplosion_Fireball: + ldy Alt_SprDataOffset,x ;get OAM data offset of alternate sort for fireball's explosion + lda Fireball_State,x ;load fireball state + inc Fireball_State,x ;increment state for next frame + lsr ;divide by 2 + and #%00000111 ;mask out all but d3-d1 + cmp #$03 ;check to see if time to kill fireball + bcs KillFireBall ;branch if so, otherwise continue to draw explosion + +DrawExplosion_Fireworks: + tax ;use whatever's in A for offset + lda ExplosionTiles,x ;get tile number using offset + iny ;increment Y (contains sprite data offset) + jsr DumpFourSpr ;and dump into tile number part of sprite data + dey ;decrement Y so we have the proper offset again + ldx ObjectOffset ;return enemy object buffer offset to X + lda Fireball_Rel_YPos ;get relative vertical coordinate + sec ;subtract four pixels vertically + sbc #$04 ;for first and third sprites + sta Sprite_Y_Position,y + sta Sprite_Y_Position+8,y + clc ;add eight pixels vertically + adc #$08 ;for second and fourth sprites + sta Sprite_Y_Position+4,y + sta Sprite_Y_Position+12,y + lda Fireball_Rel_XPos ;get relative horizontal coordinate + sec ;subtract four pixels horizontally + sbc #$04 ;for first and second sprites + sta Sprite_X_Position,y + sta Sprite_X_Position+4,y + clc ;add eight pixels horizontally + adc #$08 ;for third and fourth sprites + sta Sprite_X_Position+8,y + sta Sprite_X_Position+12,y + lda #$02 ;set palette attributes for all sprites, but + sta Sprite_Attributes,y ;set no flip at all for first sprite + lda #$82 + sta Sprite_Attributes+4,y ;set vertical flip for second sprite + lda #$42 + sta Sprite_Attributes+8,y ;set horizontal flip for third sprite + lda #$c2 + sta Sprite_Attributes+12,y ;set both flips for fourth sprite + rts ;we are done + +KillFireBall: + lda #$00 ;clear fireball state to kill it + sta Fireball_State,x + rts + +;------------------------------------------------------------------------------------- + +DrawSmallPlatform: + ldy Enemy_SprDataOffset,x ;get OAM data offset + lda #$5b ;load tile number for small platforms + iny ;increment offset for tile numbers + jsr DumpSixSpr ;dump tile number into all six sprites + iny ;increment offset for attributes + lda #$02 ;load palette controls + jsr DumpSixSpr ;dump attributes into all six sprites + dey ;decrement for original offset + dey + lda Enemy_Rel_XPos ;get relative horizontal coordinate + sta Sprite_X_Position,y + sta Sprite_X_Position+12,y ;dump as X coordinate into first and fourth sprites + clc + adc #$08 ;add eight pixels + sta Sprite_X_Position+4,y ;dump into second and fifth sprites + sta Sprite_X_Position+16,y + clc + adc #$08 ;add eight more pixels + sta Sprite_X_Position+8,y ;dump into third and sixth sprites + sta Sprite_X_Position+20,y + lda Enemy_Y_Position,x ;get vertical coordinate + tax + pha ;save to stack + cpx #$20 ;if vertical coordinate below status bar, + bcs TopSP ;do not mess with it + lda #$f8 ;otherwise move first three sprites offscreen +TopSP: jsr DumpThreeSpr ;dump vertical coordinate into Y coordinates + pla ;pull from stack + clc + adc #$80 ;add 128 pixels + tax + cpx #$20 ;if below status bar (taking wrap into account) + bcs BotSP ;then do not change altered coordinate + lda #$f8 ;otherwise move last three sprites offscreen +BotSP: sta Sprite_Y_Position+12,y ;dump vertical coordinate + 128 pixels + sta Sprite_Y_Position+16,y ;into Y coordinates + sta Sprite_Y_Position+20,y + lda Enemy_OffscreenBits ;get offscreen bits + pha ;save to stack + and #%00001000 ;check d3 + beq SOfs + lda #$f8 ;if d3 was set, move first and + sta Sprite_Y_Position,y ;fourth sprites offscreen + sta Sprite_Y_Position+12,y +SOfs: pla ;move out and back into stack + pha + and #%00000100 ;check d2 + beq SOfs2 + lda #$f8 ;if d2 was set, move second and + sta Sprite_Y_Position+4,y ;fifth sprites offscreen + sta Sprite_Y_Position+16,y +SOfs2: pla ;get from stack + and #%00000010 ;check d1 + beq ExSPl + lda #$f8 ;if d1 was set, move third and + sta Sprite_Y_Position+8,y ;sixth sprites offscreen + sta Sprite_Y_Position+20,y +ExSPl: ldx ObjectOffset ;get enemy object offset and leave + rts + +;------------------------------------------------------------------------------------- + +DrawBubble: + ldy Player_Y_HighPos ;if player's vertical high position + dey ;not within screen, skip all of this + bne ExDBub + lda Bubble_OffscreenBits ;check air bubble's offscreen bits + and #%00001000 + bne ExDBub ;if bit set, branch to leave + ldy Bubble_SprDataOffset,x ;get air bubble's OAM data offset + lda Bubble_Rel_XPos ;get relative horizontal coordinate + sta Sprite_X_Position,y ;store as X coordinate here + lda Bubble_Rel_YPos ;get relative vertical coordinate + sta Sprite_Y_Position,y ;store as Y coordinate here + lda #$74 + sta Sprite_Tilenumber,y ;put air bubble tile into OAM data + lda #$02 + sta Sprite_Attributes,y ;set attribute byte +ExDBub: rts ;leave + +;------------------------------------------------------------------------------------- +;$00 - used to store player's vertical offscreen bits + +PlayerGfxTblOffsets: + .db $20, $28, $c8, $18, $00, $40, $50, $58 + .db $80, $88, $b8, $78, $60, $a0, $b0, $b8 + +;tiles arranged in order, 2 tiles per row, top to bottom + +PlayerGraphicsTable: +;big player table + .db $00, $01, $02, $03, $04, $05, $06, $07 ;walking frame 1 + .db $08, $09, $0a, $0b, $0c, $0d, $0e, $0f ; frame 2 + .db $10, $11, $12, $13, $14, $15, $16, $17 ; frame 3 + .db $18, $19, $1a, $1b, $1c, $1d, $1e, $1f ;skidding + .db $20, $21, $22, $23, $24, $25, $26, $27 ;jumping + .db $08, $09, $28, $29, $2a, $2b, $2c, $2d ;swimming frame 1 + .db $08, $09, $0a, $0b, $0c, $30, $2c, $2d ; frame 2 + .db $08, $09, $0a, $0b, $2e, $2f, $2c, $2d ; frame 3 + .db $08, $09, $28, $29, $2a, $2b, $5c, $5d ;climbing frame 1 + .db $08, $09, $0a, $0b, $0c, $0d, $5e, $5f ; frame 2 + .db $fc, $fc, $08, $09, $58, $59, $5a, $5a ;crouching + .db $08, $09, $28, $29, $2a, $2b, $0e, $0f ;fireball throwing + +;small player table + .db $fc, $fc, $fc, $fc, $32, $33, $34, $35 ;walking frame 1 + .db $fc, $fc, $fc, $fc, $36, $37, $38, $39 ; frame 2 + .db $fc, $fc, $fc, $fc, $3a, $37, $3b, $3c ; frame 3 + .db $fc, $fc, $fc, $fc, $3d, $3e, $3f, $40 ;skidding + .db $fc, $fc, $fc, $fc, $32, $41, $42, $43 ;jumping + .db $fc, $fc, $fc, $fc, $32, $33, $44, $45 ;swimming frame 1 + .db $fc, $fc, $fc, $fc, $32, $33, $44, $47 ; frame 2 + .db $fc, $fc, $fc, $fc, $32, $33, $48, $49 ; frame 3 + .db $fc, $fc, $fc, $fc, $32, $33, $90, $91 ;climbing frame 1 + .db $fc, $fc, $fc, $fc, $3a, $37, $92, $93 ; frame 2 + .db $fc, $fc, $fc, $fc, $9e, $9e, $9f, $9f ;killed + +;used by both player sizes + .db $fc, $fc, $fc, $fc, $3a, $37, $4f, $4f ;small player standing + .db $fc, $fc, $00, $01, $4c, $4d, $4e, $4e ;intermediate grow frame + .db $00, $01, $4c, $4d, $4a, $4a, $4b, $4b ;big player standing + +SwimKickTileNum: + .db $31, $46 + +PlayerGfxHandler: + lda InjuryTimer ;if player's injured invincibility timer + beq CntPl ;not set, skip checkpoint and continue code + lda FrameCounter + lsr ;otherwise check frame counter and branch + bcs ExPGH ;to leave on every other frame (when d0 is set) +CntPl: lda GameEngineSubroutine ;if executing specific game engine routine, + cmp #$0b ;branch ahead to some other part + beq PlayerKilled + lda PlayerChangeSizeFlag ;if grow/shrink flag set + bne DoChangeSize ;then branch to some other code + ldy SwimmingFlag ;if swimming flag set, branch to + beq FindPlayerAction ;different part, do not return + lda Player_State + cmp #$00 ;if player status normal, + beq FindPlayerAction ;branch and do not return + jsr FindPlayerAction ;otherwise jump and return + lda FrameCounter + and #%00000100 ;check frame counter for d2 set (8 frames every + bne ExPGH ;eighth frame), and branch if set to leave + tax ;initialize X to zero + ldy Player_SprDataOffset ;get player sprite data offset + lda PlayerFacingDir ;get player's facing direction + lsr + bcs SwimKT ;if player facing to the right, use current offset + iny + iny ;otherwise move to next OAM data + iny + iny +SwimKT: lda PlayerSize ;check player's size + beq BigKTS ;if big, use first tile + lda Sprite_Tilenumber+24,y ;check tile number of seventh/eighth sprite + cmp SwimTileRepOffset ;against tile number in player graphics table + beq ExPGH ;if spr7/spr8 tile number = value, branch to leave + inx ;otherwise increment X for second tile +BigKTS: lda SwimKickTileNum,x ;overwrite tile number in sprite 7/8 + sta Sprite_Tilenumber+24,y ;to animate player's feet when swimming +ExPGH: rts ;then leave + +FindPlayerAction: + jsr ProcessPlayerAction ;find proper offset to graphics table by player's actions + jmp PlayerGfxProcessing ;draw player, then process for fireball throwing + +DoChangeSize: + jsr HandleChangeSize ;find proper offset to graphics table for grow/shrink + jmp PlayerGfxProcessing ;draw player, then process for fireball throwing + +PlayerKilled: + ldy #$0e ;load offset for player killed + lda PlayerGfxTblOffsets,y ;get offset to graphics table + +PlayerGfxProcessing: + sta PlayerGfxOffset ;store offset to graphics table here + lda #$04 + jsr RenderPlayerSub ;draw player based on offset loaded + jsr ChkForPlayerAttrib ;set horizontal flip bits as necessary + lda FireballThrowingTimer + beq PlayerOffscreenChk ;if fireball throw timer not set, skip to the end + ldy #$00 ;set value to initialize by default + lda PlayerAnimTimer ;get animation frame timer + cmp FireballThrowingTimer ;compare to fireball throw timer + sty FireballThrowingTimer ;initialize fireball throw timer + bcs PlayerOffscreenChk ;if animation frame timer => fireball throw timer skip to end + sta FireballThrowingTimer ;otherwise store animation timer into fireball throw timer + ldy #$07 ;load offset for throwing + lda PlayerGfxTblOffsets,y ;get offset to graphics table + sta PlayerGfxOffset ;store it for use later + ldy #$04 ;set to update four sprite rows by default + lda Player_X_Speed + ora Left_Right_Buttons ;check for horizontal speed or left/right button press + beq SUpdR ;if no speed or button press, branch using set value in Y + dey ;otherwise set to update only three sprite rows +SUpdR: tya ;save in A for use + jsr RenderPlayerSub ;in sub, draw player object again + +PlayerOffscreenChk: + lda Player_OffscreenBits ;get player's offscreen bits + lsr + lsr ;move vertical bits to low nybble + lsr + lsr + sta $00 ;store here + ldx #$03 ;check all four rows of player sprites + lda Player_SprDataOffset ;get player's sprite data offset + clc + adc #$18 ;add 24 bytes to start at bottom row + tay ;set as offset here +PROfsLoop: lda #$f8 ;load offscreen Y coordinate just in case + lsr $00 ;shift bit into carry + bcc NPROffscr ;if bit not set, skip, do not move sprites + jsr DumpTwoSpr ;otherwise dump offscreen Y coordinate into sprite data +NPROffscr: tya + sec ;subtract eight bytes to do + sbc #$08 ;next row up + tay + dex ;decrement row counter + bpl PROfsLoop ;do this until all sprite rows are checked + rts ;then we are done! + +;------------------------------------------------------------------------------------- + +IntermediatePlayerData: + .db $58, $01, $00, $60, $ff, $04 + +DrawPlayer_Intermediate: + ldx #$05 ;store data into zero page memory +PIntLoop: lda IntermediatePlayerData,x ;load data to display player as he always + sta $02,x ;appears on world/lives display + dex + bpl PIntLoop ;do this until all data is loaded + ldx #$b8 ;load offset for small standing + ldy #$04 ;load sprite data offset + jsr DrawPlayerLoop ;draw player accordingly + lda Sprite_Attributes+36 ;get empty sprite attributes + ora #%01000000 ;set horizontal flip bit for bottom-right sprite + sta Sprite_Attributes+32 ;store and leave + rts + +;------------------------------------------------------------------------------------- +;$00-$01 - used to hold tile numbers, $00 also used to hold upper extent of animation frames +;$02 - vertical position +;$03 - facing direction, used as horizontal flip control +;$04 - attributes +;$05 - horizontal position +;$07 - number of rows to draw +;these also used in IntermediatePlayerData + +RenderPlayerSub: + sta $07 ;store number of rows of sprites to draw + lda Player_Rel_XPos + sta Player_Pos_ForScroll ;store player's relative horizontal position + sta $05 ;store it here also + lda Player_Rel_YPos + sta $02 ;store player's vertical position + lda PlayerFacingDir + sta $03 ;store player's facing direction + lda Player_SprAttrib + sta $04 ;store player's sprite attributes + ldx PlayerGfxOffset ;load graphics table offset + ldy Player_SprDataOffset ;get player's sprite data offset + +DrawPlayerLoop: + lda PlayerGraphicsTable,x ;load player's left side + sta $00 + lda PlayerGraphicsTable+1,x ;now load right side + jsr DrawOneSpriteRow + dec $07 ;decrement rows of sprites to draw + bne DrawPlayerLoop ;do this until all rows are drawn + rts + +ProcessPlayerAction: + lda Player_State ;get player's state + cmp #$03 + beq ActionClimbing ;if climbing, branch here + cmp #$02 + beq ActionFalling ;if falling, branch here + cmp #$01 + bne ProcOnGroundActs ;if not jumping, branch here + lda SwimmingFlag + bne ActionSwimming ;if swimming flag set, branch elsewhere + ldy #$06 ;load offset for crouching + lda CrouchingFlag ;get crouching flag + bne NonAnimatedActs ;if set, branch to get offset for graphics table + ldy #$00 ;otherwise load offset for jumping + jmp NonAnimatedActs ;go to get offset to graphics table + +ProcOnGroundActs: + ldy #$06 ;load offset for crouching + lda CrouchingFlag ;get crouching flag + bne NonAnimatedActs ;if set, branch to get offset for graphics table + ldy #$02 ;load offset for standing + lda Player_X_Speed ;check player's horizontal speed + ora Left_Right_Buttons ;and left/right controller bits + beq NonAnimatedActs ;if no speed or buttons pressed, use standing offset + lda Player_XSpeedAbsolute ;load walking/running speed + cmp #$09 + bcc ActionWalkRun ;if less than a certain amount, branch, too slow to skid + lda Player_MovingDir ;otherwise check to see if moving direction + and PlayerFacingDir ;and facing direction are the same + bne ActionWalkRun ;if moving direction = facing direction, branch, don't skid + iny ;otherwise increment to skid offset ($03) + +NonAnimatedActs: + jsr GetGfxOffsetAdder ;do a sub here to get offset adder for graphics table + lda #$00 + sta PlayerAnimCtrl ;initialize animation frame control + lda PlayerGfxTblOffsets,y ;load offset to graphics table using size as offset + rts + +ActionFalling: + ldy #$04 ;load offset for walking/running + jsr GetGfxOffsetAdder ;get offset to graphics table + jmp GetCurrentAnimOffset ;execute instructions for falling state + +ActionWalkRun: + ldy #$04 ;load offset for walking/running + jsr GetGfxOffsetAdder ;get offset to graphics table + jmp FourFrameExtent ;execute instructions for normal state + +ActionClimbing: + ldy #$05 ;load offset for climbing + lda Player_Y_Speed ;check player's vertical speed + beq NonAnimatedActs ;if no speed, branch, use offset as-is + jsr GetGfxOffsetAdder ;otherwise get offset for graphics table + jmp ThreeFrameExtent ;then skip ahead to more code + +ActionSwimming: + ldy #$01 ;load offset for swimming + jsr GetGfxOffsetAdder + lda JumpSwimTimer ;check jump/swim timer + ora PlayerAnimCtrl ;and animation frame control + bne FourFrameExtent ;if any one of these set, branch ahead + lda A_B_Buttons + asl ;check for A button pressed + bcs FourFrameExtent ;branch to same place if A button pressed + +GetCurrentAnimOffset: + lda PlayerAnimCtrl ;get animation frame control + jmp GetOffsetFromAnimCtrl ;jump to get proper offset to graphics table + +FourFrameExtent: + lda #$03 ;load upper extent for frame control + jmp AnimationControl ;jump to get offset and animate player object + +ThreeFrameExtent: + lda #$02 ;load upper extent for frame control for climbing + +AnimationControl: + sta $00 ;store upper extent here + jsr GetCurrentAnimOffset ;get proper offset to graphics table + pha ;save offset to stack + lda PlayerAnimTimer ;load animation frame timer + bne ExAnimC ;branch if not expired + lda PlayerAnimTimerSet ;get animation frame timer amount + sta PlayerAnimTimer ;and set timer accordingly + lda PlayerAnimCtrl + clc ;add one to animation frame control + adc #$01 + cmp $00 ;compare to upper extent + bcc SetAnimC ;if frame control + 1 < upper extent, use as next + lda #$00 ;otherwise initialize frame control +SetAnimC: sta PlayerAnimCtrl ;store as new animation frame control +ExAnimC: pla ;get offset to graphics table from stack and leave + rts + +GetGfxOffsetAdder: + lda PlayerSize ;get player's size + beq SzOfs ;if player big, use current offset as-is + tya ;for big player + clc ;otherwise add eight bytes to offset + adc #$08 ;for small player + tay +SzOfs: rts ;go back + +ChangeSizeOffsetAdder: + .db $00, $01, $00, $01, $00, $01, $02, $00, $01, $02 + .db $02, $00, $02, $00, $02, $00, $02, $00, $02, $00 + +HandleChangeSize: + ldy PlayerAnimCtrl ;get animation frame control + lda FrameCounter + and #%00000011 ;get frame counter and execute this code every + bne GorSLog ;fourth frame, otherwise branch ahead + iny ;increment frame control + cpy #$0a ;check for preset upper extent + bcc CSzNext ;if not there yet, skip ahead to use + ldy #$00 ;otherwise initialize both grow/shrink flag + sty PlayerChangeSizeFlag ;and animation frame control +CSzNext: sty PlayerAnimCtrl ;store proper frame control +GorSLog: lda PlayerSize ;get player's size + bne ShrinkPlayer ;if player small, skip ahead to next part + lda ChangeSizeOffsetAdder,y ;get offset adder based on frame control as offset + ldy #$0f ;load offset for player growing + +GetOffsetFromAnimCtrl: + asl ;multiply animation frame control + asl ;by eight to get proper amount + asl ;to add to our offset + adc PlayerGfxTblOffsets,y ;add to offset to graphics table + rts ;and return with result in A + +ShrinkPlayer: + tya ;add ten bytes to frame control as offset + clc + adc #$0a ;this thing apparently uses two of the swimming frames + tax ;to draw the player shrinking + ldy #$09 ;load offset for small player swimming + lda ChangeSizeOffsetAdder,x ;get what would normally be offset adder + bne ShrPlF ;and branch to use offset if nonzero + ldy #$01 ;otherwise load offset for big player swimming +ShrPlF: lda PlayerGfxTblOffsets,y ;get offset to graphics table based on offset loaded + rts ;and leave + +ChkForPlayerAttrib: + ldy Player_SprDataOffset ;get sprite data offset + lda GameEngineSubroutine + cmp #$0b ;if executing specific game engine routine, + beq KilledAtt ;branch to change third and fourth row OAM attributes + lda PlayerGfxOffset ;get graphics table offset + cmp #$50 + beq C_S_IGAtt ;if crouch offset, either standing offset, + cmp #$b8 ;or intermediate growing offset, + beq C_S_IGAtt ;go ahead and execute code to change + cmp #$c0 ;fourth row OAM attributes only + beq C_S_IGAtt + cmp #$c8 + bne ExPlyrAt ;if none of these, branch to leave +KilledAtt: lda Sprite_Attributes+16,y + and #%00111111 ;mask out horizontal and vertical flip bits + sta Sprite_Attributes+16,y ;for third row sprites and save + lda Sprite_Attributes+20,y + and #%00111111 + ora #%01000000 ;set horizontal flip bit for second + sta Sprite_Attributes+20,y ;sprite in the third row +C_S_IGAtt: lda Sprite_Attributes+24,y + and #%00111111 ;mask out horizontal and vertical flip bits + sta Sprite_Attributes+24,y ;for fourth row sprites and save + lda Sprite_Attributes+28,y + and #%00111111 + ora #%01000000 ;set horizontal flip bit for second + sta Sprite_Attributes+28,y ;sprite in the fourth row +ExPlyrAt: rts ;leave + +;------------------------------------------------------------------------------------- +;$00 - used in adding to get proper offset + +RelativePlayerPosition: + ldx #$00 ;set offsets for relative cooordinates + ldy #$00 ;routine to correspond to player object + jmp RelWOfs ;get the coordinates + +RelativeBubblePosition: + ldy #$01 ;set for air bubble offsets + jsr GetProperObjOffset ;modify X to get proper air bubble offset + ldy #$03 + jmp RelWOfs ;get the coordinates + +RelativeFireballPosition: + ldy #$00 ;set for fireball offsets + jsr GetProperObjOffset ;modify X to get proper fireball offset + ldy #$02 +RelWOfs: jsr GetObjRelativePosition ;get the coordinates + ldx ObjectOffset ;return original offset + rts ;leave + +RelativeMiscPosition: + ldy #$02 ;set for misc object offsets + jsr GetProperObjOffset ;modify X to get proper misc object offset + ldy #$06 + jmp RelWOfs ;get the coordinates + +RelativeEnemyPosition: + lda #$01 ;get coordinates of enemy object + ldy #$01 ;relative to the screen + jmp VariableObjOfsRelPos + +RelativeBlockPosition: + lda #$09 ;get coordinates of one block object + ldy #$04 ;relative to the screen + jsr VariableObjOfsRelPos + inx ;adjust offset for other block object if any + inx + lda #$09 + iny ;adjust other and get coordinates for other one + +VariableObjOfsRelPos: + stx $00 ;store value to add to A here + clc + adc $00 ;add A to value stored + tax ;use as enemy offset + jsr GetObjRelativePosition + ldx ObjectOffset ;reload old object offset and leave + rts + +GetObjRelativePosition: + lda SprObject_Y_Position,x ;load vertical coordinate low + sta SprObject_Rel_YPos,y ;store here + lda SprObject_X_Position,x ;load horizontal coordinate + sec ;subtract left edge coordinate + sbc ScreenLeft_X_Pos + sta SprObject_Rel_XPos,y ;store result here + rts + +;------------------------------------------------------------------------------------- +;$00 - used as temp variable to hold offscreen bits + +GetPlayerOffscreenBits: + ldx #$00 ;set offsets for player-specific variables + ldy #$00 ;and get offscreen information about player + jmp GetOffScreenBitsSet + +GetFireballOffscreenBits: + ldy #$00 ;set for fireball offsets + jsr GetProperObjOffset ;modify X to get proper fireball offset + ldy #$02 ;set other offset for fireball's offscreen bits + jmp GetOffScreenBitsSet ;and get offscreen information about fireball + +GetBubbleOffscreenBits: + ldy #$01 ;set for air bubble offsets + jsr GetProperObjOffset ;modify X to get proper air bubble offset + ldy #$03 ;set other offset for airbubble's offscreen bits + jmp GetOffScreenBitsSet ;and get offscreen information about air bubble + +GetMiscOffscreenBits: + ldy #$02 ;set for misc object offsets + jsr GetProperObjOffset ;modify X to get proper misc object offset + ldy #$06 ;set other offset for misc object's offscreen bits + jmp GetOffScreenBitsSet ;and get offscreen information about misc object + +ObjOffsetData: + .db $07, $16, $0d + +GetProperObjOffset: + txa ;move offset to A + clc + adc ObjOffsetData,y ;add amount of bytes to offset depending on setting in Y + tax ;put back in X and leave + rts + +GetEnemyOffscreenBits: + lda #$01 ;set A to add 1 byte in order to get enemy offset + ldy #$01 ;set Y to put offscreen bits in Enemy_OffscreenBits + jmp SetOffscrBitsOffset + +GetBlockOffscreenBits: + lda #$09 ;set A to add 9 bytes in order to get block obj offset + ldy #$04 ;set Y to put offscreen bits in Block_OffscreenBits + +SetOffscrBitsOffset: + stx $00 + clc ;add contents of X to A to get + adc $00 ;appropriate offset, then give back to X + tax + +GetOffScreenBitsSet: + tya ;save offscreen bits offset to stack for now + pha + jsr RunOffscrBitsSubs + asl ;move low nybble to high nybble + asl + asl + asl + ora $00 ;mask together with previously saved low nybble + sta $00 ;store both here + pla ;get offscreen bits offset from stack + tay + lda $00 ;get value here and store elsewhere + sta SprObject_OffscrBits,y + ldx ObjectOffset + rts + +RunOffscrBitsSubs: + jsr GetXOffscreenBits ;do subroutine here + lsr ;move high nybble to low + lsr + lsr + lsr + sta $00 ;store here + jmp GetYOffscreenBits + +;-------------------------------- +;(these apply to these three subsections) +;$04 - used to store proper offset +;$05 - used as adder in DividePDiff +;$06 - used to store preset value used to compare to pixel difference in $07 +;$07 - used to store difference between coordinates of object and screen edges + +XOffscreenBitsData: + .db $7f, $3f, $1f, $0f, $07, $03, $01, $00 + .db $80, $c0, $e0, $f0, $f8, $fc, $fe, $ff + +DefaultXOnscreenOfs: + .db $07, $0f, $07 + +GetXOffscreenBits: + stx $04 ;save position in buffer to here + ldy #$01 ;start with right side of screen +XOfsLoop: lda ScreenEdge_X_Pos,y ;get pixel coordinate of edge + sec ;get difference between pixel coordinate of edge + sbc SprObject_X_Position,x ;and pixel coordinate of object position + sta $07 ;store here + lda ScreenEdge_PageLoc,y ;get page location of edge + sbc SprObject_PageLoc,x ;subtract from page location of object position + ldx DefaultXOnscreenOfs,y ;load offset value here + cmp #$00 + bmi XLdBData ;if beyond right edge or in front of left edge, branch + ldx DefaultXOnscreenOfs+1,y ;if not, load alternate offset value here + cmp #$01 + bpl XLdBData ;if one page or more to the left of either edge, branch + lda #$38 ;if no branching, load value here and store + sta $06 + lda #$08 ;load some other value and execute subroutine + jsr DividePDiff +XLdBData: lda XOffscreenBitsData,x ;get bits here + ldx $04 ;reobtain position in buffer + cmp #$00 ;if bits not zero, branch to leave + bne ExXOfsBS + dey ;otherwise, do left side of screen now + bpl XOfsLoop ;branch if not already done with left side +ExXOfsBS: rts + +;-------------------------------- + +YOffscreenBitsData: + .db $00, $08, $0c, $0e + .db $0f, $07, $03, $01 + .db $00 + +DefaultYOnscreenOfs: + .db $04, $00, $04 + +HighPosUnitData: + .db $ff, $00 + +GetYOffscreenBits: + stx $04 ;save position in buffer to here + ldy #$01 ;start with top of screen +YOfsLoop: lda HighPosUnitData,y ;load coordinate for edge of vertical unit + sec + sbc SprObject_Y_Position,x ;subtract from vertical coordinate of object + sta $07 ;store here + lda #$01 ;subtract one from vertical high byte of object + sbc SprObject_Y_HighPos,x + ldx DefaultYOnscreenOfs,y ;load offset value here + cmp #$00 + bmi YLdBData ;if under top of the screen or beyond bottom, branch + ldx DefaultYOnscreenOfs+1,y ;if not, load alternate offset value here + cmp #$01 + bpl YLdBData ;if one vertical unit or more above the screen, branch + lda #$20 ;if no branching, load value here and store + sta $06 + lda #$04 ;load some other value and execute subroutine + jsr DividePDiff +YLdBData: lda YOffscreenBitsData,x ;get offscreen data bits using offset + ldx $04 ;reobtain position in buffer + cmp #$00 + bne ExYOfsBS ;if bits not zero, branch to leave + dey ;otherwise, do bottom of the screen now + bpl YOfsLoop +ExYOfsBS: rts + +;-------------------------------- + +DividePDiff: + sta $05 ;store current value in A here + lda $07 ;get pixel difference + cmp $06 ;compare to preset value + bcs ExDivPD ;if pixel difference >= preset value, branch + lsr ;divide by eight + lsr + lsr + and #$07 ;mask out all but 3 LSB + cpy #$01 ;right side of the screen or top? + bcs SetOscrO ;if so, branch, use difference / 8 as offset + adc $05 ;if not, add value to difference / 8 +SetOscrO: tax ;use as offset +ExDivPD: rts ;leave + +;------------------------------------------------------------------------------------- +;$00-$01 - tile numbers +;$02 - Y coordinate +;$03 - flip control +;$04 - sprite attributes +;$05 - X coordinate + +DrawSpriteObject: + lda $03 ;get saved flip control bits + lsr + lsr ;move d1 into carry + lda $00 + bcc NoHFlip ;if d1 not set, branch + sta Sprite_Tilenumber+4,y ;store first tile into second sprite + lda $01 ;and second into first sprite + sta Sprite_Tilenumber,y + lda #$40 ;activate horizontal flip OAM attribute + bne SetHFAt ;and unconditionally branch +NoHFlip: sta Sprite_Tilenumber,y ;store first tile into first sprite + lda $01 ;and second into second sprite + sta Sprite_Tilenumber+4,y + lda #$00 ;clear bit for horizontal flip +SetHFAt: ora $04 ;add other OAM attributes if necessary + sta Sprite_Attributes,y ;store sprite attributes + sta Sprite_Attributes+4,y + lda $02 ;now the y coordinates + sta Sprite_Y_Position,y ;note because they are + sta Sprite_Y_Position+4,y ;side by side, they are the same + lda $05 + sta Sprite_X_Position,y ;store x coordinate, then + clc ;add 8 pixels and store another to + adc #$08 ;put them side by side + sta Sprite_X_Position+4,y + lda $02 ;add eight pixels to the next y + clc ;coordinate + adc #$08 + sta $02 + tya ;add eight to the offset in Y to + clc ;move to the next two sprites + adc #$08 + tay + inx ;increment offset to return it to the + inx ;routine that called this subroutine + rts + +;------------------------------------------------------------------------------------- + +;unused space + .db $ff, $ff, $ff, $ff, $ff, $ff + +;------------------------------------------------------------------------------------- + +SoundEngine: + lda OperMode ;are we in title screen mode? + bne SndOn + sta SND_MASTERCTRL_REG ;if so, disable sound and leave + rts +SndOn: lda #$ff + sta JOYPAD_PORT2 ;disable irqs and set frame counter mode??? + lda #$0f + sta SND_MASTERCTRL_REG ;enable first four channels + lda PauseModeFlag ;is sound already in pause mode? + bne InPause + lda PauseSoundQueue ;if not, check pause sfx queue + cmp #$01 + bne RunSoundSubroutines ;if queue is empty, skip pause mode routine +InPause: lda PauseSoundBuffer ;check pause sfx buffer + bne ContPau + lda PauseSoundQueue ;check pause queue + beq SkipSoundSubroutines + sta PauseSoundBuffer ;if queue full, store in buffer and activate + sta PauseModeFlag ;pause mode to interrupt game sounds + lda #$00 ;disable sound and clear sfx buffers + sta SND_MASTERCTRL_REG + sta Square1SoundBuffer + sta Square2SoundBuffer + sta NoiseSoundBuffer + lda #$0f + sta SND_MASTERCTRL_REG ;enable sound again + lda #$2a ;store length of sound in pause counter + sta Squ1_SfxLenCounter +PTone1F: lda #$44 ;play first tone + bne PTRegC ;unconditional branch +ContPau: lda Squ1_SfxLenCounter ;check pause length left + cmp #$24 ;time to play second? + beq PTone2F + cmp #$1e ;time to play first again? + beq PTone1F + cmp #$18 ;time to play second again? + bne DecPauC ;only load regs during times, otherwise skip +PTone2F: lda #$64 ;store reg contents and play the pause sfx +PTRegC: ldx #$84 + ldy #$7f + jsr PlaySqu1Sfx +DecPauC: dec Squ1_SfxLenCounter ;decrement pause sfx counter + bne SkipSoundSubroutines + lda #$00 ;disable sound if in pause mode and + sta SND_MASTERCTRL_REG ;not currently playing the pause sfx + lda PauseSoundBuffer ;if no longer playing pause sfx, check to see + cmp #$02 ;if we need to be playing sound again + bne SkipPIn + lda #$00 ;clear pause mode to allow game sounds again + sta PauseModeFlag +SkipPIn: lda #$00 ;clear pause sfx buffer + sta PauseSoundBuffer + beq SkipSoundSubroutines + +RunSoundSubroutines: + jsr Square1SfxHandler ;play sfx on square channel 1 + jsr Square2SfxHandler ; '' '' '' square channel 2 + jsr NoiseSfxHandler ; '' '' '' noise channel + jsr MusicHandler ;play music on all channels + lda #$00 ;clear the music queues + sta AreaMusicQueue + sta EventMusicQueue + +SkipSoundSubroutines: + lda #$00 ;clear the sound effects queues + sta Square1SoundQueue + sta Square2SoundQueue + sta NoiseSoundQueue + sta PauseSoundQueue + ldy DAC_Counter ;load some sort of counter + lda AreaMusicBuffer + and #%00000011 ;check for specific music + beq NoIncDAC + inc DAC_Counter ;increment and check counter + cpy #$30 + bcc StrWave ;if not there yet, just store it +NoIncDAC: tya + beq StrWave ;if we are at zero, do not decrement + dec DAC_Counter ;decrement counter +StrWave: sty SND_DELTA_REG+1 ;store into DMC load register (??) + rts ;we are done here + +;-------------------------------- + +Dump_Squ1_Regs: + sty SND_SQUARE1_REG+1 ;dump the contents of X and Y into square 1's control regs + stx SND_SQUARE1_REG + rts + +PlaySqu1Sfx: + jsr Dump_Squ1_Regs ;do sub to set ctrl regs for square 1, then set frequency regs + +SetFreq_Squ1: + ldx #$00 ;set frequency reg offset for square 1 sound channel + +Dump_Freq_Regs: + tay + lda FreqRegLookupTbl+1,y ;use previous contents of A for sound reg offset + beq NoTone ;if zero, then do not load + sta SND_REGISTER+2,x ;first byte goes into LSB of frequency divider + lda FreqRegLookupTbl,y ;second byte goes into 3 MSB plus extra bit for + ora #%00001000 ;length counter + sta SND_REGISTER+3,x +NoTone: rts + +Dump_Sq2_Regs: + stx SND_SQUARE2_REG ;dump the contents of X and Y into square 2's control regs + sty SND_SQUARE2_REG+1 + rts + +PlaySqu2Sfx: + jsr Dump_Sq2_Regs ;do sub to set ctrl regs for square 2, then set frequency regs + +SetFreq_Squ2: + ldx #$04 ;set frequency reg offset for square 2 sound channel + bne Dump_Freq_Regs ;unconditional branch + +SetFreq_Tri: + ldx #$08 ;set frequency reg offset for triangle sound channel + bne Dump_Freq_Regs ;unconditional branch + +;-------------------------------- + +SwimStompEnvelopeData: + .db $9f, $9b, $98, $96, $95, $94, $92, $90 + .db $90, $9a, $97, $95, $93, $92 + +PlayFlagpoleSlide: + lda #$40 ;store length of flagpole sound + sta Squ1_SfxLenCounter + lda #$62 ;load part of reg contents for flagpole sound + jsr SetFreq_Squ1 + ldx #$99 ;now load the rest + bne FPS2nd + +PlaySmallJump: + lda #$26 ;branch here for small mario jumping sound + bne JumpRegContents + +PlayBigJump: + lda #$18 ;branch here for big mario jumping sound + +JumpRegContents: + ldx #$82 ;note that small and big jump borrow each others' reg contents + ldy #$a7 ;anyway, this loads the first part of mario's jumping sound + jsr PlaySqu1Sfx + lda #$28 ;store length of sfx for both jumping sounds + sta Squ1_SfxLenCounter ;then continue on here + +ContinueSndJump: + lda Squ1_SfxLenCounter ;jumping sounds seem to be composed of three parts + cmp #$25 ;check for time to play second part yet + bne N2Prt + ldx #$5f ;load second part + ldy #$f6 + bne DmpJpFPS ;unconditional branch +N2Prt: cmp #$20 ;check for third part + bne DecJpFPS + ldx #$48 ;load third part +FPS2nd: ldy #$bc ;the flagpole slide sound shares part of third part +DmpJpFPS: jsr Dump_Squ1_Regs + bne DecJpFPS ;unconditional branch outta here + +PlayFireballThrow: + lda #$05 + ldy #$99 ;load reg contents for fireball throw sound + bne Fthrow ;unconditional branch + +PlayBump: + lda #$0a ;load length of sfx and reg contents for bump sound + ldy #$93 +Fthrow: ldx #$9e ;the fireball sound shares reg contents with the bump sound + sta Squ1_SfxLenCounter + lda #$0c ;load offset for bump sound + jsr PlaySqu1Sfx + +ContinueBumpThrow: + lda Squ1_SfxLenCounter ;check for second part of bump sound + cmp #$06 + bne DecJpFPS + lda #$bb ;load second part directly + sta SND_SQUARE1_REG+1 +DecJpFPS: bne BranchToDecLength1 ;unconditional branch + + +Square1SfxHandler: + ldy Square1SoundQueue ;check for sfx in queue + beq CheckSfx1Buffer + sty Square1SoundBuffer ;if found, put in buffer + bmi PlaySmallJump ;small jump + lsr Square1SoundQueue + bcs PlayBigJump ;big jump + lsr Square1SoundQueue + bcs PlayBump ;bump + lsr Square1SoundQueue + bcs PlaySwimStomp ;swim/stomp + lsr Square1SoundQueue + bcs PlaySmackEnemy ;smack enemy + lsr Square1SoundQueue + bcs PlayPipeDownInj ;pipedown/injury + lsr Square1SoundQueue + bcs PlayFireballThrow ;fireball throw + lsr Square1SoundQueue + bcs PlayFlagpoleSlide ;slide flagpole + +CheckSfx1Buffer: + lda Square1SoundBuffer ;check for sfx in buffer + beq ExS1H ;if not found, exit sub + bmi ContinueSndJump ;small mario jump + lsr + bcs ContinueSndJump ;big mario jump + lsr + bcs ContinueBumpThrow ;bump + lsr + bcs ContinueSwimStomp ;swim/stomp + lsr + bcs ContinueSmackEnemy ;smack enemy + lsr + bcs ContinuePipeDownInj ;pipedown/injury + lsr + bcs ContinueBumpThrow ;fireball throw + lsr + bcs DecrementSfx1Length ;slide flagpole +ExS1H: rts + +PlaySwimStomp: + lda #$0e ;store length of swim/stomp sound + sta Squ1_SfxLenCounter + ldy #$9c ;store reg contents for swim/stomp sound + ldx #$9e + lda #$26 + jsr PlaySqu1Sfx + +ContinueSwimStomp: + ldy Squ1_SfxLenCounter ;look up reg contents in data section based on + lda SwimStompEnvelopeData-1,y ;length of sound left, used to control sound's + sta SND_SQUARE1_REG ;envelope + cpy #$06 + bne BranchToDecLength1 + lda #$9e ;when the length counts down to a certain point, put this + sta SND_SQUARE1_REG+2 ;directly into the LSB of square 1's frequency divider + +BranchToDecLength1: + bne DecrementSfx1Length ;unconditional branch (regardless of how we got here) + +PlaySmackEnemy: + lda #$0e ;store length of smack enemy sound + ldy #$cb + ldx #$9f + sta Squ1_SfxLenCounter + lda #$28 ;store reg contents for smack enemy sound + jsr PlaySqu1Sfx + bne DecrementSfx1Length ;unconditional branch + +ContinueSmackEnemy: + ldy Squ1_SfxLenCounter ;check about halfway through + cpy #$08 + bne SmSpc + lda #$a0 ;if we're at the about-halfway point, make the second tone + sta SND_SQUARE1_REG+2 ;in the smack enemy sound + lda #$9f + bne SmTick +SmSpc: lda #$90 ;this creates spaces in the sound, giving it its distinct noise +SmTick: sta SND_SQUARE1_REG + +DecrementSfx1Length: + dec Squ1_SfxLenCounter ;decrement length of sfx + bne ExSfx1 + +StopSquare1Sfx: + ldx #$00 ;if end of sfx reached, clear buffer + stx $f1 ;and stop making the sfx + ldx #$0e + stx SND_MASTERCTRL_REG + ldx #$0f + stx SND_MASTERCTRL_REG +ExSfx1: rts + +PlayPipeDownInj: + lda #$2f ;load length of pipedown sound + sta Squ1_SfxLenCounter + +ContinuePipeDownInj: + lda Squ1_SfxLenCounter ;some bitwise logic, forces the regs + lsr ;to be written to only during six specific times + bcs NoPDwnL ;during which d3 must be set and d1-0 must be clear + lsr + bcs NoPDwnL + and #%00000010 + beq NoPDwnL + ldy #$91 ;and this is where it actually gets written in + ldx #$9a + lda #$44 + jsr PlaySqu1Sfx +NoPDwnL: jmp DecrementSfx1Length + +;-------------------------------- + +ExtraLifeFreqData: + .db $58, $02, $54, $56, $4e, $44 + +PowerUpGrabFreqData: + .db $4c, $52, $4c, $48, $3e, $36, $3e, $36, $30 + .db $28, $4a, $50, $4a, $64, $3c, $32, $3c, $32 + .db $2c, $24, $3a, $64, $3a, $34, $2c, $22, $2c + +;residual frequency data + .db $22, $1c, $14 + +PUp_VGrow_FreqData: + .db $14, $04, $22, $24, $16, $04, $24, $26 ;used by both + .db $18, $04, $26, $28, $1a, $04, $28, $2a + .db $1c, $04, $2a, $2c, $1e, $04, $2c, $2e ;used by vinegrow + .db $20, $04, $2e, $30, $22, $04, $30, $32 + +PlayCoinGrab: + lda #$35 ;load length of coin grab sound + ldx #$8d ;and part of reg contents + bne CGrab_TTickRegL + +PlayTimerTick: + lda #$06 ;load length of timer tick sound + ldx #$98 ;and part of reg contents + +CGrab_TTickRegL: + sta Squ2_SfxLenCounter + ldy #$7f ;load the rest of reg contents + lda #$42 ;of coin grab and timer tick sound + jsr PlaySqu2Sfx + +ContinueCGrabTTick: + lda Squ2_SfxLenCounter ;check for time to play second tone yet + cmp #$30 ;timer tick sound also executes this, not sure why + bne N2Tone + lda #$54 ;if so, load the tone directly into the reg + sta SND_SQUARE2_REG+2 +N2Tone: bne DecrementSfx2Length + +PlayBlast: + lda #$20 ;load length of fireworks/gunfire sound + sta Squ2_SfxLenCounter + ldy #$94 ;load reg contents of fireworks/gunfire sound + lda #$5e + bne SBlasJ + +ContinueBlast: + lda Squ2_SfxLenCounter ;check for time to play second part + cmp #$18 + bne DecrementSfx2Length + ldy #$93 ;load second part reg contents then + lda #$18 +SBlasJ: bne BlstSJp ;unconditional branch to load rest of reg contents + +PlayPowerUpGrab: + lda #$36 ;load length of power-up grab sound + sta Squ2_SfxLenCounter + +ContinuePowerUpGrab: + lda Squ2_SfxLenCounter ;load frequency reg based on length left over + lsr ;divide by 2 + bcs DecrementSfx2Length ;alter frequency every other frame + tay + lda PowerUpGrabFreqData-1,y ;use length left over / 2 for frequency offset + ldx #$5d ;store reg contents of power-up grab sound + ldy #$7f + +LoadSqu2Regs: + jsr PlaySqu2Sfx + +DecrementSfx2Length: + dec Squ2_SfxLenCounter ;decrement length of sfx + bne ExSfx2 + +EmptySfx2Buffer: + ldx #$00 ;initialize square 2's sound effects buffer + stx Square2SoundBuffer + +StopSquare2Sfx: + ldx #$0d ;stop playing the sfx + stx SND_MASTERCTRL_REG + ldx #$0f + stx SND_MASTERCTRL_REG +ExSfx2: rts + +Square2SfxHandler: + lda Square2SoundBuffer ;special handling for the 1-up sound to keep it + and #Sfx_ExtraLife ;from being interrupted by other sounds on square 2 + bne ContinueExtraLife + ldy Square2SoundQueue ;check for sfx in queue + beq CheckSfx2Buffer + sty Square2SoundBuffer ;if found, put in buffer and check for the following + bmi PlayBowserFall ;bowser fall + lsr Square2SoundQueue + bcs PlayCoinGrab ;coin grab + lsr Square2SoundQueue + bcs PlayGrowPowerUp ;power-up reveal + lsr Square2SoundQueue + bcs PlayGrowVine ;vine grow + lsr Square2SoundQueue + bcs PlayBlast ;fireworks/gunfire + lsr Square2SoundQueue + bcs PlayTimerTick ;timer tick + lsr Square2SoundQueue + bcs PlayPowerUpGrab ;power-up grab + lsr Square2SoundQueue + bcs PlayExtraLife ;1-up + +CheckSfx2Buffer: + lda Square2SoundBuffer ;check for sfx in buffer + beq ExS2H ;if not found, exit sub + bmi ContinueBowserFall ;bowser fall + lsr + bcs Cont_CGrab_TTick ;coin grab + lsr + bcs ContinueGrowItems ;power-up reveal + lsr + bcs ContinueGrowItems ;vine grow + lsr + bcs ContinueBlast ;fireworks/gunfire + lsr + bcs Cont_CGrab_TTick ;timer tick + lsr + bcs ContinuePowerUpGrab ;power-up grab + lsr + bcs ContinueExtraLife ;1-up +ExS2H: rts + +Cont_CGrab_TTick: + jmp ContinueCGrabTTick + +JumpToDecLength2: + jmp DecrementSfx2Length + +PlayBowserFall: + lda #$38 ;load length of bowser defeat sound + sta Squ2_SfxLenCounter + ldy #$c4 ;load contents of reg for bowser defeat sound + lda #$18 +BlstSJp: bne PBFRegs + +ContinueBowserFall: + lda Squ2_SfxLenCounter ;check for almost near the end + cmp #$08 + bne DecrementSfx2Length + ldy #$a4 ;if so, load the rest of reg contents for bowser defeat sound + lda #$5a +PBFRegs: ldx #$9f ;the fireworks/gunfire sound shares part of reg contents here +EL_LRegs: bne LoadSqu2Regs ;this is an unconditional branch outta here + +PlayExtraLife: + lda #$30 ;load length of 1-up sound + sta Squ2_SfxLenCounter + +ContinueExtraLife: + lda Squ2_SfxLenCounter + ldx #$03 ;load new tones only every eight frames +DivLLoop: lsr + bcs JumpToDecLength2 ;if any bits set here, branch to dec the length + dex + bne DivLLoop ;do this until all bits checked, if none set, continue + tay + lda ExtraLifeFreqData-1,y ;load our reg contents + ldx #$82 + ldy #$7f + bne EL_LRegs ;unconditional branch + +PlayGrowPowerUp: + lda #$10 ;load length of power-up reveal sound + bne GrowItemRegs + +PlayGrowVine: + lda #$20 ;load length of vine grow sound + +GrowItemRegs: + sta Squ2_SfxLenCounter + lda #$7f ;load contents of reg for both sounds directly + sta SND_SQUARE2_REG+1 + lda #$00 ;start secondary counter for both sounds + sta Sfx_SecondaryCounter + +ContinueGrowItems: + inc Sfx_SecondaryCounter ;increment secondary counter for both sounds + lda Sfx_SecondaryCounter ;this sound doesn't decrement the usual counter + lsr ;divide by 2 to get the offset + tay + cpy Squ2_SfxLenCounter ;have we reached the end yet? + beq StopGrowItems ;if so, branch to jump, and stop playing sounds + lda #$9d ;load contents of other reg directly + sta SND_SQUARE2_REG + lda PUp_VGrow_FreqData,y ;use secondary counter / 2 as offset for frequency regs + jsr SetFreq_Squ2 + rts + +StopGrowItems: + jmp EmptySfx2Buffer ;branch to stop playing sounds + +;-------------------------------- + +BrickShatterFreqData: + .db $01, $0e, $0e, $0d, $0b, $06, $0c, $0f + .db $0a, $09, $03, $0d, $08, $0d, $06, $0c + +PlayBrickShatter: + lda #$20 ;load length of brick shatter sound + sta Noise_SfxLenCounter + +ContinueBrickShatter: + lda Noise_SfxLenCounter + lsr ;divide by 2 and check for bit set to use offset + bcc DecrementSfx3Length + tay + ldx BrickShatterFreqData,y ;load reg contents of brick shatter sound + lda BrickShatterEnvData,y + +PlayNoiseSfx: + sta SND_NOISE_REG ;play the sfx + stx SND_NOISE_REG+2 + lda #$18 + sta SND_NOISE_REG+3 + +DecrementSfx3Length: + dec Noise_SfxLenCounter ;decrement length of sfx + bne ExSfx3 + lda #$f0 ;if done, stop playing the sfx + sta SND_NOISE_REG + lda #$00 + sta NoiseSoundBuffer +ExSfx3: rts + +NoiseSfxHandler: + ldy NoiseSoundQueue ;check for sfx in queue + beq CheckNoiseBuffer + sty NoiseSoundBuffer ;if found, put in buffer + lsr NoiseSoundQueue + bcs PlayBrickShatter ;brick shatter + lsr NoiseSoundQueue + bcs PlayBowserFlame ;bowser flame + +CheckNoiseBuffer: + lda NoiseSoundBuffer ;check for sfx in buffer + beq ExNH ;if not found, exit sub + lsr + bcs ContinueBrickShatter ;brick shatter + lsr + bcs ContinueBowserFlame ;bowser flame +ExNH: rts + +PlayBowserFlame: + lda #$40 ;load length of bowser flame sound + sta Noise_SfxLenCounter + +ContinueBowserFlame: + lda Noise_SfxLenCounter + lsr + tay + ldx #$0f ;load reg contents of bowser flame sound + lda BowserFlameEnvData-1,y + bne PlayNoiseSfx ;unconditional branch here + +;-------------------------------- + +ContinueMusic: + jmp HandleSquare2Music ;if we have music, start with square 2 channel + +MusicHandler: + lda EventMusicQueue ;check event music queue + bne LoadEventMusic + lda AreaMusicQueue ;check area music queue + bne LoadAreaMusic + lda EventMusicBuffer ;check both buffers + ora AreaMusicBuffer + bne ContinueMusic + rts ;no music, then leave + +LoadEventMusic: + sta EventMusicBuffer ;copy event music queue contents to buffer + cmp #DeathMusic ;is it death music? + bne NoStopSfx ;if not, jump elsewhere + jsr StopSquare1Sfx ;stop sfx in square 1 and 2 + jsr StopSquare2Sfx ;but clear only square 1's sfx buffer +NoStopSfx: ldx AreaMusicBuffer + stx AreaMusicBuffer_Alt ;save current area music buffer to be re-obtained later + ldy #$00 + sty NoteLengthTblAdder ;default value for additional length byte offset + sty AreaMusicBuffer ;clear area music buffer + cmp #TimeRunningOutMusic ;is it time running out music? + bne FindEventMusicHeader + ldx #$08 ;load offset to be added to length byte of header + stx NoteLengthTblAdder + bne FindEventMusicHeader ;unconditional branch + +LoadAreaMusic: + cmp #$04 ;is it underground music? + bne NoStop1 ;no, do not stop square 1 sfx + jsr StopSquare1Sfx +NoStop1: ldy #$10 ;start counter used only by ground level music +GMLoopB: sty GroundMusicHeaderOfs + +HandleAreaMusicLoopB: + ldy #$00 ;clear event music buffer + sty EventMusicBuffer + sta AreaMusicBuffer ;copy area music queue contents to buffer + cmp #$01 ;is it ground level music? + bne FindAreaMusicHeader + inc GroundMusicHeaderOfs ;increment but only if playing ground level music + ldy GroundMusicHeaderOfs ;is it time to loopback ground level music? + cpy #$32 + bne LoadHeader ;branch ahead with alternate offset + ldy #$11 + bne GMLoopB ;unconditional branch + +FindAreaMusicHeader: + ldy #$08 ;load Y for offset of area music + sty MusicOffset_Square2 ;residual instruction here + +FindEventMusicHeader: + iny ;increment Y pointer based on previously loaded queue contents + lsr ;bit shift and increment until we find a set bit for music + bcc FindEventMusicHeader + +LoadHeader: + lda MusicHeaderOffsetData,y ;load offset for header + tay + lda MusicHeaderData,y ;now load the header + sta NoteLenLookupTblOfs + lda MusicHeaderData+1,y + sta MusicDataLow + lda MusicHeaderData+2,y + sta MusicDataHigh + lda MusicHeaderData+3,y + sta MusicOffset_Triangle + lda MusicHeaderData+4,y + sta MusicOffset_Square1 + lda MusicHeaderData+5,y + sta MusicOffset_Noise + sta NoiseDataLoopbackOfs + lda #$01 ;initialize music note counters + sta Squ2_NoteLenCounter + sta Squ1_NoteLenCounter + sta Tri_NoteLenCounter + sta Noise_BeatLenCounter + lda #$00 ;initialize music data offset for square 2 + sta MusicOffset_Square2 + sta AltRegContentFlag ;initialize alternate control reg data used by square 1 + lda #$0b ;disable triangle channel and reenable it + sta SND_MASTERCTRL_REG + lda #$0f + sta SND_MASTERCTRL_REG + +HandleSquare2Music: + dec Squ2_NoteLenCounter ;decrement square 2 note length + bne MiscSqu2MusicTasks ;is it time for more data? if not, branch to end tasks + ldy MusicOffset_Square2 ;increment square 2 music offset and fetch data + inc MusicOffset_Square2 + lda (MusicData),y + beq EndOfMusicData ;if zero, the data is a null terminator + bpl Squ2NoteHandler ;if non-negative, data is a note + bne Squ2LengthHandler ;otherwise it is length data + +EndOfMusicData: + lda EventMusicBuffer ;check secondary buffer for time running out music + cmp #TimeRunningOutMusic + bne NotTRO + lda AreaMusicBuffer_Alt ;load previously saved contents of primary buffer + bne MusicLoopBack ;and start playing the song again if there is one +NotTRO: and #VictoryMusic ;check for victory music (the only secondary that loops) + bne VictoryMLoopBack + lda AreaMusicBuffer ;check primary buffer for any music except pipe intro + and #%01011111 + bne MusicLoopBack ;if any area music except pipe intro, music loops + lda #$00 ;clear primary and secondary buffers and initialize + sta AreaMusicBuffer ;control regs of square and triangle channels + sta EventMusicBuffer + sta SND_TRIANGLE_REG + lda #$90 + sta SND_SQUARE1_REG + sta SND_SQUARE2_REG + rts + +MusicLoopBack: + jmp HandleAreaMusicLoopB + +VictoryMLoopBack: + jmp LoadEventMusic + +Squ2LengthHandler: + jsr ProcessLengthData ;store length of note + sta Squ2_NoteLenBuffer + ldy MusicOffset_Square2 ;fetch another byte (MUST NOT BE LENGTH BYTE!) + inc MusicOffset_Square2 + lda (MusicData),y + +Squ2NoteHandler: + ldx Square2SoundBuffer ;is there a sound playing on this channel? + bne SkipFqL1 + jsr SetFreq_Squ2 ;no, then play the note + beq Rest ;check to see if note is rest + jsr LoadControlRegs ;if not, load control regs for square 2 +Rest: sta Squ2_EnvelopeDataCtrl ;save contents of A + jsr Dump_Sq2_Regs ;dump X and Y into square 2 control regs +SkipFqL1: lda Squ2_NoteLenBuffer ;save length in square 2 note counter + sta Squ2_NoteLenCounter + +MiscSqu2MusicTasks: + lda Square2SoundBuffer ;is there a sound playing on square 2? + bne HandleSquare1Music + lda EventMusicBuffer ;check for death music or d4 set on secondary buffer + and #%10010001 ;note that regs for death music or d4 are loaded by default + bne HandleSquare1Music + ldy Squ2_EnvelopeDataCtrl ;check for contents saved from LoadControlRegs + beq NoDecEnv1 + dec Squ2_EnvelopeDataCtrl ;decrement unless already zero +NoDecEnv1: jsr LoadEnvelopeData ;do a load of envelope data to replace default + sta SND_SQUARE2_REG ;based on offset set by first load unless playing + ldx #$7f ;death music or d4 set on secondary buffer + stx SND_SQUARE2_REG+1 + +HandleSquare1Music: + ldy MusicOffset_Square1 ;is there a nonzero offset here? + beq HandleTriangleMusic ;if not, skip ahead to the triangle channel + dec Squ1_NoteLenCounter ;decrement square 1 note length + bne MiscSqu1MusicTasks ;is it time for more data? + +FetchSqu1MusicData: + ldy MusicOffset_Square1 ;increment square 1 music offset and fetch data + inc MusicOffset_Square1 + lda (MusicData),y + bne Squ1NoteHandler ;if nonzero, then skip this part + lda #$83 + sta SND_SQUARE1_REG ;store some data into control regs for square 1 + lda #$94 ;and fetch another byte of data, used to give + sta SND_SQUARE1_REG+1 ;death music its unique sound + sta AltRegContentFlag + bne FetchSqu1MusicData ;unconditional branch + +Squ1NoteHandler: + jsr AlternateLengthHandler + sta Squ1_NoteLenCounter ;save contents of A in square 1 note counter + ldy Square1SoundBuffer ;is there a sound playing on square 1? + bne HandleTriangleMusic + txa + and #%00111110 ;change saved data to appropriate note format + jsr SetFreq_Squ1 ;play the note + beq SkipCtrlL + jsr LoadControlRegs +SkipCtrlL: sta Squ1_EnvelopeDataCtrl ;save envelope offset + jsr Dump_Squ1_Regs + +MiscSqu1MusicTasks: + lda Square1SoundBuffer ;is there a sound playing on square 1? + bne HandleTriangleMusic + lda EventMusicBuffer ;check for death music or d4 set on secondary buffer + and #%10010001 + bne DeathMAltReg + ldy Squ1_EnvelopeDataCtrl ;check saved envelope offset + beq NoDecEnv2 + dec Squ1_EnvelopeDataCtrl ;decrement unless already zero +NoDecEnv2: jsr LoadEnvelopeData ;do a load of envelope data + sta SND_SQUARE1_REG ;based on offset set by first load +DeathMAltReg: lda AltRegContentFlag ;check for alternate control reg data + bne DoAltLoad + lda #$7f ;load this value if zero, the alternate value +DoAltLoad: sta SND_SQUARE1_REG+1 ;if nonzero, and let's move on + +HandleTriangleMusic: + lda MusicOffset_Triangle + dec Tri_NoteLenCounter ;decrement triangle note length + bne HandleNoiseMusic ;is it time for more data? + ldy MusicOffset_Triangle ;increment square 1 music offset and fetch data + inc MusicOffset_Triangle + lda (MusicData),y + beq LoadTriCtrlReg ;if zero, skip all this and move on to noise + bpl TriNoteHandler ;if non-negative, data is note + jsr ProcessLengthData ;otherwise, it is length data + sta Tri_NoteLenBuffer ;save contents of A + lda #$1f + sta SND_TRIANGLE_REG ;load some default data for triangle control reg + ldy MusicOffset_Triangle ;fetch another byte + inc MusicOffset_Triangle + lda (MusicData),y + beq LoadTriCtrlReg ;check once more for nonzero data + +TriNoteHandler: + jsr SetFreq_Tri + ldx Tri_NoteLenBuffer ;save length in triangle note counter + stx Tri_NoteLenCounter + lda EventMusicBuffer + and #%01101110 ;check for death music or d4 set on secondary buffer + bne NotDOrD4 ;if playing any other secondary, skip primary buffer check + lda AreaMusicBuffer ;check primary buffer for water or castle level music + and #%00001010 + beq HandleNoiseMusic ;if playing any other primary, or death or d4, go on to noise routine +NotDOrD4: txa ;if playing water or castle music or any secondary + cmp #$12 ;besides death music or d4 set, check length of note + bcs LongN + lda EventMusicBuffer ;check for win castle music again if not playing a long note + and #EndOfCastleMusic + beq MediN + lda #$0f ;load value $0f if playing the win castle music and playing a short + bne LoadTriCtrlReg ;note, load value $1f if playing water or castle level music or any +MediN: lda #$1f ;secondary besides death and d4 except win castle or win castle and playing + bne LoadTriCtrlReg ;a short note, and load value $ff if playing a long note on water, castle +LongN: lda #$ff ;or any secondary (including win castle) except death and d4 + +LoadTriCtrlReg: + sta SND_TRIANGLE_REG ;save final contents of A into control reg for triangle + +HandleNoiseMusic: + lda AreaMusicBuffer ;check if playing underground or castle music + and #%11110011 + beq ExitMusicHandler ;if so, skip the noise routine + dec Noise_BeatLenCounter ;decrement noise beat length + bne ExitMusicHandler ;is it time for more data? + +FetchNoiseBeatData: + ldy MusicOffset_Noise ;increment noise beat offset and fetch data + inc MusicOffset_Noise + lda (MusicData),y ;get noise beat data, if nonzero, branch to handle + bne NoiseBeatHandler + lda NoiseDataLoopbackOfs ;if data is zero, reload original noise beat offset + sta MusicOffset_Noise ;and loopback next time around + bne FetchNoiseBeatData ;unconditional branch + +NoiseBeatHandler: + jsr AlternateLengthHandler + sta Noise_BeatLenCounter ;store length in noise beat counter + txa + and #%00111110 ;reload data and erase length bits + beq SilentBeat ;if no beat data, silence + cmp #$30 ;check the beat data and play the appropriate + beq LongBeat ;noise accordingly + cmp #$20 + beq StrongBeat + and #%00010000 + beq SilentBeat + lda #$1c ;short beat data + ldx #$03 + ldy #$18 + bne PlayBeat + +StrongBeat: + lda #$1c ;strong beat data + ldx #$0c + ldy #$18 + bne PlayBeat + +LongBeat: + lda #$1c ;long beat data + ldx #$03 + ldy #$58 + bne PlayBeat + +SilentBeat: + lda #$10 ;silence + +PlayBeat: + sta SND_NOISE_REG ;load beat data into noise regs + stx SND_NOISE_REG+2 + sty SND_NOISE_REG+3 + +ExitMusicHandler: + rts + +AlternateLengthHandler: + tax ;save a copy of original byte into X + ror ;save LSB from original byte into carry + txa ;reload original byte and rotate three times + rol ;turning xx00000x into 00000xxx, with the + rol ;bit in carry as the MSB here + rol + +ProcessLengthData: + and #%00000111 ;clear all but the three LSBs + clc + adc $f0 ;add offset loaded from first header byte + adc NoteLengthTblAdder ;add extra if time running out music + tay + lda MusicLengthLookupTbl,y ;load length + rts + +LoadControlRegs: + lda EventMusicBuffer ;check secondary buffer for win castle music + and #EndOfCastleMusic + beq NotECstlM + lda #$04 ;this value is only used for win castle music + bne AllMus ;unconditional branch +NotECstlM: lda AreaMusicBuffer + and #%01111101 ;check primary buffer for water music + beq WaterMus + lda #$08 ;this is the default value for all other music + bne AllMus +WaterMus: lda #$28 ;this value is used for water music and all other event music +AllMus: ldx #$82 ;load contents of other sound regs for square 2 + ldy #$7f + rts + +LoadEnvelopeData: + lda EventMusicBuffer ;check secondary buffer for win castle music + and #EndOfCastleMusic + beq LoadUsualEnvData + lda EndOfCastleMusicEnvData,y ;load data from offset for win castle music + rts + +LoadUsualEnvData: + lda AreaMusicBuffer ;check primary buffer for water music + and #%01111101 + beq LoadWaterEventMusEnvData + lda AreaMusicEnvData,y ;load default data from offset for all other music + rts + +LoadWaterEventMusEnvData: + lda WaterEventMusEnvData,y ;load data from offset for water music and all other event music + rts + +;-------------------------------- + +;music header offsets + +MusicHeaderData: + .db DeathMusHdr-MHD ;event music + .db GameOverMusHdr-MHD + .db VictoryMusHdr-MHD + .db WinCastleMusHdr-MHD + .db GameOverMusHdr-MHD + .db EndOfLevelMusHdr-MHD + .db TimeRunningOutHdr-MHD + .db SilenceHdr-MHD + + .db GroundLevelPart1Hdr-MHD ;area music + .db WaterMusHdr-MHD + .db UndergroundMusHdr-MHD + .db CastleMusHdr-MHD + .db Star_CloudHdr-MHD + .db GroundLevelLeadInHdr-MHD + .db Star_CloudHdr-MHD + .db SilenceHdr-MHD + + .db GroundLevelLeadInHdr-MHD ;ground level music layout + .db GroundLevelPart1Hdr-MHD, GroundLevelPart1Hdr-MHD + .db GroundLevelPart2AHdr-MHD, GroundLevelPart2BHdr-MHD, GroundLevelPart2AHdr-MHD, GroundLevelPart2CHdr-MHD + .db GroundLevelPart2AHdr-MHD, GroundLevelPart2BHdr-MHD, GroundLevelPart2AHdr-MHD, GroundLevelPart2CHdr-MHD + .db GroundLevelPart3AHdr-MHD, GroundLevelPart3BHdr-MHD, GroundLevelPart3AHdr-MHD, GroundLevelLeadInHdr-MHD + .db GroundLevelPart1Hdr-MHD, GroundLevelPart1Hdr-MHD + .db GroundLevelPart4AHdr-MHD, GroundLevelPart4BHdr-MHD, GroundLevelPart4AHdr-MHD, GroundLevelPart4CHdr-MHD + .db GroundLevelPart4AHdr-MHD, GroundLevelPart4BHdr-MHD, GroundLevelPart4AHdr-MHD, GroundLevelPart4CHdr-MHD + .db GroundLevelPart3AHdr-MHD, GroundLevelPart3BHdr-MHD, GroundLevelPart3AHdr-MHD, GroundLevelLeadInHdr-MHD + .db GroundLevelPart4AHdr-MHD, GroundLevelPart4BHdr-MHD, GroundLevelPart4AHdr-MHD, GroundLevelPart4CHdr-MHD + +;music headers +;header format is as follows: +;1 byte - length byte offset +;2 bytes - music data address +;1 byte - triangle data offset +;1 byte - square 1 data offset +;1 byte - noise data offset (not used by secondary music) + +TimeRunningOutHdr: .db $08, TimeRunOutMusData, $27, $18 +Star_CloudHdr: .db $20, Star_CloudMData, $2e, $1a, $40 +EndOfLevelMusHdr: .db $20, WinLevelMusData, $3d, $21 +ResidualHeaderData: .db $20, $c4, $fc, $3f, $1d +UndergroundMusHdr: .db $18, UndergroundMusData, $00, $00 +SilenceHdr: .db $08, SilenceData, $00 +CastleMusHdr: .db $00, CastleMusData, $93, $62 +VictoryMusHdr: .db $10, VictoryMusData, $24, $14 +GameOverMusHdr: .db $18, GameOverMusData, $1e, $14 +WaterMusHdr: .db $08, WaterMusData, $a0, $70, $68 +WinCastleMusHdr: .db $08, EndOfCastleMusData, $4c, $24 +GroundLevelPart1Hdr: .db $18, GroundM_P1Data, $2d, $1c, $b8 +GroundLevelPart2AHdr: .db $18, GroundM_P2AData, $20, $12, $70 +GroundLevelPart2BHdr: .db $18, GroundM_P2BData, $1b, $10, $44 +GroundLevelPart2CHdr: .db $18, GroundM_P2CData, $11, $0a, $1c +GroundLevelPart3AHdr: .db $18, GroundM_P3AData, $2d, $10, $58 +GroundLevelPart3BHdr: .db $18, GroundM_P3BData, $14, $0d, $3f +GroundLevelLeadInHdr: .db $18, GroundMLdInData, $15, $0d, $21 +GroundLevelPart4AHdr: .db $18, GroundM_P4AData, $18, $10, $7a +GroundLevelPart4BHdr: .db $18, GroundM_P4BData, $19, $0f, $54 +GroundLevelPart4CHdr: .db $18, GroundM_P4CData, $1e, $12, $2b +DeathMusHdr: .db $18, DeathMusData, $1e, $0f, $2d + +;-------------------------------- + +;MUSIC DATA +;square 2/triangle format +;d7 - length byte flag (0-note, 1-length) +;if d7 is set to 0 and d6-d0 is nonzero: +;d6-d0 - note offset in frequency look-up table (must be even) +;if d7 is set to 1: +;d6-d3 - unused +;d2-d0 - length offset in length look-up table +;value of $00 in square 2 data is used as null terminator, affects all sound channels +;value of $00 in triangle data causes routine to skip note + +;square 1 format +;d7-d6, d0 - length offset in length look-up table (bit order is d0,d7,d6) +;d5-d1 - note offset in frequency look-up table +;value of $00 in square 1 data is flag alternate control reg data to be loaded + +;noise format +;d7-d6, d0 - length offset in length look-up table (bit order is d0,d7,d6) +;d5-d4 - beat type (0 - rest, 1 - short, 2 - strong, 3 - long) +;d3-d1 - unused +;value of $00 in noise data is used as null terminator, affects only noise + +;all music data is organized into sections (unless otherwise stated): +;square 2, square 1, triangle, noise + +Star_CloudMData: + .db $84, $2c, $2c, $2c, $82, $04, $2c, $04, $85, $2c, $84, $2c, $2c + .db $2a, $2a, $2a, $82, $04, $2a, $04, $85, $2a, $84, $2a, $2a, $00 + + .db $1f, $1f, $1f, $98, $1f, $1f, $98, $9e, $98, $1f + .db $1d, $1d, $1d, $94, $1d, $1d, $94, $9c, $94, $1d + + .db $86, $18, $85, $26, $30, $84, $04, $26, $30 + .db $86, $14, $85, $22, $2c, $84, $04, $22, $2c + + .db $21, $d0, $c4, $d0, $31, $d0, $c4, $d0, $00 + +GroundM_P1Data: + .db $85, $2c, $22, $1c, $84, $26, $2a, $82, $28, $26, $04 + .db $87, $22, $34, $3a, $82, $40, $04, $36, $84, $3a, $34 + .db $82, $2c, $30, $85, $2a + +SilenceData: + .db $00 + + .db $5d, $55, $4d, $15, $19, $96, $15, $d5, $e3, $eb + .db $2d, $a6, $2b, $27, $9c, $9e, $59 + + .db $85, $22, $1c, $14, $84, $1e, $22, $82, $20, $1e, $04, $87 + .db $1c, $2c, $34, $82, $36, $04, $30, $34, $04, $2c, $04, $26 + .db $2a, $85, $22 + +GroundM_P2AData: + .db $84, $04, $82, $3a, $38, $36, $32, $04, $34 + .db $04, $24, $26, $2c, $04, $26, $2c, $30, $00 + + .db $05, $b4, $b2, $b0, $2b, $ac, $84 + .db $9c, $9e, $a2, $84, $94, $9c, $9e + + .db $85, $14, $22, $84, $2c, $85, $1e + .db $82, $2c, $84, $2c, $1e + +GroundM_P2BData: + .db $84, $04, $82, $3a, $38, $36, $32, $04, $34 + .db $04, $64, $04, $64, $86, $64, $00 + + .db $05, $b4, $b2, $b0, $2b, $ac, $84 + .db $37, $b6, $b6, $45 + + .db $85, $14, $1c, $82, $22, $84, $2c + .db $4e, $82, $4e, $84, $4e, $22 + +GroundM_P2CData: + .db $84, $04, $85, $32, $85, $30, $86, $2c, $04, $00 + + .db $05, $a4, $05, $9e, $05, $9d, $85 + + .db $84, $14, $85, $24, $28, $2c, $82 + .db $22, $84, $22, $14 + + .db $21, $d0, $c4, $d0, $31, $d0, $c4, $d0, $00 + +GroundM_P3AData: + .db $82, $2c, $84, $2c, $2c, $82, $2c, $30 + .db $04, $34, $2c, $04, $26, $86, $22, $00 + + .db $a4, $25, $25, $a4, $29, $a2, $1d, $9c, $95 + +GroundM_P3BData: + .db $82, $2c, $2c, $04, $2c, $04, $2c, $30, $85, $34, $04, $04, $00 + + .db $a4, $25, $25, $a4, $a8, $63, $04 + +;triangle data used by both sections of third part + .db $85, $0e, $1a, $84, $24, $85, $22, $14, $84, $0c + +GroundMLdInData: + .db $82, $34, $84, $34, $34, $82, $2c, $84, $34, $86, $3a, $04, $00 + + .db $a0, $21, $21, $a0, $21, $2b, $05, $a3 + + .db $82, $18, $84, $18, $18, $82, $18, $18, $04, $86, $3a, $22 + +;noise data used by lead-in and third part sections + .db $31, $90, $31, $90, $31, $71, $31, $90, $90, $90, $00 + +GroundM_P4AData: + .db $82, $34, $84, $2c, $85, $22, $84, $24 + .db $82, $26, $36, $04, $36, $86, $26, $00 + + .db $ac, $27, $5d, $1d, $9e, $2d, $ac, $9f + + .db $85, $14, $82, $20, $84, $22, $2c + .db $1e, $1e, $82, $2c, $2c, $1e, $04 + +GroundM_P4BData: + .db $87, $2a, $40, $40, $40, $3a, $36 + .db $82, $34, $2c, $04, $26, $86, $22, $00 + + .db $e3, $f7, $f7, $f7, $f5, $f1, $ac, $27, $9e, $9d + + .db $85, $18, $82, $1e, $84, $22, $2a + .db $22, $22, $82, $2c, $2c, $22, $04 + +DeathMusData: + .db $86, $04 ;death music share data with fourth part c of ground level music + +GroundM_P4CData: + .db $82, $2a, $36, $04, $36, $87, $36, $34, $30, $86, $2c, $04, $00 + + .db $00, $68, $6a, $6c, $45 ;death music only + + .db $a2, $31, $b0, $f1, $ed, $eb, $a2, $1d, $9c, $95 + + .db $86, $04 ;death music only + + .db $85, $22, $82, $22, $87, $22, $26, $2a, $84, $2c, $22, $86, $14 + +;noise data used by fourth part sections + .db $51, $90, $31, $11, $00 + +CastleMusData: + .db $80, $22, $28, $22, $26, $22, $24, $22, $26 + .db $22, $28, $22, $2a, $22, $28, $22, $26 + .db $22, $28, $22, $26, $22, $24, $22, $26 + .db $22, $28, $22, $2a, $22, $28, $22, $26 + .db $20, $26, $20, $24, $20, $26, $20, $28 + .db $20, $26, $20, $28, $20, $26, $20, $24 + .db $20, $26, $20, $24, $20, $26, $20, $28 + .db $20, $26, $20, $28, $20, $26, $20, $24 + .db $28, $30, $28, $32, $28, $30, $28, $2e + .db $28, $30, $28, $2e, $28, $2c, $28, $2e + .db $28, $30, $28, $32, $28, $30, $28, $2e + .db $28, $30, $28, $2e, $28, $2c, $28, $2e, $00 + + .db $04, $70, $6e, $6c, $6e, $70, $72, $70, $6e + .db $70, $6e, $6c, $6e, $70, $72, $70, $6e + .db $6e, $6c, $6e, $70, $6e, $70, $6e, $6c + .db $6e, $6c, $6e, $70, $6e, $70, $6e, $6c + .db $76, $78, $76, $74, $76, $74, $72, $74 + .db $76, $78, $76, $74, $76, $74, $72, $74 + + .db $84, $1a, $83, $18, $20, $84, $1e, $83, $1c, $28 + .db $26, $1c, $1a, $1c + +GameOverMusData: + .db $82, $2c, $04, $04, $22, $04, $04, $84, $1c, $87 + .db $26, $2a, $26, $84, $24, $28, $24, $80, $22, $00 + + .db $9c, $05, $94, $05, $0d, $9f, $1e, $9c, $98, $9d + + .db $82, $22, $04, $04, $1c, $04, $04, $84, $14 + .db $86, $1e, $80, $16, $80, $14 + +TimeRunOutMusData: + .db $81, $1c, $30, $04, $30, $30, $04, $1e, $32, $04, $32, $32 + .db $04, $20, $34, $04, $34, $34, $04, $36, $04, $84, $36, $00 + + .db $46, $a4, $64, $a4, $48, $a6, $66, $a6, $4a, $a8, $68, $a8 + .db $6a, $44, $2b + + .db $81, $2a, $42, $04, $42, $42, $04, $2c, $64, $04, $64, $64 + .db $04, $2e, $46, $04, $46, $46, $04, $22, $04, $84, $22 + +WinLevelMusData: + .db $87, $04, $06, $0c, $14, $1c, $22, $86, $2c, $22 + .db $87, $04, $60, $0e, $14, $1a, $24, $86, $2c, $24 + .db $87, $04, $08, $10, $18, $1e, $28, $86, $30, $30 + .db $80, $64, $00 + + .db $cd, $d5, $dd, $e3, $ed, $f5, $bb, $b5, $cf, $d5 + .db $db, $e5, $ed, $f3, $bd, $b3, $d1, $d9, $df, $e9 + .db $f1, $f7, $bf, $ff, $ff, $ff, $34 + .db $00 ;unused byte + + .db $86, $04, $87, $14, $1c, $22, $86, $34, $84, $2c + .db $04, $04, $04, $87, $14, $1a, $24, $86, $32, $84 + .db $2c, $04, $86, $04, $87, $18, $1e, $28, $86, $36 + .db $87, $30, $30, $30, $80, $2c + +;square 2 and triangle use the same data, square 1 is unused +UndergroundMusData: + .db $82, $14, $2c, $62, $26, $10, $28, $80, $04 + .db $82, $14, $2c, $62, $26, $10, $28, $80, $04 + .db $82, $08, $1e, $5e, $18, $60, $1a, $80, $04 + .db $82, $08, $1e, $5e, $18, $60, $1a, $86, $04 + .db $83, $1a, $18, $16, $84, $14, $1a, $18, $0e, $0c + .db $16, $83, $14, $20, $1e, $1c, $28, $26, $87 + .db $24, $1a, $12, $10, $62, $0e, $80, $04, $04 + .db $00 + +;noise data directly follows square 2 here unlike in other songs +WaterMusData: + .db $82, $18, $1c, $20, $22, $26, $28 + .db $81, $2a, $2a, $2a, $04, $2a, $04, $83, $2a, $82, $22 + .db $86, $34, $32, $34, $81, $04, $22, $26, $2a, $2c, $30 + .db $86, $34, $83, $32, $82, $36, $84, $34, $85, $04, $81, $22 + .db $86, $30, $2e, $30, $81, $04, $22, $26, $2a, $2c, $2e + .db $86, $30, $83, $22, $82, $36, $84, $34, $85, $04, $81, $22 + .db $86, $3a, $3a, $3a, $82, $3a, $81, $40, $82, $04, $81, $3a + .db $86, $36, $36, $36, $82, $36, $81, $3a, $82, $04, $81, $36 + .db $86, $34, $82, $26, $2a, $36 + .db $81, $34, $34, $85, $34, $81, $2a, $86, $2c, $00 + + .db $84, $90, $b0, $84, $50, $50, $b0, $00 + + .db $98, $96, $94, $92, $94, $96, $58, $58, $58, $44 + .db $5c, $44, $9f, $a3, $a1, $a3, $85, $a3, $e0, $a6 + .db $23, $c4, $9f, $9d, $9f, $85, $9f, $d2, $a6, $23 + .db $c4, $b5, $b1, $af, $85, $b1, $af, $ad, $85, $95 + .db $9e, $a2, $aa, $6a, $6a, $6b, $5e, $9d + + .db $84, $04, $04, $82, $22, $86, $22 + .db $82, $14, $22, $2c, $12, $22, $2a, $14, $22, $2c + .db $1c, $22, $2c, $14, $22, $2c, $12, $22, $2a, $14 + .db $22, $2c, $1c, $22, $2c, $18, $22, $2a, $16, $20 + .db $28, $18, $22, $2a, $12, $22, $2a, $18, $22, $2a + .db $12, $22, $2a, $14, $22, $2c, $0c, $22, $2c, $14, $22, $34, $12 + .db $22, $30, $10, $22, $2e, $16, $22, $34, $18, $26 + .db $36, $16, $26, $36, $14, $26, $36, $12, $22, $36 + .db $5c, $22, $34, $0c, $22, $22, $81, $1e, $1e, $85, $1e + .db $81, $12, $86, $14 + +EndOfCastleMusData: + .db $81, $2c, $22, $1c, $2c, $22, $1c, $85, $2c, $04 + .db $81, $2e, $24, $1e, $2e, $24, $1e, $85, $2e, $04 + .db $81, $32, $28, $22, $32, $28, $22, $85, $32 + .db $87, $36, $36, $36, $84, $3a, $00 + + .db $5c, $54, $4c, $5c, $54, $4c + .db $5c, $1c, $1c, $5c, $5c, $5c, $5c + .db $5e, $56, $4e, $5e, $56, $4e + .db $5e, $1e, $1e, $5e, $5e, $5e, $5e + .db $62, $5a, $50, $62, $5a, $50 + .db $62, $22, $22, $62, $e7, $e7, $e7, $2b + + .db $86, $14, $81, $14, $80, $14, $14, $81, $14, $14, $14, $14 + .db $86, $16, $81, $16, $80, $16, $16, $81, $16, $16, $16, $16 + .db $81, $28, $22, $1a, $28, $22, $1a, $28, $80, $28, $28 + .db $81, $28, $87, $2c, $2c, $2c, $84, $30 + +VictoryMusData: + .db $83, $04, $84, $0c, $83, $62, $10, $84, $12 + .db $83, $1c, $22, $1e, $22, $26, $18, $1e, $04, $1c, $00 + + .db $e3, $e1, $e3, $1d, $de, $e0, $23 + .db $ec, $75, $74, $f0, $f4, $f6, $ea, $31, $2d + + .db $83, $12, $14, $04, $18, $1a, $1c, $14 + .db $26, $22, $1e, $1c, $18, $1e, $22, $0c, $14 + +;unused space + .db $ff, $ff, $ff + +FreqRegLookupTbl: + .db $00, $88, $00, $2f, $00, $00 + .db $02, $a6, $02, $80, $02, $5c, $02, $3a + .db $02, $1a, $01, $df, $01, $c4, $01, $ab + .db $01, $93, $01, $7c, $01, $67, $01, $53 + .db $01, $40, $01, $2e, $01, $1d, $01, $0d + .db $00, $fe, $00, $ef, $00, $e2, $00, $d5 + .db $00, $c9, $00, $be, $00, $b3, $00, $a9 + .db $00, $a0, $00, $97, $00, $8e, $00, $86 + .db $00, $77, $00, $7e, $00, $71, $00, $54 + .db $00, $64, $00, $5f, $00, $59, $00, $50 + .db $00, $47, $00, $43, $00, $3b, $00, $35 + .db $00, $2a, $00, $23, $04, $75, $03, $57 + .db $02, $f9, $02, $cf, $01, $fc, $00, $6a + +MusicLengthLookupTbl: + .db $05, $0a, $14, $28, $50, $1e, $3c, $02 + .db $04, $08, $10, $20, $40, $18, $30, $0c + .db $03, $06, $0c, $18, $30, $12, $24, $08 + .db $36, $03, $09, $06, $12, $1b, $24, $0c + .db $24, $02, $06, $04, $0c, $12, $18, $08 + .db $12, $01, $03, $02, $06, $09, $0c, $04 + +EndOfCastleMusicEnvData: + .db $98, $99, $9a, $9b + +AreaMusicEnvData: + .db $90, $94, $94, $95, $95, $96, $97, $98 + +WaterEventMusEnvData: + .db $90, $91, $92, $92, $93, $93, $93, $94 + .db $94, $94, $94, $94, $94, $95, $95, $95 + .db $95, $95, $95, $96, $96, $96, $96, $96 + .db $96, $96, $96, $96, $96, $96, $96, $96 + .db $96, $96, $96, $96, $95, $95, $94, $93 + +BowserFlameEnvData: + .db $15, $16, $16, $17, $17, $18, $19, $19 + .db $1a, $1a, $1c, $1d, $1d, $1e, $1e, $1f + .db $1f, $1f, $1f, $1e, $1d, $1c, $1e, $1f + .db $1f, $1e, $1d, $1c, $1a, $18, $16, $14 + +BrickShatterEnvData: + .db $15, $16, $16, $17, $17, $18, $19, $19 + .db $1a, $1a, $1c, $1d, $1d, $1e, $1e, $1f + +;------------------------------------------------------------------------------------- +;INTERRUPT VECTORS + + .dw NonMaskableInterrupt + .dw Start + .dw $fff0 ;unused diff --git a/other/snow.nes b/other/snow.nes new file mode 100644 index 0000000000000000000000000000000000000000..54ad8fdac0b7c1e5bcdec25b8292052cb6b269d6 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/other/snow.txt b/other/snow.txt new file mode 100644 index 0000000..6bfa7f6 --- /dev/null +++ b/other/snow.txt @@ -0,0 +1,72 @@ +SNOW intro, by Repulse (Tennessee Carmel-Veilleux) +================================================== + +Introduction +------------ +During the past year, I've worked very hard to learn 6502 assembly and +ultimately, NES programming. What this archive contains is my first +release. It is an Intro called "SNOW". It is the first "real" NES intro in +the Demoparty sense of the word. Let's not forget that other devoted +people have also given time to NES programming: + + -Memblers + -Yoshi + -Matt Conte + -Kevin Horton + -The A/NES crew + -Chris Covell + +and have succeded by bringing technical demonstrations. + +The people +---------- + -Repulse : Code, design + -_Bnu : GFX + -Memblers: Music + -Bananmos: Music Engine/Tracker + -Random : Original music in MOD format + +Distribution License +-------------------- +You can distribute this intro far and wide in both ROM and Cartridge form. +HOWEVER, you cannot sell the data itself, you can only sell the medium. +If you see this rule broken by someone, don't forget to e-mail me :) The +sources will ONLY be available at Yoshi's NES developement site, which is, +BTW, PRIVATE and restricted to the few who can actually make use of it. +Any outside distribution of the source will result in a suit for breach of +contract (to which you are agreeing by downloading this package). In other +words, if you have the source, don't give it to someone else without +asking me first. This is to insure that the NES developement community +doesn't suffer the same lame-fest that the NES emulation scene is +suffering right now. As usual, I cannot be held responsible for physical +or moral harm caused to you or your equipment. + +Technical data about this intro +------------------------------- +Run this intro in the LATEST LoopyNES for the greatest experience :) + +This intro was coded using the following software: + +CA65/LD65: Assembler and Linker from Ulrich von Bassewitz + -> Available at http://www.von-bassewitz.de/uz/cc65/ + +TLayer, NES Screen Arranger from Kent Hansen (Snowbro) + -> Available at (His page is down :( Zophar's Domain + +NT2 from Michael Iwaniec (Bananmos) + -> Available on request + +The demo took approx 30-40 hours to code spanned across 6 months (60% of +the coding was done the week before Coma '99). It contains > 2500 lines of +code. It was coded 100% under Linux. + +Contact +------- +Author: veilleux@atari.org, Repulse on EFnet + +Memblers: 5010.0951@tcon.net + +_Bnu: klass9.v@jokkmokk.se + +Bananmos: bananmos_uv@hotmail.com + diff --git a/other/test001.nes b/other/test001.nes new file mode 100644 index 0000000000000000000000000000000000000000..b56ac1dcc60df936c2f3fac212fe0c81699575e4 GIT binary patch literal 131088 zcmeI*U1(Eh9LMqJBx%w{ZBO6p3v#qcwa!7*Irj#O7ebXdlg7v*>l?^wryUFf^F;FI*W(>U18@HZ4=bwe{MRp^I$oEfk@_Qbh zr#bnYljnrooHw?-xg^p!sp_T2Jmr+T?1*lugsVE`MtdfPtUaA$TJ7n&7b!<8;i=}s zZcM-KMIEiorliU-FXr@2ANtQQ=|1x4?qiSYzH_s&GFi>mcZTODE>Ieqsr+$IaR{Ec z{L}G*B{lk9!nT`c?b45<`ONBkqTMvw>y0)$I@@N(3>8$~lCiBaHZ|&I-unAk)0iI{ z%7;tGM)Qe|RHXFHXuc51H+&aQ#8ba#%L_a!SVqE*4tX7E=Zf!q?UxsN4NiHH+2kTh zk2Ex!C8?yQtA4TSm#$Zc={{wnoOKum4uix71lv8`6KPHfWjiyqnE^V&y)waz!im zxuw4{J2!PQY?ivIlaXLMDS1-zDaofKpO$=D@)^lzB%hUhR`NN?=Omw(d|vVe$rmI~ zNuH8?QSwE}mn2`3d|C2k$;oL>qiH93hwW_jU6)AXXlu9`O20V}6e&tA(r6fLQvL(x*`?L*PxQ1s5tq4)1= z%Wc%l-34Z%@6PFAZ^+WyyknO4f#rQ@c^_HkfVh_DSzf{Nj#@hI9k+Cs_pxOrbecz( z_T9GfTxCm1Y5%r=FJ4rkJEk%tg`VNPj_d1~>Cr<)D>NK0hC^DdDTZXkZNKuf_HU~B zDc=`n=k&YDId{%c`OGf!X1vaH*1U-Awz_R@yLqV&IX`q%c6gz?$ZgJUD5Okg%28u7$*m z{cE{5nGD7z`^?1qcYpff+o_2!jvsmFz@A;(H*a+RU61!JnT-Gf2q1s}0tg_000Iag zfB*srAbh6hFl2FC`+2h+-SQt2Jp{Z{LWb(?qYK5)ao=HK<}|KI;5b1OluFtOu+ItcP3=xE^pl;CjgSfoJ3UK>axKi~s@%Abc@Io)JI*0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{ z1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009IL zKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~ p0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5O^GcKLPqd4srkh literal 0 HcmV?d00001 diff --git a/other/window2_ntsc.nes b/other/window2_ntsc.nes new file mode 100644 index 0000000000000000000000000000000000000000..9aafc9a583dc18723f321e9c2097a310575ecfc0 GIT binary patch literal 24592 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 literal 0 HcmV?d00001 diff --git a/other/window_old_ntsc.nes b/other/window_old_ntsc.nes new file mode 100644 index 0000000000000000000000000000000000000000..57cb00ac6b79544422e2e0293a5e98fa532b0897 GIT binary patch literal 24592 zcmeI(?@JqZ7y$4mcgbmIwm9py+a~5~4AqWn>yJX+IARPn8%A7c#Pe0(`XZ2+H=Xz*^dHy;!%5kTFeqBPnLXc2(harS%HH_mdA#KK z-gD1A-|y#pdFhSeu@5{R57c8iQ~7pp9@xBx-TxZW;7Nm!1~CoZH2BgWrJ-T3wChBz z_o5D1??e@WHNSAb*u4VVDX>R*_IcjPTfpXgPP^q{S+9KCut0DEmPf!EL2wQ%QDCJ4 zgDv($VI-NydS}p*7-l7wf!spgYG8XmveGjxaE|o^{vn*u-|8M$>+)D9Nr1~bH3Z2G zG5CrQYx(}J?!F)%EZBKfQ3itj;cNZDj?35T`B#(&>v=5g?_yZOLLXh|y?pgjXYf*Y zDBNDldrzGlUi9()Y_Y)B3nLE;F3c)CkQkag&a={i=5&_?ht=2ZXqom^p1fB&+%7$H zAQQ#GcIi;dK-rsxQlnGGP24LT?t-=}WQEf2T79=qo--G654Ui`x10B!%3KqE{J1+) ze2Yh4;Qsj7)2Cq=QMN`v%r?olH|Cli!LEPJpMzr0yOt>CJ}X)uin-pRcV0o3`Wnt|Fa^E^^a&mG1;fkUv>htpRBSlerJ34yt@9mC* z^1%_FLM@?|meBdm^ZVufqgHRLm!B&_OQ`SveCl&zwTRY2tHqbKSgl3ke&U-1u00E7 zzXNk%iOdnK*63e9AXItj<*lRPt-|>F_{Mm&-jL2DKmsH{0wh2JBtQZrKmsH{0wh2J zBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZr zKmsH{0wh2JBtQZrKmuo1;JYH^e=0(tnSFX|EC~<@_H-!q>I~6y-`6o*?<8rSIp)GLC=Uk;`Xq^$o|SB!{nu!{L|;@_;PM zDyXr|nb?YHfEt%n&4ASGOzh*C*%YKCRgzNB7D_HHnRooqrc6v2euxasSM!l6H?PK) zXKfpwr)nu(SHUo6TCjl(hUCWv_Yg#`@^4aXX9;b#34Ru+>FOTU;N6%hIs!M z1~znkYu-3tm9Njn32L}L9Vh7KO?x;}UH>Q5Jg?_@tUtcLhN<%j<9_n_%6vT-IDdS4 zb-sLvd3Pv7d~?$=7y10+H;u_S{DMi`a-5$ktN47Z=K}nGE`WY_!U@;YFZZD5iO@#7 zTi@`B0Ia#uE1XEv1rm52fl4i2r-tq&0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq P5+DH*AOR9My8?d#?11Vw literal 0 HcmV?d00001 diff --git a/other/window_old_pal.nes b/other/window_old_pal.nes new file mode 100644 index 0000000000000000000000000000000000000000..62bf7960c4b8772a10023b4b17d94c660f26154e GIT binary patch literal 24592 zcmeI((Mub5902fd?vm5aj5zDqZ4>h|hU&I!8?{h3ju=B5e2`8els?|mVL`+dHWb3K zlL}qw1r-LnVVnz#czx=t4??0Zo%j&?4{U?sMD`E{MQb;+@9%QyhT3gqFFt&~UUL5K zd*A#1exKj@=#A^6@A!N^sK->k`t@!WSk}kxe+fD84Bzj>SU%5KiQ8b&qRxMXZw~z-65pg5-u6 zeo2U4zOSphH;e}hcV1DH{%~LPYG1hH($#wYCFS9I9!vYW7?!Ze`xkmHUAfp9zStd! zwtIR1sguKt0p6d@m)L4)_`8w|vkVU;h9-}TtbCw3-DSaH^>sU1zI~Y|@0Aa?%1<50 zCvdP;KGgD1@fV=n=u~hMcgu%6pzR0+q5Qj6-|ds<{Dt*zHgLnYn)jXRY!iNhxI2@4 zi$|X0{sh?G-rn#B8^a(Ln&jJavrUg+C%6(^hs{{4C5r2xY+CP%>ph!RKpYwy?%w#m zS_$S~-zxvH(zMcqh51JO9iNsT$np)(hnD$Ef{V#Eum||I1RuU9uCDcLp7Y@~{xpdd zL~L6K;47s$19?~mEU&HpMWOfZxGx+wIk~R?dPPwc^;zZFk)o(Q9UVRR^G3%(<=_ZU zk(NkHOXPg#`TffNQLDez&(Bq%CDQwUKJ|$)FA`p8UVQGwvKK@5hrSv@fC5y44$Oij zGDoml6My{yACur}mzzVND3`nN1nDO&y+1craQy4GTseEIZ#Xt3IeIM`jV4u)`(;^HK~1hr zCznhE)Rd%Z24rTYlOImcWFRA{l9YkANP1zxyc2{rWqjNSLVPe=%f~0(yqa8`v2A>w zs%3Ot1;dP?PJ| z1sVIRNudqoQ}VWL+P2R78@i6`wQ>G@y*kc6gX>$Gn_C);L!AGAdK{+iF4%5k56Gshz()fz~{wy#3AL(o6ee(g4Bd@GnE2;{tFWu;{Bf)*wFR$ zym7uNU!RQ=)Np+|PSDMp_Vsve{U6oxyq@Q={`meHrp_mf`^o1k^Yvih{PF3v`SKy= z-JuMrwKd0_=krV5G$vB;3np>Paek_-;`6bd3-J570Q%jD4!NE|IfkAmLL2FBeJvmY zu;xa;a3W0?NZ?fjs$RTG4c$uuBtQZrKmsH{0wh2JBtQZrKmsH{0wh2JBtQZrKmsH{ K0wi#D1^xs%2I+PH literal 0 HcmV?d00001 diff --git a/pal_apu_tests/01.len_ctr.nes b/pal_apu_tests/01.len_ctr.nes new file mode 100644 index 0000000000000000000000000000000000000000..b0619ce3c1208fc5ee21a07fc464a2b84c08bc49 GIT binary patch literal 16400 zcmeI2Ply|36u{r4yP07P=@eW$mL5J4A%z}B@GxkovzX{C4C%7Fz0W~H0!8*Di-c?o z#!6wdf``S6A+X?ASa3m55HY8Zw!|XydH!o9u2W9y}M`%Omf7 z^ZtBqetcg}sg#$_DezPdNr(UuAOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko z0U|&IhyW2F0z`la5P|2O00if};aSgo(bLa(xANY%FL(=@w=(Tp&i73BwSoI`xH)TIP~52_tAq~!$9hmtf+q;dxkY>Sx*BzPhsZMdmf=>|8knyz{x-WA@zWi% zt>Gr09qXsTh-YNv!`6`Rv_@^Xml7^X}u%CCuN#|~I-U+lhbfnmu3n$QsW;z~DxX3i*PMFY+kulAB$4#wSa zR<193-LXKMh@4@XCguyN(l)cXRRH-G2DVQv?yEB!$3rPj2GF%B923AQP2sd?zPkOT zT?Ff@5Qz|g&80%I+U<6$MTmPsh+Ygyw>$3QTxesA$ar5=F9AleOh8kPkMrlVI3~^` zdcP0jKl|XN(gd-WB=<2->^@4i`$Eo((vbTJY@DvQdmqVlU)HVmx{WNxCw&dM4+{1b zVy|K8XzwS<9`?gk18uchE#d%>!yO&zL)mP@ntXY>Y5g-CYfCvx)B0vO)01+Sp hM1Tko0U|&IhyW2F0z`la5CJ0aUjpBU55n)le*p&;z5@UN literal 0 HcmV?d00001 diff --git a/pal_apu_tests/02.len_table.nes b/pal_apu_tests/02.len_table.nes new file mode 100644 index 0000000000000000000000000000000000000000..60d37ce35c7c0b690e7b49c1efe41a903a18462f GIT binary patch literal 16400 zcmeI2QD`Go6hLokHxpvaPGxsHma0!gh_D|K{0JJ>i6lCOA%-^ozYhs1EK(4pNT@Ct zmBK6){3w2fK*hIEuplUiFkg@E62tts3Tm0up%g#rq{Ve`>(u)a+XeT}zlD4A$bEO- zefQpX^6q@4T3MJ$z&$x3Ap%5z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&I zhyW2F0z`la5CI}U1Ri(-;LY%Gn&&TYeTuJT`44L#^N1IJcsU0V=<3v zBVyG69ntAMwdGB}R$5r7l;M@qoLwouz@CP=YP~XFE!nIxKmXc1ybm8F*tMVoTd<7* zw!n+{<%_0?rL`krI@6{|I2TQ!J79`;orEb)oC%Y60G+}|y6*L9b34?~@cvlm;)LJ( z=fikbs=dzaO7+#c#p#T)yoP zP#$`_g0b~r9C~y}k;eFE=P{Ik0l8dmbc9?k#!n9Pme;y;tOJx&Ix7R@ts1La&x4MS zl;})}4th!n>UyD2S8KZ7I`uJ(ymBq7ud$>~Cs45aa_@}-7zI_p3bbUlxa7vLk}--& z*@D^P)n1&*z_ELrRQ46_9!u1*%ozE69{r^nO0Og{%K+*W28JJL%&RjK%R?!S3(!-O zSSCQBJc-q!`t-&pW)TWkrHrKn46X(g8?Ng%iV*drl)VUI*FAQzF4PgOsP(>VTmf9g zZ4y>g`B;B8iDhCvviD;c{oDsWk`<5#aeN#7!l5W430wsA{r zd^gm>tTWVBt#ymRZu9fzji$XcU~2;#$6Eu;Hq`jpYs?M<91r|En+`w(hyW2F0z`la s5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vQ0C-9X&HTcs12M4g7nE(I) literal 0 HcmV?d00001 diff --git a/pal_apu_tests/03.irq_flag.nes b/pal_apu_tests/03.irq_flag.nes new file mode 100644 index 0000000000000000000000000000000000000000..81a29da57621a723abc921b42c868a11249bc39a GIT binary patch literal 16400 zcmeI2Ply{;7{I@zyP2?tbP8QNmL8snkU|e5^f1^^Cy=bOFs^HMz0W~H0#){6StO<{ zG%AIW6+A4SLSVsH2)H09h%l!|TVj}tRZy16GAz==n(RUyY@GFbNwckZ>#gv8dE|TV z`}e;0kMrc+pcmo1bFZ-n0{s^-N&#e~bsU*nfn0j{Kp62emqfiko8l2TJEaPO$nc!%=k==2&PuA856g zU34ERHE<7=s`KQ}9M3T0H?S6GSO_=A&49TH#@}GKLVmKXx6-)n=hN|-Kjca2x!N4? z-R7_b{8ICvoyIhU-Shu$r?&@p#?!wx{p8+I9QeDOvCVK&dVCH(hxLzJ)}(+2xm<4C zdoCB_CkJZXufI4_0g7pr6#;Z>nXOtEK}C}kl}S-SO-n(&Y8b21r>ga7jHc-_G%vp< zlAcb$uzOn>pI2@ zIizl+GV1{H6dINvYus05Cbox?pERJRXRu8Gqd0@zqWbFgmu4P}D?-FV02Y@6@)ghX zDtU;yLWphzvFD9E>TU83cl9$$7{dmTu3q;>LWRs z-1ii7I96hK)2i(O-lyYn4=*6J&B<+ZEWY*AP#I+1p>oUGv>5DGzpmb{+HRk9`ZkV@ zKJGSDoa3J{dl2Gy?tioC07QTY5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO) T01+SpMBx7fz6%}%-v<8zwR*WG literal 0 HcmV?d00001 diff --git a/pal_apu_tests/04.clock_jitter.nes b/pal_apu_tests/04.clock_jitter.nes new file mode 100644 index 0000000000000000000000000000000000000000..b8f03398d51c71c0c28869377d1b0909dfda2f38 GIT binary patch literal 16400 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 E29-3rRsaA1 literal 0 HcmV?d00001 diff --git a/pal_apu_tests/10.len_halt_timing.nes b/pal_apu_tests/10.len_halt_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..ae566a4742021537ace57a57ba08a5a3cbe7aa2a GIT binary patch literal 16400 zcmeI2-D@LN6u{4P+a%Q3or1OFvJY29$ihBE@F8fZQ)t`?jIp%w{XR%YWsyEDMM8AJ z>asAh1s|$UF;MXq3Kj%q7hw>*bW05L;wmU*rpy-Ehnlp|jc#`8xs!Hf@h@07Cx@JS z@Aw_sS+%7wYow9N{0b8pSTNAR)6u7(ZR zge@$v30{w1oG{HLVLFp0_BUxZro_AKX0S0~UNAj~*Ex2++#7^w&V(s+2TbvSqnYB^ z88Z3w?Ay#PlrEJmW=-2=RxZ9-EM3AB_Ps9*=gdihi`6;%)faJ%A@+0-7ix@)AK9%y zWU(k)3B;Ml95+uKp9f-CIaJhXhH8VMW8^UhX2gz_z<$nGkD=MaCsy+<@i2F9A@Uv| z!eg(?n~&tHd+XcY!)xB(906Gyhe;>F_79R92Wo(1Mi^?z#{R_?PyHA&aQ{zY%|+PVfv@1dd=&KA?3NU+!4FW-3Ex)mJgaK zOiQwD@1JIBv$GWs@2`48dtG_p?Fzv3-F`yNr?}gfXd{_6ve_)gOQp)z6X_-O zAWBax?yEBs+e66@8qib2*d{=3W*ECg^TqmSW*%~vrHrHmEUpyt71wnudFZvIl&u~_ zuG@F9FSI@MD1Td4rU1Q|CZVp{$Nt9>*e3QPTfcRBf3$(eQU|#oMRzbx?j1!tZK?W2 zsj2-W7LMmTt@qWut@4&yZY_cSL0v=bgMxLX+^^+yw0ELtAM4?)hPG0v^SN(@h0 zwb{Y*^hmey07BCooHlNWwV%7m&Y06pUbj{)2D{a-tLs(!r-0oJY}Bm)ck3qA%V6*t zvpXT`6aUVp2Ot7OfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOim< L@SXoc@U8zZ0U*;b literal 0 HcmV?d00001 diff --git a/pal_apu_tests/11.len_reload_timing.nes b/pal_apu_tests/11.len_reload_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..fbb0531be83bc31603cd1179a3c1e52b2a6e0efe GIT binary patch literal 16400 zcmeI2&1)N15Wr^@TPs}G-auV%ObV}rf($vRU$C^oU4zuDVe1%Mz3-t2sf6OADZ*`_ zYC~Z|3O$&fgutcGV5lL`UIKf1*sdb>l(ta9%2+1k;7W3vZX0{ud8^uKX#Rne84a2@ z@6DSx`_sHVX*Rzwp}-?KCLsbufCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm?w80^mS^uj_u2X9Z$*!kQW>;lZp7V`76(>BY`&tIO0PvBF9-Q2Cg z25e%24e&$f;+SbJanl_)vA%J$HpSm(z1I4eIcfS3&pTLoHSC8d?wH9n7fk+| zLoK-~b1a;j4D|AgE-oLaWpEGFlEbf}%NdSwf7~Ii!uVV4)-E5dXKE?jdHqDM`CXon zE4bMj>g!xZ@GF=Mj zkWQ!LUooAI@RJ6u;#ZzO)BtiRjpYC`)*LHXuYrbBQZyz-11%*5ZNV@Ka!u1JCo#I7 zk)c`n)tA)C01Ue+_TDog*L<$x!x4TDZo|SCSX~XkM)lvu}rK-G=A!Yzcj&# zWf{bN6y3o%vG*Xl+Z3{1l!`o0VB*-n+xSrWO}THW;Z>5j-p{Mcb5Jm^5c?HFLwhHR z_AwuN6|}`-F^dI2G;-cp3?i`NmdAU8mlLlhAGKyO^0KDb&n?-y+OOCvcrlj#@%^TA zF~Lx^hjP$w*(7r~W@6ZBrFsYZ=~TC|0ika8yUme!9~X3B=XX{4M(Mu`?bq9=PyLIZ9)JiC0U|&IhyW2F0z`la5CI}U1c(3; eAOb{y2oM1xKm>>Y5g-CY;D1KoyWo}9&ERhfaGR+B literal 0 HcmV?d00001 diff --git a/pal_apu_tests/readme.txt b/pal_apu_tests/readme.txt new file mode 100644 index 0000000..611800d --- /dev/null +++ b/pal_apu_tests/readme.txt @@ -0,0 +1,173 @@ +PAL NES APU Tests +----------------- +These tests verify the PAL APU's frame sequencer timing. They have been tested +on a PAL NES and all give a passing result. + +Each .nes file runs several tests and reports the result on screen and by +beeping a number of times. See below for the meaning of failure codes for each +test. It's best to run the tests in order, because later tests depend on things +tested by earlier tests and will give erroneous results if any earlier ones +failed. + +Source code for each test is included, and most tests are clearly divided into +sections. Support code is also included, but it runs on a custom devcart and +assembler so it will require some effort to assemble. Contact me if you'd like +assistance porting them to your setup. + + +Frame sequencer timing +---------------------- +See blargg_apu_2005.07.30 for more information about frame sequencer timing +subtleties. This only lists timing differences. + +Mode 0: 4-step sequence + +Action Envelopes & Length Counter& Interrupt Delay to next + Linear Counter Sweep Units Flag NTSC PAL +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +$4017=$00 - - - 7459 8315 +Step 1 Clock - - 7456 8314 +Step 2 Clock Clock - 7458 8312 +Step 3 Clock - - 7458 8314 +Step 4 Clock Clock Set if enabled 7458 8314 + + +Mode 1: 5-step sequence + +Action Envelopes & Length Counter& Interrupt Delay to next + Linear Counter Sweep Units Flag NTSC PAL +- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +$4017=$80 - - - 1 1 +Step 1 Clock Clock - 7458 8314 +Step 2 Clock - - 7456 8314 +Step 3 Clock Clock - 7458 8312 +Step 4 Clock - - 7458 8314 +Step 5 - - - 7452 8312 + +Note: the IRQ flag is actually effectively set three clocks in a row, starting +one clock earlier than shown. NTSC and PAL times shown for comparison. + + +01.len_ctr +---------- +Tests basic length counter operation + +1) Passed tests +2) Problem with length counter load or $4015 +3) Problem with length table, timing, or $4015 +4) Writing $80 to $4017 should clock length immediately +5) Writing $00 to $4017 shouldn't clock length immediately +6) Clearing enable bit in $4015 should clear length counter +7) When disabled via $4015, length shouldn't allow reloading +8) Halt bit should suspend length clocking + + +02.len_table +------------ +Tests all length table entries. + +1) Passed +2) Failed. Prints four bytes $II $ee $cc $02 that indicate the length load +value written (ll), the value that the emulator uses ($ee), and the correct +value ($cc). + + +03.irq_flag +----------- +Tests basic operation of frame irq flag. + +1) Tests passed +2) Flag shouldn't be set in $4017 mode $40 +3) Flag shouldn't be set in $4017 mode $80 +4) Flag should be set in $4017 mode $00 +5) Reading flag clears it +6) Writing $00 or $80 to $4017 doesn't affect flag +7) Writing $40 or $c0 to $4017 clears flag + + +04.clock_jitter +--------------- +Tests for APU clock jitter. Also tests basic timing of frame irq flag since +it's needed to determine jitter. It's OK if you don't implement jitter, in +which case you'll get error #5, but you can still run later tests without +problem. + +1) Passed tests +2) Frame irq is set too soon +3) Frame irq is set too late +4) Even jitter not handled properly +5) Odd jitter not handled properly + + +05.len_timing_mode0 +------------------- +Tests length counter timing in mode 0. + +1) Passed tests +2) First length is clocked too soon +3) First length is clocked too late +4) Second length is clocked too soon +5) Second length is clocked too late +6) Third length is clocked too soon +7) Third length is clocked too late + + +06.len_timing_mode1 +------------------- +Tests length counter timing in mode 1. + +1) Passed tests +2) First length is clocked too soon +3) First length is clocked too late +4) Second length is clocked too soon +5) Second length is clocked too late +6) Third length is clocked too soon +7) Third length is clocked too late + + +07.irq_flag_timing +------------------ +Frame interrupt flag is set three times in a row 33255 clocks after writing +$4017 with $00. + +1) Success +2) Flag first set too soon +3) Flag first set too late +4) Flag last set too soon +5) Flag last set too late + + +08.irq_timing +------------- +IRQ handler is invoked at minimum 33257 clocks after writing $00 to $4017. + +1) Passed tests +2) Too soon +3) Too late +4) Never occurred + + +10.len_halt_timing +------------------ +Changes to length counter halt occur after clocking length, not before. + +1) Passed tests +2) Length shouldn't be clocked when halted at 16628 +3) Length should be clocked when halted at 16629 +4) Length should be clocked when unhalted at 16628 +5) Length shouldn't be clocked when unhalted at 16629 + + +11.len_reload_timing +-------------------- +Write to length counter reload should be ignored when made during length +counter clocking and the length counter is not zero. + +1) Passed tests +2) Reload just before length clock should work normally +3) Reload just after length clock should work normally +4) Reload during length clock when ctr = 0 should work normally +5) Reload during length clock when ctr > 0 should be ignored + +-- +Shay Green diff --git a/pal_apu_tests/source/01.len_ctr.a b/pal_apu_tests/source/01.len_ctr.a new file mode 100644 index 0000000..8641eba --- /dev/null +++ b/pal_apu_tests/source/01.len_ctr.a @@ -0,0 +1,87 @@ +; Tests basic length counter operation +; to do: test triangle channel's differing halt bit position + + .include "prefix_apu.a" + +test_name: + .db "APU LENGTH COUNTER",0 + +reset: + jsr setup_apu + + lda #2;) Problem with length counter load or $4015 + sta result + lda #$18 ; length = 2 + sta $4003 + jsr should_be_playing + + lda #3;) Problem with length table, timing, or $4015 + sta result + lda #250 ; delay 250 msec + jsr delay_msec + jsr should_be_silent + + lda #4;) Writing $80 to $4017 should clock length immediately + sta result + lda #$00 ; mode 0 + sta $4017 + lda #$18 ; length = 2 + sta $4003 + lda #$80 ; clock length twice + sta $4017 + sta $4017 + jsr should_be_silent + + lda #5;) Writing $00 to $4017 shouldn't clock length immediately + sta result + lda #$00 ; mode 0 + sta $4017 + lda #$18 ; length = 2 + sta $4003 + lda #$00 ; write mode twice + sta $4017 + sta $4017 + jsr should_be_playing + + lda #6;) Clearing enable bit in $4015 should clear length counter + sta result + lda #$18 ; length = 2 + sta $4003 + lda #$00 + sta $4015 + lda #$01 + sta $4015 + jsr should_be_silent + + lda #7;) When disabled via $4015, length shouldn't allow reloading + sta result + lda #$00 + sta $4015 + lda #$18 ; attempt to reload + sta $4003 + lda #$01 + sta $4015 + jsr should_be_silent + + lda #8;) Halt bit should suspend length clocking + sta result + lda #$30 ; halt length + sta $4000 + lda #$18 ; length = 2 + sta $4003 + lda #$80 ; attempt to clock length twice + sta $4017 + sta $4017 + jsr should_be_playing + + jmp tests_passed + +should_be_playing: + lda $4015 + and #$01 + jmp error_if_eq + +should_be_silent: + lda $4015 + and #$01 + jmp error_if_ne diff --git a/pal_apu_tests/source/02.len_table.a b/pal_apu_tests/source/02.len_table.a new file mode 100644 index 0000000..222b953 --- /dev/null +++ b/pal_apu_tests/source/02.len_table.a @@ -0,0 +1,49 @@ +; Tests all length table entries. +; +; 1) Passed +; 2) Failed. Prints four bytes $II $ee $cc $02 that indicate the length +; load value written (ll), the value that the emulator uses ($ee), and the +; correct value ($cc). + + .include "prefix_apu.a" + +; Zero-page +entry = 10 + +test_name: + .db "APU LENGTH TABLE",0 + +reset: + jsr setup_apu + + lda #31 + sta entry +loop: lda #$00 ; sync apu + sta $4017 + lda entry + asl a + asl a + asl a + sta $4003 ; load length + lda #$01 ; check resulting length + jsr count_length + ldx entry + cmp table,x + bne error + dec entry + bpl loop + + jmp tests_passed + +error: + inx + inx + txa + sta result + jmp report_final_result + +table: + .byte 10, 254, 20, 2, 40, 4, 80, 6 + .byte 160, 8, 60, 10, 14, 12, 26, 14 + .byte 12, 16, 24, 18, 48, 20, 96, 22 + .byte 192, 24, 72, 26, 16, 28, 32, 30 diff --git a/pal_apu_tests/source/03.irq_flag.a b/pal_apu_tests/source/03.irq_flag.a new file mode 100644 index 0000000..1346ca3 --- /dev/null +++ b/pal_apu_tests/source/03.irq_flag.a @@ -0,0 +1,80 @@ +; Tests basic operation of frame irq flag. + + .include "prefix_apu.a" + +test_name: + .db "APU FRAME IRQ FLAG",0 + +reset: + jsr setup_apu + + lda #2;) Flag shouldn't be set in $4017 mode $40 + sta result + lda #$40 + sta $4017 + lda #20 + jsr delay_msec + jsr should_be_clear + + lda #3;) Flag shouldn't be set in $4017 mode $80 + sta result + lda #$80 + sta $4017 + lda #20 + jsr delay_msec + jsr should_be_clear + + lda #4;) Flag should be set in $4017 mode $00 + sta result + lda #$00 + sta $4017 + lda #20 + jsr delay_msec + jsr should_be_set + + lda #5;) Reading flag clears it + sta result + lda #$00 + sta $4017 + lda #20 + jsr delay_msec + lda $4015 + jsr should_be_clear + + lda #6;) Writing $00 or $80 to $4017 doesn't affect flag + sta result + lda #$00 + sta $4017 + lda #20 + jsr delay_msec + lda #$00 + sta $4017 + lda #$80 + sta $4017 + jsr should_be_set + + lda #7;) Writing $40 or $c0 to $4017 clears flag + sta result + lda #$00 + sta $4017 + lda #20 + jsr delay_msec + lda #$40 + sta $4017 + lda #$00 + sta $4017 + jsr should_be_clear + + jmp tests_passed + +; Report error if flag isn't clear +should_be_clear: + lda $4015 + and #$40 + jmp error_if_ne + +; Report error if flag isn't set +should_be_set: + lda $4015 + and #$40 + jmp error_if_eq diff --git a/pal_apu_tests/source/04.clock_jitter.a b/pal_apu_tests/source/04.clock_jitter.a new file mode 100644 index 0000000..86528d4 --- /dev/null +++ b/pal_apu_tests/source/04.clock_jitter.a @@ -0,0 +1,81 @@ +; Tests jitter where write to $4017 is delayed by one +; clock if it's on an odd clock. + .include "prefix_apu.a" + +jitter = 1 + +; remove indented delays for NTSC timing + +test_name: + .db "APU CLOCK JITTER",0 + +reset: + jsr setup_apu + + lda #2;) Frame irq is set too soon + sta result + lda #$40 ; clear frame irq flag + sta $4017 + lda #$00 ; begin mode 0, frame irq enabled + sta $4017 + ldy #48 ; 29826 delay + lda #123 + jsr delay_ya1 + ldy #26 ; 3424 delay + lda #25 + jsr delay_ya1 + lda $4015 ; read at 33253 + and #$40 + jsr error_if_ne + + lda #3;) Frame irq is set too late + sta result + lda #$40 ; clear frame irq flag + sta $4017 + lda #$00 ; begin mode 0, frame irq enabled + sta $4017 + ldy #48 ; 29828 delay + lda #123 + jsr delay_ya3 + ldy #26 ; 3424 delay + lda #25 + jsr delay_ya1 + lda $4015 ; read at 33255 + and #$40 + jsr error_if_eq + + lda #4;) Even jitter not handled properly + sta result + jsr get_jitter + sta 0 should be ignored + sta result + jsr sync_apu + lda #$38 ; length = 6 + sta reload + lda #$40 ; begin mode 0 + sta $4017 + ldy #205 ; 16623 delay + lda #15 + jsr delay_ya1 + lda #$18 ; try to reload counter with 2 + sta reload ; write at 16629 + lda #mask + jsr count_length + cmp #5 ; should have ignored reload + jsr error_if_ne + + jmp tests_passed diff --git a/pal_apu_tests/source/console.a b/pal_apu_tests/source/console.a new file mode 100644 index 0000000..38cdc5b --- /dev/null +++ b/pal_apu_tests/source/console.a @@ -0,0 +1,108 @@ +; Simple text console using NES PPU. + +console_pos = $7f2 +console_pos_h = $7f3 + +; Print char A to console +; Preserved: A, X, Y +print_char: + jsr wait_vbl ; wait for safe access +print_char_no_wait: + pha + lda console_pos_h + sta $2006 + inc console_pos + lda console_pos + sta $2006 + lda #0 ; restore scroll + sta $2005 + sta $2005 + pla + sta $2007 + rts + .code + +; Go to next line +; Preserved: A, X, Y +console_newline: + pha + lda console_pos + and #$e0 + clc + adc #$21 + sta console_pos + lda console_pos_h + adc #0 + sta console_pos_h + pla + rts + .code + +; Initialize console +init_console: + lda #$81 + sta console_pos + lda #$20 + sta console_pos_h + + jsr wait_vbl ; init ppu + lda #0 + sta $2000 + sta $2001 + + lda #$3f ; load palette + jsr set_vpage + lda #15 ; bg + ldx #48 ; fg + ldy #8 +pal: sta $2007 + stx $2007 + stx $2007 + stx $2007 + dey + bne pal + + lda #$02 ; load tiles + jsr set_vpage + lda #chr_data.lsb + sta <$f0 + lda #chr_data.msb + sta <$f1 + ldy #0 + lda #59 ; 59 chars in data + sta <$f2 +chr_loop: + ldx #8 + lda #0 +: sta $2007 + dex + bne - + + ldx #8 +: lda ($f0),y + iny + sta $2007 + dex + bne - + + tya + bne + + inc <$f1 +: dec <$f2 + bne chr_loop + + lda #32 + jsr fill_nametable + + jsr wait_vbl ; enable ppu + lda #0 + sta $2005 + sta $2005 + lda #$0a + sta $2001 + rts + .code + +chr_data: + .incbin "chr.bin" + diff --git a/pal_apu_tests/source/debug.a b/pal_apu_tests/source/debug.a new file mode 100644 index 0000000..b53f49b --- /dev/null +++ b/pal_apu_tests/source/debug.a @@ -0,0 +1,156 @@ +; Simple debugging utilities for reporting events and state. +; Text output is sent to debug_char and debug_char_nowait. + +; Beep A times. Made to require minimal features from APU. +debug_beeps: +beep_loop: + pha + + lda #1 ; set up square 1 + sta $4015 + sta $4003 + sta $4001 + sta $4002 + + lda #$0f ; fade volume +: pha + eor #$30 + sta $4000 + lda #8 + jsr delay_msec + pla + clc + adc #-1 + bpl - + + lda #0 + sta $4015 ; silence square for a bit + lda #120 + jsr delay_msec + + pla + clc + adc #-1 + bne beep_loop + rts + .code + +; Print indicated register to console as $hh +; Preserved: A, X, Y, P +print_a: + php + jsr debug_byte + plp + rts + .code + +print_x: + php + pha + txa + jsr debug_byte + pla + plp + rts + .code + +print_y: + php + pha + tya + jsr debug_byte + pla + plp + rts + .code + +print_s: + php + pha + txa + pha + tsx + txa + jsr debug_byte + pla + tax + pla + plp + rts + .code + +print_p: + php + pha + php + pla + jsr debug_byte + pla + plp + rts + .code + +print_ay: + php + pha + lda #36 + jsr debug_char + pla + pha + jsr hex_byte + tya + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + plp + rts + .code + +print_newline: + jmp debug_newline + .code + +; Print address YA to console as $hhhh +; Preserved: A, X, Y +debug_addr: + pha + lda #36 ; '$' + jsr debug_char + tya + jsr hex_byte + jmp debug_byte_impl + .code + +; Print byte A to console as $hh +; Preserved: A, X, Y +debug_byte: + pha + lda #36 ; '$' + jsr debug_char +debug_byte_impl: + pla + pha + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + rts + +hex_byte: + pha + lsr a + lsr a + lsr a + lsr a + jsr nybble + pla + and #$0f +nybble: + cmp #10 + bcc not_letter + adc #6 ; relies on carry being set +not_letter: + adc #$30 + jmp debug_char_no_wait + .code diff --git a/pal_apu_tests/source/delays.a b/pal_apu_tests/source/delays.a new file mode 100644 index 0000000..0a5f2cb --- /dev/null +++ b/pal_apu_tests/source/delays.a @@ -0,0 +1,122 @@ +; Delays specified in milliseconds, tenths of a millisecond, +; tens of milliseconds, and CPU clocks. + +; TODO: delay loops that take only a single count + +; Delay for almost A milliseconds (A * 0.999009524 msec) +; Preserved: X, Y +delay_msec: + pha ; 3 + lda #253 ; 2 + sec ; 2 +delay_msec_: + nop ; 2 + adc #-2 ; 2 + bne delay_msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_msec ; 3 + rts + .code + +; Delay for almost 'A / 10' milliseconds (A * 0.099453968 msec) +; Preserved: X, Y +delay_01msec: + pha ; 3 + lda #18 ; 2 + sec ; 2 +delay_01msec_: + nop ; 2 + nop ; 2 + adc #-2 ; 2 + bne delay_01msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_01msec ; 3 + rts + .code + +; Delay for almost A*10 milliseconds +; Preserved: X, Y +delay_10msec: + pha + lda #10 + jsr delay_msec + pla + clc + adc #-1 + bne delay_10msec + rts + .code + +; Delay n clocks +; Preserved: P, A, X, Y +delay_32: nop +delay_30: nop +delay_28: nop +delay_26: nop +delay_24: nop +delay_22: nop +delay_20: nop +delay_18: nop +delay_16: nop +delay_14: nop +delay_12: rts + +delay_33: nop +delay_31: nop +delay_29: nop +delay_27: nop +delay_25: nop +delay_23: nop +delay_21: nop +delay_19: nop +delay_17: beq + ; 5 +: bne + +: rts ; 6 + .code + +; Delay (5 * A + 6) * Y + 7 + n clocks. Use delay_ya +; command-line tool to generate proper code to call this. +delay_ya11: + .db $a2 ; 1 ldx #imm +delay_ya10: + .db $a2 ; 1 ldx #imm +delay_ya9: + .db $a2 ; 1 ldx #imm +delay_ya8: + .db $a2 ; 1 ldx #imm +delay_ya7: + .db $a2 ; 1 ldx #imm +delay_ya6: + .db $a2 ; 1 ldx #imm +delay_ya5: + .db $a2 ; 1 ldx #imm +delay_ya4: + .db $a2 ; 1 ldx #imm +delay_ya3: + .db $a2 ; 1 ldx #imm +delay_ya2: + .db $a2 ; 1 ldx #imm +delay_ya1: + .db $a6 ; 1 ldx zp +delay_ya0: + nop ; 2 +delay_ya: + ; 2 lda # + ; 2 ldy # + ; 6 jsr + tax ; *2 +delay_yax: + dex ; **2 + bne delay_yax ; **3 + ; *-1 + dey ; *2 + bne delay_ya ; *3 + ; -1 + rts ; 6 + .code diff --git a/pal_apu_tests/source/prefix_apu.a b/pal_apu_tests/source/prefix_apu.a new file mode 100644 index 0000000..4994b9d --- /dev/null +++ b/pal_apu_tests/source/prefix_apu.a @@ -0,0 +1,52 @@ + .include "validation.a" + .include "sync_apu.a" + +; Set up APU with square 1 enabled and unhalted +setup_apu: + sei + lda #0 + sta result + lda #$40 ; mode 0, interrupt disabled + sta $4017 + lda #$01 ; enable square 1 + sta $4015 + lda #$10 ; unhalt length + sta $4000 + lda #$7f ; sweep off + sta $4001 + lda #$ff ; period + sta $4002 + rts + .code + +; Count number of length clocks required until $4015 AND A becomes 0 +; then return result in A. +count_length: + ldy #0 + bit $4015 + beq count_length_end + ldx #$c0 +: stx $4017 + iny + beq count_length_overflow + bit $4015 + bne - +count_length_end: + tya + rts +count_length_overflow: + lda #$ff + rts + .code + +; Synchronize with DMC +sync_dmc: + lda #$00 + sta $4010 + lda #1 + sta $4013 + lda #$10 + sta $4015 +: bit $4015 + bne - + rts diff --git a/pal_apu_tests/source/runtime_rom.a b/pal_apu_tests/source/runtime_rom.a new file mode 100644 index 0000000..9aa1ca8 --- /dev/null +++ b/pal_apu_tests/source/runtime_rom.a @@ -0,0 +1,13 @@ +; Build as standalone NES ROM using console for output + + .include "runtime_rom_common.a" + +patch_reset_then_wait: +exit: jmp exit + + .default reset = main + + .org $fffa + .dw nmi + .dw reset + .dw irq diff --git a/pal_apu_tests/source/runtime_rom_common.a b/pal_apu_tests/source/runtime_rom_common.a new file mode 100644 index 0000000..321d462 --- /dev/null +++ b/pal_apu_tests/source/runtime_rom_common.a @@ -0,0 +1,45 @@ + + .include "delays.a" + .include "console.a" + .include "debug.a" + .include "ppu_util.a" + +console_ready = $7f1 + +debug_char: + pha + lda #$a5 + cmp console_ready + beq + + sta console_ready + txa + pha + tya + pha + jsr init_console + pla + tay + pla + tax +: pla + jmp print_char + +debug_newline: + jsr console_newline + jmp console_newline + +debug_char_no_wait: + jmp print_char_no_wait + +init_runtime: +clear_console_ready: + lda #0 + sta console_ready + rts + +forever: + sei ; disable interrupts + lda #0 + sta $2000 + jsr clear_console_ready + jmp exit diff --git a/pal_apu_tests/source/sync_apu.a b/pal_apu_tests/source/sync_apu.a new file mode 100644 index 0000000..d66f3cd --- /dev/null +++ b/pal_apu_tests/source/sync_apu.a @@ -0,0 +1,19 @@ +; Synchronize APU divide-by-two so that an sta $4017 will +; start the frame counter without an extra clock delay. +; Takes 16 msec to execute. +sync_apu: + sei + lda #$40 ; clear irq flag + sta $4017 + lda #$00 ; mode 0, frame irq enabled + sta $4017 + ldy #62 ; 33251 delay + lda #106 + jsr delay_ya2 + lda $4015 + and #$40 + bne + ; delay extra clock if odd jitter +: lda #$40 ; clear irq flag + sta $4017 + rts + .code diff --git a/pal_apu_tests/source/validation.a b/pal_apu_tests/source/validation.a new file mode 100644 index 0000000..e87fa22 --- /dev/null +++ b/pal_apu_tests/source/validation.a @@ -0,0 +1,128 @@ +; Utilities for test ROMs + +result = $f8 + +default_test_name: + .db 0 + .default test_name = default_test_name + +; Report error if branch with given condition would be taken +error_if_ne: + bne report_final_result_ + rts +error_if_eq: + beq report_final_result_ + rts +error_if_mi: + bmi report_final_result_ + rts +error_if_pl: + bpl report_final_result_ + rts +error_if_cc: + bcc report_final_result_ + rts +error_if_cs: + bcs report_final_result_ + rts +error_if_vc: + bvc report_final_result_ + rts +error_if_vs: + bvs report_final_result_ + rts + +; Report passing result +tests_passed: + lda #1 + sta result +; Report final result code and wait forever. +; To have a custom string printed as the test name, +; define the label test_name to a null-terminated string: +; test_name: .db "TEST NAME",0 +report_final_result: +report_final_result_: + sei ; disable interrupts + lda #0 + sta $2000 + jsr init_runtime + + lda test_name + beq no_name + jsr debug_char + ldx #1 +: lda test_name,x + beq no_name + jsr debug_char_no_wait + inx + jmp - + +no_name: + jsr debug_newline + + lda result + bne + + ldx #internal_error_str.msb + ldy #internal_error_str.lsb + jsr print_str + jmp forever +: cmp #1 + beq test_passed + + ldx #failed_str.msb + ldy #failed_str.lsb + jsr print_str + + lda result + cmp #10 + bcc + + clc + adc #-10 + pha + lda #'1' + jsr debug_char_no_wait + pla +: clc + adc #'0' + jsr debug_char_no_wait +report_beeps: + lda result + jsr debug_beeps + jmp forever + +test_passed: + ldx #passed_str.msb + ldy #passed_str.lsb + jsr print_str + jmp report_beeps + +passed_str: + .db "PASSED",0 +failed_str: + .db "FAILED: #",0 +internal_error_str: + .db "INTERNAL ERROR",0 + .code + +; Print null-terminated string at X*$100+Y +print_str: + sty <0 + stx <1 + jsr wait_vbl + ldy #0 + lda (0),y +: iny + jsr debug_char_no_wait + lda (0),y + bne - + rts + .code + + .default nmi = default_nmi + .default irq = default_irq + .code +default_irq: + bit $4015 +default_nmi: + rti + diff --git a/ppu_open_bus/ppu_open_bus.nes b/ppu_open_bus/ppu_open_bus.nes new file mode 100644 index 0000000000000000000000000000000000000000..a02a15d5fef3df5c7ba593e7478cc6fcd44e7085 GIT binary patch literal 40976 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 diff --git a/ppu_open_bus/source/common/ascii.chr b/ppu_open_bus/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/ppu_open_bus/source/common/build_rom.s b/ppu_open_bus/source/common/build_rom.s new file mode 100644 index 0000000..dcb7df5 --- /dev/null +++ b/ppu_open_bus/source/common/build_rom.s @@ -0,0 +1,92 @@ +; Builds program as iNES ROM + +; Default is 16K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +; Move code to $C000 +.segment "DMC" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_ascii_chr + .endif + rts + +post_exit: + jsr set_final_result + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/ppu_open_bus/source/common/console.s b/ppu_open_bus/source/common/console.s new file mode 100644 index 0000000..f2d6c19 --- /dev/null +++ b/ppu_open_bus/source/common/console.s @@ -0,0 +1,224 @@ +; Scrolling text console with line wrapping, 30x29 characters. +; Buffers lines for speed. Will work even if PPU doesn't +; support scrolling (until text reaches bottom). Keeps border +; along bottom in case TV cuts it off. +; +; Defers most initialization until first newline, at which +; point it clears nametable and makes palette non-black. +; +; ** ASCII font must already be in CHR, and mirroring +; must be vertical or single-screen. + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs +console_margin = 1 + +console_buf_size = 32 +console_width = console_buf_size - (console_margin*2) + +zp_byte console_pos +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_buf_size + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + jmp console_clear_line_ + + +; Hides console by blacking palette and disabling PPU. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +console_wait_vbl_: + lda console_scroll + cmp #-1 + jne wait_vbl_optional + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + txa + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldx #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + + ; Clear attributes + lda #0 + ldx #$40 +: sta PPUDATA + dex + bne :- + + pla + tax + jmp console_show + + +; Shows console display +; Preserved: X, Y +console_show: + pha + + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + + lda #$30 ; white + jsr console_load_palette_ + + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + stx console_temp + + ; Newline if buf full and next char isn't space + ldx console_pos + bpl :+ + cmp #' ' + beq @ignore_space + ldx console_temp + jsr console_newline + stx console_temp + ldx console_pos +: + ; Write to buffer + sta console_buf+console_margin,x + dex + stx console_pos + +@ignore_space: + ldx console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_clear_line_ + + ; Scroll up 8 pixels and clear one line AHEAD + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + jsr console_add_8_to_scroll_ + jsr console_flush_a + jmp console_apply_scroll_ + + +; A = (A + 8) % 240 +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_clear_line_: + stx console_temp + + ; Start new clear line + lda #' ' + ldx #console_buf_size-1 +: sta console_buf,x + dex + bpl :- + ldx #console_width-1 + stx console_pos + + ldx console_temp + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + + pla + rts + +console_flush_: + lda console_scroll +console_flush_a: + ; Address line in nametable + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + sta PPUADDR + + ; Copy line + stx console_temp + ldx #console_buf_size-1 +: lda console_buf,x + sta PPUDATA + dex + bpl :- + ldx console_temp + + rts + diff --git a/ppu_open_bus/source/common/crc.s b/ppu_open_bus/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/ppu_open_bus/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/ppu_open_bus/source/common/delay.s b/ppu_open_bus/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/ppu_open_bus/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/ppu_open_bus/source/common/devcart.bin b/ppu_open_bus/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..e8958c60cee839eb37da1072177122577e9b3155 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1{r|t0VFA~KUn`w^MI9FXn9E`R;=(V5s(&Z@SlFb^WXpf00NG! A0ssI2 literal 0 HcmV?d00001 diff --git a/ppu_open_bus/source/common/macros.inc b/ppu_open_bus/source/common/macros.inc new file mode 100644 index 0000000..52982a6 --- /dev/null +++ b/ppu_open_bus/source/common/macros.inc @@ -0,0 +1,169 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro incxy7 + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro diff --git a/ppu_open_bus/source/common/neshw.inc b/ppu_open_bus/source/common/neshw.inc new file mode 100644 index 0000000..bdd4136 --- /dev/null +++ b/ppu_open_bus/source/common/neshw.inc @@ -0,0 +1,37 @@ +; NES I/O locations and masks + +; Clocks per second +.ifndef CLOCK_RATE + CLOCK_RATE = 1789773 ; NTSC +; CLOCK_RATE = 1662607 ; PAL +.endif + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 diff --git a/ppu_open_bus/source/common/ppu.s b/ppu_open_bus/source/common/ppu.s new file mode 100644 index 0000000..21cad12 --- /dev/null +++ b/ppu_open_bus/source/common/ppu.s @@ -0,0 +1,142 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts diff --git a/ppu_open_bus/source/common/print.s b/ppu_open_bus/source/common/print.s new file mode 100644 index 0000000..d2d7b81 --- /dev/null +++ b/ppu_open_bus/source/common/print.s @@ -0,0 +1,225 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + pha + and #$0F + jsr @nibble + pla + rts + +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: Y +print_dec: + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jmp print_char + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/ppu_open_bus/source/common/shell.inc b/ppu_open_bus/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/ppu_open_bus/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/ppu_open_bus/source/common/shell.s b/ppu_open_bus/source/common/shell.s new file mode 100644 index 0000000..fcd49a9 --- /dev/null +++ b/ppu_open_bus/source/common/shell.s @@ -0,0 +1,331 @@ +; Common routines and runtime + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +;**** Special globals **** + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +.segment "NVRAM" + ; Beginning of variables not cleared at startup + nvram_begin: + +;**** Code segment setup **** + +.segment "RODATA" + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +; Move code to $E200 ($200 bytes for text output) +.segment "DMC" + .res $2200 + +; Devcart corrupts byte at $E000 when powering off +.segment "CODE" + nop + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "print.s" +.include "delay.s" +.include "crc.s" +.include "testing.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts + +.endif + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sei + cld + ldx #$FF + txs + pha + + setb SNDCHN,0 + .ifndef BUILD_NSF + setb PPUCTRL,0 + .endif + + pla + pha + jsr report_result + ;jsr clear_nvram ; TODO: was this needed for anything? + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +; Clears $0-($100+S) and nv_ram_end-$7FF +clear_ram: + lda #0 + + ; Main pages + tax +: sta 0,x + sta $300,x + sta $400,x + sta $500,x + sta $600,x + sta $700,x + inx + bne :- + + ; Stack except that above stack pointer + tsx + inx +: dex + sta $100,x + bne :- + + ; BSS except nvram + ldx #<__NVRAM_SIZE__ +: sta __NVRAM_LOAD__,x + inx + bne :- + + rts + + +; Clears nvram +clear_nvram: + ldx #<__NVRAM_SIZE__ + beq @empty + lda #0 +: dex + sta __NVRAM_LOAD__,x + bne :- +@empty: + rts + + +; Prints filename and newline, if available, otherwise nothing. +; Preserved: A, X, Y +print_filename: + .ifdef FILENAME_KNOWN + pha + jsr print_newline + setw addr,filename + jsr print_str_addr + jsr print_newline + pla + .endif + rts + +.pushseg +.segment "RODATA" + ; Filename terminated with zero byte. + filename: + .ifdef FILENAME_KNOWN + .incbin "ram:nes_temp" + .endif + .byte 0 +.popseg + + +;**** ROM-specific **** +.ifndef BUILD_NSF + +.include "ppu.s" + +avoid_silent_nsf: +play_byte: + rts + +; Loads ASCII font into CHR RAM +.macro load_ascii_chr + bit PPUSTATUS + setb PPUADDR,$00 + setb PPUADDR,$00 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page +.endmacro + +; Disables interrupts and loops forever +.ifndef CUSTOM_FOREVER +forever: + sei + lda #0 + sta PPUCTRL +: beq :- + .res $10,$EA ; room for code to run loader +.endif + + +; Default NMI +.ifndef CUSTOM_NMI + zp_byte nmi_count + + nmi: + inc nmi_count + rti + + ; Waits for NMI. Must be using NMI handler that increments + ; nmi_count, with NMI enabled. + ; Preserved: X, Y + wait_nmi: + lda nmi_count + : cmp nmi_count + beq :- + rts +.endif + + +; Default IRQ +.ifndef CUSTOM_IRQ + irq: + bit SNDCHN ; clear APU IRQ flag + rti +.endif + +.endif diff --git a/ppu_open_bus/source/common/testing.s b/ppu_open_bus/source/common/testing.s new file mode 100644 index 0000000..ba41f03 --- /dev/null +++ b/ppu_open_bus/source/common/testing.s @@ -0,0 +1,106 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "RODATA",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing: + jmp init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/ppu_open_bus/source/common/text_out.s b/ppu_open_bus/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/ppu_open_bus/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +Most update a running CRC-32 checksum which can be checked with +check_crc, allowing ALL the output to be checked very easily. If the +checksum doesn't match, it is printed, so you can run the code on a NES +and paste the correct checksum into your code. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported due to their complexity. I +load the code at $E000 since my devcart requires it, and I don't want +the normal ROM to differ in any way from what I've tested. This also +allows easy self-modifying code. + +Some macros are used to make common operations more convenient. The left +is equivalent to the right: + + Macro Equivalent + ------------------------------------- + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + set addr,byte lda #byte + sta addr + + zp_byte name .zeropage + name: .res 1 + .code + + zp_res name,n .zeropage + name: .res n + .code + + bss_res name,n .bss + name: .res n + .code + + for_loop routine,begin,end,step + calls routine with A set to successive values + + loop_n_times routine,count + calls routine with A from 0 to count-1 + +-- +Shay Green diff --git a/ppu_vbl_nmi/ppu_vbl_nmi.nes b/ppu_vbl_nmi/ppu_vbl_nmi.nes new file mode 100644 index 0000000000000000000000000000000000000000..bb3743cba6209bd5c74d8d927b847b7a1b199b59 GIT binary patch literal 262160 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 L_~ZyE|Ns97*yv^o literal 0 HcmV?d00001 diff --git a/ppu_vbl_nmi/readme.txt b/ppu_vbl_nmi/readme.txt new file mode 100644 index 0000000..8b2f22d --- /dev/null +++ b/ppu_vbl_nmi/readme.txt @@ -0,0 +1,255 @@ +NES PPU Tests +------------- +These tests verify the behavior and timing of the NTSC PPU's VBL flag, +NMI enable, and NMI interrupt. Timing is tested to an accuracy of one +PPU clock. Note that often the NES starts up with a different value in +the clock divider, causing PPU timing to be slightly different and fail +some of the tests. These test the timings that have been most fully +documented and emulated. + + +01-vbl_basics +------------- +Tests basic VBL operation and VBL period. + +2) VBL period is way off +3) Reading VBL flag should clear it +4) Writing $2002 shouldn't affect VBL flag +5) $2002 should be mirrored at $200A +6) $2002 should be mirrored every 8 bytes up to $2FFA +7) VBL period is too short with BG off +8) VBL period is too long with BG off + + +02-vbl_set_time +--------------- +Verifies time VBL flag is set. + +Reads $2002 twice and prints VBL flags from +them. Test is run one PPU clock later each time, +around the time the flag is set. + +00 - V +01 - V +02 - V +03 - V ; after some resets this is - - +04 - - ; flag setting is suppressed +05 V - +06 V - +07 V - +08 V - + + +03-vbl_clear_time +----------------- +Tests time VBL flag is cleared. + +Reads $2002 and prints VBL flag. +Test is run one PPU clock later each line, +around the time the flag is cleared. + +00 V +01 V +02 V +03 V +04 V +05 V +06 - +07 - +08 - + + +04-nmi_control +-------------- +Tests immediate NMI behavior when enabling while VBL flag is already set + +2) Shouldn't occur when disabled +3) Should occur when enabled and VBL begins +4) $2000 should be mirrored every 8 bytes +5) Should occur immediately if enabled while VBL flag is set +6) Shouldn't occur if enabled while VBL flag is clear +7) Shouldn't occur again if writing $80 when already enabled +8) Shouldn't occur again if writing $80 when already enabled 2 +9) Should occur again if enabling after disabled +10) Should occur again if enabling after disabled 2 +11) Immediate occurence should be after NEXT instruction + + +05-nmi_timing +------------- +Tests NMI timing. + +Prints which instruction NMI occurred +after. Test is run one PPU clock later +each line. + +00 4 +01 4 +02 4 +03 3 +04 3 +05 3 +06 3 +07 3 +08 3 +09 2 + + +06-suppression +-------------- +Tests behavior when $2002 is read near time +VBL flag is set. + +Reads $2002 one PPU clock later each time. +Prints whether VBL flag read back as set, and +whether NMI occurred. + +00 - N +01 - N +02 - N +03 - N ; normal behavior +04 - - ; flag never set, no NMI +05 V - ; flag read back as set, but no NMI +06 V - +07 V N ; normal behavior +08 V N +09 V N + + +07-nmi_on_timing +---------------- +Tests NMI occurrence when enabled near time +VBL flag is cleared. + +Enables NMI one PPU clock later on each line. +Prints whether NMI occurred. + +00 N +01 N +02 N +03 N +04 N +05 - +06 - +07 - +08 - + + +08-nmi_off_timing +----------------- +Tests NMI occurrence when disabled near time +VBL flag is set. + +Disables NMI one PPU clock later on each line. +Prints whether NMI occurred. + +03 - +04 - +05 - +06 - +07 N +08 N +09 N +0A N +0B N +0C N + + +09-even_odd_frames +------------------ +Tests clock skipped on every other PPU frame when BG rendering +is enabled. + +Tries pattern of BG enabled/disabled during a sequence of +5 frames, then finds how many clocks were skipped. Prints +number skipped clocks to help find problems. + +Correct output: 00 01 01 02 + + +10-even_odd_timing +------------------ +Tests timing of skipped clock every other frame +when BG is enabled. + +Output: 08 08 09 07 + +2) Clock is skipped too soon, relative to enabling BG +3) Clock is skipped too late, relative to enabling BG +4) Clock is skipped too soon, relative to disabling BG +5) Clock is skipped too late, relative to disabling BG + +Multi-tests +----------- +The NES/NSF builds in the main directory consist of multiple sub-tests. +When run, they list the subtests as they are run. The final result code +refers to the first sub-test that failed. For more information about any +failed subtests, run them individually from rom_singles/ and +nsf_singles/. + + +Flashes, clicks, other glitches +------------------------------- +If a test prints "passed", it passed, even if there were some flashes or +odd sounds. Only a test which prints "done" at the end requires that you +watch/listen while it runs in order to determine whether it passed. Such +tests involve things which the CPU cannot directly test. + + +Alternate output +---------------- +Tests generally print information on screen, but also report the final +result audibly, and output text to memory, in case the PPU doesn't work +or there isn't one, as in an NSF or a NES emulator early in development. + +After the tests are done, the final result is reported as a series of +beeps (see below). For NSF builds, any important diagnostic bytes are +also reported as beeps, before the final result. + + +Output at $6000 +--------------- +All text output is written starting at $6004, with a zero-byte +terminator at the end. As more text is written, the terminator is moved +forward, so an emulator can print the current text at any time. + +The test status is written to $6000. $80 means the test is running, $81 +means the test needs the reset button pressed, but delayed by at least +100 msec from now. $00-$7F means the test has completed and given that +result code. + +To allow an emulator to know when one of these tests is running and the +data at $6000+ is valid, as opposed to some other NES program, $DE $B0 +$G1 is written to $6001-$6003. + + +Audible output +-------------- +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason. See the source +code of the test for more information about the meaning of a test code. +They are found after the set_test macro. For example, the cause of test +code 3 would be found in a line containing set_test 3. Examples: + + Tones Binary Decimal Meaning + - - - - - - - - - - - - - - - - - - - - + low 0 0 passed + low high 01 1 failed + low high low 010 2 error 2 + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to prevent the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +-- +Shay Green diff --git a/ppu_vbl_nmi/rom_singles/01-vbl_basics.nes b/ppu_vbl_nmi/rom_singles/01-vbl_basics.nes new file mode 100644 index 0000000000000000000000000000000000000000..baa05915e95532f186b1de11bff85d699a818d28 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/ppu_vbl_nmi/rom_singles/05-nmi_timing.nes b/ppu_vbl_nmi/rom_singles/05-nmi_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..1cc9cd161869d72788319fe6996192e7744a8b96 GIT binary patch literal 40976 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 O01+SpMBx90z`p?cL^Xy0 literal 0 HcmV?d00001 diff --git a/ppu_vbl_nmi/rom_singles/06-suppression.nes b/ppu_vbl_nmi/rom_singles/06-suppression.nes new file mode 100644 index 0000000000000000000000000000000000000000..ac16afae811a5af7ab35a3a0d6e96200d04ef1a1 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/ppu_vbl_nmi/rom_singles/07-nmi_on_timing.nes b/ppu_vbl_nmi/rom_singles/07-nmi_on_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..5eaacc4d7d876f47113fb84995521d79b54df1e5 GIT binary patch literal 40976 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 T5g-CYfCvx)B0vQGUkLmQuEaGS literal 0 HcmV?d00001 diff --git a/ppu_vbl_nmi/rom_singles/08-nmi_off_timing.nes b/ppu_vbl_nmi/rom_singles/08-nmi_off_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..9bb8c2dd3a20facc068d517cfaeed34686147f5e GIT binary patch literal 40976 zcmeI5e{37&8OPtdq)y0O$4L`n$dA52r*&1K9s*=-S!V`CPGveY_+y%wxI*n+iknnv zU`F#I5WOfWGYXoJ!X_ZH8q}-k6ebOAXh@y}R+CxfG-+Mg2CBez9Jhcw3WPK``@VPg zy6MD_CNv3+=W@O8z0do;&-=We_s2=E|LCqAcV4L~3X|6=T||Hg5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y z2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0-uXOBx$lV<6Bj6`!6&{ z%u)V>g4xNxThKSd6jUn}ez3qN3T}}PbS=VTWz1dN)ntWc+irW(_zl93!uJ-;yF~ym$U19tekgKg?3{E*SOm=Q&^`+QLX^!pVFU(O zXWxOTEPU;)w^HI^e*dD`5aC^3 z&&NT@WCk}M2EL~qk9@sVh&I=vLccG_su4WDkb^36rwQJiT@_*i5rGR>+Uj2w(F_^c20BYMeasijuUXp0;| z_Te@RdfQZVXAyo~8{RUW`8N#s_~cM=YV!PS;5eLrGG2_p@>p^9+>~fA@U!t^XgWA= zl`ad4^b!52uCbOqWk3E)mWHq8y0lVPbsd&actML!7tv0a(Qa%oI*d+jQ&;f%$oSKvk%G-8qSdsRs6R|xlOsl{1YZ%`qx(0B1 z-JifVI5Zj?8QPuTv5}GCk*)lWTfWTzogLrmCu9~N7$CANpn;%hMg)3bJ} z{sOcAdVzD-@M!Ft{4Ra)03VGV80FA?vE4(XJU%?acina8EqvFGJNfWX;-TwWFhH8~ zHLKPx*;$a#jeu@k5t#`@N>^^}42L5D-n$suGWiLXdGBJ2wTz~l#K)&3VtdApM(h;| zCQ@1nryIh9wX_;GTQ3WySr~xybEq2Npp-&Ps#&ajsi72{UMD#wPl-V{R&Q(3ff zy3cy=x$cAAD0^$g5D(N5eo$t@TDHd>L!Vy9?Gnhxt7i0?&7R&ZxRE#0dzk{!=E~T0 zTL+t+9*Qr#jt)ixmB_^@WKSR+zMWf}>6u%#ZZ!R9`ToTzY|3zCw>e$4L#UUWu+CxL zhn=YOBUqSGt&EViRSx!|Q%%3OyLkMSZtDYJ%P=@;)G)=~ub6M970sMYtD3nx-JoT( z@r`Dq(Wj*`Pkz2pomQ|fJkd9yKham}!{)y6`HiZ^KdJyHR$7{I^doANG>Y5g-CY zfCvx)B0vO)z<)>JElk!ehzUeGiN}1?)rF?|<+1>%Ym2^-3 z$Jxuz)^N-nV+PK=-=9-Vz9q`U@oT2ZImgG*p0c$oT)mK6t?Zm_Dy`;LcXfp;l`T)Q z*@ozqsCl|^cHJ8{E7o6xi$5Q+UW+!dSFfqYKfURJn)v(lyf1^b`Rzwa3uXN1bjkH) z=sETAB7sW=ABljt82(&MBocNJsVq@T;AT<-+qHgA3gunBH|`AtKaMI=1A#FFC<1j8I#Iz-tU;8 zDjEuE;kt&RCvv4dAtp5t5*;67Qd2o!fAVyVNgeYB`aQW6liJgt$k)&(sVmtPkI0wW zuVq(qNK38d(0(w;q$Xb}B*({7Olm5Z8}oRRXwOmfQ}p%U|7orb8U!kIPpas)-E&s~ z*K6lHn#y^4f-DICj`qig_6}*=nbc4sm#gJ+Oe%sGHy+f}g8?45XO+Qk{iRbA;7cRtwtiQW;BnQ|Q0cY<4N1$M{NxJ)g}dMZT?G zl+Nc0LtF z)nE$E_8?wY8Cv^C0{Lq+DdIxfRzxTEPbL-Cq=>JsE+3S)Ijvx2uOQ!1A9lw;z{jN8 z(*g5E>VE8|fxvzyRr}{N=nJ+$SH=6<>*AMy-iQDZAOb{y2oM1xKm>>Y5g-CYfCvx) VB0vO)01+SpM1Tkof&Ui*{{l8CGC%+T literal 0 HcmV?d00001 diff --git a/ppu_vbl_nmi/rom_singles/09-even_odd_frames.nes b/ppu_vbl_nmi/rom_singles/09-even_odd_frames.nes new file mode 100644 index 0000000000000000000000000000000000000000..50c8e9fa5e64bf4b735472453815e747d44c4d2c GIT binary patch literal 40976 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 M1dsp{_@WT_FL<{bMgRZ+ literal 0 HcmV?d00001 diff --git a/ppu_vbl_nmi/source/01-vbl_basics.s b/ppu_vbl_nmi/source/01-vbl_basics.s new file mode 100644 index 0000000..00174af --- /dev/null +++ b/ppu_vbl_nmi/source/01-vbl_basics.s @@ -0,0 +1,58 @@ +; Tests basic VBL operation and VBL period. + +.include "shell.inc" + +main: set_test 2,"VBL period is way off" + jsr wait_vbl + delay 30111 + lda $2002 + jpl test_failed + + set_test 3,"Reading VBL flag should clear it" + lda $2002 + jmi test_failed + + set_test 4,"Writing $2002 shouldn't affect VBL flag" + jsr wait_vbl + delay 30111 + sta $2002 + lda $2002 + jpl test_failed + + set_test 5,"$2002 should be mirrored at $200A" + jsr wait_vbl + delay 30111 + lda $200A + jpl test_failed + lda $200A + jmi test_failed + + set_test 6,"$2002 should be mirrored every 8 bytes up to $2FFA" + jsr wait_vbl + delay 30111 + lda $2FFA + jpl test_failed + lda $2FFA + jmi test_failed + + delay_msec 1000 + + lda #0 ; BG off + sta $2001 + + ; Delay 60 frames after VBL, then read VBL flag + jsr wait_vbl + delay 29780*60+60/3 + ldx $2002 + delay 5 + lda $2002 + + set_test 7,"VBL period is too short with BG off" + cpx #0 + jmi test_failed + + set_test 8,"VBL period is too long with BG off" + cmp #0 + jpl test_failed + + jmp tests_passed diff --git a/ppu_vbl_nmi/source/02-vbl_set_time.s b/ppu_vbl_nmi/source/02-vbl_set_time.s new file mode 100644 index 0000000000000000000000000000000000000000..c3c21a108c9f4987e7a7457c620017776864a1fd GIT binary patch literal 687 zcma)4O;6)65ak;Gicy5r!=_c5vhA|Hfw*x%2zrfNdrAzB9eG@!|DLf!5E2)nNO^JI z$2`Yd*kLdSg9Op^2)nCWI9T}vhJY|G#8zzK9;GHYZ|b^%_+}J>bQ*?WT%<1r!6Epb z*|EcZ0S`zqnS`SQ?-1_p9zj{JUckzT0Z^(gM^-G6!5`U?mE#l%{FvhG;SVgKVR~J| z9CisTC(uk_l>h*+=^^Ei=T-r^3pea|Ain1?PvVONGBsy0B^oz2KMn(H2zBE9Wy363 zPhc~Fe;J5{ampSwLP;H3n_kQBizlbr*S%d(DGJd`=KgNnC_Cx4IOC>QKG3DkwN#UaxNIdc6_Fb3bGPwS!C*I4WNp zope+57$%v|b7(_y&vOKHn$LrK8kgyF@K&RhCsE`FG?$z8iYLBl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/ppu_vbl_nmi/source/common/bootloader.bin b/ppu_vbl_nmi/source/common/bootloader.bin new file mode 100644 index 0000000000000000000000000000000000000000..58cb3a254e1ea2a3ec81e02db9854df9f3e36fd7 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wG3YQU0Fl6NFtM_+mr-FQM=xVTFT(<^3BP&}Kl^{|zn{3nt5;f688$HcNC9;|VA;TW*OBqURge*vR$Msm!_IJ2`9m6Zn?3)5 FAOI5Sg6{wT literal 0 HcmV?d00001 diff --git a/ppu_vbl_nmi/source/common/build_rom.s b/ppu_vbl_nmi/source/common/build_rom.s new file mode 100644 index 0000000..9ddc02c --- /dev/null +++ b/ppu_vbl_nmi/source/common/build_rom.s @@ -0,0 +1,94 @@ +; Builds program as iNES ROM + +; Default is 32K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +.ifndef LARGER_ROM_HACK +.segment "CODE" + .res $4000 +.endif + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_chr_ram + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; Standard NES bootloader to help with devcart. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "bootloader.bin" + +.code +.align 256 diff --git a/ppu_vbl_nmi/source/common/console.s b/ppu_vbl_nmi/source/common/console.s new file mode 100644 index 0000000..508898b --- /dev/null +++ b/ppu_vbl_nmi/source/common/console.s @@ -0,0 +1,328 @@ +; Scrolling text console with word wrapping, 30x29 characters. +; +; * Defers PPU initialization until first flush/ newline. +; * Works even if PPU doesn't support scrolling. +; * Keeps border around edge of screen for TV overscan. +; * Requires vertical or single-screen mirroring. +; * Requires ASCII font in CHR. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: A, X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/ppu_vbl_nmi/source/common/crc.s b/ppu_vbl_nmi/source/common/crc.s new file mode 100644 index 0000000..625bf1e --- /dev/null +++ b/ppu_vbl_nmi/source/common/crc.s @@ -0,0 +1,115 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 ; Current CRC-32; no need to invert +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 360 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 + sec +@bit: ror checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcs :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 + sec +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ldx #3 +: lda checksum,x + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ldy #3 +: lda (ptr),y + cmp checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/ppu_vbl_nmi/source/common/delay.s b/ppu_vbl_nmi/source/common/delay.s new file mode 100644 index 0000000..e8d7278 --- /dev/null +++ b/ppu_vbl_nmi/source/common/delay.s @@ -0,0 +1,202 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_res delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +; Delays approximately n milliseconds (1/1000 second), +; without caring whether it's NTSC or PAL. +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec_approx n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*1726190+500)/1000 +.endmacro + + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/ppu_vbl_nmi/source/common/macros.inc b/ppu_vbl_nmi/source/common/macros.inc new file mode 100644 index 0000000..dc968ad --- /dev/null +++ b/ppu_vbl_nmi/source/common/macros.inc @@ -0,0 +1,321 @@ +BLARGG_MACROS_INCLUDED = 1 + +; Allows extra error checking with modified version +; of ca65. Otherwise acts like a constant of 0. +ADDR = 0 + +; Switches to Segment and places Line there. +; Line can be an .align directive, .res, .byte, etc. +; Examples: +; seg_data BSS, .align 256 +; seg_data RODATA, {message: .byte "Test",0} +.macro seg_data Segment, Line + .pushseg + .segment .string(Segment) + Line + .popseg +.endmacro + +; Reserves Size bytes in Segment for Name. +; If Size is omitted, reserves one byte. +.macro seg_res Segment, Name, Size + .ifblank Size + seg_data Segment, Name: .res 1 + .else + seg_data Segment, Name: .res Size + .endif +.endmacro + +; Shortcuts for zeropage, bss, and stack +.define zp_res seg_res ZEROPAGE, +.define nv_res seg_res NVRAM, +.define bss_res seg_res BSS, +.define sp_res seg_res STACK, +.define zp_byte zp_res + +; Copies byte from Src to Addr. If Src begins with #, +; it sets Addr to the immediate value. +; Out: A = byte copied +; Preserved: X, Y +.macro mov Addr, Src + lda Src + sta Addr +.endmacro + +; Copies word from Src to Addr. If Src begins with #, +; it sets Addr the immediate value. +; Out: A = high byte of word +; Preserved: X, Y +.macro movw Addr, Src + .if .match( .left( 1, {Src} ), # ) + lda #<(.right( .tcount( {Src} )-1, {Src} )) + sta Addr + lda #>(.right( .tcount( {Src} )-1, {Src} )) + sta 1+(Addr) + .else + lda Src + sta Addr + lda 1+(Src) + sta 1+(Addr) + .endif +.endmacro + +; Increments 16-bit value at Addr. +; Out: EQ/NE based on resulting 16-bit value +; Preserved: A, X, Y +.macro incw Addr + .local @Skip + inc Addr + bne @Skip + inc 1+(Addr) +@Skip: +.endmacro + +; Adds Src to word at Addr. +; Out: A = high byte of result, carry set appropriately +; Preserved: X, Y +.macro addw Addr, Src + .if .match( .left( 1, {Src} ), # ) + addw_ Addr,(.right( .tcount( {Src} )-1, {Src} )) + .else + lda Addr + clc + adc Src + sta Addr + + lda 1+(Addr) + adc 1+(Src) + sta 1+(Addr) + .endif +.endmacro +.macro addw_ Addr, Imm + lda Addr + clc + adc #> 8) <> 0 + lda 1+(Addr) + adc #>Imm + sta 1+(Addr) + ;.else + ; .local @Skip + ; bcc @Skip + ; inc 1+(Addr) + ;@Skip: + ;.endif +.endmacro + +; Splits list of words into tables of low and high bytes +; Example: split_words foo, {$1234, $5678} +; expands to: +; foo_l: $34, $78 +; foo_h: $12, $56 +; foo_count = 2 +.macro split_words Label, Words + .ident (.concat (.string(Label), "_l")): .lobytes Words + .ident (.concat (.string(Label), "_h")): .hibytes Words + .ident (.concat (.string(Label), "_count")) = * - .ident (.concat (.string(Label), "_h")) +.endmacro + +.macro SELECT Bool, True, False, Extra + .ifndef Bool + False Extra + .elseif Bool <> 0 + True Extra + .else + False Extra + .endif +.endmacro + +.macro DEFAULT Name, Value + .ifndef Name + Name = Value + .endif +.endmacro + +.ifp02 + ; 6502 doesn't define these alternate names + .define blt bcc + .define bge bcs +.endif +.define jlt jcc +.define jge jcs + +; Jxx Target = Bxx Target, except it can go farther than +; 128 bytes. Implemented via branch around a JMP. + +; Don't use ca65's longbranch, because they fail for @labels +;.macpack longbranch + +.macro jeq Target + bne *+5 + jmp Target +.endmacro + +.macro jne Target + beq *+5 + jmp Target +.endmacro + +.macro jmi Target + bpl *+5 + jmp Target +.endmacro + +.macro jpl Target + bmi *+5 + jmp Target +.endmacro + +.macro jcs Target + bcc *+5 + jmp Target +.endmacro + +.macro jcc Target + bcs *+5 + jmp Target +.endmacro + +.macro jvs Target + bvc *+5 + jmp Target +.endmacro + +.macro jvc Target + bvs *+5 + jmp Target +.endmacro + + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data RODATA,{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + .local @for_loop + lda #start +@for_loop: + pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne @for_loop +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + .local @for_loop_skip + .local @for_loop + ldy #>(start) + lda #<(start) +@for_loop: + tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc @for_loop_skip + iny +.else + bcs @for_loop_skip + dey +.endif +@for_loop_skip: + cmp #<((end)+(step)) + bne @for_loop + cpy #>((end)+(step)) + bne @for_loop +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro + +; Negates A and adds it to operand +.macro subaf Operand + eor #$FF + sec + adc Operand +.endmacro + +; Initializes CPU registers to reasonable values +; Preserved: A, Y +.macro init_cpu_regs + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + .ifndef BUILD_NSF + inx + stx PPUCTRL + .endif +.endmacro diff --git a/ppu_vbl_nmi/source/common/neshw.inc b/ppu_vbl_nmi/source/common/neshw.inc new file mode 100644 index 0000000..d636a97 --- /dev/null +++ b/ppu_vbl_nmi/source/common/neshw.inc @@ -0,0 +1,56 @@ +; NES I/O locations and masks + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.ifndef REGION_FREE + .ifndef PAL_ONLY + .ifndef NTSC_ONLY + NTSC_ONLY = 1 + .endif + .endif +.else + .ifdef NTSC_ONLY + .error "NTSC_ONLY and REGION_FREE defined" + .endif + .ifdef PAL_ONLY + .error "PAL_ONLY and REGION_FREE defined" + .endif +.endif + +.ifdef NTSC_ONLY + CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.endif + +.ifdef PAL_ONLY + CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/ppu_vbl_nmi/source/common/ppu.s b/ppu_vbl_nmi/source/common/ppu.s new file mode 100644 index 0000000..4827b3e --- /dev/null +++ b/ppu_vbl_nmi/source/common/ppu.s @@ -0,0 +1,203 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts + + +.macro check_ppu_region_ Len + ; Delays since VBL began + jsr wait_vbl_optional ; 10 average + delay Len - 18 - 200 + lda PPUSTATUS ; 4 + bmi @ok ; 2 + delay 200 + ; Next VBL should roughly begin here if it's the + ; one we are detecting + delay 200 + lda PPUSTATUS ; 2 + bpl @ok +.endmacro + +check_ppu_region: + +.ifndef REGION_FREE +.ifdef PAL_ONLY + check_ppu_region_ 29781 + print_str {newline,"Note: This test is meant for PAL NES only.",newline,newline} +.endif + +.ifdef NTSC_ONLY + check_ppu_region_ 33248 + print_str {newline,"Note: This test is meant for NTSC NES only.",newline,newline} +.endif +.endif +@ok: rts + + +; Loads ASCII font into CHR RAM and fills rest with $FF +.macro load_chr_ram + bit PPUSTATUS + setb PPUADDR,0 + setb PPUADDR,0 + + ; Copy ascii_chr to 0 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page + + ; Fill rest + lda #$FF +: sta PPUDATA + iny + bne :- + inx + cpx #$20 + bne :- +.endmacro diff --git a/ppu_vbl_nmi/source/common/print.s b/ppu_vbl_nmi/source/common/print.s new file mode 100644 index 0000000..976fd9c --- /dev/null +++ b/ppu_vbl_nmi/source/common/print.s @@ -0,0 +1,278 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr print_nibble_ + pla + + pha + and #$0F + jsr print_nibble_ + pla + rts + +print_nibble_: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints low 4 bits of A as single hex character +; Preserved: A, X, Y +print_nibble: + pha + and #$0F + jsr update_crc + jsr print_nibble_ + pla + rts + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + bne :+ + inc addr+1 +: rts + + +; Prints A as 1-3 digit decimal. +; In: A = MSB +; Preserved: A, X, Y +print_dec: + sta print_temp_ + pha + txa + pha + tya + pha + ldy print_temp_ + lda #0 + sta print_temp_ + tya + jmp :+ + + +; Prints 16-bit AY as 1-5 digit decimal. +; Preserved: A, X, Y +print_ay_dec: + jsr update_crc + sta print_temp_ + pha + txa + pha + tya + pha +: jsr update_crc + + ; Strip leading zeroes + ldx #6 +: dex + cmp @lsb-1,x + lda print_temp_ + sbc @msb-1,x + tya + bcc :- + bcs @non_zero + + ; Print remaining digits + +@more: ; Commit subtraction + iny + sta print_temp_ + pla + + ; Subtract +@digit: sbc @lsb,x + pha + lda print_temp_ + sbc @msb,x + bcs @more + + ; Print digit and undo subtraction + tya + jsr print_char_ + pla + clc + adc @lsb,x +@non_zero: + sec + ldy #'0' + dex + bne @digit + + ora #'0' + jsr print_char_ + + pla + tay + pla + tax + pla + rts + +@lsb: .byte 0,<10,<100,<1000,<10000 +@msb: .byte 0,>10,>100,>1000,>10000 + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/ppu_vbl_nmi/source/common/shell.inc b/ppu_vbl_nmi/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/ppu_vbl_nmi/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/ppu_vbl_nmi/source/common/shell.s b/ppu_vbl_nmi/source/common/shell.s new file mode 100644 index 0000000..c5c152f --- /dev/null +++ b/ppu_vbl_nmi/source/common/shell.s @@ -0,0 +1,182 @@ +; Shell that sets up testing framework and calls main + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +; Move code from $C000 to $E200, to accommodate my devcarts +.ifndef LARGER_ROM_HACK +.segment "CODE" + .res $2200 +.endif + +; Put shell code after user code, so user code is in more +; consistent environment +.segment "CODE2" + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + init_cpu_regs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell without affecting current set_test values +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + ; Clear APU registers + lda #0 + sta $4015 + ldx #$13 +: sta $4000,x + dex + bpl :- + + ; CPU registers + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sta temp + init_cpu_regs + setb SNDCHN,0 + lda temp + + jsr report_result + pha + jsr check_ppu_region + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + + +;**** Other routines **** + +.include "shell_misc.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts +.endif diff --git a/ppu_vbl_nmi/source/common/shell_misc.s b/ppu_vbl_nmi/source/common/shell_misc.s new file mode 100644 index 0000000..cf95e5a --- /dev/null +++ b/ppu_vbl_nmi/source/common/shell_misc.s @@ -0,0 +1,226 @@ +; Reports internal error and exits program +internal_error: +assert_failed: + pla + tay + pla + init_cpu_regs + print_str newline,"internal error, PC=" + jsr print_hex + jsr print_y + lda #255 + jmp exit + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +.macro fill_ram_ Begin, End + ; Simpler to count from negative size up to 0, + ; and adjust address downward to compensate + ; for initial low byte in Y index + .local Neg_size + Neg_size = (Begin) - (End) + ldxy #(Begin) - 4 + delay (n)/3-1 + .endif + delay 29781*4 + .elseif (n) .MOD 3 = 2 + delay (n)/3 + delay 29781*2 + .else + delay (n)/3 + .endif +.endmacro diff --git a/ppu_vbl_nmi/source/common/testing.s b/ppu_vbl_nmi/source/common/testing.s new file mode 100644 index 0000000..a40d9b7 --- /dev/null +++ b/ppu_vbl_nmi/source/common/testing.s @@ -0,0 +1,105 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data RODATA,{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing = init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/ppu_vbl_nmi/source/common/text_out.s b/ppu_vbl_nmi/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/ppu_vbl_nmi/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/read_joy3/count_errors.nes b/read_joy3/count_errors.nes new file mode 100644 index 0000000000000000000000000000000000000000..cd4859128b7caf72451eb25edf402d0cbbc83953 GIT binary patch literal 40976 zcmeI2e`p)m9l*bmYFW7mNwH)1Vk_y}7$XTCy|Q0o6Y0T7I0w-c3S&^%URpye*W}}W8u)VK!FU90Wv@a$N(8217v^fDDiUGC&5%02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5%02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5%02%o28QA`ep{!74RJTAxKQ)zKjp`>N^-x|} z__U^Q#@5U@Mutcn#Hg?o??jiBPPlfk4&3^7C8b;a%8*_e7DJ5aRtlr*k?Ph}gH_iG zx0c=eSKPlF)jvPRRe%6la&yJi^gF299?yV0eCZg@$F8SWF-m)x-R zUG_$^aJ&=VJX$DpBDtA${u#@8toozD`rzV&vy0FfINNz*A?yOLgB#_B^*c9WSbt>U zW&{_FB_o?A3PRIA*TqUTDUQH@!Gk@No6rEe!0X<}GZ& z4zC+$F|eOE3n!9wWg$Ejozilzw(CkKf|Zyu{LyeeiWrp}ZyML36UBA2_nU7g-1~)_ zh0R1K#5a??KDiLDY9CE*)h8GK$v$r4fFiGK)fF#)K+C<+G_DF~+!^7UBb@;)lACRD z3(OI#Z>G#c=8!qezc8X{#{A*ascP)ZaDFI%=)!_(rfS0ze=&z^Llf_qL$yN_KQj;2 zQWI?1{lHA!I9%Xtr&*2sCN}{k4xgWG@qqub;bF>~_7_O3P&i>rOj(|f|q6||QB`br>(lGKL zi(z3EUdO1jTZoBe_hWpE?xh}BF>{Q4uATd^WiYelO)jUmMG|nH98Xtbe*DIfYoYLs zap#B@;-VRQv5kE&#-_Eg`W7C>ei9$7sf}YaKVE(6w-6T7OZ@|Tvrk&NkydFHy?6^2`k*>^y<@_B z=*lm^eTZksbK*tp^%hIDa(b&CT8!lGwB3|pJ-;UrOAN#M&RzlDAq6b?-oBC#TLt#s zI=-ZH4Fefj%d{VXWox;ULLPQ7w@_8SbI zc~;Z3$8IDlAOmE843GgbKnBPF86X2>fDDiUGC&5%02v?yWPl8i0Wv@a$N(821OJHu zb>p@6=e@sy?eEEyzxSuxm=B0vF_eX0k78Z85^sHiqWn(d$Ga5u;(d~3$1aQg zmF(hXiv5)IhQ<1QyjRYoL_Xk3uXhjU;{?Rgvd9O_=ksFeAlXZ#Gc$PpB#(Jsj)A0( zyC08+K{AUURy>aW0;X^y#rGg7(f~alNSpirfglM`ikETylD56mXyE=zVtK=EltjJ9 zIJRyy${;DqyS861nAWtC@FNL;?aO$;1N!4Og7F*pE#ucL{wqS#zlvspD{02Iy^Y8A zK1E{;UME3-yS^jixb4WWLBufydfDDj<|8E2T0s_5c6? literal 0 HcmV?d00001 diff --git a/read_joy3/count_errors_fast.nes b/read_joy3/count_errors_fast.nes new file mode 100644 index 0000000000000000000000000000000000000000..2838ea5da7a7bccd481c6a72f5d855cf53e95dcd GIT binary patch literal 40976 zcmeI2e`p)m9l*bmVp&mzbg^UiVk_y}7$XTCy|Q0o6Y2eva1Np?6vm*izI2WzXTmjc zwrZf7!8j8#RJ?ym8Ds>3LSA9a{bNwd2KPsELq-IRfoDQlBTF`}mu2c`GcOU+zVGgy z?WK%T*gqTJ=kxo#-}m0fDDiUGC&5%02v?y zWPl8i0Wv@a$N(8217v^fDDiUGC&5%02v?y zWPl8i0Wv@a$N(8217v^fDDiUGC&5%02v?y zWPl8i0Wv@a$N(8217v^sdxOpN{59Q-a zAJ^iXu{(AGBTFV8!>DjG(T(1Wcf+;E>cGXfDw-(nnrT(Xm5!%h|0a;tWfHCmQf*el_mGU?Ay{lRd3 zc=^HEW#|r_?H*VPH-Xoo8ReGveKTT-Ke2GDpwA4NAAO=&44CfM{f%$?fyXTNYD+No zN~drfGgorYwPMyAUK}fUxbn^x2KGYhO>DsquUls^u%ERGCsOtJQg|jhW8_}x)Z^U< zR$|KXN5lEV<*3|x!@36DC>mq$w%$rM?-y=%r z%6xpQ9{2JGjoj-k>x#6^-7&s7)*Uh;x%oC1V2_D`t=Wg{5qp$>VazbB#lxqyYV6Et zek6bB!jf)lwb7}++M~6RskiNs+M%hR+J|b|6kBP&XKU9F7dYE#RU^OArUqzWMZ2GS z*kWJYuta8W*97Fg->!`}4~URGUJoyg*7Rtx?F4I ztz_oM8Z?J5YaioMxok7Fj&W{o-O||~)-xx&@ui0`OdXFmcTkXknL#CN;=vs=D-p92 zGDXUoGAdw-KjLnRud8j_mM8MIEINZlBEp_RFBvgthIIDT_BQ)+8}Z2}v%PJdJRv`e z!i8xFeuC_(jQL2R912U*ncOvrkG0 zSNmj`;iEm|>@RKX2sl(F$}ojdsxr)kfsy|RhJ{sl4WsUEAtqLuAL3g~FZDpg>xt!UNNx*q>JYC7f$?He1hQik;-6KYb%VzBP4)(zqo7N`kTX+~#GcnG_ zJNCrlq+r!2u0nW4dr&>Pc;xz|>f%ijr&JkY*b?IcuT9vKA{L!Ii4WG)CNWx^tUmEO z2+Qed|G?htqjqkrU0Opg-h!n*s19H2+OQb9{BvkN#53eM@gnwGn`!Nw*{+9{Be~n1 zre=v}_atJ8Wr=U^72t(Yz>@FoD|x?NV830*mvpbf@K*CdF0~=AiCy*HGfDDiUGC&5%02%mC2K0?rJD>Od2DZP&APD=*WLlL!%17H#{(swm zE(73Cz+$oJEl3fH{USb~sGs85Xc^lFd?}yMjrc^4UQ)k6jdXeE}y3I6V&BF01ESo7SMRgzM$-luIKIzpe)hsF zKLv`JqU-iu7Zh>w@&Uzc-f^6K7Tf#WX}GT2*a5}9t@LR^OS^iIiqJI_51y|CX<9Hj7?S0C|7`#rB0C)SVtE>CCb{8jzdBv<$i+M#{ z-wtj(o?xHe{P2=eT)QjJh3xOMwPBicGUGGD0;^M&x_(5-ln=f2a5dfzr?lR6&O&aDUbm& pKnBPF86X2>fDDiUGC&5%02v?yWPl8i0Wv@a$N(821OML!{sm$VSUms$ literal 0 HcmV?d00001 diff --git a/read_joy3/source/common/ascii.chr b/read_joy3/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..0687d4ecdfe9d8b2cec319f0a6c8296b181c4dd3 GIT binary patch literal 2048 zcmeIyy^7p05C`z#3Rhye(uLV)P!$Xj%T=lJ5F!K@i8;0kE`-Z_j692qph{f1EFpvx z;i_W^DZ&;;m;Xqby}f;dKy-WjtPe|?k!_-v<*AmJtwhp(>E*cp^?y49Ef>OHbsWbW zkVs=1@guR_SkpL+uf7{ptA{rvcCWhr=?QBG0CA!?Sa~CK8Ek>1MC6khV7``?vSu;eAhH+jHPEi7u?n^dpfttJXBZk=U6r zCd4EzerdR0G}bQxbuk63uQiF&m!H$!og>kOFgI$#dPT&^v0nb$+6FaJg@{ECJ4aqc za#ijxy3ll*H0Cdw;r7F=-H_OiA*2vU#OC=&q8YsRgTeUXF@_N0k;LTv;(el*`dat2 zvHm^`o0GU3%LNh*r@zJg)pdh(B7b6t`(OKr@l~74jHBf;Q#howQ&?w z#c_VK92X+V@v+?gHGVqD{k)#&f_Hqr;)28E^Az*6=s)w|`fILNcPSmPpHM}s<9c-% z1`eIXwCegToNO6M-v^PeiBbW2tMj!;G%1JpMemO> z;(SH4M;|Bd&nk?L(UHjQi!c3br}f175s5I~;Q_Cfd1IYF;$6nujPWPSr)XP0Nn7vp z!DD=p2czVhSfa 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: X, Y +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + + +; Delays n clocks, from 2 to 16777215 +; Preserved: X, Y +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + .if (n) < 14 .and (n) <> 12 + delay_inline (n) + .elseif (n) < 27 + delay_unrolled (n) + .elseif <(n) = 0 + delay_256 (n) + .else + lda #<((n)-27) + jsr delay_a_25_clocks + delay_256 ((n)-27) + .endif +.endmacro + + +; Delays A+25 clocks (including JSR) +; Preserved: X, Y +.align 64 +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256+16 clocks (including JSR) +; Preserved: X, Y +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_clocks_: + pha + lda #256-19-22-16 + bne @first ; always branches +: pha + lda #256-19-22 +@first: jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536+16 clocks (including JSR) +; Preserved: X, Y +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_clocks_: + pha + lda #256-19-22-16 + bne @first +: pha + lda #256-19-22 +@first: jsr delay_a_25_clocks + lda #255 + jsr delay_256a_clocks_ + pla + clc + adc #-1 + bne :- + rts + +.macro delay_inline n + .if n = 7 .or n >= 9 + pha + pla + delay_inline (n-7) + .elseif n >= 3 .and n & 1 + lda <0 + delay_inline (n-3) + .elseif n >= 2 + nop + delay_inline (n-2) + .elseif n > 0 + .error "delay_short internal error" + .endif +.endmacro + +.macro delay_unrolled n + .if n & 1 + lda <0 + jsr delay_unrolled_-((n-15)/2) + .else + jsr delay_unrolled_-((n-12)/2) + .endif +.endmacro + + .res 7,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_256 n + .if >n + lda #>n + jsr delay_256a_clocks_ + .endif + .if ^n + lda #^n + jsr delay_65536a_clocks_ + .endif +.endmacro + diff --git a/read_joy3/source/common/macros.inc b/read_joy3/source/common/macros.inc new file mode 100644 index 0000000..2a5008c --- /dev/null +++ b/read_joy3/source/common/macros.inc @@ -0,0 +1,96 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name +.macro zp_res name,size + seg_data "ZEROPAGE",{name: .res size} +.endmacro + +.macro bss_res name,size + seg_data "BSS",{name: .res size} +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "STRINGS",{Addr: data} +.endmacro + +; If name isn't yet defined, defines it with value +.macro SET_DEFAULT name,value + .ifndef name + name=value + .endif +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro diff --git a/read_joy3/source/common/nes.inc b/read_joy3/source/common/nes.inc new file mode 100644 index 0000000..aff4389 --- /dev/null +++ b/read_joy3/source/common/nes.inc @@ -0,0 +1,35 @@ +; NES I/O locations and masks + +; Clocks per second +CLOCK_RATE = 1789773 +;CLOCK_RATE = 1662607 + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 diff --git a/read_joy3/source/common/print.s b/read_joy3/source/common/print.s new file mode 100644 index 0000000..126186b --- /dev/null +++ b/read_joy3/source/common/print.s @@ -0,0 +1,191 @@ +; Prints values in various ways to output, including numbers and strings. + +newline = 10 + +; Prints indicated register to console as two hex chars and space +; Preserved: A, X, Y, P +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: X, Y +print_hex: + jsr update_crc + + ; Print high nibble + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + ; Print low nibble + and #$0F +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS it's a newline. +; Preserved: X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: jmp print_char_ + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str + jsr_with_addr print_str_addr,{.byte str,0} +.endmacro + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: Y +print_dec: + ; Hundreds + cmp #100 + blt @tens + ldx #'0' +: sbc #100 + inx + cmp #100 + bge :- + jsr @digit + + ; Tens +@tens: cmp #10 + blt @ones + ldx #'0' +: sbc #10 + inx + cmp #10 + bge :- + jsr @digit + + ; Ones +@ones: ora #'0' + jmp print_char + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/read_joy3/source/common/serial.s b/read_joy3/source/common/serial.s new file mode 100644 index 0000000..59fbebd --- /dev/null +++ b/read_joy3/source/common/serial.s @@ -0,0 +1,43 @@ +; Serial output at 57600 bits/sec on controller port 2 +; +; Uses stack and register A only, and doesn't mind page crossing +; (uses subroutines instead of loops). + +; Initializes serial. If this isn't done, first byte sent to +; PC might be corrupt. +; Preserved: X, Y +serial_init: + sec + lda #$FF + bne serial_write_ ; always branches + + +; Writes byte A to serial +; Preserved: X, Y +serial_write: + clc +serial_write_: + jsr @bit ; start + nop ; TODO: why the extra delay? + jsr @first ; bit 0 + jsr @bit ; bit 1 + jsr @bit ; bit 2 + jsr @bit ; bit 3 + jsr @bit ; bit 4 + jsr @bit ; bit 5 + jsr @bit ; bit 6 + jsr @bit ; bit 7 + sec ; 2 stop bit +@first: nop ; 4 + nop +@bit: ; 6 jsr + pha ; 3 + rol a ; 2 + and #1 ; 2 + sta JOY1 ; 4 + pla ; 4 + ror a ; 2 +.if CLOCK_RATE = 1789773 + nop ; 2 +.endif + rts ; 6 diff --git a/read_joy3/source/common/shell.inc b/read_joy3/source/common/shell.inc new file mode 100644 index 0000000..61fe108 --- /dev/null +++ b/read_joy3/source/common/shell.inc @@ -0,0 +1,434 @@ +; Program shell with text console. Included before user code. + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INC + .error "File included twice" + .end +.endif +SHELL_INC = 1 + + +; ******************************************* Prefix + +.segment "CODE2" + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E + +; RAM that isn't cleared by init routine +nv_ram = $7F0 + +; Macros and constants +.include "macros.inc" +.include "nes.inc" + +; Interrupt handlers are wrapped with these +.define BEGIN_NMI nmi: +.define END_NMI + +.define BEGIN_IRQ irq: +.define END_IRQ + +; Set undefined flags to 0, allowing simpler .if statements +SET_DEFAULT BUILD_NSF,0 +SET_DEFAULT BUILD_MULTI,0 +SET_DEFAULT BUILD_DEVCART,0 + +; Number of clocks devcart takes to jump to user reset +SET_DEFAULT DEVCART_DELAY,0 + + +; ******************************************* Libraries + +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +.if !BUILD_MULTI + .include "serial.s" +.endif + +; Sets up environment, calls main, then exits with code 0 +run_main: + ; Initialize libraries + jsr init_crc + + ; Establish consistent environment before + ; running main + jsr wait_vbl + lda #PPUMASK_BG0 + sta PPUMASK + delay 2370+24 + lda #$34 + pha + lda #0 + sta SNDMODE + tax + tay + clc + clv + plp + + jsr main + + ; Default to silent exit if main returns + lda #0 + ; FALL THROUGH + +; Exits program and prints result code if non-zero +exit: + ; Reset stack + ldx #$FF + txs + + ; Disable interrupts + sei + pha + jsr nmi_off + pla + + jmp exit_ + +; Reports internal error and exits program +internal_error: + print_str "Internal error" + lda #1 + jmp exit + + +.if BUILD_NSF || BUILD_MULTI || BUILD_DEVCART + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.else + .include "console.s" +.endif + + +; ******************************************* Single Test + +.if !BUILD_MULTI + +print_char_: + jsr console_print + jmp serial_write + +; Reset handler +.ifndef CUSTOM_RESET + reset = std_reset +.endif + +.macro init_nes + sei + cld + ldx #$FF + txs + + .if !BUILD_NSF + ; Init PPU + lda #0 + sta PPUCTRL + sta PPUMASK + .endif + + ; Clear RAM + lda #0 + ldx #7 ; last page + ldy #@ascii +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>@ascii_end + bne @page + +.pushseg +.rodata +@ascii: + .incbin "ascii.chr" +@ascii_end: +.popseg +.endif + + jsr console_init + jsr serial_init + jmp run_main + + +; Exit handler +exit_: + ; 0: "" + cmp #1 + jlt exit2 + + ; 1: "Failed" + bne :+ + print_str {newline,"Failed"} + jmp exit2 + + ; n: "Error n" +: pha + print_str {newline,"Error "} + jsr print_dec + pla + +exit2: +.if !BUILD_DEVCART + ; Be sure output is visible + pha + print_str {newline,newline,newline} + jsr console_show + pla + + ; Report audibly as well + jsr beep_bits +.else + ; Tell host to stop capturing serial + lda #$1A + jsr serial_write + delay_msec 400 +.endif + + ; Clear nv_ram + lda #0 + ldx #filename + sta addr+1 + jsr print_str_addr + jsr print_newline + rts + +.pushseg +.segment "STRINGS" +; Filename terminated with zero byte, or just zero byte +; if filename isn't available. +filename: + .incbin "ram:rom.nes" + .byte 0 +.popseg +.else +print_filename: + rts + +filename: + .byte 0 +.endif + + +; User code goes in main code segment +.segment "CODE" + nop diff --git a/read_joy3/source/common/sync_dmc.s b/read_joy3/source/common/sync_dmc.s new file mode 100644 index 0000000..1b65873 --- /dev/null +++ b/read_joy3/source/common/sync_dmc.s @@ -0,0 +1,49 @@ +; Synchronizes precisely with DMC timer. Leaves DMC at +; maximum rate, length 0 (1 byte). To avoid stopping +; other sound channels when writing to SNDCHN, it +; writes $1F rather than $10. +; Preserved: A, X, Y +; Time: ~680-3800 clocks +.align 64 +sync_dmc: + pha + + ; Setup + lda #0 + sta $4013 + lda #$0F + sta $4010 + sta SNDCHN + + ; Start twice (first will clear immediately) + lda #$1F + sta SNDCHN + nop + sta SNDCHN + + ; Coarse synchronize + lda #$10 +: bit SNDCHN + bne :- + + ; DO NOT write to memory. It affects timing. + + bit <0 ; 3 fine-tune: 2=OK 3=OK 4=fail + nop ; 2 + lda #57 ; 400 delay for first iter + bne :+ ; 3 + + ; Fine synchronize. 433 clocks per iter. +@sync: lda #59 ; 414 delay +: sec + sbc #1 + bne :- + ; 4 DMC wait-states + lda #$1F ; 2 + sta SNDCHN ; 4 + lda #$10 ; 2 + bit SNDCHN ; 4 + bne @sync ; 3 + + pla + rts diff --git a/read_joy3/source/common/testing.s b/read_joy3/source/common/testing.s new file mode 100644 index 0000000..8bb0741 --- /dev/null +++ b/read_joy3/source/common/testing.s @@ -0,0 +1,162 @@ +; Utilities for writing test ROMs + +zp_res test_code,1 ; code of current test +zp_res test_name,2 ; address of name of current test, or 0 of none + + +; Reports that all tests passed +tests_passed: +.if !BUILD_MULTI + jsr print_filename + print_str "Passed" +.endif + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + lda test_code + + ; Treat 0 as 1, in case it wasn't ever set + bne :+ + lda #1 + sta test_code +: + ; If code >= 2, print name + cmp #2 + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: +.if !BUILD_MULTI + jsr print_filename +.endif + ; End program + lda test_code + jmp exit + + +; Sets current test code and optional name. Also resets +; checksum. +.macro set_test code,name + pha + lda #code + jsr set_test_ + .local Addr + lda #Addr + sta iter + ldx #iter + ldx #". + +Several routines are available to print values and text to the console. +Most update a running CRC-32 checksum which can be checked with +check_crc, allowing ALL the output to be checked very easily. If the +checksum doesn't match, it is printed, so you can run the code on a NES +and paste the correct checksum into your code. + +The default is to build an iNES ROM, with other build types that I +haven't documented (devcart, sub-test of a multi-test ROM, NSF music +file). My nes.cfg file puts the code at $E000 since my devcart requires +it, and I don't want the normal ROM to differ in any way from what I've +tested. + +Library routines are organized by function into several files, each with +short documentation. Each routine may also optionally list registers +which are preserved, rather than those which are modified (trashed) as +is more commonly done. This is because it's best for the caller to +assume that ALL registers are NOT preserved unless noted. + +Some macros are used to make common operations more convenient. The left +is equivalent to the right: + + Macro Equivalent + ------------------------------------- + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + zp_byte name .zeropage + name: .res 1 + .code + + zp_res name,n .zeropage + name: .res n + .code + + bss_res name,n .bss + name: .res n + .code + + for_loop routine,begin,end,step + calls a routine with A set to successive values diff --git a/read_joy3/source/test_buttons.s b/read_joy3/source/test_buttons.s new file mode 100644 index 0000000..7e4c89e --- /dev/null +++ b/read_joy3/source/test_buttons.s @@ -0,0 +1,62 @@ +; Tests normal read_joy operation for each button. +; Runs DMC while testing, to be sure it doesn't +; affect anything. + +.include "shell.inc" +.include "read_joy.inc" + +zp_byte button + +dmc_rate = 15 ; 0 to 15 + +main: ; Start DMC + lda #$40+dmc_rate + sta $4010 + lda #$FF + sta $4012 + sta $4013 + lda #0 + sta $4015 + lda #$10 + sta $4015 + + print_str {"Press indicated buttons",newline,newline} + + ; First string + lda #names + sta addr+1 + + lda #$01 + sta button +@loop: jsr print_str_addr + jsr print_newline + jsr print_newline + + ; Wait for button press +: jsr read_joy + beq :- + + ; Be sure nothing but correct button + cmp button + jne test_failed + + ; Wait for button to be released +: jsr read_joy + bne :- + delay_msec 50 ; debounce + + asl button + bcc @loop + + jmp tests_passed + +names: .byte "A",0 + .byte "B",0 + .byte "Select",0 + .byte "Start",0 + .byte "Up",0 + .byte "Down",0 + .byte "Left",0 + .byte "Right",0 diff --git a/read_joy3/source/thorough_test.s b/read_joy3/source/thorough_test.s new file mode 100644 index 0000000..2cfa7e5 --- /dev/null +++ b/read_joy3/source/thorough_test.s @@ -0,0 +1,67 @@ +; Thoroughly tests routine with DMC DMA occurring +; at every possible timing. Ensures that no more +; than one corruption can occur out of the four +; the routine makes. + +iter = 1000 + +.include "shell.inc" +.include "sync_dmc.s" +.include "read_joy.inc" + +log_size = 4 +zp_res log,log_size + +main: for_loop16 test,0,iter,+1 + jmp tests_passed + +test: jsr sync_dmc + + ; Start DMC + lda #$4F + sta $4010 + lda #$10 + sta $4015 + + ; Delay + txa + jsr delay_a_25_clocks + tya + jsr delay_256a_16_clocks + + ; DMC DMA occurs during this code + jsr read_joy + pha + pha + + ; Recover second controller read + ; from below stack pointer + tsx + dex + txs + pla + + ; Ensure that no more than one reading + ; was corrupted by DMC DMA. + ldx #0 + cmp #0 + beq :+ + inx +: lda 3b}y9i-HIm1=obKT9#~FFU!=?W?n3$edpeL z94~$7!}hZAom`*a`FGDb-|rmVmppUo+_>NORiH!$$N(8217v^fDDiUGC&5%02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5%02v?yWPl8i0Wv@a$N(8217v^fDDiUGC&5%02v?yWPl9(_Y7=*!BnQNJf@i-vR@dX-;HU<12tbJ zwDegu#2H&N!kFoz@F-^48{tmyMyTVjK3W5Ae!m>k%zk-TE02gNMl~~rnQmS(BIbq> z&9ddD`8Jl0XZOaDP9QbA&XQ}5UGoLzZ<;@5O4IbQuQY>4mflaD zU;hq#7tW>g>E{Y?t}r!MfFI7n_by$YfmAwEfFIX0wm`ar*wox81~tboOG?WbAS~dkiaAQfHe( z`m0Vplyz|B4_lbn`R405f*o4d&tPJ|YG#i|YoR57E|^nOm)o^aCxD$;(%so`KOr$I z*I(6NgHDjW(q!*8--tBsWv^#9BOM>#jPly_Qn;diJiS$$Uj8Thq=^%XdT6T_a_R@v z)GJN>3cj1=_9)*R?F^`a)O?GZV2ql5BW4^lhK&*abFD@xY ztU5CJS7W3)Jo%O}Ts=7XOXFZQHpy-_J~U$24rMvpX;uPn#wPn{;AZSzYPZRr+|bR$ zzO#nZ^R4Pw;}JaUv6_Erq^fkHc;ZI1`j`>%PXEb`>KG0)#!>_8BG$kgk;Knq&=`Cv z_8ErC#SNKU#~km5uCPC?Cr)%iOS?l@Iu>f|pdb@+{jy)fi#w{716tXqnNfXGErVvh zFRszIH4`fR-xPIrU?ZFQJs#=P`=t0V+Nb;spV%&E ze`(>1fK!!&3`>|r%Y)2RF>@c2VPgee#;mi~h=rStPjD5@Dcv`RjB)lvJM~dZXGY7} zTuN(;BH%tb-mb{v#I?g$eg10`_F>h>#V~fRjqhNNL#yMpExe4;+z@ADZDV|K!eo`l zuY&((?0)6Q;^Au(@)c*3xTW#{!;zS0d3D^FFo%K@C-A|Z>I7zs6P3sR2!64>*gx=X z_Gv3M+A6N17bjq$4=RJNbqrYaz4U8n?BX4AoH!YKxy53wl-8>GmIJBV?M6&DpLrk= zTXfz0(Srt7Z)UOO*?lb^wX*D;bzG!#6$ZB&_fydg@paf!?`(q?9bn&PT&u=!#5-O7 z)TpN6eKRk(lezblpPibYPfx?-Od<GnHrQxw%Vo5IQ}T%VTrsl&CTYg+fqB&li4j z;b(=yrI~p+JC~lHXStc_+;dZf^fdF@aTp~sKnBPF86X2>fDDiUGC&5%02v?yWPl8i z0Wv@a$N(8217v^Yg61Cq)~o(z_7yvGZfu%c#8gJk@h@x)Iv-v-HWIPA;UGwI73(So zNysGo$qc?CsVED$LBI{V6tk)L!UHZiWdKP4?sg0MaUqp!drYKm*_+b|kW>;P@CA@8 z*^y*%tp}0|VI>)~OCT9f=IcF-NwRBogQ8zD$*r!9b;+KM>#HhA7T;|b7Z*z)S+ebg zV7Q3uxx_d{tPlTjuMMf9DvVfCgzZG`5#@%RewQUX7*|2X`CTS6GZ$z0NsvtBZM$dN zAc>n74@f36mSts-L~!e4oLPat7}<3_;*@f-GYyT004t>bu)+(`>~v?48leYe+J5%WoI-s}DO7S=tYS4<`0*P)0DBXQyr z6z#X`FYHnDi}fT+wp9}6E7`@v6z3`FOpE>dc(;^@iMq#?UhgjM$M%S=B~ka7$z(+6 zAlZw=6SH{#B#$~?j)J6yrymabK{AOytZ*3pd5qyfir<5zCvnzNf6*pZ)Ig=A6M_-2C*)g6l$?9iSg~=!Q%~f>Ff_b zQj)88#Jv#jyDVD8@DA2JswG@Dj{EfpxY~z#?BBwxz~au&a)iZTn5{O`ZTSnw0*QIsi>0Wv@a$N(8217v^< fkO4A42FL&zAOmE843GgbKnBPF86X4y-v<5#LXT*) literal 0 HcmV?d00001 diff --git a/read_joy3/thorough_test.nes b/read_joy3/thorough_test.nes new file mode 100644 index 0000000000000000000000000000000000000000..1c8c09e729dfde1bdffff6bae879d75c7b5b43d6 GIT binary patch literal 40976 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 SjsbYp!6X@hj0PwN#0CHZ?+$SQ literal 0 HcmV?d00001 diff --git a/scrolltest/scroll.bin b/scrolltest/scroll.bin new file mode 100644 index 0000000000000000000000000000000000000000..620423b214e75240e770e091f4e0c5b5f3a3ba34 GIT binary patch literal 16384 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 AQvd(} literal 0 HcmV?d00001 diff --git a/scrolltest/scroll.nes b/scrolltest/scroll.nes new file mode 100644 index 0000000000000000000000000000000000000000..7aff7a4c487962e90a8da812f14c26b3bf54809a GIT binary patch literal 16400 zcmeHKZ){W76~BJZu^lHNh8Qrxv2PMI$sH4s(6UGc+Yqur^avf$FH{q+SR|M~OFJ|X z3FH?FZ=KMh=F`L`u|^RO@sOg1Z{u+r>$(lnjiyOks5|J$R*HAdc`vvQ=CL&Y zPMW9Udb4WL$5laRs$F%cUJUy$@E<4n_b%{(QSMA@{-*bQgMwb7`g=?HkK(*5&JSJS z?~F<-;<}}0QCMdHYE8dmU{QFtR|k}1g)y|mtj*|4234ZksKrv%sfwyqE$g?#%9m|DS8M~9ZJvFhaWDq1 z*!G3T!8Mlopg*Lu6Wz8k*NmQ1UFv-Od=InhxgHD76YTm-k7$>*`3)64HmDb-q>-u%|6rY19|+*E~I{y0rQEi34^HA9cYO9$3cC zvFkFeq_wqGt#jrW>;$V zh9$b7mQ9M9n6_r>p`bWv$t;}|r0fOVqL!sZ*F0TR#gs*}q;nY|C1~!XGuxs$8kXsf zk}{ZT)vPdeB}}zy7NkkFXabO=3euwq-HJIWtE&pCK)mUi5x<6UtqisGrC|=^=rAV}$KZkSOT(H)E!PCK zLiYg|rK;zYQ?ojqJ4Myq$Ih0YK6m96b>6w{7uCvhxr^%JlkT(gPQ-0|^~lr&T!Vg= zs>;?J_e8Cy)2`mDS~+c_T&uusRA{2~d_so3MeVpol!2?%6ZHrDs)v>nJyBq<*BKDk zPnKtd$%{=uulJ9l@fWeV1)mc;6Kput&8$(Hi4q8jEEIUH{(l!ian-r3RB5Q&MVg>Ui=uNhuXi zolKrd^1-CEH^m_U2;(@7<0+lvQ>8TE2gN^0X{D{LXY_h7j+Mp%hq`U}kTM*j==gbo zBZH3K0>|6vI9}kGKu2GJV+tLo3mjQ=3>G+M(D5QVrv&!zOEJ&X^; zaq_?g!UW+k;Rs=pFh%$>;V5C6aE$O3!i$8zC47}|oG?T98sY1Nmk8e=e3S4k!ru|T zP567lcL@JL_(#G&A?n@GxI8dHo_7iVO!ybVtAy_nP7=OPI7K*3_yOUEgdY)JBfL)d zF=3YQ6T-g|-XOe5_$lGv2yYS25dNL;AB3L~-X{E<@D5=PQD&U;Fqe5Z@8fYk!C5V@ z4cE%G-L-wS@!E-6R>$kYb#h&IU0+?iZlaFW^ZIbTT;E;a2fuG{YT%=lG)+5tO1Nh8 zL|yO`DNJX<(!Kn8TKDu=IQ*EE$;$=))MuyIRhC%>!^dvHWQh1MhxJ(@A3ndJa=H^D zvTpBjhvj~zXHUR;06T&20VnW1;Dl(O0?ACu#%#O}bkeDve%8leVCPernNfK7-GBTG7Y)U1!T7 zJerxAtQgDOkm1+er~2V_4E9kZB?54k@SLIA?1_l*g!qpp>I7} z-Mir1TJ)8%LiRQ#!c$83N!QbpEX*GuH5(t7wr*IrVRK9K)(xB5)<}Fy^X5&Gw4v<> zd~3^=t-j5Vx3!_Mp^ZPbMq19l+pvBc-`w*3%`IEjLv8=6uaw{emjADZzs~;Jwr*)& z&Ku`!@PEC(T%~_SXw&vi<+n@lUK0+(#}FK^ZC=~Fu4P?IUau(< z%3RwV4zFvWp_{px<-Q``>lH2cby~F``5m z^9B!)jzwaTNDSg&MIauG$Z`bpQGSZ4=l83p`#9XX)v!T141fx?i#{~+bX8X-+oQCyDW51C|qt}7@ zfD-hg-lH6VI#66u4uEd-0^`_k5GZGCxP28=1pR&t2GEzS+|vMcluF;KF02O^2(M2B zvPomZxE?mFFe^TyK$z7K!xDs9(<+EohGMnaN#6sw9R};>bz|dR%4uwj&E`71upAzg zAhZL7;qE}7e`6qb$!N=6F&wOFU)9kb0{+@#9UU;i<7vPs=qAz+f^{e>8C!`0$@CqFO*u4|>wi#iyA3yAT% z_g5q&!upskLOwQ+d3hZR#@24D20l@5gY#!>Ek6)$l#|11y=4UMSY{LM7mapdata + sta mapptrhi + lda #$00 ;Set initial speed + sta scrollsx + sta scrollsy + sta controldelay + +mainloop: jsr waitvblank + jsr erasemagicchar + jsr scrollaction + jsr drawmagicchar + jsr setgamescreen + jsr setsprites + + lda ntscdelay ;Handle NTSC delay + sec + sbc ntscflag + bcs ml_nontscdelay + lda #$05 +ml_nontscdelay: sta ntscdelay + bcc ml_skip + + jsr readcontroller + jsr steering + jsr scrolllogic +ml_skip: jsr setpanel +mainloop2: jmp mainloop + +readcontroller: lda #$01 + sta $4016 + lda #$00 + sta $4016 + sta control + ldx #$08 +readcloop: lda $4016 + ror + lda control + ror + sta control + dex + bne readcloop + rts + +steering: inc controldelay + lda controldelay + and #$03 + beq steering2 + rts +steering2: lda control + and #CTRL_UP + beq steering3 + lda scrollsy + cmp #-8 + beq steering3 + dec scrollsy +steering3: lda control + and #CTRL_DOWN + beq steering4 + lda scrollsy + cmp #8 + beq steering4 + inc scrollsy +steering4: lda control + and #CTRL_LEFT + beq steering5 + lda scrollsx + cmp #-8 + beq steering5 + dec scrollsx +steering5: lda control + and #CTRL_RIGHT + beq steering6 + lda scrollsx + cmp #8 + beq steering6 + inc scrollsx +steering6: lda control + and #CTRL_A+CTRL_B + beq steering7 + lda #$00 + sta scrollsx + sta scrollsy +steering7: rts + +resetscroll: lda #$00 + sta scrollx + sta scrolly + sta scrollsx + sta scrollsy + sta rawscrollx + sta rawscrolly + sta blockx + sta blocky + sta screenshift + ldx #$07 ;Calculate 7 * MAPSIZEX + lda #$00 ;to help scrolling + sta btmrowlo + sta btmrowhi +rscr_loop1: lda btmrowlo + clc + adc mapsizex + sta btmrowlo + lda btmrowhi + adc mapsizex+1 + sta btmrowhi + dex + bne rscr_loop1 + ldx #$3f +rscr_loop2: lda #$00 ;Clear color buffer + sta COLORBUF,x + dex + bpl rscr_loop2 + lda #$ff ;Reset magic char + sta mcharlo + sta mcharhi + lda #SPLITPOINT-1 ;Set sprite0 for screen + sta SPRBUF ;split + lda #$ff + sta SPRBUF+1 + lda #$00 + sta SPRBUF+2 + lda #$f8 + sta SPRBUF+3 + rts + +erasemagicchar: lda mcharhi + bmi emc_noneed + sta $2006 + lda mcharlo + sta $2006 + lda mcharunder + sta $2007 +emc_noneed: lda #$ff + sta mcharhi + sta mcharlo + rts + +drawmagicchar: lda rawscrolly + clc + adc #(SPLITPOINT/8)+2 + cmp #SCRSIZEY + bcc dmc_posok + sbc #SCRSIZEY +dmc_posok: asl + tax + lda scract_rowtbl+1,x + sta mcharhi + lda scrollx + and #$07 + cmp #$01 + lda rawscrollx + adc #SCRSIZEX-2 + and #SCRSIZEX-1 + ora scract_rowtbl,x + sta mcharlo + lda mcharhi + sta $2006 + lda mcharlo + sta $2006 + lda $2007 ;First read is rubbish + lda $2007 + sta mcharunder + lda mcharhi + sta $2006 + lda mcharlo + sta $2006 + lda #$ff + sta $2007 + rts + +;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +;ºSCROLLLOGIC º +;º º +;ºUpdates scrolling position, block & map pointers and draws the new graphics º +;ºto the horizontal and vertical buffers for the SCROLLACTION routine. º +;º º +;ºParameters: - º +;ºReturns: - º +;ºDestroys: A,X,Y º +;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ + +scrolllogic: lda #$00 + sta screenshift + lda scrollx + lsr + lsr + lsr + sta temp1 ;Temp1 = old raw x scrolling + lda scrolly + lsr + lsr + lsr + sta temp2 ;Temp2 = old raw y scrolling + lda scrollx + clc + adc scrollsx + sta scrollx + lsr + lsr + lsr + sta rawscrollx ;New raw x scrolling + lda scrollsy + clc + adc scrolly + cmp #$f0 + bcc scrlog_notover + ldx scrollsy + bmi scrlog_overneg + sec + sbc #$f0 + jmp scrlog_notover +scrlog_overneg: sec + sbc #$10 +scrlog_notover: sta scrolly + lsr + lsr + lsr + sta rawscrolly ;new raw y scrolling + lda temp1 ;Any shifting in X-dir? + cmp rawscrollx + beq scrlog_xshiftok + lda scrollsx + bmi scrlog_xshiftneg + lda #SCROLL_RIGHT + sta screenshift + inc blockx + lda blockx + cmp #$04 + bne scrlog_xshiftok + lda #$00 + sta blockx + inc mapptrlo + bne scrlog_xshiftok + inc mapptrhi + jmp scrlog_xshiftok +scrlog_xshiftneg: + lda #SCROLL_LEFT + sta screenshift + dec blockx + bpl scrlog_xshiftok + lda #$03 + sta blockx + dec mapptrlo + lda mapptrlo + cmp #$ff + bne scrlog_xshiftok + dec mapptrhi +scrlog_xshiftok: + lda temp2 ;Any shifting in Y-dir? + cmp rawscrolly + beq scrlog_yshiftok + lda scrollsy + bmi scrlog_yshiftneg + lda #SCROLL_DOWN + ora screenshift + sta screenshift + inc blocky + lda blocky + cmp #$04 + bne scrlog_yshiftok + lda #$00 + sta blocky + lda mapptrlo + clc + adc mapsizex + sta mapptrlo + lda mapptrhi + adc mapsizex+1 + sta mapptrhi + jmp scrlog_yshiftok +scrlog_yshiftneg: + lda #SCROLL_UP + ora screenshift + sta screenshift + dec blocky + bpl scrlog_yshiftok + lda #$03 + sta blocky + lda mapptrlo + sec + sbc mapsizex + sta mapptrlo + lda mapptrhi + sbc mapsizex+1 + sta mapptrhi +scrlog_yshiftok:lda screenshift + asl + tax + lda scrlog_jumptbl,x + sta temp1 + lda scrlog_jumptbl+1,x + sta temp2 + jmp (temp1) + +scrlog_jumptbl: dc.w scrlog_shno ;0 + dc.w scrlog_shleft ;1 + dc.w scrlog_shright ;2 + dc.w scrlog_shno ;3 + dc.w scrlog_shup ;4 + dc.w scrlog_shupleft ;5 + dc.w scrlog_shupright ;6 + dc.w scrlog_shno ;7 + dc.w scrlog_shdown ;8 + dc.w scrlog_shdownleft ;9 + dc.w scrlog_shdownright ;10 + +scrlog_shno: rts +scrlog_shleft: jmp scrlog_doleft +scrlog_shright: jmp scrlog_doright +scrlog_shup: jmp scrlog_doup +scrlog_shdown: jmp scrlog_dodown +scrlog_shupleft:jsr scrlog_doleft + jmp scrlog_doup +scrlog_shupright:jsr scrlog_doright + jmp scrlog_doup +scrlog_shdownleft:jsr scrlog_doleft + jmp scrlog_dodown +scrlog_shdownright:jsr scrlog_doright + jmp scrlog_dodown + +scrlog_doleft: lda mapptrlo ;Calc. map pointer + sta srclo + lda mapptrhi + sta srchi + lda #SCRSIZEY + sta temp1 ;Chars to do + lda rawscrollx ;Position onscreen where drawing + sta temp6 ;happens (to help coloring) + ldx rawscrolly ;Pointer within screen + lda blocky ;Calc. starting blockindex + asl + asl + adc blockx +scrlog_doleftnb:sta temp2 ;Index within block + ldy #$00 ;Get block from map + lda (srclo),y + tay + lda blocktbllo,y + sta destlo + lda blocktblhi,y + sta desthi + lda blockdata,y ;Color + sta temp5 + ldy temp2 +scrlog_doleftloop: + lda (destlo),y + sta HORIZBUF,x + jsr scrlog_xcolor + inx + cpx #SCRSIZEY + bcc scrlog_doleftno1 + ldx #$00 +scrlog_doleftno1: + dec temp1 + beq scrlog_doleftrdy + tya + clc + adc #$04 + tay + cmp #$10 + bcc scrlog_doleftloop + lda srclo + clc + adc mapsizex + sta srclo + lda srchi + adc mapsizex+1 + sta srchi + lda blockx + jmp scrlog_doleftnb +scrlog_doleftrdy:rts + +scrlog_doright: lda mapptrlo + clc + adc #$07 + sta srclo + lda mapptrhi + adc #$00 + sta srchi + lda rawscrollx + clc + adc #SCRSIZEX-1 + and #SCRSIZEX-1 + sta temp6 + lda #SCRSIZEY + sta temp1 ;Chars to do + lda blockx + clc + adc #$03 + cmp #$04 + bcc scrlog_dorightno2 + and #$03 + pha + inc srclo + bne scrlog_dorightno3 + inc srchi +scrlog_dorightno3:pla +scrlog_dorightno2:sta temp3 + ldx rawscrolly ;Pointer within screen + lda blocky + asl + asl + clc + adc temp3 +scrlog_dorightnb:sta temp2 ;Pointer within block + ldy #$00 ;Get block from map + lda (srclo),y + tay + lda blocktbllo,y + sta destlo + lda blocktblhi,y + sta desthi + lda blockdata,y ;Color + sta temp5 + ldy temp2 +scrlog_dorightloop: + lda (destlo),y + sta HORIZBUF,x + jsr scrlog_xcolor + inx + cpx #SCRSIZEY + bcc scrlog_dorightno1 + ldx #$00 +scrlog_dorightno1: + dec temp1 + beq scrlog_dorightrdy + tya + clc + adc #$04 + tay + cmp #$10 + bcc scrlog_dorightloop + lda srclo + clc + adc mapsizex + sta srclo + lda srchi + adc mapsizex+1 + sta srchi + lda temp3 + jmp scrlog_dorightnb +scrlog_dorightrdy:rts + +scrlog_doup: lda mapptrlo + sta srclo + lda mapptrhi + sta srchi + lda #SCRSIZEX + sta temp1 ;Chars to do + lda rawscrolly + sta temp6 + ldx rawscrollx ;Pointer within screen + lda blocky + asl + asl + sta temp3 + adc blockx +scrlog_doupnb: sta temp2 ;Pointer within block + ldy #$00 ;Get block from map + lda (srclo),y + tay + lda blocktbllo,y + sta destlo + lda blocktblhi,y + sta desthi + lda blockdata,y ;Color + sta temp5 + ldy temp2 +scrlog_douploop:lda (destlo),y + sta VERTBUF,x + jsr scrlog_ycolor + inx + txa + and #SCRSIZEX-1 + tax + dec temp1 + beq scrlog_douprdy + iny + tya + and #$03 + bne scrlog_douploop + inc srclo + bne scrlog_doupno2 + inc srchi +scrlog_doupno2: lda temp3 + jmp scrlog_doupnb +scrlog_douprdy: rts + +scrlog_dodown: lda mapptrlo + clc + adc btmrowlo + sta srclo + lda mapptrhi + adc btmrowhi + sta srchi + lda #SCRSIZEX + sta temp1 ;Chars to do + lda rawscrolly + clc + adc #SCRSIZEY-1 + cmp #SCRSIZEY + bcc scrlog_dodownok1 + sbc #SCRSIZEY +scrlog_dodownok1: + sta temp6 + ldx rawscrollx ;Pointer within screen + lda blocky + clc + adc #$01 + cmp #$04 + bcc scrlog_dodownno3 + and #$03 + pha + lda srclo + clc + adc mapsizex + sta srclo + lda srchi + adc mapsizex+1 + sta srchi + pla +scrlog_dodownno3: + asl + asl + sta temp3 + adc blockx +scrlog_dodownnb:sta temp2 ;Pointer within block + ldy #$00 ;Get block from map + lda (srclo),y + tay + lda blocktbllo,y + sta destlo + lda blocktblhi,y + sta desthi + lda blockdata,y ;Color + sta temp5 + ldy temp2 +scrlog_dodownloop:lda (destlo),y + sta VERTBUF,x + jsr scrlog_ycolor + inx + txa + and #SCRSIZEX-1 + tax + dec temp1 + beq scrlog_dodownrdy + iny + tya + and #$03 + bne scrlog_dodownloop + inc srclo + bne scrlog_dodownno2 + inc srchi +scrlog_dodownno2:lda temp3 + jmp scrlog_dodownnb +scrlog_dodownrdy:rts + +;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +;ºSCRLOG_XCOLOR º +;ºSCRLOG_YCOLOR º +;º º +;ºSubroutines to color the blocks (not so simple :-)) º +;º º +;ºParameters: Temp5 = Block color byte º +;º Temp6 = Position (X for xcolor, Y for ycolor) º +;º X = Position in the other axis º +;º Y = Position within the block º +;ºReturns: - º +;ºDestroys: A º +;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ + +scrlog_xcolor: txa + and #$01 + beq scrlog_xcolorok + rts +scrlog_xcolorok:tya + and #$02 ;Right part of block? + bne scrlog_xcolor0 + lda temp5 + jmp scrlog_xcolor1 +scrlog_xcolor0: lda temp5 + lsr + lsr +scrlog_xcolor1: cpy #$08 ;Lower part of block? + bcc scrlog_xcolor2 + lsr + lsr + lsr + lsr +scrlog_xcolor2: and #$03 + sta temp7 ;Color now in temp7 + txa + asl + and #$f8 + sta temp8 ;Position, where to draw + lda temp6 + lsr + lsr + clc + adc temp8 + sta temp8 ;Byteposition is ready in temp8 + sty temp9 ;Store Y + txa ;Check Y-fineposition + and #$02 + bne scrlog_xcolor5 ;Lower part +scrlog_xcolor3: lda temp6 ;Check X-fineposition + and #$02 + bne scrlog_xcolor4 ;Right part + ldy temp8 + lda COLORBUF,y + and #%11111100 + ora temp7 + sta COLORBUF,y + ldy temp9 ;Get Y back + rts +scrlog_xcolor4: ldy temp7 + lda scrlog_mul4tbl,y + sta temp7 + ldy temp8 + lda COLORBUF,y + and #%11110011 + ora temp7 + sta COLORBUF,y + ldy temp9 + rts +scrlog_xcolor5: lda temp6 + and #$02 + bne scrlog_xcolor6 + ldy temp7 + lda scrlog_mul16tbl,y + sta temp7 + ldy temp8 + lda COLORBUF,y + and #%11001111 + ora temp7 + sta COLORBUF,y + ldy temp9 + rts +scrlog_xcolor6: ldy temp7 + lda scrlog_mul64tbl,y + sta temp7 + ldy temp8 + lda COLORBUF,y + and #%00111111 + ora temp7 + sta COLORBUF,y + ldy temp9 + rts + +scrlog_ycolor: txa + and #$01 + beq scrlog_ycolorok + rts +scrlog_ycolorok:tya + and #$02 ;Right part of block? + bne scrlog_ycolor0 + lda temp5 + jmp scrlog_ycolor1 +scrlog_ycolor0: lda temp5 + lsr + lsr +scrlog_ycolor1: cpy #$08 ;Lower part of block? + bcc scrlog_ycolor2 + lsr + lsr + lsr + lsr +scrlog_ycolor2: and #$03 + sta temp7 ;Color now in temp7 + lda temp6 + asl + and #$f8 + sta temp8 ;Position, where to draw + txa + lsr + lsr + clc + adc temp8 + sta temp8 ;Byteposition is ready in temp8 + sty temp9 ;Store Y + lda temp6 ;Check Y-fineposition + and #$02 + bne scrlog_ycolor5 ;Lower part +scrlog_ycolor3: txa ;Check X-fineposition + and #$02 + bne scrlog_ycolor4 ;Right part + ldy temp8 + lda COLORBUF,y + and #%11111100 + ora temp7 + sta COLORBUF,y + ldy temp9 ;Get Y back + rts +scrlog_ycolor4: ldy temp7 + lda scrlog_mul4tbl,y + sta temp7 + ldy temp8 + lda COLORBUF,y + and #%11110011 + ora temp7 + sta COLORBUF,y + ldy temp9 + rts +scrlog_ycolor5: txa + and #$02 + bne scrlog_ycolor6 + ldy temp7 + lda scrlog_mul16tbl,y + sta temp7 + ldy temp8 + lda COLORBUF,y + and #%11001111 + ora temp7 + sta COLORBUF,y + ldy temp9 + rts +scrlog_ycolor6: ldy temp7 + lda scrlog_mul64tbl,y + sta temp7 + ldy temp8 + lda COLORBUF,y + and #%00111111 + ora temp7 + sta COLORBUF,y + ldy temp9 + rts + +scrlog_mul4tbl: dc.b 0,4,8,12 +scrlog_mul16tbl:dc.b 0,16,32,48 +scrlog_mul64tbl:dc.b 0,64,128,192 + +;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» +;ºSCROLLACTION º +;º º +;ºBlits the horizontal & vertical buffers to PPU memory and also updates º +;ºattribute table. To be called during vblank. Also, RESETSCROLL or SCROLLLOGICº +;ºmust be called before calling this. º +;º º +;ºParameters: - º +;ºReturns: - º +;ºDestroys: A,X,Y º +;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ + +scrollaction: lda $2002 + lda screenshift + asl + tax + lda scract_jumptbl,x + sta temp1 + lda scract_jumptbl+1,x + sta temp2 + jmp (temp1) + +scract_jumptbl: dc.w scract_done ;0 + dc.w scract_doleft ;1 + dc.w scract_doright ;2 + dc.w scract_done ;3 + dc.w scract_doup ;4 + dc.w scract_doupleft ;5 + dc.w scract_doupright ;6 + dc.w scract_done ;7 + dc.w scract_dodown ;8 + dc.w scract_dodownleft ;9 + dc.w scract_dodownright ;10 + +scract_doupleft:jsr scract_doleft + jmp scract_doup + +scract_doupright:jsr scract_doright + jmp scract_doup + +scract_dodownleft:jsr scract_doleft + jmp scract_dodown + +scract_dodownright:jsr scract_doright + jmp scract_dodown + +scract_doleft: lda #$20 + sta $2006 + lda rawscrollx + and #$1f + sta $2006 + jsr scract_horizshift + lda rawscrollx + lsr + lsr + tax +scract_doleftattr: +N SET 0 + REPEAT 8 + lda #$23 + sta $2006 + txa + ora #$c0+N + sta $2006 + lda COLORBUF+N,x + sta $2007 +N SET N+8 + REPEND +scract_done: rts + +scract_doright: lda #$20 + sta $2006 + lda rawscrollx + clc + adc #SCRSIZEX-1 + and #$1f + sta $2006 + jsr scract_horizshift + lda rawscrollx + clc + adc #$1f + and #$1f + lsr + lsr + tax + jmp scract_doleftattr + +scract_doup: lda rawscrolly + asl + tax + lda scract_rowtbl+1,x + sta $2006 + lda scract_rowtbl,x + sta $2006 + jsr scract_vertshift + lda #$23 + sta $2006 + lda rawscrolly + asl + and #$f8 + tax + ora #$c0 + sta $2006 +scract_doupattr: +N SET 0 + REPEAT 8 + lda COLORBUF+N,x + sta $2007 +N SET N+1 + REPEND + rts + +scract_dodown: lda rawscrolly + clc + adc #SCRSIZEY-1 + cmp #SCRSIZEY + bcc scract_dodownok1 + sbc #SCRSIZEY +scract_dodownok1: + sta temp1 + asl + tax + lda scract_rowtbl+1,x + sta $2006 + lda scract_rowtbl,x + sta $2006 + jsr scract_vertshift + lda #$23 + sta $2006 + lda temp1 + asl + and #$f8 + tax + ora #$c0 + sta $2006 + jmp scract_doupattr + +scract_horizshift: + lda #PPU0VALUE+4 ;Vertical increment + sta $2000 +N SET 0 + REPEAT SCRSIZEY + lda HORIZBUF+N + sta $2007 +N SET N+1 + REPEND + lda #PPU0VALUE ;Normal increment + sta $2000 + rts + +scract_vertshift: +N SET 0 + REPEAT SCRSIZEX + lda VERTBUF+N + sta $2007 +N SET N+1 + REPEND + rts + +scract_rowtbl: +N SET $2000 + REPEAT SCRSIZEY + dc.w N +N SET N+32 + REPEND + +setgamescreen: lda #$00 + sta $2006 + sta $2006 + lda scrollx + sec + sbc #$08 + sta $2005 + lda scrolly + clc + adc #$10 + cmp #SCRSIZEY*8 + bcc setgame_ok + sbc #SCRSIZEY*8 +setgame_ok: sta $2005 + lda #$1c ;Turn on onescreen mirror + jsr write8000 + lda #$18 ;BG & sprites on, clipping + sta $2001 + lda #$00 ;Assume no shifting on next fr. + sta screenshift + rts + +setpanel: bit $2002 ;Wait if sprite hit still on + bvs setpanel + ldx nmicount +setpanel_wait: cpx nmicount ;Check if vblank occurs before + bne setpanel_toolong ;spritehit (something went + bit $2002 ;wrong) + bvc setpanel_wait + lda #$00 ;Blank screen + sta $2001 + lda #$1e ;Turn off onescreen mirror + jsr write8000 + lda #$00 + ldy #$04 ;Set scrolling & display pos. + sta $2005 + sta $2005 + sty $2006 + sta $2006 + lda #$0a + sta $2001 ;Just BG on, no sprites, no clip +setpanel_toolong: + rts + +setsprites: lda #>SPRBUF ;Start sprite DMA + sta $4014 + rts + +clearsprites: ldx #$00 +clrspr_loop: lda #$f0 + sta SPRBUF,x + lda #$00 + sta SPRBUF+1,x + lda #$00 + sta SPRBUF+2,x + lda #$f8 + sta SPRBUF+3,x + inx + inx + inx + inx + bne clrspr_loop + rts + +setnametable: lda #$1e ;Turn off onescreen mirror + jsr write8000 + lda #PPU0VALUE ;Normal increment + sta $2000 + lda #$20 ;Address $2000 + sta $2006 + lda #$00 + sta $2006 + ldx #$00 + ldy #$00 +setntbl_loop1: lda #$00 ;Wipe both nametables + sta $2007 + inx + bne setntbl_loop1 + iny + cpy #$08 + bcc setntbl_loop1 + ldx #$00 + lda #$24 ;Address $2400 + sta $2006 + lda #$00 + sta $2006 + lda ntscflag + bne setntbl_loop3 + +setntbl_loop2: lda paneltext,x ;Now write text to the + and #$3f ;second nametable + sta $2007 + inx + cpx #6*32 + bcc setntbl_loop2 + rts +setntbl_loop3: lda paneltext2,x ;Now write text to the + and #$3f ;second nametable + sta $2007 + inx + cpx #6*32 + bcc setntbl_loop3 + rts + +loadpalette: lda #$3f + sta $2006 + lda #$00 + sta $2006 + ldx #$00 +loadpalette2: lda palette,x + sta $2007 + inx + cpx #$20 + bne loadpalette2 + rts + +loadchars: lda #$00 + sta $2006 + sta $2006 + lda #chardata + sta srchi + ldy #$00 + ldx #$10 +loadchars2: lda (srclo),y + sta $2007 + iny + bne loadchars2 + inc srchi + dex + bne loadchars2 + rts + +detectntsc: lda #$01 + sta ntscflag ;Assume NTSC + sta ntscdelay + jsr waitvblank + lda #$00 + sta temp1 + sta temp2 + lda nmicount +dntsc_loop: cmp nmicount + bne dntsc_over + inc temp1 + bne dntsc_loop + inc temp2 + bne dntsc_loop +dntsc_over: asl temp1 + lda temp2 + rol + cmp #$12 + bcc dntsc_nopal + dec ntscflag +dntsc_nopal: rts + + +setupppu: lda #PPU0VALUE ;Blank screen, leave NMI's on + sta $2000 + lda #$00 + sta $2001 + rts + +setupmapper: lda #$1e +write8000: pha ;Write to MMC 1 mapper + lda #$80 ;First reset + sta $8000 ;Then 5 bits of data + pla + sta $8000 + lsr + sta $8000 + lsr + sta $8000 + lsr + sta $8000 + lsr + sta $8000 + rts + +waitvblank: lda nmicount +waitvblank2: cmp nmicount + beq waitvblank2 + lda #$00 ;Blank screen, with clipping + sta $2001 + lda $2002 + lda #$1e ;Turn off onescreen mirror + jmp write8000 + +nmi: inc nmicount +irq: rti + +paneltext: dc.b " " + dc.b $1d,"MULTIDIRECTIONAL SCROLLING TEST" + dc.b $1e,"RUNNING IN PAL, 50HZ REFRESH " + dc.b $1f + ds.b 30,$3c + dc.b $3e + dc.b " " + dc.b " " + dc.b " " + +paneltext2: dc.b " " + dc.b $1d,"MULTIDIRECTIONAL SCROLLING TEST" + dc.b $1e,"RUNNING IN NTSC, 60HZ REFRESH " + dc.b $1f + ds.b 30,$3c + dc.b $3e + dc.b " " + dc.b " " + dc.b " " + + +blocktbllo: +N SET blockdata+512 + REPEAT 128 + dc.b N +N SET N+16 + REPEND + +blocktblhi: +N SET blockdata+512 + REPEAT 128 + dc.b N/256 +N SET N+16 + REPEND + +palette: incbin scrtest.pal + incbin scrtest.pal + +blockdata: incbin scrtest.blk + +map: incbin scrtest.map +mapsizex = map+0 +mapsizey = map+2 +mapdata = map+4 + +chardata: incbin scrtest.chr + + org $fffa + + dc.w nmi + dc.w start + dc.w irq + diff --git a/scrolltest/scrollhd.bin b/scrolltest/scrollhd.bin new file mode 100644 index 0000000000000000000000000000000000000000..12b581d4e0c0f68b74308904fef5502712d2b139 GIT binary patch literal 16 QcmeZs4VGeL5MY1-01tx!5&!@I literal 0 HcmV?d00001 diff --git a/scrolltest/scrollhd.s b/scrolltest/scrollhd.s new file mode 100644 index 0000000..4000c48 --- /dev/null +++ b/scrolltest/scrollhd.s @@ -0,0 +1,11 @@ + .processor 6502 + .org $0000 + + ;NES + dc.b $4e,$45,$53,$1a + + dc.b $01 ;1 16kb PRG rom banks + dc.b $00 ;0 CHR rom banks + dc.b $10 ;Mapper 1 (MMC1) + dc.b $00 + ds.b 8,0 diff --git a/scrolltest/scrtest.blk b/scrolltest/scrtest.blk new file mode 100644 index 0000000000000000000000000000000000000000..bb4cf41f4117fdaaab4195965fd8dd54359f8f8e GIT binary patch literal 576 ycmWd;aeU1%k^v(V5RBXaaCC40A_xGnot&MVU0hvUVYDL}0IPIzc5rZU1v3E}=MlI7 literal 0 HcmV?d00001 diff --git a/scrolltest/scrtest.chr b/scrolltest/scrtest.chr new file mode 100644 index 0000000000000000000000000000000000000000..042038e1635e8613074cfe7376b0ba73a2f3b174 GIT binary patch literal 4096 zcmeHJ!D`z;5S@61V@Rm4rWNid)DRGcI;&E8?gu1?Zdi~GF1X->4K_RE%WCis*oY@9j#3xQE_)(m?bynzu8vZ^jU@tNYInRz&sw%Y%xH^1`bZ$?Ya$@WK0lI6RNI z_0DuUF5BIs;ip)!(#tHoa5~r`-4YJaYG+pOpG%RdBoD$*pE6j zJm0kacF1GQACdifU*sd=Mr}@9>IQj`Ty+C1awyJzEhHB?RtsbV{s?$MU&HIk40&`s zU2K^T1LAx<*b&(<>#<>#Y>-T{WUV`B-E3eop=H@+#J?WAj-YObMe#LqiXyb!QI2w4 z6pMBs7;gtd|LMhT9euYAd|6bBx+@!l2jbShO7r*QIRDG> zo6;DO@!R)GR2N?CN9nLO5Dfdm`NVm~xsInf(RvJ!@jt&WUmDaW+knsJ$?GuK@bT_7 z^d#P4|I*dEm%-2L_#w-lQ{Z&b5>5#h)iCFLLp7Wd&rFZU$H(LG)ZAh{Z}mdIAD*5L zheM;~yAswk=IRQ+#inVV@z)@Pc+((+IOH{q|2n0(>589K>D^v|UV&bLUV&bLUV&bL TUV&bLUV;Ci0RLyFb+vv2Il=gR literal 0 HcmV?d00001 diff --git a/scrolltest/scrtest.map b/scrolltest/scrtest.map new file mode 100644 index 0000000000000000000000000000000000000000..827f4854b3e817e9363e8527037d78c37abb554d GIT binary patch literal 404 zcmZ{d*$n_72ty^T!2YwU9I=Gz2V#$>En7m5PF019;&NIfQ6NPx_A^n8B;>w7KBo6G cS5U@mT6+|0+&2ZuSbe4n<|y|rvk{J@4Y=O|1poj5 literal 0 HcmV?d00001 diff --git a/scrolltest/scrtest.pal b/scrolltest/scrtest.pal new file mode 100644 index 0000000000000000000000000000000000000000..9fa0c0ccb8dfaa7080ce8f4079c3b73d5ef1986d GIT binary patch literal 16 Xcmd;;Wl-Q{5>n!25mDh~6H@~K2@?S( literal 0 HcmV?d00001 diff --git a/soundtest/README.TXT b/soundtest/README.TXT new file mode 100644 index 0000000..9b93ec2 --- /dev/null +++ b/soundtest/README.TXT @@ -0,0 +1 @@ +Check "sndtest.asm" for program info! diff --git a/soundtest/SNDTEST.ASM b/soundtest/SNDTEST.ASM new file mode 100644 index 0000000..83c3496 --- /dev/null +++ b/soundtest/SNDTEST.ASM @@ -0,0 +1,515 @@ +; +; NES sound testing program +; Written by SnowBro +; +; Yep, I know there's a program similar to this already around, but I +; wanted to write one on my own. Partly to try and figure out more about +; how the NES sound registers work, and partly to get some experience +; with 6502 programming, which I'm pretty rusty at. I tried to keep the +; code small, but was a bit lazy here and there. Same goes for the lacking +; comments in some areas. The font was disrespectfully ripped from +; Castlevania 3. +; +; This code hasn't been tested on a real NES, so I don't know if it will +; work properly (sigh). If anyone has the chance to try it, please report +; back to me. It has been tested with most reliable NES emulators and +; should work fine on them. +; +; The program is simple: it lets you set individual bits of the NES sound +; registers for each channel and then test the output. +; The joypad buttons do the following: +; +; Select: Select channel +; Up/Down: Select register of current channel +; Right/Left: Select bit of current register +; A: Toggle current bit +; Start: Play channel +; +; The code was assembled with X816, a great S/NES assembler by minus. +; Modify the code as you wish. +; +; Check out my webpage at http://home.sol.no/~kenhanse/nes/ for some +; of the other stuff I've written. +; +; Kent Hansen 01/01/99 +; + +.mem 8 +.index 8 +.org $C000 + +;------------------------------[ Define stuff ]------------------------------- + +RIGHT_BUTTON EQU %00000001 +LEFT_BUTTON EQU %00000010 +DOWN_BUTTON EQU %00000100 +UP_BUTTON EQU %00001000 +START_BUTTON EQU %00010000 +SELECT_BUTTON EQU %00100000 +B_BUTTON EQU %01000000 +A_BUTTON EQU %10000000 + +; Zero page addresses for where to store data + +SND_REGS EQU $00 ; data for 4 channels, 4 bytes each +CUR_CHN EQU $10 ; current channel (0...3) +CUR_REG EQU $11 ; current register of channel (0...3) +CUR_BIT EQU $12 ; current bit of register +JOY_STAT EQU $FC ; byte containing status of joypad +OLD_STAT EQU $FD ; joypad status from previous refresh +ADDR_LO EQU $FE +ADDR_HI EQU $FF + +;---------------------------[ Create font table ]----------------------------- + +.asctable +cleartable +20h = 00h +"A".."Z" = 01h +"0".."9" = 20h +":" = 2Ah +.end + +;---------------------------------[ Data ]------------------------------------ + +chn_text .asc "CHANNEL: 0" + .db 0FFh + +palette .db 0Fh,0Fh,0Fh,20h + .db 0Fh,0Fh,0Fh,20h + .db 0Fh,0Fh,0Fh,20h + .db 0Fh,0Fh,0Fh,20h + + .db 0Fh,0Fh,0Fh,20h + .db 0Fh,0Fh,0Fh,20h + .db 0Fh,0Fh,0Fh,20h + .db 0Fh,0Fh,0Fh,20h + +;---------------------------------[ Code ]------------------------------------ + +reset: +cld ; clear decimal mode +sei ; disable interrupts +lda #$00 +sta $2000 ; disable various stuff +sta $2001 ; ditto +ldx #$FF +txs ; set stack pointer + +jsr clear_ram +jsr wait_vblank +jsr set_palette +jsr clear_nametable +jsr setup_screen ; writes some text info to the name table + +lda #%00011110 +sta $2001 ; enable bg & sprites + +lda #%10000000 +sta $2000 ; enable NMI + +main_loop: +lda #$00 +sta $2005 ; hscroll = 0 +sta $2005 ; vscroll = 0 +jsr wait_vblank +jsr print_regs ; print the regs in binary format +jsr set_cursors ; show the ChannelCursor and BitCursor + +; the next piece of code handles button presses + +lda #RIGHT_BUTTON +and JOY_STAT +beq + +and OLD_STAT ; If this AND results in a non-zero result, it means +bne + ; the button was pressed last refresh too, so do nothing. +jsr b0 ; Do appropriate action for this button ++ ; Repeat for the other 7 buttons... +lda #LEFT_BUTTON +and JOY_STAT +beq + +and OLD_STAT +bne + +jsr b1 ++ +lda #DOWN_BUTTON +and JOY_STAT +beq + +and OLD_STAT +bne + +jsr b2 ++ +lda #UP_BUTTON +and JOY_STAT +beq + +and OLD_STAT +bne + +jsr b3 ++ +lda #START_BUTTON +and JOY_STAT +beq + +and OLD_STAT +bne + +jsr b4 ++ +lda #SELECT_BUTTON +and JOY_STAT +beq + +and OLD_STAT +bne + +jsr b5 ++ +lda #A_BUTTON +and JOY_STAT +beq + +and OLD_STAT +bne + +jsr b6 ++ +lda #B_BUTTON +and JOY_STAT +beq + +and OLD_STAT +bne + +jsr b7 ++ + +- ; This code is NESticle-specific, as NESticle +lda $2002 ; doesn't seem to reset the 7th bit of $2002 when +bmi - ; it's read, only when the VBlank is actually over. + ; The program is buggy in NESticle if I remove this + ; loop. +jmp main_loop + +;----------------------------------------------------------------------------- + +b0: +dec CUR_BIT +lda CUR_BIT +and #$07 +sta CUR_BIT +rts + +b1: +inc CUR_BIT +lda CUR_BIT +and #$07 +sta CUR_BIT +rts + +b2: +inc CUR_REG +lda CUR_REG +and #$03 +sta CUR_REG +rts + +b3: +dec CUR_REG +lda CUR_REG +and #$03 +sta CUR_REG +rts + +b4: +lda #$01 +ldx CUR_CHN +beq + +- +asl +dex +bne - ++ +sta $4015 ; enable sound channel + +ldy #$10 +ldx #$00 +- +lda SND_REGS,x +sta $4000,x +inx +dey +bne - +rts + +b5: +inc CUR_CHN +lda CUR_CHN +and #$03 +sta CUR_CHN + +lda #$20 +sta $2006 +lda #$69 +sta $2006 +lda CUR_CHN +ora #$20 +sta $2007 +rts + +b6: +lda #$01 +ldx CUR_BIT +beq + +clc +- +asl +dex +bne - ++ +pha +lda CUR_CHN +asl +asl +clc +adc CUR_REG +tax +pla +eor SND_REGS,x +sta SND_REGS,x +rts + +b7: +rts + +;----------------------------------------------------------------------------- + +print_regs: +lda #$20 +sta ADDR_HI +lda #$C8 +sta ADDR_LO + +lda CUR_CHN +asl +asl +tax + +print_one_reg: +lda ADDR_HI +sta $2006 +lda ADDR_LO +sta $2006 +lda SND_REGS,x +ldy #$08 +- +asl +pha +lda #$00 +rol +ora #$20 +sta $2007 +pla +dey +bne - +lda ADDR_LO +clc +adc #$40 +sta ADDR_LO +bcc + +inc ADDR_HI ++ +inx +txa +and #$03 +bne print_one_reg +rts + +set_cursors: +lda #$00 +sta $2003 +lda CUR_REG +asl +asl +asl +asl +clc +adc #$30 +sta $2004 +lda #$30 +sta $2004 +lda #$00 +sta $2004 +lda #$38 +sta $2004 + +lda CUR_REG +asl +asl +asl +asl +clc +adc #$38 +sta $2004 +lda #$31 +sta $2004 +lda #$00 +sta $2004 +lda CUR_BIT +eor #$07 +asl +asl +asl +clc +adc #$40 +sta $2004 +rts + +setup_screen: +lda #$20 +sta $2006 +lda #$60 +sta $2006 +ldx #$00 +- +lda chn_text,x +cmp #$FF +beq end_text +sta $2007 +inx +bne - +end_text: + +lda #$20 +sta ADDR_HI +lda #$C0 +sta ADDR_LO +ldy #$20 +- +lda ADDR_HI +sta $2006 +lda ADDR_LO +sta $2006 +lda #$12 ; "R" +sta $2007 +lda #$05 ; "E" +sta $2007 +lda #$07 ; "G" +sta $2007 +lda #$00 ; " " +sta $2007 +sty $2007 +lda #$2A ; ":" +sta $2007 +lda ADDR_LO +clc +adc #$40 +sta ADDR_LO +bcc + +inc ADDR_HI ++ +iny +cpy #$24 +bne - +rts + +wait_vblank: +lda $2002 +bpl wait_vblank +rts + +; Clear RAM at $0000-$07FF +; ======================== + +clear_ram: +lda #$07 ; high byte of last RAM page +sta ADDR_HI +lda #$00 ; low byte of last RAM page +sta ADDR_LO +clear_it: +ldy ADDR_HI ; load high byte of address +cpy #$01 ; if it equals 1... +beq + ; ... skip (don't mess with stack at $0100-$01FF) +ldy #$00 +- +sta (ADDR_LO),y +iny +bne - ++ +dec ADDR_HI ; decrement high byte of address +bpl clear_it +rts + +; Read joypad +; =========== +; Returns: JOY_STAT = status of all buttons + +read_joypad: +ldy #$01 +sty $4016 ; reset strobe +dey +sty $4016 ; clear strobe +sty JOY_STAT ; JOY_STAT = 0 (clear all button bits) +ldy #$08 ; do all 8 buttons +read_button: +lda $4016 ; load button status +and #$01 ; only keep lowest bit +lsr a ; transfer to carry flag +rol JOY_STAT +dey +bne read_button +rts + +; Clear nametable +; =============== +; A : Select nametable (range 0...3) + +clear_nametable: +lda #$20 +sta $2006 ; write high byte of name table address +lda #$00 +sta $2006 ; write low byte of name table address + +ldx #$04 +ldy #$00 +lda #$00 +- +sta $2007 +dey +bne - +dex +bne - +rts + +; Set palette +; =========== + +set_palette: +lda #$3F +sta $2006 +lda #$00 +sta $2006 +ldx #$00 +ldy #$20 +- +lda palette,x +sta $2007 +inx +dey +bne - +rts + +nmi: +pha ; push A on stack +txa +pha ; push X on stack +tya +pha ; push Y on stack + +lda JOY_STAT +sta OLD_STAT +jsr read_joypad + +pla +tay ; restore Y +pla +tax ; restore X +pla ; restore A +rti + +.pad $FFFA + +.dw nmi,reset,reset + +.end diff --git a/soundtest/SNDTEST.CHR b/soundtest/SNDTEST.CHR new file mode 100644 index 0000000000000000000000000000000000000000..6d2fd20c84300d1f36d503595eebf1bbaa821feb GIT binary patch literal 8192 zcmeIvy=uZx6u|K_g$@_VR4z0W5y?;-f;e1CkRl=-q;sbdF5w^|MQkZjBtA#qMr-LL z(y>G6*x3h=(sNBtKlXMzSLA0BydVDn{2t1y9EKSJnt` zxlN{teS=>ni{hFLYRNT*^#9To;x*z5Sf$;FfIU`9jrs=IO*$Bl@DbQWLW9<0SD4)) zu4%r)rJW4XJ^`!ih*;Oa=J-BK-2O`Gz8!@}?)lyv)2UmJjXUGG(u;x39*X_4YnmQ0 z2KL$7Ny}(pmv%V3zpK-J3U8V%-RN(C#W0NB`PtK+(viIa);GrYfj*_C?M#=pOA^M5!N+ug@*y8!ke2-@xW z9N0fxN~V$mQa}nw0VyB_q<|EV0#ZNV+ap_@@&<)FOiBc9sggwa+;v+3(DOHvt zCA)%wvTi^Rf(k+?Mtp@m?r~v~YN=&e2E8m;JW1(A42mn*Y~t@Fd9$krPwPd#lg#_R zH!m~q_db)$mtKE95~1)Ijz`AFN3B^B-HC|_@o(pYO+{4_)ri>XekP`y;>D)eXo@RM z@l8XW;mhgnTo7#838YA781;H!~v@RP6N;oxUq+2P=! zuS7UVG}Mi7FxODIaB!({dq`wXmtXVullA0GtdjJO!%m`}m>I4lynWMAkuUAm$k<`f zu0EHm**kQHKBwHtcJPOHY}al6v8_ZkD%1)$b^94njR}u$O14HFeOJD2kBvERC3Z`1 z(8uI?N>sY)pwiKock5k!Q-_;7REv-070vb@P}&ZDt#_Q2T&45j&~f+V=FD*Ly~kd| zqMjJz!&%8xM}+D%qqlC#8hz9`2u}CA z_Ag#7a%(cT&FA~=TKx88ZYJ_-y1gCzJ}8NFNh3AtEwUZ_dC0)(ye_skLp5>tS)bQs z`G;QqX8x0Wy2hBNu&j05Qt?2k(c6=#ICd;4p z>os|gA1`H=Ozsy78w;*OCL4v-)pxH=aXtNf``m&vzkHue%5*xb_iys$CCkYa-XxQ@ z>)JN)XOQl4)Y4;B3+!Ri)%&r?8Khf`T8=2w z6Pb$g{&?I=D>c7Xw#LciR&LXZUUbQ1D(!8_bNs#sS?2vXT$f4r;yc;P`gtao@F)mC00Izz00bZa0SG_<0uX=z a1Rwwb2tWV=5P$##AOHafKmY>&slZ=K1H_jA literal 0 HcmV?d00001 diff --git a/sprdma_and_dmc_dma/sprdma_and_dmc_dma.nes b/sprdma_and_dmc_dma/sprdma_and_dmc_dma.nes new file mode 100644 index 0000000000000000000000000000000000000000..8c013e38b2d1f5db422118a53205769382ba8213 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/sprdma_and_dmc_dma/sprdma_and_dmc_dma_512.nes b/sprdma_and_dmc_dma/sprdma_and_dmc_dma_512.nes new file mode 100644 index 0000000000000000000000000000000000000000..66680489744530d021859d83b7a6869b15e4bb28 GIT binary patch literal 40976 zcmeI5e{37&8OPsqQYUqd<0MUMAUJP-Y)L!D%(Q_utkxZ+x-hpeS|+wX#+%0WF5o6r z8o(7+)NQ>e%IXrt(82_(W!2EjC=_j#Sf^>02ByiZa+5~aF~+L4*cZnshAkze!P)cP z`O>mKP&fDk*mH62d++-`@AJOT=Y8JyBKMDOxozt;7C|89HIEk(Kmter2_OL^fCP{L z5M*Eb+YAHR#eK`G6p^g3bQ&|`> z@!NvpRLLM8cRE=%M)?&C4HqAGTGPiYOlHI$wFDCI9My^>r=ljsFQl zsH&=|YiZr`q})2tMl)xUtu5$X5NO0F(p%*ic(k`vqKMdgurgP%^Gqy96BQzr{Ii5@sBK_~Fy zF8aP|7C>9m=mc`xL3s)M-fBD$10a_)>qI2rNks zSJQYk{X3~qt2Omq27d3@u$czC!r@SFC`ifwklPbIG(xy?JP73r~@LTS~M)CPs2 zKpghRh<>k?bQwCP!9_=MqhJAxDe{AWp2$h!nmR6Q%r}IVsy^Z%;)s|aB`fTCsC>bpUXTt+IY&ugxjH7w_26nq zOx43!*Np{-?a8lb6Tu@FyMi>B_ws@b3N|R{rv_|gCJuosiDj0v-15>QPZbbnfrs-7 zk(Vp;a)aC`FO{3v>g67fII!%thGgxgrts2m<9)*}xgpimJ|#D$mbSkrFHJSJ|5$EJ zHMG-l^$oe<>1A*{-=9xb9c^fz2Xy1k3xV!D%)RObhj(`aQELaC)6yY@Ft`aUPAxDf z-8TWLZM(B$*RD{IC?xQz_8hgSRj@xawZ782v8Ow<(5AtL*iS8|h2f^dD=j4_97}TD z;T0Cy0lc69eGY@`S2dCTDX%V~59eW8Q2qOSphb%YY*W!w$@!ma`w6A}nh5J(fXL%3 zEmGj88og;B)Jl921TROtk}x zO&wj4P|!yBmN%a1DmXrPXuQhS-rX1K?e2)sP;YNfFHzMVoKt1F%7F7M1l7!r~~KeG(BkUJ0= zL?Td$C8=sju2u+rc_QhL*FX}?R_gX!X_D|;391)9VRHacz|l>S2^4*J$<2X&}~xJF4`B`)ki^hggUzWXt<}BZrQf=R=VZ3t+b~* zvik-bED?)BAcU66=AmJ#BwsDb*NCaB#hlBZa=q*-%`r*7R+5{=)U{&nI{2%?FS=;` zq<8J`2e7s4CvEC1OsAH=!*AsCU7^pApAQ10S6uMNtNdN%xCQ<;TI`7v{=&bR+r6mU zc_(gkLKc7})K_yS-{+0SJ6d9}ty^Fv-LQO-qP~1e9sPEZd-u={pkuaD{a$*|opzVL z@PuGFzSn(_>c(`mNT(-xU%vK{A}`ya!$CSmOK-x-M2}6vaTIuHGT~O}py!W&6)fru z7^Yh2s^WkzqVCyZ){04ovAFvrzXZ0k3 zJc%!&x&^euBa^98Yo%-918pg~SO8&T8l1FsUA0DpHlCmmV8C7!FXfw_Z4&r4J}lKT zHm`nNal**=PL9Aq436|M6D55L3zmcGJFrRo#;l}6uw4WG0!(RDaW93SYJQ`Kc>E=| zIt|#8a8$*s8KhmlsJs~$m~td;VM<55iY3{=N~Ky}!QzlR`&ujs0ZxlYR}4yzuE?!W zExDD?wpbXQECNp0mXKKxN1#(<;E7Ha0?!vdYHNHh+P2<#*T&5oXh(ODZrpq;{B9t3 zKazUqa}gT`fdr5M5b_^vGy>3OKD`v^xd!=x%_P2uZub-FhpP>M7s-FOXODk_Yx%frkr=pQaL~k&aM9LBP5K~?2n9mvm z`-*N4+g+aUCSq#yP0il>!?zGq?RLBF&s3`&2C`d;smudq4UUX z0uwZpd-FhtOWLnL6JjcX?|zLcPzwy?Vg3d622NyhK`$}Y<>i6*6H{Xuhc9}%Oib;! zyL{G6jF{T&i)70Xlc{s*IV*2B)yL9v87P}t&cOH{4>2|R(z)osK#Z6g%Vhek_9%>J zD8$KQ{m)-ksRQ)@DhSV19=0BNMFFl|Z#OiSu{L{%2mBlA3wPhw&DIf9y^&0&oXHSV zVe2%l!_J+=6Gnq_whL~DTr{~h?GWoEkE9Ep<$I>S<;dKiNytQzxrW``PEM{=gZ}j+@Gnr3*|RYK)Is86|NZPt1FKS zBGKdH%IjaxKDeN~osVZ~ER&A$^)+=47L%{1sk&Qezf8}^yiQ)O=*e>VJj^FkQK*ga zaz(@8Fb|!WT6Q#hcS8P|>ejiqiK%{AeY@2{O!dLWvfF`QMV+vaJo!yEHbU7DQYLBU z(VtBvBx;XA{HCVUGubSxuc=U-I_4k=Sl6?tCp{)R@=QTq&(E9!~Cu+1>viV_&@jR>?~rcpjGDC-Kd z6h=ehXUR1NJ(nIoR2A&~B&$PDhu^K}^-t0rJJvop74ETsw)W?A>2LEN}!? zls{j7eFCo#bb$nr01`j~NB{{S0VIF~kN^@u0!RP}AOR$R1dsp{Kmter34F>3{2R@Z BV$}cu literal 0 HcmV?d00001 diff --git a/sprite_hit_tests_2005.10.05/01.basics.nes b/sprite_hit_tests_2005.10.05/01.basics.nes new file mode 100644 index 0000000000000000000000000000000000000000..c51b7a4fcece025a37178f84035413c140cf64e5 GIT binary patch literal 16400 zcmeI2!D}346u{rkZg!_Jq$5}vN|7g3*gy{}C@i?tttMp_76~SQz#L@RKo9M0DNBe* zAe2t@;GtG3%V^av5Qs+)!b0GqhBXX`#e;^~ExU#u;%vcmwcCmBo5^lP@!(D2y?lJ{ z``&x==FM;3e7WqKa|@>v@I;PSm;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>N zfC(@GCcp%k025#WOn?b6f&V=L@N_$vutj2ZP!r$);@RHj_wC?mgr1xDnpPRa-hTNx zA5Zsg557qR7sW;Li3?;FB{h}RG^eInHKCf$(nQgd?@yXbhn9GWwpDW}7g@2?Ezk7C z{5Z>kx+0p!S;|-ZbEk?$k;Rn`UhU$0UHq<#pLA{7h}ZDlt~lwUlffPDcYBg#L)n4s z4fty4ljF{gcW8@&3%5Yqryz?SE{Q^Oo+(!C^`v$kH2cY~AmY{NW&V?Wks%(jvZoVWITK0^s$wNK!sZqiOC+qlUlwBIzVFp}8h* zw*``2B;$3;HL%qd6RxgQ+6ARR1!pLL)<-H>kJky6RZ~utTAYYesM^J398q&pl-ik4 z5ot}VI2lbm6}ie8-x81W_m@KN5w*vW*SFoVe0G0h$9ufy{ifczMFpnuAjoV68Cp=L zh(?v(v~7`X#y6LqcY;jShJPpG9l9!N9_oFEI3G7xuAx)z_0d@K`a)A}cV#sY_g4E2 z5U;L2aCIsqYC>24GPn~hAKvh^USB@&I`k!Mb>q}gu|lW(s<}j`H=k4ZDk`CpRnakxUUaFz= za(b!;pq|2{^pU3f8d#+AND6TQhMuA_0rImcs+QEvjSq?i$X}8&loBYp8c?V-o6SlA z1}!ONYXD)hIc!p0qzB|t{#{u)59FoGBrL1)ss8CSl}Yu;)(^qp$6c@^Sq6C!hIc7W z_720nU8(9NsjK@*N*wL?T36M6S6x?YHS1~e$9YY49}>zdP{G+hXNWel=tXUZ{S9BCSIfK zqb^HN>PEHvX$QAEWg4G%sHA?z9{+bJztW>I zIs;iV0Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>NfC>Cp2;B02Zr}9( E0O^6`qyPW_ literal 0 HcmV?d00001 diff --git a/sprite_hit_tests_2005.10.05/02.alignment.nes b/sprite_hit_tests_2005.10.05/02.alignment.nes new file mode 100644 index 0000000000000000000000000000000000000000..6039e19e95f9e3a1cf78f14b78ac37d4979b856e GIT binary patch literal 16400 zcmeI2L2DaV5P(N(TiO`oY@sPj2xUTAkRb;ZS`bvE3fSoiRAXxWfISo;L!iznZV;+V zYidH)?V*PxkX9_D?2V4E7%?4_ZHCae@Bj1TTAP)BW)b?5DB6=*5+*usn+ zZ{EClZ+70dqo<4J=N6AA;F%nNfC(@GCcp%k z025#WOn?b60Vco%m;e)C0{?pg;HsuSVT#0Be?@==h^M++Kehbl5W05aI~t`BySv2~ zJv`pM+5aKopA+ZEC(hEeD9ElTyE)m-$_{0BiaJ_7`RSy-bYO^A$gJo~nQ#^ho#ISa zER3Qo${k@hic-Aboj#V&i!^@J#!DT%*1`K7-0GNQh&S-VjyP(gmBMZJ4|9@aQ_cg; z*WufNM~=JO?tv-#HrxPZmlhdxxG@xp^?bf!Zj32cKrx^F3nCiDFY}+~V}GnyhYMpJ z|F0s}e{uh9*>EBeYy8~9uRXl)i6eN&qvPD}m}`AH*+v2>{RyOoyI%d8cp1NFZz*U4 zc}%RgX7V`h4F?I&TwHj&P?|%dP{Omt!khDN&CQnpue8KT+s98jVvGP$Kt-WZLa|rt z7x6bwD7KDwTJ}n0jgi%C+3!Wxc;s7;tcl3?abzVU-)j9`86_3@R_n{sQe)ry(mE3R zYSNkveZ`b#h^N`TrNDhcC35KYOnW3>?rmPFjAdV#2={@d51!i-&68BF@9&%G6bgyAii_wGqsQZkxUdw>wej@YM;G;*WCErGO6UbUMs7oet=e2CeE=Ul?cr zv#N%(02yNeOUA39(UcU8zF&wMXsQ&_rEIn&eVSH{*XVjiF3rg<5;Yz`wz%VT-^qfW zl?l|K>P+XB8v)d&^jy-Z!in7ZW-v7cgT^2!?K5U$;E)cSDLs?P(0WHUscXrp6##h( zox+Ejo~vP=(j&=5325p#r3sLo9j9zbUElmHpM&gq#|azoXAat``U$8nl{ z2pWw+gYqKXCy(^+IOQ`yUfSkBO{P!zPbVo&%ExK`?Dv1!0W*{uIQv0xkJdTegW$oA zBl9Jx%I7&0IJ6%$FG+hx?ptX#s!8%kadr6|5{m0M`_-&Q`d$$1Q#`V&q|4=UjuL=i z`b2iw3&0Qw>sa0z%Ug-OrR2p?qmZ#6FI2k0WL;~&l3T0{E!QNfC(@GCcp%k025#WOn?b60Vco%m;e)C0!-k)Lg0qC*ShZg3HTlN AQ~&?~ literal 0 HcmV?d00001 diff --git a/sprite_hit_tests_2005.10.05/03.corners.nes b/sprite_hit_tests_2005.10.05/03.corners.nes new file mode 100644 index 0000000000000000000000000000000000000000..9be851612ec437c1d13ba9ce4a6b3e3c189a6ab9 GIT binary patch literal 16400 zcmeI2L1-IC6hOb$vZNZ}Y@sPj2<3;gAVUr+q#&qBw$u(Q5UH_!>S>`x$dH3`bAu3R zi>V1&w}&2*K#EvM=@<;{v4MghFr-E`dkQ@?=}JMu!^*g?w^%cftFrN3;%nV zKY#x0-#>5ujxRbtw|Fc8&*gxH2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco% zm;e)C0!)AjFaajO1egF5_}>!%FJlLjwn(fERs}eKc(S+EY6mYO^xVXEG)g1(cFV8$ zc&vA8@O>gUC(e;iyhYQZq`I=|=2SPUI#k_B>S*=UXH&-Vz9n8KvuZ5oqggC<%QHPO zKaR4fo`||}l=4OY)KSwEIXv6JOI^I)#rs{{>e^(8v-ojW9C6V}vq=7HuL z@a@ni$K7pj-xdQGZi2Q;i!9pQ1PaZ0$*kHN6WUeK?B~CN7>(k?{HOWYAM4A93u7Js zt|HcdasO@E;Y1?V_=S&O`*`0MFW?=YwsX5{uMKEt8wsTJCy^TN`i<-2HGH?TrJ)Pt zv9ZyfF)``ei}MSmr8%@pOZfIX3+Lw+7Qsnqr3njv^Ti1_z)!nXLSy6AHigqPk#;|5 ztl-aWp}7X$X^WKm$;h4<*^}h2D}QoiC&?e#laXCc`<8fCc(fdPPw8|IyuR&@<;zE# z+upNv?{{@%mOv+kdqH|DNYfzROq7j9b2GlNe8LIRRU7_g5g*cPqvE03cZl<0apfBs zLbVaMb+0cpRdyHG0`YLI-vIIE+G96EJBfXBpQrUwHKpsR>?(lTg+bvXP4Cswr1VINqXhI!lF|ey%qA&YQa3g~ zH;YiXAY~{eP;k|tSZOw!l_CsUQp(lWq`XKE$fNu_vT_E$;q^3VrgV8sU!o%?fjnst|RpiJ`E2_3QaKTANm!6;(A{AuS4XEtK zZJX*8#y6vY#;fIBx)>X{8QqRo==rE#*S#mUIwOj5>xX_in0ETSne4 zUI#zwl&MuZlt@2qkN-QA-{?_`??Bc}fC(@GCcp%k025#WOn?b60Vco%m;e)C0!)Aj YFaajO1egF5U;_UY0yq6%+c*3_0qz^npa1{> literal 0 HcmV?d00001 diff --git a/sprite_hit_tests_2005.10.05/04.flip.nes b/sprite_hit_tests_2005.10.05/04.flip.nes new file mode 100644 index 0000000000000000000000000000000000000000..d584ce42ff1b743ce7d0bbb1d515197917c97fb5 GIT binary patch literal 16400 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 literal 0 HcmV?d00001 diff --git a/sprite_hit_tests_2005.10.05/06.right_edge.nes b/sprite_hit_tests_2005.10.05/06.right_edge.nes new file mode 100644 index 0000000000000000000000000000000000000000..c6f5bfebda2e5256c47e79e3c70266d18e30cd60 GIT binary patch literal 16400 zcmeI2QHUE=6hLn#*(5H@b_6R!DdkEPve1tR6#|AjLbjbikfob{=R-mk`_cX_B`g*R zE`_On_|XNfC(^x|2+Y4)3!fji&%ZMD!>86(}T@U*MA;i(2RXeqZHy`w{*(G z6N9^>?_&OWah`nQO)`t3>Po6xR9!)JsJheC(dyZcW{s77OT0?csLp1K;n9V@-5Yxb6O7&ys8?JCMBr zU;gHiv?KYtjHqEq}Qd*qMwdy|Ecj($)P>A$(3 zSvE1mB8{JTxaHx`o_G$w@n|1geY-xQE!~JA;V&TFfV7)8i6q7<}npkx}6LBY|i6bYj39WewzwL@Z zjpH=_sw-xcbEFK3vGYKUXU5Kia)zsup`n!WEb%1wa3ydb(-9xJL%TVZ&mL}UyHD2L z-_^NU0-Yr8`Ke7mMT2N#RXQ!(BHMyzti0s-sb|k;!t>uy;u^g%EFP+Thj34dE89p@ zUN@q)?hb{f%I-?t7Z2*g28h?|kD6)PL|BB)^cViUaCmUj)doZP$nDWh*y@i%hbJh~ z6yJ_EVJHCuGMP+h%47oi%Ya^UYcC$^0EM)U1%Rxzgk|e2=wwo&)BQr!K~F0oUC!mo z%BSnKXpLcH)zZA`#*&T(kSlfM;GG;8IhDW~)Z~2raw~wfIU}ExH8`2S)DGt6;IMU= zRP%Fo>rj#oSp=R57IYTi-Lt+rdWB>Bg24fP%p ziYw(_EvJ*d9|U_8k7hN}l}aT~2|zG^GI!Yvz!EX%xaq`ACuTaDDUMmitOKS<(-%zL z3;kDei`B`@b?q}6Qqv!+!T35P=^ju)g>^VKlD%q+qb4|s@KYz~HArPxZTeJf)3#03 z3DfVPfX2(E9lGre+z7vk*XjANO4r>3Tb;~b#1ePEAEx|yXPCNf-Lw!MR6nn7R7=$! ze$XpXd$&g^4O8~?zeDM@0k!B;$eIZ-0Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XB Wzyz286JP>N;J-rPj`vIVw)ZC_HOoK% literal 0 HcmV?d00001 diff --git a/sprite_hit_tests_2005.10.05/07.screen_bottom.nes b/sprite_hit_tests_2005.10.05/07.screen_bottom.nes new file mode 100644 index 0000000000000000000000000000000000000000..49d28e1a836d45134d0e8850d8dea111b2566bf8 GIT binary patch literal 16400 zcmeI2(Tf{p5Wpv!ToRAtx`LIZlrmC<9P}YV3jsr2^{(teY>!_4fPIjVgHqZjk0Trv z2^@v3K8Uo1N{Cea4i3&oK_MW1)FXxkq4=Q3CMD_7hwG-`HQMW*^KG)JSbXzAVdg%* znQ!LX+1cMWyZ4f_bBjk}@JtR^m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>N zfC(@GCcp%k025#WOn?b6f&V=LaMQLwVT)LGuq?m<#N)kjZebwxOhvlK3SCk~sY$lziJSGxF77k}#F=Utl?;!XUpD-PAsN#U0JhdoKMuKYm$ z8hrhmM}a$A?w&0Mb+`rE4sEjN;o>MX=OwdjKl}N^(27p+pZrlg(pN?sBOU#qBGP{g zKeuhF{ied^4W0^orxBo-FU$ zw?l8jW_Or6JVBAB{B~5ep#%)bWHO;ElL_cA1A4`+yu7ai%%*jm1;|P|}eBxk5|!-phfJQw6L-MNa20H3C?jGV)1T zfus2g&0uN@_8a?2wLWb(_9f{+P8r#3mi9|ElwM6vEd!{hFerVf>ApIeR31rwSb&~R zP?-R^*#uQf>gM_%Ybty}84 zeHl4WX#7svs z#UX1x>wqcJ^aWEdg8q=gVtKT3UHgQFH1sFR81{dX8lM^}?8Bjx{AF7l)WJ!FpE^Oe zL2AQt-KS<7k1gs>7=I51)Lt!Y)2m*?_3)c`m97uFbj^KitCRVQSmO4N{gglL^ix-@ z>lVVj@|WfHa^d|Be%dL}Sm{tn{ggfa?@&0^qY-@ySu+79zyz286JP>NfC(@GCcp%k i025#WOn?b60Vco%m;e)C0!)Aj{8tFv^6s~9dVc~dozd6; literal 0 HcmV?d00001 diff --git a/sprite_hit_tests_2005.10.05/08.double_height.nes b/sprite_hit_tests_2005.10.05/08.double_height.nes new file mode 100644 index 0000000000000000000000000000000000000000..cdb3e1b9c2a79f239ea7e33b9816826c140414e1 GIT binary patch literal 16400 zcmeI2QHUEw7=ZumU6Xhm*A=WRrO02Zkb^!%PzV_6DtGM$7CpT9zKFye7HMDfDB-Bc z!Etm?AAD#Fm9S884i5Cuf)FSS^@zv5SbVT$FD2pVL%Jz=jW*r$pG`Ie#aB`I{|xib zKmY7M|9mq$dD*w-7mudksT{B{0Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>NfC(@GCcp%k025#W|9b-9XPxknBT}pVWdSZAp6G1-yc<4?(D70~P%DGj*|T2= z@M!0H|Ho8#TAU`Ic!Rn{NmaJ0=2bPPDpb`8s%Z4o7gNU4z9n8JvuZ5m<6bPa?b(i4 z7)M!DPsG(YihVvfdBikD4$rjkLL0BN@lG4J+721wb^NR?4twZkaNGaGnIhR#{XqS7 z_25$zmoEvRtwNESCNFk+v2&v#+P`@Hx!uMKR8hSt; z2kX1DCQb&UMk;U?7v3qA=g}&aaqjJR-?XVYUpixz0Wa+eq)isby%0ZdiwPn{ku{B~ zl;&Nme}caSLh}r4?vnMfvL?v7sjLqYEA~~DH5vQtOkjy8h5Jj9|Co09!0$QUSiZi$ zx$Qq$^M6-cXVL6w?1q`GFhh-GQB_LAv8Zo0FqV$HVW#T9za-*Qnl3&(gvBM!qr;W2 zXDO+Tq^$Wpp{Zkcel-;LR(o|2udP1xvb2Ku5PI3~!dr3k(Pdxj^yEXoMQ_55_Aqq3 zbs|gg#|tx*fC0H&E?#Ob7tt>Vdd;srKhOc@vO3NI3S_0V;Ffgw5Y0~WRnII>>b&8zW_!-C9ncDIa55>h+t*fD5hl%jup=~qv>fF zGzMv9pK=-lNjj3#Mn0dX@lq9~SJKnV0BRKmg^xAOtD{Njkrams=-Ek16QD3RN!gOR zy7{G9gu+=VBPoG`s{+MJqtU1oq2H8JHv14Y8iNMqMY>NO<=>H&Q$SvNOu~vvpYoqc zQ<{{IZ2l7Vf87BmmKBiQD7sDKWM@CRyCYS;BsDdkq`QX$iYNRWbN|6$PXy#bqTo8dJQtlDcoiN>$>1w7pY?bmZm?BFz zn0hJn2jmvZBg^-llNwUdAFIajT}b1oy+JK?VZ|qM=%x`>M;v(IPR5s>pb3!n)qgM=eUEmvP4b4)&`ZD#;zlnh7ugCcp%k025#WOn?b60Vco%m;e)C0!)Aj ZFaajO1egF5U;<3wze3u~2eCPYl z`R+NVzkBlKCFdunp9;Z&?6EKbCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5 zU;<2l2`~XBzyz286JP@WdjjCb?e>r@LJQqF0S+L(+*&mn?Z@!RRyp(ytz!66>rVER zhi6(V-S0x}bK)HN#A{?088v0qG^wTuHKCfGp@~ipUmiAQb}Vs*wgqD*8Cdb1X4Y(p zsX>%!^+YfYqGaFqPMrvUPIYTyuA9(JjL@(C*M7RaF>;<~(5*>`P(oQ_voXt8(<4L#+=>-+okow123t z`@hrZ>m%-e9osjA`WhP^LLHy4i(~kBT>#3az0h52_E z+%smLcG|ImEj}g{v;ch~2vNU9lBGEH!lnLLbUQ**&GX4ZTWl_LN+4cYxL1x-Q+ylt#ZUqUBoc|hl1TXUmjJ!!7EkW#026T? zCjgSx6y~fKK_`=Vt>AX}!>G|l$9Dw>S3<@7; z%B!PE<&mU&1?cezl?jlVh)}hpu2w!X(~!C-r7tB=a5W&EuU4!1G<0iH%32rvYIV0t zb&>9pNBP%f{w$D}9+NPy%BT8Aqf{o!Y2_Ur1oxmvXtC4Vojq4JPWTq(DUDV_8!-`}Qqv@4R%=ksYQ0Q}Lh)U4-& zB|>z0IbqWYnT}?P<5ni=fGOg1C#h!D{~))R+uyma-M`z^qSvEQYEEjXpbvXSvQvxh zmBEPw7nYzjNNrdsx2f3%V~x5K2Dh4k(zDq}OTB`_LT0Sc)o`V`MDc>IU3BkL#+C0o zvG%CbiK#0XPi_WRYW8jeNfC(@G mCcp%k025#WOn?b60Vco%m;e)C0!)Aj{AUENdCxVjdjA077wJs^ literal 0 HcmV?d00001 diff --git a/sprite_hit_tests_2005.10.05/10.timing_order.nes b/sprite_hit_tests_2005.10.05/10.timing_order.nes new file mode 100644 index 0000000000000000000000000000000000000000..cf166b7598c6bc474a1b8f7816de3579d3224546 GIT binary patch literal 16400 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 AXaE2J literal 0 HcmV?d00001 diff --git a/sprite_hit_tests_2005.10.05/readme.txt b/sprite_hit_tests_2005.10.05/readme.txt new file mode 100644 index 0000000..8ffe65e --- /dev/null +++ b/sprite_hit_tests_2005.10.05/readme.txt @@ -0,0 +1,162 @@ +NTSC NES PPU Sprite 0 Test ROMs +------------------------------- +These ROMs test much of sprite 0 hit behavior on a NTSC NES PPU. They +have been tested on an actual NES and all give a passing result. I wrote +them to verify that my NES emulator's sprite 0 hit emulation was working +properly. + +Each test ROM runs several tests and reports the result on screen and by +beeping a number of times. See below for the meaning of failure codes +for each test. It's best to run the tests in order, because some earlier +ROMs test things that later ones assume will work properly. + +The main source code for each test is included, and most tests are +clearly divided into sections. All the asm source is included, but it +runs on a custom devcart and assembler so it will require some effort to +assemble. Contact me if you'd assistance porting them to your setup. + + +01.basics +--------- +Tests basic sprite 0 hit behavior (nothing timing related). + +2) Sprite hit isn't working at all +3) Should hit even when completely behind background +4) Should miss when background rendering is off +5) Should miss when sprite rendering is off +6) Should miss when all rendering is off +7) All-transparent sprite should miss +8) Only low two palette index bits are relevant +9) Any non-zero palette index should hit with any other +10) Should miss when background is all transparent +11) Should always miss other sprites + + +02.alignment +------------ +Tests alignment of sprite hit with background. Places a solid background +tile in the middle of the screen and places the sprite on all four edges +both overlapping and non-overlapping. + +2) Basic sprite-background alignment is way off +3) Sprite should miss left side of bg tile +4) Sprite should hit left side of bg tile +5) Sprite should miss right side of bg tile +6) Sprite should hit right side of bg tile +7) Sprite should miss top of bg tile +8) Sprite should hit top of bg tile +9) Sprite should miss bottom of bg tile +10) Sprite should hit bottom of bg tile + + +03.corners +---------- +Tests sprite 0 hit using a sprite with a single pixel set, for each of +the four corners. + +2) Lower-right pixel should hit +3) Lower-left pixel should hit +4) Upper-right pixel should hit +5) Upper-left pixel should hit + + +04.flip +------- +Tests sprite 0 hit for single pixel sprite and background. + +2) Horizontal flipping doesn't work +3) Vertical flipping doesn't work +4) Horizontal + Vertical flipping doesn't work + + +05.left_clip +------------ +Tests sprite 0 hit with regard to clipping of left 8 pixels of screen. + +2) Should miss when entirely in left-edge clipping +3) Left-edge clipping occurs when $2001 is not $1e +4) Left-edge clipping is off when $2001 = $1e +5) Left-edge clipping blocks all hits only when X = 0 +6) Should miss; sprite pixel covered by left-edge clip +7) Should hit; sprite pixel outside left-edge clip +8) Should hit; sprite pixel outside left-edge clip + + +06.right_edge +------------- +Tests sprite 0 hit with regard to column 255 (ignored) and off right +edge of screen. + +2) Should always miss when X = 255 +3) Should hit; sprite has pixels < 255 +4) Should miss; sprite pixel is at 255 +5) Should hit; sprite pixel is at 254 +6) Should also hit; sprite pixel is at 254 + + +07.screen_bottom +---------------- +Tests sprite 0 hit with regard to bottom of screen. + +2) Should always miss when Y >= 239 +3) Can hit when Y < 239 +4) Should always miss when Y = 255 +5) Should hit; sprite pixel is at 238 +6) Should miss; sprite pixel is at 239 +7) Should hit; sprite pixel is at 238 + + +08.double_height +---------------- +Tests basic sprite 0 hit double-height operation. + +2) Lower sprite tile should miss bottom of bg tile +3) Lower sprite tile should hit bottom of bg tile +3) Lower sprite tile should miss top of bg tile +4) Lower sprite tile should hit top of bg tile + + +09.timing_basics +---------------- +Tests sprite 0 hit timing to within 12 or so PPU clocks. Tests flag +timing for upper-left corner, upper-right corner, lower-right corner, +and time flag is cleared (at end of VBL). Depends on proper PPU frame +length (less than 29781 CPU clocks). + +2) Upper-left corner too soon +3) Upper-left corner too late +4) Upper-right corner too soon +5) Upper-right corner too late +6) Lower-left corner too soon +7) Lower-left corner too late +8) Cleared at end of VBL too soon +9) Cleared at end of VBL too late + + +10.timing_order +--------------- +Tests sprite 0 hit timing for which pixel it first reports hit on. Each +test hits at the same location on screen, though different relative to +the position of the sprite. + +2) Upper-left corner too soon +3) Upper-left corner too late +4) Upper-right corner too soon +5) Upper-right corner too late +6) Lower-left corner too soon +7) Lower-left corner too late +8) Lower-right corner too soon +9) Lower-right corner too late + + +11.edge_timing +-------------- +Tests sprite 0 hit timing for which pixel it first reports hit on when +some pixels are under clip, or at or beyond right edge. + +2) Hit time shouldn't be based on pixels under left clip +3) Hit time shouldn't be based on pixels at X=255 +4) Hit time shouldn't be based on pixels off right edge + +-- +Shay Green (swap to e-mail) diff --git a/sprite_hit_tests_2005.10.05/source/01.basics.asm b/sprite_hit_tests_2005.10.05/source/01.basics.asm new file mode 100644 index 0000000..ae45964 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/01.basics.asm @@ -0,0 +1,90 @@ +; Tests basic sprite 0 hit behavior (nothing timing related). + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT BASICS",0 + .code + +reset: + jsr begin_sprite_hit_tests + + lda #solid_tile + jsr fill_nametable + + ; Put sprite in middle of screen + lda #0 + sta sprite_attr + ldx #128 + ldy #120 + jsr set_sprite_xy + + lda #solid_tile + sta sprite_tile + lda #2;) Sprite hit isn't working at all + ldx #$18 + jsr sprite_should_hit + + lda #$20 + sta sprite_attr + lda #3;) Should hit even when completely behind background + ldx #$18 + jsr sprite_should_hit + + lda #4;) Should miss when background rendering is off + ldx #$10 + jsr sprite_should_miss + + lda #5;) Should miss when sprite rendering is off + ldx #$08 + jsr sprite_should_miss + + lda #6;) Should miss when all rendering is off + ldx #$00 + jsr sprite_should_miss + + lda #blank_tile + sta sprite_tile + + lda #7;) All-transparent sprite should miss + ldx #$18 + jsr sprite_should_miss + + lda #$ff + sta sprite_attr + lda #8;) Only low two palette index bits are relevant + ldx #$18 + jsr sprite_should_miss + + lda #1 + jsr fill_nametable + lda #2 + sta sprite_tile + lda #0 + sta sprite_attr + + lda #9;) Any non-zero palette index should hit with any other + ldx #$18 + jsr sprite_should_hit + + lda #0 + jsr fill_nametable + + lda #10;) Should miss when background is all transparent + ldx #$18 + jsr sprite_should_miss + + lda #120 + sta sprites + 4 + lda #3 + sta sprites + 5 + lda #0 + sta sprites + 6 + lda #128 + sta sprites + 7 + lda #11;) Should always miss other sprites + ldx #$18 + jsr sprite_should_miss + + jmp tests_passed + diff --git a/sprite_hit_tests_2005.10.05/source/02.alignment.asm b/sprite_hit_tests_2005.10.05/source/02.alignment.asm new file mode 100644 index 0000000..65cb5b4 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/02.alignment.asm @@ -0,0 +1,98 @@ +; Tests alignment of sprite hit with background. +; Places a solid background tile in the middle of the screen and +; places the sprite on all four edges both overlapping and +; non-overlapping. + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT ALIGNMENT",0 + .code + +reset: + jsr begin_sprite_hit_tests + + ; Single solid tile in middle of screen + lda #$21 + ldx #$f0 + jsr set_vaddr + lda #solid_tile + sta $2007 + + lda #0 + sta sprite_attr + lda #solid_tile + sta sprite_tile + + ldx #128 + ldy #119 + jsr set_sprite_xy + lda #2;) Basic sprite-background alignment is way off + ldx #$18 + jsr sprite_should_hit + + ; Left + + ldx #120 + ldy #119 + jsr set_sprite_xy + lda #3;) Sprite should miss left side of bg tile + ldx #$18 + jsr sprite_should_miss + + ldx #121 + ldy #119 + jsr set_sprite_xy + lda #4;) Sprite should hit left side of bg tile + ldx #$18 + jsr sprite_should_hit + + ; Right + + ldx #136 + ldy #119 + jsr set_sprite_xy + lda #5;) Sprite should miss right side of bg tile + ldx #$18 + jsr sprite_should_miss + + ldx #135 + ldy #119 + jsr set_sprite_xy + lda #6;) Sprite should hit right side of bg tile + ldx #$18 + jsr sprite_should_hit + + ; Above + + ldx #128 + ldy #111 + jsr set_sprite_xy + lda #7;) Sprite should miss top of bg tile + ldx #$18 + jsr sprite_should_miss + + ldx #128 + ldy #112 + jsr set_sprite_xy + lda #8;) Sprite should hit top of bg tile + ldx #$18 + jsr sprite_should_hit + + ; Below + + ldx #128 + ldy #127 + jsr set_sprite_xy + lda #9;) Sprite should miss bottom of bg tile + ldx #$18 + jsr sprite_should_miss + + ldx #128 + ldy #126 + jsr set_sprite_xy + lda #10;) Sprite should hit bottom of bg tile + ldx #$18 + jsr sprite_should_hit + + jmp tests_passed diff --git a/sprite_hit_tests_2005.10.05/source/03.corners.asm b/sprite_hit_tests_2005.10.05/source/03.corners.asm new file mode 100644 index 0000000..d7a03f1 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/03.corners.asm @@ -0,0 +1,61 @@ +; Tests sprite 0 hit using a sprite with a single pixel set, +; for each of the four corners. + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT CORNERS",0 + .code + +set_params: + sta sprite_tile + eor #$03 + pha + jsr set_sprite_xy + lda #$21 + ldx #$f0 + jsr set_vaddr + pla + sta $2007 + rts + .code + +reset: + jsr begin_sprite_hit_tests + + lda #0 + sta sprite_attr + + lda #lower_right_tile + ldx #121 + ldy #112 + jsr set_params + lda #2;) Lower-right pixel should hit + ldx #$18 + jsr sprite_should_hit + + lda #lower_left_tile + ldx #135 + ldy #112 + jsr set_params + lda #3;) Lower-left pixel should hit + ldx #$18 + jsr sprite_should_hit + + lda #upper_right_tile + ldx #121 + ldy #126 + jsr set_params + lda #4;) Upper-right pixel should hit + ldx #$18 + jsr sprite_should_hit + + lda #upper_left_tile + ldx #135 + ldy #126 + jsr set_params + lda #5;) Upper-left pixel should hit + ldx #$18 + jsr sprite_should_hit + + jmp tests_passed diff --git a/sprite_hit_tests_2005.10.05/source/04.flip.asm b/sprite_hit_tests_2005.10.05/source/04.flip.asm new file mode 100644 index 0000000..1a42fb6 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/04.flip.asm @@ -0,0 +1,52 @@ +; Tests sprite 0 hit for single pixel sprite and background. + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT FLIPPING",0 + .code + +test_flip: + jsr set_sprite_xy + rts + .code + +reset: + jsr begin_sprite_hit_tests + + ; Single solid tile in middle of screen + lda #$21 + ldx #$f0 + jsr set_vaddr + lda #solid_tile + sta $2007 + + ldx #121 + ldy #112 + jsr set_sprite_xy + + lda #$40 + sta sprite_attr + lda #lower_left_tile + sta sprite_tile + lda #2;) Horizontal flipping doesn't work + ldx #$18 + jsr sprite_should_hit + + lda #$80 + sta sprite_attr + lda #upper_right_tile + sta sprite_tile + lda #3;) Vertical flipping doesn't work + ldx #$18 + jsr sprite_should_hit + + lda #$c0 + sta sprite_attr + lda #upper_left_tile + sta sprite_tile + lda #4;) Horizontal + Vertical flipping doesn't work + ldx #$18 + jsr sprite_should_hit + + jmp tests_passed diff --git a/sprite_hit_tests_2005.10.05/source/05.left_clip.asm b/sprite_hit_tests_2005.10.05/source/05.left_clip.asm new file mode 100644 index 0000000..b871159 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/05.left_clip.asm @@ -0,0 +1,72 @@ +; Tests sprite 0 hit with regard to clipping of left 8 pixels of screen. + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT LEFT CLIPPING",0 + .code + +reset: + jsr begin_sprite_hit_tests + + lda #solid_tile + jsr fill_nametable + lda #0 + sta sprite_attr + ldy #120 + sta sprite_y + + ; Basic + + lda #solid_tile + sta sprite_tile + + lda #0 + sta sprite_x + lda #2;) Should miss when entirely in left-edge clipping + ldx #$18 + jsr sprite_should_miss + + lda #3;) Left-edge clipping occurs when $2001 is not $1e + ldx #$1a + jsr sprite_should_miss + lda #3 + ldx #$1c + jsr sprite_should_miss + + lda #4;) Left-edge clipping is off when $2001 = $1e + ldx #$1e + jsr sprite_should_hit + + lda #1 + sta sprite_x + lda #5;) Left-edge clipping blocks all hits only when X = 0 + ldx #$18 + jsr sprite_should_hit + + ; Detailed + + lda #upper_left_tile + sta sprite_tile + lda #7 + sta sprite_x + lda #6;) Should miss; sprite pixel covered by left-edge clip + ldx #$18 + jsr sprite_should_miss + + lda #8 + sta sprite_x + lda #7;) Should hit; sprite pixel outside left-edge clip + ldx #$18 + jsr sprite_should_hit + + lda #upper_right_tile + sta sprite_tile + lda #1 + sta sprite_x + lda #8;) Should hit; sprite pixel outside left-edge clip + ldx #$18 + jsr sprite_should_hit + + jmp tests_passed + diff --git a/sprite_hit_tests_2005.10.05/source/06.right_edge.asm b/sprite_hit_tests_2005.10.05/source/06.right_edge.asm new file mode 100644 index 0000000..dff7267 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/06.right_edge.asm @@ -0,0 +1,60 @@ +; Tests sprite 0 hit with regard to column 255 (ignored) and off +; right edge of screen. + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT RIGHT EDGE",0 + .code + +reset: + jsr begin_sprite_hit_tests + lda #solid_tile + jsr fill_nametable + lda #0 + sta sprite_attr + lda #120 + sta sprite_y + + ; Basic + + lda #solid_tile + sta sprite_tile + lda #255 + sta sprite_x + lda #2;) Should always miss when X = 255 + ldx #$1e + jsr sprite_should_miss + + lda #254 + sta sprite_x + lda #3;) Should hit; sprite has pixels < 255 + ldx #$1e + jsr sprite_should_hit + + ; Detailed + + lda #upper_right_tile + sta sprite_tile + lda #248 + sta sprite_x + lda #4;) Should miss; sprite pixel is at 255 + ldx #$1e + jsr sprite_should_miss + + lda #247 + sta sprite_x + lda #5;) Should hit; sprite pixel is at 254 + ldx #$1e + jsr sprite_should_hit + + lda #upper_left_tile + sta sprite_tile + lda #254 + sta sprite_x + lda #6;) Should also hit; sprite pixel is at 254 + ldx #$1e + jsr sprite_should_hit + + jmp tests_passed + diff --git a/sprite_hit_tests_2005.10.05/source/07.screen_bottom.asm b/sprite_hit_tests_2005.10.05/source/07.screen_bottom.asm new file mode 100644 index 0000000..db2c166 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/07.screen_bottom.asm @@ -0,0 +1,65 @@ +; Tests sprite 0 hit with regard to bottom of screen. + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT SCREEN BOTTOM",0 + .code + +reset: + jsr begin_sprite_hit_tests + lda #solid_tile + jsr fill_nametable + lda #0 + sta sprite_attr + lda #128 + sta sprite_x + + ; Basic + + lda #solid_tile + sta sprite_tile + lda #239 + sta sprite_y + lda #2;) Should always miss when Y >= 239 + ldx #$1e + jsr sprite_should_miss + + lda #238 + sta sprite_y + lda #3;) Can hit when Y < 239 + ldx #$1e + jsr sprite_should_hit + + lda #255 + sta sprite_y + lda #4;) Should always miss when Y = 255 + ldx #$1e + jsr sprite_should_miss + + ; Detailed + + lda #lower_right_tile + sta sprite_tile + lda #231 + sta sprite_y + lda #5;) Should hit; sprite pixel is at 238 + ldx #$1e + jsr sprite_should_hit + + lda #232 + sta sprite_y + lda #6;) Should miss; sprite pixel is at 239 + ldx #$1e + jsr sprite_should_miss + + lda #upper_left_tile + sta sprite_tile + lda #238 + sta sprite_y + lda #7;) Should hit; sprite pixel is at 238 + ldx #$1e + jsr sprite_should_hit + + jmp tests_passed + diff --git a/sprite_hit_tests_2005.10.05/source/08.double_height.asm b/sprite_hit_tests_2005.10.05/source/08.double_height.asm new file mode 100644 index 0000000..4b79fb2 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/08.double_height.asm @@ -0,0 +1,55 @@ +; Tests basic sprite 0 hit double-height operation. + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT DOUBLE HEIGHT",0 + .code + +reset: + jsr begin_sprite_hit_tests + + lda #$20 ; double-height sprites + sta $2000 + + ; Single solid tile in middle of screen + lda #$21 + ldx #$f0 + jsr set_vaddr + lda #solid_tile + sta $2007 + + lda #0 + sta sprite_attr + lda #0 ; tiles 0 and 1 + sta sprite_tile + + ldx #128 + ldy #119 + jsr set_sprite_xy + lda #2;) Lower sprite tile should miss bottom of bg tile + ldx #$18 + jsr sprite_should_miss + + ldx #128 + ldy #118 + jsr set_sprite_xy + lda #3;) Lower sprite tile should hit bottom of bg tile + ldx #$18 + jsr sprite_should_hit + + ldx #128 + ldy #103 + jsr set_sprite_xy + lda #3;) Lower sprite tile should miss top of bg tile + ldx #$18 + jsr sprite_should_miss + + ldx #128 + ldy #104 + jsr set_sprite_xy + lda #4;) Lower sprite tile should hit top of bg tile + ldx #$18 + jsr sprite_should_hit + + jmp tests_passed diff --git a/sprite_hit_tests_2005.10.05/source/09.timing_basics.asm b/sprite_hit_tests_2005.10.05/source/09.timing_basics.asm new file mode 100644 index 0000000..843c719 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/09.timing_basics.asm @@ -0,0 +1,83 @@ +; Tests sprite 0 hit timing to within 12 or so PPU clocks. +; Tests flag timing for upper-left corner, upper-right corner, +; lower-right corner, and time flag is cleared (at end of VBL). +; Depends on proper PPU frame length (less than 29781 CPU clocks). + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT TIMING",0 + .code + +reset: + jsr begin_sprite_hit_tests + + lda #solid_tile + jsr fill_nametable + + lda #0 + sta sprite_attr + lda #solid_tile + sta sprite_tile + + ldx #0 + ldy #0 + jsr set_sprite_xy + lda #2;) Upper-left corner + ldx #$1e + jsr begin_sprite_hit_timing + ldy #3 ; 1943 delay + lda #127 + jsr delay_ya3 + ldx $2002 + ldy $2002 + jsr check_sprite_hit_timing + + ldx #254 + ldy #0 + jsr set_sprite_xy + lda #4;) Upper-right corner + ldx #$1e + jsr begin_sprite_hit_timing + ldy #5 ; 2027 delay + lda #79 + jsr delay_ya5 + ldx $2002 + ldy $2002 + jsr check_sprite_hit_timing + + ldx #0 + ldy #238 + jsr set_sprite_xy + lda #6;) Lower-left corner + ldx #$1e + jsr begin_sprite_hit_timing + ldy #111 ; 28995 delay + lda #51 + jsr delay_ya7 + ldx $2002 + ldy $2002 + jsr check_sprite_hit_timing + + ldx #0 + ldy #0 + jsr set_sprite_xy + lda #8;) Cleared at end of VBL + ldx #$1e + jsr begin_sprite_hit_timing + ldy #60 ; 29780 delay + lda #98 + jsr delay_ya3 + ldy #3 ; 1715 delay + lda #112 + jsr delay_ya0 + lda $2002 + ldy $2002 + eor #$40 ; invert readings + tax + tya + eor #$40 + tay + jsr check_sprite_hit_timing + + jmp tests_passed diff --git a/sprite_hit_tests_2005.10.05/source/10.timing_order.asm b/sprite_hit_tests_2005.10.05/source/10.timing_order.asm new file mode 100644 index 0000000..0ae5912 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/10.timing_order.asm @@ -0,0 +1,61 @@ +; Tests sprite 0 hit timing for which pixel it first reports hit on. +; Each test hits at the same location on screen, though different +; relative to the position of the sprite. + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT ORDER",0 + .code + +test_hit_time: + jsr set_sprite_xy + ldx #$18 + jsr begin_sprite_hit_timing + ldy #88 ; 15511 delay + lda #34 + jsr delay_ya6 + ldx $2002 ; timing really tight here + ldy $2002 + jsr check_sprite_hit_timing + rts + .code + +reset: + jsr begin_sprite_hit_tests + + ; Solid tile in middle of screen + lda #blank_tile + jsr fill_nametable + lda #$21 + ldx #$f0 + jsr set_vaddr + lda #solid_tile + sta $2007 + + lda #0 + sta sprite_attr + lda #solid_tile + sta sprite_tile + + lda #2;) Upper-left corner + ldx #128 + ldy #119 + jsr test_hit_time + + lda #4;) Upper-right corner + ldx #123 + ldy #119 + jsr test_hit_time + + lda #6;) Lower-left corner + ldx #128 + ldy #114 + jsr test_hit_time + + lda #8;) Lower-right corner + ldx #123 + ldy #114 + jsr test_hit_time + + jmp tests_passed diff --git a/sprite_hit_tests_2005.10.05/source/11.edge_timing.asm b/sprite_hit_tests_2005.10.05/source/11.edge_timing.asm new file mode 100644 index 0000000..5d07ba2 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/11.edge_timing.asm @@ -0,0 +1,62 @@ +; Tests sprite 0 hit timing for which pixel it first reports hit on +; when some pixels are under clip, or at or beyond right edge. + + .include "prefix_sprite_hit.a" + +test_name: + .db "SPRITE HIT EDGE TIMING",0 + .code + +reset: + jsr begin_sprite_hit_tests + + lda #solid_tile + jsr fill_nametable + + lda #120 + sta sprite_y + lda #two_corners_tile + sta sprite_tile + lda #0 + sta sprite_attr + + lda #7 + sta sprite_x + lda #2;) Hit time shouldn't be based on pixels under left clip + ldx #$18 + jsr begin_sprite_hit_timing + ldy #27 ; 16380 delay + lda #120 + jsr delay_ya1 + lda $2002 + and #$40 + jsr error_if_ne + + lda #$80 + sta sprite_attr + + lda #248 + sta sprite_x + lda #3;) Hit time shouldn't be based on pixels at X=255 + ldx #$18 + jsr begin_sprite_hit_timing + ldy #41 ; 16458 delay + lda #79 + jsr delay_ya0 + lda $2002 + and #$40 + jsr error_if_ne + + lda #249 + sta sprite_x + lda #4;) Hit time shouldn't be based on pixels off right edge + ldx #$18 + jsr begin_sprite_hit_timing + ldy #41 ; 16458 delay + lda #79 + jsr delay_ya0 + lda $2002 + and #$40 + jsr error_if_ne + + jmp tests_passed diff --git a/sprite_hit_tests_2005.10.05/source/prefix_sprite_hit.a b/sprite_hit_tests_2005.10.05/source/prefix_sprite_hit.a new file mode 100644 index 0000000..eca5a61 --- /dev/null +++ b/sprite_hit_tests_2005.10.05/source/prefix_sprite_hit.a @@ -0,0 +1,178 @@ + .include "prefix_ppu.a" + +sprites = $200 +sprite_y = $200 +sprite_tile = $201 +sprite_attr = $202 +sprite_x = $203 + +; Clear sprite table +clear_sprite_table: + lda #$f8 + ldx #0 +: sta sprites,x + inx + bne - + rts + .code + +; Use DMA to copy sprite table to PPU +; Preserved: A, X, Y +dma_sprite_table: + pha + lda #0 + sta $2003 + lda #$02 + sta $4014 + pla + rts + .code + +; Set sprite 0 X and Y in table +; Preserved: A, X, Y +set_sprite_xy: + stx sprite_x + sty sprite_y + rts + .code + +; Set sprite 0 X and Y in PPU +; Preserved: A, X, Y +set_sprite_xy_ppu: + pha + lda #0 + sta $2003 + sty $2004 + lda #3 + sta $2003 + stx $2004 + pla + rts + .code + +tiles: + ; 0-3 filled, color 0, 1/2, 2/1, 3 (not sure which of the 1/2) +blank_tile = 0 + .db $00,$00,$00,$00,$00,$00,$00,$00 ; 0 + .db $00,$00,$00,$00,$00,$00,$00,$00 + + .db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff + .db $00,$00,$00,$00,$00,$00,$00,$00 + + .db $00,$00,$00,$00,$00,$00,$00,$00 + .db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff + +solid_tile = 3 + .db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff + .db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff + + ; 4-7 upper-left, upper-right, lower-left, lower-right +upper_left_tile = 4 + .db $80,$00,$00,$00,$00,$00,$00,$00 + .db $80,$00,$00,$00,$00,$00,$00,$00 + +upper_right_tile = 5 + .db $01,$00,$00,$00,$00,$00,$00,$00 + .db $01,$00,$00,$00,$00,$00,$00,$00 + +lower_left_tile = 6 + .db $00,$00,$00,$00,$00,$00,$00,$80 + .db $00,$00,$00,$00,$00,$00,$00,$80 + +lower_right_tile = 7 + .db $00,$00,$00,$00,$00,$00,$00,$01 + .db $00,$00,$00,$00,$00,$00,$00,$01 + +two_corners_tile = 8 + .db $80,$00,$00,$00,$00,$00,$00,$01 + .db $80,$00,$00,$00,$00,$00,$00,$01 + + .code + +begin_sprite_hit_tests: + jsr begin_ppu_test + jsr clear_palette + jsr clear_sprite_table + lda #9 + jsr load_tiles + lda #blank_tile + jsr fill_nametable + rts + .code + +test_for_hit: + sta 2xfFs^dqPG8hyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CY zfCvx)B0vO)01+SpM1TmKc>>^G;;oB3F~ZehzB0tWKhI|szBs@|sNgRNuz)eMv5~E{ zhS`;d9r_ugC`&aSr4t^z*;w=4LE9^R$x2>&x^XYmx`Nqfn63Hu23H2Pg#%N(g41)_ zLIT~I&sMi_B2Kz3mwe#Oj%PBd378z8N~b1XV=uwf^n7Y=dOXcib8|Cu@CkexV!v*e zU=!|QflY9Ier?n+gm1$)5Pswya_P{D?g2MZa32$4YsAR$o_Z_9a6LA0ll{J3GQaioQ^r~QNu)YyyrI={5^WEqRajqBHfD<`;rgoLFe(yL4 zd0f1#7hBIM=B^ml7Xr7Fi@(1DMYpMoXJyJWvvX7PDK_(VYHl(;^A3AsJTvuX2H2k- z$`H40D4k=!cv7S$^;Er*%O-0gT<}pycQ4U*8keri!T$erjL43Gla7!lA~vwsYa(hZ zY^){}TSb?C!865?zKe<;c_1E5e$4(TzPBAg2L_ zEr;;9iG5c+ZQ(@=hxelkVC_e9TzrhFU>M7D$cuwV=|UG5>_kbym3K~B(QS(`J`PbX zv_!qoE`hjS*s~Q}7G+!Rp{;DT?smh!SKaVV+u3vL_*}w`Ug@qBF^Ki?1U=KFfd=t- zyxS3v2l$DDns@WhcT|80MP(BJ33Hasn`5A2mo$}0Q$bavp`X|Fc{!%4`I9-CmXK4E z@~dacNdS7f>g>FygQiOX%aC`5l8fa4mSb8n;^g6S@>V5?#h_E}L}Y%0mpcynz=>&z zL;~kKvPr)ji7f%hQ)pPe>v3O|87L1e*%P2D{U{SapXf)m=)PY6%1DBK%W(q70W2;X zB(vpmIhzE(;y6ylhoD^Ulu;LYA4lYP)yduf9K~f0EKB*Qe<*@7QIAvkqvb!S0`J-~ zIL#oqkMo?JgWzG+k$Tbcaz6(Pck_pp4`p7J>y|3zd<4gPbv3yU8rF53W?om(-w%Q& z*2651KAX)ZQ2+!(m-R(208@mlQN!vptdL=a@mFh3B`h$6!kRUCdDXx0u8bOD={R?* z{92e{Qym*L$W5{KTRYksvf9zl%~g}V zRnL8wThFCO>TIl@#&)reYTD7`R}Q`~)9=c5=Kme&07QTY5CI}U1c(3;AOb{y2oM1x iKm>>Y5g-CYfCvx)B0vO)01+SpXNSO#-bb|`yng|uEr^={ literal 0 HcmV?d00001 diff --git a/sprite_overflow_tests/2.Details.nes b/sprite_overflow_tests/2.Details.nes new file mode 100644 index 0000000000000000000000000000000000000000..aab2afe908460ce75349c81f637e8b62a41171ea GIT binary patch literal 16400 zcmeI2QD`G&5P&CXn{0c%-d0;(%RT&Z3aQ*fgcBEy=N6K(h0vBZ=}ZOnx#m z|35Q3|HmYG$#`aZC<2e=goFqX0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y z5g-CYfCvx)B0vO)01(BD!09X6@QXl`}9G_J9OcxiCh32dP3mCgpTg`9Q z`x(@n$j@lS8LQpPCVe(kTW)$ij&Fa#Y(G0(yA`Rwh~6jYEjMrVEcIx`15><=;RUUj zM77*xv)dSmLGv=@J%4g!dODMa(UGxiCjA<_1Y_g5%+&ZumSv`Pfo~vs&pYH&p)7g_+{A`En21^fMuE4ww;~MlafvtC&28Hd7pyp2 z^bXliK3`~Je0Y96!m<^g9sBmHg0Y?IYLwZ%qQU+OtEz4=Ql%4$RxbB=(Gpe=w{1}gz5L&>0M!#tXRh_ zLspF8)*G90>!iIEZ*SqoIWaGz>J~&TB`TD#fDHn^f~Z!EtfP1jME6;SV#iw<@5_wN zsOYiT=fJ|W>~p>;j`ba6{s<@T#A|TpOupS&x$PY=8hF7j zhO2FKIr9prxFtnpQdCeCDX4S0o|9*)T588=T2h9l zez6b>Q}D z$z&4aUAd&5i}lU|$XjSwKGgVJl^NI`N~+a>s&rzT0D8I;yG8Z&%9ln8^lPpgxGrFE zxgeD?dRe--c)(_EO7?PLFaF>Dk2aW{UiH~*{v z4`mMA-5|Jwac=D(xLa{$zbGa7JQoXx{@slaq+gMFvm51749{D2HTfJAtn0eFC0#{* zCkS@29(pCz`FuWw4M5O$QJ?VxFh#@~G^`H8iWpWDzm?3fqy>ghm{*mftKP?188pP~ zsqa1^G`0R+crO&gbZ|3yr({97Yl@3R{5Pt6-9 zdugliU16n=eNbfsTUlHWtJp{*e)?^SzXjP>xu(TD0y{~w%O*xdjC literal 0 HcmV?d00001 diff --git a/sprite_overflow_tests/3.Timing.nes b/sprite_overflow_tests/3.Timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..832a7ec87b6b6b8d4a5f8152957f40466fb6f229 GIT binary patch literal 16400 zcmeI2VQ5=b6vt1}EXms1y}>%4r5~;gp@kt4{17zGS4idy#I~eie(}ToAR&b@`bmn! zx{1|NcrtNH6@>7l!&|Ia5FCgQ5FXoz;ej{=M|sIi8U4^Dt<-1Ry?X9T(<&%_9-Na) z&%N)Sd(J<*j0g|`B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5qRVYfIYyQkMr0muAJmo`}o&Ad_2mhj&Tu~b*BXwz}RYI zIaO<(WZyN+!1p+duwNVZGckw#+*ow&Zqq4!z)DW$x5lkN^C?`thpR>RR`=Czb#hx5 z&tP~#os6MdblGSF12O2bJaWkyADNg)CE@%?I+IF1$Id`{G?&Vbj$~LWn;px-JMeCR zU1^kH1#V)36|h}?wqMiqd3`}gdHvcnZu>fo06QC$L)k4EVwhd4moA7T`=l-({azXr zKjFOaMPaGH*$roXoy%WA2-k$qAb8*2;nJba+1p%Z?qVWnoYD%sO#!oGAzAB1Hs2^| z;)D@lbM_8{8lM=?rgJGab|IBLpBa0F<&+})I^ZIS}VOE^6caKmqGSbkg-cOOfH}k0A^P^G9)8|;s*Puj$s&# zkz&8I8$Q}y_Vf5PW#y35&Ud$+CL#l);%NkRm_`OX=oCCI0|vw@`|zIuQc+Y&24g=c zdj2B~n4xx5z<{85Oh$Eyx7or`uFMmTE*{3$Cp~)?8)V;Zar4lwuP@!UAI{l-a%8SA zZ$*qS+t`dOZ^{W)KE`kq@Evd+pA9?ew>WbziSQ@i*9TO-Vvor0~LmbhWtlELmqyHKq=bA(|Za)GODm7KujNJIsI8s@R2ly zNmD?HN<*KE$8&N|QHq@yRgKBeg#6RCXlDZPOx0R@Ee>j23YdYS)t8tmdoa_hCc;(` z1``)6UT-h#mG{DOeU6v+EcBk$tHxq6jJM>FekR;I4IsaTis^librq(eJhVhxfD#R% zOn`VYglf@!x^zuTK>VU*d6os3TnztcnX>xx80KUFcohk^5CEe-3aL zk6ADy<)i+-Fv>(dR^^wbd$$VQw;8ZDJns(1S!>(gYSof@(TcL3g^B(3YUK^NuF7-M zm2xqR`|Z4{tb>MmEo-9~SJ2<_yba8Ut0MY*KA%7V;Pnm0ryLJ-5x^VC=+caUW(4t$ z(9U7a#&efCvx) uB0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;_%{OII&ap#asC31X)AmH literal 0 HcmV?d00001 diff --git a/sprite_overflow_tests/4.Obscure.nes b/sprite_overflow_tests/4.Obscure.nes new file mode 100644 index 0000000000000000000000000000000000000000..0a7db6dc209ec375cf0d3f700da024999eeef4e3 GIT binary patch literal 16400 zcmeI2QD`Go6oyZxZ4ztj&O)o>(uXU$(8_`lRty@~sWxQ_p)G0EH@OcIQdp!4+3k3^;f{1y#?3NhjWfx(kOtYpe`%se>YV5YNo}0AIOR3Kb=j76J zZtj22J@=c#^d)1d$#WrS+e0!UKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F z0z`la5CI}U1c(3;AOb|-ktYD&IbM5;$9uVcmS6ATKRnJSqI{-{i_m;yR)7tRtyfn@ zHfm?tFI6}6D@GA^r+P0P_t~xLQp4+Z{le$0;HUqp-VD{w zXY2@D@b=ixKA&%(zPav%Si0=91HbUHVC>7vipB~tQDFAsyQ*u(KV-6a}3St z*PQd3Yp{zOO4f0T?D@8=^Ay<&ZCTeTvUpn-K1KFYTNXiCNOLsJ={V^YOmm)7;@6rN ziK6(#%c5+sl{5XcZ;6A%{prAafX(sHt8@3*zPrD?<{d0}|8jh8*2+%A4zsQ8$jY_~ z@R4;f965ZB+`{h$ePj9=8<%$?(_rsJa=iWXmj8{!Rop2UZc{Cy+8rCB*(&0U8!trh z5a(ztcy*y+6NwMzYvS&Fy#V6X`E56f+aheu+jFC`BfP1DJ~$$*{~rfAVrEh{a&P zxF1&YOT4%*(FZbS#N%<)OEr|A3&&;w)GZ85-}HE{&P*&1E!iqSk9K020EyvFtQOtZ z%U_sDNL-dOkPgmRILVOx&EWmp)YUvf4LWD(1tu-pXsJ zbI>ralw0|Pj{bHKY+*i}<POfh>n_saZ&#&GBlRM6_~FyjIOQTf=@j9&6Zu;F_&&>Y p5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2diNH_(yBk0H{{ete4mbb+ literal 0 HcmV?d00001 diff --git a/sprite_overflow_tests/5.Emulator.nes b/sprite_overflow_tests/5.Emulator.nes new file mode 100644 index 0000000000000000000000000000000000000000..bdd961f8523f22a1fc7e87e5f1cf68a41dcb2d1c GIT binary patch literal 16400 zcmeI2L1-gY7{|Y)Z4ztjPIar}vWF)sWMPE}9tI8TRGM`PV_VXw7Y}nNF_lFMf>a50 z7dBc7Q!02Uf-nRMzJ-bfK|zFo@aQfv%*91mDbubg%N}CVLLIu>Y z5g-CYfCvx)B0vO)01+SpM1Tl9^aQ{?Wp$pivL`KN*jgE~zJ1i1N?CIQ7LQf^c@8!( zw$)mHVY@TTer(lZKVdJ)ZnSQhS&#kNTJzn(n&*7Z9MAltbv4#`9;44NTJx_Ct_-TP z2L^u;)642?7Tuc9CR&(?Nf+gm_r0mn>FN9!oF5%G^J6cwXJLGzm@iC>nk-)^OcvlW zd>UhyS`KW$CKlKL*SF4&=sNdn@D;>wxrdf?Xp8QFWuV|b#^d%$y=+D5?HI%P*!Zh# zspaVWgq>uI?jifZv#LJkhvUmJW;Q+koVM6`B4ym>!`f`%_R5*}R$$R>Yy5E;TGLa7 z@nW7$zLhVWHz(g_`8VD)M~mZ=6TohGSdd?=f%6Fa+2iq=%IMXo{^U4&H=HCjs!~qVb4KKxkD@uDMkkFyIPAO=-8P(l?0gevWh@%=mZH-A zxF5ru-jeq`Dcbl9YS-AS}i=qn!;zJA3V@B*O#Z%tS$`z z_+9Nb0=t7x{hr&kP=~R;pR^OKy_a0ylO5dC0K-c)4wV$a>-jID;J?`Xq(5bNLHn<@=d$Ye6%CNr4;KN(OeZsp0I z0x*_R*cd?8m|{iaB~b8|G=)i1KuJkMU(~ds98;9aagM5HWok}dB1;{2Kr@?ScSZwM zlL8i?B8GBv^#B&qYAzuva5{IP5v0@5tM?KzK4;Z?0(~ITYBrn2d?B0k3yJhRfZTEaRq}H{YmN5;z{!RpmNpSXYR4MN`mU4}vzEG3R4V0A00cv)wK*>U zgU9R<-R{%vm~O}MU1N-AZP0m&6?f#9LHQHU%81VAk7BoJosBbW${pE>z8DE+ajeAf zq?KzOJWu!AH9UY&)1%X78GP-RZn86EcauxTs=?r9`RnqPvN^NEF7KGw-rd2~y2+y# zA-=}Vj%*M8Zx(HU2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z}~7 M2z>9ozWtr|HwGsXn*aa+ literal 0 HcmV?d00001 diff --git a/sprite_overflow_tests/readme.txt b/sprite_overflow_tests/readme.txt new file mode 100644 index 0000000..aa7a448 --- /dev/null +++ b/sprite_overflow_tests/readme.txt @@ -0,0 +1,96 @@ +NTSC NES PPU Sprite Overflow Flag Test ROMs +------------------------------------------- +These ROMs test the sprite overflow flag in bit 5 of $2002. When run on +a NES they all give a passing result. Each ROM runs several tests and +reports the result on screen and by beeping a number of times. See below +for the meaning of failure codes for each test. THE TESTS MUST BE RUN +(*AND* *PASS*) IN ORDER, because some earlier ROMs test things that +later ones assume will work properly. + +Source code for each test is included, and most tests are clearly +divided into sections. Support code is also included, but it runs on a +custom devcart and assembler so it will require some effort to assemble. +Contact me if you'd like assistance porting them to your setup. + + +1.Basics +-------- +Tests basic operation of sprite overflow flag. + +2) Should be set when 9 sprites are on a scanline +3) Reading $2002 shouldn't clear flag +4) Shouldn't be cleared at the beginning of VBL +5) Should be cleared at the end of VBL +6) Shouldn't be set when all rendering is off +7) Should work normally when $2001 = $08 (bg rendering only) +8) Should work normally when $2001 = $10 (sprite rendering only) + + +2.Details +--------- +Tests more detailed operation. + +2) Should be set even when sprites are under left clip (X = 0) +3) Disabling rendering shouldn't clear flag +4) Should be cleared at the end of VBL even when rendering is off +5) Should be set when sprite Y coordinates are 239 +6) Shouldn't be set when sprite Y coordinates are 240 (off screen) +7) Shouldn't be set when sprite Y coordinates are 255 (off screen) +8) Should be set regardless of which sprites are involved +9) Shouldn't be set when all scanlines have 7 or fewer sprites +10) Double-height sprites aren't handled properly + + +3.Timing +-------- +Tests timing of sprite overflow flag. The tests fail if timing is off by +more than a CPU clock or two. + +2) Cleared too late/3)too early at end of VBL +4) Set too early/5)too late for first scanline +6) Sprite horizontal positions should have no effect on timing +7) Set too early/8)late for last sprites on first scanline +9) Set too early/10)too late for last scanline +11) Set too early/12)too late when 9th sprite # is way after 8th +13) Overflow on second scanline occurs too early/14)too late + + +4.Obscure +--------- +Tests the pathological behavior when 8 sprites are on a scanline and the +one just after the 8th is not on the scanline. In that case, the PPU +interprets different bytes of each following sprite as the Y coordinate. +For the following setup of any consecutive range of sprites (that is, +sprite 1 below could be the PPU's 25th sprite, sprite 2 the 26th, etc.): + + 1 2 3 4 5 6 7 8 9 10 11 12 13 14 + +If 1-8 are on the same scanline but 9 isn't, then the second byte of 10, +the third byte of 11, fourth byte of 12, first byte of 13, second byte +of 14, etc. are treated as those sprites' Y coordinates for the purpose +of determining whether overflow occurs on that scanline. This search +continues until one of the (erroneously interpreted) Y coordinates +places the sprite within the scanline, or all sprites have been scanned. +Refer to the NESdevWiki for further information about this behavior. + +2) Checks that second byte of sprite #10 is treated as its Y +3) Checks that third byte of sprite #11 is treated as its Y +4) Checks that fourth byte of sprite #12 is treated as its Y +5) Checks that first byte of sprite #13 is treated as its Y +6) Checks that second byte of sprite #14 is treated as its Y +7) Checks that search stops at the last sprite without overflow +8) Same as test #2 but using a different range of sprites + + +5.Emulator +---------- +Tests things that an emulator with predictive overflow flag handling is +likely to get wrong. + +2) Didn't calculate overflow when there was no $2002 read for frame +3) Disabling rendering didn't recalculate flag time +4) Changing sprite RAM didn't recalculate flag time +5) Changing sprite height didn't recalculate time + +-- +Shay Green diff --git a/sprite_overflow_tests/source/1.Basics.a b/sprite_overflow_tests/source/1.Basics.a new file mode 100644 index 0000000..bc2e757 --- /dev/null +++ b/sprite_overflow_tests/source/1.Basics.a @@ -0,0 +1,67 @@ +; Tests basic operation of sprite overflow flag (bit 5 of $2002). + + .include "prefix.a" + +test_name: + .db "SPRITE OVERFLOW BASICS",0 + .code + +reset: + jsr begin_sprite_overflow_tests + + ; move first 9 sprites to Y = 128 + jsr clear_sprite_table + lda #128 + ldx #0 + ldy #9 + jsr move_sprites + + ; read $2002 at various times + jsr wait_vbl + lda #$18 + sta $2001 + jsr dma_sprite_table + ldy #208 + jsr delay_y_scanlines + + lda #2;) Should be set when 9 sprites are on a scanline + sta result + lda $2002 ; raw scanline 21 + 128 + 64 + and #$20 + jsr error_if_eq + + lda #3;) Reading $2002 shouldn't clear flag + sta result + lda $2002 + and #$20 + jsr error_if_eq + ldy #59 + jsr delay_y_scanlines + + lda #4;) Shouldn't be cleared at the beginning of VBL + sta result + lda $2002 ; raw scanline 10 of next frame + and #$20 + jsr error_if_eq + ldy #20 + jsr delay_y_scanlines + + lda #5;) Should be cleared at the end of VBL + sta result + lda $2002 ; raw scanline 30 of next frame + and #$20 + jsr error_if_ne + + lda #6;) Shouldn't be set when all rendering is off + ldx #$00 + jsr sprites_should_not_overflow + + lda #7;) Should work normally when $2001 = $08 (bg rendering only) + ldx #$08 + jsr sprites_should_overflow + + lda #8;) Should work normally when $2001 = $10 (sprite rendering only) + ldx #$10 + jsr sprites_should_overflow + + jmp tests_passed diff --git a/sprite_overflow_tests/source/2.Details.a b/sprite_overflow_tests/source/2.Details.a new file mode 100644 index 0000000..2e35547 --- /dev/null +++ b/sprite_overflow_tests/source/2.Details.a @@ -0,0 +1,108 @@ +; Tests details of sprite overflow flag + + .include "prefix.a" + +test_name: + .db "SPRITE OVERFLOW DETAILS",0 + .code + +reset: + jsr begin_sprite_overflow_tests + + ; Move first 9 sprites to Y = 128, X = 0 + jsr clear_sprite_table + lda #128 + ldx #0 + ldy #9 + jsr move_sprites + lda #0 + ldx #3 + ldy #9 + jsr move_sprites + lda #2;) Should be set even when sprites are under left clip (X = 0) + ldx #$18 + jsr sprites_should_overflow + + lda #3;) Disabling rendering shouldn't clear flag + ldx #$18 + jsr test_for_overflow + lda #0 + sta $2001 + lda $2002 ; raw scanline 10 of next frame + and #$20 + jsr error_if_eq + lda #4;) Should be cleared at the end of VBL even when rendering is off + ldy #20 + jsr delay_y_scanlines + lda $2002 ; raw scanline 30 of next frame + and #$20 + jsr error_if_ne + + jsr clear_sprite_table + lda #239 + ldx #0 + ldy #9 + jsr move_sprites + lda #5;) Should be set when sprite Y coordinates are 239 + ldx #$18 + jsr sprites_should_overflow + + jsr clear_sprite_table + lda #240 + ldx #0 + ldy #64 + jsr move_sprites + lda #6;) Shouldn't be set when sprite Y coordinates are 240 (off screen) + ldx #$18 + jsr sprites_should_not_overflow + + jsr clear_sprite_table + lda #255 + ldx #0 + ldy #64 + jsr move_sprites + lda #7;) Shouldn't be set when sprite Y coordinates are 255 (off screen) + ldx #$18 + jsr sprites_should_not_overflow + + jsr clear_sprite_table + ldx #0 + ldy #11 + lda #128 + jsr move_sprites + lda #240 + sta sprites + 0 + sta sprites + 8 + lda #8;) Should be set regardless of which sprites are involved + ldx #$18 + jsr sprites_should_overflow + + ldy #0 + lda #0 +: sta sprites,y + clc + adc #1 + iny + iny + iny + iny + bne - + lda #9;) Shouldn't be set when all scanlines have 7 or fewer sprites + ldx #$18 + jsr sprites_should_not_overflow + + jsr clear_sprite_table + ldx #8 + ldy #7 + lda #128 + jsr move_sprites + lda #113 + sta sprites + 0 + sta sprites + 4 + lda #10;) Double-height sprites aren't handled properly + ldy #$20 + sty $2000 + ldx #$18 + jsr sprites_should_overflow + + jmp tests_passed diff --git a/sprite_overflow_tests/source/3.Timing.a b/sprite_overflow_tests/source/3.Timing.a new file mode 100644 index 0000000..836b2c3 --- /dev/null +++ b/sprite_overflow_tests/source/3.Timing.a @@ -0,0 +1,142 @@ +; Tests sprite overflow flag timing + + .include "prefix.a" + +test_name: + .db "SPRITE OVERFLOW TIMING",0 + .code + +begin_timing: + sta result + jsr sync_ppu_20 + lda #$18 + sta $2001 + jsr dma_sprite_table + pha ; 14 delay for later expansion + pla + pha + pla + rts + +check_sprite_overflow_timing: + txa + and #$20 + jsr error_if_ne + inc result + tya + and #$20 + jsr error_if_eq + rts + +reset: + jsr begin_sprite_overflow_tests + + lda #128 + ldx #0 + ldy #9 + jsr move_sprites + lda #2;) Cleared too late/3)too early at end of VBL + jsr begin_timing + ldy #61 ; 31497 delay + lda #102 + jsr delay_ya4 + ldy $2002 + ldx $2002 + jsr check_sprite_overflow_timing + + jsr clear_sprite_table + lda #0 + ldx #0 + ldy #9 + jsr move_sprites + lda #0 + ldx #3 + ldy #9 + jsr move_sprites + lda #4;) Set too early/5)too late for first scanline + jsr begin_timing + ldy #2 ; 1874 delay (1873 and 1875 work reliably, + lda #184 ; 1872 and 1876 fail part of the time) + jsr delay_ya5 + ldx $2002 + ldy $2002 + jsr check_sprite_overflow_timing + + lda #255 + ldx #3 + ldy #9 + jsr move_sprites + lda #6;) Sprite horizontal positions should have no effect on timing + jsr begin_timing + ldy #2 ; 1874 delay (1873 and 1875 work reliably, + lda #184 ; 1872 and 1876 fail part of the time) + jsr delay_ya5 + lda $2002 + ldx $2002 + and #$20 + jsr error_if_ne + txa + and #$20 + jsr error_if_eq + + jsr clear_sprite_table + lda #0 + ldx #220 + ldy #9 + jsr move_sprites + lda #7;) Set too early/ 8)late for last sprites on first scanline + jsr begin_timing + ldy #8 ; 1911 delay (1909 fails often and 1912 fails occasionally) + lda #46 + jsr delay_ya6 + ldx $2002 + ldy $2002 + jsr check_sprite_overflow_timing + + jsr clear_sprite_table + lda #239 + ldx #0 + ldy #9 + jsr move_sprites + lda #9;) Set too early/10)too late for last scanline + jsr begin_timing + ldy #26 ; 29040 delay (29038 and 29042 fail sometimes) + lda #222 + jsr delay_ya7 + ldx $2002 + ldy $2002 + jsr check_sprite_overflow_timing + + jsr clear_sprite_table + lda #0 + ldx #0 + ldy #8 + jsr move_sprites + lda #0 + sta sprites + 255 + lda #11;) Set too early/12)too late when 9th sprite # is way after 8th + jsr begin_timing + ldy #8 ; 1911 delay (1909 fails often and 1912 fails occasionally) + lda #46 + jsr delay_ya6 + ldx $2002 + ldy $2002 + jsr check_sprite_overflow_timing + + jsr clear_sprite_table + lda #0 + ldx #4 + ldy #8 + jsr move_sprites + lda #1 + sta sprites + 0 + lda #13;) Overflow on second scanline occurs too early/14)too late + jsr begin_timing + ldy #3 ; 1987 delay (1986 & 1988 work too) + lda #130 + jsr delay_ya2 + ldx $2002 + ldy $2002 + jsr check_sprite_overflow_timing + + jmp tests_passed diff --git a/sprite_overflow_tests/source/4.Obscure.a b/sprite_overflow_tests/source/4.Obscure.a new file mode 100644 index 0000000..9a77eb7 --- /dev/null +++ b/sprite_overflow_tests/source/4.Obscure.a @@ -0,0 +1,144 @@ +; Tests the pathological behavior when 8 sprites are on a scanline +; and the one just after the 8th is not on the scanline. After that, +; the PPU interprets different bytes of each following sprite as +; its Y coordinate. 1 2 3 4 5 6 7 8 9 10 11 12 13 14: If 1-8 are +; on the same scanline, 9 isn't, then the second byte of 10, the +; third byte of 11, fourth byte of 12, first byte of 13, second byte +; of 14, etc. are treated as those sprites' Y coordinates for the +; purpose of setting the overflow flag. This search continues until +; all sprites have been scanned or one of the (erroneously interpreted) +; Y coordinates places the sprite within the scanline. + + .include "prefix.a" + +test_name: + .db "SPRITE OVERFLOW OBSCURE",0 + .code + +reset: + jsr begin_sprite_overflow_tests + + jsr clear_sprite_table + lda #2;) Checks that second byte of sprite #10 is treated as its Y + ldx #128 + stx sprites + 0 + stx sprites + 4 + stx sprites + 8 + stx sprites + 12 + stx sprites + 16 + stx sprites + 20 + stx sprites + 24 + stx sprites + 28 + ; leave sprites + 32 off screen + stx sprites + 37 + ldx #$18 + jsr sprites_should_overflow + + jsr clear_sprite_table + lda #3;) Checks that third byte of sprite #11 is treated as its Y + ldx #128 + stx sprites + 0 + stx sprites + 4 + stx sprites + 8 + stx sprites + 12 + stx sprites + 16 + stx sprites + 20 + stx sprites + 24 + stx sprites + 28 + ; leave sprites + 32 off screen + ; leave sprites + 37 off screen + stx sprites + 42 + ldx #$18 + jsr sprites_should_overflow + + jsr clear_sprite_table + lda #4;) Checks that fourth byte of sprite #12 is treated as its Y + ldx #128 + stx sprites + 0 + stx sprites + 4 + stx sprites + 8 + stx sprites + 12 + stx sprites + 16 + stx sprites + 20 + stx sprites + 24 + stx sprites + 28 + ; leave sprites + 32 off screen + ; leave sprites + 37 off screen + ; leave sprites + 42 off screen + stx sprites + 47 + ldx #$18 + jsr sprites_should_overflow + + jsr clear_sprite_table + lda #5;) Checks that first byte of sprite #13 is treated as its Y + ldx #128 + stx sprites + 0 + stx sprites + 4 + stx sprites + 8 + stx sprites + 12 + stx sprites + 16 + stx sprites + 20 + stx sprites + 24 + stx sprites + 28 + ; leave sprites + 32 off screen + ; leave sprites + 37 off screen + ; leave sprites + 42 off screen + ; leave sprites + 47 off screen + stx sprites + 48 + ldx #$18 + jsr sprites_should_overflow + + jsr clear_sprite_table + lda #6;) Checks that second byte of sprite #14 is treated as its Y + ldx #128 + stx sprites + 0 + stx sprites + 4 + stx sprites + 8 + stx sprites + 12 + stx sprites + 16 + stx sprites + 20 + stx sprites + 24 + stx sprites + 28 + ; leave sprites + 32 off screen + ; leave sprites + 37 off screen + ; leave sprites + 42 off screen + ; leave sprites + 47 off screen + ; leave sprites + 48 off screen + stx sprites + 53 + ldx #$18 + jsr sprites_should_overflow + + jsr clear_sprite_table + lda #7;) Checks that search stops at the last (64th) sprite + ldx #128 + stx sprites + 1 ; if search erroneously wraps, + stx sprites + 2 ; it will grab one of these + stx sprites + 3 + stx sprites + 8 + stx sprites + 12 + stx sprites + 16 + stx sprites + 20 + stx sprites + 24 + stx sprites + 28 + stx sprites + 32 + stx sprites + 36 + ldx #$18 + jsr sprites_should_not_overflow + + jsr clear_sprite_table + lda #8;) Same as test #2 but using a different range of sprites + ldx #128 + stx sprites + 4 + stx sprites + 8 + stx sprites + 12 + stx sprites + 16 + stx sprites + 20 + stx sprites + 24 + stx sprites + 28 + stx sprites + 32 + ; leave sprites + 36 off screen + stx sprites + 41 + ldx #$18 + jsr sprites_should_overflow + + jmp tests_passed diff --git a/sprite_overflow_tests/source/5.Emulator.a b/sprite_overflow_tests/source/5.Emulator.a new file mode 100644 index 0000000..dbc6881 --- /dev/null +++ b/sprite_overflow_tests/source/5.Emulator.a @@ -0,0 +1,126 @@ +; Tests things that an optimized emulator is likely get wrong + + .include "prefix.a" + +test_name: + .db "SPRITE OVERFLOW EMULATION",0 + .code + +reset: + jsr begin_sprite_overflow_tests + + jsr clear_sprite_table + lda #128 + ldx #0 + ldy #9 + jsr move_sprites + lda #2;) Didn't calculate overflow when no $2002 read for frame + ldx #$18 + jsr begin_overflow_test + ldy #16 + jsr delay_y_scanlines + ldy #240 + jsr delay_y_scanlines + ldy #10 + jsr delay_y_scanlines + lda $2002 + and #$20 + jsr error_if_eq + + lda #3;) Disabling rendering didn't recalculate flag time + sta result + jsr clear_sprite_table + lda #127 ; 9 sprites at 127, 9 at 230 + ldx #0 + ldy #9 + jsr move_sprites + lda #230 + ldy #9 + jsr move_sprites + jsr wait_vbl + lda #$18 ; enable rendering + sta $2001 + jsr dma_sprite_table ; 4.5 scanlines + ldy #21 + jsr delay_y_scanlines + ldy #121 + jsr delay_y_scanlines + lda $2002 ; have emulator think it'll occur next + lda #$00 ; disable rendering + sta $2001 + ldy #12 + jsr delay_y_scanlines + lda #$18 ; enable rendering + sta $2001 + ldy #92 + jsr delay_y_scanlines + lda $2002 + pha + ldy #4 + jsr delay_y_scanlines + ldx $2002 + pla + and #$20 + jsr error_if_ne + txa + and #$20 + jsr error_if_eq + + lda #4;) Changing sprite RAM didn't recalculate flag time + sta result + lda #248 + ldx #0 + ldy #2 + jsr move_sprites + jsr wait_vbl + lda #$18 ; enable rendering + sta $2001 + ldy #142 + jsr delay_y_scanlines + lda $2002 ; have emulator think it'll occur next + lda #$00 ; disable rendering + sta $2001 + jsr dma_sprite_table + lda #$18 ; enable rendering + sta $2001 + ldy #104 + jsr delay_y_scanlines + lda $2002 + pha + ldy #4 + jsr delay_y_scanlines + ldx $2002 + pla + and #$20 + jsr error_if_ne + txa + and #$20 + jsr error_if_eq + + jsr clear_sprite_table + lda #100 + ldx #0 + ldy #7 + jsr move_sprites + lda #115 + ldy #2 + jsr move_sprites + lda #200 + ldy #9 + jsr move_sprites + lda #5;) Changing sprite height didn't recalculate time + ldx #$18 + jsr begin_overflow_test + ldy #66 + jsr delay_y_scanlines + lda $2002 ; have emulator think it'll occur at 200 + lda #$20 ; change sprite height so it'll occur at 115 + sta $2000 + ldy #100 + jsr delay_y_scanlines + lda $2002 + and #$20 + jsr error_if_eq + + jmp tests_passed + diff --git a/sprite_overflow_tests/source/console.a b/sprite_overflow_tests/source/console.a new file mode 100644 index 0000000..946b07f --- /dev/null +++ b/sprite_overflow_tests/source/console.a @@ -0,0 +1,107 @@ + +console_pos = $7f2 +console_pos_h = $7f3 + +; Print char A to console +; Preserved: A, X, Y +print_char: + jsr wait_vbl ; wait for safe access +print_char_no_wait: + pha + lda console_pos_h + sta $2006 + inc console_pos + lda console_pos + sta $2006 + lda #0 ; restore scroll + sta $2005 + sta $2005 + pla + sta $2007 + rts + .code + +; Go to next line +; Preserved: A, X, Y +console_newline: + pha + lda console_pos + and #$e0 + clc + adc #$21 + sta console_pos + lda console_pos_h + adc #0 + sta console_pos_h + pla + rts + .code + +; Initialize console +init_console: + lda #$81 + sta console_pos + lda #$20 + sta console_pos_h + + jsr wait_vbl ; init ppu + lda #0 + sta $2000 + sta $2001 + + lda #$3f ; load palette + jsr set_vpage + lda #15 ; bg + ldx #48 ; fg + ldy #8 +pal: sta $2007 + stx $2007 + stx $2007 + stx $2007 + dey + bne pal + + lda #$02 ; load tiles + jsr set_vpage + lda #chr_data.lsb + sta <$f0 + lda #chr_data.msb + sta <$f1 + ldy #0 + lda #59 ; 59 chars in data + sta <$f2 +chr_loop: + ldx #8 + lda #0 +: sta $2007 + dex + bne - + + ldx #8 +: lda ($f0),y + iny + sta $2007 + dex + bne - + + tya + bne + + inc <$f1 +: dec <$f2 + bne chr_loop + + lda #32 + jsr fill_nametable + + jsr wait_vbl ; enable ppu + lda #0 + sta $2005 + sta $2005 + lda #$0a + sta $2001 + rts + .code + +chr_data: + .incbin "chr.bin" + diff --git a/sprite_overflow_tests/source/debug.a b/sprite_overflow_tests/source/debug.a new file mode 100644 index 0000000..fff98dc --- /dev/null +++ b/sprite_overflow_tests/source/debug.a @@ -0,0 +1,154 @@ + +; Beep A times. Made to require minimal features from APU. +debug_beeps: +beep_loop: + pha + + lda #1 ; set up square 1 + sta $4015 + sta $4003 + sta $4001 + sta $4002 + + lda #$0f ; fade volume +: pha + eor #$30 + sta $4000 + lda #8 + jsr delay_msec + pla + clc + adc #-1 + bpl - + + lda #0 + sta $4015 ; silence square for a bit + lda #120 + jsr delay_msec + + pla + clc + adc #-1 + bne beep_loop + rts + .code + +; Print indicated register to console as $hh +; Preserved: A, X, Y, P +print_a: + php + jsr debug_byte + plp + rts + .code + +print_x: + php + pha + txa + jsr debug_byte + pla + plp + rts + .code + +print_y: + php + pha + tya + jsr debug_byte + pla + plp + rts + .code + +print_s: + php + pha + txa + pha + tsx + txa + jsr debug_byte + pla + tax + pla + plp + rts + .code + +print_p: + php + pha + php + pla + jsr debug_byte + pla + plp + rts + .code + +print_ay: + php + pha + lda #36 + jsr debug_char + pla + pha + jsr hex_byte + tya + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + plp + rts + .code + +print_newline: + jmp debug_newline + .code + +; Print address YA to console as $hhhh +; Preserved: A, X, Y +debug_addr: + pha + lda #36 ; '$' + jsr debug_char + tya + jsr hex_byte + jmp debug_byte_impl + .code + +; Print byte A to console as $hh +; Preserved: A, X, Y +debug_byte: + pha + lda #36 ; '$' + jsr debug_char +debug_byte_impl: + pla + pha + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + rts + +hex_byte: + pha + lsr a + lsr a + lsr a + lsr a + jsr nybble + pla + and #$0f +nybble: + cmp #10 + bcc not_letter + adc #6 ; relies on carry being set +not_letter: + adc #$30 + jmp debug_char_no_wait + .code diff --git a/sprite_overflow_tests/source/delays.a b/sprite_overflow_tests/source/delays.a new file mode 100644 index 0000000..72d62c8 --- /dev/null +++ b/sprite_overflow_tests/source/delays.a @@ -0,0 +1,118 @@ +; to do: delay loops that take only a single count + +; Delay for almost A milliseconds (A * 0.999009524 msec) +; Preserved: X, Y +delay_msec: + pha ; 3 + lda #253 ; 2 + sec ; 2 +delay_msec_: + nop ; 2 + adc #-2 ; 2 + bne delay_msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_msec ; 3 + rts + .code + +; Delay for almost 'A / 10' milliseconds (A * 0.099453968 msec) +; Preserved: X, Y +delay_01msec: + pha ; 3 + lda #18 ; 2 + sec ; 2 +delay_01msec_: + nop ; 2 + nop ; 2 + adc #-2 ; 2 + bne delay_01msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_01msec ; 3 + rts + .code + +; Delay for almost A*10 milliseconds +; Preserved: X, Y +delay_10msec: + pha + lda #10 + jsr delay_msec + pla + clc + adc #-1 + bne delay_10msec + rts + .code + +; Delay n clocks +; Preserved: P, A, X, Y +delay_32: nop +delay_30: nop +delay_28: nop +delay_26: nop +delay_24: nop +delay_22: nop +delay_20: nop +delay_18: nop +delay_16: nop +delay_14: nop +delay_12: rts + +delay_33: nop +delay_31: nop +delay_29: nop +delay_27: nop +delay_25: nop +delay_23: nop +delay_21: nop +delay_19: nop +delay_17: beq + ; 5 +: bne + +: rts ; 6 + .code + +; Delay (5 * A + 6) * Y + 7 + n clocks +delay_ya11: + .db $a2 ; 1 ldx #imm +delay_ya10: + .db $a2 ; 1 ldx #imm +delay_ya9: + .db $a2 ; 1 ldx #imm +delay_ya8: + .db $a2 ; 1 ldx #imm +delay_ya7: + .db $a2 ; 1 ldx #imm +delay_ya6: + .db $a2 ; 1 ldx #imm +delay_ya5: + .db $a2 ; 1 ldx #imm +delay_ya4: + .db $a2 ; 1 ldx #imm +delay_ya3: + .db $a2 ; 1 ldx #imm +delay_ya2: + .db $a2 ; 1 ldx #imm +delay_ya1: + .db $a6 ; 1 ldx zp +delay_ya0: + nop ; 2 +delay_ya: + ; 2 lda # + ; 2 ldy # + ; 6 jsr + tax ; *2 +delay_yax: + dex ; **2 + bne delay_yax ; **3 + ; *-1 + dey ; *2 + bne delay_ya ; *3 + ; -1 + rts ; 6 + .code diff --git a/sprite_overflow_tests/source/ppu_sync.a b/sprite_overflow_tests/source/ppu_sync.a new file mode 100644 index 0000000..3c29d05 --- /dev/null +++ b/sprite_overflow_tests/source/ppu_sync.a @@ -0,0 +1,124 @@ + +; Same as sync_ppu_20 plus next frame is odd (clock subtracted) or even +; (no clock subtracted). +sync_ppu_odd_20: + lda #$80 + bne sync_ppu_frame_ +sync_ppu_even_20: + lda #$00 +sync_ppu_frame_: + pha + ; Synchronize with PPU + jsr sync_ppu_20 ; synchronize with PPU + + ; Run for two frames with BG enabled. One of the two frames will + ; be one PPU clock shorter. Note whether the first frame was the + ; shorter one. + + lda #$08 ; 6 enable bg + sta $2001 + ldy #41 ; 29785 delay + lda #144 + jsr delay_ya2 + nop ; 2 delay + pla ; 4 + eor $2002 ; 4 find whether frame was odd or even + pha ; 3 + ; run another enabled frame so that clock will + ; have been subtracted on one of the two frames + ldy #43 ; 29730+ delay + lda #137 + jsr delay_ya1 + lda #$00 ; 6 disable bg + sta $2001 + + ; If the first frame was shorter, wait three frames to switch + ; the even/odd synchronization without changing the CPU clock's + ; synchronization with the PPU clock. + + pla ; 4 + pha ; 3 + bpl + ; 3 + ; -1 + ldy #75 ; 89343 delay + lda #237 + jsr delay_ya1 +: pla ; 4 + rts ; 6 + .code + +; After return, 30 clocks until VBL flag will read +; as set, then 29781, 29780, 29781, 29781, 29780, etc. +; Turns off PPU rendering, NMI, IRQ, and DMC. +sync_ppu_align2_30: + pha + txa + pha + tya + pha + lda #0 ; disable dmc and irq + sta $4015 + sei + jsr wait_vbl + lda #0 ; disable bg and nmi + sta $2000 + sta $2001 + + bit $2002 +: bit $2002 ; 1 + bpl - ; 2 + + ldy #141 ; 29774 delay + lda #41 + jsr delay_ya6 + +: ldy #86 ; 29774 delay + lda #68 + jsr delay_ya1 + + bit $2002 ; 1 + bpl - ; 2 + + ldy #28 ; 29726 delay + lda #211 + jsr delay_ya1 + + pla ; 16 + tay + pla + tax + pla + + rts ; 6 + .code + +sync_ppu_align1_30: + jsr sync_ppu_align2_30 + ldy #86 ; 29775 delay + lda #68 + jsr delay_ya2 + rts + .code + +sync_ppu_align1_31: + jsr sync_ppu_align2_30 + ldy #86 ; 29774 delay + lda #68 + jsr delay_ya1 + rts + .code + +sync_ppu_align0_30: + jsr sync_ppu_align1_30 + ldy #86 ; 29774 delay + lda #68 + jsr delay_ya1 + rts + .code + +sync_ppu_20: + jsr sync_ppu_align2_30 + nop ; 4 + nop + rts ; 6 + .code diff --git a/sprite_overflow_tests/source/ppu_util.a b/sprite_overflow_tests/source/ppu_util.a new file mode 100644 index 0000000..f004227 --- /dev/null +++ b/sprite_overflow_tests/source/ppu_util.a @@ -0,0 +1,123 @@ + +; Clear VBL flag then wait for it to be set +; Preserved: A, X, Y +wait_vbl: + bit $2002 +: bit $2002 + bpl - + rts + .code + +; Set VRAM address to A * $100 +; Preserved: X, Y +set_vpage: + bit $2002 + sta $2006 + lda #0 + sta $2006 + rts + .code + +; Set VRAM address to A * $100 + X +; Preserved: A, X, Y +set_vaddr: + bit $2002 + sta $2006 + stx $2006 + rts + .code + +; Set X and Y scroll +; Preserved: A, X, Y +set_vscroll: + bit $2002 + stx $2005 + sty $2005 + rts + .code + +; Turn off NMI and disable BG and sprites +; Preserved: A, X, Y +disable_ppu: + pha + lda #0 + sta $2000 + sta $2001 + bit $2002 + sta $2006 + sta $2006 + pla + rts + .code + +; Set sprite memory to $ff +; Preserved: Y +clear_sprites: + lda #$ff + ldx #0 +: sta $2004 + dex + bne - + rts + .code + +; Clear/fill nametable with 0/A and clear attributes to 0 +clear_nametable: + lda #0 +fill_nametable: + pha + lda #$20 + jsr set_vpage + pla + ldx #240 +: sta $2007 + sta $2007 + sta $2007 + sta $2007 + dex + bne - + lda #0 + ldx #64 +: sta $2007 + dex + bne - + rts + .code + +; Clear/fill VRAM with 0/A +clear_vram: + lda #0 +fill_vram: + ldx #0 + ldy #$24 + bne fill_vram_ + +; Clear/fill CHR with 0/A +fill_chr1: + ldx #$10 + ldy #$10 + bne fill_vram_ + +fill_chr0: + ldx #0 + ldy #$10 + bne fill_vram_ + +clear_chr: + lda #0 +fill_chr: + ldx #0 + ldy #$20 +; Fill VRAM Y*$100 bytes of VRAM with A, starting at X*$100 +fill_vram_: + bit $2002 + stx $2006 + ldx #0 + stx $2006 +: sta $2007 + dex + bne - + dey + bne - + rts + .code diff --git a/sprite_overflow_tests/source/prefix.a b/sprite_overflow_tests/source/prefix.a new file mode 100644 index 0000000..fe6d74e --- /dev/null +++ b/sprite_overflow_tests/source/prefix.a @@ -0,0 +1,145 @@ + .include "prefix_ppu.a" + +sprites = $200 + +; Clear sprite table with $F8 +clear_sprite_table: + lda #$F8 + ldx #0 +: sta sprites,x + inx + bne - + rts + .code + +; Set every 4th sprite byte starting at X +; to A, modifying Y sprites in all. +move_sprites: +: sta sprites,x + inx + inx + inx + inx + dey + bne - + rts + +; Use DMA to copy sprite table to PPU +; Preserved: A, X, Y +dma_sprite_table: + pha + lda #0 + sta $2003 + lda #$02 + sta $4014 + pla + rts + .code + +begin_sprite_overflow_tests: + sei + lda #0 + sta $2000 + sta $2001 + jsr wait_vbl + jsr wait_vbl + + ; black palette + lda #$3F + jsr set_vpage + ldy #$40 + lda #$0F +: sta $2007 + dey + bne - + + jsr clear_sprite_table + rts + .code + +begin_overflow_test: + sta $@ + +$(objdir)/%.o: $(srcdir)/%.s + $(AS65) $(CFLAGS65) $< -o $@ + +$(objdir)/%.o: $(objdir)/%.s + $(AS65) $(CFLAGS65) $< -o $@ + +map.txt spritecans.prg: nes.ini $(objlistntsc) + $(LD65) -C $^ -m map.txt -o spritecans.prg + +spritecans.chr: $(imgdir)/main.png + tools/pilbmp2nes.py $< $@ + +$(objdir)/ntscPeriods.s: tools/mktables.py + $< period $@ + +%.nes: %.prg %.chr + cat $^ > $@ diff --git a/spritecans-2011/nes.ini b/spritecans-2011/nes.ini new file mode 100644 index 0000000..5fe8bed --- /dev/null +++ b/spritecans-2011/nes.ini @@ -0,0 +1,31 @@ +# +# Linker script for Thwaite (lite version) +# Copyright 2010 Damian Yerrick +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty +# provided the copyright notice and this notice are preserved. +# This file is offered as-is, without any warranty. +# +MEMORY { + ZP: start = $10, size = $f0, type = rw; + # use first $10 zeropage locations as locals + HEADER: start = 0, size = $0010, type = ro, file = %O, fill=yes, fillval=$00; + RAM: start = $0300, size = $0500, type = rw; + ROM7: start = $C000, size = $4000, type = ro, file = %O, fill=yes, fillval=$FF; +} + +SEGMENTS { + INESHDR: load = HEADER, type = ro, align = $10; + ZEROPAGE: load = ZP, type = zp; + BSS: load = RAM, type = bss, define = yes, align = $100; + DMC: load = ROM7, type = ro, align = 64, optional = yes; + CODE: load = ROM7, type = ro, align = $100; + RODATA: load = ROM7, type = ro, align = $100; + VECTORS: load = ROM7, type = ro, start = $FFFA; +} + +FILES { + %O: format = bin; +} + diff --git a/spritecans-2011/obj/nes/index.txt b/spritecans-2011/obj/nes/index.txt new file mode 100644 index 0000000..109fef6 --- /dev/null +++ b/spritecans-2011/obj/nes/index.txt @@ -0,0 +1 @@ +Files produced by build tools go here, but caulk goes where? diff --git a/spritecans-2011/spritecans.nes b/spritecans-2011/spritecans.nes new file mode 100644 index 0000000000000000000000000000000000000000..bba9e826dd12e60cc66276bad19031609eaa3a16 GIT binary patch literal 24592 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, >FRAMES_PER_MINUTE_PAL + +silentPattern: + .byt 26*8+7, 255 + +durations: + .byt 1, 2, 3, 4, 6, 8, 12, 16 + +.segment "CODE" +.proc init_music + asl a + tax + lda songTable,x + sta conductorPos + sta conductorSegno + lda songTable+1,x + sta conductorPos+1 + sta conductorSegno+1 + ldx #12 + stx music_playing + channelLoop: + lda #$FF + sta musicPattern,x + lda #silentPattern + sta musicPatternPos+1,x + lda #0 + sta patternTranspose,x + sta noteInstrument,x + sta noteEnvVol,x + sta noteRowsLeft,x + dex + dex + dex + dex + bpl channelLoop + lda #0 + sta conductorWaitRows + lda #$FF + sta tempoCounterLo + sta tempoCounterHi + lda #<300 + sta music_tempoLo + lda #>300 + sta music_tempoHi + rts +.endproc + +.proc stop_music + lda #0 + sta music_playing + rts +.endproc + +.proc update_music + lda music_playing + beq music_not_playing + lda music_tempoLo + clc + adc tempoCounterLo + sta tempoCounterLo + lda music_tempoHi + adc tempoCounterHi + sta tempoCounterHi + bcs new_tick +music_not_playing: + rts +new_tick: + + ldy tvSystem + beq is_ntsc_1 + ldy #1 +is_ntsc_1: + ; Subtract tempo + lda tempoCounterLo + sbc fpmLo,y + sta tempoCounterLo + lda tempoCounterHi + sbc fpmHi,y + sta tempoCounterHi + + ;jmp skipConductor + + lda conductorWaitRows + beq doConductor + dec conductorWaitRows + jmp skipConductor + +doConductor: + + ldy #0 + lda (conductorPos),y + inc conductorPos + bne :+ + inc conductorPos+1 + : + sta 0 + cmp #CON_SETTEMPO + bcc @notTempoChange + and #%00000011 + sta music_tempoHi + + lda (conductorPos),y + inc conductorPos + bne :+ + inc conductorPos+1 + : + sta music_tempoLo + jmp doConductor + @notTempoChange: + cmp #CON_WAITROWS + bcc conductorPlayPattern + beq conductorDoWaitRows + + cmp #CON_FINE + bne @notFine + lda #0 + sta music_playing + sta music_tempoHi + sta music_tempoLo + rts + @notFine: + + cmp #CON_SEGNO + bne @notSegno + lda conductorPos + sta conductorSegno + lda conductorPos+1 + sta conductorSegno+1 + jmp doConductor + @notSegno: + + cmp #CON_DALSEGNO + bne @notDalSegno + lda conductorSegno + sta conductorPos + lda conductorSegno+1 + sta conductorPos+1 + jmp doConductor + @notDalSegno: + + jmp skipConductor + +conductorPlayPattern: + and #$03 + asl a + asl a + tax + lda #0 + sta noteRowsLeft,x + lda (conductorPos),y + sta musicPattern,x + iny + lda (conductorPos),y + sta patternTranspose,x + iny + lda (conductorPos),y + sta noteInstrument,x + tya + sec + adc conductorPos + sta conductorPos + bcc :+ + inc conductorPos+1 + : + jsr startPattern + jmp doConductor + + ; this should be last so it can fall into skipConductor +conductorDoWaitRows: + + lda (conductorPos),y + inc conductorPos + bne :+ + inc conductorPos+1 + : + sta conductorWaitRows + +skipConductor: + + ldx #12 + channelLoop: + lda noteRowsLeft,x + bne skipNote + lda (musicPatternPos,x) + cmp #255 + bne notStartPatternOver + jsr startPattern + lda (musicPatternPos,x) + notStartPatternOver: + + inc musicPatternPos,x + bne patternNotNewPage + inc musicPatternPos+1,x + patternNotNewPage: + + ; set the note's duration + pha + and #$07 + tay + lda durations,y + sta noteRowsLeft,x + pla + lsr a + lsr a + lsr a + cmp #25 + bcc isTransposedNote + beq notKeyOff + lda #0 + sta noteEnvVol,x + notKeyOff: + jmp skipNote + + isTransposedNote: + cpx #12 + beq isDrumNote + adc patternTranspose,x + sta notePitch,x + lda noteInstrument,x + asl a + asl a + tay + lda instrumentTable,y + asl a + asl a + asl a + asl a + ora #$0C + sta noteEnvVol,x + + skipNote: + dec noteRowsLeft,x + dex + dex + dex + dex + bpl channelLoop + + rts + +isDrumNote: + stx 5 + tax + lda drumSFX,x + jsr start_sound + ldx 5 + jmp skipNote + +startPattern: + lda musicPattern,x + asl a + bcc @notSilentPattern + lda #silentPattern + sta musicPatternPos+1,x + rts + @notSilentPattern: + tay + lda musicPatternTable,y + sta musicPatternPos,x + lda musicPatternTable+1,y + sta musicPatternPos+1,x + rts +.endproc + +.proc update_music_ch + ch_number = 0 + out_volume = 2 + out_pitch = 3 + + lda music_playing + beq silenced + lda noteEnvVol,x + lsr a + lsr a + lsr a + lsr a + bne notSilenced +silenced: + lda #0 + sta 2 + rts +notSilenced: + sta 2 + lda noteInstrument,x + asl a + asl a + tay + lda 2 + eor instrumentTable,y + and #$0F + eor instrumentTable,y + sta 2 + lda noteEnvVol,x + sec + sbc instrumentTable+1,y + bcc silenced + sta noteEnvVol,x + lda notePitch,x + sta 3 + + ; bit 7 of attribute 2: cut note when half a row remains + lda instrumentTable+2,y + bpl notCutNote + lda noteRowsLeft,x + bne notCutNote + + clc + lda tempoCounterLo + adc #<(FRAMES_PER_MINUTE_NTSC/2) + lda tempoCounterHi + adc #>(FRAMES_PER_MINUTE_NTSC/2) + bcc notCutNote + lda #0 + sta noteEnvVol,x + +notCutNote: + rts +.endproc + diff --git a/spritecans-2011/src/musicseq.h b/spritecans-2011/src/musicseq.h new file mode 100644 index 0000000..76809ea --- /dev/null +++ b/spritecans-2011/src/musicseq.h @@ -0,0 +1,104 @@ +; Copyright 2010 Damian Yerrick +; +; Copying and distribution of this file, with or without +; modification, are permitted in any medium without royalty +; provided the copyright notice and this notice are preserved. +; This file is offered as-is, without any warranty. + +.global musicPatternTable, drumSFX, instrumentTable, songTable + +N_C = 0*8 +N_CS = 1*8 +N_D = 2*8 +N_DS = 3*8 +N_E = 4*8 +N_F = 5*8 +N_FS = 6*8 +N_G = 7*8 +N_GS = 8*8 +N_A = 9*8 +N_AS = 10*8 +N_B = 11*8 +N_DB = N_CS +N_EB = N_DS +N_GB = N_FS +N_AB = N_GS +N_BB = N_AS +N_CH = N_C + 12*8 +N_CSH = N_CS + 12*8 +N_DBH = N_DB + 12*8 +N_DH = N_D + 12*8 +N_DSH = N_DS + 12*8 +N_EBH = N_EB + 12*8 +N_EH = N_E + 12*8 +N_FH = N_F + 12*8 +N_FSH = N_FS + 12*8 +N_GBH = N_GB + 12*8 +N_GH = N_G + 12*8 +N_GSH = N_GS + 12*8 +N_ABH = N_AB + 12*8 +N_AH = N_A + 12*8 +N_ASH = N_AS + 12*8 +N_BBH = N_BB + 12*8 +N_BH = N_B + 12*8 +N_CHH = N_CH + 12*8 +N_TIE = 25*8 +REST = 26*8 + +D_8 = 1 +D_D8 = 2 +D_4 = 3 +D_D4 = 4 +D_2 = 5 +D_D2 = 6 +D_1 = 7 + +CON_PLAYPAT = $00 ; next: pattern, transpose (if not drums), instrument (if not drums) +CON_LOOPPAT = $10 ; as CON_PLAYPAT +CON_WAITROWS = $20 ; next: number of rows to wait minus 1 +CON_FINE = $21 ; stop music now +CON_SEGNO = $22 ; set loop point +CON_DALSEGNO = $23 ; jump to loop point. if no point was set, jump to start of song. +CON_SETTEMPO = $30 ; low bits: bits 8-9 of tempo in rows/min; next: bits 0-7 of tempo + +; Conductor macros +.macro playPatSq1 patid, transpose, instrument + .byt CON_PLAYPAT|0, patid, transpose, instrument +.endmacro +.macro playPatSq2 patid, transpose, instrument + .byt CON_PLAYPAT|1, patid, transpose, instrument +.endmacro +.macro playPatTri patid, transpose, instrument + .byt CON_PLAYPAT|2, patid, transpose, instrument +.endmacro +.macro playPatNoise patid, transpose, instrument + .byt CON_PLAYPAT|3, patid, transpose, instrument +.endmacro +.macro stopPatSq1 + .byt CON_PLAYPAT|0, 255, 0, 0 +.endmacro +.macro stopPatSq2 + .byt CON_PLAYPAT|1, 255, 0, 0 +.endmacro +.macro stopPatTri + .byt CON_PLAYPAT|2, 255, 0, 0 +.endmacro +.macro stopPatNoise + .byt CON_PLAYPAT|3, 255, 0, 0 +.endmacro +.macro waitRows n + .byt CON_WAITROWS, n-1 +.endmacro +.macro fine + .byt CON_FINE +.endmacro +.macro segno + .byt CON_SEGNO +.endmacro +.macro dalSegno + .byt CON_DALSEGNO +.endmacro +.macro setTempo rowsPerMin + .byt CON_SETTEMPO|>rowsPerMin, *RI;wP?1>iW{Nl0n`8zEixSGH zpbF_F)MS7<8c@n;Ng~lk2VFEFy)CWxCVeP94Bp8IVJ|Ql!(DSK2rObd@Tge8b-18x z{*gAAh1rUlOTxj4wJ`;C*w0dX<5ClzR1kz=>Vq3TRz5Qq-== oD1x~^J=O%0~{gmd|i;E_L8Uiv2?Jpcdz literal 0 HcmV?d00001 diff --git a/spritecans-2011/src/sprite.s b/spritecans-2011/src/sprite.s new file mode 100644 index 0000000..eee44ae --- /dev/null +++ b/spritecans-2011/src/sprite.s @@ -0,0 +1,511 @@ +; +; sprite.asm +; 64 Sprite Cans intro for NES +; Copyright 2000-2011 Damian Yerrick + +;;; Copyright (C) 2000-2011 Damian Yerrick +; +; This program is free software; you can redistribute it and/or +; modify it under the terms of the GNU General Public License +; as published by the Free Software Foundation; either version 3 +; of the License, or (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, write to +; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +; Boston, MA 02111-1307, USA. +; + +.include "src/nes.h" +.p02 +.import getTVSystem, init_music, init_sound, update_sound +.exportzp nmis, psg_sfx_state, tvSystem + +NTSC_INCREASE_TIME = 98 ; 3606*3/110 +PAL_INCREASE_TIME = 82 ; 3000*3/110 + +; This program runs on NROM-128 (mapper 0), with only 4 KiB of PRG +; and 2.5 KiB of CHR actually used. +.segment "INESHDR" + .byt "NES",$1A + .byt $01 ; one PRG bank + .byt $01 ; one CHR bank + .byt $00 ; mapper bits 3-0; no battery + .byt $00 ; mapper bits 7-4 + +.segment "ZEROPAGE" + +; Work around the 8 sprites per scanline limitation by constantly +; shuffling priorities. Konami games use this algorithm. +firstsproffset: .res 1 ; offset to start writing sprites to + ; each frame, firstsproffset += 60 +cursproffset: .res 1 ; offset to write next sprite to + ; for each sprite written, cursproffset += 68 +tvSystem: .res 1 ; 0: ntsc; 1: pal; 2: dendy +nmis: .res 2 ; 16-bit number of elapsed vblanks +psg_sfx_state: .res 32 ; used by music engine + +last_active_can: .res 1 ; (this + 1) cans are drawn +till_increase: .res 1 ; increase cans once per measure + + +OAM = $200 ; sprite dma communication area + +.segment "BSS" +NUM_CANS = 64 +canXLo: .res NUM_CANS +canXHi: .res NUM_CANS +canYLo: .res NUM_CANS +canYHi: .res NUM_CANS +canDXLo: .res NUM_CANS +canDYLo: .res NUM_CANS +canTheta: .res NUM_CANS +canDTheta: .res NUM_CANS + +.segment "CODE" + +.proc resetpoint + cld + sei + ldx #$FF + txs + inx ; turn off nmis and rendering + stx PPUCTRL + stx PPUMASK + bit PPUSTATUS + +vwait1: + bit PPUSTATUS + bpl vwait1 + + txa +ramclrloop: + sta $00,x + sta $100,x + sta $600,x + sta $700,x + sta $300,x + sta $400,x + sta $500,x + inx + bne ramclrloop + +;clear OAM +oamclrloop: + lda #$FF ; y offscreen + sta OAM,x + inx + inx + inx + inx + bne oamclrloop + +vwait2: + bit PPUSTATUS + bpl vwait2 + +; initialize palette + lda #$3F + sta PPUADDR + stx PPUADDR +copypalloop: + lda titlepal,x + sta PPUDATA + inx + cpx #32 + bne copypalloop + +; copy nametable + lda #obeydata + sta 1 + jsr copynametable + +; initialize sprite cans + ldx #NUM_CANS - 1 +setupCanPos: + lda #0 + sta canXLo,x + sta canYLo,x + + ; can't have 128 as the velocity because the bounce code fails if + ; x == -x. The value 128 is in 0-63, so use 0-127 for positions + ; and 128-255 for velocities. + lda randnos+128,x + sta canDXLo,x + lda randnos+192,x + sta canDYLo,x + txa + sta canTheta,x + lda randnos+0,x + cmp #224 + bcc @canNotPastBottom + eor #%10000000 +@canNotPastBottom: + sta canYHi,x + lda randnos+64,x + cmp #248 + bcc @canNotPastRight + eor #%10000000 +@canNotPastRight: + sta canXHi,x + txa + lsr a + lsr a + lsr a + sec + sbc #4 + sta canDTheta,x + dex + bpl setupCanPos + jsr getTVSystem + sta tvSystem + + lda #NUM_CANS-1 + sta last_active_can + jsr sortCans + lda #0 + sta last_active_can + lda #NTSC_INCREASE_TIME + ldy tvSystem + beq @initialNotPAL + lda #PAL_INCREASE_TIME +@initialNotPAL: + sta till_increase + + jsr init_sound + lda #0 ; start "Celestial Soda Pop" + jsr init_music + lda #VBLANK_NMI + sta PPUCTRL + +mainloop: + jsr update_sound + + ; In the early warmup of the intro, increase the number of + ; sprites until all 64 are on screen. + dec till_increase + bne no_increase_yet + lda last_active_can + cmp #NUM_CANS - 1 + bcs no_increase_yet + sec + rol last_active_can + lda #NTSC_INCREASE_TIME + ldy tvSystem + beq @increaseNotPAL + lda #PAL_INCREASE_TIME +@increaseNotPAL: + sta till_increase +no_increase_yet: + + ldy firstsproffset + tya + clc + adc #60 + sta firstsproffset + ldx last_active_can +moveCanLoop: + + ; move can horizontally + lda canDXLo,x + bpl :+ + dec canXHi,x +: + clc + adc canXLo,x + sta canXLo,x + bcc :+ + inc canXHi,x +: + ; does it need to bounce off the left/right wall? + lda canXHi,x + cmp #248 + bcc :+ + lda #0 + sbc canDXLo,x + sta canDXLo,x +: + + ; move can vertically + lda canDYLo,x + bpl :+ + dec canYHi,x +: + clc + adc canYLo,x + sta canYLo,x + bcc :+ + inc canYHi,x +: + lda canYHi,x + + ; does it need to bounce off the bottom/top wall? + cmp #224 + bcc :+ + lda #0 + sbc canDYLo,x + sta canDYLo,x +: + + ; rotate the can + lda canTheta,x + clc + adc canDTheta,x + sta canTheta,x + and #%11110000 + lsr a + lsr a + lsr a + ora #%10000000 + + ; now actually draw the can + sta OAM+1,y + lda #%00100001 ; behind bg, basecolor=$3F14 + sta OAM+2,y + + lda canXHi,x + cmp #252 + bcc :+ + lda #0 +: + sta OAM+3,y + lda canYHi,x + cmp #248 + bcc :+ + lda #0 +: + sta OAM,y + + tya + clc + adc #68 + tay + dex + bpl moveCanLoop + + ; clear out sprite space used for inactive cans + + lda last_active_can + eor #$3F + beq allCansActive + tax +eraseInactiveCanLoop: + lda #$FF + sta OAM,y + tya + clc + adc #68 + tay + dex + bne eraseInactiveCanLoop + lda last_active_can + beq noSortNeeded +allCansActive: + jsr sortCans +noSortNeeded: + + jsr wait4vbl + ; If the time since power on is correct, + ; erase the boot message. + lda nmis ;erase + bne @noerasemsg + lda nmis+1 + cmp #2 + bne @noerasemsg + + lda #$21 + sta PPUADDR + lda #$c0 + sta PPUADDR + ldx #32 + lda #0 +@eraseloop: + .repeat 4 + sta PPUDATA + .endrepeat + dex + bne @eraseloop +@noerasemsg: + + ; Copy sprite display list to the PPU + lda #0 + sta PPUSCROLL + sta PPUSCROLL + sta OAMADDR + lda #>OAM + sta OAM_DMA + + lda #VBLANK_NMI|OBJ_8X16 + sta PPUCTRL + lda #BG_ON|OBJ_ON + sta PPUMASK + + jmp mainloop +.endproc + + + +;; +; Does one pass of bubble sort on the sprites by their X coordinates. +.proc sortCans + ldx #0 +sortloop: + lda canXHi,x ; compare the sprites' X coordinates + cmp canXHi+1,x + bcs noSwap + jsr swapCans +noSwap: + inx + cpx last_active_can + bcc sortloop + rts +.endproc + + +;; +; Swaps a pair of sprites x and x+1. +.proc swapCans + ldy canXHi,x + lda canXHi+1,x + sta canXHi,x + tya + sta canXHi+1,x + + ldy canXLo,x + lda canXLo+1,x + sta canXLo,x + tya + sta canXLo+1,x + + ldy canDXLo,x + lda canDXLo+1,x + sta canDXLo,x + tya + sta canDXLo+1,x + + ldy canYHi,x + lda canYHi+1,x + sta canYHi,x + tya + sta canYHi+1,x + + ldy canYLo,x + lda canYLo+1,x + sta canYLo,x + tya + sta canYLo+1,x + + ldy canDYLo,x + lda canDYLo+1,x + sta canDYLo,x + tya + sta canDYLo+1,x + + ldy canTheta,x + lda canTheta+1,x + sta canTheta,x + tya + sta canTheta+1,x + + ldy canDTheta,x + lda canDTheta+1,x + sta canDTheta,x + tya + sta canDTheta+1,x + rts +.endproc + + +;; +; Copies a name table from address in 0 to CIRAM $2000. +.proc copynametable +src = 0 + + ldy #VBLANK_NMI + sty PPUCTRL + lda #$20 + sta PPUADDR + ldy #$00 + sty PPUADDR + ldx #4 +copyloop: + .repeat 2 + lda (src),y + sta PPUDATA + iny + .endrepeat + bne copyloop + inc src+1 + dex + bne copyloop + + rts +.endproc + +;; +; Waits for vertical blanking. +.proc wait4vbl + lda nmis +notyet: + cmp nmis + beq notyet + rts +.endproc + +;; +; Increments retrace count for wait4vbl and other logic. +.proc nmipoint + inc nmis + bne nohi + inc nmis+1 +nohi: + rti +.endproc + +;; +; IRQ handler that does nothing because doesn't use +; mapper IRQs, APU frame IRQs, or DPCM IRQs. +.proc irqpoint + rti +.endproc + +; +; DATA TABLES +; + +.segment "RODATA" + +obeydata: .incbin "src/sprite.nam" ; made with 8name II +randnos: ; per http://en.wikipedia.org/wiki/Rijndael_S-box + .byt 99,124,119,123,242,107,111,197, 48, 1,103, 43,254,215,171,118 + .byt 202,130,201,125,250, 89, 71,240,173,212,162,175,156,164,114,192 + .byt 183,253,147, 38, 54, 63,247,204, 52,165,229,241,113,216, 49, 21 + .byt 4,199, 35,195, 24,150, 5,154, 7, 18,128,226,235, 39,178,117 + .byt 9,131, 44, 26, 27,110, 90,160, 82, 59,214,179, 41,227, 47,132 + .byt 83,209, 0,237, 32,252,177, 91,106,203,190, 57, 74, 76, 88,207 + .byt 208,239,170,251, 67, 77, 51,133, 69,249, 2,127, 80, 60,159,168 + .byt 81,163, 64,143,146,157, 56,245,188,182,218, 33, 16,255,243,210 + .byt 205, 12, 19,236, 95,151, 68, 23,196,167,126, 61,100, 93, 25,115 + .byt 96,129, 79,220, 34, 42,144,136, 70,238,184, 20,222, 94, 11,219 + .byt 224, 50, 58, 10, 73, 6, 36, 92,194,211,172, 98,145,149,228,121 + .byt 231,200, 55,109,141,213, 78,169,108, 86,244,234,101,122,174, 8 + .byt 186,120, 37, 46, 28,166,180,198,232,221,116, 31, 75,189,139,138 + .byt 112, 62,181,102, 72, 3,246, 14, 97, 53, 87,185,134,193, 29,158 + .byt 225,248,152, 17,105,217,142,148,155, 30,135,233,206, 85, 40,223 + .byt 140,161,137, 13,191,230, 66,104, 65,153, 45, 15,176, 84,187, 22 + + +; palette +titlepal: + .byt $0f,$00,$10,$30,$0f,$12,$1a,$30,$0f,$1a,$2c,$30,$0f,$12,$14,$30 + .byt $0f,$00,$10,$30,$0f,$12,$1a,$30,$0f,$1a,$2c,$30,$0f,$12,$14,$30 + +.segment "VECTORS" + .addr nmipoint, resetpoint, irqpoint diff --git a/spritecans-2011/tilesets/main.png b/spritecans-2011/tilesets/main.png new file mode 100644 index 0000000000000000000000000000000000000000..2db7e4ab35ca8365d50378e7794ca69b38fc1b41 GIT binary patch literal 1240 zcmV;}1Sk86P)Px#3{Xr|MF0Q*00620ssR80|LhwYlK=n!0b)x>L;#2d9Y_EG010qNS#tmY3ljhU z3ljkVnw%H_000McNliru+XNQ`FC?XP`^o?S1Vu?iK~!ko?UhYyjTTjv;$(DY8UjBL+0O<9Sq^e+baex9Qf!hHF5?hIlTmZB&N`ew# zv=K^Tt7h6{WednWlQ}m`XF;IwC6H3jf*@!Cj)38u>nsbHG+8DkqFDzRlW|2Bw3#Wc z&?Cn>>j2Pg)N*MS9l-RX>8JPAJvtCZP|Nhwdwlv>mH4YZH3s1Np?X*Zt{>>xfH6jV zQX=49&!5nwt2Jz1uM?KEJzS#6GP*j+m--~VR3Pxeq&~tH2N{ft;VYX z+DmThgydaO1Qe1B4A+LlHg@aK0LBh3#X55104FK|)}I5&lHD%)5dcm_Im^kOfCa$D z0CuyLp{~fUjR6I!Ei?=GNDHh|*gJ6Lp9D>Z<<5>hV~lm1VsW2L;?q+MGH0BP8Q}53 zV=c!}2_fjxr%Sru2Z4VAW5#o>bG#pPp6NW#@?7W4-Qp17-w4_m;}xXw=AkJn9Uvr5 z1Aa*70uKjT7&Ej%E}{s5C55g5O+jvN7wHPX-NGj)VF|vtLTm2oF7?l`-r)0%>koJA zn%lZ{`XlxqCch0wllbcQN&N2hBz}7d(VKpM{Z&8R+vtyay>uAI7q`8w+kWrms2@)* z`Uni?>#wepz21D-dy#yIzaEa_cUQ&n$Gbs1nHLWD9)W`*!Sx?(94B}2FKP1Pk5RHg z`yu)Xf$y%9{b-&>o5|(oW;%%8UM2Biarsr0Cb09SNcYc*bZ=Uu+t0Bc6r)|VwmU6u zzudk{?V7jshp@cB`ufDxzi2> x): + c |= 1 << i + pixels[x, y] = c + opaqueBase if c > 0 else c + return im + +def renderAttrPicker(tileImg, palette, value): + im = PILImage.new('P', (128, 32)) + im.putpalette(palette) + for i in range(4): + x = i * 32 + t = 0 if i == value else 3 + im.paste(i * 4 + 1, (x + 16, t, x + 32 - t, 16)) + im.paste(i * 4 + 2, (x + t, 16, x + 16, 32 - t)) + im.paste(i * 4 + 3, (x + 16, 16, x + 32 - t, 32 - t)) + im.paste(tileImg.resize((16, 16)), (value * 32, 0)) + #im.show() + return im + +def renderChrFile(tiledata, palette, opaqueBase=0): + tiles = [tiledata[i:i + 16] for i in range(0, len(tiledata), 16)] + rows = [tiles[i:i + 16] for i in range(0, len(tiles), 16)] + h = len(rows) * 8 + w = 128 + + im = PILImage.new('P', (w, h)) + y = 0 + #palette = [0, 0, 0, 153, 102, 0, 102, 204, 0, 255, 204, 0] + im.putpalette(palette) + for row in rows: + x = 0 + for tiledata in row: + tile = tileFromPlanar(tiledata, opaqueBase) + im.paste(tile, (x, y)) + x += 8 + y += 8 + return im + +class NamFile: + defaultNESPalette = \ + "\x0f\x00\x10\x30\x0f\x12\x1a\x30\x0f\x1a\x2c\x30\x0f\x12\x14\x30" + nesclut = [ + (0x80,0x80,0x80), (0x00,0x00,0xBB), (0x37,0x00,0xBF), (0x84,0x00,0xA6), + (0xBB,0x00,0x6A), (0xB7,0x00,0x1E), (0xB3,0x00,0x00), (0x91,0x26,0x00), + (0x7B,0x2B,0x00), (0x00,0x3E,0x00), (0x00,0x48,0x0D), (0x00,0x3C,0x22), + (0x00,0x2F,0x66), (0x00,0x00,0x00), (0x05,0x05,0x05), (0x05,0x05,0x05), + + (0xC8,0xC8,0xC8), (0x00,0x59,0xFF), (0x44,0x3C,0xFF), (0xB7,0x33,0xCC), + (0xFF,0x33,0xAA), (0xFF,0x37,0x5E), (0xFF,0x37,0x1A), (0xD5,0x4B,0x00), + (0xC4,0x62,0x00), (0x3C,0x7B,0x00), (0x1E,0x84,0x15), (0x00,0x95,0x66), + (0x00,0x84,0xC4), (0x11,0x11,0x11), (0x09,0x09,0x09), (0x09,0x09,0x09), + + (0xFF,0xFF,0xFF), (0x00,0x95,0xFF), (0x6F,0x84,0xFF), (0xD5,0x6F,0xFF), + (0xFF,0x77,0xCC), (0xFF,0x6F,0x99), (0xFF,0x7B,0x59), (0xFF,0x91,0x5F), + (0xFF,0xA2,0x33), (0xA6,0xBF,0x00), (0x51,0xD9,0x6A), (0x4D,0xD5,0xAE), + (0x00,0xD9,0xFF), (0x66,0x66,0x66), (0x0D,0x0D,0x0D), (0x0D,0x0D,0x0D), + + (0xFF,0xFF,0xFF), (0x84,0xBF,0xFF), (0xBB,0xBB,0xFF), (0xD0,0xBB,0xFF), + (0xFF,0xBF,0xEA), (0xFF,0xBF,0xCC), (0xFF,0xC4,0xB7), (0xFF,0xCC,0xAE), + (0xFF,0xD9,0xA2), (0xCC,0xE1,0x99), (0xAE,0xEE,0xB7), (0xAA,0xF7,0xEE), + (0xB3,0xEE,0xFF), (0xDD,0xDD,0xDD), (0x11,0x11,0x11), (0x11,0x11,0x11) + ] + + def __init__(self, chrfilename, palfilename='', namfilename=None): + self.loadchr(chrfilename) + self.loadpal(palfilename) + self.loadnam(namfilename) + + def loadchr(self, chrfilename): + with open(chrfilename, 'rb') as infp: + chrdata = infp.read(4096) + self.chrdata = chrdata + if len(self.chrdata) != 4096: + raise ValueError("not enough data for pattern table") + + def loadpal(self, palfilename): + self.palfilename = palfilename + try: + with open(palfilename, 'rb') as infp: + pal = infp.read(16) + if len(paldata) != 16: + raise ValueError("not enough data for palette") + except IOError, e: + import errno + if e.errno in (errno.ENOENT, errno.EINVAL): + pal = self.defaultNESPalette + else: + raise + self.clut = [] + for c in pal: + self.clut.extend(self.nesclut[ord(c) & 0x3F]) + + def loadnam(self, namfilename): + print "namfilename is", namfilename + if namfilename is not None: + try: + with open(namfilename, 'rb') as infp: + namdata = infp.read(1152) + if ((len(namdata) != 1024 + and namdata.startswith('\x04\x00')) + or namfilename.lower().endswith('.pkb')): + print "unpacking" + namdata = UnPackBits(namdata[2:]).flush().tostring() + if len(namdata) != 1024: + raise ValueError("not enough data for nametable") + self.namdata = array('B', namdata) + except IOError, e: + import errno + if e.errno == errno.ENOENT: + namfilename = None + else: + raise + if namfilename is None: + self.namdata = array('B', [0 for i in range(1024)]) + self.namfilename = namfilename + self.setUnsaved(False) + + def setUnsaved(self, isSaved): + import datetime + self.unsaved = (datetime.datetime.now() + if isSaved + else False) + + def savenam(self, namfilename=None): + if namfilename is None: + namfilename = self.namfilename + s = self.namdata.tostring() + if namfilename.lower().endswith('.pkb'): + s = "\x04\x00" + PackBits(s).flush().tostring() + with open(namfilename, 'wb') as outfp: + outfp.write(s) + self.namfilename = namfilename + self.setUnsaved(False) + + def getTile(self, x, y): + if x < 0 or x >= 32 or y < 0 or y >= 30: + return None + nameIdx = y * 32 + x + tileNo = self.namdata[nameIdx] + attrIdx = (y >> 2) * 8 + (x >> 2) + 960 + attrShift = ((y & 0x02) << 1) | (x & 0x02) + attrNo = (self.namdata[attrIdx] >> attrShift) & 0x03 + return (tileNo, attrNo) + + def setTile(self, x, y, tileNo, attrNo=None): + if x < 0 or x >= 32 or y < 0 or y >= 30: + return + nameIdx = y * 32 + x + self.namdata[nameIdx] = tileNo + if attrNo is not None: + attrIdx = (y >> 2) * 8 + (x >> 2) + 960 + attrShift = ((y & 0x02) << 1) | (x & 0x02) + attrByte = (attrNo & 0x03) << attrShift + attrByte |= self.namdata[attrIdx] & ~(0x03 << attrShift) + self.namdata[attrIdx] = attrByte + + def getTileData(self, tileNo): + return self.chrdata[tileNo * 16:tileNo * 16 + 16] + + def renderTile(self, tileNo, attrNo): + return tileFromPlanar(self.getTileData(tileNo), attrNo * 4) + +def build_menubar(parent, mbardata): + from Tkinter import Menu + menubar = Menu(parent) + parent.config(menu=menubar) + menus = [] + for (label, items) in mbardata: + menu = Menu(menubar) + menus.append(menu) + menubar.add_cascade(label=label, menu=menu) + for item in items: + if item == '-': + menu.add_separator() + else: + label = item[0] + underline = label.find('&') + if underline >= 0: + label = label[:underline] + label[underline+1:] + else: + underline = None + accelerator = item[2] if len(item) > 2 else None + menu.add_command(label=label, command=item[1], + accelerator=accelerator, + underline=underline) + return (menubar, menus) + +class TilePicker(Frame): + def __init__(self, parent, doc, **kw): + apply(Frame.__init__, (self, parent), kw) + self.doc = doc + self.tilePicker = None + self.attrPicker = None + self.status = None + self.curTile = 0 + self.setAttribute(0) + self.tilePicker = Label(self, image=self.tilePickerPI, + width=128, borderwidth=0) + self.tilePicker.grid(row=0,column=0) + self.tilePicker.bind("", self.tilePickerCallback) + self.attrPicker = Label(self, image=self.attrPickerPI, + borderwidth=0) + self.attrPicker.grid(row=1,column=0) + self.attrPicker.bind("", self.attrPickerCallback) + self.status = Label(self) + self.status.grid(row=2,column=0) + self.setStatus() + + def setAttribute(self, value): + self.curAttribute = value & 0x03 + self.updateWidgets() + + def updateWidgets(self): + self.tilePickerImage = renderChrFile(self.doc.chrdata, + self.doc.clut, + self.curAttribute * 4) + self.tilePickerPI = ImageTk.PhotoImage(self.tilePickerImage) + if self.tilePicker is not None: + self.tilePicker.configure(image=self.tilePickerPI) + + previewTile = self.doc.renderTile(self.curTile, self.curAttribute) + self.attrPickerImage = renderAttrPicker(previewTile, + self.doc.clut, + self.curAttribute) + self.attrPickerPI = ImageTk.PhotoImage(self.attrPickerImage) + if self.attrPicker is not None: + self.attrPicker.configure(image=self.attrPickerPI) + + self.setStatus() + + def setTile(self, tile): + self.curTile = tile + self.setAttribute(self.curAttribute) + + def setStatus(self): + if self.status is None: + return + label = "tile $%02x attr %d" % (self.curTile, self.curAttribute) + self.status.configure(text=label) + + def tilePickerCallback(self, event): + if event.x >= 0 and event.x < 128 and event.y >= 0 and event.y < 128: + tileX = event.x // 8 + tileY = event.y // 8 + newTileNo = tileY * 16 + tileX + #print "mouse was clicked on tile", newTileNo + self.setTile(newTileNo) + return + print "mouse was clicked at (%d, %d)" % (event.x, event.y) + + def attrPickerCallback(self, event): + if event.x >= 0 and event.x < 128: + attr = event.x // 32 + #print "mouse was clicked on attribute", attr + self.setAttribute(attr) + return + print "mouse was clicked at (%d, %d)" % (event.x, event.y) + +class NamDisplay(Canvas): + def __init__(self, parent, doc, **kw): + kw['width'] = 512 + kw['height'] = 480 + kw['relief']='raised' + kw['highlightthickness'] = 0 + apply(Canvas.__init__, (self, parent), kw) + self.doc = doc + self.tile = [] + im = PILImage.new('RGB', (32, 32)) + for y in range(15): + row = [] + for x in range(16): + tile = ImageTk.PhotoImage(im) + if True or ((x ^ y) & 1) == 0: + self.create_image(x * 32, y * 32, image=tile, anchor=NW) + row.append(tile) + self.tile.append(row) + self.updating = False + self.updScreen() + + def updScreen(self): + self.updating = True + for y in range(0, 30, 2): + for x in range(0, 32, 2): + self.updTile(x, y) + self.updating = False + self.update_idletasks() + + def updTile(self, x, y): + if x < 0 or x >= 32 or y < 0 or y >= 30: + return + y = y & ~1 + x = x & ~1 + im = PILImage.new('RGB', (32, 32)) + dst = self.tile[y >> 1][x >> 1] + for y1 in range(2): + for x1 in range(2): + (tileNo, attrNo) = self.doc.getTile(x + x1, y + y1) + tile = self.doc.renderTile(tileNo, attrNo).resize((16, 16)) + tile.putpalette(self.doc.clut) + im.paste(tile, (x1 * 16, y1 * 16)) + dst.paste(im) + if not self.updating: + self.update_idletasks() + +class PackBits(): + def __init__(self, toWrite=''): + self.bytes = array('b') + self.closed = False + self.mode = 'wb' + self.name = '' + self.newlines = None + if toWrite: + self.write(toWrite) + + def close(self): + self.bytes = None + self.closed = True + + def write(self, s): + """Add a string to the buffer.""" + if not self.closed: + self.bytes.fromstring(s) + + def tell(self): + return len(self.bytes) + + def truncate(self, length): + if not self.closed: + del self[length:] + + def writelines(self, seq): + """Add a sequence of strings to the buffer.""" + self.write(''.join(seq)) + + def flush(self): + """Compress the data to a file.""" + i = 0 + base = 0 + out = array('b') + while base < len(self.bytes): + + # measure the run starting at t + i = 1 + imax = min(128, len(self.bytes) - base) + basebyte = self.bytes[base] + while (i < imax + and basebyte == self.bytes[base + i]): + i += 1 + # if the run is either length 3 or to the end of the file, + # write it + if i > 2 or base + i == len(self.bytes): + out.append(1 - i) + out.append(self.bytes[base]) + base += i + continue + + # measure the nonrun starting at t + i = 1 + imax = min(128, len(self.bytes) - base) + while (i < imax + and (base + i + 2 >= len(self.bytes) + or self.bytes[base + i] != self.bytes[base + i + 1] + or self.bytes[base + i] != self.bytes[base + i + 2])): + i += 1 + out.append(i - 1) + out.extend(self.bytes[base:base + i]) + base += i + return out + + @staticmethod + def test(): + pb = PackBits('stopping stoppping stopppppi') + data = pb.flush() + print repr(data) + +class UnPackBits(PackBits): + def flush(self): + out = array('b') + base = 0 + while base < len(self.bytes): + c = self.bytes[base] + if c > 0 and c <= 127: + b = self.bytes[base + 1] + out.extend(self.bytes[base + 1:base + c + 2]) + base += 2 + c + elif c >= -127: + b = self.bytes[base + 1] + out.fromlist([b] * (1 - c)) + base += 2 + return out + + @staticmethod + def test(): + start = 'stopping stoppping stopppppi' + packed = PackBits(start).flush().tostring() + print repr(packed) + unpacked = UnPackBits(packed).flush().tostring() + print repr(unpacked) + print "pass" if start == unpacked else "fail" + + +class App: + filetypes = [ + ('NES nametable', '*.nam'), + ('NES compressed nametable', '*.pkb'), + ('PNG image', '*.png'), + ('GIF image', '*.gif'), + ('Windows bitmap', '*.bmp') + ] + + def __init__(self, w, doc): + import sys + self.window = w + self.doc = doc + mbardata = [ + ("File", [ + ("&New Nametable", lambda: self.file_new_nam(), "Ctrl+N"), + ("&Open Nametable...", lambda: self.file_open_nam(), "Ctrl+O"), + ("Open &Pattern Table...", lambda: self.file_open_chr(), "Ctrl+L"), + '-', + ("&Save", lambda: self.file_save_nam(), "Ctrl+S"), + ("Save &As...", lambda: self.file_save_nam_as(), "Ctrl+A"), + '-', + ("E&xit", lambda: self.file_quit(), "Ctrl+Q") + ]), + ("Help", [ + ("&About...", lambda: self.about()) + ]) + ] + (menubar, menus) = build_menubar(w, mbardata) + w.bind("", lambda e: self.file_new_nam()) + w.bind("", lambda e: self.file_new_nam()) + w.bind("", lambda e: self.file_open_nam()) + w.bind("", lambda e: self.file_open_nam()) + w.bind("", lambda e: self.file_open_chr()) + w.bind("", lambda e: self.file_open_chr()) + w.bind("", lambda e: self.file_save_nam()) + w.bind("", lambda e: self.file_save_nam()) + w.bind("", lambda e: self.file_quit()) + w.bind("", lambda e: self.file_quit()) + + self.tilePicker = TilePicker(w, doc) + self.tilePicker.grid(row=0,column=0, sticky=NW) + self.namDisplay = NamDisplay(w, doc, borderwidth=0) + self.namDisplay.grid(row=0,column=1) + self.namDisplay.bind("", self.namPickupCallback) + self.namDisplay.bind("", self.namPickupCallback) + self.namDisplay.bind("", self.namWriteCallback) + self.namDisplay.bind("", self.namWriteCallback) + w.wm_resizable(0,0) + self.updWindowTitle() + + def namPickupCallback(self, event): + if event.x >= 0 and event.x < 512 and event.y >= 0 and event.y < 512: + x = event.x // 16 + y = event.y // 16 + (tile, attribute) = self.doc.getTile(x, y) + self.tilePicker.curTile = tile + self.tilePicker.setAttribute(attribute) + return + + def namWriteCallback(self, event): + if event.x >= 0 and event.x < 512 and event.y >= 0 and event.y < 512: + x = event.x // 16 + y = event.y // 16 + t = self.tilePicker.curTile + a = self.tilePicker.curAttribute + self.doc.setTile(x, y, t, a) + if not self.doc.unsaved: + self.doc.setUnsaved(True) + self.updWindowTitle() + self.namDisplay.updTile(x, y) + return + + def updWindowTitle(self): + nfn = self.doc.namfilename + if nfn is None: + nfn = 'untitled' + if self.doc.unsaved: + nfn = '*' + nfn + appname = '8name II' + title = ' - '.join((nfn, appname)) + self.window.title(title) + + def file_new_nam(self): + print "File > New Nametable" + + def file_open_nam(self): + from tkFileDialog import askopenfilename + filename = askopenfilename(parent=root, + filetypes=self.filetypes, + initialfile=self.doc.namfilename, + title="Open Nametable") + print "file open nam: filename is", filename + if not isinstance(filename, basestring): + return + self.doc.loadnam(filename) + self.namDisplay.updScreen() + self.updWindowTitle() + + def file_open_chr(self): + from tkFileDialog import askopenfilename + filename = askopenfilename(parent=root, + filetypes=[('Pattern Table', '*.chr')], + initialfile=self.doc.namfilename, + title="Open Pattern Table") + if not isinstance(filename, str): + return + self.doc.loadchr(filename) + self.tilePicker.updateWidgets() + self.namDisplay.updScreen() + + def file_save_nam(self): + if self.doc.namfilename is None: + return self.file_save_nam_as() + self.doc.savenam() + self.updWindowTitle() + + def file_save_nam_as(self): + from tkFileDialog import asksaveasfilename + filename = asksaveasfilename(parent=root, + filetypes=self.filetypes, + title="Save Nametable As") + ext = filename[-4:].lower() + if ext in ('.png', '.gif', '.bmp'): + print "Would save image to", filename + else: + self.doc.savenam(filename) + self.updWindowTitle() + + def file_quit(self): + self.window.destroy() + +root = Tk() +app = App(root, NamFile('../spritecans.chr')) +root.mainloop() +print "remain:" +print "1. implement image saving" +print "2. implement and test loading" +print "3. implement and test compressed pkb support" +print "4. Implement stub methods for File menu items" +print "5. Warn on closing document where doc.unsaved is not False" +print "6. Write palette editor" diff --git a/spritecans-2011/tools/mktables.py b/spritecans-2011/tools/mktables.py new file mode 100644 index 0000000..a499597 --- /dev/null +++ b/spritecans-2011/tools/mktables.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python +# +# Lookup table generator for Concentration Room +# Copyright 2010 Damian Yerrick +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty +# provided the copyright notice and this notice are preserved. +# This file is offered as-is, without any warranty. +# +from __future__ import with_statement, division +import sys + +ntscOctaveBase = 39375000.0/(22 * 16 * 55) +palOctaveBase = 266017125.0/(10 * 16 * 16 * 55) +maxNote = 80 + +def makePeriodTable(filename, pal=False): + semitone = 2.0**(1./12) + octaveBase = palOctaveBase if pal else ntscOctaveBase + relFreqs = [(1 << (i // 12)) * semitone**(i % 12) + for i in xrange(maxNote)] + periods = [int(round(octaveBase / freq)) - 1 for freq in relFreqs] + systemName = "PAL" if pal else "NTSC" + with open(filename, 'wt') as outfp: + outfp.write("""; %s period table generated by mktables.py +.export periodTableLo, periodTableHi +.segment "RODATA" +periodTableLo:\n""" + % systemName) + for i in range(0, maxNote, 12): + outfp.write(' .byt ' + + ','.join('$%02x' % (i % 256) + for i in periods[i:i + 12]) + + '\n') + outfp.write('periodTableHi:\n') + for i in range(0, maxNote, 12): + outfp.write(' .byt ' + + ','.join('$%02x' % (i >> 8) + for i in periods[i:i + 12]) + + '\n') + +def makePALPeriodTable(filename): + return makePeriodTable(filename, pal=True) + +tableNames = { + 'period': makePeriodTable, + 'palperiod': makePALPeriodTable +} + +def main(argv): + if len(argv) >= 2 and argv[1] in ('/?', '-?', '-h', '--help'): + print "usage: %s TABLENAME FILENAME" % argv[0] + print "known tables:", ' '.join(sorted(tableNames)) + elif len(argv) < 3: + print "mktables: too few arguments; try %s --help" % argv[0] + elif argv[1] in tableNames: + tableNames[argv[1]](argv[2]) + else: + print "mktables: no such table %s; try %s --help" % (argv[1], argv[0]) + +if __name__=='__main__': + main(sys.argv) + diff --git a/spritecans-2011/tools/pilbmp2nes.py b/spritecans-2011/tools/pilbmp2nes.py new file mode 100644 index 0000000..797bc9a --- /dev/null +++ b/spritecans-2011/tools/pilbmp2nes.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python +# +# Bitmap to NES CHR converter using Python Imaging Library +# Copyright 2010 Damian Yerrick +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty +# provided the copyright notice and this notice are preserved. +# This file is offered as-is, without any warranty. +# +from __future__ import with_statement +from PIL import Image +from time import sleep + +def formatTilePlanar(tile, nPlanes): + import array + if (tile.size != (8, 8)): + return None + pixels = iter(tile.getdata()) + outplanes = [array.array('B') + for i in range(nPlanes)] + for y in range(8): + slivers = [0 for i in range(nPlanes)] + for x in range(8): + px = pixels.next() + for i in range(nPlanes): + slivers[i] = slivers[i] << 1 + if px & 0x01: + slivers[i] = slivers[i] | 1 + px >>= 1 + for i in range(nPlanes): + outplanes[i].append(slivers[i]) + out = "".join(plane.tostring() for plane in outplanes) + return out + +def parse_argv(argv): + from optparse import OptionParser + parser = OptionParser(usage="usage: %prog [options] [-i] INFILE [-o] OUTFILE") + parser.add_option("-i", "--image", dest="infilename", + help="read image from INFILE", metavar="INFILE") + parser.add_option("-o", "--output", dest="outfilename", + help="write CHR data to OUTFILE", metavar="OUTFILE") + parser.add_option("-W", "--tile-width", dest="tileWidth", + help="set width of metatiles", metavar="HEIGHT", + type="int", default=8) + parser.add_option("-H", "--tile-height", dest="tileHeight", + help="set height of metatiles", metavar="HEIGHT", + type="int", default=8) + (options, args) = parser.parse_args(argv[1:]) + + tileWidth = int(options.tileWidth) + if tileWidth <= 0: + raise ValueError("tile width '%d' must be positive" % tileWidth) + + tileHeight = int(options.tileHeight) + if tileHeight <= 0: + raise ValueError("tile height '%d' must be positive" % tileHeight) + + # Fill unfilled roles with positional arguments + argsreader = iter(args) + try: + infilename = options.infilename + if infilename is None: + infilename = argsreader.next() + outfilename = options.infilename + if outfilename is None: + outfilename = argsreader.next() + except StopIteration: + raise ValueError("not enough filenames") + try: + argsreader.next() + raise ValueError("too many filenames") + except StopIteration: + pass + + return (infilename, outfilename, tileWidth, tileHeight) + +argvTestingMode = True + +def main(argv=None): + if argv is None: + import sys + import os + argv = sys.argv + print argv + if (argvTestingMode and len(argv) < 2 + and sys.stdin.isatty() and sys.stdout.isatty()): + argv.extend(raw_input('args:').split()) + try: + (infilename, outfilename, tileWidth, tileHeight) = parse_argv(argv) + except StandardError, e: + import sys + sys.stderr.write("%s: %s\n" % (argv[0], str(e))) + sys.exit(1) + + print "loading", infilename + im = Image.open(infilename) + im.load() + (w, h) = im.size + + out = [] + for mt_y in range(0, h, tileHeight): + for mt_x in range(0, w, tileWidth): + metatile = im.crop((mt_x, mt_y, + mt_x + tileWidth, mt_y + tileHeight)) + for tile_y in range(0, tileHeight, 8): + for tile_x in range(0, tileWidth, 8): + tile = metatile.crop((tile_x, tile_y, + tile_x + 8, tile_y + 8)) + data = formatTilePlanar(tile, 2) + out.append(data) + with open(outfilename, 'wb') as outfp: + outfp.writelines(out) + +if __name__=='__main__': + main() diff --git a/spritecans-2011/zip.in b/spritecans-2011/zip.in new file mode 100644 index 0000000..f2f5698 --- /dev/null +++ b/spritecans-2011/zip.in @@ -0,0 +1,18 @@ +README.txt +obj/nes/index.txt +src/music.s +src/musicseq.h +src/musicseq.s +src/nes.h +src/paldetect.s +src/sound.s +src/sprite.nam +src/sprite.s +tilesets/main.png +tools/8name.py +tools/mktables.py +tools/pilbmp2nes.py +makefile +nes.ini +spritecans.nes +zip.in diff --git a/stars_se/Header_32k b/stars_se/Header_32k new file mode 100644 index 0000000000000000000000000000000000000000..57c2980a8f517d2b679b218b1ef9d4ddcb557206 GIT binary patch literal 16 QcmeZs4VGeJWMqH=01pHK1poj5 literal 0 HcmV?d00001 diff --git a/stars_se/Make_StarsSE b/stars_se/Make_StarsSE new file mode 100644 index 0000000..f6696a4 --- /dev/null +++ b/stars_se/Make_StarsSE @@ -0,0 +1,2 @@ +DAsm StarsSE.asm -f3 +Join Header_32k MUSIC.bin StarsSE.SPR a.out StarsSE.CHR AS StarsSE.NES diff --git a/stars_se/ReadmeStarsSE.TXT b/stars_se/ReadmeStarsSE.TXT new file mode 100644 index 0000000..c8edc42 --- /dev/null +++ b/stars_se/ReadmeStarsSE.TXT @@ -0,0 +1,21 @@ +This is an NES demo that I made to show off some of the NES' features. +It doesn't do too much that resembles an actual game, but it should give +you an idea of what the NES can do technically. Besides, I'm proud of +what I did, since I'm a beginner at NES (and 6502) programming. + +This demo, called "Stars SE" is a tribute to the NES and NES games of +the past. It's also a little tip of the hat to the C-64-style intros. +I have included the source code to this version of Stars, but the music +is not included, as I did not write it. + +I've tried to code this demo by the book, without using any bad tricks +(since I don't really know any tricks anyway). A _good_ NES emulator, +that is, one that behaves closest to a real NES, should have no problem +running this thing. + +Please E-Mail me if you like this demo. Enjoy! + +Chris Covell +ccovell@direct.ca +http://mypage.direct.ca/c/ccovell/ +Powered by Amiga! diff --git a/stars_se/StarsSE.CHR b/stars_se/StarsSE.CHR new file mode 100644 index 0000000000000000000000000000000000000000..2d9eae686843e8bf9936e24f0945eda886f26272 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/stars_se/StarsSE.NES b/stars_se/StarsSE.NES new file mode 100644 index 0000000000000000000000000000000000000000..df554289a83d79327be1a36fc954cb8a0d1d3263 GIT binary patch literal 40976 zcmeHQ4SZC^wLf=1vP%fb1_MS(lN+RxL_UHQKG(z)!ihU>_W1e>~4U( z#v~}KKwm6Hqf!t9bZHVxmA16%s}R2`U_Vk@>Fc8{u_}+!R<~6PLdd@VnS1YMA$&-y zrT*SdcIV8TIdkUBf6knly|Br`S&OdJNfK$PvtesMp4am4ou<|iR@;uSXXtb20^Z<~REM`KxYR`*P9YJ~yw$M3ZG2mH&qs&dLH8@3o~yxh2W$6Pds0~Ha9yyj-SqP%>kRD%3{@vjUwOE8 z{vTV~Y1QOs7t;4{k@w#BjmdjgP3|`IytkFs#>aQ;nqtv)(!QcxU1w3-lwH}DA-kr` zn>XUN4P@PQ#|Fu|YkcVHU4<5NC$$xJ#u_suMeAi&#Z7ijn%{Qs&Plwc zldjIoQC?u7I&YprwKlE^wrCK`9+<@I9=JAG7w@R+=%vupy;5jruP)Txs}H@5>Hai3 z0payR$lU{py|7jwOLfC|f3HH#?RFu0@w?gSGLF z+K!!*_Rh&}Zkz4Q;Zja^M%z5+JfyaTJ14c>VuRq-ZL`}@MMdj@H44-_vujx{upG9c zzRVWi@$3&)?S5vJZJ#cbvQHnn3=5XIPYR9SX9`KS`G@Yi-(%Z|VBWu|Kd*D-W z*|pmz@1u~etrE_lYb&#@%??2tZnu3hdjaZ6fxPXLcTLHEC+~DdszYOh_E|zl_Q|1N z*zRZ1X)Fpa`~&-=)HYt_vOKu10WOStai1Zyf1fe*8yH(93}qETcW4+I(=d}M`G3&& zyw7TO6~p)Dz}~h(XWKLzvx0d7g1lYDP(G-&GwJhrfwQ!2pDfgsp+g|={_9kWcNM;K zU2Z0f|FBXsUd)8~7IP4`2d`@@wC$RfS}z269ua}u0Riir&ZMA^z0VKtgIl)1B|9^m zR_nsJ_l=v43yhNSSwp?yI>T}O9{n2q?fS9$k90rNZP&Hv?$k}wU8(Dn4oNRdPf8C- zjZ&4gNU};3q|Zsiq<(sjeot@EKH5#+rA}(6N9jSjpPFeo)zK2Fpu6ddR7xduBi%qV zsEDqoe7cUVrHM3-awv;FPghYUWzgp+jjp6C=yDoKBPfN2Q!-g7i4yTMj1p)le&X>n zgv|IciJv%Kc6v^{rV!;4ogk{#QFR>pQ-Xn`wIp(#0i)7<1C1e? zWuU8xZZMG3OluOT%R;ZE&=E5Y8AdtDbmIte4xu%}s4JOX8$m~g(2zvR8BRBjB9l4#bxo(&rqhutXh=HcjHVl}rX$%jWCG<}OE*rT)Sn{4nDN; z;l*vE9y$2P#zz-FHfqDc4I96{c;l!|2RCheeDUT{PaJ$=WBcMQqqZL0x^dg$Z;T2a z3~t=M_?x3T4t8wL)boTbWANIn995#cDXOgUS?+8}$Zr@dFZk_I{PyW)?l1V;qWD{) z%IA{5fNetO1!T@Jp z*2lL0EPVw&L5zrWUi_nNP;6GLZIcL9Q3>b6Zy6|mV*KPxwpr*W z%O_vPhUH`t;|%lfTgsam-DTU*BTij zdfbkvaTQ~g{4_gnHgstAd>nqqbVHXWA3fG3E8h(KFXjcGJgfX?gr8n_1J&NJ*~>Y~ zC`9tl1V63ri&Xo?OO8*v7R`PT4AB~dVCdx{FE`GW=6F2J^?DV?E&E7^e|AhFN zLeCbVKeMiJi?>nD&%sX<{7phWt!~pM?K?TZC7b%f)2c{{wv+k%jD=t8qvRtU&sVTyMs%vrqm=q3 z;;YZ=gbnFY_-~HFIXw#heiE)cR@T zf3fquSow>^=U+`e+Lxls=km8`ndtJRlE2vXx>)%Kg~txg9}|3K*3qr4f z7lQws-_*0VM!H|>!f^55moBvxfB*PbEQ-4S5B}G>!JNN;s86S-<Z_VhF?#h#?R|AcjB;ffxcY1Y!up5QrfVL*N1kJUv7@<%ySO+lERv zI1;3r{KIrRrXXT*Jl`OAJO_sm2AX&D3BU!$Ab+UY5ZnE6ho-F^@HJO&0D>LPB z4oOZwB*{}tBzf2!lKk`MB-(tJL~r6-g}+UZC~K8Oo?MAu{ zho0Uj(9=A;-+fb0Ne7Me?hYgE8Ed5C-x=xk8Aj?zH`115Bkgw?$?+2-J$8+e{`5m5 z{pNKeed+rqs!KM}qA#1NdyN_2>;1z262RdZqw1)pXzA;5A~FXS+6*(rx89qC0wtks;l%gXB%d>PEX(6 zZJ>=)4V0H^puUv`YA_q<;n@ay?$-u-?MefERA!*(pEb~`bOUw&*+7@ujI?vAk?!a- zQg4-!Dz_VH%+HO~rZbZ9FGd=h7DvWXeE<00<7mv9xc^=ueviXeeD_&?P?Gn5y*+M~ zgkPV4Z$y8MR`;Czkz_g6DYwSS_ze(o@>XiMw3_7oJttQ89P11Q;yYgo3_Y#cuy)Q? z+7b^TXV>BQ9^K)g`+NShy5|p_SF?_8Wb(EHonyITQz~1F9%RKLYnPu7yoA0-R`>jE zD?Lx$k5k+cj6?w`Kml`LNFXtggmDc4OXsTrV<5Tns(`68HxSp^5a4g%>pOLUgia|i z4Ax2#|K19zl_X(0kGLAYxuP?*Rg!~JsE?Hfsb?mS6PJ1qy|8ZhoFmWE3rCKi5{H5J z@89p_@sEJ33G9c!{{5-|T7*E)ZeW;g?fFQM&__XCt5HT-e&#^7CG^m{lGK^-6G`eZ z3agNjv}3@!`G0$H*vPT@!^o05Y-HBdVb^4iQOZ}39A+AsHS7W#n41k3NX84Kk1+&M z=r4bLAA)fv^N{$V3BwYT=ua9?^#9<)za2wiQ~^+9gs^wo7= z6YS{DwEm%o+mzQte>19y=+D2Pj?S(p zzqNVCx1V}?=XbvQy^`hO1o2C+({KdV$FzdO|X=I`Hn`<>Id1Nadg{@){i zIC^^X8MQy2QU6D)7jRF*1>Dp4kB)z#{{JldZoT!^-Mg0|ACyK2j)udT_R1eSmH3eS z6HZIAJjc;6POf(O{0?{Kc~#AE*uApfY4;b&@?8H|pWNW7_sR=rEt1Ra)zvO{6*DG4 z#f-5v9``ueZ(r(=U4Ge9k9Vc)^LxDZDu--$SIGW)uUj;^SzaWevCQFc%MBREcfGva z*&sXZ%N(p#u5v9yOMR{EK|2pyX?OXZmG#wfmDkZAmw8seD5Uuwdxh+B%RWzyLtbF_ zx;z+Q5m#n-+iu4iz|&D7 zk6z>l5^~O>SvjM5;@lr_V-B}t732z!!zXx)X2C>;wbJ7S3>dL`oItJIQ(s*n`|J%+ zRqH5s*{kJQ6)wNaY;R&+i7=~J1QoOmgQ26i-j+9 zl-uiJJq+?XP`Ar&$8ul}7Z7Fwvt#-`V+%4P7{q?Xt2SC<(d}0DQyl`47bz;N{M~z2d;vUP` zKzq4!9FI78{7jfr4)^o%tbOoSc2*Q;FSuKexz}O$qYHbvHaAqu8sr+sIC+NC3kR6t zStdLmqqAlQM6ovW>fH``($uL_<>?b<3LN3N6+EpOUy!HQxDW>>U7MTBdxzn!v3naL zBLF>2!RK?-l(EYw)A2hH58PGPD|3@IZ42z>f>Sa>s8aShE5ka}I$h-eI%-Ws5L6Vw zrh&Qgwh%#(M}e8xL3RWSI6uc(>=#~bw>)cB$t^c67_Vu>enM1n!^hD@S+kNErglZQK7S>*Ro9uIXmWyqz1QRhuabS26k#Jt{ zkOE;x!&qz$MK^~nWiiDrW%=cHKXw5R$lFIb4jD@3;3#wQA%o4R?k2lj39N*FX~way z`JEgg{H_{d>+Ku?=E}9zaB(G~K>#Z-SMeDr7fm=(;Eb4lb%hf;8G$N0n0A~MZsmyJ zxL57qxGgYeGcax8ZW_=7t^oY)6$(BaMcH<-%fuW8@3ZJVC(1M6DlWedxSuP{@Ie37 z@(qHoc=&mtUdOK7kgfu4!jsR{jpEw8|>AHG4Ptv zGdwjoZi;a$@ivTx%et#L9B|ykG3UdL!tJ+XYnQ{N=Zou*vi`iJwe{6L$8uK%+}F3< z;i&cD4t3T^VlS{a)p{M3@OQRQI|w7bzsObXLaO2IQ{bG_d4^3YQn5XF|DsV)?}KauJ2aO~S=H z0@8e%a=hTUgS~{9sF==v3cG~Xjr*L_ zj>1fb+vQVZkUEiB?B|%rz*v>`8do(g=RjS!Qmw;-31|y5mq)|^h_yI$#d%!A!<}84 zj}NvLbf#mO2yhY5=3-^|qNq5EM_m5Iro&Z5Ou7=$S8Ne@9qvlFYWWC6x zA&z~>V!ms`uM05C_#3Cvdx5w$nDtaVsLn~j(y6zv%lVhk*7QUy3OHIwW=}qu;#+qkdYR@z&dg921=QS4R};&v>lEM#${*pBn0E~{~!nAf~M4f z$<{7+8d^>A>YfuQ8I_W)-Mm$LaHMrV-aAHGm#od{!Xv|<=%kRLRVU$>vf2(O1(Wv0 z^%(G&FUht&>G{7NKu`JC2W)u8hDU7XIcw)UHYcb{btD9IL4B%Y7#$P zGxRvo)f_b8!C^2C86Io089~!rgT@k!ebi$PS^|b(a=<7*a6o?WKxYv@Y#f42K72rV zbq?dvwHnNbesxN-D1hJp8W?y|sagVFVrN`yiggD`A-$Z~;_PsCIkT+RGoKK|>M;aj z2*ePGArM0#hCmE~7y>Z_VhF?#h#?R|AcjB;ffxcY1Y!up5QrfVLm-Ag41pK|F$7`= z#1M!f5JMn_Kn#Hx0x<+)2*ePGArM0#hQR*|1dbn|7r+0jGp8C>)4BLsdlZFen7_cZ@w9(mEA8NdF9ByR{c@z0ovFFX^Z2lko=i`QCc#t(RVU z>3bbduYGuJOAD|`8EQ1)H*1=VLq{Z*fSQuR{l|$~T3RqFl7vPwWl5R(oXc~ zD;zHDeWCZ|y@3`o$u!iYGfBW8J}xUo4!@U_nBLbH5&YawNGpCV84R8WZQPg4qey9ryoXlp6Od2)k zq!p&+K)*_1SRq>&p{xu&n5eW#l!-J7C*k!&VyeSPvNb{r7IG>ejV7cOq#=<;!B0q? z(!}j5O-xG^@(P9Aop&|~c|n`3jfvc@(Sn86Mn%6un-(S}us>-OdillrHCmXc)CJ|W z;MeJt=gWMvB{4PEmYa${HLp^hwlZ;r)}|)JC8WZmRa#K2OR(V2(`z(s^t{{V%ju-i z)B83N}J7A342xAcr7QitF)=i)@Uok*aLJ0dT?D(^mCV$iT;9? z@n~gbq|pL^lbVWlm8N48CRFE>M$0OkE2=9YuTtzq8;_^avSm$6gg%XW|HEC$`c+zh zMlrrh8$lakpGLWTNyRkMDEN&$o)M~x6thnq>(kS@F*5U$g7gVR4HoJKCG}0*Zo2*JZ z(}dxcM(peeC7L#S_B0&?6e{!<7c2Tf&6J7&kQSi^#94!3X1+$P)|qokoHHS>P?lzS zjS?-Jiv;^L3j3j#NTUU)D)uS#&a$#Q`9IWaRM@3c?E}5D%*xFXT4*iMHKMLi3r}x& z0%?>8>Vd~;bPUHI@CBU?^QNG#QE5&_g?iS~{KB*`ij=!r}oaP3U zIpO5~pkL5#9Kk}4sQXBt=-m=hDCt#wQWBBQG_jfGBvS_H#3FP;;_}&2OV4q^#sz`Z z3j^Cj;+KU`cc@P@*eb@u;U}o1&rs^7B$D)(7m0qt{BTh-Do7b34~KjEgxYYgG7R*! zbRR#}&*xxwsJ{>ADW`UkbG9eE=T}d@(e*~NnuMC>J-4gsKu!)6l~VJb(>Z>UoZRSi%Cr`bn_Q&i_y?4)p z$DTQ)we3E(=T|2Wo%ozq4}a<158t~xQVUPaP|6Psu)_Tx^mc32{!p)&O23+pH)HJP z=6f^;%$arX2PeYe_h3>I^SVZK-JCOP>j$P6{&I?Wn49>~^zq!7r`7iio?r9sV@K7? z=?g9W@Atp@e%eFe!o zft^~Lm>jNQY90QhGo{~+wMQpj^Z)qr7n+JpdTqVwB@N_~ken9!Kx_ z_OTQ2Ab|(GgJ+*}>sHm?=8V1%x@=o*?Y92oz1^G?f67tKAo{kcOM24uR8a={@(#TI z^5$mMwkUEu6shzb55dgHe7MX>Ye!Ksi5-T^XKyzR%?LN2c>n0_%CcJM#4o!_J4!oB zL?>hzI5Jn}^aAwK}Z5@0M#!sSD<`W+t#r!mVVmFkuTeW&eNsCq#^mO!j9Zz48-WNlAKkWTb+%UPr zA_+g4i`HmL{`#R}S(3UQ3R+#avM+Nw`i8KeRHFz}nIxB^fU(RoADkx}fY-}tjC@c&gDl{jX67@wz85xOY zlHOV~^~;CuZia?eAK-xy2*Uj*LVIx-ASCpKrs_??u=F%#3G{ls_#np)!Ul%>KYHuO zxxFoXeuTR55ysZSZ0c1AN+r3qxxC#B<^=IMG>y^{(ok=-HYQ+N{CU(?3z~pC6@Q*h zNli;l0WHmM%#SP^>XD?usZrcUMN(;ge!i$$@>KzqKPEMG3^!;rwV(hU@3mkU%e`bN z&F{}IX^O6@vg}t0<@h)%IWJ81>ZB8|veLV12qY zo_(x4)R@73r8DZRE!;!Wk!fkk4UTQuGM2ShCmE~7y>Z_VhF?#h#?R|AcjB;ffxcY1U?-E{tu+8X%7GZ literal 0 HcmV?d00001 diff --git a/stars_se/StarsSE.SPR b/stars_se/StarsSE.SPR new file mode 100644 index 0000000000000000000000000000000000000000..6f004476e9f6622ed17c7999487d2916e4179cd6 GIT binary patch literal 512 zcmWO1%}di^0KoC@^E|(2uH3Tc5ZQ?FNX7z#3M3fWB}*#^6GLKQaKoU{=rJ^9OvMEE7vT%SB7PTC^qtqV0H4 z4sJDe?u4g>jZu;Dpjqx*#o#)O^9 z32t=>=KBQ2fM7#L(6d?aenyZS7Zj$Y?I=k*nUFS|m)7)4QY$1&1xeear1zrYvr%+z zQaleSie*K*RdMdDBDr4iC8n5eQtWjW<`p&HGz){8cM;8wSxuo?^DwNrV>Dykn#3o~ zjRwuHVa@k~=Fp2OdQBA_XZ+-|ewx|-6MQ3Zr39u3y9yBFA6X~rB%GYn?qr-T{AIxD zcMdy`Mg@!2f~KJ0LqzcSrQrIIApT0Q=A)z>l}rpsW=~2k-IR3glsqU)YC0tsCM09S zibl6S^+U1hm?E%Eky@wNeb?= 0 + + + lda #$20 + sta $2006 + lda #$00 + sta $2006 + + ldx #$00 + ldy #$10 +.ClearPPU sta $2007 ;Clear the PPU space. REALLY IMPORTANT for a real NES! + dex + bne .ClearPPU + dey + bne .ClearPPU + +;------------------------------------------------------ +;********* Set up Name & Attributes ****************** + + lda #<.NESDeck + sta FREEZEROL + lda #>.NESDeck + sta FREEZEROH + + lda #$20 ;Load up entire name & attribute table for screen 0. + sta $2006 + lda #$00 + sta $2006 + ldx #$00 + ldy #$04 + +.LoadDeck + txa + pha + + ldx #$00 + lda (FREEZEROL),X ;Load up NES image + sta $2007 + + pla + tax + + inc FREEZEROL + bne .NoDeck1 + inc FREEZEROH + +.NoDeck1 + dex + bne .LoadDeck + dey + bne .LoadDeck + +;-------------------------------------------------- + +;---------- Set up other bits ---------------- + + lda #$26 ;Bars on screen 1. + sta $2006 + lda #$C0 + sta $2006 + + jsr DrawBits + + lda #$27 + sta $2006 + lda #$60 + sta $2006 + + jsr DrawBits + +;---------------------------------------------- + +;********* Initialize Palette to colour table ******** + + ldx #$3F + stx $2006 + ldx #$00 + stx $2006 + + ldx #$00 + ldy #$20 ;Save BG & Sprite palettes. +.InitPal lda .Palette,X + sta $2007 + inx + dey + bne .InitPal +;------------------------------------------------------ + +;------------------------------- + + ldx #$00 +.CopySpr lda SPRITEHARD,X + sta SPRITEMAP,X ;Copy sprite map. + inx + bne .CopySpr + +;------------------------------- + + lda #$00 + sta NMIPASS ;Flag for NMI Passed + sta NMIODD ;Even/OddVBs + sta NMICOUNT + sta SPRITEHIT + sta CHECKFORSPR + sta RAINBOWPOS ;Position in rainbow + + lda #<.text ;Start of text pointer + sta TEXTLO + sta TEXTHARDLO + lda #>.text + sta TEXTHI + sta TEXTHARDHI + + lda #$23 ;Where to place text on-screen + sta SCRHI + lda #$30 + sta SCRLO + + lda #$79 + sta XSCROLL ;X-Y scroll values + lda #$00 + sta YSCROLL + + lda #$02 + sta XSCROLLSPEED + lda #$01 + sta YSCROLLSPEED ;X-Y scrollspeeds + +;------- MUSIC CODE ---------------- +; lda #START_SONG ;Start Song +; sta sng_ctr +; jsr INIT_ADD ;init tune +; LDA #$01 +; sta int_en +;------------------------------- + + lda #$00 + sta $2006 + sta $2006 + +;Enable vblank interrupts, etc. + lda #%10001000 + sta $2000 + lda #%00011000 ;Screen on, sprites on, show leftmost 8 pixels, colour + sta $2001 +; cli ;Enable interrupts(?) NO!!!!!!!!!!!!!! + +.Loop + + lda NMIPASS + beq .Loop + + lda #$00 + sta NMIPASS + + lda NMIODD + bne .CheckSpr1 + + + ldx #$00 +.SprMov lda SPRITEMAP,X ;Grab sprite Y-Position + clc + adc SPRITEDIR,X ;Add DY + bcc .NextMov1 + + pha ;If it goes off-screen... + inx + lda SPRITEDIR,X ;Get D2Y... + inx + inx + clc + adc SPRITEMAP,X ;..Add to X-Position + sta SPRITEMAP,X + dex + dex + dex + pla + +.NextMov1 sta SPRITEMAP,X + inx + inx + inx + lda SPRITEMAP,X ;Grab sprite X-position + clc + adc SPRITEDIR,X ;Add DX + bcc .NextMov2 + + pha ;If it goes off-screen... + dex + lda SPRITEDIR,X ;Get D2X + dex + dex + clc + adc SPRITEMAP,X ;Add to Y-Position + sta SPRITEMAP,X + inx + inx + inx + pla + +.NextMov2 sta SPRITEMAP,X + inx + bne .SprMov + +.CheckSpr1 + lda $2002 + and #$40 + bne .CheckSpr1 + +.CheckSpr2 + lda $2002 + and #$40 + beq .CheckSpr2 + + lda XSCROLL + sta $2005 + lda $2002 + +;------- MUSIC CODE --------------- +; jsr r_btn +; and #$10 +; beq .Loop +; +; inc sng_ctr +; LDA #MAX_SONG ;Max Song. +; cmp sng_ctr +; bne .no_scr +; lda #$0 +; sta sng_ctr +; +;.no_scr lda #$0 +; sta int_en +; lda sng_ctr +; jsr INIT_ADD +; lda #$01 +; sta int_en ;check button, if pressed inc song # and re-init +;------------------------------------------------------------------------- + + jmp .Loop + +.Palette dc.b #$0D,#$16,#$27,#$38,#$0D,#$00,#$10,#$30,#$0D,#$16,#$28,#$39,#$0D,#$2B,#$21,#$24 + dc.b #$0D,#$00,#$10,#$30,#$0D,#$16,#$26,#$16,#$0D,#$07,#$16,#$28,#$0D,#$00,#$00,#$00 + +.NESDeck + INCLUDE starsnam.asm + + +.text + INCLUDE scrolltext.bin + dc.b #$00 + dc.b "Hello, all you hackers!" + +IncText SUBROUTINE + inc TEXTLO + bne .nocarry + inc TEXTHI +.nocarry rts + +IncScr SUBROUTINE + inc SCRLO + lda SCRLO + and #$1F + bne .nocarry2 + lda SCRLO + sec + sbc #$20 + sta SCRLO + lda SCRHI + clc + sta SCRHI +.nocarry2 rts + +DrawBits SUBROUTINE + ldy #$20 + lda #$04 +.Bits1A sta $2007 + dey + bne .Bits1A + ldy #$20 + lda #$05 +.Bits1B sta $2007 + dey + bne .Bits1B + rts + +;************* MUSIC CODE ******************* +;r_btn SUBROUTINE +; ldy #$08 ;read keypad +; ldx #$01 +; stx $4016 +; dex +; stx $4016 +; +;.r_bit lda $4016 +; ROR +; txa +; ROL +; tax +; dey +; bne .r_bit +; +; cmp pv_btn +; beq .no_chg +; sta pv_btn +; rts +; +;.no_chg lda #$0 +; rts +;*********************************************** + +IncRainbow SUBROUTINE + inc RAINBOWPOS + lda RAINBOWPOS + cmp #$06 + bne .RainEnd + lda #$00 + sta RAINBOWPOS +.RainEnd + rts + +SaveRainbow SUBROUTINE + ldx RAINBOWPOS + lda .Rainbow,X + sta $2007 + jsr IncRainbow + rts + +.Rainbow dc.b #$16,#$28,#$39,#$2B,#$21,#$24 + +NMI_Routine SUBROUTINE + php + pha + txa + pha + tya + pha + + lda XSCROLL + clc + adc XSCROLLSPEED + sta XSCROLL + + lda YSCROLL + clc + adc YSCROLLSPEED + sta YSCROLL + + lda #$00 + sta $2005 + sta $2005 + + + inc NMICOUNT + + lda NMICOUNT + cmp #$04 + bne .NotThere + + lda #$00 + sta NMICOUNT + + lda SCRHI + sta $2006 + lda SCRLO + sta $2006 + + ldx #$00 + lda (TEXTLO),X + + sta $2007 + + lda SCRHI + eor #$04 + sta $2006 + lda SCRLO + sta $2006 + + lda (TEXTLO),X + sta $2007 + cmp #$00 + bne .NoTextWrap + + lda TEXTHARDLO ;Start of text pointer + sta TEXTLO + lda TEXTHARDHI + sta TEXTHI + +.NoTextWrap jsr IncText + jsr IncScr + +;--------------------------------------------- +; increase rainbow colours here. + lda #$3F + sta $2006 + lda #$09 + sta $2006 + + jsr SaveRainbow + jsr SaveRainbow + jsr SaveRainbow + lda #$0D + sta $2007 + jsr SaveRainbow + jsr SaveRainbow + jsr SaveRainbow + jsr IncRainbow + jsr IncRainbow + jsr IncRainbow + jsr IncRainbow + jsr IncRainbow +;----------------------------------- + +.NotThere + + lda #$01 + eor NMIODD ;Update Even/Odd NMIs + sta NMIODD + + lda #$01 + sta NMIPASS + + lda #$00 + sta $2006 + sta $2006 + + lda #$00 + sta $2005 + sta $2005 + + lda #$01 + sta CHECKFORSPR + + lda #>SPRITEMAP ;Point to SPRITEMAP + sta $4014 ;Xfer sprites over + +;----- MUSIC CODE ----------------------------- +; lda int_en +; beq .no_ints +; jsr PLAY_ADD ;play tune +; +;.no_ints +;------------------------------------- + + + pla + tay + pla + tax + pla + plp + rti + +IRQ_Routine ;Dummy label + rti + +;That's all the code. Now we just need to set the vector table approriately. + + ORG $FFFA,0 + dc.w NMI_Routine + dc.w Reset_Routine + dc.w IRQ_Routine ;Not used, just points to RTI + + +;The end. diff --git a/stars_se/scrolltext.bin b/stars_se/scrolltext.bin new file mode 100644 index 0000000..ec55fd7 --- /dev/null +++ b/stars_se/scrolltext.bin @@ -0,0 +1,239 @@ +; scroll.txt + + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $50, $73, $73, $73, $73, $74 + DC.B $2e, $2e, $2e, $2e, $2e, $2e, $2e, $2e, $2e, $2e, $2e, $2e, $2e, $2e, $20, $20 + DC.B $48, $65, $79, $2c, $20, $6c, $69, $73, $74, $65, $6e, $21, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $48, $65, $61, $72, $20, $74, $68 + DC.B $61, $74, $3f, $20, $20, $49, $74, $27, $73, $20, $79, $6f, $75, $72, $20, $4e + DC.B $45, $53, $20, $63, $61, $6c, $6c, $69, $6e, $67, $20, $79, $6f, $75, $2e, $20 + DC.B $20, $20, $43, $27, $6d, $6f, $6e, $2c, $20, $74, $61, $6b, $65, $20, $69, $74 + DC.B $20, $6f, $75, $74, $20, $6f, $66, $20, $73, $74, $6f, $72, $61, $67, $65, $20 + DC.B $61, $6e, $64, $20, $74, $75, $72, $6e, $20, $69, $74, $20, $6f, $6e, $2e, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $49, $74, $27, $73, $20, $62, $65, $65, $6e + DC.B $20, $79, $65, $61, $72, $73, $3b, $20, $77, $68, $79, $20, $68, $61, $76, $65 + DC.B $20, $79, $6f, $75, $20, $67, $69, $76, $65, $6e, $20, $75, $70, $20, $6f, $6e + DC.B $20, $79, $6f, $75, $72, $20, $66, $61, $69, $74, $68, $66, $75, $6c, $20, $67 + DC.B $72, $65, $79, $20, $62, $6f, $78, $3f, $20, $20, $20, $20, $20, $4c, $6f, $61 + DC.B $64, $20, $69, $6e, $20, $73, $6f, $6d, $65, $20, $4d, $61, $72, $69, $6f, $2e + DC.B $20, $20, $53, $6f, $6d, $65, $20, $43, $6f, $6e, $74, $72, $61, $2e, $20, $20 + DC.B $53, $6f, $6d, $65, $20, $4d, $65, $67, $61, $20, $4d, $61, $6e, $21, $21, $21 + DC.B $20, $20, $44, $6f, $20, $69, $74, $21, $20, $20, $20, $20, $44, $4f, $20, $49 + DC.B $54, $21, $21, $21, $20, $20, $59, $6f, $75, $72, $20, $4e, $45, $53, $20, $69 + DC.B $73, $20, $73, $74, $69, $6c, $6c, $20, $61, $6c, $69, $76, $65, $20, $69, $6e + DC.B $20, $27, $39, $39, $21, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $57 + DC.B $65, $6c, $63, $6f, $6d, $65, $20, $74, $6f, $20, $74, $68, $65, $20, $73, $65 + DC.B $63, $6f, $6e, $64, $20, $72, $65, $6c, $65, $61, $73, $65, $20, $6f, $66, $20 + DC.B $61, $20, $43, $2d, $36, $34, $2d, $73, $74, $79, $6c, $65, $20, $69, $6e, $74 + DC.B $72, $6f, $20, $63, $61, $6c, $6c, $65, $64, $20, $22, $53, $74, $61, $72, $73 + DC.B $20, $2a, $53, $45, $2a, $22, $20, $6f, $6e, $20, $74, $68, $65, $20, $4e, $45 + DC.B $53, $2e, $20, $20, $57, $68, $61, $74, $20, $64, $6f, $65, $73, $20, $74, $68 + DC.B $65, $20, $53, $45, $20, $73, $74, $61, $6e, $64, $20, $66, $6f, $72, $3f, $20 + DC.B $20, $57, $65, $6c, $6c, $2c, $20, $79, $6f, $75, $20, $63, $6f, $75, $6c, $64 + DC.B $20, $73, $61, $79, $20, $22, $53, $70, $65, $63, $69, $61, $6c, $20, $45, $64 + DC.B $69, $74, $69, $6f, $6e, $22, $20, $6f, $72, $20, $22, $53, $65, $63, $6f, $6e + DC.B $64, $20, $45, $64, $69, $74, $69, $6f, $6e, $22, $2c, $20, $62, $75, $74, $20 + DC.B $49, $27, $6c, $6c, $20, $73, $61, $79, $20, $22, $53, $6f, $75, $6e, $64, $20 + DC.B $45, $6e, $68, $61, $6e, $63, $65, $64, $2e, $22, $20, $20, $54, $68, $61, $74 + DC.B $27, $73, $20, $62, $65, $63, $61, $75, $73, $65, $20, $74, $68, $65, $72, $65 + DC.B $27, $73, $20, $61, $20, $6e, $65, $77, $20, $73, $6f, $6e, $67, $20, $6f, $6e + DC.B $20, $74, $68, $69, $73, $20, $76, $65, $72, $73, $69, $6f, $6e, $20, $6f, $66 + DC.B $20, $53, $74, $61, $72, $73, $2e, $20, $20, $49, $74, $20, $6e, $6f, $20, $6c + DC.B $6f, $6e, $67, $65, $72, $20, $68, $61, $73, $20, $6d, $75, $73, $69, $63, $20 + DC.B $6a, $75, $73, $74, $20, $72, $69, $70, $70, $65, $64, $20, $6f, $75, $74, $20 + DC.B $6f, $66, $20, $61, $20, $67, $61, $6d, $65, $3b, $20, $69, $74, $27, $73, $20 + DC.B $61, $6e, $20, $61, $63, $74, $75, $61, $6c, $20, $2a, $63, $6f, $6d, $70, $6f + DC.B $73, $69, $74, $69, $6f, $6e, $2a, $21, $21, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $54, $68, $69, $73, $20, $64, $65, $6d, $6f, $20, $64, $6f, $65 + DC.B $73, $6e, $27, $74, $20, $64, $6f, $20, $6d, $75, $63, $68, $2c, $20, $6e, $6f + DC.B $20, $33, $2d, $44, $20, $76, $65, $63, $74, $6f, $72, $73, $20, $6f, $72, $20 + DC.B $73, $63, $61, $6c, $69, $6e, $67, $20, $6f, $72, $20, $46, $4d, $56, $2c, $20 + DC.B $6f, $72, $20, $6e, $6f, $74, $68, $69, $6e, $27, $2e, $20, $20, $42, $75, $74 + DC.B $20, $69, $74, $20, $64, $6f, $65, $73, $20, $68, $65, $61, $72, $6b, $65, $6e + DC.B $20, $62, $61, $63, $6b, $20, $74, $6f, $20, $74, $68, $6f, $73, $65, $20, $68 + DC.B $65, $61, $64, $79, $20, $38, $2d, $62, $69, $74, $20, $64, $61, $79, $73, $20 + DC.B $6f, $66, $20, $31, $30, $20, $74, $6f, $20, $31, $35, $20, $79, $65, $61, $72 + DC.B $73, $20, $61, $67, $6f, $2c, $20, $77, $68, $65, $6e, $20, $77, $65, $20, $77 + DC.B $65, $72, $65, $20, $61, $6c, $6c, $20, $6a, $75, $73, $74, $20, $6b, $69, $64 + DC.B $73, $20, $74, $72, $79, $69, $6e, $67, $20, $74, $6f, $20, $68, $69, $74, $20 + DC.B $74, $68, $65, $20, $6d, $69, $6e, $75, $73, $20, $77, $6f, $72, $6c, $64, $20 + DC.B $6f, $72, $20, $73, $61, $76, $65, $20, $74, $68, $65, $20, $70, $72, $69, $6e + DC.B $63, $65, $73, $73, $2e, $20, $20, $49, $20, $64, $69, $64, $6e, $27, $74, $20 + DC.B $65, $76, $65, $6e, $20, $6b, $6e, $6f, $77, $20, $61, $6e, $79, $74, $68, $69 + DC.B $6e, $67, $20, $61, $62, $6f, $75, $74, $20, $73, $6f, $66, $74, $77, $61, $72 + DC.B $65, $20, $6f, $72, $20, $70, $72, $6f, $67, $72, $61, $6d, $6d, $69, $6e, $67 + DC.B $20, $62, $61, $63, $6b, $20, $74, $68, $65, $6e, $2e, $20, $20, $41, $6c, $6c + DC.B $20, $49, $20, $63, $6f, $75, $6c, $64, $20, $64, $6f, $20, $77, $61, $73, $20 + DC.B $70, $75, $6e, $63, $68, $20, $73, $6f, $6d, $65, $20, $42, $41, $53, $49, $43 + DC.B $20, $70, $72, $6f, $67, $72, $61, $6d, $73, $20, $69, $6e, $74, $6f, $20, $6d + DC.B $79, $20, $54, $52, $53, $2d, $38, $30, $2e, $20, $20, $3a, $2d, $50, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $49, $27, $76, $65, $20, $63, $6f, $6d, $65, $20 + DC.B $71, $75, $69, $74, $65, $20, $61, $20, $77, $61, $79, $20, $66, $72, $6f, $6d + DC.B $20, $74, $68, $61, $74, $20, $70, $6f, $69, $6e, $74, $2c, $20, $61, $6e, $64 + DC.B $20, $49, $27, $6d, $20, $67, $6c, $61, $64, $20, $69, $74, $20, $61, $6c, $6c + DC.B $20, $68, $61, $70, $70, $65, $6e, $65, $64, $20, $74, $68, $65, $20, $77, $61 + DC.B $79, $20, $69, $74, $20, $64, $69, $64, $2e, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $54, $68, $69, $73, $20, $64, $65, $6d, $6f + DC.B $20, $77, $61, $73, $20, $63, $72, $65, $61, $74, $65, $64, $20, $61, $6e, $64 + DC.B $20, $70, $72, $6f, $67, $72, $61, $6d, $6d, $65, $64, $20, $62, $79, $20, $6d + DC.B $65, $2c, $20, $43, $68, $72, $69, $73, $20, $43, $6f, $76, $65, $6c, $6c, $2c + DC.B $20, $61, $74, $20, $74, $68, $65, $20, $65, $6e, $64, $20, $6f, $66, $20, $4a + DC.B $75, $6e, $65, $20, $31, $39, $39, $39, $20, $41, $2e, $44, $2e, $20, $20, $49 + DC.B $20, $75, $73, $65, $64, $20, $6d, $79, $20, $43, $3d, $20, $41, $6d, $69, $67 + DC.B $61, $20, $31, $32, $30, $30, $20, $66, $6f, $72, $20, $70, $72, $69, $6d, $61 + DC.B $72, $79, $20, $70, $72, $6f, $67, $72, $61, $6d, $6d, $69, $6e, $67, $2c, $20 + DC.B $61, $73, $73, $65, $6d, $62, $6c, $69, $6e, $67, $2c, $20, $61, $6e, $64, $20 + DC.B $74, $65, $73, $74, $69, $6e, $67, $3b, $20, $61, $6e, $64, $20, $49, $20, $75 + DC.B $73, $65, $64, $20, $6d, $79, $20, $4d, $61, $63, $20, $61, $6e, $64, $20, $50 + DC.B $43, $20, $66, $6f, $72, $20, $73, $65, $63, $6f, $6e, $64, $61, $72, $79, $20 + DC.B $67, $72, $61, $70, $68, $69, $63, $73, $20, $70, $72, $6f, $67, $72, $61, $6d + DC.B $6d, $69, $6e, $67, $20, $61, $6e, $64, $20, $74, $65, $73, $74, $69, $6e, $67 + DC.B $2e, $20, $20, $54, $68, $69, $73, $20, $64, $65, $6d, $6f, $20, $68, $61, $73 + DC.B $20, $62, $65, $65, $6e, $20, $74, $65, $73, $74, $65, $64, $20, $6f, $6e, $20 + DC.B $61, $20, $72, $65, $61, $6c, $20, $4e, $45, $53, $20, $75, $73, $69, $6e, $67 + DC.B $20, $61, $6e, $20, $45, $45, $50, $52, $4f, $4d, $2d, $70, $72, $6f, $67, $72 + DC.B $61, $6d, $6d, $65, $72, $20, $63, $6f, $6e, $6e, $65, $63, $74, $65, $64, $20 + DC.B $74, $6f, $20, $6d, $79, $20, $50, $43, $2c, $20, $73, $6f, $20, $72, $65, $73 + DC.B $74, $20, $61, $73, $73, $75, $72, $65, $64, $20, $74, $68, $61, $74, $20, $69 + DC.B $74, $20, $77, $6f, $72, $6b, $73, $20, $6f, $6e, $20, $74, $68, $65, $20, $72 + DC.B $65, $61, $6c, $20, $74, $68, $69, $6e, $67, $20, $28, $6c, $6f, $6f, $6b, $73 + DC.B $20, $6e, $69, $63, $65, $20, $74, $6f, $6f, $21, $29, $20, $20, $20, $57, $68 + DC.B $79, $20, $64, $69, $64, $20, $49, $20, $64, $6f, $20, $74, $68, $69, $73, $3f + DC.B $20, $20, $49, $20, $64, $6f, $6e, $27, $74, $20, $6b, $6e, $6f, $77, $21, $20 + DC.B $20, $49, $66, $20, $73, $6f, $6d, $65, $62, $6f, $64, $79, $20, $61, $73, $6b + DC.B $73, $20, $6d, $65, $20, $77, $68, $79, $20, $74, $68, $65, $20, $48, $65, $6c + DC.B $6c, $20, $49, $20, $62, $6f, $74, $68, $65, $72, $20, $77, $69, $74, $68, $20 + DC.B $74, $68, $65, $20, $63, $72, $75, $73, $74, $79, $20, $6f, $6c, $64, $20, $38 + DC.B $2d, $62, $69, $74, $20, $6d, $61, $63, $68, $69, $6e, $65, $73, $2c, $20, $49 + DC.B $20, $6a, $75, $73, $74, $20, $74, $65, $6c, $6c, $20, $74, $68, $65, $6d, $3a + DC.B $20, $20, $6d, $65, $6d, $6f, $72, $69, $65, $73, $2e, $20, $20, $49, $74, $27 + DC.B $73, $20, $6c, $69, $6b, $65, $20, $74, $68, $65, $20, $54, $56, $20, $73, $68 + DC.B $6f, $77, $73, $20, $6f, $72, $20, $6d, $75, $73, $69, $63, $20, $74, $68, $61 + DC.B $74, $20, $79, $6f, $75, $20, $67, $72, $65, $77, $20, $75, $70, $20, $77, $69 + DC.B $74, $68, $2e, $20, $20, $54, $68, $65, $79, $27, $72, $65, $20, $6a, $75, $73 + DC.B $74, $20, $74, $68, $65, $72, $65, $2c, $20, $61, $6e, $64, $20, $77, $68, $65 + DC.B $6e, $20, $79, $6f, $75, $20, $77, $61, $74, $63, $68, $20, $74, $68, $65, $6d + DC.B $20, $6f, $72, $20, $6c, $69, $73, $74, $65, $6e, $20, $74, $6f, $20, $74, $68 + DC.B $65, $6d, $2c, $20, $74, $68, $65, $79, $20, $62, $72, $69, $6e, $67, $20, $62 + DC.B $61, $63, $6b, $20, $61, $20, $66, $6c, $6f, $6f, $64, $20, $6f, $66, $20, $6d + DC.B $65, $6d, $6f, $72, $69, $65, $73, $20, $6f, $66, $20, $74, $68, $6f, $73, $65 + DC.B $20, $74, $69, $6d, $65, $73, $2e, $20, $20, $57, $68, $65, $6e, $20, $49, $20 + DC.B $70, $6c, $61, $79, $20, $61, $20, $67, $61, $6d, $65, $20, $74, $68, $61, $74 + DC.B $20, $49, $20, $75, $73, $65, $64, $20, $74, $6f, $20, $70, $6c, $61, $79, $20 + DC.B $69, $6e, $20, $6d, $79, $20, $63, $68, $69, $6c, $64, $68, $6f, $6f, $64, $2c + DC.B $20, $49, $20, $67, $61, $69, $6e, $20, $61, $20, $73, $65, $6e, $73, $65, $20 + DC.B $6f, $66, $20, $63, $6f, $6d, $70, $6c, $65, $74, $69, $6f, $6e, $20, $6b, $6e + DC.B $6f, $77, $69, $6e, $67, $20, $68, $6f, $77, $20, $61, $6e, $64, $20, $77, $68 + DC.B $79, $20, $74, $68, $65, $20, $70, $72, $6f, $67, $72, $61, $6d, $6d, $65, $72 + DC.B $73, $20, $6d, $61, $64, $65, $20, $74, $68, $65, $20, $67, $61, $6d, $65, $20 + DC.B $74, $68, $65, $20, $77, $61, $79, $20, $74, $68, $65, $79, $20, $64, $69, $64 + DC.B $2e, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $43, $72, $65, $64, $69, $74, $73, $3a, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $43, $6f, $64, $65, $20, $26, $20, $47, $66, $78, $20, $62, $79, $20 + DC.B $20, $20, $43, $68, $72, $69, $73, $20, $43, $2e, $20, $28, $43, $4d, $43, $29 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $4d + DC.B $75, $73, $69, $63, $20, $62, $79, $20, $20, $20, $22, $4d, $65, $6d, $62, $6c + DC.B $65, $72, $73, $22, $20, $28, $35, $30, $31, $30, $2e, $30, $39, $35, $31, $40 + DC.B $74, $63, $6f, $6e, $2e, $6e, $65, $74, $29, $2c, $20, $61, $6e, $64, $20, $49 + DC.B $20, $74, $68, $61, $6e, $6b, $20, $68, $69, $6d, $20, $65, $74, $65, $72, $6e + DC.B $61, $6c, $6c, $79, $20, $66, $6f, $72, $20, $74, $68, $65, $20, $67, $72, $65 + DC.B $61, $74, $20, $6d, $75, $73, $69, $63, $61, $6c, $20, $72, $65, $6e, $64, $69 + DC.B $74, $69, $6f, $6e, $20, $6f, $66, $20, $4d, $61, $72, $74, $69, $6e, $20, $47 + DC.B $61, $6c, $77, $61, $79, $27, $73, $20, $22, $43, $6f, $6d, $69, $63, $20, $42 + DC.B $61, $6b, $65, $72, $79, $22, $20, $73, $6f, $6e, $67, $2e, $20, $20, $49, $74 + DC.B $20, $73, $6f, $75, $6e, $64, $73, $20, $66, $61, $6e, $74, $61, $73, $74, $69 + DC.B $63, $21, $20, $20, $4c, $69, $73, $74, $65, $6e, $20, $74, $6f, $20, $74, $68 + DC.B $6f, $73, $65, $20, $70, $75, $6c, $73, $65, $77, $69, $64, $74, $68, $20, $73 + DC.B $77, $65, $65, $70, $73, $2e, $2e, $2e, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $49, $66, $20 + DC.B $79, $6f, $75, $20, $70, $72, $65, $66, $65, $72, $20, $74, $68, $65, $20, $76 + DC.B $65, $72, $73, $69, $6f, $6e, $20, $77, $69, $74, $68, $20, $74, $68, $65, $20 + DC.B $53, $69, $6c, $69, $75, $73, $20, $6d, $75, $73, $69, $63, $20, $69, $6e, $20 + DC.B $69, $74, $2c, $20, $49, $27, $6d, $20, $73, $75, $72, $65, $20, $79, $6f, $75 + DC.B $20, $63, $61, $6e, $20, $73, $74, $69, $6c, $6c, $20, $66, $69, $6e, $64, $20 + DC.B $69, $74, $20, $61, $72, $6f, $75, $6e, $64, $20, $74, $68, $65, $20, $4e, $65 + DC.B $74, $2e, $2e, $2e, $2e, $20, $6f, $72, $20, $65, $2d, $6d, $61, $69, $6c, $20 + DC.B $6d, $65, $2e, $2e, $2e, $2e, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $49, $66, $20, $79, $6f, $75 + DC.B $20, $6c, $69, $6b, $65, $20, $74, $68, $69, $73, $20, $64, $65, $6d, $6f, $20 + DC.B $61, $74, $20, $61, $6c, $6c, $2c, $20, $6d, $61, $6b, $65, $20, $73, $75, $72 + DC.B $65, $20, $79, $6f, $75, $20, $76, $69, $73, $69, $74, $20, $6d, $79, $20, $68 + DC.B $6f, $6d, $65, $70, $61, $67, $65, $20, $6f, $6e, $20, $74, $68, $65, $20, $57 + DC.B $65, $62, $2e, $20, $20, $49, $27, $6d, $20, $75, $73, $75, $61, $6c, $6c, $79 + DC.B $20, $61, $74, $20, $68, $74, $74, $70, $3a, $2f, $2f, $6d, $79, $70, $61, $67 + DC.B $65, $2e, $64, $69, $72, $65, $63, $74, $2e, $63, $61, $2f, $63, $2f, $63, $63 + DC.B $6f, $76, $65, $6c, $6c, $20, $62, $75, $74, $20, $69, $66, $20, $74, $68, $61 + DC.B $74, $20, $64, $6f, $65, $73, $6e, $27, $74, $20, $77, $6f, $72, $6b, $2c, $20 + DC.B $74, $72, $79, $20, $65, $2d, $6d, $61, $69, $6c, $69, $6e, $67, $20, $6d, $65 + DC.B $20, $28, $63, $63, $6f, $76, $65, $6c, $6c, $40, $64, $69, $72, $65, $63, $74 + DC.B $2e, $63, $61, $29, $2e, $20, $20, $59, $6f, $75, $27, $72, $65, $20, $73, $75 + DC.B $72, $65, $20, $74, $6f, $20, $66, $69, $6e, $64, $20, $6c, $6f, $74, $73, $20 + DC.B $6f, $66, $20, $63, $6f, $6f, $6c, $20, $6c, $69, $74, $74, $6c, $65, $20, $74 + DC.B $68, $69, $6e, $67, $73, $2e, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $4f, $6b, $2c, $20, $73, $69, $6e, $63, $65, $20, $49 + DC.B $20, $73, $74, $69, $6c, $6c, $20, $68, $61, $76, $65, $20, $70, $6c, $65, $6e + DC.B $74, $79, $20, $6f, $66, $20, $73, $70, $61, $63, $65, $2c, $20, $6c, $65, $74 + DC.B $20, $6d, $65, $20, $67, $6f, $20, $6f, $6e, $20, $77, $69, $74, $68, $20, $74 + DC.B $68, $65, $20, $73, $74, $61, $6e, $64, $61, $72, $64, $20, $67, $72, $65, $65 + DC.B $74, $73, $3a, $20, $48, $69, $2c, $20, $74, $6f, $20, $6d, $79, $20, $62, $65 + DC.B $73, $74, $20, $70, $61, $6c, $20, $53, $69, $6d, $6f, $6e, $2c, $20, $61, $6e + DC.B $64, $20, $74, $6f, $20, $48, $75, $6e, $74, $65, $72, $2c, $20, $4a, $2e, $43 + DC.B $2e, $2c, $20, $4a, $61, $69, $6d, $65, $2c, $20, $4a, $61, $6e, $65, $74, $2c + DC.B $20, $52, $69, $63, $68, $2c, $20, $54, $65, $64, $2c, $20, $46, $61, $72, $73 + DC.B $68, $61, $64, $2c, $20, $44, $65, $6e, $69, $73, $65, $2c, $20, $61, $6e, $64 + DC.B $20, $6c, $69, $74, $74, $6c, $65, $20, $45, $74, $68, $61, $6e, $2e, $20, $20 + DC.B $48, $69, $2c, $20, $74, $6f, $20, $6d, $79, $20, $66, $61, $6d, $69, $6c, $79 + DC.B $2c, $20, $61, $6c, $6c, $20, $74, $68, $65, $20, $70, $65, $6f, $70, $6c, $65 + DC.B $20, $6f, $6e, $20, $74, $68, $65, $20, $49, $6e, $74, $65, $72, $6e, $65, $74 + DC.B $20, $77, $68, $6f, $6d, $20, $49, $27, $76, $65, $20, $6d, $65, $74, $2c, $20 + DC.B $61, $6c, $6c, $20, $74, $68, $65, $20, $70, $65, $6f, $70, $6c, $65, $20, $6f + DC.B $6e, $20, $74, $68, $65, $20, $4e, $45, $53, $20, $61, $6e, $64, $20, $4e, $45 + DC.B $53, $44, $65, $76, $20, $6c, $69, $73, $74, $73, $2e, $20, $20, $20, $20, $20 + DC.B $20, $20, $49, $20, $77, $6f, $75, $6c, $64, $20, $6c, $69, $6b, $65, $20, $74 + DC.B $6f, $20, $73, $61, $79, $20, $74, $68, $61, $6e, $6b, $73, $20, $74, $6f, $20 + DC.B $6d, $79, $20, $66, $72, $69, $65, $6e, $64, $73, $20, $66, $6f, $72, $20, $6e + DC.B $6f, $74, $20, $64, $65, $73, $65, $72, $74, $69, $6e, $67, $20, $6d, $65, $2c + DC.B $20, $6e, $6f, $20, $74, $68, $61, $6e, $6b, $73, $20, $74, $6f, $20, $4e, $69 + DC.B $6e, $74, $65, $6e, $64, $6f, $20, $66, $6f, $72, $20, $64, $65, $73, $65, $72 + DC.B $74, $69, $6e, $67, $20, $74, $68, $65, $20, $4e, $45, $53, $2e, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $53, $50, $45, $43, $49, $41, $4c, $20, $74, $68, $61, $6e, $6b, $73 + DC.B $20, $61, $6e, $64, $20, $67, $72, $65, $65, $74, $69, $6e, $67, $73, $20, $67 + DC.B $6f, $20, $74, $6f, $3a, $20, $4d, $61, $72, $6b, $20, $4b, $2e, $2c, $20, $4c + DC.B $6f, $6f, $70, $79, $2c, $20, $42, $61, $6e, $61, $6e, $6d, $6f, $73, $2c, $20 + DC.B $4b, $65, $76, $69, $6e, $20, $48, $2e, $2c, $20, $4d, $61, $74, $74, $20, $43 + DC.B $2e, $2c, $20, $4d, $65, $6d, $62, $6c, $65, $72, $73, $2c, $20, $4d, $61, $72 + DC.B $61, $74, $20, $46, $2e, $2c, $20, $61, $6e, $64, $20, $74, $68, $65, $20, $72 + DC.B $65, $73, $74, $2e, $20, $20, $44, $6f, $6e, $27, $74, $20, $66, $65, $65, $6c + DC.B $20, $62, $61, $64, $20, $69, $66, $20, $79, $6f, $75, $27, $72, $65, $20, $6e + DC.B $6f, $74, $20, $69, $6e, $20, $74, $68, $69, $73, $20, $6c, $69, $73, $74, $2e + DC.B $20, $20, $4d, $61, $69, $6c, $20, $6d, $65, $20, $61, $6e, $64, $20, $49, $27 + DC.B $6c, $6c, $20, $73, $61, $79, $20, $68, $69, $20, $74, $6f, $20, $79, $6f, $75 + DC.B $20, $74, $6f, $6f, $2e, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $28, $4d, $61, $6e, $2c, $20, $64, $6f, $6e, $27 + DC.B $74, $20, $73, $63, $72, $6f, $6c, $6c, $65, $72, $73, $20, $61, $6c, $77, $61 + DC.B $79, $73, $20, $6d, $61, $6b, $65, $20, $69, $74, $20, $73, $65, $65, $6d, $20 + DC.B $74, $68, $61, $74, $20, $6f, $6e, $65, $20, $68, $61, $73, $20, $6d, $6f, $72 + DC.B $65, $20, $66, $72, $69, $65, $6e, $64, $73, $20, $74, $68, $61, $6e, $20, $6f + DC.B $6e, $65, $20, $61, $63, $74, $75, $61, $6c, $6c, $79, $20, $68, $61, $73, $3f + DC.B $29, $20, $20, $20, $3a, $2d, $29, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $54, $68 + DC.B $69, $73, $20, $74, $65, $78, $74, $20, $77, $69, $6c, $6c, $20, $77, $72, $61 + DC.B $70, $20, $73, $6f, $6f, $6e, $2e, $20, $20, $50, $72, $65, $73, $73, $20, $22 + DC.B $53, $74, $61, $72, $74, $22, $20, $74, $6f, $20, $72, $65, $73, $74, $61, $72 + DC.B $74, $20, $74, $68, $65, $20, $73, $6f, $6e, $67, $2e, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20 + DC.B $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $20, $4f + DC.B $68, $2c, $20, $61, $6e, $64, $20, $6f, $6e, $65, $20, $6d, $6f, $72, $65, $20 + DC.B $74, $68, $69, $6e, $67, $3a, $20, $20, $20, $20, $20, $20, $20, $20, $20, $54 + DC.B $68, $65, $20, $4e, $45, $53, $20, $49, $53, $20, $61, $20, $73, $74, $61, $72 + DC.B $20, $69, $6e, $20, $31, $39, $39, $39, $21, $21 diff --git a/stars_se/starsnam.asm b/stars_se/starsnam.asm new file mode 100644 index 0000000..72bbde0 --- /dev/null +++ b/stars_se/starsnam.asm @@ -0,0 +1,66 @@ +; stars.nam + + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04 + DC.B $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04 + DC.B $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05 + DC.B $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $f0, $f1, $f2, $f3, $00, $00, $00, $06, $07, $08, $09 + DC.B $0a, $0b, $0c, $0d, $0e, $0f, $00, $ec, $00, $f0, $f1, $f2, $f3, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $f4, $f5, $f6, $f7, $00, $00, $00, $16, $17, $18, $19 + DC.B $1a, $1b, $1c, $1d, $1e, $1f, $00, $00, $00, $f4, $f5, $f6, $f7, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $f8, $f9, $fa, $fb, $00, $00, $00, $11, $12, $13, $14 + DC.B $15, $00, $fc, $fd, $fe, $ff, $00, $00, $00, $f8, $f9, $fa, $fb, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $ec, $00, $00, $00, $00, $00, $00, $00, $00, $00, $80, $81, $82, $83 + DC.B $84, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $d3, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $85, $86, $87, $88, $88, $88 + DC.B $88, $89, $8a, $8b, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $8c, $8d, $8e, $88, $88, $88, $88, $88 + DC.B $88, $88, $88, $8f, $90, $91, $00, $00, $00, $00, $00, $d3, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $92, $93, $94, $95, $88, $88, $88, $88 + DC.B $88, $88, $88, $96, $97, $98, $99, $9a, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $9b, $9c, $9d, $9e, $9f, $88, $a0, $88 + DC.B $88, $a1, $a2, $a3, $a4, $a5, $a6, $a7, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $ed, $d3, $00, $a8, $a9, $aa, $ab, $ac, $9e, $ad, $ae + DC.B $af, $b0, $b1, $b2, $b3, $b4, $b5, $b6, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $b7, $b8, $b9, $ba, $bb, $ab, $bc, $bd + DC.B $be, $bf, $c0, $c1, $c2, $c3, $c4, $c5, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $c6, $c7, $c8, $c9, $ca, $cb, $cc + DC.B $cd, $ce, $c2, $cf, $d0, $d1, $d2, $d3, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $d4, $d5, $c8, $d6, $d7 + DC.B $d8, $d9, $da, $db, $dc, $dd, $00, $00, $00, $00, $00, $00, $00, $ed, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $de, $df, $e0, $e1 + DC.B $e2, $e3, $e4, $e5, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $ec, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $e6, $e7 + DC.B $e8, $e9, $ea, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $eb, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04 + DC.B $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04 + DC.B $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05 + DC.B $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04 + DC.B $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04, $04 + DC.B $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05 + DC.B $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05, $05 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $55, $55, $55, $be, $be, $76, $55, $55 + DC.B $55, $55, $55, $55, $55, $55, $55, $55, $55, $55, $55, $55, $55, $55, $55, $55 + DC.B $55, $55, $15, $55, $55, $55, $55, $55, $05, $05, $05, $05, $05, $05, $05, $05 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 diff --git a/status.txt b/status.txt new file mode 100644 index 0000000..ccda32e --- /dev/null +++ b/status.txt @@ -0,0 +1,178 @@ +^ NESICIDE ^ Nestopia v1.40 ^ Nintendulator 0.975 ^ NESICIDE Notes ^ ROM Path ^ Other Info ^ +| ???? | ???? | ???? | Not sure yet. | apu_mixer\dmc.nes | | +| ???? | ???? | ???? | Not sure yet. | apu_mixer\noise.nes | | +| ???? | ???? | ???? | Not sure yet. | apu_mixer\square.nes | | +| ???? | ???? | ???? | Not sure yet. | apu_mixer\triangle.nes | | +| PASS | PASS | | | apu_reset\4015_cleared.nes | | +| PASS | PASS | | | apu_reset\4017_timing.nes | Delay: 11 clocks | +| PASS | FAIL | | | apu_reset\4017_written.nes | | +| PASS | PASS | | | apu_reset\irq_flag_cleared.nes | | +| PASS | PASS | | | apu_reset\len_ctrs_enabled.nes | | +| PASS | PASS | | | apu_reset\works_immediately.nes | | +| PASS | PASS | | | apu_test\apu_test.nes | | +| PASS | PASS | | | apu_test\rom_singles\1-len_ctr.nes | | +| PASS | PASS | | | apu_test\rom_singles\2-len_table.nes | | +| PASS | PASS | | | apu_test\rom_singles\3-irq_flag.nes | | +| PASS | PASS | | | apu_test\rom_singles\4-jitter.nes | | +| PASS | PASS | | | apu_test\rom_singles\5-len_timing.nes | | +| PASS | PASS | | | apu_test\rom_singles\6-irq_flag_timing.nes | | +| PASS | PASS | | | apu_test\rom_singles\7-dmc_basics.nes | | +| PASS | PASS | | | apu_test\rom_singles\8-dmc_rates.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\01.len_ctr.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\02.len_table.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\03.irq_flag.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\04.clock_jitter.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\05.len_timing_mode0.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\06.len_timing_mode1.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\07.irq_flag_timing.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\08.irq_timing.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\09.reset_timing.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\10.len_halt_timing.nes | | +| PASS | PASS | | | blargg_apu_2005.07.30\11.len_reload_timing.nes | | +| FAIL | FAIL | | Errors: 2 | blargg_nes_cpu_test5\cpu.nes | | +| PASS | PASS | | | blargg_nes_cpu_test5\official.nes | | +| PASS | PASS | | | blargg_ppu_tests_2005.09.15b\palette_ram.nes | | +| PASS | FAIL | | | blargg_ppu_tests_2005.09.15b\power_up_palette.nes | | +| PASS | PASS | | | blargg_ppu_tests_2005.09.15b\sprite_ram.nes | | +| PASS | PASS | | | blargg_ppu_tests_2005.09.15b\vbl_clear_time.nes | | +| PASS | PASS | | | blargg_ppu_tests_2005.09.15b\vram_access.nes | | +| PASS | PASS | | | branch_timing_tests\1.Branch_Basics.nes | | +| PASS | PASS | | | branch_timing_tests\2.Backward_Branch.nes | | +| PASS | PASS | | | branch_timing_tests\3.Forward_Branch.nes | | +| PASS | PASS | | | cpu_dummy_reads\cpu_dummy_reads.nes | | +| FAIL | FAIL | | Fails test 2 | cpu_interrupts_v2\cpu_interrupts.nes | | +| PASS | PASS | | | cpu_interrupts_v2\rom_singles\1-cli_latency.nes | | +| FAIL | PASS | | Wrong clocking | cpu_interrupts_v2\rom_singles\2-nmi_and_brk.nes | | +| FAIL | PASS | | Wrong clocking | cpu_interrupts_v2\rom_singles\3-nmi_and_irq.nes | | +| FAIL | FAIL | | Wrong clocking | cpu_interrupts_v2\rom_singles\4-irq_and_dma.nes | | +| FAIL | FAIL | | Wrong clocking | cpu_interrupts_v2\rom_singles\5-branch_delays_irq.nes | | +| PASS | PASS | | | cpu_reset\ram_after_reset.nes | | +| PASS | PASS | | | cpu_reset\registers.nes | | +| PASS | PASS | | | cpu_timing_test6\cpu_timing_test.nes | Passes official and NOP, fails undocumented (temporarily due to CPU restructuring) | +| PASS | PASS | | | dmc_dma_during_read4\dma_2007_read.nes | CRC: 5E3DF9C4 | +| PASS | PASS | | | dmc_dma_during_read4\dma_2007_write.nes | | +| FAIL | PASS | | | dmc_dma_during_read4\dma_4016_read.nes | Too many reads stealing joypad bits. | +| FAIL | FAIL | | | dmc_dma_during_read4\double_2007_read.nes | | +| PASS | PASS | | | dmc_dma_during_read4\read_write_2007.nes | | +| ???? | ???? | ???? | Not sure yet. | dmc_tests\buffer_retained.nes | | +| ???? | ???? | ???? | Not sure yet. | dmc_tests\latency.nes | | +| ???? | ???? | ???? | Not sure yet. | dmc_tests\status.nes | | +| ???? | ???? | ???? | Not sure yet. | dmc_tests\status_irq.nes | | +| PASS | PASS | | | exram\mmc5exram.nes | | +| PASS | PASS | | | full_palette\flowing_palette.nes | | +| PASS | PASS | | | full_palette\full_palette.nes | | +| PASS | PASS | | | full_palette\full_palette_smooth.nes | | +| PASS | PASS | | | instr_misc\instr_misc.nes | | +| PASS | PASS | | | instr_misc\rom_singles\01-abs_x_wrap.nes | | +| PASS | PASS | | | instr_misc\rom_singles\02-branch_wrap.nes | | +| PASS | PASS | | | instr_misc\rom_singles\03-dummy_reads.nes | | +| PASS | PASS | | | instr_misc\rom_singles\04-dummy_reads_apu.nes | | +| PASS | PASS | | | instr_test\rom_singles\01-implied.nes | | +| FAIL | FAIL | | ARR, ATX, AXS fail | instr_test-v3\rom_singles\02-immediate.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\03-zero_page.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\04-zp_xy.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\05-absolute.nes | | +| FAIL | FAIL | | SYA, SXA fail | instr_test-v3\rom_singles\06-abs_xy.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\07-ind_x.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\08-ind_y.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\09-branches.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\10-stack.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\11-jmp_jsr.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\12-rts.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\13-rti.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\14-brk.nes | | +| PASS | PASS | | | instr_test-v3\rom_singles\15-special.nes | | +| FAIL | FAIL | | Fails on 02-immediate.nes run. | instr_test-v3\all_instrs.nes | | +| PASS | PASS | | | instr_test-v3\official_only.nes | | +| PASS | PASS | | | instr_timing\instr_timing.nes | Fails undocumented (temporarily, due to CPU restructuring) | +| PASS | PASS | | | instr_timing\rom_singles\1-instr_timing.nes | Fails undocumented (temporarily, due to CPU restructuring) | +| PASS | PASS | | | instr_timing\rom_singles\2-branch_timing.nes | | +| PASS | PASS | | | mmc3_irq_tests\1.Clocking.nes | | +| PASS | PASS | | | mmc3_irq_tests\2.Details.nes | | +| PASS | PASS | | | mmc3_irq_tests\3.A12_clocking.nes | | +| PASS | PASS | | | mmc3_irq_tests\4.Scanline_timing.nes | Note: latest version of this test fails (see mmc3_test below). | +| FAIL | FAIL | | Code $03: IRQ shouldn't occur when reloading after counter normally reaches 0 | mmc3_irq_tests\5.MMC3_rev_A.nes | | +| FAIL | PASS | | Code $02: Should reload and set IRQ every clock when reload is 0 | mmc3_irq_tests\6.MMC3_rev_B.nes | | +| PASS | PASS | | | mmc3_test\1-clocking.nes | | +| PASS | PASS | | | mmc3_test\2-details.nes | | +| PASS | PASS | | | mmc3_test\3-A12_clocking.nes | | +| FAIL | PASS | | Scanline 0 IRQ should occur later when $2000=$08 | mmc3_test\4-scanline_timing.nes | | +| FAIL | PASS | | Code $03: IRQ shouldn't occur when reloading after counter normally reaches 0 | mmc3_irq_tests\5-MMC3.nes | | +| FAIL | FAIL | | Code $02: Should reload and set IRQ every clock when reload is 0 | mmc3_irq_tests\6.MMC6.nes | | +| PASS | PASS | | | nmi_sync\demo_ntsc.nes | | +| PASS | PASS | | | nmi_sync\demo_pal.nes | | +| PASS | PASS | | | oam_read\oam_read.nes | | +| PASS | PASS | | | oam_stress\oam_stress.nes | | +| FAIL | PASS | | | other\blargg_litewall-2.nes | Strange sawtooth artifacting. | +| PASS | PASS | | | other\litewall5.nes | | +| PASS | PASS | | | other\midscanline.nes | | +| PASS | PASS | | | other\nestest.nes | | +| PASS | PASS | | | other\PCM.demo.wgraphics.nes | | +| PASS | PASS | | | other\RasterChromaLuma.NES | | +| PASS | PASS | | | other\RasterDemo.NES | | +| PASS | PASS | | | other\RasterTest1.NES | | +| PASS | PASS | | | other\RasterTest2.NES | | +| PASS | PASS | | | other\RasterTest3.NES | | +| PASS | PASS | | | other\RasterTest3a.NES | | +| PASS | PASS | | | other\RasterTest3b.NES | | +| PASS | PASS | | | other\RasterTest3c.NES | | +| PASS | PASS | | | other\RasterTest3d.NES | | +| PASS | PASS | | | other\RasterTest3e.NES | | +| FAIL | ???? | | Incorrect OAM readback. | other\read2004.nes | Tests OAM readback. | +| PASS | PASS | | | other\Retrocoders - Years behind.NES | | +| PASS | PASS | | | other\S0.NES | Tests Sprite-0 hit visually. | +| PASS | PASS | | | pal_apu_tests\01.len_ctr.nes | | +| PASS | PASS | | | pal_apu_tests\02.len_table.nes | | +| PASS | PASS | | | pal_apu_tests\03.irq_flag.nes | | +| PASS | PASS | | | pal_apu_tests\04.clock_jitter.nes | | +| PASS | PASS | | | pal_apu_tests\05.len_timing_mode0.nes | | +| PASS | PASS | | | pal_apu_tests\06.len_timing_mode1.nes | | +| PASS | PASS | | | pal_apu_tests\07.irq_flag_timing.nes | | +| PASS | PASS | | Code $02: Too soon | pal_apu_tests\08.irq_timing.nes | | +| PASS | PASS | | | pal_apu_tests\10.len_halt_timing.nes | | +| PASS | PASS | | | pal_apu_tests\11.len_reload_timing.nes | | +| PASS | FAIL | | | ppu_open_bus\ppu_open_bus.nes | | +| PASS | PASS | | | ppu_vbl_nmi\rom_singles\01-vbl_basics.nes | | +| PASS | PASS | | | ppu_vbl_nmi\rom_singles\02-vbl_set_time.nes | | +| PASS | PASS | | | ppu_vbl_nmi\rom_singles\03-vbl_clear_time.nes | | +| PASS | PASS | | | ppu_vbl_nmi\rom_singles\04-nmi_control.nes | | +| PASS | PASS | | | ppu_vbl_nmi\rom_singles\05-nmi_timing.nes | | +| PASS | PASS | | | ppu_vbl_nmi\rom_singles\06-suppression.nes | | +| PASS | FAIL | | | ppu_vbl_nmi\rom_singles\07-nmi_on_timing.nes | | +| PASS | PASS | | | ppu_vbl_nmi\rom_singles\08-nmi_off_timing.nes | | +| PASS | PASS | | | ppu_vbl_nmi\rom_singles\09-even_odd_frames.nes | | +| FAIL | PASS | | Failed #3 | ppu_vbl_nmi\rom_singles\10-even_odd_timing.nes | | +| FAIL | FAIL | | Fails on 10-even-odd-timing.nes | ppu_vbl_nmi\ppu_vbl_nmi.nes | | +| FAIL | FAIL | | Conflicts: 72/1000 | read_joy3\count_errors.nes | | +| FAIL | FAIL | | Errors: 7/1000 | read_joy3\count_errors_fast.nes | | +| PASS | PASS | | | read_joy3\test_buttons.nes | | +| PASS | PASS | | | read_joy3\thorough_test.nes | | +| PASS | PASS | | | scanline\scanline.nes | | +| PASS | PASS | | | scrolltest\scroll.nes | Strange characters instead of graphics but equivalent results on other emus. | +| PASS | FAIL | | | sprdma_and_dmc_dma\sprdma_and_dmc_dma.nes | | +| PASS | FAIL | | | sprdma_and_dmc_dma\sprdma_and_dmc_dma_512.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\01.basics.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\02.alignment.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\03.corners.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\04.flip.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\05.left_clip.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\06.right_edge.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\07.screen_bottom.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\08.double_height.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\09.timing_basics.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\10.timing_order.nes | | +| PASS | PASS | | | sprite_hit_tests_2005.10.05\11.edge_timing.nes | | +| PASS | PASS | | | sprite_overflow_tests\1.Basics.nes | | +| PASS | PASS | | | sprite_overflow_tests\2.Details.nes | | +| PASS | PASS | | | sprite_overflow_tests\3.Timing.nes | | +| PASS | PASS | | | sprite_overflow_tests\4.Obscure.nes | | +| PASS | PASS | | | sprite_overflow_tests\5.Emulator.nes | | +| PASS | PASS | | | stomper\smwstomp.nes | | +| FAIL | FAIL | | 12/14 PPU, 0/0 APU, 48/48 CPU, 0/0 I/O | stress\NEStress.nes | | +| PASS | PASS | | | vbl_nmi_timing\1.frame_basics.nes | | +| PASS | PASS | | | vbl_nmi_timing\2.vbl_timing.nes | | +| PASS | PASS | | | vbl_nmi_timing\3.even_odd_frames.nes | | +| PASS | PASS | | | vbl_nmi_timing\4.vbl_clear_timing.nes | | +| PASS | PASS | | | vbl_nmi_timing\5.nmi_suppression.nes | | +| PASS | PASS | | | vbl_nmi_timing\6.nmi_disable.nes | | +| PASS | PASS | | | vbl_nmi_timing\7.nmi_timing.nes | | diff --git a/stomper/smwnsf.dat b/stomper/smwnsf.dat new file mode 100644 index 0000000..81d500c --- /dev/null +++ b/stomper/smwnsf.dat @@ -0,0 +1,1024 @@ +.db $00,$81,$04,$81,$10,$81,$16,$81,$1C,$81,$24,$81,$40,$81,$46,$81 +.db $4A,$81,$58,$81,$5C,$81,$76,$81,$80,$81,$8A,$81,$94,$81,$9C,$81 +.db $A6,$81,$AC,$81,$C2,$81,$CD,$81,$D9,$81,$E3,$81,$ED,$81,$F7,$81 +.db $FF,$81,$03,$82,$1F,$82,$2B,$82,$3B,$82,$41,$82,$45,$82,$49,$82 +.db $4F,$82,$6F,$82,$75,$82,$7D,$82,$8D,$82,$91,$82,$00,$81,$00,$81 +.db $00,$81,$00,$81,$00,$81,$93,$82,$00,$81,$00,$81,$9D,$82,$B5,$82 +.db $BF,$82,$C9,$82,$D1,$82,$FD,$82,$1B,$83,$00,$81,$27,$83,$37,$83 +.db $3F,$83,$43,$83,$00,$81,$00,$81,$00,$81,$00,$81,$00,$81,$00,$81 +.db $4F,$83,$5F,$83,$79,$83,$81,$83,$97,$83,$A1,$83,$B3,$83,$C7,$83 +.db $0B,$84,$0F,$84,$13,$84,$25,$84,$2B,$84,$31,$84,$37,$84,$00,$81 +.db $3D,$84,$4E,$84,$5E,$84,$62,$84,$6E,$84,$72,$84,$86,$84,$B0,$84 +.db $B4,$84,$C0,$84,$00,$81,$CC,$84,$D0,$84,$DE,$84,$EE,$84,$08,$85 +.db $20,$85,$28,$85,$3E,$85,$54,$85,$76,$85,$00,$81,$00,$81,$00,$81 +.db $00,$81,$00,$81,$00,$81,$00,$81,$98,$85,$00,$81,$00,$81,$9A,$85 +.db $00,$81,$00,$81,$00,$81,$00,$81,$A0,$85,$A8,$85,$00,$81,$00,$81 +.db $00,$81,$00,$81,$00,$81,$B3,$85,$00,$81,$00,$81,$00,$81,$00,$81 +.db $00,$00,$FF,$00,$05,$0F,$02,$0C,$04,$04,$08,$02,$08,$01,$FF,$00 +.db $01,$06,$FE,$04,$FF,$FE,$01,$04,$FE,$02,$FF,$FE,$08,$00,$08,$40 +.db $FE,$80,$FF,$FE,$01,$14,$01,$0A,$01,$05,$01,$03,$0A,$00,$01,$01 +.db $01,$02,$01,$01,$01,$00,$01,$FE,$01,$FE,$01,$00,$01,$00,$FF,$F0 +.db $06,$0F,$FE,$00,$FF,$00,$FE,$80,$FF,$FE,$01,$01,$01,$03,$02,$05 +.db $03,$04,$06,$03,$FE,$02,$FF,$FE,$FE,$40,$FF,$FE,$49,$10,$42,$08 +.db $04,$04,$C8,$02,$01,$02,$02,$04,$01,$02,$02,$00,$01,$FE,$02,$FC +.db $01,$FE,$02,$00,$FF,$F0,$06,$0F,$02,$00,$03,$0F,$FE,$00,$FF,$00 +.db $01,$03,$01,$06,$01,$03,$FE,$01,$FF,$FE,$01,$02,$01,$04,$01,$02 +.db $FE,$01,$FF,$FE,$01,$00,$01,$40,$FE,$80,$FF,$FE,$02,$00,$02,$01 +.db $02,$02,$02,$01,$FF,$F8,$0A,$0F,$FE,$00,$FF,$FE,$01,$06,$11,$04 +.db $02,$01,$01,$03,$11,$02,$02,$01,$01,$02,$11,$01,$02,$01,$FE,$01 +.db $FF,$FE,$00,$01,$40,$01,$80,$01,$40,$10,$00,$FF,$F6,$12,$0F,$FE +.db $00,$01,$80,$01,$40,$FE,$00,$FF,$FE,$01,$02,$01,$04,$01,$08,$FE +.db $04,$FF,$FE,$01,$01,$01,$02,$01,$04,$FE,$02,$FF,$FE,$03,$01,$03 +.db $02,$03,$01,$03,$00,$FF,$F8,$01,$80,$01,$40,$FE,$00,$FF,$00,$FE +.db $0F,$FF,$FE,$01,$08,$01,$06,$11,$04,$01,$00,$01,$04,$01,$03,$11 +.db $02,$01,$00,$01,$02,$12,$01,$01,$00,$13,$01,$FE,$00,$FF,$FE,$01 +.db $00,$01,$40,$01,$80,$01,$40,$10,$00,$FF,$F6,$01,$08,$01,$06,$01 +.db $04,$01,$03,$01,$02,$01,$01,$0E,$00,$FF,$F2,$28,$0F,$FE,$00,$FF +.db $FE,$FE,$04,$FF,$FE,$FE,$02,$FF,$FE,$01,$80,$FE,$00,$FF,$FE,$01 +.db $0F,$01,$0E,$02,$0D,$02,$0C,$02,$0B,$03,$0A,$03,$09,$03,$08,$03 +.db $07,$04,$06,$0E,$05,$04,$04,$04,$03,$DE,$02,$05,$01,$FF,$00,$01 +.db $00,$FE,$0F,$FF,$FE,$0A,$00,$03,$01,$05,$00,$FF,$FC,$01,$04,$0F +.db $07,$0F,$06,$0F,$04,$0F,$03,$0F,$02,$0F,$01,$FF,$00,$FE,$80,$FF +.db $FE,$FF,$01,$01,$F6,$0A,$00,$03,$03,$03,$00,$FF,$FC,$02,$0B,$03 +.db $0A,$03,$09,$03,$08,$03,$07,$04,$06,$0E,$05,$04,$04,$04,$03,$DE +.db $02,$05,$01,$FF,$00,$01,$08,$01,$04,$01,$02,$FE,$01,$FF,$FE,$01 +.db $C0,$01,$80,$01,$40,$03,$00,$FF,$F8,$01,$04,$01,$08,$FE,$04,$FF +.db $FE,$01,$01,$01,$02,$01,$04,$01,$08,$01,$04,$01,$02,$02,$00,$01 +.db $01,$01,$01,$01,$02,$01,$04,$01,$02,$01,$01,$02,$00,$01,$01,$01 +.db $01,$01,$01,$01,$02,$01,$01,$01,$01,$02,$00,$FF,$00,$01,$01,$01 +.db $01,$01,$02,$01,$04,$01,$02,$01,$01,$02,$00,$01,$01,$01,$01,$01 +.db $01,$01,$02,$01,$01,$01,$01,$02,$00,$FF,$00,$01,$C0,$01,$80,$01 +.db $40,$01,$00,$01,$40,$FF,$F6,$01,$0E,$04,$0F,$01,$0C,$04,$0E,$01 +.db $0B,$03,$0C,$FE,$0A,$FF,$FE,$01,$80,$01,$40,$01,$C0,$FF,$F6,$FE +.db $80,$FF,$00,$01,$00,$01,$FE,$01,$FE,$01,$FD,$01,$FC,$FF,$F6,$02 +.db $04,$02,$02,$01,$04,$02,$02,$02,$01,$01,$02,$03,$01,$FF,$00,$01 +.db $0F,$02,$08,$02,$04,$01,$08,$02,$04,$02,$02,$01,$04,$02,$02,$02 +.db $01,$01,$02,$03,$01,$FE,$00,$FF,$FE,$03,$00,$03,$40,$04,$80,$FF +.db $FA,$01,$00,$01,$14,$01,$04,$01,$18,$01,$08,$01,$1C,$01,$10,$01 +.db $24,$01,$20,$01,$34,$FF,$EC,$01,$00,$01,$80,$01,$40,$01,$C0,$FF +.db $F6,$01,$0F,$05,$00,$05,$0E,$05,$00,$05,$0A,$05,$00,$05,$04,$FE +.db $00,$FF,$F6,$05,$0F,$05,$0C,$05,$0A,$05,$08,$0A,$04,$0A,$02,$0A +.db $01,$0A,$00,$A0,$01,$FF,$00,$05,$01,$05,$01,$05,$02,$05,$03,$05 +.db $04,$05,$05,$05,$06,$05,$07,$05,$08,$05,$09,$05,$0A,$05,$0B,$05 +.db $0C,$05,$0D,$05,$0E,$05,$0F,$05,$0F,$05,$0E,$05,$0D,$05,$0C,$05 +.db $0B,$05,$0A,$05,$09,$05,$08,$05,$07,$05,$06,$05,$05,$05,$04,$05 +.db $03,$05,$02,$05,$01,$05,$01,$A0,$01,$FF,$00,$FE,$0F,$FF,$00,$01 +.db $00,$FF,$00,$04,$F6,$04,$EC,$1E,$E2,$04,$D8,$04,$E2,$04,$EC,$04 +.db $F6,$04,$00,$FF,$F0,$01,$05,$FE,$03,$FF,$FE,$01,$80,$FE,$40,$FF +.db $FE,$03,$00,$0F,$01,$FF,$FC,$03,$01,$03,$02,$FF,$FC,$08,$23,$07 +.db $19,$06,$0F,$05,$0F,$04,$0F,$03,$0F,$02,$0F,$01,$FF,$FE,$23,$07 +.db $19,$06,$0F,$05,$0F,$04,$0F,$03,$0F,$02,$0F,$01,$FF,$FE,$FE,$0F +.db $FF,$00,$01,$0F,$02,$08,$04,$04,$08,$02,$08,$01,$FF,$00,$FE,$80 +.db $FF,$00,$01,$00,$01,$FE,$01,$FE,$01,$FE,$01,$FE,$01,$FD,$01,$FD +.db $01,$FD,$01,$FC,$FF,$F6,$02,$08,$02,$07,$02,$06,$02,$05,$02,$07 +.db $02,$06,$02,$05,$02,$04,$03,$06,$03,$05,$03,$04,$03,$03,$03,$05 +.db $03,$04,$03,$03,$03,$02,$03,$04,$03,$03,$03,$02,$03,$01,$FF,$14 +.db $FE,$80,$FF,$00,$01,$00,$01,$FE,$01,$FE,$01,$FD,$01,$FC,$FF,$F6 +.db $05,$0F,$02,$0C,$04,$04,$08,$02,$08,$01,$FF,$00,$FE,$80,$FF,$00 +.db $04,$10,$04,$0F,$04,$0E,$04,$0C,$04,$0B,$04,$0A,$FF,$00,$02,$10 +.db $02,$0F,$01,$0E,$02,$0D,$02,$08,$01,$07,$03,$06,$FF,$FA,$02,$40 +.db $02,$20,$02,$10,$02,$08,$02,$04,$02,$02,$02,$FE,$02,$FC,$02,$F8 +.db $02,$F0,$02,$E0,$02,$C0,$FF,$00,$04,$10,$04,$0F,$04,$0E,$04,$0D +.db $04,$0C,$04,$0B,$04,$0A,$04,$09,$04,$08,$04,$07,$04,$06,$FF,$F8 +.db $05,$C0,$04,$00,$03,$00,$FF,$FD,$03,$08,$03,$07,$03,$05,$03,$03 +.db $03,$02,$02,$00,$03,$00,$02,$00,$02,$00,$02,$00,$FF,$00,$40,$14 +.db $01,$14,$01,$14,$01,$14,$01,$16,$01,$18,$01,$1A,$01,$1B,$01,$1C +.db $01,$1D,$FF,$FC,$01,$50,$01,$46,$01,$3C,$01,$32,$01,$28,$01,$1E +.db $01,$14,$01,$0A,$01,$F6,$01,$EC,$01,$E2,$01,$D8,$01,$CE,$01,$C4 +.db $01,$BA,$01,$B0,$FF,$FE,$01,$B0,$01,$BA,$01,$C4,$01,$CE,$01,$D8 +.db $01,$E2,$01,$EC,$01,$F6,$01,$0A,$01,$14,$01,$1E,$01,$28,$01,$32 +.db $01,$3C,$01,$46,$01,$50,$FF,$FE,$FF,$00,$02,$01,$02,$00,$FF,$F8 +.db $04,$03,$DE,$02,$05,$01,$FF,$00,$00,$01,$40,$01,$80,$01,$40,$10 +.db $00,$FF,$F6,$00,$01,$40,$01,$80,$01,$40,$10,$00,$FF,$F6,$A5,$8F +.db $30,$02,$D0,$0A,$A5,$8E,$C5,$90,$F0,$0B,$A5,$8E,$85,$90,$20,$2F +.db $8E,$A9,$00,$85,$8F,$60,$A9,$0F,$8D,$15,$40,$A9,$00,$8D,$00,$40 +.db $8D,$04,$40,$8D,$08,$40,$8D,$0C,$40,$8D,$10,$40,$A9,$7F,$8D,$01 +.db $40,$8D,$05,$40,$A9,$00,$A0,$D5,$99,$00,$07,$88,$D0,$FA,$A9,$FF +.db $A2,$04,$CA,$9D,$4D,$07,$9D,$B1,$07,$D0,$F7,$A2,$04,$CA,$9D,$65 +.db $07,$9D,$C9,$07,$D0,$F7,$A2,$02,$CA,$9D,$5B,$07,$9D,$BF,$07,$D0 +.db $F7,$A2,$08,$CA,$9D,$01,$07,$D0,$FA,$60,$AD,$09,$07,$F0,$13,$A9 +.db $00,$8D,$15,$40,$A9,$07,$8D,$15,$40,$20,$85,$8C,$20,$E8,$86,$4C +.db $71,$86,$A9,$0F,$8D,$15,$40,$20,$85,$8C,$20,$E8,$86,$A9,$00,$8D +.db $0A,$07,$8D,$0B,$07,$8D,$0C,$07,$20,$A1,$87,$20,$25,$8B,$EE,$0A +.db $07,$EE,$0B,$07,$EE,$0C,$07,$EE,$0C,$07,$AE,$0A,$07,$E0,$04,$D0 +.db $E7,$A9,$10,$8D,$0A,$07,$A9,$64,$8D,$0B,$07,$8D,$0C,$07,$20,$A1 +.db $87,$20,$25,$8B,$EE,$0A,$07,$EE,$0B,$07,$EE,$0C,$07,$EE,$0C,$07 +.db $AE,$0A,$07,$E0,$14,$D0,$E7,$60,$A8,$C0,$01,$D0,$05,$A9,$00,$8D +.db $15,$40,$C0,$F0,$F0,$05,$C0,$F1,$F0,$36,$60,$A2,$00,$A0,$00,$20 +.db $D6,$8D,$A5,$FE,$29,$F0,$09,$30,$8D,$00,$40,$A2,$01,$A0,$02,$20 +.db $D6,$8D,$A5,$FE,$29,$F0,$09,$30,$8D,$04,$40,$A9,$00,$8D,$08,$40 +.db $A9,$30,$8D,$0C,$40,$A9,$FF,$8D,$09,$07,$A9,$0F,$8D,$15,$40,$60 +.db $A9,$00,$8D,$09,$07,$4C,$47,$86,$AD,$00,$07,$F0,$19,$A0,$00,$B9 +.db $01,$07,$30,$0D,$AA,$98,$48,$20,$07,$87,$68,$A8,$A9,$FF,$99,$01 +.db $07,$C8,$C0,$08,$D0,$E9,$60,$8A,$0A,$AA,$BD,$41,$8E,$85,$FE,$BD +.db $42,$8E,$85,$FF,$A0,$00,$B1,$FE,$8D,$0A,$07,$AA,$E0,$FF,$F0,$BF +.db $AD,$0A,$07,$30,$0A,$8D,$0B,$07,$0A,$8D,$0C,$07,$4C,$41,$87,$29 +.db $7F,$18,$69,$64,$8D,$0B,$07,$8A,$29,$7F,$0A,$18,$69,$64,$8D,$0C +.db $07,$AE,$0C,$07,$C8,$B1,$FE,$9D,$24,$07,$C8,$B1,$FE,$9D,$25,$07 +.db $C8,$98,$48,$A0,$00,$AD,$0A,$07,$10,$02,$A0,$64,$AD,$0A,$07,$29 +.db $0F,$A8,$A9,$00,$9D,$31,$07,$9D,$32,$07,$AE,$0B,$07,$A9,$00,$9D +.db $49,$07,$A9,$FF,$9D,$4D,$07,$C0,$04,$10,$21,$A9,$00,$9D,$61,$07 +.db $A9,$FF,$9D,$65,$07,$C0,$03,$10,$13,$A9,$00,$9D,$0D,$07,$C0,$02 +.db $10,$0A,$A9,$00,$9D,$59,$07,$A9,$FF,$9D,$5B,$07,$68,$A8,$4C,$16 +.db $87,$AE,$0C,$07,$BD,$24,$07,$1D,$25,$07,$F0,$33,$BD,$31,$07,$D0 +.db $2B,$BD,$32,$07,$D0,$0F,$20,$E0,$87,$AE,$0C,$07,$AC,$0B,$07,$B9 +.db $2D,$07,$9D,$32,$07,$DE,$32,$07,$AC,$0A,$07,$C0,$04,$30,$05,$A0 +.db $64,$4C,$D6,$87,$A0,$00,$B9,$2C,$07,$9D,$31,$07,$DE,$31,$07,$60 +.db $AE,$0C,$07,$BD,$24,$07,$85,$FE,$BD,$25,$07,$85,$FF,$A0,$00,$B1 +.db $FE,$10,$3F,$AA,$E0,$F0,$30,$03,$4C,$7F,$88,$29,$7F,$F0,$06,$AE +.db $0B,$07,$9D,$2D,$07,$20,$20,$8E,$4C,$E0,$87,$20,$20,$8E,$60,$AE +.db $0A,$06,$F0,$0B,$A2,$FF,$E8,$DD,$20,$88,$D0,$FA,$BD,$29,$88,$60 +.db $03,$00,$06,$09,$0C,$12,$18,$24,$30,$02,$03,$04,$06,$08,$0C,$10 +.db $18,$20,$D0,$07,$20,$20,$8E,$4C,$0A,$8A,$60,$48,$AD,$0A,$07,$29 +.db $0F,$AA,$68,$E0,$03,$F0,$1F,$E0,$04,$D0,$00,$AE,$0B,$07,$18,$7D +.db $0D,$07,$0A,$A8,$AE,$0C,$07,$B9,$C0,$8E,$9D,$39,$07,$B9,$C1,$8E +.db $9D,$3A,$07,$4C,$78,$88,$AA,$29,$10,$F0,$06,$8A,$29,$0F,$09,$80 +.db $AA,$8A,$AE,$0C,$07,$9D,$39,$07,$20,$65,$8A,$20,$20,$8E,$60,$29 +.db $0F,$0A,$A8,$20,$20,$8E,$98,$AA,$BD,$95,$88,$85,$FE,$BD,$96,$88 +.db $85,$FF,$6C,$FE,$00,$B5,$88,$CC,$88,$E6,$88,$12,$89,$3A,$89,$57 +.db $89,$7A,$89,$E0,$87,$A1,$89,$BA,$89,$D3,$89,$27,$8A,$0B,$88,$FB +.db $87,$E0,$87,$EC,$89,$AE,$0C,$07,$18,$BD,$24,$07,$69,$02,$9D,$1C +.db $07,$BD,$25,$07,$69,$00,$9D,$1D,$07,$4C,$3D,$89,$AE,$0C,$07,$BD +.db $1C,$07,$9D,$24,$07,$BD,$1D,$07,$9D,$25,$07,$A9,$00,$9D,$1C,$07 +.db $9D,$1D,$07,$4C,$E0,$87,$AE,$0C,$07,$BD,$24,$07,$85,$FE,$BD,$25 +.db $07,$85,$FF,$AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$10,$07,$20,$20,$8E +.db $AE,$0C,$07,$BD,$24,$07,$9D,$14,$07,$BD,$25,$07,$9D,$15,$07,$4C +.db $E0,$87,$AE,$0B,$07,$DE,$10,$07,$F0,$12,$AE,$0C,$07,$BD,$14,$07 +.db $9D,$24,$07,$BD,$15,$07,$9D,$25,$07,$4C,$E0,$87,$AE,$0C,$07,$A9 +.db $00,$9D,$14,$07,$9D,$15,$07,$4C,$E0,$87,$AE,$0C,$07,$BD,$24,$07 +.db $85,$FE,$BD,$25,$07,$85,$FF,$A0,$00,$B1,$FE,$9D,$24,$07,$C8,$B1 +.db $FE,$9D,$25,$07,$4C,$E0,$87,$AE,$0C,$07,$BD,$24,$07,$85,$FE,$BD +.db $25,$07,$85,$FF,$A0,$00,$B1,$FE,$AE,$0A,$07,$E0,$04,$30,$02,$A0 +.db $64,$99,$2C,$07,$20,$20,$8E,$4C,$E0,$87,$AD,$0A,$07,$29,$0F,$AA +.db $E0,$03,$10,$17,$AE,$0C,$07,$BD,$24,$07,$85,$FE,$BD,$25,$07,$85 +.db $FF,$A0,$00,$B1,$FE,$AE,$0B,$07,$9D,$0D,$07,$20,$20,$8E,$4C,$E0 +.db $87,$AD,$0A,$07,$29,$0F,$AA,$E0,$04,$30,$06,$20,$20,$8E,$4C,$E0 +.db $87,$20,$0D,$8B,$9D,$49,$07,$4C,$E0,$87,$AD,$0A,$07,$29,$0F,$AA +.db $E0,$02,$30,$06,$20,$20,$8E,$4C,$E0,$87,$20,$0D,$8B,$9D,$59,$07 +.db $4C,$E0,$87,$AD,$0A,$07,$29,$0F,$AA,$E0,$04,$30,$06,$20,$20,$8E +.db $4C,$E0,$87,$20,$0D,$8B,$9D,$61,$07,$4C,$E0,$87,$AE,$0C,$07,$A9 +.db $00,$9D,$24,$07,$9D,$25,$07,$AD,$0A,$07,$29,$0F,$0A,$AA,$18,$69 +.db $64,$A8,$A9,$FF,$9D,$42,$07,$99,$42,$07,$AC,$0B,$07,$AD,$0A,$07 +.db $29,$0F,$AA,$A9,$FF,$E0,$04,$10,$0D,$99,$4D,$07,$99,$65,$07,$E0 +.db $02,$10,$03,$99,$5B,$07,$60,$AE,$0C,$07,$BD,$24,$07,$85,$FE,$BD +.db $25,$07,$85,$FF,$20,$20,$8E,$AE,$0B,$07,$BD,$10,$07,$D0,$07,$A0 +.db $00,$B1,$FE,$9D,$10,$07,$DE,$10,$07,$D0,$17,$AE,$0C,$07,$BD,$24 +.db $07,$18,$69,$02,$9D,$24,$07,$BD,$25,$07,$69,$00,$9D,$25,$07,$4C +.db $E0,$87,$4C,$3A,$89,$AE,$0C,$07,$BD,$42,$07,$09,$80,$9D,$42,$07 +.db $20,$7A,$8A,$20,$AB,$8A,$20,$DC,$8A,$60,$AD,$0A,$07,$29,$0F,$AA +.db $E0,$04,$30,$01,$60,$AE,$0B,$07,$AC,$0C,$07,$BD,$49,$07,$0A,$AA +.db $BD,$00,$80,$99,$51,$07,$85,$FE,$BD,$01,$80,$99,$52,$07,$85,$FF +.db $AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$4D,$07,$60,$AD,$0A,$07,$29,$0F +.db $AA,$E0,$02,$30,$01,$60,$AE,$0B,$07,$AC,$0C,$07,$BD,$59,$07,$0A +.db $AA,$BD,$00,$80,$99,$5D,$07,$85,$FE,$BD,$01,$80,$99,$5E,$07,$85 +.db $FF,$AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$5B,$07,$60,$AD,$0A,$07,$29 +.db $0F,$AA,$E0,$04,$30,$01,$60,$AE,$0B,$07,$AC,$0C,$07,$BD,$61,$07 +.db $0A,$AA,$BD,$00,$80,$99,$69,$07,$85,$FE,$BD,$01,$80,$99,$6A,$07 +.db $85,$FF,$AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$65,$07,$60,$AE,$0C,$07 +.db $BD,$24,$07,$85,$FE,$BD,$25,$07,$85,$FF,$20,$20,$8E,$A0,$00,$B1 +.db $FE,$AE,$0B,$07,$60,$20,$2F,$8B,$20,$A2,$8B,$20,$15,$8C,$60,$AD +.db $0A,$07,$29,$0F,$AA,$E0,$04,$10,$68,$AE,$0B,$07,$BD,$4D,$07,$A8 +.db $C0,$FF,$F0,$5D,$AE,$0B,$07,$BD,$4D,$07,$D0,$52,$AE,$0C,$07,$A9 +.db $02,$18,$7D,$51,$07,$9D,$51,$07,$85,$FE,$A9,$00,$7D,$52,$07,$9D +.db $52,$07,$85,$FF,$AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$4D,$07,$A8,$C0 +.db $FF,$D0,$C6,$AE,$0C,$07,$A0,$01,$B1,$FE,$29,$FE,$10,$13,$18,$7D +.db $51,$07,$9D,$51,$07,$85,$FE,$B0,$03,$DE,$52,$07,$BD,$52,$07,$85 +.db $FF,$AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$4D,$07,$4C,$39,$8B,$DE,$4D +.db $07,$60,$AD,$0A,$07,$29,$0F,$AA,$E0,$02,$10,$68,$AE,$0B,$07,$BD +.db $5B,$07,$A8,$C0,$FF,$F0,$5D,$AE,$0B,$07,$BD,$5B,$07,$D0,$52,$AE +.db $0C,$07,$A9,$02,$18,$7D,$5D,$07,$9D,$5D,$07,$85,$FE,$A9,$00,$7D +.db $5E,$07,$9D,$5E,$07,$85,$FF,$AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$5B +.db $07,$A8,$C0,$FF,$D0,$C6,$AE,$0C,$07,$A0,$01,$B1,$FE,$29,$FE,$10 +.db $13,$18,$7D,$5D,$07,$9D,$5D,$07,$85,$FE,$B0,$03,$DE,$5E,$07,$BD +.db $5E,$07,$85,$FF,$AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$5B,$07,$4C,$AC +.db $8B,$DE,$5B,$07,$60,$AD,$0A,$07,$29,$0F,$AA,$E0,$04,$10,$65,$AE +.db $0B,$07,$BD,$65,$07,$A8,$C0,$FF,$F0,$5A,$BD,$65,$07,$D0,$52,$AE +.db $0C,$07,$A9,$02,$18,$7D,$69,$07,$9D,$69,$07,$85,$FE,$A9,$00,$7D +.db $6A,$07,$9D,$6A,$07,$85,$FF,$AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$65 +.db $07,$A8,$C0,$FF,$D0,$C9,$AE,$0C,$07,$A0,$01,$B1,$FE,$29,$FE,$10 +.db $13,$18,$7D,$69,$07,$9D,$69,$07,$85,$FE,$B0,$03,$DE,$6A,$07,$BD +.db $6A,$07,$85,$FF,$AE,$0B,$07,$A0,$00,$B1,$FE,$9D,$65,$07,$4C,$1F +.db $8C,$DE,$65,$07,$60,$20,$92,$8C,$20,$E4,$8C,$20,$36,$8D,$20,$85 +.db $8D,$60,$A2,$64,$A0,$64,$AD,$88,$07,$0D,$89,$07,$D0,$04,$A2,$00 +.db $A0,$00,$20,$B1,$8D,$A5,$FE,$48,$20,$D6,$8D,$68,$05,$FE,$09,$30 +.db $8D,$00,$40,$20,$FB,$8D,$A9,$00,$85,$FF,$A5,$FE,$10,$02,$C6,$FF +.db $B9,$39,$07,$18,$65,$FE,$99,$41,$07,$8D,$02,$40,$B9,$42,$07,$85 +.db $FE,$B9,$3A,$07,$65,$FF,$AA,$E4,$FE,$F0,$08,$99,$42,$07,$09,$F8 +.db $8D,$03,$40,$60,$A2,$65,$A0,$66,$AD,$8A,$07,$0D,$8B,$07,$D0,$04 +.db $A2,$01,$A0,$02,$20,$B1,$8D,$A5,$FE,$48,$20,$D6,$8D,$68,$05,$FE +.db $09,$30,$8D,$04,$40,$20,$FB,$8D,$A9,$00,$85,$FF,$A5,$FE,$10,$02 +.db $C6,$FF,$B9,$39,$07,$18,$65,$FE,$99,$41,$07,$8D,$06,$40,$B9,$42 +.db $07,$85,$FE,$B9,$3A,$07,$65,$FF,$AA,$E4,$FE,$F0,$08,$99,$42,$07 +.db $09,$F8,$8D,$07,$40,$60,$A2,$66,$A0,$68,$AD,$8C,$07,$0D,$8D,$07 +.db $D0,$04,$A2,$02,$A0,$04,$20,$B1,$8D,$A5,$FE,$F0,$02,$A9,$FF,$09 +.db $80,$8D,$08,$40,$20,$FB,$8D,$A9,$00,$85,$FF,$A5,$FE,$10,$02,$C6 +.db $FF,$B9,$39,$07,$18,$65,$FE,$99,$41,$07,$8D,$0A,$40,$B9,$42,$07 +.db $85,$FE,$B9,$3A,$07,$65,$FF,$AA,$E4,$FE,$F0,$08,$99,$42,$07,$09 +.db $F8,$8D,$0B,$40,$60,$A2,$67,$A0,$6A,$AD,$8E,$07,$0D,$8F,$07,$D0 +.db $04,$A2,$03,$A0,$06,$20,$B1,$8D,$A5,$FE,$09,$30,$8D,$0C,$40,$20 +.db $FB,$8D,$B9,$39,$07,$18,$65,$FE,$8D,$0E,$40,$A9,$F8,$8D,$0F,$40 +.db $60,$98,$48,$BD,$4D,$07,$A8,$C0,$FF,$D0,$05,$A9,$00,$4C,$D1,$8D +.db $68,$48,$A8,$B9,$51,$07,$85,$FE,$B9,$52,$07,$85,$FF,$A0,$01,$B1 +.db $FE,$85,$FE,$68,$A8,$60,$98,$48,$BD,$5B,$07,$A8,$C0,$FF,$D0,$05 +.db $A9,$00,$4C,$F6,$8D,$68,$48,$A8,$B9,$5D,$07,$85,$FE,$B9,$5E,$07 +.db $85,$FF,$A0,$01,$B1,$FE,$85,$FE,$68,$A8,$60,$98,$48,$BD,$65,$07 +.db $A8,$C0,$FF,$D0,$05,$A9,$00,$4C,$1B,$8E,$68,$48,$A8,$B9,$69,$07 +.db $85,$FE,$B9,$6A,$07,$85,$FF,$A0,$01,$B1,$FE,$85,$FE,$68,$A8,$60 +.db $AE,$0C,$07,$FE,$24,$07,$BD,$24,$07,$D0,$03,$FE,$25,$07,$60,$AA +.db $A0,$FF,$C0,$07,$F0,$0A,$C8,$B9,$01,$07,$10,$F6,$8A,$99,$01,$07 +.db $60,$A1,$8E,$BE,$8F,$D8,$8F,$E9,$8F,$FC,$8F,$0E,$90,$2A,$90,$46 +.db $90,$59,$90,$7D,$90,$9F,$90,$B5,$90,$CB,$90,$01,$91,$18,$91,$2C +.db $91,$3D,$91,$4F,$91,$61,$91,$73,$91,$85,$91,$97,$91,$A9,$91,$BB +.db $91,$CD,$91,$E8,$91,$FA,$91,$13,$92,$31,$92,$41,$92,$A1,$8E,$A1 +.db $8E,$68,$95,$A5,$95,$0E,$96,$C0,$96,$D5,$97,$C1,$98,$89,$99,$F8 +.db $9A,$F9,$9B,$50,$9F,$1F,$A0,$4A,$A1,$33,$A5,$93,$A7,$A1,$8E,$C5 +.db $A8,$00,$BF,$8E,$01,$BF,$8E,$02,$BF,$8E,$03,$BF,$8E,$04,$BF,$8E +.db $80,$BF,$8E,$81,$BF,$8E,$82,$BF,$8E,$83,$BF,$8E,$84,$BF,$8E,$FF +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$F2,$07,$80,$07,$14,$07,$AE,$06,$4E,$06,$F4,$05,$9E,$05 +.db $4D,$05,$01,$05,$B9,$04,$75,$04,$35,$04,$F9,$03,$C0,$03,$8A,$03 +.db $57,$03,$27,$03,$FA,$02,$CF,$02,$A7,$02,$81,$02,$5D,$02,$3B,$02 +.db $1B,$02,$FC,$01,$E0,$01,$C5,$01,$AC,$01,$94,$01,$7D,$01,$68,$01 +.db $53,$01,$40,$01,$2E,$01,$1D,$01,$0D,$01,$FE,$00,$F0,$00,$E2,$00 +.db $D6,$00,$CA,$00,$BE,$00,$B4,$00,$AA,$00,$A0,$00,$97,$00,$8F,$00 +.db $87,$00,$7F,$00,$78,$00,$71,$00,$6B,$00,$65,$00,$5F,$00,$5A,$00 +.db $55,$00,$50,$00,$4C,$00,$47,$00,$43,$00,$40,$00,$3C,$00,$39,$00 +.db $35,$00,$32,$00,$30,$00,$2D,$00,$2A,$00,$28,$00,$26,$00,$24,$00 +.db $22,$00,$20,$00,$1E,$00,$1C,$00,$1B,$00,$19,$00,$18,$00,$16,$00 +.db $15,$00,$14,$00,$13,$00,$12,$00,$11,$00,$10,$00,$0F,$00,$0E,$00 +.db $0D,$00,$0C,$00,$0B,$00,$0A,$00,$09,$00,$08,$00,$07,$00,$06,$00 +.db $05,$00,$04,$00,$03,$00,$02,$00,$F5,$01,$F6,$00,$F9,$38,$FA,$39 +.db $F8,$40,$82,$28,$00,$39,$00,$38,$00,$39,$FF,$F6,$00,$F9,$38,$FA +.db $39,$F8,$40,$84,$00,$82,$28,$00,$39,$00,$38,$00,$39,$FF,$80,$98 +.db $8F,$81,$AB,$8F,$FF,$F5,$01,$F6,$18,$F9,$38,$FA,$39,$F8,$40,$83 +.db $28,$00,$24,$00,$28,$00,$24,$FF,$81,$C5,$8F,$FF,$F5,$01,$F6,$00 +.db $F9,$38,$FA,$63,$F8,$11,$88,$2D,$FF,$80,$DC,$8F,$FF,$F5,$01,$F6 +.db $00,$F9,$38,$FA,$63,$F8,$11,$84,$30,$88,$3E,$FF,$82,$ED,$8F,$FF +.db $F5,$01,$F6,$09,$F9,$38,$FA,$39,$F8,$41,$82,$45,$47,$FF,$80,$00 +.db $90,$FF,$F5,$01,$F6,$07,$F9,$38,$FA,$39,$F8,$41,$83,$47,$47,$F9 +.db $38,$FA,$39,$F8,$40,$47,$47,$47,$47,$FF,$80,$12,$90,$FF,$F5,$01 +.db $F6,$0C,$F9,$38,$FA,$39,$F8,$40,$83,$34,$00,$3C,$00,$40,$00,$3C +.db $00,$3E,$00,$8C,$43,$FF,$80,$2E,$90,$FF,$F5,$01,$F6,$07,$F9,$38 +.db $FA,$39,$F8,$40,$83,$40,$86,$45,$FF,$80,$4A,$90,$FF,$F5,$01,$F6 +.db $00,$F9,$5B,$FA,$39,$F8,$11,$82,$37,$00,$37,$00,$84,$37,$82,$39 +.db $00,$39,$00,$84,$39,$82,$3B,$00,$3B,$00,$84,$3B,$FF,$82,$5D,$90 +.db $FF,$F5,$01,$F6,$18,$F9,$38,$FA,$63,$F8,$11,$83,$37,$00,$37,$00 +.db $37,$00,$39,$00,$39,$00,$39,$00,$3B,$00,$3B,$00,$3B,$00,$FF,$82 +.db $81,$90,$FF,$F5,$01,$F6,$00,$F9,$5B,$FA,$39,$F8,$11,$83,$2B,$00 +.db $2D,$00,$2F,$00,$FF,$82,$A3,$90,$FF,$F5,$01,$F6,$07,$F9,$00,$FA +.db $64,$F8,$11,$85,$1F,$00,$1F,$00,$8B,$1F,$FF,$80,$B9,$90,$83,$B9 +.db $90,$FF,$F5,$01,$F6,$07,$F9,$00,$FA,$63,$F8,$11,$8E,$2B,$F9,$00 +.db $FA,$64,$F8,$11,$24,$FF,$F6,$07,$F9,$34,$FA,$39,$F8,$41,$83,$15 +.db $8A,$00,$83,$15,$FF,$F6,$07,$F9,$5B,$FA,$39,$F8,$11,$8E,$2B,$24 +.db $FF,$80,$D2,$90,$81,$E6,$90,$83,$F5,$90,$FF,$F5,$01,$F6,$07,$F9 +.db $00,$FA,$64,$F8,$11,$AC,$2B,$FF,$80,$0B,$91,$83,$0B,$91,$FF,$F5 +.db $01,$F6,$00,$F9,$34,$FA,$39,$F8,$41,$9C,$15,$FF,$80,$1F,$91,$FF +.db $F5,$03,$F6,$01,$F9,$34,$FA,$39,$F8,$46,$98,$2D,$FF,$83,$30,$91 +.db $FF,$F5,$01,$F6,$09,$F9,$38,$FA,$39,$F8,$41,$84,$30,$31,$FF,$80 +.db $41,$91,$FF,$F5,$01,$F6,$09,$F9,$38,$FA,$39,$F8,$41,$84,$32,$33 +.db $FF,$80,$53,$91,$FF,$F5,$01,$F6,$09,$F9,$38,$FA,$39,$F8,$41,$84 +.db $34,$35,$FF,$80,$65,$91,$FF,$F5,$01,$F6,$09,$F9,$38,$FA,$39,$F8 +.db $41,$84,$35,$36,$FF,$80,$77,$91,$FF,$F5,$01,$F6,$09,$F9,$38,$FA +.db $39,$F8,$41,$84,$37,$38,$FF,$80,$89,$91,$FF,$F5,$01,$F6,$09,$F9 +.db $38,$FA,$39,$F8,$41,$84,$39,$3A,$FF,$80,$9B,$91,$FF,$F5,$01,$F6 +.db $09,$F9,$38,$FA,$39,$F8,$41,$84,$3B,$3C,$FF,$80,$AD,$91,$FF,$F5 +.db $01,$F6,$09,$F9,$38,$FA,$39,$F8,$41,$84,$3C,$3D,$FF,$80,$BF,$91 +.db $FF,$F5,$01,$F6,$09,$F9,$12,$FA,$00,$F8,$13,$88,$00,$84,$3A,$F9 +.db $38,$FA,$39,$F8,$41,$90,$45,$FF,$80,$D1,$91,$FF,$F5,$01,$F6,$0D +.db $F9,$60,$FA,$5E,$F8,$61,$8C,$18,$0C,$FF,$81,$EC,$91,$FF,$F5,$03 +.db $F6,$18,$F9,$50,$FA,$51,$F8,$52,$8A,$18,$F9,$12,$FA,$00,$F8,$11 +.db $8F,$24,$FF,$83,$FE,$91,$FF,$F5,$01,$F6,$12,$F9,$38,$FA,$39,$F8 +.db $40,$83,$47,$45,$43,$41,$40,$3E,$3C,$3B,$39,$37,$35,$34,$32,$30 +.db $FF,$80,$17,$92,$FF,$F5,$03,$F6,$01,$F9,$38,$FA,$39,$F8,$41,$45 +.db $FF,$83,$35,$92,$FF,$F5,$01,$F6,$07,$F9,$12,$FA,$00,$F8,$11,$8C +.db $2B,$2B,$2B,$1F,$2B,$2B,$2B,$1F,$B0,$2C,$A4,$2B,$8C,$1F,$F6,$13 +.db $F9,$38,$FA,$39,$F8,$40,$8C,$28,$28,$28,$1F,$28,$28,$28,$1F,$28 +.db $28,$28,$86,$28,$29,$98,$28,$8C,$26,$1F,$26,$26,$26,$1F,$26,$26 +.db $26,$1F,$26,$26,$26,$86,$26,$28,$98,$26,$8C,$24,$1F,$28,$28,$28 +.db $1F,$28,$28,$28,$1F,$28,$28,$28,$86,$26,$28,$98,$29,$8C,$2D,$1F +.db $2B,$2B,$2B,$1F,$29,$29,$29,$23,$B0,$24,$8C,$00,$00,$F6,$07,$F9 +.db $12,$FA,$00,$F8,$11,$2B,$29,$98,$28,$2B,$A4,$30,$8C,$2F,$98,$2C +.db $2D,$A4,$32,$8C,$30,$F9,$07,$FA,$05,$F8,$02,$98,$2F,$30,$32,$35 +.db $B0,$34,$8C,$00,$00,$F9,$12,$FA,$00,$F8,$11,$2B,$29,$98,$28,$2B +.db $A4,$30,$8C,$2F,$98,$2C,$2D,$A4,$32,$8C,$30,$F9,$07,$FA,$05,$F8 +.db $02,$98,$2F,$8C,$2E,$2F,$A4,$35,$8C,$2F,$B0,$30,$8C,$00,$00,$00 +.db $2B,$2D,$2D,$2D,$2F,$98,$30,$35,$F9,$12,$FA,$00,$F8,$11,$8C,$34 +.db $86,$35,$34,$8C,$32,$86,$34,$32,$A4,$30,$F9,$07,$FA,$05,$F8,$02 +.db $8C,$2B,$2D,$2D,$2D,$2F,$98,$30,$35,$F9,$12,$FA,$00,$F8,$11,$8C +.db $34,$86,$35,$34,$8C,$32,$86,$34,$32,$A4,$30,$F9,$07,$FA,$05,$F8 +.db $02,$8C,$2B,$2D,$2D,$2D,$2F,$98,$30,$35,$F9,$12,$FA,$00,$F8,$11 +.db $8C,$37,$36,$37,$32,$32,$31,$32,$2B,$B0,$2C,$2B,$8C,$00,$00,$98 +.db $18,$F4,$5E,$92,$FF,$F6,$13,$F9,$17,$FA,$16,$F8,$14,$8C,$2B,$2B +.db $2B,$1F,$2B,$2B,$2B,$1F,$B0,$2C,$A4,$2B,$8C,$00,$F9,$12,$FA,$00 +.db $F8,$11,$8C,$28,$28,$28,$1F,$28,$28,$28,$1F,$28,$28,$28,$86,$28 +.db $29,$98,$28,$8C,$26,$1F,$26,$26,$26,$1F,$26,$26,$26,$1F,$26,$26 +.db $26,$86,$26,$28,$98,$26,$8C,$24,$1F,$28,$28,$28,$1F,$28,$28,$28 +.db $1F,$28,$28,$28,$86,$26,$28,$98,$29,$8C,$2D,$1F,$2B,$2B,$2B,$1F +.db $29,$29,$29,$23,$B0,$24,$8C,$00,$00,$00,$00,$F9,$17,$FA,$16,$F8 +.db $15,$24,$28,$2B,$28,$24,$28,$2B,$28,$29,$2D,$30,$2D,$29,$2D,$30 +.db $2D,$2B,$2F,$26,$2F,$2B,$2F,$26,$2F,$24,$28,$2B,$28,$24,$28,$2B +.db $28,$24,$28,$2B,$28,$30,$28,$2B,$28,$29,$2D,$30,$2D,$35,$2D,$30 +.db $2D,$2B,$2F,$26,$2F,$2B,$2F,$26,$2F,$28,$2B,$26,$2B,$B0,$24,$F9 +.db $38,$FA,$39,$F8,$41,$83,$30,$34,$37,$3B,$3C,$40,$43,$47,$8C,$00 +.db $00,$00,$00,$00,$00,$F9,$17,$FA,$16,$F8,$14,$34,$86,$35,$34,$8C +.db $32,$86,$34,$32,$B0,$30,$F9,$38,$FA,$39,$F8,$41,$83,$30,$34,$37 +.db $3B,$3C,$40,$43,$47,$8C,$00,$00,$00,$00,$00,$00,$F9,$17,$FA,$16 +.db $F8,$14,$34,$86,$35,$34,$8C,$32,$86,$34,$32,$B0,$30,$F9,$38,$FA +.db $39,$F8,$41,$83,$30,$34,$37,$3B,$3C,$40,$43,$47,$8C,$00,$00,$00 +.db $00,$00,$00,$F9,$17,$FA,$16,$F8,$14,$37,$36,$37,$32,$32,$31,$32 +.db $2B,$B0,$2C,$F6,$13,$F9,$38,$FA,$39,$F8,$40,$8C,$2B,$2A,$30,$34 +.db $37,$00,$F9,$12,$FA,$00,$F8,$11,$98,$1F,$F4,$7C,$93,$FF,$F6,$07 +.db $F9,$07,$FA,$05,$F8,$02,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$98,$24,$8C,$00,$00,$98,$24,$8C,$00 +.db $00,$98,$24,$8C,$00,$00,$98,$1F,$8C,$00,$00,$98,$1F,$8C,$00,$00 +.db $98,$1F,$8C,$00,$00,$98,$1F,$8C,$00,$00,$98,$24,$8C,$00,$00,$98 +.db $24,$8C,$00,$00,$98,$28,$8C,$00,$00,$98,$29,$8C,$00,$00,$98,$2A +.db $8C,$00,$00,$98,$2B,$8C,$00,$00,$98,$23,$8C,$00,$00,$98,$24,$1F +.db $24,$8C,$00,$00,$B0,$24,$28,$29,$2A,$2B,$26,$28,$24,$24,$28,$29 +.db $2A,$2B,$23,$24,$8C,$00,$00,$00,$00,$98,$29,$8C,$00,$29,$98,$29 +.db $8C,$00,$00,$98,$28,$8C,$00,$00,$98,$24,$8C,$00,$00,$98,$29,$8C +.db $00,$29,$98,$29,$8C,$00,$00,$98,$28,$8C,$00,$00,$98,$24,$8C,$00 +.db $00,$98,$29,$8C,$00,$29,$98,$29,$8C,$00,$00,$98,$2B,$8C,$00,$00 +.db $98,$26,$8C,$00,$00,$98,$1F,$8C,$00,$00,$98,$1D,$8C,$00,$00,$00 +.db $00,$98,$1F,$F4,$B7,$94,$FF,$FF,$00,$45,$92,$01,$65,$93,$02,$9E +.db $94,$03,$67,$95,$04,$67,$95,$FF,$F5,$01,$F6,$11,$F9,$5B,$FA,$39 +.db $F8,$11,$D0,$26,$A8,$26,$23,$23,$94,$26,$28,$D0,$32,$FF,$F6,$11 +.db $F9,$5B,$FA,$39,$F8,$11,$85,$00,$D0,$28,$A8,$28,$26,$26,$94,$28 +.db $2D,$D0,$32,$FF,$FF,$00,$78,$95,$01,$8E,$95,$02,$A4,$95,$03,$A4 +.db $95,$04,$A4,$95,$FF,$F5,$01,$F6,$0C,$F9,$38,$FA,$39,$F8,$41,$81 +.db $43,$00,$47,$87,$00,$00,$00,$81,$00,$F6,$0C,$F9,$00,$FA,$00,$F8 +.db $53,$87,$33,$34,$33,$34,$30,$2B,$2D,$30,$2C,$2D,$28,$24,$26,$24 +.db $26,$28,$24,$00,$00,$00,$F9,$17,$FA,$16,$F8,$14,$9C,$1D,$FF,$F6 +.db $00,$F9,$12,$FA,$00,$F8,$11,$87,$00,$00,$00,$00,$8E,$18,$24,$16 +.db $22,$15,$21,$9C,$13,$87,$18,$00,$00,$00,$9C,$1D,$FF,$FF,$00,$B5 +.db $95,$01,$EF,$95,$02,$0D,$96,$03,$0D,$96,$04,$0D,$96,$FF,$F5,$01 +.db $F6,$05,$F9,$12,$FA,$00,$F8,$11,$98,$30,$30,$8C,$2D,$98,$30,$8C +.db $2D,$30,$2D,$2B,$B0,$30,$8C,$2D,$37,$39,$37,$39,$92,$37,$86,$2B +.db $35,$34,$8C,$32,$B0,$30,$8C,$00,$00,$00,$00,$FF,$F6,$05,$F9,$12 +.db $FA,$00,$F8,$11,$98,$24,$24,$23,$23,$22,$22,$21,$21,$8C,$24,$00 +.db $00,$00,$00,$1F,$21,$23,$98,$24,$1F,$B0,$18,$FF,$F6,$05,$F9,$12 +.db $FA,$00,$F8,$11,$98,$24,$24,$23,$23,$21,$21,$1F,$1F,$8C,$24,$00 +.db $00,$00,$00,$1F,$21,$23,$98,$24,$1F,$B0,$24,$FF,$F6,$00,$F9,$00 +.db $FA,$00,$F8,$53,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$86,$26,$26,$8C,$29,$86,$24,$24,$24,$24,$24,$24,$24 +.db $24,$26,$26,$26,$26,$26,$26,$26,$26,$29,$29,$8C,$29,$00,$FF,$FF +.db $00,$1E,$96,$01,$4C,$96,$02,$6C,$96,$03,$8C,$96,$04,$BF,$96,$FF +.db $F5,$01,$F6,$18,$F9,$5B,$FA,$39,$F8,$11,$8C,$00,$86,$00,$24,$2F +.db $2D,$8C,$2F,$2D,$00,$98,$2D,$8C,$00,$86,$00,$24,$30,$2D,$8C,$30 +.db $2F,$00,$98,$2F,$8C,$00,$86,$00,$24,$2F,$2D,$8C,$2F,$2D,$00,$98 +.db $2D,$8C,$30,$2D,$29,$98,$28,$86,$00,$98,$26,$86,$00,$8C,$00,$86 +.db $00,$24,$2F,$2D,$8C,$2F,$2D,$00,$98,$2D,$8C,$00,$86,$00,$24,$30 +.db $2D,$8C,$30,$2F,$00,$98,$2F,$8C,$00,$86,$00,$24,$2F,$2D,$8C,$2F +.db $2D,$00,$98,$2D,$92,$26,$86,$28,$8C,$29,$2B,$F6,$0C,$F9,$07,$FA +.db $05,$F8,$03,$86,$2B,$2D,$98,$2B,$8C,$00,$F4,$D0,$96,$FF,$F6,$00 +.db $F9,$12,$FA,$00,$F8,$11,$98,$18,$24,$15,$21,$1A,$26,$13,$1F,$18 +.db $24,$15,$21,$8C,$20,$00,$00,$00,$B0,$1F,$98,$18,$24,$15,$21,$1A +.db $26,$13,$1F,$18,$24,$8C,$15,$00,$98,$21,$8C,$00,$00,$00,$00,$00 +.db $00,$00,$00,$F4,$4E,$97,$FF,$F6,$0C,$F9,$07,$FA,$05,$F8,$03,$8C +.db $00,$00,$86,$2F,$92,$2F,$B0,$2D,$8C,$00,$00,$86,$30,$92,$30,$B0 +.db $2F,$8C,$00,$00,$86,$2F,$92,$2F,$B0,$2D,$28,$26,$8C,$00,$00,$86 +.db $2F,$92,$2F,$B0,$2D,$8C,$00,$00,$86,$30,$92,$30,$B0,$2F,$8C,$00 +.db $00,$86,$2F,$92,$2F,$B0,$2D,$8C,$00,$00,$00,$00,$00,$00,$00,$00 +.db $F4,$87,$97,$FF,$FF,$00,$D0,$96,$01,$4E,$97,$02,$D4,$97,$03,$D4 +.db $97,$04,$D4,$97,$FF,$F5,$01,$F6,$00,$F9,$12,$FA,$00,$F8,$11,$A4 +.db $18,$8C,$1F,$98,$24,$1F,$8C,$18,$18,$98,$18,$8C,$00,$00,$00,$00 +.db $A4,$1A,$8C,$21,$98,$26,$21,$8C,$1A,$1A,$98,$1A,$8C,$00,$00,$00 +.db $00,$A4,$18,$8C,$1F,$98,$24,$1F,$8C,$24,$23,$22,$21,$B0,$20,$F4 +.db $E5,$97,$FF,$F6,$18,$F9,$38,$FA,$39,$F8,$40,$92,$24,$86,$24,$8C +.db $24,$1F,$98,$21,$1F,$8C,$24,$24,$24,$F9,$0E,$FA,$0F,$F8,$03,$2B +.db $98,$2D,$2B,$F9,$38,$FA,$39,$F8,$40,$92,$26,$86,$26,$8C,$26,$21 +.db $98,$23,$21,$8C,$26,$26,$26,$F9,$0E,$FA,$0F,$F8,$03,$2D,$98,$2F +.db $2D,$F9,$38,$FA,$39,$F8,$40,$92,$24,$86,$24,$8C,$24,$1F,$98,$21 +.db $1F,$F6,$00,$F9,$12,$FA,$00,$F8,$11,$8C,$22,$21,$20,$1F,$B0,$1E +.db $F4,$23,$98,$FF,$F6,$00,$F9,$12,$FA,$00,$F8,$11,$A4,$24,$8C,$2B +.db $98,$30,$2B,$8C,$24,$24,$98,$24,$8C,$00,$00,$00,$00,$A4,$26,$8C +.db $2D,$98,$32,$2D,$8C,$26,$26,$98,$26,$8C,$00,$00,$00,$00,$A4,$24 +.db $8C,$2B,$98,$30,$2B,$8C,$27,$26,$25,$23,$B0,$22,$F4,$84,$98,$FF +.db $FF,$00,$E5,$97,$01,$23,$98,$02,$84,$98,$03,$C0,$98,$04,$C0,$98 +.db $FF,$F5,$01,$F6,$18,$F9,$07,$FA,$05,$F8,$02,$90,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$2C,$C0,$2B,$90,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$2B,$C0,$2C,$90,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$2C,$F4,$EC,$98,$FF,$F6,$01 +.db $F9,$34,$FA,$39,$F8,$41,$88,$15,$15,$15,$15,$90,$00,$15,$88,$15 +.db $15,$90,$00,$00,$00,$88,$15,$15,$15,$15,$90,$00,$15,$88,$15,$15 +.db $90,$00,$00,$00,$F4,$0E,$99,$FF,$F6,$04,$F9,$07,$FA,$05,$F8,$02 +.db $90,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $2C,$C0,$2B,$90,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$2B +.db $C0,$2C,$90,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$2C,$F4 +.db $51,$99,$FF,$F6,$01,$F9,$00,$FA,$00,$F8,$53,$88,$24,$24,$24,$24 +.db $29,$24,$24,$24,$F4,$73,$99,$FF,$FF,$00,$D1,$98,$01,$0E,$99,$02 +.db $38,$99,$03,$73,$99,$04,$88,$99,$FF,$F5,$01,$F6,$05,$F9,$12,$FA +.db $00,$F8,$11,$94,$15,$00,$9E,$00,$8A,$15,$94,$15,$00,$00,$00,$18 +.db $00,$9E,$00,$8A,$18,$94,$18,$00,$00,$00,$94,$15,$00,$9E,$00,$8A +.db $15,$94,$15,$00,$00,$00,$18,$00,$9E,$00,$8A,$18,$94,$18,$00,$00 +.db $00,$15,$00,$9E,$00,$8A,$15,$94,$15,$00,$00,$00,$18,$00,$9E,$00 +.db $8A,$18,$94,$18,$00,$00,$00,$1B,$00,$9E,$00,$8A,$1B,$94,$1B,$00 +.db $00,$00,$14,$00,$9E,$00,$8A,$14,$94,$14,$00,$00,$00,$F4,$BA,$99 +.db $FF,$F6,$1D,$F9,$5B,$FA,$39,$F8,$11,$94,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$85,$35,$32,$2D,$A8,$35 +.db $85,$00,$D0,$32,$94,$00,$85,$37,$34,$30,$A8,$37,$85,$00,$D0,$34 +.db $94,$00,$85,$35,$32,$2D,$A8,$35,$85,$00,$D0,$32,$94,$00,$85,$37 +.db $34,$30,$A8,$37,$85,$00,$D0,$34,$94,$00,$85,$33,$30,$2C,$BC,$33 +.db $85,$00,$94,$00,$00,$00,$00,$85,$32,$2F,$2B,$BC,$32,$85,$00,$94 +.db $00,$00,$00,$00,$F4,$1A,$9A,$FF,$F6,$00,$F9,$00,$FA,$00,$F8,$53 +.db $94,$2F,$8A,$24,$24,$9E,$29,$8A,$24,$2F,$29,$24,$24,$A8,$2F,$94 +.db $2F,$8A,$24,$24,$9E,$29,$8A,$24,$2F,$29,$2F,$2F,$A8,$29,$94,$2F +.db $8A,$24,$24,$9E,$29,$8A,$24,$2F,$29,$24,$24,$A8,$2F,$94,$2F,$8A +.db $24,$24,$9E,$29,$8A,$24,$2F,$29,$2F,$2F,$A8,$29,$94,$2F,$8A,$24 +.db $24,$9E,$29,$8A,$24,$2F,$29,$24,$24,$A8,$2F,$94,$2F,$8A,$24,$24 +.db $9E,$29,$8A,$24,$2F,$29,$2F,$2F,$A8,$29,$94,$2F,$8A,$24,$24,$9E +.db $29,$8A,$24,$2F,$29,$24,$24,$94,$2F,$8A,$24,$24,$94,$2F,$8A,$24 +.db $24,$9E,$29,$8A,$24,$85,$29,$29,$8A,$2F,$2F,$85,$29,$29,$8A,$2F +.db $29,$94,$29,$F4,$8E,$9A,$FF,$FF,$00,$99,$99,$01,$01,$9A,$02,$99 +.db $99,$03,$68,$9A,$04,$F7,$9A,$FF,$F5,$01,$F6,$03,$F9,$12,$FA,$00 +.db $F8,$11,$88,$2D,$2F,$90,$2D,$88,$2D,$2F,$90,$2D,$2D,$A0,$39,$90 +.db $39,$38,$2F,$2F,$C0,$2F,$90,$00,$88,$2D,$2F,$90,$2D,$88,$2D,$2F +.db $90,$2D,$2D,$A0,$39,$90,$39,$38,$2F,$2F,$C0,$2F,$90,$00,$32,$30 +.db $30,$32,$30,$30,$A0,$32,$90,$31,$2F,$2F,$31,$2F,$2F,$A0,$31,$90 +.db $32,$30,$30,$32,$30,$30,$88,$30,$90,$39,$C0,$38,$88,$00,$90,$00 +.db $00,$00,$00,$F4,$08,$9B,$FF,$F6,$03,$F9,$17,$FA,$16,$F8,$14,$90 +.db $00,$00,$00,$00,$21,$B0,$29,$90,$00,$00,$00,$00,$26,$B0,$28,$90 +.db $00,$00,$00,$00,$21,$B0,$29,$90,$00,$00,$00,$00,$26,$B0,$28,$90 +.db $26,$00,$00,$26,$00,$00,$26,$00,$25,$00,$00,$25,$00,$00,$25,$00 +.db $26,$00,$00,$26,$00,$00,$26,$00,$C0,$25,$90,$00,$00,$00,$00,$F4 +.db $67,$9B,$FF,$F6,$03,$F9,$5B,$FA,$39,$F8,$11,$A0,$2D,$34,$C0,$39 +.db $A0,$2C,$34,$90,$00,$00,$00,$00,$A0,$2D,$34,$C0,$39,$A0,$2C,$34 +.db $90,$00,$00,$00,$00,$26,$00,$00,$26,$00,$00,$26,$00,$25,$00,$00 +.db $25,$00,$00,$25,$00,$26,$00,$00,$26,$00,$00,$26,$00,$C0,$25,$90 +.db $00,$00,$00,$00,$F4,$B3,$9B,$FF,$FF,$00,$08,$9B,$01,$67,$9B,$02 +.db $B3,$9B,$03,$F8,$9B,$04,$F8,$9B,$FF,$F5,$01,$F6,$05,$F9,$12,$FA +.db $00,$F8,$11,$98,$2D,$92,$29,$86,$24,$23,$92,$24,$98,$26,$F6,$11 +.db $F9,$00,$FA,$00,$F8,$33,$92,$1C,$86,$1C,$8C,$1C,$86,$1C,$1C,$92 +.db $1D,$86,$1D,$8C,$1D,$86,$1D,$1D,$92,$1C,$86,$1C,$8C,$1C,$86,$1C +.db $1C,$8C,$1D,$A4,$1D,$F6,$05,$92,$28,$86,$28,$8C,$28,$86,$28,$28 +.db $92,$29,$86,$29,$8C,$29,$86,$29,$29,$92,$28,$86,$28,$8C,$28,$86 +.db $28,$28,$92,$26,$86,$26,$8C,$26,$86,$26,$26,$92,$2B,$86,$2B,$8C +.db $2B,$86,$2B,$2B,$92,$2D,$86,$2D,$8C,$2D,$86,$2D,$2D,$92,$28,$86 +.db $28,$8C,$26,$86,$26,$26,$8C,$24,$00,$00,$00,$92,$28,$86,$28,$8C +.db $28,$86,$28,$28,$92,$29,$86,$29,$8C,$29,$86,$29,$29,$92,$28,$86 +.db $28,$8C,$28,$86,$28,$28,$92,$26,$86,$26,$8C,$26,$86,$26,$26,$92 +.db $2B,$86,$2B,$8C,$2B,$86,$2B,$2B,$92,$2D,$86,$2D,$8C,$2D,$86,$2D +.db $2D,$92,$28,$86,$28,$8C,$26,$86,$26,$26,$8C,$24,$00,$00,$00,$92 +.db $28,$86,$29,$8C,$2B,$86,$2D,$2D,$92,$2B,$86,$28,$8C,$24,$86,$26 +.db $26,$92,$2D,$86,$2F,$8C,$24,$86,$25,$25,$92,$26,$86,$24,$8C,$2F +.db $86,$2B,$2B,$92,$29,$86,$28,$8C,$29,$86,$2D,$2D,$92,$26,$86,$24 +.db $8C,$2F,$86,$2B,$2B,$92,$24,$86,$28,$8C,$26,$86,$24,$24,$92,$2F +.db $86,$2B,$8C,$24,$00,$92,$28,$86,$28,$8C,$28,$86,$28,$28,$92,$29 +.db $86,$29,$8C,$29,$86,$29,$29,$92,$28,$86,$28,$8C,$28,$86,$28,$28 +.db $92,$29,$86,$29,$8C,$29,$86,$29,$29,$8C,$00,$00,$00,$00,$00,$00 +.db $86,$2D,$2D,$2F,$2F,$92,$30,$86,$24,$8C,$2B,$86,$2B,$2B,$8C,$24 +.db $00,$00,$00,$F9,$00,$FA,$00,$F8,$53,$24,$21,$24,$26,$92,$28,$86 +.db $28,$27,$92,$26,$8C,$24,$21,$86,$24,$24,$26,$B0,$28,$86,$00,$8C +.db $24,$21,$24,$26,$86,$28,$29,$2B,$98,$2D,$86,$00,$8C,$21,$24,$86 +.db $29,$28,$26,$B0,$24,$86,$00,$F4,$1E,$9C,$FF,$F6,$05,$F9,$17,$FA +.db $16,$F8,$14,$98,$28,$92,$24,$86,$1F,$1E,$92,$1F,$98,$21,$F9,$17 +.db $FA,$16,$F8,$14,$98,$18,$15,$1A,$13,$18,$15,$8C,$1A,$A4,$19,$8C +.db $18,$00,$1C,$00,$1D,$00,$1E,$00,$1D,$00,$1C,$00,$1A,$13,$15,$17 +.db $18,$00,$1C,$00,$1D,$00,$1E,$00,$1F,$13,$17,$1A,$18,$13,$98,$18 +.db $8C,$18,$00,$1C,$00,$1D,$00,$1E,$00,$1D,$00,$1C,$00,$1A,$13,$15 +.db $17,$18,$00,$1C,$00,$1D,$00,$1E,$00,$1F,$13,$17,$1A,$18,$13,$98 +.db $18,$8C,$10,$11,$13,$15,$13,$10,$0C,$0E,$15,$17,$18,$19,$1A,$18 +.db $17,$13,$11,$10,$11,$15,$1A,$18,$17,$13,$18,$1C,$1A,$18,$17,$13 +.db $18,$00,$18,$00,$18,$00,$17,$00,$17,$00,$15,$00,$15,$00,$14,$00 +.db $14,$00,$13,$00,$00,$00,$00,$00,$15,$17,$98,$18,$13,$A4,$18,$8C +.db $00,$10,$11,$13,$15,$13,$10,$0C,$0E,$15,$17,$18,$19,$1A,$18,$17 +.db $13,$11,$10,$11,$15,$1A,$18,$17,$13,$18,$1C,$1A,$18,$17,$13,$18 +.db $00,$F4,$9E,$9D,$FF,$F6,$11,$F9,$17,$FA,$16,$F8,$15,$8C,$00,$00 +.db $00,$00,$00,$00,$00,$00,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$28,$00,$24,$86,$00,$1F,$21,$92,$24 +.db $24,$86,$21,$8C,$1F,$24,$24,$2B,$98,$28,$92,$26,$86,$1F,$8C,$28 +.db $00,$24,$86,$00,$1F,$21,$92,$24,$24,$86,$21,$8C,$1F,$24,$86,$29 +.db $28,$8C,$26,$98,$24,$92,$00,$86,$1F,$8C,$28,$00,$24,$86,$00,$1F +.db $21,$92,$24,$24,$86,$21,$8C,$1F,$24,$24,$2B,$98,$28,$92,$26,$86 +.db $1F,$8C,$28,$00,$24,$86,$00,$1F,$21,$92,$24,$24,$86,$21,$8C,$1F +.db $24,$86,$29,$28,$8C,$26,$98,$24,$8C,$00,$00,$28,$00,$92,$24,$86 +.db $1F,$98,$28,$24,$86,$27,$24,$8C,$1F,$27,$B0,$26,$8C,$00,$28,$00 +.db $92,$24,$86,$1F,$98,$28,$24,$86,$27,$24,$8C,$1F,$B0,$2B,$8C,$00 +.db $00,$28,$00,$24,$86,$00,$1F,$21,$92,$24,$24,$86,$26,$28,$24,$8C +.db $1F,$98,$21,$A4,$24,$8C,$1F,$2B,$2D,$2B,$2D,$92,$2B,$86,$1F,$29 +.db $28,$26,$B0,$24,$86,$00,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$F4,$66,$9E,$FF,$FF +.db $00,$09,$9C,$01,$8B,$9D,$02,$55,$9E,$03,$4F,$9F,$04,$4F,$9F,$FF +.db $F5,$01,$F6,$05,$F9,$5B,$FA,$39,$F8,$11,$98,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$98,$00,$27,$A4,$24 +.db $8C,$1F,$21,$C8,$24,$8C,$00,$98,$00,$1F,$8C,$24,$A4,$2B,$B0,$27 +.db $98,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$27,$A4,$24,$8C,$1F,$21,$C8,$24,$8C,$00,$98,$00,$1F,$8C +.db $24,$A4,$2B,$B0,$27,$98,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$27,$A4,$24,$8C,$1F,$98,$27,$C8,$24 +.db $8C,$26,$23,$1F,$98,$27,$E0,$26,$A4,$00,$98,$00,$27,$A4,$24,$8C +.db $1F,$98,$27,$C8,$24,$8C,$26,$23,$1F,$98,$27,$E0,$26,$A4,$00,$F4 +.db $7B,$9F,$FF,$F6,$05,$F9,$38,$FA,$39,$F8,$40,$86,$21,$00,$24,$00 +.db $22,$00,$26,$00,$21,$00,$24,$00,$1F,$00,$20,$00,$F4,$F3,$9F,$FF +.db $F6,$01,$F9,$00,$FA,$00,$F8,$53,$8C,$2F,$F4,$10,$A0,$FF,$FF,$00 +.db $60,$9F,$01,$1E,$A0,$02,$F3,$9F,$03,$10,$A0,$04,$1E,$A0,$FF,$F5 +.db $01,$F6,$1A,$F9,$00,$FA,$00,$F8,$33,$F0,$D1,$A0,$F0,$D1,$A0,$F0 +.db $D1,$A0,$F0,$D1,$A0,$F0,$D1,$A0,$F0,$D1,$A0,$F0,$D1,$A0,$F0,$D1 +.db $A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0 +.db $F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F6,$18,$F0,$D1,$A0,$F0,$D1 +.db $A0,$F0,$D1,$A0,$F0,$D1,$A0,$F0,$D1,$A0,$F0,$D1,$A0,$F0,$D1,$A0 +.db $F0,$D1,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0 +.db $DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F6,$16,$F0,$D1,$A0 +.db $F0,$D1,$A0,$F0,$D1,$A0,$F0,$D1,$A0,$F0,$D1,$A0,$F0,$D1,$A0,$F0 +.db $D1,$A0,$F0,$D1,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC +.db $A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F0,$DC,$A0,$F4,$2F,$A0 +.db $FF,$8A,$2D,$2F,$2B,$2D,$2D,$2F,$2B,$2D,$F1,$FF,$8A,$2D,$2F,$2B +.db $2F,$2D,$2F,$2B,$2F,$F1,$FF,$F6,$0E,$F0,$03,$A1,$F0,$2C,$A1,$F6 +.db $0C,$F0,$03,$A1,$F0,$2C,$A1,$F6,$0A,$F0,$03,$A1,$F0,$2C,$A1,$F4 +.db $E7,$A0,$FF,$F9,$00,$FA,$62,$F8,$02,$94,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$F1,$FF,$F9,$12,$FA,$00 +.db $F8,$11,$D0,$18,$A8,$15,$10,$11,$D0,$15,$94,$00,$00,$A8,$10,$15 +.db $1C,$D0,$18,$17,$94,$00,$00,$F1,$FF,$FF,$00,$2F,$A0,$01,$E7,$A0 +.db $02,$E7,$A0,$03,$49,$A1,$04,$49,$A1,$FF,$F5,$01,$F6,$03,$F9,$00 +.db $FA,$00,$F8,$33,$F0,$1E,$A2,$F0,$1E,$A2,$F0,$1E,$A2,$F0,$1E,$A2 +.db $86,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$F9,$12,$FA +.db $00,$F8,$11,$98,$26,$B0,$28,$98,$00,$26,$B0,$28,$98,$00,$00,$26 +.db $28,$29,$27,$E0,$28,$98,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$F9,$12,$FA,$00,$F8,$11,$98,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$B0,$30,$98,$2D,$28,$27,$C8 +.db $2D,$98,$00,$28,$2D,$34,$B0,$30,$2F,$98,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$B0,$30,$98,$2D,$28,$27 +.db $C8,$2D,$98,$00,$28,$2D,$34,$B0,$30,$2F,$98,$00,$2D,$34,$39,$B0 +.db $35,$34,$98,$00,$28,$32,$34,$B0,$32,$30,$98,$00,$30,$2F,$2D,$B0 +.db $2F,$2A,$98,$00,$2F,$2D,$2F,$B0,$2D,$2C,$F4,$B2,$A1,$FF,$86,$2D +.db $2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2D,$2F +.db $2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$30 +.db $30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$30,$2F +.db $2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$2F,$F1 +.db $FF,$F6,$03,$F9,$12,$FA,$00,$F8,$11,$98,$00,$00,$00,$0E,$E0,$10 +.db $98,$00,$00,$00,$0E,$E0,$10,$B0,$1D,$98,$1A,$15,$17,$C8,$1A,$98 +.db $00,$15,$1A,$21,$B0,$1D,$1C,$98,$00,$00,$00,$0E,$E0,$10,$98,$00 +.db $00,$00,$0E,$E0,$10,$B0,$1D,$98,$1A,$15,$17,$C8,$1A,$98,$00,$15 +.db $1A,$21,$B0,$1D,$1C,$98,$00,$00,$00,$0E,$10,$F9,$34,$FA,$39,$F8 +.db $41,$15,$15,$F9,$17,$FA,$16,$F8,$14,$0E,$10,$F9,$34,$FA,$39,$F8 +.db $41,$15,$15,$F9,$12,$FA,$00,$F8,$11,$00,$0E,$10,$11,$0F,$C8,$10 +.db $F6,$0F,$F9,$07,$FA,$05,$F8,$02,$E0,$40,$98,$00,$F9,$12,$FA,$00 +.db $F8,$11,$8C,$3E,$3B,$37,$35,$F6,$0D,$86,$3E,$3B,$37,$35,$F6,$0B +.db $3E,$3B,$37,$35,$F6,$09,$3E,$3B,$37,$35,$F6,$07,$3E,$3B,$37,$35 +.db $F6,$05,$3E,$3B,$37,$35,$F6,$03,$3E,$3B,$37,$35,$F6,$0F,$F0,$9C +.db $A3,$F6,$15,$F0,$9C,$A3,$F6,$14,$F0,$9C,$A3,$F6,$16,$F0,$9C,$A3 +.db $F6,$0F,$F0,$9C,$A3,$F6,$15,$F0,$9C,$A3,$F6,$14,$F0,$9C,$A3,$F6 +.db $16,$F0,$9C,$A3,$F6,$0F,$F0,$9C,$A3,$F6,$15,$F0,$9C,$A3,$F6,$14 +.db $F0,$9C,$A3,$F6,$16,$F0,$9C,$A3,$F6,$0F,$F0,$9C,$A3,$F6,$15,$F0 +.db $9C,$A3,$F6,$14,$F0,$9C,$A3,$F6,$16,$F0,$9C,$A3,$F6,$0F,$F0,$9C +.db $A3,$F6,$15,$F0,$9C,$A3,$F6,$14,$F0,$9C,$A3,$F6,$16,$F0,$9C,$A3 +.db $F6,$17,$F0,$9C,$A3,$F6,$1A,$F0,$9C,$A3,$F6,$16,$F0,$9C,$A3,$F6 +.db $1B,$F0,$9C,$A3,$F6,$17,$F0,$9C,$A3,$F6,$16,$F0,$9C,$A3,$F6,$11 +.db $F0,$9C,$A3,$F6,$16,$F0,$9C,$A3,$F4,$20,$A3,$FF,$F9,$00,$FA,$00 +.db $F8,$33,$86,$28,$2D,$28,$2D,$30,$2D,$30,$2D,$2F,$2B,$21,$28,$24 +.db $1C,$23,$20,$F1,$FF,$F6,$1B,$F9,$07,$FA,$05,$F8,$02,$98,$00,$00 +.db $00,$0E,$B0,$10,$98,$00,$00,$00,$00,$00,$0E,$B0,$10,$98,$00,$00 +.db $00,$00,$00,$0E,$B0,$10,$98,$00,$00,$00,$00,$00,$0E,$B0,$10,$98 +.db $00,$00,$00,$00,$00,$0E,$B0,$10,$98,$00,$00,$00,$00,$00,$0E,$B0 +.db $10,$98,$00,$00,$00,$00,$00,$0E,$B0,$10,$98,$00,$00,$00,$00,$00 +.db $0E,$B0,$10,$98,$00,$00,$00,$00,$00,$00,$00,$0E,$10,$00,$00,$0E +.db $10,$00,$0E,$10,$11,$0E,$E0,$10,$98,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$F6,$0F,$F9,$38,$FA,$39,$F8,$40,$B0,$15,$15 +.db $1B,$1B,$1A,$1A,$1C,$1C,$98,$15,$15,$15,$15,$1B,$1B,$1B,$1B,$1A +.db $1A,$1A,$1A,$1C,$1C,$1C,$1C,$F6,$0F,$F0,$C3,$A4,$F6,$15,$F0,$C3 +.db $A4,$F6,$14,$F0,$C3,$A4,$F6,$16,$F0,$C3,$A4,$F6,$0F,$F0,$C3,$A4 +.db $F6,$15,$F0,$C3,$A4,$F6,$14,$F0,$C3,$A4,$F6,$16,$F0,$C3,$A4,$F6 +.db $0F,$F0,$C3,$A4,$F6,$15,$F0,$C3,$A4,$F6,$14,$F0,$C3,$A4,$F6,$16 +.db $F0,$C3,$A4,$F6,$17,$F0,$C3,$A4,$F6,$1A,$F0,$C3,$A4,$F6,$16,$F0 +.db $C3,$A4,$F6,$1B,$F0,$C3,$A4,$F6,$17,$F0,$C3,$A4,$F6,$16,$F0,$C3 +.db $A4,$F6,$11,$F0,$C3,$A4,$F6,$16,$F0,$C3,$A4,$F6,$0F,$F0,$C3,$A4 +.db $F6,$15,$F0,$C3,$A4,$F6,$14,$F0,$C3,$A4,$F6,$16,$F0,$C3,$A4,$F4 +.db $47,$A4,$FF,$86,$15,$00,$15,$00,$15,$00,$15,$00,$15,$00,$15,$00 +.db $15,$00,$15,$00,$F1,$FF,$F6,$01,$F9,$00,$FA,$00,$F8,$53,$98,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$2F,$2F,$00,$00,$2F,$2F,$00,$2F,$2F,$2F,$2F,$E0 +.db $2F,$FF,$FF,$00,$5A,$A1,$01,$61,$A2,$02,$B5,$A3,$03,$D6,$A4,$04 +.db $32,$A5,$FF,$F5,$01,$F6,$05,$F9,$07,$FA,$05,$F8,$02,$AA,$2D,$9C +.db $29,$8E,$24,$9C,$23,$8E,$24,$AA,$26,$8E,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$F6,$11,$F9,$07,$FA,$05,$F8,$02,$AA,$28,$9C,$24,$8E,$1F +.db $9C,$21,$8E,$24,$AA,$24,$9C,$1F,$8E,$24,$9C,$24,$8E,$2B,$AA,$28 +.db $26,$28,$9C,$24,$8E,$1F,$9C,$21,$8E,$24,$AA,$24,$9C,$1F,$8E,$24 +.db $29,$28,$26,$AA,$24,$8E,$00,$00,$00,$AA,$28,$9C,$24,$8E,$1F,$9C +.db $21,$8E,$24,$AA,$24,$9C,$1F,$8E,$24,$9C,$24,$8E,$2B,$AA,$28,$26 +.db $28,$9C,$24,$8E,$1F,$9C,$21,$8E,$24,$AA,$24,$9C,$1F,$8E,$24,$29 +.db $28,$26,$AA,$24,$8E,$00,$00,$00,$AA,$28,$9C,$24,$8E,$1F,$AA,$28 +.db $24,$27,$9C,$24,$8E,$27,$AA,$26,$8E,$00,$00,$00,$AA,$28,$9C,$24 +.db $8E,$1F,$AA,$28,$24,$27,$9C,$24,$8E,$1F,$AA,$2B,$8E,$00,$00,$00 +.db $AA,$28,$9C,$24,$8E,$1F,$9C,$21,$8E,$24,$AA,$24,$9C,$1F,$8E,$24 +.db $29,$28,$26,$AA,$24,$8E,$00,$00,$00,$F4,$59,$A5,$FF,$F6,$05,$F9 +.db $07,$FA,$05,$F8,$02,$AA,$28,$9C,$24,$8E,$1F,$9C,$1E,$8E,$1F,$AA +.db $21,$F9,$17,$FA,$16,$F8,$15,$8E,$00,$24,$24,$00,$21,$21,$00,$26 +.db $26,$1F,$21,$23,$00,$24,$24,$00,$21,$21,$00,$26,$26,$1F,$21,$23 +.db $00,$24,$24,$00,$28,$28,$00,$29,$29,$00,$2A,$2A,$00,$29,$29,$00 +.db $28,$28,$00,$26,$26,$00,$00,$00,$00,$24,$24,$00,$28,$28,$00,$29 +.db $29,$00,$2A,$2A,$00,$29,$29,$00,$28,$28,$00,$00,$00,$00,$00,$00 +.db $F6,$1D,$F9,$5B,$FA,$39,$F8,$11,$AA,$28,$9C,$24,$8E,$1F,$9C,$21 +.db $8E,$24,$AA,$24,$9C,$1F,$8E,$24,$9C,$24,$8E,$2B,$AA,$28,$26,$28 +.db $9C,$24,$8E,$1F,$9C,$21,$8E,$24,$AA,$24,$9C,$1F,$8E,$24,$29,$28 +.db $26,$AA,$24,$8E,$00,$00,$00,$F6,$05,$F9,$17,$FA,$16,$F8,$15,$00 +.db $29,$29,$00,$29,$29,$00,$28,$28,$00,$28,$28,$00,$27,$27,$00,$27 +.db $27,$00,$26,$26,$00,$00,$00,$00,$29,$29,$00,$29,$29,$00,$28,$28 +.db $00,$28,$28,$00,$27,$27,$00,$27,$27,$00,$26,$26,$00,$00,$00,$00 +.db $24,$24,$00,$28,$28,$00,$29,$29,$00,$2A,$2A,$00,$29,$29,$00,$28 +.db $28,$00,$00,$00,$00,$00,$00,$F4,$31,$A6,$FF,$F6,$05,$F9,$5B,$FA +.db $39,$F8,$11,$8E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $8E,$24,$00,$00,$21,$00,$00,$26,$00,$00,$1F,$21,$23,$24,$00,$00 +.db $21,$00,$00,$26,$00,$00,$1F,$21,$23,$AA,$24,$28,$29,$2A,$29,$28 +.db $26,$8E,$1F,$21,$23,$AA,$24,$28,$29,$2A,$2B,$1F,$8E,$24,$2B,$28 +.db $AA,$24,$24,$28,$29,$2A,$29,$28,$26,$8E,$1F,$21,$23,$AA,$24,$28 +.db $29,$2A,$2B,$1F,$8E,$24,$2B,$28,$AA,$24,$29,$29,$28,$28,$27,$27 +.db $26,$8E,$1F,$21,$23,$AA,$29,$29,$28,$28,$27,$27,$26,$8E,$1F,$21 +.db $23,$AA,$24,$28,$29,$2A,$2B,$1F,$8E,$24,$2B,$28,$AA,$24,$F4,$20 +.db $A7,$FF,$FF,$00,$43,$A5,$01,$1D,$A6,$02,$0B,$A7,$03,$92,$A7,$04 +.db $92,$A7,$FF,$F5,$02,$F6,$0C,$F9,$5B,$FA,$39,$F8,$11,$A4,$24,$8C +.db $24,$86,$28,$8C,$28,$86,$26,$8C,$24,$23,$21,$98,$21,$86,$21,$23 +.db $A4,$1F,$86,$21,$23,$A4,$24,$8C,$24,$86,$28,$8C,$28,$86,$26,$8C +.db $24,$23,$21,$98,$21,$86,$21,$23,$B0,$1F,$98,$28,$28,$86,$2B,$8C +.db $2B,$86,$29,$8C,$28,$26,$B0,$24,$29,$A4,$24,$8C,$24,$86,$28,$8C +.db $28,$86,$26,$8C,$24,$23,$21,$98,$21,$86,$21,$23,$A4,$1F,$86,$21 +.db $23,$A4,$24,$8C,$24,$86,$28,$8C,$28,$86,$26,$8C,$24,$23,$21,$98 +.db $21,$86,$21,$23,$B0,$1F,$98,$28,$28,$86,$2B,$8C,$2B,$86,$29,$8C +.db $28,$26,$B0,$24,$A4,$23,$86,$23,$23,$B0,$24,$8C,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$F4,$A3,$A7,$FF,$F6,$00,$F9,$17 +.db $FA,$16,$F8,$14,$8C,$00,$86,$24,$00,$21,$8C,$1F,$86,$00,$89,$20 +.db $83,$21,$86,$22,$98,$23,$86,$00,$8C,$00,$86,$26,$00,$28,$8C,$29 +.db $86,$00,$23,$24,$26,$8C,$29,$86,$25,$8C,$26,$F4,$3C,$A8,$FF,$F6 +.db $0C,$F9,$38,$FA,$39,$F8,$41,$8C,$18,$18,$1F,$1C,$1C,$23,$1F,$1C +.db $1D,$24,$29,$26,$2B,$1F,$26,$23,$F4,$6F,$A8,$FF,$F6,$01,$F9,$00 +.db $FA,$00,$F8,$53,$8C,$2F,$86,$24,$24,$8C,$2F,$86,$24,$24,$8C,$2F +.db $86,$24,$24,$8C,$2F,$86,$24,$24,$8C,$2F,$86,$24,$24,$8C,$2F,$86 +.db $24,$24,$83,$2F,$24,$86,$2F,$2F,$83,$24,$24,$86,$2F,$24,$8C,$24 +.db $F4,$8C,$A8,$FF,$FF,$00,$A3,$A7,$01,$3C,$A8,$02,$6F,$A8,$03,$8C +.db $A8,$04,$C4,$A8,$FF,$60,$A9,$02,$AC,$38,$06,$F0,$0F,$C0,$D0,$90 +.db $06,$C0,$F6,$B0,$07,$A9,$01,$25,$06,$F0,$01,$60,$A5,$13,$C9,$E0 +.db $B0,$2D,$A0,$04,$A6,$1E,$AD,$1F,$06,$C9,$01,$90,$0E,$A5,$14,$D0 +.db $04,$A5,$15,$F0,$06,$BD,$AF,$AB,$4C,$0E,$A9,$BD,$9E,$AB,$85,$34 +.db $30,$06,$8C,$24,$06,$20,$4A,$A1,$AC,$24,$06,$C0,$04,$F0,$01,$60 +.db $A5,$34,$29,$0F,$D0,$03,$4C,$E4,$AA,$C9,$01,$D0,$03,$4C,$0A,$AB +.db $C9,$02,$D0,$03,$4C,$3E,$AB,$C9,$03,$D0,$03,$4C,$50,$AB,$C9,$04 +.db $D0,$03,$4C,$7E,$AB,$AC,$27,$06,$B9,$2E,$AB,$4C,$10,$AB,$AE,$1F +.db $06,$F0,$03,$4C,$1D,$AA,$48,$AD,$24,$06,$0A,$A8,$B9,$0F,$AC,$85 +.db $34,$B9,$10,$AC,$85,$35,$68,$48,$0A,$A8,$B1,$34,$85,$32,$C8,$B1 +.db $34,$85,$33,$A9,$00,$85,$2E,$68,$A8,$A5,$13,$38,$F9,$D9,$AB,$A6 +.db $1E,$18,$7D,$C0,$AB,$AE,$24,$06,$D0,$03,$38,$E9,$03,$85,$2B,$A5 +.db $19,$45,$1A,$29,$40,$D0,$21,$A5,$12,$18,$79,$EB,$AB,$85,$28,$A5 +.db $2E,$18,$69,$04,$A8,$A6,$3C,$B1,$32,$C9,$FF,$F0,$5C,$29,$3F,$9D +.db $01,$02,$48,$A9,$40,$4C,$D2,$A9,$A5,$12,$18,$79,$F4,$AB,$85,$28 +.db $A4,$2E,$A6,$3C,$B1,$32,$C9,$FF,$F0,$3F,$29,$3F,$9D,$01,$02,$48 +.db $A9,$00,$85,$38,$AD,$C7,$03,$0A,$A8,$B9,$28,$CF,$85,$34,$B9,$29 +.db $CF,$85,$35,$68,$A8,$B1,$34,$05,$38,$0D,$E0,$06,$9D,$02,$02,$A4 +.db $2E,$A5,$28,$18,$79,$D1,$AB,$9D,$03,$02,$A5,$2B,$18,$79,$D5,$AB +.db $9D,$00,$02,$8A,$18,$69,$04,$85,$3C,$E6,$2E,$A5,$2E,$C9,$04,$B0 +.db $0B,$A5,$19,$45,$1A,$29,$40,$D0,$A7,$4C,$9F,$A9,$60,$48,$AD,$24 +.db $06,$0A,$A8,$B9,$0F,$AC,$85,$34,$B9,$10,$AC,$85,$35,$68,$48,$0A +.db $A8,$B1,$34,$85,$32,$C8,$B1,$34,$85,$33,$A9,$00,$85,$2E,$68,$A8 +.db $A5,$13,$38,$F9,$E2,$AB,$A6,$1E,$18,$7D,$C0,$AB,$AE,$24,$06,$D0 +.db $03,$38,$E9,$03,$85,$2B,$A5,$19,$45,$1A,$29,$40,$D0,$21,$A5,$12 +.db $18,$79,$FD,$AB,$85,$28,$A5,$2E,$18,$69,$04,$A8,$A6,$3C,$B1,$32 +.db $C9,$FF,$F0,$5C,$29,$3F,$9D,$01,$02,$48,$A9,$40,$4C,$99,$AA,$A5 +.db $12,$18,$79,$06,$AC,$85,$28,$A4,$2E,$A6,$3C,$B1,$32,$C9,$FF,$F0 +.db $3F,$29,$3F,$9D,$01,$02,$48,$A9,$00,$85,$38,$AD,$C7,$03,$0A,$A8 +.db $B9,$28,$CF,$85,$34,$B9,$29,$CF,$85,$35,$68,$A8,$B1,$34,$05,$38 +.db $0D,$E0,$06,$9D,$02,$02,$A4,$2E,$A5,$28,$18,$79,$D1,$AB,$9D,$03 +.db $02,$A5,$2B,$18,$79,$D5,$AB,$9D,$00,$02,$8A,$18,$69,$04,$85,$3C +.db $E6,$2E,$A5,$2E,$C9,$04,$B0,$0B,$A5,$19,$45,$1A,$29,$40,$D0,$A7 +.db $4C,$66,$AA,$60,$AC,$27,$06,$B9,$FE,$AA,$10,$0F,$A9,$00,$8D,$27 +.db $06,$A9,$03,$8D,$24,$06,$20,$4A,$A1,$A9,$08,$4C,$4E,$A9,$07,$07 +.db $07,$07,$07,$07,$07,$08,$08,$08,$08,$80,$AC,$27,$06,$B9,$23,$AB +.db $10,$0E,$A9,$00,$8D,$27,$06,$A5,$14,$D0,$03,$8D,$28,$06,$A9,$00 +.db $4C,$4E,$A9,$08,$08,$07,$07,$01,$01,$02,$02,$00,$00,$80,$08,$08 +.db $08,$07,$07,$07,$01,$01,$01,$02,$02,$02,$00,$00,$00,$80,$A9,$00 +.db $8D,$27,$06,$A9,$03,$8D,$24,$06,$20,$4A,$A1,$A9,$00,$4C,$4E,$A9 +.db $AC,$27,$06,$A5,$19,$29,$04,$F0,$03,$4C,$0A,$AB,$B9,$74,$AB,$10 +.db $10,$A9,$00,$8D,$27,$06,$A5,$15,$D0,$05,$A9,$01,$8D,$28,$06,$A9 +.db $03,$4C,$4E,$A9,$04,$04,$04,$05,$05,$05,$03,$03,$03,$80,$A9,$00 +.db $8D,$27,$06,$A0,$02,$AD,$2B,$06,$29,$01,$D0,$02,$A0,$07,$A5,$15 +.db $F0,$08,$A5,$19,$29,$04,$D0,$02,$A0,$06,$98,$4C,$4E,$A9,$80,$05 +.db $01,$01,$03,$04,$80,$80,$80,$01,$03,$03,$01,$82,$82,$01,$80,$80 +.db $05,$01,$01,$03,$04,$01,$80,$80,$01,$03,$03,$01,$01,$01,$01,$80 +.db $00,$00,$00,$00,$00,$00,$00,$06,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$08,$00,$08,$00,$00,$08,$08,$11,$19,$11,$1E,$1E,$1E,$1E +.db $19,$17,$1B,$23,$1B,$29,$29,$29,$29,$23,$21,$EE,$EE,$EE,$EF,$EF +.db $EF,$EF,$EE,$EE,$02,$02,$02,$01,$01,$01,$01,$02,$02,$EA,$EA,$EA +.db $ED,$ED,$ED,$ED,$EA,$EA,$06,$06,$06,$03,$03,$03,$03,$06,$06,$19 +.db $AC,$19,$AC,$19,$AC,$19,$AC,$19,$AC,$2B,$AC,$33,$AC,$3B,$AC,$43 +.db $AC,$4B,$AC,$53,$AC,$5B,$AC,$63,$AC,$6B,$AC,$01,$02,$03,$04,$02 +.db $01,$04,$03,$05,$06,$07,$08,$06,$05,$08,$07,$0B,$0C,$FF,$FF,$0C +.db $0B,$FF,$FF,$0D,$0E,$0F,$10,$0E,$0D,$10,$0F,$11,$12,$13,$14,$12 +.db $11,$14,$13,$15,$16,$17,$18,$16,$15,$18,$17,$19,$1A,$1B,$1C,$1A +.db $19,$1C,$1B,$FF,$1D,$09,$0A,$1D,$FF,$0A,$09,$20,$FF,$1E,$1F,$FF +.db $20,$1F,$1E,$A5,$E1,$C9,$09,$B0,$24,$60,$AD,$7D,$06,$F0,$0D,$A5 +.db $19,$29,$04,$D0,$06,$A9,$00,$85,$1D,$85,$17,$60,$20,$F5,$AC,$20 +.db $DA,$AD,$20,$53,$AD,$20,$7A,$AD,$20,$83,$B0,$A5,$E1,$0A,$A8,$B9 +.db $AC,$AC,$85,$32,$B9,$AD,$AC,$85,$33,$6C,$32,$00,$16,$AE,$16,$AE +.db $16,$AE,$43,$B6,$43,$B5,$EB,$B6,$A5,$B8,$A5,$B8,$D3,$B8,$EB,$B6 +.db $31,$B7,$49,$B7,$5B,$B7,$7C,$B7,$94,$B7,$A6,$B7,$BE,$B7,$D6,$B7 +.db $E8,$B7,$AD,$26,$06,$F0,$15,$EE,$26,$06,$AD,$26,$06,$29,$7F,$C9 +.db $20,$90,$08,$A9,$00,$8D,$26,$06,$20,$4A,$A1,$60,$A9,$02,$85,$DF +.db $A9,$00,$85,$E0,$60,$AD,$F6,$04,$C9,$07,$90,$09,$A9,$00,$8D,$6E +.db $03,$8D,$6F,$03,$60,$AD,$16,$06,$C9,$3B,$B0,$04,$EE,$16,$06,$60 +.db $A9,$00,$8D,$16,$06,$AD,$6E,$03,$38,$E9,$01,$8D,$6E,$03,$AD,$6F +.db $03,$E9,$00,$8D,$6F,$03,$D0,$2A,$AD,$6E,$03,$D0,$25,$8D,$24,$06 +.db $A9,$01,$8D,$98,$03,$AD,$1F,$06,$F0,$03,$20,$52,$B4,$A9,$00,$85 +.db $E0,$85,$E1,$8D,$DC,$06,$8D,$DD,$06,$A9,$04,$85,$DF,$20,$4A,$A1 +.db $68,$68,$60,$A5,$E1,$C9,$05,$B0,$20,$AD,$1D,$06,$F0,$08,$A5,$E1 +.db $D0,$17,$A2,$01,$D0,$11,$A5,$E1,$C9,$03,$F0,$0D,$A2,$00,$AD,$24 +.db $06,$C9,$03,$90,$02,$A2,$04,$86,$E1,$60,$AD,$1F,$06,$F0,$2A,$AD +.db $FD,$05,$F0,$25,$A9,$00,$8D,$FD,$05,$A9,$40,$85,$15,$A5,$19,$09 +.db $04,$85,$19,$A9,$0C,$85,$8F,$A9,$03,$85,$1D,$A9,$00,$85,$E1,$20 +.db $52,$B4,$A9,$04,$8D,$F1,$05,$85,$50,$AD,$36,$06,$CD,$37,$06,$F0 +.db $06,$8D,$37,$06,$20,$4A,$A1,$AC,$38,$06,$F0,$1D,$A5,$06,$29,$03 +.db $D0,$17,$C0,$01,$D0,$04,$A2,$26,$86,$8E,$C0,$F8,$90,$08,$20,$B0 +.db $A4,$A9,$FF,$8D,$38,$06,$EE,$38,$06,$60,$AD,$0C,$03,$29,$20,$F0 +.db $30,$A9,$07,$85,$DF,$AC,$24,$06,$C0,$04,$D0,$02,$A0,$03,$AE,$25 +.db $06,$F0,$1E,$E0,$02,$B0,$04,$C0,$00,$D0,$11,$8C,$25,$06,$A9,$01 +.db $8E,$24,$06,$E0,$03,$D0,$02,$A9,$81,$8D,$26,$06,$BD,$12,$AE,$85 +.db $8F,$60,$00,$09,$09,$0E,$AD,$24,$06,$C9,$03,$90,$03,$20,$C3,$B5 +.db $A5,$1E,$0A,$A8,$B9,$31,$AE,$85,$32,$B9,$32,$AE,$85,$33,$6C,$32 +.db $00,$59,$AE,$AC,$AE,$CD,$AE,$AC,$AE,$FA,$AE,$31,$AF,$59,$AE,$82 +.db $AE,$59,$AE,$FA,$AE,$FA,$AE,$69,$B0,$69,$B0,$CD,$AE,$FA,$AE,$FA +.db $AE,$FA,$AE,$4D,$AF,$69,$B0,$59,$AF,$A5,$15,$D0,$1A,$A5,$19,$29 +.db $04,$D0,$13,$AD,$0A,$03,$D0,$02,$85,$1D,$20,$2C,$B5,$20,$16,$B3 +.db $20,$A6,$B3,$20,$68,$AF,$60,$A5,$19,$29,$04,$D0,$F9,$A9,$0A,$85 +.db $1D,$60,$A5,$15,$D0,$1B,$A5,$19,$29,$04,$D0,$14,$AD,$0A,$03,$29 +.db $04,$D0,$04,$A9,$00,$85,$1D,$20,$2C,$B5,$20,$A6,$B3,$20,$68,$AF +.db $60,$A5,$19,$29,$04,$D0,$F9,$A9,$0A,$85,$1D,$60,$20,$E6,$AE,$A5 +.db $14,$D0,$02,$85,$1D,$20,$16,$B3,$20,$D0,$B4,$20,$A6,$B3,$20,$68 +.db $AF,$AD,$0A,$03,$29,$04,$F0,$04,$A9,$07,$85,$1D,$60,$20,$E6,$AE +.db $A5,$14,$D0,$02,$85,$1D,$20,$16,$B3,$20,$D0,$B4,$20,$A6,$B3,$20 +.db $BA,$B4,$20,$68,$AF,$60,$A5,$15,$C9,$07,$90,$0D,$A2,$0A,$AD,$1D +.db $06,$F0,$02,$A2,$0B,$86,$1D,$68,$68,$60,$A5,$15,$D0,$0A,$A5,$19 +.db $29,$04,$D0,$04,$A9,$01,$85,$1D,$20,$1C,$AF,$20,$8D,$AF,$20,$6C +.db $B3,$A5,$E1,$F0,$03,$20,$A6,$B3,$20,$29,$B4,$60,$A5,$19,$29,$04 +.db $F0,$0E,$AD,$0A,$03,$29,$80,$F0,$07,$A5,$15,$18,$69,$01,$85,$15 +.db $60,$A5,$15,$D0,$0A,$A5,$19,$29,$04,$D0,$04,$A9,$01,$85,$1D,$20 +.db $B8,$AF,$20,$6C,$B3,$A5,$E1,$F0,$03,$20,$A6,$B3,$60,$A2,$00,$A0 +.db $10,$20,$69,$B8,$A9,$04,$85,$1D,$60,$20,$A6,$B3,$A2,$00,$A0,$08 +.db $20,$69,$B8,$A9,$00,$85,$1D,$60,$AD,$24,$06,$C9,$02,$D0,$1D,$AD +.db $2F,$06,$2D,$30,$06,$D0,$15,$AD,$0A,$03,$29,$04,$D0,$0E,$AD,$0C +.db $03,$29,$40,$F0,$07,$A9,$13,$85,$1D,$20,$D4,$AF,$60,$AD,$24,$06 +.db $C9,$02,$D0,$23,$AD,$2F,$06,$2D,$30,$06,$D0,$1B,$AD,$0A,$03,$29 +.db $04,$D0,$14,$AD,$0C,$03,$29,$40,$F0,$0D,$A0,$11,$AD,$1D,$06,$F0 +.db $01,$C8,$84,$1D,$20,$D4,$AF,$60,$AD,$24,$06,$C9,$02,$F0,$01,$60 +.db $AE,$31,$06,$BD,$2F,$06,$D0,$F7,$A9,$40,$E0,$00,$D0,$01,$8A,$85 +.db $32,$4C,$E3,$AF,$A5,$19,$29,$C0,$85,$32,$AE,$31,$06,$BD,$2F,$06 +.db $F0,$01,$60,$FE,$2F,$06,$A4,$A3,$A5,$32,$99,$64,$05,$8A,$18,$69 +.db $06,$99,$00,$05,$A5,$32,$29,$40,$D0,$0F,$A5,$0F,$18,$69,$00,$99 +.db $14,$05,$A5,$0E,$69,$00,$4C,$15,$B0,$A5,$0F,$38,$E9,$08,$99,$14 +.db $05,$A5,$0E,$E9,$00,$99,$28,$05,$A5,$10,$99,$50,$05,$A9,$EC,$30 +.db $1B,$18,$65,$11,$99,$3C,$05,$B0,$04,$C9,$F0,$90,$26,$18,$69,$10 +.db $99,$3C,$05,$B9,$50,$05,$18,$69,$01,$4C,$50,$B0,$18,$65,$11,$99 +.db $3C,$05,$B0,$0F,$38,$E9,$10,$99,$3C,$05,$B9,$50,$05,$38,$E9,$01 +.db $99,$50,$05,$A9,$00,$99,$8C,$05,$99,$78,$05,$99,$69,$06,$E6,$A3 +.db $AD,$31,$06,$49,$01,$8D,$31,$06,$60,$A5,$19,$29,$04,$D0,$0A,$A2 +.db $0B,$A5,$15,$D0,$02,$A2,$01,$86,$1D,$20,$43,$B3,$20,$A6,$B3,$20 +.db $8D,$AF,$60,$AD,$1F,$06,$F0,$15,$C9,$02,$B0,$03,$4C,$5A,$B1,$C9 +.db $06,$B0,$03,$4C,$9E,$B0,$C9,$07,$B0,$07,$4C,$88,$B1,$60,$20,$A5 +.db $B1,$AD,$0C,$03,$29,$40,$F0,$3C,$A9,$00,$8D,$13,$06,$8D,$14,$06 +.db $A0,$0C,$AD,$0A,$03,$29,$04,$F0,$02,$A0,$0E,$AD,$0A,$03,$29,$03 +.db $F0,$02,$A0,$0D,$84,$E1,$AD,$1F,$06,$C9,$07,$90,$0D,$38,$E9,$05 +.db $8D,$1F,$06,$20,$4A,$A1,$A9,$00,$85,$17,$AD,$1F,$06,$C9,$04,$D0 +.db $04,$20,$BD,$B1,$60,$A4,$A3,$99,$00,$05,$A5,$19,$29,$40,$D0,$0F +.db $A5,$0F,$18,$69,$10,$99,$14,$05,$A5,$0E,$69,$00,$4C,$0B,$B1,$A5 +.db $0F,$38,$E9,$20,$99,$14,$05,$A5,$0E,$E9,$00,$99,$28,$05,$A5,$10 +.db $99,$50,$05,$A9,$E4,$30,$1B,$18,$65,$11,$99,$3C,$05,$B0,$04,$C9 +.db $F0,$90,$26,$18,$69,$10,$99,$3C,$05,$B9,$50,$05,$18,$69,$01,$4C +.db $46,$B1,$18,$65,$11,$99,$3C,$05,$B0,$0F,$38,$E9,$10,$99,$3C,$05 +.db $B9,$50,$05,$38,$E9,$01,$99,$50,$05,$A9,$00,$99,$64,$05,$99,$78 +.db $05,$AD,$32,$06,$99,$8C,$05,$E6,$A3,$60,$A5,$E1,$C9,$09,$B0,$27 +.db $AD,$0C,$03,$29,$40,$F0,$20,$A9,$19,$85,$8F,$A0,$09,$AD,$0A,$03 +.db $29,$04,$F0,$02,$A0,$0B,$AD,$0A,$03,$29,$03,$F0,$08,$A0,$09,$A5 +.db $15,$D0,$02,$A0,$0A,$84,$E1,$60,$A0,$0F,$AD,$0A,$03,$29,$04,$F0 +.db $02,$A0,$11,$AD,$0A,$03,$29,$03,$F0,$08,$A0,$0F,$A5,$15,$D0,$02 +.db $A0,$10,$84,$E1,$60,$A2,$1E,$A0,$3B,$20,$87,$B8,$A9,$12,$85,$E1 +.db $AD,$1F,$06,$18,$69,$05,$8D,$1F,$06,$20,$4A,$A1,$60,$A4,$A3,$A9 +.db $08,$99,$00,$05,$A9,$09,$99,$01,$05,$A9,$0A,$99,$02,$05,$A5,$19 +.db $99,$64,$05,$99,$65,$05,$99,$66,$05,$29,$40,$D0,$0F,$A5,$0F,$18 +.db $69,$08,$99,$14,$05,$A5,$0E,$69,$00,$4C,$F8,$B1,$A5,$0F,$38,$E9 +.db $10,$99,$14,$05,$A5,$0E,$E9,$00,$99,$28,$05,$A5,$10,$99,$50,$05 +.db $A9,$E4,$30,$1B,$18,$65,$11,$99,$3C,$05,$B0,$04,$C9,$F0,$90,$26 +.db $18,$69,$10,$99,$3C,$05,$B9,$50,$05,$18,$69,$01,$4C,$33,$B2,$18 +.db $65,$11,$99,$3C,$05,$B0,$0F,$38,$E9,$10,$99,$3C,$05,$B9,$50,$05 +.db $38,$E9,$01,$99,$50,$05,$A9,$00,$99,$8C,$05,$99,$69,$06,$C8,$A5 +.db $19,$29,$40,$D0,$0F,$A5,$0F,$18,$69,$08,$99,$14,$05,$A5,$0E,$69 +.db $00,$4C,$60,$B2,$A5,$0F,$38,$E9,$10,$99,$14,$05,$A5,$0E,$E9,$00 +.db $99,$28,$05,$A5,$10,$99,$50,$05,$A9,$E4,$30,$1B,$18,$65,$11,$99 +.db $3C,$05,$B0,$04,$C9,$F0,$90,$26,$18,$69,$10,$99,$3C,$05,$B9,$50 +.db $05,$18,$69,$01,$4C,$9B,$B2,$18,$65,$11,$99,$3C,$05,$B0,$0F,$38 +.db $E9,$10,$99,$3C,$05,$B9,$50,$05,$38,$E9,$01,$99,$50,$05,$A9,$00 +.db $99,$8C,$05,$99,$69,$06,$C8,$A5,$19,$29,$40,$D0,$0F,$A5,$0F,$18 +.db $69,$08,$99,$14,$05,$A5,$0E,$69,$00,$4C,$C8,$B2,$A5,$0F,$38,$E9 +.db $10,$99,$14,$05,$A5,$0E,$E9,$00,$99,$28,$05,$A5,$10,$99,$50,$05 +.db $A9,$E4,$30,$1B,$18,$65,$11,$99,$3C,$05,$B0,$04,$C9,$F0,$90,$26 +.db $18,$69,$10,$99,$3C,$05,$B9,$50,$05,$18,$69,$01,$4C,$03,$B3,$18 +.db $65,$11,$99,$3C,$05,$B0,$0F,$38,$E9,$10,$99,$3C,$05,$B9,$50,$05 +.db $38,$E9,$01,$99,$50,$05,$A9,$00,$99,$8C,$05,$99,$69,$06,$C8,$84 +.db $A3,$A9,$1B,$85,$8F,$60,$AD,$0A,$03,$29,$01,$F0,$07,$A5,$19,$29 +.db $BE,$4C,$2F,$B3,$AD,$0A,$03,$29,$02,$F0,$17,$A5,$19,$09,$41,$85 +.db $19,$A5,$14,$C9,$10,$B0,$07,$A5,$14,$18,$69,$04,$85,$14,$A9,$01 +.db $85,$1D,$60,$AD,$0A,$03,$29,$01,$F0,$07,$A5,$19,$29,$BE,$4C,$5C +.db $B3,$AD,$0A,$03,$29,$02,$F0,$13,$A5,$19,$09,$41,$85,$19,$A5,$14 +.db $C9,$10,$B0,$07,$A5,$14,$18,$69,$04,$85,$14,$60,$A5,$19,$85,$26 +.db $AD,$0A,$03,$29,$01,$F0,$07,$A5,$19,$29,$BE,$4C,$8D,$B3,$AD,$0A +.db $03,$29,$02,$D0,$04,$A9,$01,$D0,$13,$A5,$19,$09,$41,$85,$19,$45 +.db $26,$29,$40,$F0,$05,$A9,$00,$85,$14,$60,$A9,$03,$18,$65,$14,$C9 +.db $20,$B0,$02,$85,$14,$60,$AD,$1D,$06,$F0,$42,$AD,$36,$06,$F0,$19 +.db $A9,$20,$85,$15,$AD,$0A,$03,$29,$04,$F0,$07,$A5,$19,$29,$FB,$85 +.db $19,$60,$A5,$19,$09,$04,$85,$19,$60,$AD,$0C,$03,$29,$80,$F0,$1C +.db $AD,$0A,$03,$29,$08,$F0,$03,$20,$52,$B4,$A9,$30,$85,$15,$A5,$19 +.db $09,$04,$85,$19,$A9,$04,$85,$8F,$A9,$0C,$85,$1D,$60,$AD,$0C,$03 +.db $29,$80,$F0,$F8,$A5,$15,$D0,$F4,$AD,$36,$06,$D0,$07,$AD,$0A,$03 +.db $29,$08,$D0,$38,$A0,$48,$AD,$0A,$03,$29,$40,$F0,$02,$A0,$58,$AD +.db $0A,$03,$29,$04,$F0,$02,$A0,$28,$84,$15,$A5,$19,$09,$04,$85,$19 +.db $A9,$04,$85,$1D,$A9,$03,$85,$8F,$60,$AD,$1F,$06,$F0,$23,$AD,$0C +.db $03,$29,$80,$F0,$1C,$AD,$0A,$03,$29,$08,$F0,$15,$20,$52,$B4,$A9 +.db $50,$85,$15,$A5,$19,$09,$04,$85,$19,$A9,$05,$85,$1D,$A9,$01,$85 +.db $8F,$60,$AD,$1F,$06,$F0,$62,$A5,$19,$8D,$22,$06,$AD,$1F,$06,$8D +.db $21,$06,$A9,$00,$8D,$1F,$06,$8D,$20,$06,$20,$4A,$A1,$A9,$04,$8D +.db $F1,$05,$A5,$11,$38,$E9,$20,$8D,$F4,$05,$A5,$10,$E9,$00,$8D,$F5 +.db $05,$AD,$22,$06,$29,$40,$D0,$11,$A5,$19,$09,$01,$85,$19,$A5,$0F +.db $38,$E9,$08,$8D,$F2,$05,$4C,$A7,$B4,$A5,$19,$29,$FE,$85,$19,$A5 +.db $0F,$38,$E9,$18,$8D,$F2,$05,$A5,$0E,$E9,$00,$8D,$F3,$05,$A9,$00 +.db $8D,$F6,$05,$A9,$30,$85,$14,$E6,$A3,$60,$A5,$17,$C9,$10,$90,$0F +.db $AD,$0C,$03,$29,$80,$F0,$08,$A9,$60,$85,$15,$A9,$09,$85,$1D,$60 +.db $AD,$1D,$06,$D0,$4D,$AD,$0A,$03,$29,$03,$F0,$47,$AD,$0A,$03,$29 +.db $40,$D0,$1C,$8D,$14,$03,$A5,$14,$C9,$10,$B0,$07,$A5,$14,$18,$69 +.db $04,$85,$14,$60,$AD,$14,$03,$C9,$30,$B0,$04,$EE,$14,$03,$60,$A5 +.db $19,$29,$01,$C5,$4F,$F0,$0A,$85,$4F,$A9,$10,$85,$14,$A9,$00,$85 +.db $1D,$A9,$02,$85,$1D,$A5,$14,$C9,$40,$B0,$07,$A5,$14,$18,$69,$04 +.db $85,$14,$60,$A5,$14,$F0,$FB,$A9,$01,$85,$1D,$60,$AD,$0A,$03,$29 +.db $04,$F0,$04,$A9,$07,$85,$1D,$AD,$0A,$03,$29,$08,$F0,$04,$A9,$08 +.db $85,$1D,$60,$20,$C3,$B5,$A5,$1E,$0A,$A8,$B9,$57,$B5,$85,$32,$B9 +.db $58,$B5,$85,$33,$6C,$32,$00,$59,$AE,$AC,$AE,$CD,$AE,$AC,$AE,$FA +.db $AE,$FA,$AE,$59,$AE,$59,$AE,$59,$AE,$77,$B5,$FA,$AE,$69,$B0,$69 +.db $B0,$CD,$AE,$FA,$AE,$A3,$B5,$EE,$1C,$06,$AD,$1C,$06,$C9,$50,$90 +.db $0A,$A9,$00,$8D,$1C,$06,$A9,$0F,$85,$1D,$60,$A5,$15,$D0,$0A,$A5 +.db $19,$29,$04,$D0,$04,$A9,$01,$85,$1D,$20,$43,$B3,$20,$DD,$B5,$20 +.db $30,$B6,$60,$AD,$1F,$06,$F0,$06,$20,$43,$B3,$4C,$B1,$B5,$20,$E2 +.db $B5,$20,$DD,$B5,$A5,$19,$29,$04,$D0,$08,$A5,$15,$D0,$04,$A9,$01 +.db $85,$1D,$60,$AD,$1F,$06,$D0,$14,$AD,$36,$06,$D0,$0F,$AD,$0C,$03 +.db $29,$40,$F0,$08,$A9,$08,$85,$E1,$A9,$01,$85,$8F,$60,$A9,$30,$85 +.db $14,$60,$AD,$0A,$03,$29,$40,$D0,$05,$A9,$0A,$85,$1D,$60,$A2,$00 +.db $A5,$19,$29,$40,$F0,$01,$E8,$8A,$85,$32,$49,$01,$85,$34,$E6,$32 +.db $E6,$34,$A5,$19,$29,$04,$D0,$12,$AD,$0C,$03,$25,$32,$F0,$0B,$E6 +.db $15,$A9,$50,$C5,$15,$B0,$18,$85,$15,$60,$AD,$0C,$03,$25,$34,$F0 +.db $0E,$A5,$19,$09,$04,$85,$19,$A9,$50,$C5,$15,$B0,$02,$85,$15,$60 +.db $AD,$0A,$03,$29,$40,$F0,$0B,$AD,$0A,$03,$29,$80,$F0,$04,$A9,$40 +.db $85,$15,$60,$AD,$0A,$03,$29,$0F,$D0,$0A,$A9,$00,$85,$15,$85,$14 +.db $A9,$0D,$85,$1D,$20,$86,$B6,$20,$5B,$B6,$60,$AD,$0C,$03,$29,$80 +.db $F0,$23,$AD,$0A,$03,$29,$08,$D0,$1C,$A9,$50,$85,$15,$A5,$19,$09 +.db $04,$85,$19,$A9,$04,$85,$1D,$A9,$03,$85,$8F,$A9,$00,$85,$E1,$8D +.db $DC,$06,$8D,$DD,$06,$60,$AD,$0A,$03,$29,$08,$F0,$11,$AD,$DD,$06 +.db $F0,$06,$A9,$00,$85,$15,$F0,$06,$A5,$19,$09,$04,$D0,$10,$AD,$0A +.db $03,$29,$04,$F0,$11,$A9,$00,$8D,$DD,$06,$A5,$19,$29,$7B,$85,$19 +.db $A9,$10,$85,$15,$D0,$30,$AD,$DE,$06,$D0,$0A,$AD,$DC,$06,$F0,$05 +.db $A9,$00,$85,$14,$60,$AD,$0A,$03,$29,$02,$F0,$06,$A5,$19,$09,$41 +.db $D0,$0B,$AD,$0A,$03,$29,$01,$F0,$0C,$A5,$19,$29,$BE,$85,$19,$A9 +.db $10,$85,$14,$D0,$01,$60,$A9,$0E,$85,$1D,$60,$20,$12,$B8,$20,$3B +.db $B8,$A2,$0D,$A0,$00,$A5,$15,$F0,$02,$A0,$0A,$AD,$0A,$03,$29,$04 +.db $F0,$02,$A0,$07,$A9,$0D,$85,$32,$86,$1D,$A5,$17,$C5,$32,$90,$20 +.db $84,$1D,$A0,$01,$AD,$1F,$06,$C9,$01,$D0,$08,$AC,$23,$06,$A9,$01 +.db $8D,$23,$06,$8C,$1F,$06,$20,$4A,$A1,$A9,$00,$85,$E1,$8D,$2E,$06 +.db $60,$20,$12,$B8,$20,$3B,$B8,$A2,$0E,$A0,$00,$A5,$15,$F0,$02,$A0 +.db $0A,$A9,$0D,$85,$32,$20,$08,$B7,$60,$20,$12,$B8,$20,$3B,$B8,$A2 +.db $06,$A0,$07,$A9,$0D,$85,$32,$20,$08,$B7,$60,$20,$12,$B8,$20,$3B +.db $B8,$A2,$0D,$A0,$00,$AD,$0A,$03,$29,$04,$F0,$02,$A0,$07,$A5,$15 +.db $F0,$02,$A0,$0A,$A9,$03,$85,$32,$20,$08,$B7,$60,$20,$12,$B8,$20 +.db $3B,$B8,$A2,$0E,$A0,$00,$A5,$15,$F0,$02,$A0,$0A,$A9,$04,$85,$32 +.db $20,$08,$B7,$60,$20,$12,$B8,$20,$3B,$B8,$A2,$06,$A0,$07,$A9,$01 +.db $85,$32,$20,$08,$B7,$60,$20,$43,$B3,$20,$3B,$B8,$A2,$0D,$A0,$00 +.db $A5,$15,$F0,$02,$A0,$0A,$A9,$03,$85,$32,$20,$08,$B7,$60,$20,$43 +.db $B3,$20,$3B,$B8,$A2,$0E,$A0,$00,$A5,$15,$F0,$02,$A0,$0A,$A9,$07 +.db $85,$32,$20,$08,$B7,$60,$20,$43,$B3,$20,$3B,$B8,$A2,$06,$A0,$07 +.db $A9,$03,$85,$32,$20,$08,$B7,$60,$20,$43,$B3,$20,$3B,$B8,$A2,$00 +.db $AD,$0A,$03,$29,$03,$F0,$05,$A5,$15,$D0,$01,$E8,$86,$1D,$A2,$00 +.db $A0,$40,$20,$87,$B8,$A9,$06,$8D,$1F,$06,$20,$4A,$A1,$A9,$1A,$85 +.db $8F,$60,$AD,$0A,$03,$29,$01,$F0,$07,$A5,$19,$29,$FE,$4C,$2B,$B8 +.db $AD,$0A,$03,$29,$02,$F0,$13,$A5,$19,$09,$01,$85,$19,$A5,$14,$C9 +.db $10,$B0,$07,$A5,$14,$18,$69,$04,$85,$14,$60,$AD,$0C,$03,$29,$80 +.db $F0,$26,$AD,$1D,$06,$F0,$06,$A2,$04,$A0,$20,$D0,$11,$A2,$03,$A5 +.db $15,$D0,$15,$A0,$60,$AD,$0A,$03,$29,$04,$F0,$02,$A0,$30,$84,$15 +.db $86,$8F,$A5,$19,$09,$04,$85,$19,$60,$EE,$11,$06,$CC,$11,$06,$B0 +.db $0D,$A9,$00,$8D,$11,$06,$EE,$12,$06,$EC,$12,$06,$90,$03,$68,$68 +.db $60,$A9,$00,$8D,$12,$06,$60,$EE,$13,$06,$CC,$13,$06,$B0,$0D,$A9 +.db $00,$8D,$13,$06,$EE,$14,$06,$EC,$14,$06,$90,$03,$68,$68,$60,$A9 +.db $00,$8D,$14,$06,$60,$A5,$15,$D0,$29,$A9,$07,$85,$E1,$A6,$A4,$CA +.db $AD,$22,$06,$85,$19,$AD,$21,$06,$8D,$1F,$06,$A9,$01,$8D,$20,$06 +.db $A9,$07,$85,$1D,$20,$4A,$A1,$A2,$00,$A0,$14,$20,$69,$B8,$A9,$00 +.db $85,$E1,$60,$20,$43,$B3,$20,$E9,$B8,$A9,$05,$85,$1D,$A2,$00,$A0 +.db $14,$20,$69,$B8,$A9,$00,$85,$E1,$60,$A5,$15,$D0,$11,$AD,$0C,$03 +.db $29,$80,$F0,$0A,$A9,$60,$85,$15,$A5,$19,$09,$04,$85,$19,$60,$A5 +.db $14,$C9,$10,$B0,$07,$A5,$06,$29,$01,$4C,$16,$B9,$6A,$6A,$6A,$6A +.db $29,$0F,$A8,$B9,$82,$BA,$85,$28,$A5,$14,$C9,$03,$B0,$04,$A9,$00 +.db $85,$28,$A5,$28,$D0,$0B,$A5,$0A,$85,$0E,$A5,$0B,$85,$0F,$4C,$5A +.db $B9,$A5,$19,$29,$01,$F0,$10,$A5,$0B,$38,$E5,$28,$85,$0F,$A5,$0A +.db $E9,$00,$85,$0E,$4C,$5A,$B9,$A5,$12,$C9,$F0,$B0,$0D,$A5,$0B,$18 +.db $65,$28,$85,$0F,$A5,$0A,$69,$00,$85,$0E,$A5,$15,$4A,$4A,$4A,$4A +.db $AA,$BD,$92,$BA,$85,$2B,$A5,$15,$C9,$04,$B0,$04,$A9,$00,$85,$2B +.db $A5,$2B,$D0,$0B,$A5,$0C,$85,$10,$A5,$0D,$85,$11,$4C,$E7,$B9,$A5 +.db $19,$29,$04,$F0,$21,$A5,$13,$C9,$08,$90,$1B,$A5,$0D,$38,$E5,$2B +.db $85,$11,$A5,$0C,$E9,$00,$85,$10,$A5,$11,$C9,$F0,$90,$05,$38,$E9 +.db $10,$85,$11,$4C,$E7,$B9,$A5,$13,$C9,$E8,$90,$21,$A9,$22,$85,$8E +.db $A9,$00,$8D,$24,$06,$8D,$1F,$06,$AD,$F7,$04,$C9,$03,$F0,$05,$A9 +.db $00,$8D,$20,$06,$A9,$04,$85,$DF,$A9,$02,$85,$E0,$60,$A5,$0D,$18 +.db $65,$2B,$85,$11,$A5,$0C,$69,$00,$85,$10,$A5,$11,$C9,$F0,$90,$07 +.db $18,$69,$10,$85,$11,$E6,$10,$A5,$DF,$C9,$04,$F0,$06,$20,$A2,$BA +.db $20,$F7,$BB,$A5,$0F,$38,$E5,$0B,$85,$28,$A5,$0E,$E5,$0A,$10,$1B +.db $A5,$28,$49,$FF,$38,$69,$00,$C9,$07,$90,$0D,$A5,$0B,$38,$E9,$07 +.db $85,$0F,$A5,$0A,$E9,$00,$85,$0E,$4C,$2E,$BA,$A5,$28,$C9,$07,$90 +.db $0D,$A5,$0B,$18,$69,$07,$85,$0F,$A5,$0A,$69,$00,$85,$0E,$A5,$11 +.db $38,$E5,$0D,$85,$28,$A5,$10,$E5,$0C,$10,$26,$A5,$28,$49,$FF,$38 +.db $69,$00,$C9,$07,$90,$18,$A5,$0D,$38,$E9,$07,$85,$11,$A5,$0C,$E9 +.db $00,$85,$10,$A5,$11,$C9,$F0,$90,$05,$38,$E9,$10,$85,$11,$4C,$81 +.db $BA,$A5,$28,$C9,$07,$90,$1A,$A5,$0D,$18,$69,$07,$85,$11,$A5,$0C +.db $69,$00,$85,$10,$A5,$11,$C9,$F0,$90,$07,$18,$69,$10,$85,$11,$E6 +.db $10,$60,$00,$01,$02,$03,$04,$05,$06,$07,$07,$07,$07,$07,$07,$07 +.db $07,$07,$01,$01,$02,$03,$04,$05,$05,$05,$05,$05,$05,$05,$05,$05 +.db $05,$05,$A6,$1D,$BD,$D6,$BB,$18,$65,$0F,$85,$65,$A5,$0E,$69,$00 +.db $85,$64,$A5,$10,$85,$66,$A5,$11,$85,$67,$A9,$00,$85,$26,$A4,$66 +.db $B9,$FA,$04,$18,$65,$64,$A8,$AD,$F5,$04,$8D,$00,$80,$B1,$9F,$85 +.db $9E,$B1,$8C,$85,$99,$A8,$29,$1F,$09,$80,$85,$33,$A9,$00,$85,$32 +.db $98,$29,$20,$D0,$09,$AD,$F3,$04,$8D,$00,$80,$4C,$F4,$BA,$AD,$F4 +.db $04,$8D,$00,$80,$A4,$65,$A5,$67,$29,$F0,$19,$14,$BD,$A8,$B1,$32 +.db $A8,$AD,$F5,$04,$8D,$00,$80,$B1,$DA,$85,$96,$A9,$27,$8D,$03,$80 +.db $20,$00,$E0,$A9,$3F,$8D,$03,$80,$A5,$96,$C9,$F8,$D0,$06,$A5,$49 +.db $09,$01,$D0,$04,$A5,$49,$29,$FE,$85,$49,$A5,$26,$F0,$03,$4C,$BA +.db $BA,$A6,$1D,$BD,$D6,$BB,$0A,$85,$25,$A5,$65,$38,$E5,$25,$85,$65 +.db $A5,$64,$E9,$00,$85,$64,$A9,$00,$85,$26,$A4,$66,$B9,$FA,$04,$18 +.db $65,$64,$A8,$AD,$F5,$04,$8D,$00,$80,$B1,$9F,$85,$9E,$B1,$8C,$85 +.db $99,$A8,$29,$1F,$09,$80,$85,$33,$A9,$00,$85,$32,$98,$29,$20,$D0 +.db $09,$AD,$F3,$04,$8D,$00,$80,$4C,$80,$BB,$AD,$F4,$04,$8D,$00,$80 +.db $A4,$65,$A5,$67,$29,$F0,$19,$14,$BD,$A8,$B1,$32,$A8,$AD,$F5,$04 +.db $8D,$00,$80,$B1,$DA,$85,$96,$A9,$27,$8D,$03,$80,$20,$00,$E0,$A9 +.db $3F,$8D,$03,$80,$A5,$96,$C9,$F8,$D0,$06,$A5,$49,$09,$02,$D0,$04 +.db $A5,$49,$29,$FD,$85,$49,$A5,$26,$F0,$03,$4C,$46,$BB,$A6,$1D,$A5 +.db $65,$18,$7D,$D6,$BB,$85,$0F,$A5,$64,$69,$00,$85,$0E,$A5,$67,$85 +.db $11,$A5,$66,$85,$10,$60,$05,$05,$05,$05,$05,$05,$05,$05,$00,$05 +.db $05,$05,$05,$08,$05,$05,$05,$05,$05,$05,$05,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$05,$0A,$A0,$10,$AD,$24,$06,$F0,$02,$A0,$18 +.db $84,$2B,$A6,$1D,$BD,$D6,$BB,$18,$65,$0F,$85,$65,$A5,$0E,$69,$00 +.db $85,$64,$A5,$11,$38,$E5,$2B,$85,$67,$B0,$0A,$38,$E9,$10,$85,$67 +.db $A4,$10,$88,$84,$66,$A9,$00,$85,$26,$A4,$66,$B9,$FA,$04,$18,$65 +.db $64,$A8,$AD,$F5,$04,$8D,$00,$80,$B1,$9F,$85,$9E,$B1,$8C,$85,$99 +.db $A8,$29,$1F,$09,$80,$85,$33,$A9,$00,$85,$32,$98,$29,$20,$D0,$09 +.db $AD,$F3,$04,$8D,$00,$80,$4C,$5F,$BC,$AD,$F4,$04,$8D,$00,$80,$A4 +.db $65,$A5,$67,$29,$F0,$19,$14,$BD,$A8,$B1,$32,$A8,$AD,$F5,$04,$8D +.db $00,$80,$B1,$DA,$85,$96,$20,$14,$BE,$A6,$1D,$BD,$D6,$BB,$0A,$85 +.db $25,$A5,$65,$38,$E5,$25,$85,$65,$A5,$64,$E9,$00,$85,$64,$A4,$66 +.db $B9,$FA,$04,$18,$65,$64,$A8,$AD,$F5,$04,$8D,$00,$80,$B1,$9F,$85 +.db $9E,$B1,$8C,$85,$99,$A8,$29,$1F,$09,$80,$85,$33,$A9,$00,$85,$32 +.db $98,$29,$20,$D0,$09,$AD,$F3,$04,$8D,$00,$80,$4C,$C4,$BC,$AD,$F4 +.db $04,$8D,$00,$80,$A4,$65,$A5,$67,$29,$F0,$19,$14,$BD,$A8,$B1,$32 +.db $A8,$AD,$F5,$04,$8D,$00,$80,$B1,$DA,$85,$96,$20,$14,$BE,$20,$38 +.db $BE,$A6,$1D,$A5,$65,$18,$7D,$D6,$BB,$85,$0F,$A5,$64,$69,$00,$85 +.db $0E,$A0,$10,$AD,$24,$06,$F0,$02,$A0,$18,$84,$2B,$A5,$67,$18,$65 +.db $2B,$85,$11,$B0,$04,$C9,$F0,$90,$0A,$18,$69,$10,$85,$11,$A4,$66 +.db $C8,$84,$10,$60,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01 +.db $01,$01,$01,$01,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02,$02 +.db $02,$02,$02,$02,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03,$03 +.db $03,$03,$03,$03,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04,$04 +.db $04,$04,$04,$04,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05,$05 +.db $05,$05,$05,$05,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06,$06 +.db $06,$06,$06,$06,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07,$07 +.db $07,$07,$07,$07,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08,$08 +.db $08,$08,$08,$08,$09,$09,$09,$09,$09,$09,$09,$09,$09,$09,$09,$09 +.db $09,$09,$09,$09,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A +.db $0A,$0A,$0A,$0A,$0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B,$0B +.db $0B,$0B,$0B,$0B,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C +.db $0C,$0C,$0C,$0C,$0D,$0D,$0D,$0D,$0D,$0D,$0D,$0D,$0D,$0D,$0D,$0D +.db $0D,$0D,$0D,$0D,$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E,$0E +.db $0E,$0E,$0E,$0E,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F +.db $0F,$0F,$0F,$0F,$A5,$96,$C9,$70,$B0,$10,$C9,$60,$90,$0B,$29,$0F +.db $A8,$B9,$6C,$BE,$F0,$03,$4C,$7C,$BE,$60,$A9,$27,$8D,$03,$80,$20 +.db $00,$E0,$A9,$3F,$8D,$03,$80,$60,$AD,$DE,$06,$D0,$17,$AD,$DC,$06 +.db $D0,$12,$A5,$E1,$C9,$03,$D0,$0D,$A0,$00,$A5,$96,$C9,$F8,$F0,$01 +.db $C8,$8C,$DD,$06,$60,$A5,$1E,$C9,$08,$D0,$F9,$A5,$96,$C9,$F8,$D0 +.db $F3,$A9,$00,$85,$15,$85,$14,$A9,$03,$85,$E1,$60,$01,$01,$00,$01 +.db $00,$01,$00,$00,$01,$00,$00,$00,$00,$00,$00,$00,$A5,$19,$29,$04 +.db $F0,$2B,$A9,$04,$49,$FF,$25,$19,$85,$19,$A9,$10,$85,$15,$A5,$E1 +.db $C9,$03,$F0,$04,$A9,$0F,$85,$8F,$A5,$67,$18,$69,$10,$29,$F0,$85 +.db $67,$C9,$F0,$90,$07,$18,$69,$10,$85,$67,$E6,$66,$60,$A9,$00,$85 +.db $14,$A5,$0F,$38,$E5,$65,$A5,$0E,$E5,$64,$30,$10,$A5,$65,$18,$69 +.db $10,$29,$F0,$85,$65,$A5,$64,$69,$00,$85,$64,$60,$A5,$65,$38,$E9 +.db $10,$09,$0F,$85,$65,$A5,$64,$E9,$00,$85,$64,$60,$00,$28,$00,$2C +.db $A9,$00,$8D,$00,$20,$8D,$01,$20,$A5,$25,$0A,$AA,$A0,$00,$AD,$02 +.db $20,$BD,$D9,$BE,$8D,$06,$20,$BD,$D8,$BE,$8D,$06,$20,$B1,$32,$10 +.db $1A,$C9,$FF,$F0,$2A,$29,$7F,$85,$2B,$20,$30,$BF,$B1,$32,$8D,$07 +.db $20,$C6,$2B,$D0,$F4,$20,$30,$BF,$4C,$FD,$BE,$85,$2B,$20,$30,$BF +.db $B1,$32,$8D,$07,$20,$C6,$2B,$D0,$F9,$20,$30,$BF,$4C,$FD,$BE,$60 +.db $E6,$32,$D0,$02,$E6,$33,$60,$A8,$AB,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 diff --git a/stomper/smwstomp.asm b/stomper/smwstomp.asm new file mode 100644 index 0000000..3ea9e18 --- /dev/null +++ b/stomper/smwstomp.asm @@ -0,0 +1,450 @@ +;SMW Stomper +;A Demonstration of Smooth Mid-Screen Vertical Scrolling +;WITHOUT the need for an 8 scanline 'buffer' region +;Quietust, 2002/05/18 +temp: +temp_l: .block 1 +temp_h: .block 1 + +even_frame: .block 1 +shake_y: .block 1 +screen_x: .block 1 +screen_y: .block 1 +stomper_x: .block 1 +stomper_y: .block 1 +irq_num: .block 1 +stomper_mode: .block 1 +stomper_timer: .block 1 +stompershake_y: .block 1 + +.org $8000 +.include "smwstomp/smwnsf.dat" +.org $C000 +stomper: +.db $00,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$06,$0B,$0C,$0D +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$0F,$10,$11,$12,$13,$14,$0C,$15,$16,$09,$17,$18,$19,$1A +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$1B,$1C,$1D,$1E,$07,$08,$1F,$06,$0C,$20,$21,$22,$23,$24 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$25,$26,$27,$28,$29,$15,$2A,$2B,$2C,$2D,$15,$2E,$2F,$30 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$06,$0B,$0C,$0D +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$0F,$10,$11,$12,$13,$14,$0C,$15,$16,$09,$17,$18,$19,$1A +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$1B,$1C,$1D,$1E,$07,$08,$1F,$06,$0C,$20,$21,$22,$23,$24 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$25,$26,$27,$28,$29,$15,$2A,$2B,$2C,$2D,$15,$2E,$2F,$30 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$06,$0B,$0C,$0D +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$0F,$10,$11,$12,$13,$14,$0C,$15,$16,$09,$17,$18,$19,$1A +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$1B,$1C,$1D,$1E,$07,$08,$1F,$06,$0C,$20,$21,$22,$23,$24 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$25,$26,$27,$28,$29,$15,$2A,$2B,$2C,$2D,$15,$2E,$2F,$30 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$06,$0B,$0C,$0D +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$0F,$10,$11,$12,$13,$14,$0C,$15,$16,$09,$17,$18,$19,$1A +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$1B,$1C,$1D,$1E,$07,$08,$1F,$06,$0C,$20,$21,$22,$23,$24 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$25,$26,$27,$28,$29,$15,$2A,$2B,$2C,$2D,$15,$2E,$2F,$30 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$06,$0B,$0C,$0D +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$0F,$10,$11,$12,$13,$14,$0C,$15,$16,$09,$17,$18,$19,$1A +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$1B,$1C,$1D,$1E,$07,$08,$1F,$06,$0C,$20,$21,$22,$23,$24 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$25,$26,$27,$28,$29,$15,$2A,$2B,$2C,$2D,$15,$2E,$2F,$30 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$06,$0B,$0C,$0D +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$0F,$10,$11,$12,$13,$14,$0C,$15,$16,$09,$17,$18,$19,$1A +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$1B,$1C,$1D,$1E,$07,$08,$1F,$06,$0C,$20,$21,$22,$23,$24 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$25,$26,$27,$28,$29,$15,$2A,$2B,$2C,$2D,$15,$2E,$2F,$30 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$0A,$06,$0B,$0C,$0D +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$0F,$10,$11,$12,$13,$14,$0C,$15,$16,$09,$17,$18,$19,$1A +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$1B,$1C,$1D,$1E,$07,$08,$1F,$06,$0C,$20,$21,$22,$23,$24 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$25,$26,$27,$28,$29,$15,$2A,$2B,$2C,$2D,$15,$2E,$2F,$30 +.db $0E,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3A,$3B,$3C,$3D,$3E,$3F +.db $40,$41,$42,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$43,$44,$45,$46,$47,$44,$45,$46,$47,$44,$45,$46,$47,$44,$45 +.db $46,$47,$48,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.db $44,$00,$00,$00,$00,$00,$00,$00,$44,$00,$00,$00,$00,$00,$00,$00 +.db $44,$00,$00,$00,$00,$00,$00,$00,$44,$00,$00,$00,$00,$00,$00,$00 +.db $44,$00,$00,$00,$00,$00,$00,$00,$44,$00,$00,$00,$00,$00,$00,$00 +.db $44,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +palette: +.db $2D,$0F,$07,$17,$2D,$0F,$27,$17,$2D,$0F,$0C,$1C,$2D,$0F,$0F,$0F + +.fill $E000-*,$00 +reset: SEI + CLD + LDX #$00 + STX $8000 ;reset PRG/CHR swap + STX $2000 + STX $2001 + INX + STX $A000 ;and mirroring +ppuinit: LDA $2002 + BPL ppuinit + DEX + BPL ppuinit + TXS + INX + LDA $2002 + LDY #$20 + STY $2006 + STX $2006 + + LDY #$80 ;init the 'playfield' nametable + LDA #$4E +init_vram_1: STA $2007 ;bricks (top) + DEY + BNE init_vram_1 + + LDY #$10 +init_vram_2: LDA #$4C ;ceiling pattern + STA $2007 + LDA #$4D + STA $2007 + DEY + BNE init_vram_2 + + LDA #$00 + LDY #$80 + LDX #$03 +init_vram_3: STA $2007 ;the room + DEY + BNE init_vram_3 + DEX + BNE init_vram_3 + + LDY #$10 +init_vram_5: LDA #$49 ;floor pattern + STA $2007 + LDA #$4A + STA $2007 + DEY + BNE init_vram_5 + + LDY #$80 + LDA #$4B +init_vram_6: STA $2007 ;more bricks (bottom) + DEY + BNE init_vram_6 + + LDY #$40 + LDA #$AA +init_vram_7: STA $2007 ;and attrib table + DEY + BNE init_vram_7 + + LDA #$28 + STA $2006 + LDA #$00 + STA $2006 + STA temp_l + LDA #$C0 + STA temp_h + LDY #$00 +init_vram_8: LDA (temp),y ;and now, the stomper + STA $2007 + INC temp_l + BNE skip1 + INC temp_h +skip1: LDA temp_h + CMP #$C4 + BNE init_vram_8 + + LDA #$3F + STA $2006 + STX $2006 +init_pal: LDA palette,x ;load palette + STA $2007 + INX + CPX #$10 + BNE init_pal + + LDX #$00 + LDY #$00 +init_chr: STX $8000 ;setup CHR banks + STY $8001 + INX + INY + CPX #$03 + BPL chr_not1k + INY +chr_not1k: CPX #$06 + BNE init_chr + LDY #$00 + STX $8000 + STY $8001 + INX + INY + STX $8000 + STY $8001 + + LDA #$C0 + STA $4017 + JSR sound_reset ;init the sound code (stolen from SMW pirate) + INC $0700 + LDA #$00 + STA shake_y + STA screen_x + STA screen_y + STA stomper_mode + STA stomper_timer + STA stompershake_y + LDA #$FF + STA stomper_y + LDA #$2C + JSR sound_init ;start playing the castle tune + LDA #$88 + STA $2000 + CLI + JMP waitframe + +nmi: CLC + LDA even_frame + ADC #$01 + AND #$03 + STA even_frame + BNE no_scroll + INC screen_x + INC stomper_x +no_scroll: LDA #$88 + STA $2000 + LDA screen_x + STA $2005 + LDA shake_y + STA $2005 + LDA #$88 + STA $2000 + LDA #$1E + STA $2001 ;main screen turn on + LDX stomper_mode ;okay, what are we doing? + BEQ stomp_init + DEX + BEQ stomp_wait + DEX + BEQ stomp_creep + DEX + BEQ stomp_fall + DEX + BEQ stomp_shake + DEX + BEQ stomp_riseshake + DEX + BEQ stomp_rise + JMP drawpipe + +stomp_init: INC stomper_mode ;setup, start a delay timer + LDA #$80 + STA stomper_timer + JMP drawpipe + +stomp_wait: DEC stomper_timer ;wait a bit before it appears + BEQ wait_done + JMP drawpipe + +stomp_creep: DEC stomper_timer ;creep down a little bit... + BEQ creep_alldone + LDA stomper_timer + AND #$03 + CMP #$03 + BNE creep_done + DEC stomper_y +creep_done: JMP drawpipe + +stomp_fall: DEC stomper_timer ;and then fall down at full speed + BEQ fall_alldone + DEC stomper_y + DEC stomper_y + DEC stomper_y + DEC stomper_y + JMP drawpipe +stomp_shake: DEC stomper_timer ;and slam into the floor + BEQ shake_alldone + LDA even_frame + AND #$01 + BEQ shake_up + LDA #$FE + STA shake_y + JMP shake_done +shake_up: LDA #$02 + STA shake_y +shake_done: JMP drawpipe + +stomp_riseshake:DEC stomper_timer ;keep shaking the floor a bit + BEQ riseshake_alldone ;while it's rising + INC stomper_y + INC stomper_y + LDA even_frame + AND #$01 + BEQ riseshake_up + LDA #$FE + STA shake_y + JMP riseshake_done +riseshake_up: LDA #$02 + STA shake_y +riseshake_done: STA stompershake_y + JMP drawpipe + +stomp_rise: DEC stomper_timer ;done shaking, rise back into the ceiling + BEQ rise_alldone + INC stomper_y + INC stomper_y + JMP drawpipe + +wait_done: INC stomper_mode + LDA #$4C + STA stomper_timer + LDA #$A0 + STA stomper_x + LDA #$EF + STA stomper_y + JMP drawpipe +creep_alldone: INC stomper_mode + LDA #$24 + STA stomper_timer + DEC stomper_y + JMP drawpipe +fall_alldone: INC stomper_mode + LDA #$40 + STA stomper_timer + LDA #$1D + JSR sound_init + LDA #$0F + JSR sound_init ;play a suitable sound + JMP drawpipe +shake_alldone: INC stomper_mode + LDA #$20 + STA stomper_timer + JMP drawpipe +riseshake_alldone: + INC stomper_mode + LDA #$32 + STA stomper_timer + LDA #$00 + STA shake_y + STA stompershake_y + JMP drawpipe +rise_alldone: LDA #$00 + STA stomper_mode + JMP drawpipe + +drawpipe: LDA stomper_y ;set up MMC3 interrupts + CMP #$80 + BPL maybe_pipe + CMP #$4F + BMI no_pipe + BPL yes_pipe +maybe_pipe: CMP #$EE + BPL no_pipe +yes_pipe: LDA #$27 + CLC + ADC shake_y + STA $C000 + STA $C001 + STA $E001 + LDA #$FF + STA irq_num +no_pipe: JSR sound_play ;play music + RTI + +irq: INC irq_num ;where is it? + BEQ first_irq ;(yeah, I *should* save regs) + BNE second_irq ;(but this is timing-critical code) + +first_irq: LDA stomper_y ;top of pipe + CLC + ADC stompershake_y + STA screen_y + ASL A + ASL A + AND #$E0 + LDY #$8A + STY $2000 + LDY screen_y + + LDX #$08 +spin1: DEX + BNE spin1 + + LDX stomper_x + STX $2005 + STY $2005 + STX $2005 + STA $2006 + STX $2005 + STY $2005 + LDA stomper_y + CLC + ADC #$12 + CLC + ADC stompershake_y + EOR #$FF + STA $E000 + STA $C000 + STA $C001 + STA $E001 + JMP end_irq + +second_irq: LDX stomper_y ;bottom of pipe + INX + TXA + CLC + ADC #$10 + EOR #$FF + CLC + ADC #$28 + CLC + ADC stompershake_y + STA screen_y + ASL A + ASL A + AND #$E0 + LDY #$88 + STY $2000 + LDY screen_y + + LDX #$05 +spin2: DEX + BNE spin2 + NOP + NOP + + LDX screen_x + STX $2005 + STY $2005 + STX $2005 + STA $2006 + STX $2005 + STY $2005 + STA $E000 +end_irq: RTI + +waitframe: JMP waitframe ;wait forever +sound_reset: .equ $85D6 +sound_init: .equ $8E2F +sound_play: .equ $862A + +.fill $FFFA-*,$00 +.org $FFFA ;interrupt vectors +.dw nmi +.dw reset +.dw irq + +.end diff --git a/stomper/smwstomp.chr b/stomper/smwstomp.chr new file mode 100644 index 0000000000000000000000000000000000000000..e1bc65ef743f386a1ed9fb2c2f1a01b49afc4155 GIT binary patch literal 8192 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 J@c%3V{~H(;WeNZQ literal 0 HcmV?d00001 diff --git a/stress/FIREWAVE.ASM b/stress/FIREWAVE.ASM new file mode 100644 index 0000000..25c311f --- /dev/null +++ b/stress/FIREWAVE.ASM @@ -0,0 +1,64 @@ + dc.b 2 + dc.b 1 + dc.b 2 + dc.b 3 + dc.b 3 + dc.b 4 + dc.b 4 + dc.b 3 + dc.b 3 + dc.b 2 + dc.b 2 + dc.b 1 + dc.b 1 + dc.b 1 + dc.b 2 + dc.b 2 + dc.b 2 + dc.b 2 + dc.b 1 + dc.b 1 + dc.b 1 + dc.b 1 + dc.b 2 + dc.b 3 + dc.b 4 + dc.b 5 + dc.b 5 + dc.b 5 + dc.b 5 + dc.b 4 + dc.b 3 + dc.b 2 + dc.b 1 + dc.b 1 + dc.b 0 + dc.b 1 + dc.b 1 + dc.b 1 + dc.b 1 + dc.b 1 + dc.b 1 + dc.b 1 + dc.b 1 + dc.b 2 + dc.b 3 + dc.b 4 + dc.b 5 + dc.b 5 + dc.b 6 + dc.b 5 + dc.b 5 + dc.b 3 + dc.b 2 + dc.b 1 + dc.b 0 + dc.b 0 + dc.b 1 + dc.b 2 + dc.b 2 + dc.b 1 + dc.b 0 + dc.b 0 + dc.b 1 + dc.b 2 diff --git a/stress/Header_Mapper0 b/stress/Header_Mapper0 new file mode 100644 index 0000000000000000000000000000000000000000..57c2980a8f517d2b679b218b1ef9d4ddcb557206 GIT binary patch literal 16 QcmeZs4VGeJWMqH=01pHK1poj5 literal 0 HcmV?d00001 diff --git a/stress/Make_NEStress b/stress/Make_NEStress new file mode 100644 index 0000000..2e35572 --- /dev/null +++ b/stress/Make_NEStress @@ -0,0 +1,2 @@ +DAsm NEStress.asm -f3 -v3 +Join Header_Mapper0 a.out Tanks.CHR AS NEStress.NES diff --git a/stress/NEStress.NES b/stress/NEStress.NES new file mode 100644 index 0000000000000000000000000000000000000000..db668a6aea044c1bc32a9863ee3c00a3038b1e22 GIT binary patch literal 40976 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 YBmUe=7t33pBcpB>(^b literal 0 HcmV?d00001 diff --git a/stress/NEStress.asm b/stress/NEStress.asm new file mode 100644 index 0000000..6893e5c --- /dev/null +++ b/stress/NEStress.asm @@ -0,0 +1,4861 @@ +;NEStress program +;------------------- +;Binary created using DAsm 2.12 running on WinUAE. + + PROCESSOR 6502 +OVERFLOWF EQU #$0006 ;To check the V-flag +TMPCOUNT EQU #$0007 ;Temporary Counter +READY EQU #$000E ;Is the game ready for the player's input? +CONTROLLER1 EQU #$0010 ;Controller 1 data +CONTROLLER2 EQU #$0011 ;Controller 2 data +CONTROLLER3 EQU #$0012 ;Controller 3 data +CONTROLLER4 EQU #$0013 ;Controller 4 data +CONTROLER1X EQU #$0014 ;Controller 1 Xdata +CONTROLER2X EQU #$0015 ;Controller 2 Xdata +P1RANDBASE EQU #$0018 ;Random number storage for player 1's position +P2RANDBASE EQU #$0019 ;Random number storage for player 2's position +FADESTATUS EQU #$001B ;Controls fading +;----------------------- +PALETTEPTR EQU #$24 ;Pointer to Current Palette. +SCORE EQU #$30 ;Score on the test. +SCORE_T EQU #$32 ;Temp reg for score. +;----------------------- +VBWAIT EQU #$0050 ;Delays updating of game data +VBDELAY EQU #$0051 ;Timing for fades... +VBPASS EQU #$0052 ;Flag that VB has passed. +VBODD EQU #$0053 ;Flag for even/odd VBs. +PPU2000 EQU #$0058 ;$2000 of PPU + +;------------------------------------------------------- +GAMESCREEN EQU #$0059 ;ID for which game screen is running... + ;.. sometimes also for what CHR-ROM in use... + ;0 = Tanks Screen + ;1 = Planets Screen + ;2 = Title Screen + ;3 = / + ;4 = Controls Screen + ;5 = Credits Screen + ;6 = Victory Screen +;--------------------------------------- +PLANETCHANGE EQU #$005A ;Flag to change planets on selection screen. + +IOREADS EQU #$0500 ;Storage of reads from $4016, 48 bytes. + +TEMPPAL EQU #$0600 ;Temporary storage for palette. +SOFTTERRAIN EQU #$06BF ;$700-64-1 + +;---------------------- +;Sprite-RAM +;---------------------- +BALLCHR EQU #$0701 ;Ball's Sprite +P1VHIY EQU #$0711 ;Sprites for Y,X Initial Velocity +P1VLOY EQU #$0715 +P1VHIX EQU #$0719 +P1VLOX EQU #$071D +P2VHIY EQU #$0721 ;Sprites for Y,X Initial Velocity +P2VLOY EQU #$0725 +P2VHIX EQU #$0729 +P2VLOX EQU #$072D +P1SCRSCORE EQU #$0731 ;Score on-screen +P2SCRSCORE EQU #$0735 +P1CHRPOSY EQU #$0750 ;Sprites for tank's position +P1CHRPOSX EQU #$0753 +P2CHRPOSY EQU #$0758 +P2CHRPOSX EQU #$075B +EXPLSPR1 EQU #$0741 ;Sprites for explosions +EXPLSPR2 EQU #$0745 ;" " +EXPLSPR3 EQU #$0749 ;" " +EXPLSPR4 EQU #$074D ;" " + + + ORG $8000 ;32Kb PRG-ROM, 8Kb CHR-ROM + + dc.b "FluBBa YaDa YaDa" + + +Reset_Routine SUBROUTINE + cld ;Clear decimal flag + sei ;Disable interrupts +;---------------------------------------------------------- + lda $2002 + sta P1RANDBASE ;Randomize Stuff??? + lda $4016 + sta P2RANDBASE + + +;---------------------------------------------------------- + +.WaitV01 lda $2002 + bpl .WaitV01 ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx PPU2000 + stx $2001 ;Screen display off, amongst other things + dex + txs ;Top of stack at $1FF + +;Clear (most of) the NES' WRAM. + ldy #$07 ;To clear 8 x $100 bytes, from $0000 to $07FF. + sty $01 ;Store count value in $01 + ldy #$00 + sty $00 + lda #$00 +.Clear + sta ($00),y ;Clear $100 bytes + dey + bne .Clear + + dec $01 ;Decrement "banks" left counter + bpl .Clear ;Do next if >= 0 + + jsr WipePPU + lda #$00 ; What is filled in the SPRRAM + jsr ClearSPRRAM + +;------------------------------------------------------------------- +;******************************************************************* +;------------------------------------------------------------------- +;Title Screen +.TitleMain + lda #$02 + sta GAMESCREEN ;Set CHR-ROM for mapper 3?? + +TITLESCROLL EQU $0000 +TITLESCROLL1 EQU $0001 +TITLESCROLL2 EQU $0002 +TITLESELECT EQU $0003 +BUTTONDOWN EQU $0006 + + lda #$0D + jsr SetPalette + + lda #<.TitleMap + sta $00 + lda #>.TitleMap + sta $01 + lda #$00 ;Screen 0 + jsr PrintFullScreen + + lda #$00 + sta $2003 + lda #$4E ;Copy sprite to SPR-RAM? + sta $0700 + lda #$01 + sta $0701 + lda #$00 + sta $0702 + lda #$66 + sta $0703 + + lda .TitleCursorPos + sta $0704 + lda #$02 + sta $0705 + lda #$01 + sta $0706 + lda #$40 + sta $0707 + + lda #$00 + sta $2005 + sta $2005 + + sta TITLESCROLL + sta TITLESCROLL1 + sta TITLESCROLL2 + sta VBPASS + sta TITLESELECT + sta BUTTONDOWN + +;************************************ + + +;Enable vblank interrupts, etc. + lda #%10001000 + sta $2000 + lda #%00011110 ;Screen on, sprites on, show leftmost 8 pixels, colour + sta $2001 + +.TitleLoop + lda VBPASS + beq .TitleLoop ;Wait for VBlank to pass... + +.TitleLoop0 + lda $2002 + bmi .TitleLoop0 ;Yet again.... + +.TitleLoop0A + lda $2002 + and #$40 + bne .TitleLoop0A ;Wait for sprite 0 clear... + + lda #$00 + sta VBPASS + ldx TITLESCROLL + + + + +.TitleLoop1 + lda $2002 + and #%00010000 + bne .TitleLoop1 + + lda CONTROLLER1 ;Check for controller press + and #%00010000 + beq .TitleLoop0Z + jmp .ExitTitle +.TitleLoop0Z + + inc TITLESCROLL2 + lda TITLESCROLL2 + cmp #$02 + bne .NoUpdateTitleScroll + lda #$00 + sta TITLESCROLL2 + + lda .TitleSINTAB,X ;Set up wavy scrolling. + sta $2005 + lda #$00 + sta $2005 + inx + cpx #$40 + bne .NoUpdateTitleScroll + ldx #$00 +.NoUpdateTitleScroll + +.TitleLoop0B + lda $2002 + and #$40 + beq .TitleLoop1 ;Test for sprite 0 hit yet. + + lda #$00 + sta $2005 + sta $2005 + + lda CONTROLLER1 + and #%00100000 + beq .NoTitleSelect + lda BUTTONDOWN + bne .NoTitleStart + lda #$01 + sta BUTTONDOWN + inc TITLESELECT + ldx TITLESELECT + lda .TitleCursorPos,X + sta $0704 + lda TITLESELECT + cmp #$05 + bne .NoTitleSelectClear + lda #$00 + sta TITLESELECT + lda .TitleCursorPos + sta $0704 +.NoTitleSelectClear + jmp .NoTitleStart +.NoTitleSelect + lda #$00 + sta BUTTONDOWN + lda CONTROLLER1 + and #%11010000 + beq .NoTitleStart + jmp .ExitTitle +.NoTitleStart + jmp .TitleLoop + +.TitleCursorPos dc.b #$60,#$70,#$80,#$90,#$A0 + +.TitleSINTAB + dc.b 1,3,7,13,20,30,40,50,60,70,80,90,95,100,101,102,103,103,104,103,100,90,85,80,74,67,59,49,36 + INCLUDE FireWave.asm + +.TitleMap + dc.b "01234 First line 78901" + dc.b "0 I 1" + dc.b " AAAD AAAD AAAAAAAAAA 1" + dc.b " A D A D A D 1" + dc.b " A D AAAD A D A DA D 1" + dc.b " A DA DA D A D 1" + dc.b " A D A D A DDDD D 1" + dc.b " A DDDA D A D A D 1" + dc.b " A D A D A D A D 1" + dc.b " ADDD AAAD ADDD ADDD 1" + dc.b "0 000000000000000000001" + dc.b "0 1" + dc.b "0 PPU Test (Graphics) 1" + dc.b "0 1" + dc.b "0 pAPU Test (Sound) 1" + dc.b "0 1" + dc.b "0 CPU Test (Code) 1" + dc.b "0 1" + dc.b "0 IO-Ports (Controllers)1" + dc.b "0 1" + dc.b "0 Exit 1" + dc.b "0 1" + dc.b "0 1" + dc.b "0 ---------------------------- 1" + dc.b "0 1" + dc.b "0 1" + dc.b "0 1" + dc.b "0 1" + dc.b "0 1" + dc.b "01234 Last Line 78901" + + + INCLUDE SolarTitleNAM.asm + +.Mess000 + dc.b "--------------------------------",$0A + dc.b " * PPU Test 1: $2005/6/7. * ",$0A + dc.b "--------------------------------",$0A,$0A + + dc.b " PPU Normal write/read:",$0A + dc.b " PPU Write, read, write:",$0A + dc.b " PPU First read then write:",$0A + dc.b " PPU First read correct:",$0A + dc.b " PPU Mixed adr/data write:",$0A + dc.b " PPU $3000 Mirroring:",$0A + dc.b " PPU $3FFF-$0000 boundary:",$0A + dc.b " Mix writes to $2005/6:",$0A + dc.b " PPU Palette write/read:",$0A,$0A + + dc.b " Score: /9",$0A,$0A + + dc.b " Press Start",$0 + + +.Mess010 + dc.b "--------------------------------",$0A + dc.b " * PPU Test 2: Sprites. * ",$0A + dc.b "--------------------------------",$0A,$0A + + dc.b " Sprite Collision:",$0A + dc.b " Sprite Limiter:",$0A + dc.b " CPU write CPU read:",$0A + dc.b " DMA write CPU read:",$0A + dc.b " Dif. DMA write CPU read:",$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A + + dc.b " Score: /13",$0A,$0A + + dc.b " Press Start",$0 + +.Mess020 + dc.b "--------------------------------",$0A + dc.b " * PPU Test 3: VBl ($2002). * ",$0A + dc.b "--------------------------------",$0A,$0A + + dc.b " Bit 7 cleared after read:",$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A + + dc.b " Score: /14",$0A,$0A + + dc.b " Press Start",$0 + + +.Mess040 + dc.b "--------------------------------",$0A + dc.b " * pAPU Test 1: $4000-$4003. * ",$0A + dc.b "--------------------------------",$0A,$0A +.Mess041 + dc.b $0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A + dc.b " Score: /0",$0A,$0A + dc.b " Press Start",0 + + +.Mess080 + dc.b "--------------------------------",$A + dc.b " * CPU Test 1: Aritmethic ops * ",$A + dc.b "--------------------------------",$A,$A +.Mess081 + dc.b " CPU ADC:",$A + dc.b " CPU SBC:",$A + dc.b " CPU CMP:",$A + dc.b " CPU CPX:",$A + dc.b " CPU CPY:",$A + dc.b " CPU INC:",$A + dc.b " CPU DEC:",$A + dc.b " CPU INX:",$A + dc.b " CPU DEX:",$A + dc.b " CPU INY:",$A + dc.b " CPU DEY:",$A + dc.b " CPU ASL:",$A + dc.b " CPU LSR:",$A + dc.b " CPU ROL:",$A + dc.b " CPU ROR:",$A,$A,$A,$A,$A + dc.b " Score: /15",$A,$A + dc.b " Press Start",0 + +.Mess090 + dc.b "--------------------------------",$A + dc.b " * CPU Test 2: Logic ops * ",$A + dc.b "--------------------------------",$A,$A +.Mess091 + dc.b " CPU LDA:",$A + dc.b " CPU LDX:",$A + dc.b " CPU LDY:",$A + dc.b " CPU TAX:",$A + dc.b " CPU TAY:",$A + dc.b " CPU TSX:",$A + dc.b " CPU TXA:",$A + dc.b " CPU TXS:",$A + dc.b " CPU TYA:",$A + dc.b " CPU PLA:",$A + dc.b " CPU AND:",$A + dc.b " CPU EOR:",$A + dc.b " CPU ORA:",$A + dc.b " CPU BIT:",$A,$A,$A,$A,$A,$A + dc.b " Score: /29",$A,$A + dc.b " Press Start",0 + +.Mess0A0 + dc.b "--------------------------------",$0A + dc.b " * CPU Test 3: Addresses * ",$0A + dc.b "--------------------------------",$0A,$0A +.Mess0A1 + dc.b " Adr Immediate:",$0A + dc.b " Adr Zero Page:",$0A + dc.b " Adr Zero Page,X:",$0A + dc.b " Adr Absolute:",$0A + dc.b " Adr Absolute,X:",$0A + dc.b " Adr Absolute,Y:",$0A + dc.b " Adr (Indirect,X):",$0A + dc.b " Adr (Indirect),Y:",$0A + dc.b " JMP:",$0A + dc.b " JMP():",$0A + dc.b " JSR:",$0A + dc.b " RTS:",$0A + dc.b " RTI:",$0A,$0A,$0A,$0A,$0A,$0A,$0A + dc.b " Score: /42",$0A,$0A + dc.b " Press Start",0 + +.Mess0B0 + dc.b "--------------------------------",$0A + dc.b " * CPU Test 4: Misc * ",$0A + dc.b "--------------------------------",$0A,$0A +.Mess0B1 + dc.b " Write / read SR:",$0A + dc.b " BRK flags:",$0A + dc.b " BRK return adr:",$0A + dc.b " Stack adr:",$0A + dc.b " CPU RAM:",$0A + dc.b " CPU RAM Mirror:",$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A + dc.b " Score: /48",$0A,$0A + dc.b " Press Start",0 + + +.Mess0C0 + dc.b "--------------------------------",$0A + dc.b " * IO Test 1: $4016, $4017. * ",$0A + dc.b "--------------------------------",$0A,$0A,$0A +.Mess0C1 + dc.b " $4016",$0A + dc.b " Read 1-8:",$0A + dc.b " Read 9-16:",$0A + dc.b " Read 17-24:",$0A,$0A + dc.b " $4017",$0A + dc.b " Read 1-8:",$0A + dc.b " Read 9-16:",$0A + dc.b " Read 17-24:",$0A,$0A + dc.b $0A,$0A,$0A,$0A,$0A,$0A,$0A,$0A + dc.b " Score: /0",$0A,$0A + dc.b " Press Select & Start",0 + +.Mess0D0 + dc.b " -------------------",$0A + dc.b " | ^ |",$0A + dc.b " | |",$0A + dc.b " | v Se St B A |",$0A + dc.b " -------------------",$0A + dc.b " -------------------",$0A + dc.b " | ^ |",$0A + dc.b " | |",$0A + dc.b " | v Se St B A |",$0A + dc.b " -------------------",$0A + dc.b " -------------------",$0A + dc.b " | ^ |",$0A + dc.b " | |",$0A + dc.b " | v Se St B A |",$0A + dc.b " -------------------",$0A + dc.b " -------------------",$0A + dc.b " | ^ |",$0A + dc.b " | |",$0A + dc.b " | v Se St B A |",$0A + dc.b " -------------------",$0A + dc.b $0A,$0A,$0A + dc.b " Score: /0",$0A,$0A + dc.b " Press Select & Start",0 + + + +DrpcjrMess + dc.b "DrPC",0 +FamiMess + dc.b "Fami",0 +NesMess + dc.b "NES",0 +YesMess + dc.b "Yes",0 +NoMess + dc.b "No",0 +OkMess + dc.b "Ok",0 +ErrMess + dc.b "Error",0 +ErrMessZ + dc.b "Error in Z-Flag",0 +ErrMessN + dc.b "Error in N-Flag",0 +ErrMessV + dc.b "Error in V-Flag",0 +ErrMessC + dc.b "Error in C-Flag",0 +ErrMessD + dc.b "Error in D-Flag",0 +ErrMessI + dc.b "Error I-Flag",0 +ErrMessB + dc.b "Error B-Flag",0 +ErrMessR + dc.b "Error in result",0 +ErrMessW + dc.b "Error in wrap",0 +;---------------------------------------------------------------- +.ExitTitle + lda TITLESELECT + cmp #$00 + beq StartPPUTest + cmp #$01 + beq StartpAPUTest + cmp #$02 + beq StartCPUTest + cmp #$03 + beq StartIOTest + jmp TestEnd + +StartpAPUTest + jmp pAPUTest +StartPPUTest + jmp PPUTest +StartCPUTest + jmp CPUTest +StartIOTest +;---------------------------------------------------------------- +IOTest ;Test IO-ports (controllers) + +.WaitV10 + lda $2002 + bpl .WaitV10 ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx $2001 ;Screen display off, amongst other things + + + jsr WipePPU + + lda #<.Mess0C0 + sta $00 + lda #>.Mess0C0 + sta $01 + lda #$20 + sta $02 + lda #$40 + sta $03 + jsr NESWriter0 +;----------------------------- + lda #%10001000 + sta $2000 + lda #%00011110 ;Screen on, sprites on, show leftmost 8 pixels, colour + sta $2001 + + lda #$00 + sta TMPCOUNT + +.IOTest00 + lda VBPASS + beq .IOTest00 ;Wait for VBlank to pass... + + clc + lda #$21 ;Set PPU address for the first 24 values. + sta $2006 + lda TMPCOUNT + asl + asl + cmp #$60 + bmi .SkipRow + adc #$40 +.SkipRow + adc #$0C + sta $2006 + + lda TMPCOUNT + clc + adc #$08 + tax + ldy #8 +.IOLoop1_0 + dex + lda $500,x + lsr + lsr + lsr + lsr + clc + adc #$30 + sta $2007 + lda $500,x + and #$0F + adc #$30 + sta $2007 + dey + bne .IOLoop1_0 + + clc + lda TMPCOUNT + adc #$08 + cmp #$30 + bne .NoOverflow + lda #$00 +.NoOverflow + sta TMPCOUNT + jmp .IOSkipBig + + +.IOSkipBig + lda #$00 + sta VBPASS + sta $2005 + sta $2005 + + lda CONTROLLER1 + eor #$30 ; Check for both [Select] and [Start]. + bne .IOTest00 + +;----------------------------- +IO1_End + ldx #$23 + ldy #$28 + jsr PrintScore + jsr ScrOnWaitKey + +;----------------------------- +.WaitV11 + lda $2002 + bpl .WaitV11 ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx $2001 ;Screen display off, amongst other things + + + jsr WipePPU + + lda #<.Mess0D0 + sta $00 + lda #>.Mess0D0 + sta $01 + lda #$20 + sta $02 + lda #$40 + sta $03 + jsr NESWriter0 +;----------------------------- + lda #%10001000 + sta $2000 + lda #%00011110 ;Screen on, sprites on, show leftmost 8 pixels, colour + sta $2001 +.IOTest20 + lda VBPASS + beq .IOTest20 ;Wait for VBlank to pass... + +.IOLoop2 + lda #$20 ;Set PPU address. + sta $2006 + lda #$64 + sta $2006 + ldx #"^" + lda $503 ;Check Cont1 Up + and #1 + beq .NoCont1Up + ldx #1 +.NoCont1Up + stx $2007 + + lda #$20 ;Set PPU address. + sta $2006 + lda #$83 + sta $2006 + ldx #"<" + lda $501 ;Check Cont1 Left + and #1 + beq .NoCont1Left + ldx #1 +.NoCont1Left + stx $2007 + + lda #$20 ;Set PPU address. + sta $2006 + lda #$85 + sta $2006 + ldx #">" + lda $500 ;Check Cont1 Right + and #1 + beq .NoCont1Right + ldx #1 +.NoCont1Right + stx $2007 + + lda #$20 ;Set PPU address. + sta $2006 + lda #$A4 + sta $2006 + ldx #"V" + lda $502 ;Check Cont1 Down + and #1 + beq .NoCont1Down + ldx #1 +.NoCont1Down + stx $2007 + + + lda #$00 + sta VBPASS + sta $2005 + sta $2005 + + lda CONTROLLER1 + eor #$30 ; Check for both [Select] and [Start]. + bne .IOTest20 + + +;----------------------------- + jsr ScrOnWaitKey + +.TestNoKey1 + lda CONTROLLER1 + and #%11010000 + bne .TestNoKey1 +;----------------------------- + + jmp Reset_Routine + +;---------------------------------------------------------------- +;**************************************************************** +;---------------------------------------------------------------- +CPUTest ;Test Aritmethic operations + +.WaitV04 + lda $2002 + bpl .WaitV04 ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx PPU2000 + stx $2001 ;Screen display off, amongst other things + + jsr WipePPU + + lda #<.Mess080 + sta $00 + lda #>.Mess080 + sta $01 + lda #$20 + sta $02 + lda #$40 + sta $03 + jsr NESWriter0 + + lda #%00011110 ;Background on, sprites on, show leftmost 8 pixels, colour + sta $2001 +;----------------------------- +.CPUTest00 ;CMP + lda #$21 ;Where the msg prints. + sta $02 + lda #$09 + sta $03 + + lda #$40 ;Setup $6 for V-Flag detection + sta OVERFLOWF + +.CPULoop00 + clv + lda #$82 + cmp #4 + beq .CPUError00Z + bmi .CPUError00N + bvs .CPUError00V + bcc .CPUError00C + + bit OVERFLOWF ;Set V-Flag + lda #$7e + cmp #$7e + bne .CPUError00Z + bmi .CPUError00N + bvc .CPUError00V + bcc .CPUError00C + + cmp #$7f + beq .CPUError00Z + bpl .CPUError00N + bvc .CPUError00V + bcs .CPUError00C + + clv + lda #$ff + cmp #4 + beq .CPUError00Z + bpl .CPUError00N + bvs .CPUError00V + bcc .CPUError00C + +.CPUOk00 + jsr WriteOk + inc SCORE + jmp .CPUTest01 + +.CPUError00Z + jsr WriteErrorZ + jmp .CPUTest01 +.CPUError00N + jsr WriteErrorN + jmp .CPUTest01 +.CPUError00V + jsr WriteErrorV + jmp .CPUTest01 +.CPUError00C + jsr WriteErrorC +;----------------------------- +.CPUTest01 ;CPX + lda #$21 ;Where the msg prints. + sta $02 + lda #$29 + sta $03 +.CPULoop01 + clc + clv + lda #$82 + ldx #$82 + cpx #4 + beq .CPUError01Z + bmi .CPUError01N + bvs .CPUError01V + bcc .CPUError01C + ldx #$7e + sbc #4 + cpx #$7e + bne .CPUError01Z + bmi .CPUError01N + bvc .CPUError01V + bcc .CPUError01C + cpx #$7f + beq .CPUError01Z + bpl .CPUError01N + bvc .CPUError01V + bcs .CPUError01C + ldx #$FF + sbc #$7E + cpx #4 + beq .CPUError01Z + bpl .CPUError01N + bvs .CPUError01V + bcc .CPUError01C + +.CPUOk01 + jsr WriteOk + inc SCORE + jmp .CPUTest02 + +.CPUError01Z + jsr WriteErrorZ + jmp .CPUTest02 +.CPUError01N + jsr WriteErrorN + jmp .CPUTest02 +.CPUError01V + jsr WriteErrorV + jmp .CPUTest02 +.CPUError01C + jsr WriteErrorC +;----------------------------- +.CPUTest02 ;CPY + lda #$21 ;Where the msg prints. + sta $02 + lda #$49 + sta $03 +.CPULoop02 + clc + clv + lda #$82 + ldy #$82 + cpy #4 + beq .CPUError02Z + bmi .CPUError02N + bvs .CPUError02V + bcc .CPUError02C + ldy #$7e + sbc #4 + cpy #$7e + bne .CPUError02Z + bmi .CPUError02N + bvc .CPUError02V + bcc .CPUError02C + cpy #$7f + beq .CPUError02Z + bpl .CPUError02N + bvc .CPUError02V + bcs .CPUError02C + ldy #$FF + sbc #$7E + cpy #4 + beq .CPUError02Z + bpl .CPUError02N + bvs .CPUError02V + bcc .CPUError02C + +.CPUOk02 + jsr WriteOk + inc SCORE + jmp .CPUTest1 + +.CPUError02Z + jsr WriteErrorZ + jmp .CPUTest1 +.CPUError02N + jsr WriteErrorN + jmp .CPUTest1 +.CPUError02V + jsr WriteErrorV + jmp .CPUTest1 +.CPUError02C + jsr WriteErrorC +;----------------------------- +.CPUTest1 ;ADC + lda #$20 ;Where the msg prints. + sta $02 + lda #$C9 + sta $03 +.CPULoop1 + clc + lda #$7a + adc #4 + beq .CPUError1Z + bmi .CPUError1N + bvs .CPUError1V + bcs .CPUError1C + adc #4 + beq .CPUError1Z + bpl .CPUError1N + bvc .CPUError1V + bcs .CPUError1C + adc #$70 + beq .CPUError1Z + bpl .CPUError1N + bvs .CPUError1V + bcs .CPUError1C + adc #$e + bne .CPUError1Z + bmi .CPUError1N + bvs .CPUError1V + bcc .CPUError1C + lda #$94 + adc #$7f + beq .CPUError1Z + bmi .CPUError1N + bvs .CPUError1V + bcc .CPUError1C + adc #$e + cmp #$23 + bne .CPUError1R + + clc + sed + lda #$08 + adc #$08 + cmp #$10 + cld + bne .CPUError1D + +.CPUOk1 + jsr WriteOk + inc SCORE + jmp .CPUTest2 + +.CPUError1Z + jsr WriteErrorZ + jmp .CPUTest2 +.CPUError1N + jsr WriteErrorN + jmp .CPUTest2 +.CPUError1V + jsr WriteErrorV + jmp .CPUTest2 +.CPUError1C + jsr WriteErrorC + jmp .CPUTest2 +.CPUError1R + jsr WriteErrorR + jmp .CPUTest2 +.CPUError1D + jsr WriteErrorD +;----------------------------- +.CPUTest2 ;SBC + lda #$20 ;Where the msg prints. + sta $02 + lda #$E9 + sta $03 +.CPULoop2 + clc + lda #$82 + sbc #$81 + bne .CPUError2R + sec + lda #$3A + sbc #$3A + bne .CPUError2R + + + clc + lda #$82 + sbc #4 + beq .CPUError2Z + bmi .CPUError2N + bvc .CPUError2V + bcc .CPUError2C + sbc #$7d + bne .CPUError2Z + bmi .CPUError2N + bvs .CPUError2V + bcc .CPUError2C + sbc #$7 + beq .CPUError2Z + bpl .CPUError2N + bvs .CPUError2V + bcs .CPUError2C + sbc #$79 + beq .CPUError2Z + bmi .CPUError2N + bvc .CPUError2V + bcc .CPUError2C + cmp #$7F + bne .CPUError2R + + clc + lda #$7E + sbc #$7F + beq .CPUError2Z + bpl .CPUError2N + bvs .CPUError2V + bcs .CPUError2C + + sec + sed + lda #$10 + sbc #$08 + cmp #$08 + cld + bne .CPUError2D + +.CPUOk2 + jsr WriteOk + inc SCORE + jmp .CPUTest3 + +.CPUError2Z + jsr WriteErrorZ + jmp .CPUTest3 +.CPUError2N + jsr WriteErrorN + jmp .CPUTest3 +.CPUError2V + jsr WriteErrorV + jmp .CPUTest3 +.CPUError2C + jsr WriteErrorC + jmp .CPUTest3 +.CPUError2R + jsr WriteErrorR + jmp .CPUTest3 +.CPUError2D + jsr WriteErrorD +;----------------------------- +.CPUTest3 ;INC + lda #$21 ;Where the msg prints. + sta $02 + lda #$69 + sta $03 + +.CPULoop3 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$fe + sta $04 + lda #0 + inc $04 + beq .CPUError3Z + bpl .CPUError3N + bvc .CPUError3V + bcc .CPUError3C + + clc + lda #1 + inc $04 + bne .CPUError3Z + bmi .CPUError3N + bvc .CPUError3V + bcs .CPUError3C + + sec + clv + lda #$7f + sta $04 + lda #0 + inc $04 + beq .CPUError3Z + bpl .CPUError3N + bvs .CPUError3V + bcc .CPUError3C + +.CPUOk3 + jsr WriteOk + inc SCORE + jmp .CPUTest4 + +.CPUError3Z + jsr WriteErrorZ + jmp .CPUTest4 +.CPUError3N + jsr WriteErrorN + jmp .CPUTest4 +.CPUError3V + jsr WriteErrorV + jmp .CPUTest4 +.CPUError3C + jsr WriteErrorC +;----------------------------- +.CPUTest4 ;DEC + lda #$21 ;Where the msg prints. + sta $02 + lda #$89 + sta $03 + +.CPULoop4 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$01 + sta $04 + lda #$fe + dec $04 + bne .CPUError4Z + bmi .CPUError4N + bvc .CPUError4V + bcc .CPUError4C + + clc + dec $04 + beq .CPUError4Z + bpl .CPUError4N + bvc .CPUError4V + bcs .CPUError4C + + sec + clv + lda #$80 + sta $04 + lda #0 + dec $04 + beq .CPUError4Z + bmi .CPUError4N + bvs .CPUError4V + bcc .CPUError4C + +.CPUOk4 + jsr WriteOk + inc SCORE + jmp .CPUTest5 + +.CPUError4Z + jsr WriteErrorZ + jmp .CPUTest5 +.CPUError4N + jsr WriteErrorN + jmp .CPUTest5 +.CPUError4V + jsr WriteErrorV + jmp .CPUTest5 +.CPUError4C + jsr WriteErrorC +;----------------------------- +.CPUTest5 ;INX + lda #$21 ;Where the msg prints. + sta $02 + lda #$A9 + sta $03 + +.CPULoop5 + bit OVERFLOWF ;Set V-Flag + sec + ldx #$fe + lda #0 + inx + beq .CPUError5Z + bpl .CPUError5N + bvc .CPUError5V + bcc .CPUError5C + + clc + lda #1 + inx + bne .CPUError5Z + bmi .CPUError5N + bvc .CPUError5V + bcs .CPUError5C + + sec + clv + ldx #$7f + lda #0 + inx + beq .CPUError5Z + bpl .CPUError5N + bvs .CPUError5V + bcc .CPUError5C + +.CPUOk5 + jsr WriteOk + inc SCORE + jmp .CPUTest6 + +.CPUError5Z + jsr WriteErrorZ + jmp .CPUTest6 +.CPUError5N + jsr WriteErrorN + jmp .CPUTest6 +.CPUError5V + jsr WriteErrorV + jmp .CPUTest6 +.CPUError5C + jsr WriteErrorC +;----------------------------- +.CPUTest6 ;DEX + lda #$21 ;Where the msg prints. + sta $02 + lda #$C9 + sta $03 + +.CPULoop6 + bit OVERFLOWF ;Set V-Flag. + sec + ldx #$01 + lda #$fe + dex + bne .CPUError6Z + bmi .CPUError6N + bvc .CPUError6V + bcc .CPUError6C + + clc + dex + beq .CPUError6Z + bpl .CPUError6N + bvc .CPUError6V + bcs .CPUError6C + + sec + clv + ldx #$80 + lda #0 + dex + beq .CPUError6Z + bmi .CPUError6N + bvs .CPUError6V + bcc .CPUError6C + +.CPUOk6 + jsr WriteOk + inc SCORE + jmp .CPUTest7 + +.CPUError6Z + jsr WriteErrorZ + jmp .CPUTest7 +.CPUError6N + jsr WriteErrorN + jmp .CPUTest7 +.CPUError6V + jsr WriteErrorV + jmp .CPUTest7 +.CPUError6C + jsr WriteErrorC +;----------------------------- +.CPUTest7 ;INY + lda #$21 ;Where the msg prints. + sta $02 + lda #$E9 + sta $03 + +.CPULoop7 + bit OVERFLOWF ;Set V-Flag. + sec + ldy #$fe + lda #0 + iny + beq .CPUError7Z + bpl .CPUError7N + bvc .CPUError7V + bcc .CPUError7C + + clc + lda #1 + iny + bne .CPUError7Z + bmi .CPUError7N + bvc .CPUError7V + bcs .CPUError7C + + sec + clv + ldy #$7f + lda #0 + iny + beq .CPUError7Z + bpl .CPUError7N + bvs .CPUError7V + bcc .CPUError7C + +.CPUOk7 + jsr WriteOk + inc SCORE + jmp .CPUTest8 + +.CPUError7Z + jsr WriteErrorZ + jmp .CPUTest8 +.CPUError7N + jsr WriteErrorN + jmp .CPUTest8 +.CPUError7V + jsr WriteErrorV + jmp .CPUTest8 +.CPUError7C + jsr WriteErrorC +;----------------------------- +.CPUTest8 ;DEY + lda #$22 ;Where the msg prints. + sta $02 + lda #$09 + sta $03 + +.CPULoop8 + bit OVERFLOWF ;Set V-Flag. + sec + ldy #$01 + lda #$fe + dey + bne .CPUError8Z + bmi .CPUError8N + bvc .CPUError8V + bcc .CPUError8C + + clc + dey + beq .CPUError8Z + bpl .CPUError8N + bvc .CPUError8V + bcs .CPUError8C + + sec + clv + ldy #$80 + lda #0 + dey + beq .CPUError8Z + bmi .CPUError8N + bvs .CPUError8V + bcc .CPUError8C + +.CPUOk8 + jsr WriteOk + inc SCORE + jmp .CPUTest9 + +.CPUError8Z + jsr WriteErrorZ + jmp .CPUTest9 +.CPUError8N + jsr WriteErrorN + jmp .CPUTest9 +.CPUError8V + jsr WriteErrorV + jmp .CPUTest9 +.CPUError8C + jsr WriteErrorC +;----------------------------- +.CPUTest9 ;ASL + lda #$22 ;Where the msg prints. + sta $02 + lda #$29 + sta $03 + +.CPULoop9 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$40 + asl + beq .CPUError9Z + bpl .CPUError9N + bvc .CPUError9V + bcs .CPUError9C + + clv + asl + bne .CPUError9Z + bmi .CPUError9N + bvs .CPUError9V + bcc .CPUError9C + +.CPUOk9 + inc SCORE + jsr WriteOk + jmp .CPUTest10 + +.CPUError9Z + jsr WriteErrorZ + jmp .CPUTest10 +.CPUError9N + jsr WriteErrorN + jmp .CPUTest10 +.CPUError9V + jsr WriteErrorV + jmp .CPUTest10 +.CPUError9C + jsr WriteErrorC +;----------------------------- +.CPUTest10 ;LSR + lda #$22 ;Where the msg prints. + sta $02 + lda #$49 + sta $03 + +.CPULoop10 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$02 + lsr + beq .CPUError10Z + bmi .CPUError10N + bvc .CPUError10V + bcs .CPUError10C + + clv + lsr + bne .CPUError10Z + bmi .CPUError10N + bvs .CPUError10V + bcc .CPUError10C + + lda #$C2 + lsr + beq .CPUError10Z + bmi .CPUError10N + bvs .CPUError10V + bcs .CPUError10C + +.CPUOk10 + jsr WriteOk + inc SCORE + jmp .CPUTest11 + +.CPUError10Z + jsr WriteErrorZ + jmp .CPUTest11 +.CPUError10N + jsr WriteErrorN + jmp .CPUTest11 +.CPUError10V + jsr WriteErrorV + jmp .CPUTest11 +.CPUError10C + jsr WriteErrorC +;----------------------------- +.CPUTest11 ;ROL + lda #$22 ;Where the msg prints. + sta $02 + lda #$69 + sta $03 + +.CPULoop11 + bit OVERFLOWF ;Set V-Flag. + sec + lda #0 + rol + beq .CPUError11Z + bmi .CPUError11N + bvc .CPUError11V + bcs .CPUError11C + + lda #$55 + rol + beq .CPUError11Z + bpl .CPUError11N + bvc .CPUError11V + bcs .CPUError11C + + clv + lda #$80 + rol + bne .CPUError11Z + bmi .CPUError11N + bvs .CPUError11V + bcc .CPUError11C + + lda #$C2 + rol + beq .CPUError11Z + bpl .CPUError11N + bvs .CPUError11V + bcc .CPUError11C + +.CPUOk11 + jsr WriteOk + inc SCORE + jmp .CPUTest12 + +.CPUError11Z + jsr WriteErrorZ + jmp .CPUTest12 +.CPUError11N + jsr WriteErrorN + jmp .CPUTest12 +.CPUError11V + jsr WriteErrorV + jmp .CPUTest12 +.CPUError11C + jsr WriteErrorC +;----------------------------- +.CPUTest12 ;ROR + lda #$22 ;Where the msg prints. + sta $02 + lda #$89 + sta $03 + +.CPULoop12 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$0e + ror + beq .CPUError12Z + bpl .CPUError12N + bvc .CPUError12V + bcs .CPUError12C + + ror + beq .CPUError12Z + bmi .CPUError12N + bvc .CPUError12V + bcc .CPUError12C + + clc + clv + lda #$01 + ror + bne .CPUError12Z + bmi .CPUError12N + bvs .CPUError12V + bcc .CPUError12C + + ror + beq .CPUError12Z + bpl .CPUError12N + bvs .CPUError12V + bcs .CPUError12C + +.CPUOk12 + jsr WriteOk + inc SCORE + jmp .CPUTest13 + +.CPUError12Z + jsr WriteErrorZ + jmp .CPUTest13 +.CPUError12N + jsr WriteErrorN + jmp .CPUTest13 +.CPUError12V + jsr WriteErrorV + jmp .CPUTest13 +.CPUError12C + jsr WriteErrorC +;----------------------------- +.CPUTest13 +CPU1_End + ldx #$23 + ldy #$28 + jsr PrintScore + jsr ScrOnWaitKey +;---------------------------------------------------------------- +CPUTest_2 ;Test Logical operations + +.WaitV05 + lda $2002 + bpl .WaitV05 ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx $2001 ;Screen display off, amongst other things + + + jsr WipePPU + + lda #<.Mess090 + sta $00 + lda #>.Mess090 + sta $01 + lda #$20 + sta $02 + lda #$40 + sta $03 + jsr NESWriter0 + + lda #%00011110 ;Background on, sprites on, show leftmost 8 pixels, colour + sta $2001 +;----------------------------- +.CPUTest20 ;LDA + lda #$20 ;Where the msg prints. + sta $02 + lda #$C9 + sta $03 + +.CPULoop20 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$0e + beq .CPUError20Z + bmi .CPUError20N + bvc .CPUError20V + bcc .CPUError20C + + lda #0 + bne .CPUError20Z + bmi .CPUError20N + bvc .CPUError20V + bcc .CPUError20C + + clv + clc + lda #$aa + beq .CPUError20Z + bpl .CPUError20N + bvs .CPUError20V + bcs .CPUError20C + + lda #$c8 + beq .CPUError20Z + bpl .CPUError20N + bvs .CPUError20V + bcs .CPUError20C + +.CPUOk20 + jsr WriteOk + inc SCORE + jmp .CPUTest21 + +.CPUError20Z + jsr WriteErrorZ + jmp .CPUTest21 +.CPUError20N + jsr WriteErrorN + jmp .CPUTest21 +.CPUError20V + jsr WriteErrorV + jmp .CPUTest21 +.CPUError20C + jsr WriteErrorC +;----------------------------- +.CPUTest21 ;LDX + lda #$20 ;Where the msg prints. + sta $02 + lda #$E9 + sta $03 + +.CPULoop21 + bit OVERFLOWF ;Set V-Flag. + sec + ldx #$99 + beq .CPUError21Z + bpl .CPUError21N + bvc .CPUError21V + bcc .CPUError21C + + ldx #0 + bne .CPUError21Z + bmi .CPUError21N + bvc .CPUError21V + bcc .CPUError21C + + clv + clc + ldx #$ea + beq .CPUError21Z + bpl .CPUError21N + bvs .CPUError21V + bcs .CPUError21C + + ldx #$45 + beq .CPUError21Z + bmi .CPUError21N + bvs .CPUError21V + bcs .CPUError21C + +.CPUOk21 + jsr WriteOk + inc SCORE + jmp .CPUTest22 + +.CPUError21Z + jsr WriteErrorZ + jmp .CPUTest22 +.CPUError21N + jsr WriteErrorN + jmp .CPUTest22 +.CPUError21V + jsr WriteErrorV + jmp .CPUTest22 +.CPUError21C + jsr WriteErrorC +;----------------------------- +.CPUTest22 ;LDY + lda #$21 ;Where the msg prints. + sta $02 + lda #$09 + sta $03 + +.CPULoop22 + bit OVERFLOWF ;Set V-Flag. + sec + ldy #$b2 + beq .CPUError22Z + bpl .CPUError22N + bvc .CPUError22V + bcc .CPUError22C + + ldy #0 + bne .CPUError22Z + bmi .CPUError22N + bvc .CPUError22V + bcc .CPUError22C + + clv + clc + ldy #$aa + beq .CPUError22Z + bpl .CPUError22N + bvs .CPUError22V + bcs .CPUError22C + + ldy #$38 + beq .CPUError22Z + bmi .CPUError22N + bvs .CPUError22V + bcs .CPUError22C + +.CPUOk22 + jsr WriteOk + inc SCORE + jmp .CPUTest23 + +.CPUError22Z + jsr WriteErrorZ + jmp .CPUTest23 +.CPUError22N + jsr WriteErrorN + jmp .CPUTest23 +.CPUError22V + jsr WriteErrorV + jmp .CPUTest23 +.CPUError22C + jsr WriteErrorC +;----------------------------- +.CPUTest23 ;TAX + lda #$21 ;Where the msg prints. + sta $02 + lda #$29 + sta $03 + +.CPULoop23 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$0e + ldx #$90 + tax + beq .CPUError23Z + bmi .CPUError23N + bvc .CPUError23V + bcc .CPUError23C + + lda #0 + ldx #$ff + tax + bne .CPUError23Z + bmi .CPUError23N + bvc .CPUError23V + bcc .CPUError23C + + clv + clc + lda #$aa + ldx #0 + tax + beq .CPUError23Z + bpl .CPUError23N + bvs .CPUError23V + bcs .CPUError23C + + lda #$c8 + ldx #$32 + tax + beq .CPUError23Z + bpl .CPUError23N + bvs .CPUError23V + bcs .CPUError23C + +.CPUOk23 + jsr WriteOk + inc SCORE + jmp .CPUTest24 + +.CPUError23Z + jsr WriteErrorZ + jmp .CPUTest24 +.CPUError23N + jsr WriteErrorN + jmp .CPUTest24 +.CPUError23V + jsr WriteErrorV + jmp .CPUTest24 +.CPUError23C + jsr WriteErrorC +;----------------------------- +.CPUTest24 ;TAY + lda #$21 ;Where the msg prints. + sta $02 + lda #$49 + sta $03 + +.CPULoop24 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$0e + ldy #$90 + tay + beq .CPUError24Z + bmi .CPUError24N + bvc .CPUError24V + bcc .CPUError24C + + lda #0 + ldy #$ff + tay + bne .CPUError24Z + bmi .CPUError24N + bvc .CPUError24V + bcc .CPUError24C + + clv + clc + lda #$aa + ldy #0 + tay + beq .CPUError24Z + bpl .CPUError24N + bvs .CPUError24V + bcs .CPUError24C + + lda #$c8 + ldy #$32 + tay + beq .CPUError24Z + bpl .CPUError24N + bvs .CPUError24V + bcs .CPUError24C + +.CPUOk24 + jsr WriteOk + inc SCORE + jmp .CPUTest25 + +.CPUError24Z + jsr WriteErrorZ + jmp .CPUTest25 +.CPUError24N + jsr WriteErrorN + jmp .CPUTest25 +.CPUError24V + jsr WriteErrorV + jmp .CPUTest25 +.CPUError24C + jsr WriteErrorC +;----------------------------- +.CPUTest25 ;TSX + lda #$21 ;Where the msg prints. + sta $02 + lda #$69 + sta $03 + + tsx + txa + tay ; Save old S +.CPULoop25 + bit OVERFLOWF ;Set V-Flag. + sec + ldx #$25 + txs + ldx #$93 + tsx + beq .CPUError25Z + bmi .CPUError25N + bvc .CPUError25V + bcc .CPUError25C + + ldx #0 + txs + ldx #$ff + tsx + bne .CPUError25Z + bmi .CPUError25N + bvc .CPUError25V + bcc .CPUError25C + + clv + clc + ldx #$fa + txs + ldx #0 + tsx + beq .CPUError25Z + bpl .CPUError25N + bvs .CPUError25V + bcs .CPUError25C + + ldx #$b9 + txs + ldx #$7f + tsx + beq .CPUError25Z + bpl .CPUError25N + bvs .CPUError25V + bcs .CPUError25C + +.CPUOk25 + tya + tax + txs ; Get old S + jsr WriteOk + inc SCORE + jmp .CPUTest26 + +.CPUError25Z + tya + tax + txs ; Get old S + jsr WriteErrorZ + jmp .CPUTest26 +.CPUError25N + tya + tax + txs ; Get old S + jsr WriteErrorN + jmp .CPUTest26 +.CPUError25V + tya + tax + txs ; Get old S + jsr WriteErrorV + jmp .CPUTest26 +.CPUError25C + tya + tax + txs ; Get old S + jsr WriteErrorC +;----------------------------- +.CPUTest26 ;TXA + lda #$21 ;Where the msg prints. + sta $02 + lda #$89 + sta $03 + +.CPULoop26 + bit OVERFLOWF ;Set V-Flag. + sec + ldx #$0e + lda #$90 + txa + beq .CPUError26Z + bmi .CPUError26N + bvc .CPUError26V + bcc .CPUError26C + + ldx #0 + lda #$ff + txa + bne .CPUError26Z + bmi .CPUError26N + bvc .CPUError26V + bcc .CPUError26C + + clv + clc + ldx #$aa + lda #0 + txa + beq .CPUError26Z + bpl .CPUError26N + bvs .CPUError26V + bcs .CPUError26C + + ldx #$c8 + lda #$32 + txa + beq .CPUError26Z + bpl .CPUError26N + bvs .CPUError26V + bcs .CPUError26C + +.CPUOk26 + jsr WriteOk + inc SCORE + jmp .CPUTest27 + +.CPUError26Z + jsr WriteErrorZ + jmp .CPUTest27 +.CPUError26N + jsr WriteErrorN + jmp .CPUTest27 +.CPUError26V + jsr WriteErrorV + jmp .CPUTest27 +.CPUError26C + jsr WriteErrorC +;----------------------------- +.CPUTest27 ;TXS + lda #$21 ;Where the msg prints. + sta $02 + lda #$A9 + sta $03 + + tsx + txa + tay ; Save old S +.CPULoop27 + bit OVERFLOWF ;Set V-Flag. + sec + ldx #$90 + lda #$0e + txs + beq .CPUError27Z + bmi .CPUError27N + bvc .CPUError27V + bcc .CPUError27C + + ldx #$ff + lda #0 + txs + bne .CPUError27Z + bmi .CPUError27N + bvc .CPUError27V + bcc .CPUError27C + + clv + clc + ldx #0 + lda #$aa + txs + beq .CPUError27Z + bpl .CPUError27N + bvs .CPUError27V + bcs .CPUError27C + + ldx #$32 + lda #$c8 + txs + beq .CPUError27Z + bpl .CPUError27N + bvs .CPUError27V + bcs .CPUError27C + +.CPUOk27 + tya + tax + txs ; Get old S + jsr WriteOk + inc SCORE + jmp .CPUTest28 + +.CPUError27Z + tya + tax + txs ; Get old S + jsr WriteErrorZ + jmp .CPUTest28 +.CPUError27N + tya + tax + txs ; Get old S + jsr WriteErrorN + jmp .CPUTest28 +.CPUError27V + tya + tax + txs ; Get old S + jsr WriteErrorV + jmp .CPUTest28 +.CPUError27C + tya + tax + txs ; Get old S + jsr WriteErrorC +;----------------------------- +.CPUTest28 ;TYA + lda #$21 ;Where the msg prints. + sta $02 + lda #$C9 + sta $03 + +.CPULoop28 + bit OVERFLOWF ;Set V-Flag. + sec + ldy #$0e + lda #$90 + tya + beq .CPUError28Z + bmi .CPUError28N + bvc .CPUError28V + bcc .CPUError28C + + ldy #0 + lda #$ff + tya + bne .CPUError28Z + bmi .CPUError28N + bvc .CPUError28V + bcc .CPUError28C + + clv + clc + ldy #$aa + lda #0 + tya + beq .CPUError28Z + bpl .CPUError28N + bvs .CPUError28V + bcs .CPUError28C + + ldy #$c8 + lda #$32 + tya + beq .CPUError28Z + bpl .CPUError28N + bvs .CPUError28V + bcs .CPUError28C + +.CPUOk28 + jsr WriteOk + inc SCORE + jmp .CPUTest29 + +.CPUError28Z + jsr WriteErrorZ + jmp .CPUTest29 +.CPUError28N + jsr WriteErrorN + jmp .CPUTest29 +.CPUError28V + jsr WriteErrorV + jmp .CPUTest29 +.CPUError28C + jsr WriteErrorC +;----------------------------- +.CPUTest29 ;PLA + lda #$21 ;Where the msg prints. + sta $02 + lda #$E9 + sta $03 + +.CPULoop29 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$0e + pha + ldx #$90 + pla + beq .CPUError29Z + bmi .CPUError29N + bvc .CPUError29V + bcc .CPUError29C + + lda #0 + pha + ldx #$ff + pla + bne .CPUError29Z + bmi .CPUError29N + bvc .CPUError29V + bcc .CPUError29C + + clv + clc + lda #$aa + pha + ldx #0 + pla + beq .CPUError29Z + bpl .CPUError29N + bvs .CPUError29V + bcs .CPUError29C + + lda #$c8 + pha + ldx #$32 + pla + beq .CPUError29Z + bpl .CPUError29N + bvs .CPUError29V + bcs .CPUError29C + +.CPUOk29 + jsr WriteOk + inc SCORE + jmp .CPUTest30 + +.CPUError29Z + jsr WriteErrorZ + jmp .CPUTest30 +.CPUError29N + jsr WriteErrorN + jmp .CPUTest30 +.CPUError29V + jsr WriteErrorV + jmp .CPUTest30 +.CPUError29C + jsr WriteErrorC +;----------------------------- +.CPUTest30 ;AND + lda #$22 ;Where the msg prints. + sta $02 + lda #$09 + sta $03 + +.CPULoop30 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$C8 + ldx #$59 + and #$9F + beq .CPUError30Z + bpl .CPUError30N + bvc .CPUError30V + bcc .CPUError30C + + lda #0 + ldx #$FF + and #$C5 + bne .CPUError30Z + bmi .CPUError30N + bvc .CPUError30V + bcc .CPUError30C + + clv + clc + lda #$c8 + ldx #$83 + and #$37 + bne .CPUError30Z + bmi .CPUError30N + bvs .CPUError30V + bcs .CPUError30C + + lda #$AA + ldx #0 + and #$8F + beq .CPUError30Z + bpl .CPUError30N + bvs .CPUError30V + bcs .CPUError30C + + cmp #$8A + bne .CPUError30R + +.CPUOk30 + jsr WriteOk + inc SCORE + jmp .CPUTest31 + +.CPUError30Z + jsr WriteErrorZ + jmp .CPUTest31 +.CPUError30N + jsr WriteErrorN + jmp .CPUTest31 +.CPUError30V + jsr WriteErrorV + jmp .CPUTest31 +.CPUError30C + jsr WriteErrorC + jmp .CPUTest31 +.CPUError30R + jsr WriteErrorR +;----------------------------- +.CPUTest31 ;EOR + lda #$22 ;Where the msg prints. + sta $02 + lda #$29 + sta $03 + +.CPULoop31 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$9e + ldx #$90 + eor #$81 + beq .CPUError31Z + bmi .CPUError31N + bvc .CPUError31V + bcc .CPUError31C + + lda #$01 + ldx #$ff + eor #$01 + bne .CPUError31Z + bmi .CPUError31N + bvc .CPUError31V + bcc .CPUError31C + + clv + clc + lda #$aa + ldx #0 + eor #$71 + beq .CPUError31Z + bpl .CPUError31N + bvs .CPUError31V + bcs .CPUError31C + + lda #$C8 + ldx #$32 + eor #$66 + beq .CPUError31Z + bpl .CPUError31N + bvs .CPUError31V + bcs .CPUError31C + + cmp #$AE + bne .CPUError31R + +.CPUOk31 + jsr WriteOk + inc SCORE + jmp .CPUTest32 + +.CPUError31Z + jsr WriteErrorZ + jmp .CPUTest32 +.CPUError31N + jsr WriteErrorN + jmp .CPUTest32 +.CPUError31V + jsr WriteErrorV + jmp .CPUTest32 +.CPUError31C + jsr WriteErrorC + jmp .CPUTest32 +.CPUError31R + jsr WriteErrorR +;----------------------------- +.CPUTest32 ;ORA + lda #$22 ;Where the msg prints. + sta $02 + lda #$49 + sta $03 + +.CPULoop32 + bit OVERFLOWF ;Set V-Flag. + sec + lda #$0e + ldx #$90 + ora #$20 + beq .CPUError32Z + bmi .CPUError32N + bvc .CPUError32V + bcc .CPUError32C + + lda #$00 + ldx #$ff + ora #$00 + bne .CPUError32Z + bmi .CPUError32N + bvc .CPUError32V + bcc .CPUError32C + + clv + clc + lda #$0a + ldx #0 + ora #$a0 + beq .CPUError32Z + bpl .CPUError32N + bvs .CPUError32V + bcs .CPUError32C + + lda #$08 + ldx #$32 + ora #$c0 + beq .CPUError32Z + bpl .CPUError32N + bvs .CPUError32V + bcs .CPUError32C + + cmp #$C8 + bne .CPUError32R + +.CPUOk32 + jsr WriteOk + inc SCORE + jmp .CPUTest33 + +.CPUError32Z + jsr WriteErrorZ + jmp .CPUTest33 +.CPUError32N + jsr WriteErrorN + jmp .CPUTest33 +.CPUError32V + jsr WriteErrorV + jmp .CPUTest33 +.CPUError32C + jsr WriteErrorC + jmp .CPUTest33 +.CPUError32R + jsr WriteErrorR +;----------------------------- +.CPUTest33 ;BIT + lda #$22 ;Where the msg prints. + sta $02 + lda #$69 + sta $03 + +.CPULoop33 + sec + lda #$5E + sta $05 + lda #$97 + bit $05 + beq .CPUError33Z + bmi .CPUError33N + bvc .CPUError33V + bcc .CPUError33C + + lda #$05 + sta $05 + lda #$F0 + bit $05 + bne .CPUError33Z + bmi .CPUError33N + bvs .CPUError33V + bcc .CPUError33C + + clc + lda #$C5 + sta $05 + lda #$3A + bit $05 + bne .CPUError33Z + bpl .CPUError33N + bvc .CPUError33V + bcs .CPUError33C + + lda #$99 + sta $05 + lda #$6D + bit $05 + beq .CPUError33Z + bpl .CPUError33N + bvs .CPUError33V + bcs .CPUError33C + +.CPUOk33 + jsr WriteOk + inc SCORE + jmp .CPUTest34 + +.CPUError33Z + jsr WriteErrorZ + jmp .CPUTest34 +.CPUError33N + jsr WriteErrorN + jmp .CPUTest34 +.CPUError33V + jsr WriteErrorV + jmp .CPUTest34 +.CPUError33C + jsr WriteErrorC +;----------------------------- +.CPUTest34 +CPU2_End + ldx #$23 + ldy #$28 + jsr PrintScore + jsr ScrOnWaitKey + +;---------------------------------------------------------------- +CPUTest4 ;Test Address CPU operations + +.WaitVBl + lda $2002 + bpl .WaitVBl ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx $2001 ;Screen display off, amongst other things + + + jsr WipePPU + + lda #<.Mess0A0 + sta $00 + lda #>.Mess0A0 + sta $01 + lda #$20 + sta $02 + lda #$40 + sta $03 + jsr NESWriter0 + + lda #%00011110 ;Background on, sprites on, show leftmost 8 pixels, colour + sta $2001 +;----------------------------- +.CPUTest40 ;Adr Imediate + lda #$20 ;Where the msg prints. + sta $02 + lda #$D2 + sta $03 + + + + lda #$5E + beq .CPUError40 ;Stupid isn't it? ;-) + bmi .CPUError40 + cmp #$23 ;How do you do a test for the imediate addressing? + beq .CPUError40 + cmp #$5E + bne .CPUError40 + lda #$82 + beq .CPUError40 + bpl .CPUError40 + +.CPUOk40 + jsr WriteOk + inc SCORE + jmp .CPUTest41 + +.CPUError40 + jsr WriteError +;----------------------------- +.CPUTest41 ;Adr Zero page + lda #$20 ;Where the msg prints. + sta $02 + lda #$F2 + sta $03 + + + + lda #0 + sta $05 + lda #$93 + sta $06 + lda #$45 + sta $07 + lda $05 + bne .CPUError41 ;Stupid isn't it? ;-) + bmi .CPUError41 + lda $06 ;How do you do a test for the Zero page addressing? + beq .CPUError41 + bpl .CPUError41 + lda $07 + beq .CPUError41 + bmi .CPUError41 + +.CPUOk41 + jsr WriteOk + inc SCORE + jmp .CPUTest42 + +.CPUError41 + jsr WriteError +;----------------------------- +.CPUTest42 ;Adr Zero page,X + lda #$21 ;Where the msg prints. + sta $02 + lda #$12 + sta $03 + + + lda #0 + sta $0106 + sta $05 + lda #$93 + sta $06 + lda #$45 + sta $07 + ldx #$04 + + lda $01,x + bne .CPUError42 + bmi .CPUError42 + lda $02,x + cmp #$93 + bne .CPUError42 + ldx #$08 + lda $FE,x + cmp #$93 + bne .CPUError42W + ldx #$FE + lda $08,x + beq .CPUError42W + bpl .CPUError42W + cmp $06 + bne .CPUError42W + cmp $0106 + beq .CPUError42W + ldx #0 + lda $07,x + beq .CPUError42 + bmi .CPUError42 + cmp #$45 + bne .CPUError42 + + +.CPUOk42 + jsr WriteOk + inc SCORE + jmp .CPUTest43 + +.CPUError42W + jsr WriteErrorW + jmp .CPUTest43 +.CPUError42 + jsr WriteError +;----------------------------- +.CPUTest43 ;Adr Absolute + lda #$21 ;Where the msg prints. + sta $02 + lda #$32 + sta $03 + + + + lda #$5E + sta $0200 + lda $FEFE + cmp #$AA + bne .CPUError43 + lda $0200 + cmp #$5E + bne .CPUError43 + lda $FEFF + cmp #$55 + bne .CPUError43 + lda $FE00 + cmp #$FF + bne .CPUError43 + + +.CPUOk43 + jsr WriteOk + inc SCORE + jmp .CPUTest44 + +.CPUError43 + jsr WriteError +;----------------------------- +.CPUTest44 ;Adr Absolute,X + lda #$21 ;Where the msg prints. + sta $02 + lda #$52 + sta $03 + + + + lda #$11 + sta $05 + lda #$5E + sta $0219 + ldx #$19 + lda $0200,x + cmp #$5E + bne .CPUError44 + lda $FEE6,x + cmp #$55 + bne .CPUError44 + lda $FEE7,x + cmp #$22 + bne .CPUError44W + ldx #$25 + lda $FFe0,x + cmp #$11 + bne .CPUError44W + ldx #$D9 + lda $FE25,x + cmp #$AA + bne .CPUError44 + + +.CPUOk44 + jsr WriteOk + inc SCORE + jmp .CPUTest45 +.CPUError44W + jsr WriteErrorW + jmp .CPUTest45 +.CPUError44 + jsr WriteError +;----------------------------- +.CPUTest45 ;Adr Absolute,Y + lda #$21 ;Where the msg prints. + sta $02 + lda #$72 + sta $03 + + + + lda #$11 + sta $05 + lda #$5E + sta $0219 + ldy #$19 + lda $0200,y + cmp #$5E + bne .CPUError45 + lda $FEE6,y + cmp #$55 + bne .CPUError45 + lda $FEE7,y + cmp #$22 + bne .CPUError45W + ldy #$26 + lda $FFDF,y + cmp #$11 + bne .CPUError45W + ldy #$DA + lda $FE24,y + cmp #$AA + bne .CPUError45 + +.CPUOk45 + jsr WriteOk + inc SCORE + jmp .CPUTest46 +.CPUError45W + jsr WriteErrorW + jmp .CPUTest46 +.CPUError45 + jsr WriteError +;----------------------------- +.CPUTest46 ;Adr (Indirect,X) + lda #$21 ;Where the msg prints. + sta $02 + lda #$92 + sta $03 + + + + lda #Ind_Values1 + sta $07 + lda #Ind_Values2 + sta $09 + ldx #0 + lda ($06,x) + cmp #$FF + bne .CPUError46 + ldx #1 + cmp ($05,x) + bne .CPUError46 + ldx #4 + lda ($04,x) + cmp #$AA + bne .CPUError46 + ldx #$27 + lda ($e1,x) + cmp #$AA + bne .CPUError46W + + +.CPUOk46 + jsr WriteOk + inc SCORE + jmp .CPUTest47 +.CPUError46W + jsr WriteErrorW + jmp .CPUTest47 +.CPUError46 + jsr WriteError +;----------------------------- +.CPUTest47 ;Adr (Indirect),Y + lda #$21 ;Where the msg prints. + sta $02 + lda #$B2 + sta $03 + + + + lda #Ind_Values1 + sta $07 + lda #Ind_Values2 + sta $09 + ldy #0 + lda ($06),y + cmp #$FF + bne .CPUError47 + ldy #3 + lda ($06),y + cmp #$BB + bne .CPUError47 + ldy #$FE + lda ($06),y + cmp #$AA + bne .CPUError47 + ldy #2 + lda ($08),y + cmp #$22 + bne .CPUError47 + ldy #1 + lda ($08),y + cmp #$55 + bne .CPUError47W + + +.CPUOk47 + jsr WriteOk + inc SCORE + jmp .CPUTest48 +.CPUError47W + jsr WriteErrorW + jmp .CPUTest48 +.CPUError47 + jsr WriteError +;----------------------------- +.CPUTest48 ;JMP + lda #$21 ;Where the msg prints. + sta $02 + lda #$D2 + sta $03 + + jmp .CPUOk48 ;What!?! + lda #0 + beq .CPUError48 + + +.CPUOk48 + jsr WriteOk + inc SCORE + jmp .CPUTest49 + +.CPUError48 + jsr WriteError +;----------------------------- +.CPUTest49 ;JMP() + lda #$21 ;Where the msg prints. + sta $02 + lda #$F2 + sta $03 + + lda #JmpStep2 + sta $201 + jmp ($200) + lda #0 + beq .CPUError49 +JmpStep2 + lda #>JmpTstOk + sta $200 + lda #JmpTstFail + sta $300 + jmp ($2FF) + + +CPUOk49 + jsr WriteOk + inc SCORE + jmp .CPUTest50 +CPUError49W + jsr WriteErrorW + jmp .CPUTest50 +.CPUError49 + jsr WriteError +;----------------------------- +.CPUTest50 ;JSR + lda #$22 ;Where the msg prints. + sta $02 + lda #$12 + sta $03 + clv + + jsr .JsrTst1 +.JsrDummy + bvc .CPUError51 + nop +.JsrTst1 + pla + tay + pla + cmp #>.JsrDummy + bne .CPUError51 + tya + cmp #<.JsrDummy-1 + bne .CPUError51 + +.CPUOk50 + jsr WriteOk + inc SCORE + jmp .CPUTest51 +.CPUError50 + jsr WriteError +;----------------------------- +.CPUTest51 ;RTS + lda #$22 ;Where the msg prints. + sta $02 + lda #$32 + sta $03 + + lda #>RtsTst1 + pha + lda #RtiTst1 + pha + lda #.Mess0B0 + sta $01 + lda #$20 + sta $02 + lda #$40 + sta $03 + jsr NESWriter0 + + lda #%00011110 ;Background on, sprites on, show leftmost 8 pixels, colour + sta $2001 +;----------------------------- +.CPUTest60 ;Test SR + lda #$20 ;Where the msg prints. + sta $02 + lda #$D1 + sta $03 + + lda #$FF + pha + plp + php + pla + cmp #$FF + bne .CPUError60 + + lda #$00 + pha + plp + php ; This actually sets the B flag. + sei + pla +; tay + cmp #$30 +; and #$10 + bne .CPUError60 +; tya +; cmp #$20 +; bne .CPUError60 + +.CPUOk60 + jsr WriteOk + inc SCORE + jmp .CPUTest61 +.CPUError60B + jsr WriteErrorB + jmp .CPUTest61 +.CPUError60 + jsr WriteError +;----------------------------------------------------------- +.CPUTest61 ;BRK flags + lda #$20 ;Where the msg prints. + sta $02 + lda #$F1 + sta $03 + + lda #$00 + sta $07 + pha ;Push A + plp ;Pull SR - Clear SVDIZC. + brk ;The BRK! +;-------------- + nop ;The BRK's return address is +1. + php ;Push SR - B should be set, I should be clear. + sei + pla ;Pull A + tay + and #$04 + bne .CPUError61I + tya + and #$10 + beq .CPUError61B + lda $07 ; Load SR from inside Interrupt + and #$10 + beq .CPUError61B + lda $07 ; Load SR from inside Interrupt + and #$04 + beq .CPUError61I + + + + lda #$00 + sta $07 + lda #$04 + pha ;Push A + plp ;Pull SR - Clear SVBDZC, set I. + brk ;The BRK! +;-------------- + nop ;The BRK's return address is +1. + php ;Push SR - B & I should be set. + pla ;Pull A + tay + and #$04 + beq .CPUError61I + tya + and #$10 + beq .CPUError61B + lda $07 ; Load SR from inside Interrupt + and #$10 + beq .CPUError61B + lda $07 ; Load SR from inside Interrupt + and #$04 + beq .CPUError61I + + +.CPUOk61 + jsr WriteOk + inc SCORE + jmp .CPUTest62 + +.CPUError61I + jsr WriteErrorI + jmp .CPUTest62 +.CPUError61B + jsr WriteErrorB + jmp .CPUTest62 +.CPUError61 + jsr WriteError +;----------------------------------------------------------- +.CPUTest62 ;BRK return address. + lda #$21 ;Where the msg prints. + sta $02 + lda #$11 + sta $03 + + brk ;The BRK! +;-------------- + dc.b $AD ;LDA $XXXX + bne .CPUOk62 + jmp .CPUError62 + + +.CPUOk62 + jsr WriteOk + inc SCORE + jmp .CPUTest63 + +.CPUError62 + jsr WriteError +;----------------------------------------------------------- +.CPUTest63 ;Stack pointer test + lda #$21 ;Where the msg prints. + sta $02 + lda #$31 + sta $03 + + lda #$55 + tsx + pha + cmp $100,x + bne .CPUError63 + pla + lda #$AA + tsx + pha + cmp $100,x + bne .CPUError63 + lda #$AA + sta $0100 + lda #$55 + sta $0200 + ldx #$FE + txs + pla + pla + cmp #$AA + bne .CPUError63W + + +.CPUOk63 + jsr WriteOk + inc SCORE + jmp .CPUTest64 +.CPUError63W + jsr WriteErrorW + jmp .CPUTest64 +.CPUError63 + jsr WriteError +;----------------------------------------------------------- +.CPUTest64 ;RAM test + lda #$21 ;Where the msg prints. + sta $02 + lda #$51 + sta $03 + + ldx #$06 ;To write 7 x $100 bytes, from $0100 to $07FF. + ldy #$07 ;To write 7 x $100 bytes, from $0100 to $07FF. + sty $05 ;Store count value in $05 + ldy #$00 + sty $04 + lda #$55 +.Clear2 + sta ($04),y ;Clear $100 bytes + dey + bne .Clear2 + dec $05 ;Decrement "banks" left counter + dex + bne .Clear2 ;Do next if > 0 + + ldx #$06 ;To test 7 x $100 bytes, from $0100 to $07FF. + ldy #$07 ;To test 7 x $100 bytes, from $0100 to $07FF. + sty $05 ;Store count value in $05 + ldy #$00 + sty $04 + lda #$55 +.Clear3 + cmp ($04),y ;Clear $100 bytes + bne .CPUError64 + dey + bne .Clear3 + dec $05 ;Decrement "banks" left counter + dex + bne .Clear3 ;Do next if > 0 + + + ldx #$06 ;To write 7 x $100 bytes, from $0100 to $07FF. + ldy #$07 ;To write 7 x $100 bytes, from $0100 to $07FF. + sty $05 ;Store count value in $05 + ldy #$00 + sty $04 + lda #$AA +.Clear4 + sta ($04),y ;Clear $100 bytes + dey + bne .Clear4 + dec $05 ;Decrement "banks" left counter + dex + bne .Clear4 ;Do next if > 0 + + ldx #$06 ;To test 7 x $100 bytes, from $0100 to $07FF. + ldy #$07 ;To test 7 x $100 bytes, from $0100 to $07FF. + sty $05 ;Store count value in $05 + ldy #$00 + sty $04 + lda #$AA +.Clear5 + cmp ($04),y ;Clear $100 bytes + bne .CPUError64 + dey + bne .Clear5 + dec $05 ;Decrement "banks" left counter + dex + bne .Clear5 ;Do next if > 0 + + +.CPUOk64 + jsr WriteOk + inc SCORE + jmp .CPUTest65 + +.CPUError64 + jsr WriteError +;----------------------------------------------------------- +.CPUTest65 ;RAM mirroring test + lda #$21 ;Where the msg prints. + sta $02 + lda #$71 + sta $03 + + lda #$55 + sta $0200 + lda #$AA + sta $0201 + lda #$00 + sta $0202 + lda #$FF + sta $0203 + + lda $0200 + cmp #$55 + bne .CPUError65 + lda $0A00 + cmp #$55 + bne .CPUError65 + lda $0A03 + cmp #$FF + bne .CPUError65 + lda $1201 + cmp #$AA + bne .CPUError65 + lda $1A02 + cmp #$00 + bne .CPUError65 + lda $1A03 + cmp #$FF + bne .CPUError65 + + lda #$00 + sta $1200 + lda $0200 + bne .CPUError65 + +.CPUOk65 + jsr WriteOk + inc SCORE + jmp .CPUTest66 + +.CPUError65 + jsr WriteError +;----------------------------------------------------------- +.CPUTest66 + +CPU6End + ldx #$23 + ldy #$28 + jsr PrintScore + jsr ScrOnWaitKey + + +.TestNoKey2 + lda CONTROLLER1 + and #%11010000 + bne .TestNoKey2 + + jmp Reset_Routine +;---------------------------------------------------------------- +;**************************************************************** +;---------------------------------------------------------------- +pAPUTest + +.WaitV03 + lda $2002 + bpl .WaitV03 ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx PPU2000 + stx $2001 ;Screen display off, amongst other things + + + jsr WipePPU + + lda #<.Mess040 + sta $00 + lda #>.Mess040 + sta $01 + lda #$20 + sta $02 + lda #$40 + sta $03 + jsr NESWriter0 + +;----------------------------- +APUEnd + ldx #$23 + ldy #$28 + jsr PrintScore + jsr ScrOnWaitKey + +.TestNoKey3 + lda CONTROLLER1 + and #%11010000 + bne .TestNoKey3 + + jmp Reset_Routine + +;---------------------------------------------------------------- +;**************************************************************** +;---------------------------------------------------------------- +PPUTest + +.WaitV02 + lda $2002 + bpl .WaitV02 ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx PPU2000 + stx $2001 ;Screen display off, amongst other things + + + jsr WipePPU + + lda #<.Mess000 + sta $00 + lda #>.Mess000 + sta $01 + lda #$21 + sta $02 + lda #$60 + sta $03 + jsr NESWriter0 + + lda #$00 + sta SCORE ;Clear score. +;---------------------------------- +.PPUTest0 + lda #$20 + sta $2006 + lda #$21 + sta $2006 + + ldx #$30 +.PPUWriteLoop0 + stx $2007 + inx + cpx #$3a + bne .PPUWriteLoop0 + + + lda #$20 + sta $2006 + lda #$21 + sta $2006 + + ldx #$30 + stx $04 + ldy #10 + lda $2007 + + lda #$21 ;Where the msg prints. + sta $02 + lda #$FB + sta $03 +.PPUReadLoop0 + lda $2007 + cmp $04 + bne .PPUError0 + inc $04 + dey + bne .PPUReadLoop0 + + +.PPUOk0 + jsr WriteOk + inc SCORE + jmp .PPUTest1 + +.PPUError0 + jsr WriteError +;----------------------------- +.PPUTest1 + lda #$20 + sta $2006 + lda #$41 + sta $2006 + + ldx #$30 +.PPUWriteLoop1 + stx $2007 + inx + cpx #$35 + bne .PPUWriteLoop1 + lda $2007 + inx +.PPUWriteLoop1_1 + stx $2007 + inx + cpx #$3a + bne .PPUWriteLoop1_1 + + + + lda #$20 + sta $2006 + lda #$46 + sta $2006 + + lda #$22 ; Where the msg prints. + sta $02 + lda #$1B + sta $03 + + ldx #$36 + stx $04 + ldy #04 + lda $2007 + lda $2007 + cmp #0 + bne .PPUError1 +.PPUReadLoop1 + lda $2007 + cmp $04 + bne .PPUError1 + inc $04 + dey + bne .PPUReadLoop1 + + + +.PPUOk1 + jsr WriteOk + inc SCORE + jmp .PPUTest2 + +.PPUError1 + jsr WriteError + +;----------------------------- +.PPUTest2 + lda #$20 + sta $2006 + lda #$60 + sta $2006 + lda $2007 + + ldx #$30 +.PPUWriteLoop2 + stx $2007 + inx + cpx #$3a + bne .PPUWriteLoop2 + + + lda #$20 + sta $2006 + lda #$61 + sta $2006 + + ldx #$30 + stx $04 + ldy #9 + lda $2007 + + lda #$22 ; Where the msg prints. + sta $02 + lda #$3b + sta $03 +.PPUReadLoop2 + lda $2007 + cmp $04 + bne .PPUError2 + inc $04 + dey + bne .PPUReadLoop2 + + +.PPUOk2 + jsr WriteOk + inc SCORE + jmp .PPUTest3 + +.PPUError2 + jsr WriteError +;----------------------------- +.PPUTest3 + lda #$20 + sta $2006 + lda #$81 + sta $2006 + + ldx #$30 +.PPUWriteLoop3 + stx $2007 + inx + cpx #$39 + bne .PPUWriteLoop3 + + ldx $2007 + lda #$20 + sta $2006 + lda #$8a + sta $2006 + stx $2007 + + lda #$20 + sta $2006 + lda #$81 + sta $2006 + + ldx #$30 + stx $04 + ldy #10 + lda $2007 + + lda #$22 ; Where the msg prints. + sta $02 + lda #$5B + sta $03 +.PPUReadLoop3 + lda $2007 + cmp $04 + bne .PPUError3 + inc $04 + dey + bne .PPUReadLoop3 + + +.PPUOk3 + jsr WriteOk + inc SCORE + jmp .PPUTest4 + +.PPUError3 + jsr WriteError +;----------------------------- +.PPUTest4 + lda #$20 + sta $2006 + lda #$A1 + sta $2006 + + ldx #$30 +.PPUWriteLoop4 + stx $2007 + inx + cpx #$35 + bne .Not5 + lda #$26 ; 1st Adr byte. + sta $2006 +.Not5 + cpx #$3A + bne .PPUWriteLoop4 + + lda #$01 ; 2nd adr byte. + sta $2006 + + lda #$20 + sta $2006 + lda #$A1 + sta $2006 + + ldx #$30 + stx $04 + ldy #10 + lda $2007 + + lda #$22 ; Where the msg prints. + sta $02 + lda #$7B + sta $03 +.PPUReadLoop4 + lda $2007 + cmp $04 + bne .PPUError4 + inc $04 + dey + bne .PPUReadLoop4 + + +.PPUOk4 + jsr WriteOk + inc SCORE + jmp .PPUTest5 + +.PPUError4 + jsr WriteError +;---------------------------------- +.PPUTest5 + lda #$30 + sta $2006 + lda #$C1 + sta $2006 + + ldx #$30 +.PPUWriteLoop5 + stx $2007 + inx + cpx #$3a + bne .PPUWriteLoop5 + + + lda #$20 + sta $2006 + lda #$C1 + sta $2006 + + ldx #$30 + stx $04 + ldy #10 + lda $2007 + + lda #$22 ;Where the msg prints. + sta $02 + lda #$9B + sta $03 +.PPUReadLoop5 + lda $2007 + cmp $04 + bne .PPUError5 + inc $04 + dey + bne .PPUReadLoop5 + + +.PPUOk5 + jsr WriteOk + inc SCORE + jmp .PPUTest6 + +.PPUError5 + jsr WriteError +;---------------------------------- +.PPUTest6 + lda #$3E ;Where to print test pattern. + sta $2006 + lda #$E1 + sta $2006 + + lda #$04 ;Set 32 byte increment for PPU. + sta $2000 + + ldx #$88 +.PPUIncLoop6 + lda $2007 + lda $2007 + dex + bne .PPUIncLoop6 + + lda #$00 ;Set 1 byte increment for PPU. + sta $2000 + + + ldx #$30 +.PPUWriteLoop6 + stx $2007 + inx + cpx #$3a + bne .PPUWriteLoop6 + + lda #$20 ;Where to read pattern. + sta $2006 + lda #$E1 + sta $2006 + + ldx #$30 + stx $04 + ldy #10 + lda $2007 + + lda #$22 ;Where the msg prints. + sta $02 + lda #$BB + sta $03 +.PPUReadLoop6 + lda $2007 + cmp $04 + bne .PPUError6 + inc $04 + dey + bne .PPUReadLoop6 + + +.PPUOk6 + jsr WriteOk + inc SCORE + jmp .PPUTest7 + +.PPUError6 + jsr WriteError +;----------------------------- +.PPUTest7 + lda #$24 + sta $2006 + lda #$05 + sta $2006 + + ldx #$33 +.PPUWriteLoop7 + stx $2007 + inx + cpx #$43 + bne .PPUWriteLoop7 + + lda #$25 + sta $2006 + lda #$1D + sta $2006 + + ldx #$01 +.PPUWriteLoop7b + stx $2007 + inx + cpx #$11 + bne .PPUWriteLoop7b + + lda #$24 + sta $2005 + lda #$05 + sta $2006 + + ldx #$33 + stx $04 + ldy #7 + + lda #$22 ; Where the msg prints. + sta $02 + lda #$DB + sta $03 + + lda $2007 +.PPUReadLoop7 + lda $2007 + cmp $04 + bne .PPU2Latches7 + inc $04 + dey + bne .PPUReadLoop7 + +.PPUDrpcjr7 + lda #DrpcjrMess + sta $01 + jsr NESWriter0 + inc SCORE + jmp PPU1_End + +.PPU2Latches7 + lda #$00 + sta $2005 + lda #$00 + sta $2006 + lda #$24 + sta $2006 + lda #$05 + sta $2006 + lda $2007 + +.PPUReadLoop7b + lda $2007 + cmp $04 + bne .PPUError7 + inc $04 + dey + bne .PPUReadLoop7b +.PPUNES7 + lda #NesMess + sta $01 + jsr NESWriter0 + inc SCORE + jmp .PPUTest8 + +.PPUError7 + jsr WriteError +;----------------------------- +.PPUTest8 + lda #$3F + sta $2006 + lda #$05 + sta $2006 + + ldx #$33 +.PPUWriteLoop8 + stx $2007 + inx + cpx #$3A + bne .PPUWriteLoop8 + + lda #$3F + sta $2006 + lda #$25 + sta $2006 + + ldx #$33 + stx $04 + ldy #7 + + lda #$22 ; Where the msg prints. + sta $02 + lda #$FB + sta $03 +.PPUReadLoop8 + lda $2007 + cmp $04 + bne .PPUPalNES8 + inc $04 + dey + bne .PPUReadLoop8 + + +.PPUDrpcjr8 + lda #DrpcjrMess + sta $01 + jsr NESWriter0 + inc SCORE + jmp PPU1_End + +.PPUPalNES8 + lda $2007 + cmp $04 + bne .PPUError8 + inc $04 + dey + bne .PPUPalNES8 +.PPUNES8 + lda #NesMess + sta $01 + jsr NESWriter0 + inc SCORE + jmp PPU1_End + +.PPUError8 + jsr WriteError +;---------------------------------------------------------------- +PPU1_End + ldx #$23 + ldy #$28 + jsr PrintScore + jsr ScrOnWaitKey +;---------------------------------------------------------------- +PPUTest_2 ; ! Test Sprites ! + +.WaitV06 + lda $2002 + bpl .WaitV06 ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx $2001 ;Screen display off, amongst other things + + + jsr WipePPU + + lda #<.Mess010 + sta $00 + lda #>.Mess010 + sta $01 + lda #$20 + sta $02 + lda #$40 + sta $03 + jsr NESWriter0 +;----------------------------- +.PPUTest20 ; ! Test Sprite 0 collision detection ! + lda #$FF ; What is filled in the SPRRAM + jsr ClearSPRRAM + + lda #$20 ; Where the msg prints. + sta $02 + lda #$D4 + sta $03 + + lda #200 ;New y pos for spr0 + sta $700 + lda #$07 + sta $4014 ;Copy $700 to Spr-RAM + + lda #$18 + sta $2001 ; Sprite & Display On + + ldx #0 +.WaitV08 + lda $2002 + bpl .WaitV08 ;Wait for vertical blanking interval + stx $2005 + stx $2005 + stx $2006 + stx $2006 +.WaitV09 + lda $2002 + bmi .WaitV09 ; Stupid fix for bad emus. + +.PPUTestLoop20 + lda $2002 + asl + bmi .PPUError20 + bcc .PPUTestLoop20 ; Loop for one whole frame + + lda #80 ;New y pos for spr0 + sta $700 + lda #$07 + sta $4014 ;Copy $700 to Spr-RAM + + stx $2005 + stx $2005 + stx $2006 + stx $2006 +.WaitV0A + lda $2002 + bmi .WaitV0A ; Stupid fix for bad emus. + +.PPUTestLoop20_1 + lda $2002 + asl + bmi .PPUOk20 + bcc .PPUTestLoop20_1 ; Loop for one whole frame + jmp .PPUError20 + + lda #$08 + sta $2001 ; Sprite Off, Display On + stx $2005 + stx $2005 + stx $2006 + stx $2006 +.WaitV0B + lda $2002 + bmi .WaitV0B ; Stupid fix for bad emus. + +.PPUTestLoop20_2 + lda $2002 + asl + bmi .PPUError20 + bcc .PPUTestLoop20_2 ; Loop for one whole frame + + +.PPUOk20 + stx $2001 ; Sprite & Display Off + jsr WriteOk + inc SCORE + jmp .PPUTest21 + +.PPUError20 + stx $2001 ; Sprite & Display Off + jsr WriteError +;----------------------------- +.PPUTest21 ; Test Sprite Overflow ;-) + lda #$20 ; Where the msg prints. + sta $02 + lda #$F4 + sta $03 + + ldx #$00 + lda #$18 + sta $2001 ; Sprite & Display On + +.WaitV0C + lda $2002 + bpl .WaitV0C ;Wait for vertical blanking interval + +.WaitV0D + lda $2002 + bmi .WaitV0D ; Stupid fix for bad emus. + +.PPUTestLoop21 + lda $2002 + tay + and #$20 + bne .PPUError21 + tya + bpl .PPUTestLoop21 ; Loop for one whole frame + + lda #80 ;New y pos for spr0 + sta $704 + sta $708 + sta $70C + sta $710 + sta $714 + sta $718 + sta $71C + sta $720 + + lda #$07 + sta $4014 ;Copy $700 to Spr-RAM + +.WaitV0E + lda $2002 + bpl .WaitV0E ;Wait for vertical blanking interval + +.WaitV0F + lda $2002 + bmi .WaitV0F ; Stupid fix for bad emus. + +.PPUTestLoop21_1 + lda $2002 + tay + and #$20 + bne .PPUOk21 + tya + bpl .PPUTestLoop21_1 ; Loop for one whole frame + jmp .PPUError21 + +.PPUOk21 + stx $2001 ; Sprite & Display Off + jsr WriteOk + inc SCORE + jmp .PPUTest22 + +.PPUError21 + stx $2001 ; Sprite & Display Off + jsr WriteError +;----------------------------- +.PPUTest22 + lda #$21 ; Where the msg prints. + sta $02 + lda #$14 + sta $03 + + ldx #$00 + stx $2003 +.PPUWriteLoop22 + stx $2004 + inx + bne .PPUWriteLoop22 + + stx $04 + stx $2003 +.PPUReadLoop22 + lda $2004 + cmp $04 + bne .PPUError22 + inc $04 + inx + bne .PPUReadLoop22 + + +.PPUOk22 + jsr WriteOk + inc SCORE + jmp .PPUTest23 + +.PPUError22 + jsr WriteError +;----------------------------- +.PPUTest23 + lda #$21 ; Where the msg prints. + sta $02 + lda #$34 + sta $03 + + ldx #$00 + stx $2003 + txa + clc +.PPUWriteLoop23 + sta $0500,X + adc #$01 + inx + bne .PPUWriteLoop23 + lda #$05 + sta $4014 + + stx $04 + stx $2003 +.PPUReadLoop23 + lda $2004 + cmp $04 + bne .PPUError23 + inc $04 + inx + bne .PPUReadLoop23 + + +.PPUOk23 + jsr WriteOk + inc SCORE + jmp .PPUTest24 + +.PPUError23 + jsr WriteError +;----------------------------- +.PPUTest24 + lda #$21 ; Where the msg prints. + sta $02 + lda #$54 + sta $03 + + lda #$24 + sta $2003 + ldx #$00 + txa + clc +.PPUWriteLoop24 + sta $0500,X + adc #$01 + inx + bne .PPUWriteLoop24 + lda #$05 + sta $4014 + + stx $04 + lda #$24 + sta $2003 +.PPUReadLoop24 + lda $2004 + cmp $04 + bne .PPUError24 + inc $04 + inx + bne .PPUReadLoop24 + + +.PPUOk24 + jsr WriteOk + inc SCORE + jmp .PPUTest25 + +.PPUError24 + jsr WriteError +;----------------------------- +.PPUTest25 +;---------------------------------------------------------------- +PPU2_End + ldx #$23 + ldy #$28 + jsr PrintScore + jsr ScrOnWaitKey +;---------------------------------------------------------------- +PPUTest_3 ; VBl clear after read. +;----------------------------- +.WaitV07 + lda $2002 + bpl .WaitV07 ;Wait for vertical blanking interval + ldx #$00 + stx $2000 + stx $2001 ;Screen display off, amongst other things + + + jsr WipePPU + + lda #<.Mess020 + sta $00 + lda #>.Mess020 + sta $01 + lda #$20 + sta $02 + lda #$40 + sta $03 + jsr NESWriter0 +;----------------------------- +.PPUTest14 + lda #$08 + sta $2001 ; Display On + + lda #$20 ; Where the msg prints. + sta $02 + lda #$DA + sta $03 + +.PPUTestLoop14 + lda $2002 + bpl .PPUTestLoop14 + + lda #$00 + sta $2001 ; Display Off + lda $2002 + bmi .PPUError14 + + +.PPUOk14 + jsr WriteOk + inc SCORE + jmp .PPUTest15 + +.PPUError14 + jsr WriteError +;----------------------------- +.PPUTest15 + +PPU3_End + ldx #$23 + ldy #$28 + jsr PrintScore + jsr ScrOnWaitKey + +.TestNoKey5 + lda CONTROLLER1 + and #%11010000 + bne .TestNoKey5 + +;---------------------------------------------------------------- + jmp Reset_Routine +;---------------------------------------------------------------- + + + + + + + + + +;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +; !!! Subroutines !!! +;---------------------------------------------------------------- +PrintScore SUBROUTINE ; need X & Y for pos. + stx $02 ; Where the msg prints. + sty $03 + lda #$20 + sta SCORE_T + lda SCORE + cmp #10 + bmi .singleScore + lda #$30 + sta SCORE_T + lda SCORE +.countMore + inc SCORE_T + sec + sbc #10 + cmp #10 + bpl .countMore + +.singleScore + clc + adc #$30 + sta SCORE_T+1 + lda #SCORE_T + sta $01 + jmp NESWriterS + +;---------------------------------------------------------------- + +TestEnd +;Enable vblank interrupts, etc. + lda #%10001000 + sta $2000 + lda #%00011110 ;Screen on, sprites on, show leftmost 8 pixels, colour + sta $2001 + + + +.Title2Loop + lda VBPASS + beq .Title2Loop ;Wait for VBlank to pass... + + +.alltid + jmp .alltid + + +;***************************************************** +;----------------------------------------------------- +;***************************************************** + +ScrOnWaitKey SUBROUTINE +;Enable vblank interrupts, etc. + lda #%10001000 + sta $2000 + lda #%00011110 ;Screen on, sprites on, show leftmost 8 pixels, colour + sta $2001 + +.TestNoKey + lda CONTROLLER1 + and #%11010000 + bne .TestNoKey +.WaitKey0 + lda CONTROLLER1 + and #%11010000 + beq .WaitKey0 + rts + +;***************************************************** +;----------------------------------------------------- +;***************************************************** + +WipePPU SUBROUTINE + lda #$20 + sta $2006 + lda #$00 + sta $2006 + + ldx #$00 + ldy #$10 +.ClearPPU sta $2007 + dex + bne .ClearPPU + dey + bne .ClearPPU + + lda #$00 + sta $2003 + tay +.ClearSpr sta $2004 + dey + bne .ClearSpr + rts + +;-------------------------------- +ClearSPRRAM SUBROUTINE ; Needs fill value in A + + ldx #$08 + stx $2003 +.ClearSPRRAM sta $0700,X ;$700 FOR NOW!!!! + sta $2004 + inx + bne .ClearSPRRAM + + rts +;-------------------------------------------------- + + + +PrintFullScreen SUBROUTINE +;-------------------------------------------------- +; Needs $00 & $01 for address of picture. +; Needs A for screen number (0-3). +;-------------------------------------------------- + asl + asl + adc #$20 ;Load Name and Attribute Table + sta $2006 + lda #$00 + sta $2006 + + ldy #$00 + ldx #$04 + +.LoadTitle + lda ($00),Y ;Load Title Image + sta $2007 + iny + bne .LoadTitle + inc $01 + dex + bne .LoadTitle + + rts + +;-------------------------------------------------- +WriteOk SUBROUTINE +;-------------------------------------------------- + lda #OkMess + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteError SUBROUTINE +;-------------------------------------------------- + lda #ErrMess + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteErrorZ SUBROUTINE +;-------------------------------------------------- + lda #ErrMessZ + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteErrorN SUBROUTINE +;-------------------------------------------------- + lda #ErrMessN + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteErrorV SUBROUTINE +;-------------------------------------------------- + lda #ErrMessV + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteErrorC SUBROUTINE +;-------------------------------------------------- + lda #ErrMessC + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteErrorD SUBROUTINE +;-------------------------------------------------- + lda #ErrMessD + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteErrorI SUBROUTINE +;-------------------------------------------------- + lda #ErrMessI + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteErrorB SUBROUTINE +;-------------------------------------------------- + lda #ErrMessB + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteErrorR SUBROUTINE +;-------------------------------------------------- + lda #ErrMessR + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +WriteErrorW SUBROUTINE +;-------------------------------------------------- + lda #ErrMessW + sta $01 + jmp NESWriterS + +;-------------------------------------------------- +NESWriterS SUBROUTINE ;S as in Safe +.WriteLoopS + lda $2002 + bpl .WriteLoopS ;Wait for vertical blanking interval + jsr NESWriter0 + lda #$00 + sta $2005 + sta $2005 + rts +;-------------------------------------------------- +NESWriter0 SUBROUTINE +;-------------------------------------------------------------------------- +; Needs $00 & $01 as address to text, $02 & $03 as PPU destination address. +;-------------------------------------------------------------------------- + lda $02 + sta $2006 + lda $03 + sta $2006 + + ldy #$00 +.WriteChr + lda ($00),Y ;Load Title Image + beq .WriteEnd + cmp #$0A + beq .NewRow + sta $2007 +.WriteLoop + iny + bne .WriteChr + inc $01 + bne .WriteChr +.WriteEnd + rts + +.NewRow + clc + lda $03 + adc #$20 ;One whole row. + bcc .NewRow2 + inc $02 +.NewRow2 + and #$e0 + ldx $02 + stx $2006 + sta $03 + sta $2006 + jmp .WriteLoop +;-------------------------------------------------- + + + +SetPalette SUBROUTINE +;---------------------------------- +; INPUT: A: PALETTE NUMBER +;---------------------------------- + tax + lda #<.Palette + sta PALETTEPTR + lda #>.Palette + sta PALETTEPTR+1 ;Point to Palette + + cpx #$00 + beq .NoAddPalette +.AddPalette + lda PALETTEPTR + clc + adc #$20 ;Multiply Palette Index by 32 + sta PALETTEPTR + lda PALETTEPTR+1 + adc #$00 + sta PALETTEPTR+1 + dex + bne .AddPalette + +.NoAddPalette + ldx #$3F + stx $2006 + ldx #$00 + stx $2006 + + ldy #$00 + ldx #$20 ;Set BG & Sprite palettes. +.InitPal lda (PALETTEPTR),Y + sta $2007 + sta TEMPPAL,Y ;Store to palette copy + iny + dex + bne .InitPal + rts + +;********************************************************* +.Palette + INCLUDE TanksPal.ASM +;********************************************************* + + + +ToDecimal SUBROUTINE +;-------------------------------------------- +; INPUT: A: Number to convert from Hex to Dec +;-------------------------------------------- + sta $0100 + tya + pha + + lda $0100 + ldy #$FF + sec +.ToDecLoop1 + iny + sbc #$0A + bcs .ToDecLoop1 + adc #$0A + sta $0100 + tya + asl + asl + asl + asl + ora $0100 + sta $0100 + + pla + tay + lda $0100 + rts +;-------------------------------------------------- + + + +;-------------------------------------------------- +Fadeout SUBROUTINE + lda #$3F + sta $2006 + lda #$00 + sta $2006 + + ldx #$00 + stx $0100 + ldy #$20 +.FadePal + ldx $0100 + lda TEMPPAL,X + tax + lda .FadeIndex,X ;Get Fade info. + sta $2007 + ldx $0100 + sta TEMPPAL,X + inc $0100 + dey + bne .FadePal + + dec FADESTATUS + lda #$00 + sta $2005 + sta $2005 + lda #%10001000 + ora PPU2000 + sta PPU2000 + sta $2000 +; lda #%00011110 +; sta $2001 + + rts +;-------------------------------------------------- +.FadeIndex + INCLUDE TanksFadePal.ASM +;-------------------------------------------------- + + + +;---------------------------------------------------------------------- +; ! This is run every VBlank ! +;---------------------------------------------------------------------- +NMI_Routine SUBROUTINE + php + pha + txa + pha + tya + pha + + lda #$01 + sta VBPASS + lda VBODD + eor #$01 + sta VBODD + +;---------- READ JOYPAD ----------------------- + + ldx #$01 + stx $4016 + dex + stx $4016 + stx CONTROLLER1 + stx CONTROLLER2 + stx CONTROLLER3 + stx CONTROLLER4 + stx CONTROLER1X + stx CONTROLER2X + ldy #$05 ; Write to $0500. + sty $05 + ldy #$00 + sty $04 + +.ReadCont1_0 + ldy #8-1 ; Read 3 x 8 bits from $4016 +.ReadCont1 + lda $4016 ; Read controller port. + sta ($04),y + ror + lda CONTROLLER1,x + rol + sta CONTROLLER1,x + dey + bpl .ReadCont1 + lda $04 + adc #8 + sta $04 + inx + inx + cpx #6 + bne .ReadCont1_0 + + +;--------------------------------------------- +;--- TEST FOR FADEOUT ------------------------ + lda FADESTATUS + beq .NoFade + lda VBDELAY + bne .DelayFade + jsr Fadeout + lda #$04 + sta VBDELAY + jmp .NoFade +.DelayFade + dec VBDELAY +;--------------------------------------------- +.NoFade + + + lda GAMESCREEN + cmp #$01 + bne .NotGameScreenPlanets + lda VBWAIT + beq .NoPlanetChangeWait + dec VBWAIT +.NoPlanetChangeWait + lda PLANETCHANGE + beq .PlanetChangeEnd + lda #$00 + sta PLANETCHANGE + +; jsr DisplayPlanetName + +.PlanetChangeEnd + lda #$00 + sta $2005 + sta $2005 + + jmp .VBEnd + +.NotGameScreenPlanets + cmp #$02 + bne .NotGameScreenTitle + lda #$00 + sta TITLESCROLL2 + sta $2005 + sta $2005 + inc TITLESCROLL1 + lda TITLESCROLL1 + cmp #$02 + bne .NotTooWavyTitle + lda #$00 + sta TITLESCROLL1 + + inc TITLESCROLL + lda TITLESCROLL + cmp #$40 + bne .NotTooWavyTitle + lda #$00 + sta TITLESCROLL +.NotTooWavyTitle + jmp .VBEnd +.NotGameScreenTitle + + +; lda #$07 +; sta $4014 ;Copy $700 to Spr-RAM + +;--- SET SCROLLING ---------- + lda #$40 + lda #%10001001 +.SaveScrolling + sta $2000 + sta PPU2000 + lda #$00 + sta $2005 + sta $2005 + +.VBEnd + + lda #$07 + sta $4014 + pla + tay + pla + tax + pla + plp + rti +;-------------------------------------------------------- +; ! Here ends the VBlank routines ! +;-------------------------------------------------------- +IRQ_Routine + pha ;Push A + php ;Push SR + pla ;Pull SR to A + sta $07 ;Save SR in $7 + pla ;Pull A + rti + + + ORG $FC00,0 +JmpTstFail + jmp CPUError49W + + ORG $FD00,0 +JmpTstOk + jmp CPUOk49 + ORG $FDFC,0 + jmp CPUError49W + + + ORG $FE00,0 +Ind_Values1 + dc.b $FF + dc.b $88 + dc.b $44 + dc.b $BB + + ORG $FEFE,0 +Ind_Values2 + dc.b $AA + dc.b $55 + dc.b $22 + dc.b $33 + +;That's all the code. Now we just need to set the vector table approriately. + + ORG $FFFA,0 + dc.w NMI_Routine + dc.w Reset_Routine + dc.w IRQ_Routine ;Used to test the BRK instruction. + + +;The end. diff --git a/stress/NEStress.txt b/stress/NEStress.txt new file mode 100644 index 0000000..5a43e35 --- /dev/null +++ b/stress/NEStress.txt @@ -0,0 +1,196 @@ + NEStress - A NES stress/testing program. + + +PPU Test1: + + *PPU Normal Write/Read. + Just Writes a couple of bytes to a specific address + and reads them back by specifying the same address. + Then reads one "garbage" byte before comparing values. + If this doesn't work, then all other test will fail also. + + *PPU Write Read Write. + This tests if the PPU address is increased when doing a + read between writes (used by some "RARE" games). + + *PPU First Read Then Write. + This tests if the PPU address is increased after a first read. + + *PPU First Read Corret. + This tests the PPU read "pipe" to see if the first read is + just random or the actual value in the "pipe". + + *PPU Mixed Address / Data Write. + This test so that the PPU address isn't changed before both + bytes are written to the address register. + + *PPU $3000 Mirroring. + Tests the mirroring between $3000 and $2000. + Writes to $3xxx and reads from $2xxx plus the other way. + (Used by one version of Trojan at least) + + *PPU $3FFF-$0000 Wrap Around. + To test if the address is correctly reset to $0000 after + access to $3FFF. One emulator actually crashed during this test. + + *PPU Palette Write / Read. + This is actually very strange. + At least the Dr. PC Jr has this memory before the "pipe", + the NES doesn't, Famicoms behaviour is unknown. + This means there is no "garbage" read before the real data + (on Dr. PC Jr at least). + + +PPU Test2: + + *Sprite Collision. + Tests for accurate pixel detection collision. + Also test that there are no collisions if BGR or Sprites are turned off. + + *Sprite Limmiter. + Checks if the sprite max bit is set when 8 sprites or more are on the + same raster scanline. + + *Sprite data CPU write / read. + NOT CORRECT. + + *Sprite data DMA write / CPU read. + NOT CORRECT. + + *Sprite data diff DMA write / CPU read. + NOT CORRECT. + + +PPU Test3: + + *VBl test, bit 7 of $2002. + Checks if the bit is reset after a read. + + +CPU Tests: + These tests checks that all flags are set correctly and the results. + The only instructions that should set the overflow flag (V) is ADC, + SBC and BIT (Test2...). + +CPU Test1: + "Aritmethic" operations. + + *ADC/SBC Should set: V, C, N and Z. + + *CMP... Shold set: C, N and Z. + + *INC/DEC... Should set: N and Z. + + *ASL,ROL... Should set: C, N and Z. + + +CPU Test2: + Logical operations. + + *LDA, LDX and LDY should set: N and Z. + + *TAX, TAY, TSX, TXA and TYA should set: N and Z. + + *TXS shouldn't set any flags as nothing is moved to a data register. + + *PLA should set: N and Z. + + *AND, EOR and ORA should set: N and Z. + + *BIT should set: V, N and Z. + + +CPU Test3: + Address modes. + + *Imidiate: + A little hard to test actually =). + It just writes and reads an address. + + *Zero Page: + Same as Imidiate... + + *Zero Page,X: + This writes and reads with Zero Page and Zero Page,X. + Remember that Zero Page,X always writes to the zero page, + (wrap around). + + *Absolute: + Same as Imidiate... + + *Absolute,X: + This writes and reads with Absolute and Absolute,X. + + + *Absolute,Y: + This writes and reads with Absolute and Absolute,Y. + + *(Indirect,X): + This Writes and reads with Absolute and (Indirect,X). + First gets the address from (Zero Page+x), then gets the value + from that address. Remeber ZP wrap. + + *(Indirect),Y: + This Writes and reads with Absolute and (Indirect),Y. + First gets the address from (Zero Page) and adds Y to the fetched + address then gets the value from that address. + + *JMP: + Not much to say here, if you have come this far in the test it works. + + *JMP(): + First tests that the JMP() works correct then tests that the + address isn't read from the same page. + should read from $2FF and $300, not $2FF and $200. + + *JSR: + Tests that the jump is performed and that the return address + is correct + + *RTS: + This pushes an address on the stack and does the RTS, then + checks that it returned to the right address (pushed address + plus 1). + + *RTI: + Like the RTS, but pushes the Acumulator also. + Return address is the pushed address. + + +CPU Test4: + Misc. + + *Write / Read SR: + This tries to set all bits in the Status Register then + reads them back, this should return $FF. + The second test clears all bits in SR and reads them back, + This returns $30 now. The B (BRK) bit is only NULL when an + interrupt is taken. + + *BRK Flags: + Reads the SR flags inside the irq and after it. + + *BRK return address: + The BRK pushes PC+1 on the stack because the CPU always + reads at least 2 bytes for each instruction. + + *Stack Address: + This plays around with the stack and checks that it + wraps correctly. + + *CPU RAM: + This just writes to all the RAM locations and reads it back. + + *CPU RAM Mirroring: + This checks that $800, $1000 and $1800 is mirrored to $0. + + +IOTest: + First strobes $4016 then reads the port ($4016) 24 times and writes + it on the screen. + + go to next screen by first pressing Select & Start then start again. + + + + diff --git a/stress/SolarTitleNAM.asm b/stress/SolarTitleNAM.asm new file mode 100644 index 0000000..0ec3309 --- /dev/null +++ b/stress/SolarTitleNAM.asm @@ -0,0 +1,66 @@ +; solartitle.nam + + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $01, $00, $02, $03, $04, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $05, $06, $07, $08, $09, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $0a, $0b, $0c, $0d, $0e, $0f, $10, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $11, $12, $13, $14, $15, $16, $17, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $18, $19, $1a, $1b, $1c, $1d, $00, $1e, $1f, $20, $21, $22, $23, $24 + DC.B $00, $25, $26, $27, $28, $29, $2a, $2b, $1e, $1f, $20, $21, $22, $23, $24, $00 + DC.B $00, $00, $2c, $2d, $2e, $2f, $30, $31, $00, $32, $33, $34, $35, $36, $37, $38 + DC.B $00, $39, $3a, $3b, $3c, $3d, $3e, $00, $32, $33, $34, $35, $36, $37, $38, $00 + DC.B $00, $00, $00, $00, $3f, $40, $41, $00, $00, $42, $43, $44, $45, $46, $47, $2e + DC.B $00, $48, $00, $00, $49, $4a, $4b, $00, $42, $43, $44, $45, $46, $47, $2e, $00 + DC.B $00, $00, $00, $00, $4c, $4d, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $4e, $4f, $50, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $51, $52, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $53, $54, $55, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $56, $00, $00, $00, $00, $00, $00, $00, $00, $00, $57, $00, $00 + DC.B $00, $58, $59, $5a, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $5b, $00, $00, $00, $00, $5c, $5d, $5e, $5f, $60, $61 + DC.B $62, $63, $64, $65, $66, $67, $68, $00, $00, $00, $00, $69, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $6a, $6b, $6c, $6d, $6e, $6f + DC.B $70, $71, $72, $73, $74, $75, $76, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $69, $00, $5b, $00, $77, $78, $79, $7a, $7b, $7c + DC.B $7d, $7e, $7f, $80, $81, $82, $83, $00, $00, $84, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $5b, $00, $00, $00, $00, $00, $00, $00, $85, $86, $87, $88, $89, $8a + DC.B $8b, $8c, $8d, $8e, $8f, $90, $91, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $5b, $00, $00, $00, $00, $92, $00, $00, $00 + DC.B $00, $00, $00, $92, $00, $00, $00, $00, $00, $00, $93, $94, $95, $96, $97, $98 + DC.B $00, $99, $97, $98, $94, $9a, $00, $00, $00, $00, $9b, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $5b, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $00, $84, $00, $00, $00, $00, $5b, $00, $00 + DC.B $00, $9c, $9d, $00, $5b, $00, $00, $9e, $00, $00, $00, $00, $00, $00, $92, $00 + DC.B $00, $5b, $00, $00, $84, $00, $9e, $00, $00, $00, $5b, $00, $00, $00, $00, $00 + DC.B $00, $9f, $a0, $00, $00, $00, $00, $00, $00, $95, $a1, $a2, $00, $a3, $95, $a1 + DC.B $a4, $98, $95, $96, $96, $a2, $98, $00, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $69, $00, $00, $00, $00, $a4, $99, $95, $00, $a3, $95, $a1 + DC.B $a4, $98, $95, $96, $96, $a2, $98, $94, $69, $5b, $00, $00, $00, $00, $69, $00 + DC.B $00, $00, $92, $00, $00, $00, $5b, $00, $00, $00, $00, $92, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $69, $00, $00, $00, $9c, $9d, $00, $00, $00, $00 + DC.B $5b, $00, $00, $00, $00, $00, $00, $92, $00, $5b, $00, $9e, $a3, $95, $a1, $a4 + DC.B $98, $95, $96, $94, $5b, $00, $00, $00, $00, $00, $9f, $a0, $00, $00, $00, $5b + DC.B $00, $00, $69, $00, $9e, $00, $00, $5b, $00, $00, $00, $00, $00, $00, $00, $00 + DC.B $00, $00, $00, $00, $00, $00, $00, $84, $00, $00, $69, $00, $00, $00, $92, $00 + DC.B $00, $00, $00, $00, $00, $69, $00, $00, $00, $69, $00, $00, $a3, $98, $a2, $a5 + DC.B $a6, $a4, $94, $00, $9c, $9d, $00, $00, $92, $00, $00, $00, $00, $00, $00, $00 + DC.B $9b, $00, $9e, $00, $00, $00, $00, $9c, $9d, $00, $00, $00, $69, $00, $00, $92 + DC.B $00, $00, $00, $00, $9f, $a0, $00, $00, $00, $00, $00, $9e, $00, $69, $00, $92 + DC.B $00, $00, $00, $00, $92, $00, $69, $9f, $a0, $00, $84, $92, $00, $00, $84, $00 + DC.B $00, $00, $00, $69, $00, $00, $92, $00, $00, $5b, $00, $00, $00, $00, $00, $00 + DC.B $00, $a7, $a8, $a9, $aa, $00, $9e, $00, $00, $ab, $ac, $ad, $ad, $ad, $00, $a3 + DC.B $ae, $a3, $00, $af, $97, $ae, $a2, $94, $00, $00, $00, $00, $5b, $00, $69, $00 + DC.B $69, $b0, $b1, $b2, $b3, $00, $00, $92, $a3, $a3, $95, $b4, $a2, $96, $96, $b5 + DC.B $a5, $a6, $98, $a2, $a3, $a4, $b6, $a3, $97, $00, $00, $9e, $9c, $9d, $00, $00 + DC.B $00, $b7, $b8, $b9, $ba, $00, $69, $9c, $9d, $00, $92, $00, $84, $00, $9e, $00 + DC.B $00, $92, $00, $00, $9c, $9d, $00, $9e, $84, $00, $92, $5b, $9f, $a0, $92, $00 + DC.B $69, $00, $9e, $00, $00, $69, $9e, $9f, $a0, $92, $00, $00, $bb, $00, $92, $00 + DC.B $92, $00, $00, $9e, $9f, $a0, $69, $00, $92, $92, $00, $9e, $92, $00, $69, $00 + DC.B $40, $50, $10, $00, $50, $50, $00, $00, $04, $55, $55, $55, $05, $55, $55, $15 + DC.B $04, $21, $00, $03, $05, $01, $c0, $00, $c4, $08, $81, $a0, $a0, $60, $c0, $10 + DC.B $aa, $2e, $56, $54, $52, $5e, $a4, $82, $4e, $68, $2a, $55, $55, $ea, $a4, $c8 + DC.B $5e, $9e, $57, $5a, $58, $5e, $96, $ba, $06, $0d, $07, $0e, $0a, $09, $0b, $07 diff --git a/stress/Tanks.chr b/stress/Tanks.chr new file mode 100644 index 0000000000000000000000000000000000000000..1f1252fadc1415dcb8b31a811a64de2488ecb1e8 GIT binary patch literal 8192 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 literal 0 HcmV?d00001 diff --git a/stress/TanksFadePal.ASM b/stress/TanksFadePal.ASM new file mode 100644 index 0000000..6104263 --- /dev/null +++ b/stress/TanksFadePal.ASM @@ -0,0 +1,6 @@ +; tanksfade.pal + + DC.B $2d, $1d, $01, $02, $05, $06, $1d, $06, $09, $1d, $09, $0c, $1d, $0d, $0d, $0d + DC.B $00, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0a, $0b, $0c, $2e, $0e, $0e + DC.B $3d, $11, $12, $13, $14, $15, $16, $17, $18, $19, $1a, $1b, $1c, $1d, $1e, $1e + DC.B $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c, $10, $2e, $2e diff --git a/stress/TanksPal.ASM b/stress/TanksPal.ASM new file mode 100644 index 0000000..68e63a9 --- /dev/null +++ b/stress/TanksPal.ASM @@ -0,0 +1,46 @@ +; tankspal.bin + + DC.B $0d, $27, $37, $02, $0d, $17, $27, $12, $0d, $07, $17, $22, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $2d, $05, $26, $37, $0d, $00, $00, $00, $0d, $00, $00, $00 + + DC.B $0d, $06, $10, $1e, $0d, $07, $00, $2e, $0d, $08, $2d, $1d, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $2d, $05, $26, $37, $0d, $00, $00, $00, $0d, $00, $00, $00 + + DC.B $0d, $16, $26, $03, $0d, $06, $16, $04, $0d, $07, $06, $05, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $2d, $05, $26, $37, $0d, $00, $00, $00, $0d, $00, $00, $00 + + DC.B $0d, $20, $32, $30, $0d, $28, $2a, $37, $0d, $16, $28, $27, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $2d, $05, $26, $37, $0d, $00, $00, $00, $0d, $00, $00, $00 + + DC.B $0d, $28, $38, $06, $0d, $17, $28, $30, $0d, $17, $27, $16, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $2d, $05, $26, $37, $0d, $00, $00, $00, $0d, $00, $00, $00 + + DC.B $0d, $3c, $20, $30, $0d, $3b, $3c, $3c, $0d, $2b, $3b, $2c, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $2d, $05, $26, $37, $0d, $00, $00, $00, $0d, $00, $00, $00 + + DC.B $0d, $21, $31, $2c, $0d, $11, $21, $1c, $0d, $01, $11, $0c, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $2d, $05, $26, $37, $0d, $2c, $3c, $30, $0d, $00, $00, $00 + + DC.B $0d, $00, $10, $1e, $0d, $2d, $00, $2f, $0d, $0b, $2d, $1d, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $2d, $05, $26, $37, $0d, $00, $00, $00, $0d, $00, $00, $00 + + DC.B $0d, $13, $23, $16, $0d, $03, $13, $27, $0d, $01, $03, $38, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $0d, $05, $26, $37, $0d, $00, $00, $00, $0d, $00, $00, $00 + + DC.B $0d, $17, $27, $16, $0d, $07, $17, $28, $0d, $0c, $1b, $29, $0d, $06, $27, $38 + DC.B $0d, $0a, $1a, $2a, $0d, $05, $26, $37, $0d, $00, $00, $00, $0d, $00, $00, $00 + + DC.B $0d, $2d, $10, $20, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d + DC.B $0d, $06, $16, $36, $0d, $0a, $2a, $3a, $0d, $00, $10, $20, $0d, $0d, $0d, $0d + + DC.B $0d, $02, $27, $20, $0d, $08, $27, $37, $0d, $11, $21, $31, $0d, $07, $16, $28 + DC.B $0d, $1c, $3c, $20, $0d, $08, $00, $10, $0d, $03, $13, $10, $0d, $03, $06, $16 + + DC.B $0d, $06, $1a, $38, $0d, $01, $00, $30, $0d, $01, $11, $21, $0d, $21, $31, $30 + DC.B $0d, $07, $17, $27, $0d, $16, $26, $37, $0d, $12, $3c, $30, $0d, $06, $27, $38 + + DC.B $0d, $10, $10, $10, $0d, $16, $28, $39, $0d, $2d, $10, $30, $0d, $1d, $01, $11 + DC.B $0d, $1d, $28, $17, $0d, $1c, $3c, $20, $0d, $19, $30, $30, $0d, $0d, $0d, $0d + + DC.B $0d, $06, $16, $26, $0d, $07, $17, $27, $0d, $08, $18, $28, $0d, $09, $19, $29 + DC.B $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d diff --git a/test_roms.xml b/test_roms.xml new file mode 100644 index 0000000..6f61c9b --- /dev/null +++ b/test_roms.xml @@ -0,0 +1,723 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tutor/make.bat b/tutor/make.bat new file mode 100644 index 0000000..40a6245 --- /dev/null +++ b/tutor/make.bat @@ -0,0 +1 @@ +asm6 tutor.asm tutor.nes diff --git a/tutor/tutor.asm b/tutor/tutor.asm new file mode 100644 index 0000000..33912e8 --- /dev/null +++ b/tutor/tutor.asm @@ -0,0 +1,23 @@ +; iNES header + +; iNES identifier +.byte "NES",$1a + +; Number of PRG-ROM blocks +.byte $01 + +; Number of CHR-ROM blocks +.byte $01 + +; ROM control bytes: Horizontal mirroring, no SRAM +; or trainer, Mapper #0 +.byte $00, $00 + +; Filler +.byte $00,$00,$00,$00,$00,$00,$00,$00 + +; PRG-ROM +.include "tutorprg.asm" + +; CHR-ROM +.include "tutorchr.asm" \ No newline at end of file diff --git a/tutor/tutor.nes b/tutor/tutor.nes new file mode 100644 index 0000000000000000000000000000000000000000..aab0283b5031b24f720e85d30300aefffa66a4d7 GIT binary patch literal 24592 zcmeI3!D}2<9LL{Gl8M@7O+@1;8lDocy~spsjWV>e?oP5}cXz_f#wHgT5`0=3LQZWC zVFKa?5hf=+R9Go{D2x!nKR}tiX-*4Xdb6jJ<3f>06}P`Pn|U)?B(Y$T;O{Z)zVGk% zd%ySlecl_`98xpg7bS^^v2kZtrelA^A0cUxuSk2>7Y<`@QkK&iy!q#D)iZodYlIHe@f9gJ+H1A-S9X`Jgl2>TMJHX}fX|wWN5a zenenjUf%?-Z^GD}FwRNc+-<4zR70Yd+m)Bw4GE0m0q>dbhj^J^{-%w_N3x zCt?d-Y|}dt{VOu^B>zHkR1%S1$dYC3Kv z;`nKOp>8`?p+aY^ib>yF8jP-5#d5){&}zYfItRUvUvoq*U6`kZT8WnID>YiTsav*Y z>;1g}33cZktDc4O2xay27kF03`~b+Av}8GEv2NM_LAQ@k_&*4RlXD8iy6I5Ytkbgf zexZ07uF0%pSL4-1yIQqNwgczB;9774T{z}qna>8ZpDkWE|C&qFjF98pV9=m;%tC4D z^+D^ur;ohM$B6FX=pBxy563Y}(1iq$01`j~NB{{S0VIF~kN^@u0!RP}AOR$R1dsp{ zKmter2_OL^fCP{L5O|v{4DsB#P@aDZyuV_)O^P86AmDWUsrR`@Vd~vA2oBn(EpmZoatX@ zK0othJrvI$p`jno%k;mo3el?@!tZh*IC})TDD(UePlnK(^1oUCgD2dR%b+h z*lQj36dJ05k)F@Wjjd}dD=Wg!uKPZ0C^Ybek>=;kL4u=xJ>|*$+5Mn@J$pWI8Tk=E%YTY^o%712exmAe ziOG4AF>Py08x!&I`+*-w00|%gB!C2v01`j~|62m;6uWtoO~IcCDr4|F6bBMO0!RP} YAOR$R1dsp{Kmter2_OL^aQX>61Rhhu{{R30 literal 0 HcmV?d00001 diff --git a/tutor/tutorchr.asm b/tutor/tutorchr.asm new file mode 100644 index 0000000..b401a72 --- /dev/null +++ b/tutor/tutorchr.asm @@ -0,0 +1,90 @@ +; CHR-ROM file for the NES 101 tutorial +; Kinda sorta copyright Michael Martin, 2001,2. +; More honestly copyright Commodore Business Machines 1982. + +; The first 4K block (256 characters) is where our backgrounds come from. +; These were extracted from the Commodore 64's character ROM, and modified +; to match the NES' character definition schemas. The background is color +; 2 on the palette, and the letterforms themselves color 3. The characters +; are given tile numbers that correspond to their ASCII codes, to simplify +; the creation of the data files. + +; The first 20 character locations are blank. +.dsb $0200 +.byte $00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 32 +.byte $18,$18,$18,$18,$00,$00,$18,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 33 +.byte $66,$66,$66,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 34 +.byte $66,$66,$FF,$66,$FF,$66,$66,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 35 +.byte $18,$3E,$60,$3C,$06,$7C,$18,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 36 +.byte $62,$66,$0C,$18,$30,$66,$46,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 37 +.byte $3C,$66,$3C,$38,$67,$66,$3F,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 38 +.byte $06,$0C,$18,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 39 +.byte $0C,$18,$30,$30,$30,$18,$0C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 40 +.byte $30,$18,$0C,$0C,$0C,$18,$30,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 41 +.byte $00,$66,$3C,$FF,$3C,$66,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 42 +.byte $00,$18,$18,$7E,$18,$18,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 43 +.byte $00,$00,$00,$00,$00,$18,$18,$30,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 44 +.byte $00,$00,$00,$7E,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 45 +.byte $00,$00,$00,$00,$00,$18,$18,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 46 +.byte $00,$03,$06,$0C,$18,$30,$60,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 47 +.byte $3C,$66,$6E,$76,$66,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 48 +.byte $18,$18,$38,$18,$18,$18,$7E,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 49 +.byte $3C,$66,$06,$0C,$30,$60,$7E,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 50 +.byte $3C,$66,$06,$1C,$06,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 51 +.byte $06,$0E,$1E,$66,$7F,$06,$06,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 52 +.byte $7E,$60,$7C,$06,$06,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 53 +.byte $3C,$66,$60,$7C,$66,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 54 +.byte $7E,$66,$0C,$18,$18,$18,$18,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 55 +.byte $3C,$66,$66,$3C,$66,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 56 +.byte $3C,$66,$66,$3E,$06,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 57 +.byte $00,$00,$18,$00,$00,$18,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 58 +.byte $00,$00,$18,$00,$00,$18,$18,$30,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 59 +.byte $0E,$18,$30,$60,$30,$18,$0E,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 60 +.byte $00,$00,$7E,$00,$7E,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 61 +.byte $70,$18,$0C,$06,$0C,$18,$70,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 62 +.byte $3C,$66,$06,$0C,$18,$00,$18,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 63 +.byte $3C,$66,$6E,$6E,$60,$62,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 64 +.byte $18,$3C,$66,$7E,$66,$66,$66,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 65 +.byte $7C,$66,$66,$7C,$66,$66,$7C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 66 +.byte $3C,$66,$60,$60,$60,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 67 +.byte $78,$6C,$66,$66,$66,$6C,$78,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 68 +.byte $7E,$60,$60,$78,$60,$60,$7E,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 69 +.byte $7E,$60,$60,$78,$60,$60,$60,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 70 +.byte $3C,$66,$60,$6E,$66,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 71 +.byte $66,$66,$66,$7E,$66,$66,$66,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 72 +.byte $3C,$18,$18,$18,$18,$18,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 73 +.byte $1E,$0C,$0C,$0C,$0C,$6C,$38,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 74 +.byte $66,$6C,$78,$70,$78,$6C,$66,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 75 +.byte $60,$60,$60,$60,$60,$60,$7E,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 76 +.byte $63,$77,$7F,$6B,$63,$63,$63,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 77 +.byte $66,$76,$7E,$7E,$6E,$66,$66,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 78 +.byte $3C,$66,$66,$66,$66,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 79 +.byte $7C,$66,$66,$7C,$60,$60,$60,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 80 +.byte $3C,$66,$66,$66,$66,$3C,$0E,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 81 +.byte $7C,$66,$66,$7C,$78,$6C,$66,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 82 +.byte $3C,$66,$60,$3C,$06,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 83 +.byte $7E,$18,$18,$18,$18,$18,$18,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 84 +.byte $66,$66,$66,$66,$66,$66,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 85 +.byte $66,$66,$66,$66,$66,$3C,$18,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 86 +.byte $63,$63,$63,$6B,$7F,$77,$63,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 87 +.byte $66,$66,$3C,$18,$3C,$66,$66,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 88 +.byte $66,$66,$66,$3C,$18,$18,$18,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 89 +.byte $7E,$06,$0C,$18,$30,$60,$7E,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 90 +.byte $3C,$30,$30,$30,$30,$30,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 91 +.byte $0C,$12,$30,$7C,$30,$62,$FC,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 92 +.byte $3C,$0C,$0C,$0C,$0C,$0C,$3C,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 93 +.byte $00,$18,$3C,$7E,$18,$18,$18,$18,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 94 +.byte $00,$10,$30,$7F,$7F,$30,$10,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF ; Character 95 + +; Fill the rest of the first CHR-ROM block with zeroes. +.align $1000 + +; Here begins the second 4K block. The sprites (all one of them) get their data +; from this page. + +.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; Character 0: Blank +.byte $18,$24,$66,$99,$99,$66,$24,$18,$00,$18,$18,$66,$66,$18,$18,$00 ; Character 1: Diamond sprite + +; Fill the rest of the CHR-ROM block with zeroes, giving us exactly 8K of data, which +; is what we want and need. +.align $1000 diff --git a/tutor/tutorprg.asm b/tutor/tutorprg.asm new file mode 100644 index 0000000..445f2a2 --- /dev/null +++ b/tutor/tutorprg.asm @@ -0,0 +1,331 @@ +; Program code for NES 101 Tutorial +; Code by Michael Martin, 2001-2 + +; Assign the sprite page to page 2. +sprite = $200 + +; Allocate memory in the zero page segment. If we +; really wanted to, we could scatter these declarations +; through the code (P65 1.1 lets us do so) but not all +; assemblers allow this, and it doesn't help clarity +; any on this program. So the heck with it. + +; As a side note, P65 doesn't really grant any special +; status to any of the segments you use, and only has +; "text" and "data" built in. This means that "zp" +; could be named whatever we wanted, and it also means +; that we have to tell it where to start from (it's the +; zero page, so we start it from zero, naturally). + +enum $000 ;asm6's way of declaring vars in ram + +dx .byte 0 +a .byte 0 +scroll .byte 0 + +ende + +; If we had a normal data segment, it would have an .org $0300, so +; that it doesn't stomp on our sprite data. + +; Actual program code. We only have one PRG-ROM chip here, so the +; origin is $C000. +.org $C000 + +reset: sei + cld + ; Wait two VBLANKs. +- lda $2002 + bpl - +- lda $2002 + bpl - + + ; Clear out RAM. + lda #$00 + ldx #$00 +- sta $000,x + sta $100,x + sta $200,x + sta $300,x + sta $400,x + sta $500,x + sta $600,x + sta $700,x + inx + bne - + + ; Reset the stack pointer. + ldx #$FF + txs + + ; Disable all graphics. + lda #$00 + sta $2000 + sta $2001 + + jsr init_graphics + jsr init_input + jsr init_sound + + ; Set basic PPU registers. Load background from $0000, + ; sprites from $1000, and the name table from $2000. + lda #%10001000 + sta $2000 + lda #%00011110 + sta $2001 + + cli + + ; Transfer control to the VBLANK routines. +loop: jmp loop + +init_graphics: + jsr init_sprites + jsr load_palette + jsr load_name_tables + jsr init_scrolling + rts + +init_input: + ; The A button starts out not-pressed. + lda #$00 + sta a + rts + +init_sound: + ; initialize sound hardware + lda #$01 + sta $4015 + lda #$00 + sta $4001 + lda #$40 + sta $4017 + rts + +init_sprites: + ; Clear page #2, which we'll use to hold sprite data + lda #$00 + ldx #$00 +- sta sprite, x + inx + bne - + + ; initialize Sprite 0 + lda #$70 + sta sprite ; Y coordinate + lda #$01 + sta sprite+1 ; Pattern number + sta sprite+3 ; X coordinate + ; sprite+2, color, stays 0. + + ; Set initial value of dx + lda #$01 + sta dx + rts + +; Load palette into $3F00 +load_palette: + lda #$3F + ldx #$00 + sta $2006 + stx $2006 +- lda palette,x + sta $2007 + inx + cpx #$20 + bne - + rts + +load_name_tables: +; Jam some text into the first name table (at $2400, thanks to mirroring) + ldy #$00 + ldx #$04 + lda #bg + sta $11 + lda #$24 + sta $2006 + lda #$00 + sta $2006 +- lda ($10),y + sta $2007 + iny + bne - + inc $11 + dex + bne - + +; Clear out the Name Table at $2800 (where we already are. Yay.) + ldy #$00 + ldx #$04 + lda #$00 +- sta $2007 + iny + bne - + dex + bne - + rts + +init_scrolling: + lda #240 + sta scroll + rts + +update_sprite: + lda #>sprite + sta $4014 ; Jam page $200-$2FF into SPR-RAM + + lda sprite+3 + beq hit_left + cmp #255-8 + bne edge_done + ; Hit right + ldx #$FF + stx dx + jsr high_c + jmp edge_done +hit_left: + ldx #$01 + stx dx + jsr high_c + +edge_done: ; update X and store it. + clc + adc dx + sta sprite+3 + rts + +react_to_input: + lda #$01 ; strobe joypad + sta $4016 + lda #$00 + sta $4016 + + lda $4016 ; Is the A button down? + and #1 + beq not_a + ldx a + bne a_done ; Only react if the A button wasn't down last time. + sta a ; Store the 1 in local variable 'a' so that we this is + jsr reverse_dx ; only called once per press. + jmp a_done +not_a: sta a ; A has been released, so put that zero into 'a'. +a_done: lda $4016 ; B does nothing + lda $4016 ; Select does nothing + lda $4016 ; Start does nothing + lda $4016 ; Up + and #1 + beq not_up + ldx sprite ; Load Y value + cpx #7 + beq not_up ; No going past the top of the screen + dex + stx sprite +not_up: lda $4016 ; Down + and #1 + beq not_dn + ldx sprite + cpx #223 ; No going past the bottom of the screen. + beq not_dn + inx + stx sprite +not_dn: rts ; Ignore left and right, we don't use 'em + +reverse_dx: + lda #$FF + eor dx + clc + adc #$01 + sta dx + jsr low_c + rts + +scroll_screen: + ldx #$00 ; Reset VRAM + stx $2006 + stx $2006 + + ldx scroll ; Do we need to scroll at all? + beq no_scroll + dex + stx scroll + lda #$00 + sta $2005 ; Write 0 for Horiz. Scroll value + stx $2005 ; Write the value of 'scroll' for Vert. Scroll value + +no_scroll: + rts + +low_c: + pha + lda #$84 + sta $4000 + lda #$AA + sta $4002 + lda #$09 + sta $4003 + pla + rts + +high_c: + pha + lda #$86 + sta $4000 + lda #$69 + sta $4002 + lda #$08 + sta $4003 + pla + rts + +vblank: jsr scroll_screen + jsr update_sprite + jsr react_to_input +irq: rti + +; palette data +palette: +.byte $0E,$00,$0E,$19,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$01,$21 +.byte $0E,$20,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +; Background data +bg: +.byte " " +.byte "12345678901234567890123456789012" +.byte " " +.byte " " +.byte " PRESENTING NES 101: " +.byte " A GUIDE FOR OTHERWISE " +.byte " EXPERIENCED PROGRAMMERS " +.byte " " +.byte " TUTORIAL FILE BY " +.byte " MICHAEL MARTIN " +.byte " " +.byte " " +.byte " " +.byte " PRESS UP AND DOWN TO SHIFT " +.byte " THE SPRITE " +.byte " " +.byte " PRESS A TO REVERSE DIRECTION" +.byte " " +.byte " " +.byte " " +.byte " " +.byte " " +.byte " " +.byte "CHARACTER SET HIJACKED FROM " +.byte "COMMODORE BUSINESS MACHINES " +.byte " (C64'S CHARACTER ROM)" +.byte " " +.byte "READY. " +.byte " " +.byte " " +; Attribute table +.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +.byte $00,$00,$00,$00,$00,$00,$00,$00,$F0,$F0,$F0,$F0,$F0,$F0,$F0,$F0 +.byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$0F,$0F,$0F,$0F,$0F,$0F,$0F,$0F + +.pad $FFFA +.word vblank, reset, irq diff --git a/tvpassfail/README.txt b/tvpassfail/README.txt new file mode 100644 index 0000000..4efda2a --- /dev/null +++ b/tvpassfail/README.txt @@ -0,0 +1,51 @@ +TV pass or fail? + +This program is designed for NES and tests various aspects of the +display it is connected to. Press the A Button to switch screens. + +_____________________________________________________________________ +NTSC chroma/luma crosstalk + +The PPU in the PlayChoice arcade system generates RGB video, with +red, green, and blue color information on separate cables. + +The PPU in the NES generates composite video, with chroma (color) +and luma (brightness) information carried on one cable at different +frequency bands. To keep the circuit cheap, it does not perform +proper filtering to keep the chroma from bleeding into the luma. +This especially has an effect on 45 degree diagonal lines. But an +accurate emulator must preserve the same artifacts, as games such as +Blaster Master rely on them to create the richest color palette. + +This screen displays something noticeably different on an NTSC NES +PPU vs. the RGB PPU that most PC based NES emulators emulate. + +Display on RGB system: Display on NTSC system: +,---------. ,---------. +| ===== | | ===== | +|%%%%%%%%%| | PASS! | +| | | | +| PRESS A | | PRESS A | +`---------' `---------' + +_____________________________________________________________________ +Pixel aspect ratio + +PC displays most commonly generate square pixels. A square pixel +on an NTSC display is 7/12 of a chroma cycle wide, but the NES PPU +did not generate square pixels. Instead, it generated pixels 8/12 +of a chroma cycle wide, which are somewhat wider than they are tall. +This made games' graphics appear stretched. If they are displayed +with square pixels on a PC based emulator, graphics will not appear +with the intended proportions. + +This screen shows three rectangles. One is a square on NTSC NES +and PlayChoice, one is a square on PAL NES, and one is a square +with square pixels. + +_____________________________________________________________________ +Legal + +Copyright 2007 Damian Yerrick +Do not distribute this quick and dirty preview version to the public +until it has been tested on an NES. diff --git a/tvpassfail/health.nam b/tvpassfail/health.nam new file mode 100644 index 0000000000000000000000000000000000000000..f627353e636d9064583cbe88a189c9b8c68ad58c GIT binary patch literal 1024 zcmc(cO%4Jf423y>KUe4hjCUwbM~Dn1v}7{(zlaz&E?7(#D$5tX*VjJh{{9X}w_?pP z-^Wo-=do^3J2F={S8%bR9{H4Whtsrupz{%t`5HW{oepXWN+juEf^rVRe|IUozs?RA0!{lBK9d!Gd7Bl1lymm$c0g23O?{(Skk^Lj lg6n*Nj8ZkzJhen!jZaxf6%dvrV1Xb~F;Fi=aop_ii#MlrI8Fcn literal 0 HcmV?d00001 diff --git a/tvpassfail/square.pal b/tvpassfail/square.pal new file mode 100644 index 0000000000000000000000000000000000000000..d0c53aabfa692acba454f9a67a6e13ad5ac4b482 GIT binary patch literal 16 Ncmd;Q5HR3J0ssi&0R#X5 literal 0 HcmV?d00001 diff --git a/tvpassfail/tiled.pal b/tvpassfail/tiled.pal new file mode 100644 index 0000000000000000000000000000000000000000..c5a07b1e1ba98199d76bec3da4a170bc7f5583e8 GIT binary patch literal 768 zcmZvaA+|yx5Qb+72BU#!AlzV>V3=?hKp+^2#y=PdF5xb~aH9(#7;ZGU1cTv57ct?1 zufRDB{{hbT4IBbQx$b$;{a&WL__Fn-G!L&@rr(mcxqG|a8e^=r%sh^xb1sAc;Cj7I z(=^X>O6m1_t?T;hS0Rn03+2N(i&9jQd{Heb+7~hEE$R~W6IDw-8W)W>jg6>iU!`2um_K5MMe9fXd|ttXkQp3dn1DpHXC$%k=au2@!js?@5kRH-K5 zQtm`5lR{kb?@1@nK}hVvMVR5l&+P2X&V0Kfy0mZKZ(sCXX1~4H>-FCa2KuVk@2i2< z$!fL!G#aIMtM%HB(lkqk(`oSaa+pI7^)f3DhmbGp(nF@p`t3V@*@-_o_OoN%YQIkQ zr}Z}8YIk4PcVpKqIXCWxUgaC}p~*AvkNT=2-K4)2HRhCINGW5CwWPE*X==%E;U3r! zyCOU|CX*qK{jFwmH8g1;zEL`}&_X4uVB%}&HIup;eq1U=5Er06Ef;E$QEt78@gyz1 zi}kH{4)udp+Gs-o4QQOhSd8nf8g}_mXVG`LVxri4(|??youdoj-+gvCA9c`wquoq4 z4!LJN#uF8{A+BP4f%6(gpX^fB@xH!V6Yn>i`fT->mc)5rOi#0M z7#pS;{y>a#tIB_=_n)cSZfoxsQpF>cjb?83XV zX==1q#CTRPZnb;A;tK&GAOwVf5D)@FKnMr{As_^VfDjM@LO=)z0U;m+gn$qb0zyCt I{NDtA0~M7i`2YX_ literal 0 HcmV?d00001 diff --git a/tvpassfail/tv.nam b/tvpassfail/tv.nam new file mode 100644 index 0000000000000000000000000000000000000000..c069bb9e5cc03c38a0cb26dd35a218237071607a GIT binary patch literal 1024 zcmeHDZ3=@h3^naVa)X_rl!!2GrHSDEPqJjQq5~PSk6#N9^7Y;eq-lN=NjPHcN*=A1gd~Yqzk8Q^HEyZSNA$krodhv)aOGYYr=6 xw_Q$~zY0NV#{3wL{`Q~O4~&JFF<_euN=KMz7UWonQl)$`Pfzjc)VM_D-2f=n8O#6x literal 0 HcmV?d00001 diff --git a/tvpassfail/tv.nes b/tvpassfail/tv.nes new file mode 100644 index 0000000000000000000000000000000000000000..4ccf909ed229a001f2b2a844fabc45091afa4578 GIT binary patch literal 24592 zcmeI3PiWg#9LJv=Pc1|13~f`bGuaztfkC&aEo`QHB$geecI()lC6nYPMi3M-Q+g;q z2qlN5?9hZ<#$YF7@WF>3cG=k()T}uKA4V9A^_a3t2n@QiX6}AZw%l0cPt|7KR(=n~ zU%mJH^M3F1^sHQ*)%3H1KzeO65--=u5}`{1{kamqeI{Og^6j}0jXeIEthFAycl6e3 zl`IRCwi{Ja`Jqnf#43GjwRUoQAoD8>fvGZfTcpb(y?w0jT0TbWktO(0-~(ctZtR^9 ztuMfowaDGb_73k6n0@n9?bN--O1MrIPhEi~UwhZhS`i>Mgv-~$_dZw&{U-VDA^0^4 zmz%QwI%J}=tF<%luWWzgRSlJjF#CEd44-RW{h3c2m9Z-672a2@xmS_<%=43Zi+m|8 ziL}C#Rm0WrcLa+3vGr(ESZn=m)`g|PcB)SqV5nJxrn3+?sq$3M98HLt$Q2DblPeZ>Eh9jDXTcu^hzRCtq|!RQoYQnV zo+~CYS|B(uRbI>GA!;fO8>Hpa87;5R{Bzaru{PLXU8lOC77Usw8b+Yq*(2X8H zBu%CYxk>e-OmR{Tyuf53rvu;2RcdIu5jcFmfY5;OqE~1DG6;}|-wX%?yu172BO!3; zx%FAy5CMkZrjv)K+I@wf%QN&G`mEild432Kz>Rwz*|i@x9QO!xj=svjvM7H~WVLC7 z>dAtp1^I^dvIW(muN@Yj@3zDIj@X`0Piq;f>Uk|`&;oyb1)5+gl}@JM%{firJ)wVA zR14Zzpacgvztd}HU9VmjZur2{KHB?v91R~A`oSOk<jX0&s^@T>mq>2)Y4vmdDc6)wk6lAA8A1m+dIHU9JvJEme z-+tNk2Ayx)*B<$rKi`vX+i%>nd+PV|_pM>e9kQ%pzv;R9vK(>ab+5MKOuYO4dy#6K0j1n-(K-4D8_VX>3*;k`;%rtSH4y(2^JxON_7y z&i4ce=zBbhwxu*3u4!iF6yL2S$7S5KoO zrfH5u3A+J$gOTzq6gpcbb_uj(6UQ`d6FBv&+3lMI;!D=Z5RV7&qXeQH`0J@lpY!iD z*e__av5saLvF6Ix%X8r0Rj2}*LtFvf+S=M^Z!}4BtKHrJ-Q0Y*aesZCG&di%@2@vu zT`-%w-=M&qFAidR+ObDP?gn;|+vi|DSD{X3DNN$~^|>kY{dKx^dfEw#^7TMthealthScreen + lda #$20 + jsr copyNT + jsr displayLoop + + + + + +tvTest: + + ; Skip this test on PAL + lda isPAL + beq :+ + jmp aspectRatioTest +: + +; Set up initial palette + ldx #0 + stx PPUMASK + ldy #$3F + sty PPUADDR + stx PPUADDR + sty PPUDATA + sty PPUDATA + sty PPUDATA + sty PPUDATA + sty PPUDATA + stx PPUDATA + lda #$10 + sta PPUDATA + lda #$30 + sta PPUDATA + + +; Set up test screen +.segment "RODATA" +tvScreen: + .incbin "tv.nam" +.segment "CODE" + ldx #tvScreen + lda #$20 + jsr copyNT + +tvLoop: + ; wait for vertical blanking NMI + lda PPUSTATUS + lda #$80 + sta PPUCTRL + lda retraces +: + cmp retraces + beq :- + lda PPUSTATUS ; acknowledge NMI + +; Rewrite palette + lda #0 + sta PPUMASK + inc palstate + lda palstate + cmp #192 + bcc :+ + lda #0 + sta palstate +: + lsr a + lsr a + lsr a + lsr a + clc + adc #$21 + + ldy #$3F + sty PPUADDR + ldy #1 + sty PPUADDR + + sta PPUDATA + clc + adc #4 + cmp #$2D + bcc :+ + sbc #$0C +: + sta PPUDATA + clc + adc #4 + cmp #$2D + bcc :+ + sbc #$0C +: + sta PPUDATA + +; Turn on screen + lda #$00 + sta PPUSCROLL + sta PPUSCROLL + lda #$80 + sta PPUCTRL + lda #%00001010 + sta PPUMASK + +; Read controller + jsr readPad + lda joy1new + and #$90 + beq tvLoop + + +aspectRatioTest: +; Set palette + ldx #0 + stx PPUMASK + jsr setGrayPalette + +.segment "RODATA" +ntscAspectScreen: + .incbin "square.nam" +palAspectScreen: + .incbin "palsquare.nam" +.segment "CODE" + + lda isPAL + beq @copyNTSC + ldx #palAspectScreen + bne @gotoCopy +@copyNTSC: + ldx #ntscAspectScreen +@gotoCopy: + lda #$20 + jsr copyNT + +aspectLoop: + jsr displayLoop + jmp tvTest + + + + + + + + +.proc setGrayPalette + ldy #$3F + ldx #0 + sty PPUADDR + stx PPUADDR + sty PPUDATA + stx PPUDATA + lda #$10 + sta PPUDATA + lda #$30 + sta PPUDATA + rts +.endproc + + +;;; +; Runs the game loop for one display, +; waiting for the player to press A. +.proc displayLoop + ; wait for vertical blanking NMI + lda PPUSTATUS + lda #$80 + sta PPUCTRL + lda retraces + +waitForNMI: + cmp retraces + beq waitForNMI + lda PPUSTATUS ; acknowledge NMI + +; Turn on screen + lda #$00 + sta PPUSCROLL + sta PPUSCROLL + lda #$80 + sta PPUCTRL + lda #%00001010 + sta PPUMASK + +; Read controller + jsr readPad + lda joy1new + and #$90 + beq displayLoop + + rts +.endproc + +;;; +; Copies a nametable data from PRG ROM to VRAM. +; @param X bits 7-0 of source address +; @param Y bits 15-8 of source address +; @param A bits 15-8 of destination address +copyNT: + stx 0 + sty 1 + sta PPUADDR + ldy #0 + sty PPUADDR + ldx #4 + ldx #4 +@loop: + lda (0),y + sta PPUDATA + iny + bne @loop + inc 1 + dex + bne @loop + rts + +readPad: +; Strobe the joypad and set up the last frame joy state. + lda #1 + sta P1 + lda joy1 + sta last_joy1 + ldx #8 + lda #0 + sta P1 + +; Read the joypad out serially. +@loop: + lda P1 + lsr a + rol joy1 + dex + bne @loop + +; Compute which buttons were newly pressed. + lda last_joy1 + eor #$FF + and joy1 + sta joy1new + rts + +;;; +; Sets isPAL to nonzero if the machine is on 50 Hz timing. +.proc detectPAL + + lda PPUSTATUS ; acknowledge any pending NMI + + ; wait for vblank with the screen turned off + lda #$80 + sta PPUCTRL + asl a + sta PPUMASK + lda retraces +: + cmp retraces + beq :- + lda retraces + + ; wait 24 * 1285 cycles, longer than the NTSC + ; frame period but shorter than that of PAL + ldx #24 + ldy #0 +: + dey + bne :- + dex + bne :- + + ; compare to retrace count before waiting + ; if we've had a vblank, then we're NTSC + ; otherwise we're PAL + cmp retraces + bne notPAL + lda #1 + sta isPAL +notPAL: + rts +.endproc diff --git a/tvpassfail/tvpassfail.zip b/tvpassfail/tvpassfail.zip new file mode 100644 index 0000000000000000000000000000000000000000..3aab0d2cba8cbe83612e6842ad5d2d1e18a97646 GIT binary patch literal 5821 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 Y1c(3;AOb{y2oQlYN#JY07~J)r0ffk{EdT%j literal 0 HcmV?d00001 diff --git a/vbl_nmi_timing/3.even_odd_frames.nes b/vbl_nmi_timing/3.even_odd_frames.nes new file mode 100644 index 0000000000000000000000000000000000000000..535cb4473b1b7fda6f3078cd03cdc6836699b3ad GIT binary patch literal 16400 zcmeI2L2DaF6oB8#vb4Cu*+89cgAY^MgA6ICX%B*mWCN1fz&16tNiRLjp$NI;U~)1= zn3hJx7`7PNL+GVKpwcmQoBn{po`%+_VxbUvC}AzUCivh=c1YAlS@+G#avbQn5O`0c zH*e<6ym|WeX>`%G()@W1p2`sk5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la z5CI}U1c(3;AOb{y2oM1x@Z1vs|2*%$#B(ol<1AmFX`U zw!3H9M`1(z8Lc#13-3F*fZYn4{a>~2te8cgxPsH-s#1~8c&oXbv`7#u9CsF3rj#!;UaXt$!Oj(w_X5Y3ktto4n9qz>Wxf;8WP|bK; zcf|~Qy;HxA2Vd-{sR#9G@jKd;?gR51A9P>5!MMm#(pQi$ym3 z-j#Ps^H58CK6Wc9pf=9-gC^h!^%=2_k(-*bhvA!vk^N?;IX1E{cACjk_V`nKGr@jH zFwPzXB2nvOaKN`FpaFGY=eB1)VOp?;IvI#D^y}!?|I4ohB6;i|?$@8)kN)xF_@n*$ z>G`C8z-9N6MXes3}IALBzh@_W2-BH!+9Z23=C{l7UPv^NjaZi?+6 zq&E+gfe&PyVXL@l#%-LN3CzV;Ty!6%7r{MDSGf2Thk~Jf>H&(&Y_KEFG;(zvcYZNy ztA0-;l;?h}D>}7a9mLzUgNBaBq}i7LPecEy`%7#-y6q=+d-A~VV7bkN!_aXmVgerl zAN}LSR01Ysv)Onmn~m_51*7U$&kYQKqHeGvK+c|H3-()J;FJ=BDKWs%m0-V+&o3yS zVN^$JOf#pJ7L*!_J~ANhwB_!Hc`)-TffcCA$-4DqobUI!|KYczmz*u^PA4zU7uzO`(4n*Hq`AU|cEp zt9b+ayHT`{@o-edzFaOBFad}rr}Ile1h&xdE^x;zSF_xNCC=Dab1qmy$FI05UE?pT zl_^UsACLVuA6*v87?x}bYZaFP!%7)W;yhOBQ3KqhsxvO|AclolX>_sNPTCgMCp4^K zG2){7YtH*2c5Ficu3p3aah2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z}|{ MA@E~xbNlRE8W>XhBdBZ(2KD!`3y8$$1V%NRWe1MHC?t zioh7Q{c52Zz?p*5;lD1_3Muxlh!d{8C3Bub;K^JZl${TEW+^Dy&f z-t3#7zI{6oTXNjlTgJR%5K}N^!fY&GX%|T<=eY)X3=BU`( zI?|jt>m6!ahsr@7Qw&?d(HOUIZQe7AuQ?b#(u&|5X$AiLUq3=m+{CD082S%RvA{Mv z;%q%rOJJhUPuqq&5K$HRq}msI)jyIId;0YbvJe<#ZP}gi&)8SMy7}Ig&UAGHGNo8Qd>bQ)4BbECHxrVPN`j#B+6KqCB+RSb(00p-h16 zVhq*d@O9%0GY8r0QU+22CRYt|`DU}3&%v-IrECo$Xf{Vp)P>^^BP!mO`AdLNd`v<` z$w&REILbslvh`bk_-7k#4@t!6on z@o`>5or8vXrRm=(&*xA81gW{~x)*>YBKT!GXG|wzI#E-cwU#pu zm?D86n5ty`Z>*IWQa2!h)w*eb}*tm$Tz{PPLoS3RJF7P0Rg;=Qf zvD_wY7wZ%1=C~MfQ|)!Ti&sRAH3Z=9O?*DA(+&3#SMNrdCGPw((E2H7psAaM!CrV% z*x&o?58uZ2qmNn!8lT*S_S;=-FZ{(%KY$1j0U|&IhyW2F0z`la5CI}U1c(3;AOb{y a2oM1xKm>>Y5g-CY;D1Kop7)`D*Lw!V2&l*a literal 0 HcmV?d00001 diff --git a/vbl_nmi_timing/5.nmi_suppression.nes b/vbl_nmi_timing/5.nmi_suppression.nes new file mode 100644 index 0000000000000000000000000000000000000000..5677690411baa08841fa053f42fd775683ef528e GIT binary patch literal 16400 zcmeI2L2D#M6vtmDlj$*rq!*0ah6uIjVHWl<0l`6swHK1mkv0YsJ=Z~o3G5-qAVW}O zAS|@x;9=3r(70j+1Mve0eUL)KIJAh1F0yoonJ9CJGs&_$>t;K?>UKuILg2j=RsX72 z{p$5EuR513FRadJ@SmNN5dk7V1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+Sp zM1Tko0U|&IhyW2F0vDbD1T(yQnHQep#wETp$@ib-D>=R~#)VevZwhdMvDeyrSEBAE zcDe0o-=fmltL;CXLdfRYcltkQ-9@p8K5+w=#gghA)h(!QUUf`$FJXtf$9Klf^@p~Y z!)e7_FC?q1(sHb}SQ$oHRZk?{FpBeWcx~FU>|6G28`GM$HreN`BtKVU*G5z`p444& zmHiUc-@}9NMQZ6meOCO8y7E$6P6ZbV`9N6&Ky7`Z~C$ zdWDORa4Hz;|A7{7urFF-$}7}!_~a*pwjK1ui1O^zy5g|btAlvGcH-sm7@Zvie|x!a zy5A@A(d}U5s3%W?LoAD*T50Gc6)}!P`QSfOOl4p~KA%sP^7$Bl@?cbh>hos?zMW-o`-Y9OnSYj5^XuF{lQ_n5!YmXDxL>NK#;xqcCV+Yi6T>GX zo@+1*(?ctz2^hHyrU_7-&tSGVe75_kRf6J8DPt)CgR2ImvhVxl67(BV%0?ez-#_y) zFC6>mQU0bZUkCK!V-mJh`k4P@7SqIhWaHOv|Mw>F#I`^l$MId9bB^QL-kv*A~>=uhLC>KrtTE9G&uXyAA^j*l@O&Z;<;%jFU#0P*B(aU+bu z78>4Jchqt<%f;(6WiJ(6utW~;n<`!7FRYbmOKko-51M>%sg+1eHjA~2+kmB49v87; zrJj4>W>lSVfd?@x#ERF&avQb-tWWT)v>0(y{beW9R=)&5&2|OgBeyU}Qmos-BRuBL zk3GFR>GpK>!C^Cp$p^$~MJ#jZVEZG&M0z?Oej**GjqSq!J)jpL0z`la5CI}U1c(3; nAOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01>#T1m+?heI5P-zSO17 literal 0 HcmV?d00001 diff --git a/vbl_nmi_timing/6.nmi_disable.nes b/vbl_nmi_timing/6.nmi_disable.nes new file mode 100644 index 0000000000000000000000000000000000000000..75a3a2cbb81eed5768ca9c14b07838c3c434b7d8 GIT binary patch literal 16400 zcmeI2(Q6|`9LIm#rrA(Sx(8O*QelqsA%znnC3E@ALl_r3ir?_DH4i@ z6iQ*`9z>3N3JWJru~_lICndfNT4Gob4iPE4B`K1JnzVA4^Lkr>Y z5g-CYfCvx)B0vO)01Vmuvk!?tGapBl~u=7cLh7#J$`H4Tz%k( z*Kk@jSBpuMEwsgww-O~wu7>!>~(gto#^v4c6CHG<8j>+ zv+S#={w^MTFH)hu>NDaO^s8S~cdDH2g~{4C(a^nz?r|DLR}|Qt2otl<+U&PB+iCN~ zcNSQAVR`OtcOF7581+YNJXK@v%b~Bi<;aJw_y{RE)o!Au+YL206SB!jjBE~ACSr4u z7)?DZ5*hUNLKPcJJ&a}1dz8fV)UzV@rO**iO5N2sc#N3NgFg3%_IY<_KX|egJmRR- z**(?0EIU5YcTbdqBE}fDs;4vVU~D!tS1)_Ge5$X4cdA$U(|>;eh?}@17{>pDQ@q8t z+hWo$)^nKUlZ&<$^u>r;`Czjr4mbOC5N~dt_&GdMXZyk5e(vkukBR&6b}(|(mnXp? z{`lXv)6|J9F^=qp3QT2SLZMJdL=_4#ehOgJg4zpb20%Gyurff=Sz;^B>tJ9=nSmw6 zm;pvk8ICKZ(u!I$jM~K>(=4j3mg-W=T{uv3Tk`1r5|||=U;}D0Z>=?A*qAV_tgOL| zb)y+iOu$*=EUV_%c;igs7|RK>SS;dxshS!$vJ>k7>RXtYJ{j>`gV`t#%}NCrxeUq# zD3vp)7Kb}KpV}6bZb%tR37A|puqus4qhi6JDWz-%WDO;@nI}cj?;_50VE#EBGEp7vrUTh3vt8#JfgO^ct#swb4un?<$ z56f-X_OU*}x6@+8P4!pY4!$DlY)1g@-p1#XI^7B$a`oFNbHv@B`+6_$^>y`TVQ`qd zDctWPb`ZJPeuz*@U+2Sjq5DP$+cW>-r!PPRhyW2F0z`la5CI}U1c(3;AOb{y2oM1x bKm>>Y5g-CYfCvx)BJe*W@M`p4^kw)DrAer_ literal 0 HcmV?d00001 diff --git a/vbl_nmi_timing/7.nmi_timing.nes b/vbl_nmi_timing/7.nmi_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..f777a9c74b901489afdddd1ccc24d0a0cd494089 GIT binary patch literal 16400 zcmeI2&ub%P7{}j9+f3}1b{4G8mI`mtLl%of@DOO|M(EZl&X&R!(c1_TQrJVmOO;Uk zL7^;6*@K70Qy5tBEf(t^AmsF-C58cE^&rb+Xo^IvNh{l|+nxG-XKdUB@3Qbbd3oRG z{q?-xeCC-qmn>erKB2LH?Tm~F5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO) z01+SpM1Tko0U|&IhyW3I>IpD^!s$Hkkheyq>c_;gAY z<6+emm-%E^eG3Oqg=*-}>ZJG)e)-GtcG=;(K|II9zB>i?Fd2m_vRn@ln4j$PnHIm$ zau%;G@a2VT3yW{CK=TK@R1t@2+A8U%#Mvp%T z_)Jp_z#D8TZxG&YJT{bgvrUmsX5s1ZumfHOUbtVqB!1@;p{K>CwA<~+ju6j0u_O`l zga|SG-z&Blhvr0V3S#X`fh8X0+bfa(5YOby?>b)JzG!dn`HwdJ2M+XDJIA`4=7&f6 z&XIBuV~C@aU7b4?#x4iu%9M-gV||6W$9mZjAEPTc{KuY`xWa$i7h_(on!(Pk^Rnr8 zMM};5w9ygaMz_ku%*K(I!7)1D^Z)WP-*mo<-ILpX>Yyu+{1Dk?wvy1X6fumat7C(DeAUwQ7-U~Dd9@HxhE))HT~USkG^lo?!^!HkSDw9EPYvYIoD z%J~}8%&DaXRV9`=cUazT$b#QP23#+w=t&f<6w5+hn!i{<~GQv)4r)kxn zb!w*)Z6rs`TrP+8QWe#%r$^QpQ{Tcw__)Qn1}{P$tdIyWGJ}xGSblC0YSDbY{aLZV z@;9W6q+|%L3M-UqwOXmbdUYvfy~m%F-vH8_1%G@s})_mieuJ7&SgcB!E38h*Z2du zGF}vG|MdNabAC4{CrQ~fauv()7Q{CP22qfyXC8A0Rh~Hl2XQ1~+3O(P`ehIK$-H8c zj965C$)0ba;oE{?^-b)L^K{cc!3lSM=<1zOx2vlwi@%#(LH5fbe>1dEUJ0S0t2_Nm z*4}ENJoUdQ^aY3j5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1pXfa L)6KV=Uj=^y-gtp= literal 0 HcmV?d00001 diff --git a/vbl_nmi_timing/readme.txt b/vbl_nmi_timing/readme.txt new file mode 100644 index 0000000..792aa53 --- /dev/null +++ b/vbl_nmi_timing/readme.txt @@ -0,0 +1,121 @@ +NTSC NES PPU VBL/NMI Timing Tests +--------------------------------- +These ROMs test the timing of the VBL flag and NMI to an accuracy of a +single PPU clock, and also check special cases. They have been tested on +an actual NES and all give a passing result. Sometimes the NES starts up +with a different PPU timing that causes some of the tests to fail; these +tests don't check that timing arrangement. + +Each ROM runs several tests and reports the result on screen and by +beeping a number of times. See below for the meaning of failure codes +for each test. It's best to run the tests in order, because later ROMs +depend on things tested by earlier ROMs and will give erroneous results +if any earlier ones failed. + +Source code for each test is included, and most tests are clearly +divided into sections. Support code is also included, but it runs on a +custom devcart and assembler so it will require some effort to assemble. +Contact me if you'd like assistance porting them to your setup. + + +1.frame_basics +-------------- +Tests basic VBL flag operation and general timing of PPU frames. + +2) VBL flag isn't being set +3) VBL flag should be cleared after being read +4) PPU frame with BG enabled is too short +5) PPU frame with BG enabled is too long +6) PPU frame with BG disabled is too short +7) PPU frame with BG disabled is too long + + +2.vbl_timing +------------ +Tests timing of VBL being set, and special case where reading VBL flag +as it would be set causes it to not be set for that frame. + +2) Flag should read as clear 3 PPU clocks before VBL +3) Flag should read as set 0 PPU clocks after VBL +4) Flag should read as clear 2 PPU clocks before VBL +5) Flag should read as set 1 PPU clock after VBL +6) Flag should read as clear 1 PPU clock before VBL +7) Flag should read as set 2 PPU clocks after VBL +8) Reading 1 PPU clock before VBL should suppress setting + + +3.even_odd_frames +----------------- +Test clock skipped when BG is enabled on odd PPU frames. Tests +enable/disable BG during 5 consecutive frames, then see how many clocks +were skipped. Patterns are shown as XXXXX, where each X can either be B +(BG enabled) or - (BG disabled). + +2) Pattern ----- should not skip any clocks +3) Pattern BB--- should skip 1 clock +4) Pattern B--B- (one even, one odd) should skip 1 clock +5) Pattern -B--B (one odd, one even) should skip 1 clock +6) Pattern BB-BB (two pairs) should skip 2 clocks + + +4.vbl_clear_timing +------------------ +Tests timing of VBL flag clearing. + +2) Cleared 3 or more PPU clocks too early +3) Cleared 2 PPU clocks too early +4) Cleared 1 PPU clock too early +5) Cleared 3 or more PPU clocks too late +6) Cleared 2 PPU clocks too late +7) Cleared 1 PPU clock too late + + +5.nmi_suppression +----------------- +Tests timing of NMI suppression when reading VBL flag just as it's set, +and that this doesn't occur when reading one clock before or after. + +2) Reading flag 3 PPU clocks before set shouldn't suppress NMI +3) Reading flag when it's set should suppress NMI +4) Reading flag 3 PPU clocks after set shouldn't suppress NMI +5) Reading flag 2 PPU clocks before set shouldn't suppress NMI +6) Reading flag 1 PPU clock after set should suppress NMI +7) Reading flag 4 PPU clocks after set shouldn't suppress NMI +8) Reading flag 4 PPU clocks before set shouldn't suppress NMI +9) Reading flag 1 PPU clock before set should suppress NMI +10)Reading flag 2 PPU clocks after set shouldn't suppress NMI + +432101234 +---+?+--- + + +6.nmi_disable +------------- +Tests NMI occurrence when disabling NMI just as VBL flag is set, and +just after. + +2) NMI shouldn't occur when disabled 0 PPU clocks after VBL +3) NMI should occur when disabled 3 PPU clocks after VBL +4) NMI shouldn't occur when disabled 1 PPU clock after VBL +5) NMI should occur when disabled 4 PPU clocks after VBL +6) NMI shouldn't occur when disabled 1 PPU clock before VBL +7) NMI should occur when disabled 2 PPU clocks after VBL + + +7.nmi_timing +------------ +Tests timing of NMI and immediate occurrence when enabled with VBL flag +already set. + +2) NMI occurred 3 or more PPU clocks too early +3) NMI occurred 2 PPU clocks too early +4) NMI occurred 1 PPU clock too early +5) NMI occurred 3 or more PPU clocks too late +6) NMI occurred 2 PPU clocks too late +7) NMI occurred 1 PPU clock too late +8) NMI should occur if enabled when VBL already set +9) NMI enabled when VBL already set should delay 1 instruction +10)NMI should be possible multiple times in VBL + +-- +Shay Green (swap to e-mail) diff --git a/vbl_nmi_timing/source/1.frame_basics.a b/vbl_nmi_timing/source/1.frame_basics.a new file mode 100644 index 0000000..f91695b --- /dev/null +++ b/vbl_nmi_timing/source/1.frame_basics.a @@ -0,0 +1,104 @@ +; Tests basic VBL flag operation and general timing of PPU frames. + + .include "prefix_ppu.a" + +test_name: + .db "PPU FRAME BASICS",0 + +delay_119121: + ldy #100 ; 119118 delay + lda #237 + jmp delay_ya1 + +begin_and_wait: +: bit $2002 + bpl - + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + jsr delay_119121 + rts + +reset: + jsr begin_ppu_test + + jsr wait_vbl + ldy #25 ; 29800 delay + lda #237 + jsr delay_ya8 + lda #2;) VBL flag isn't being set + lda $2002 + and #$80 + jsr error_if_eq + + lda #3;) VBL flag should be cleared after being read + lda $2002 + and #$80 + jsr error_if_ne + + jsr wait_vbl + lda #$08 ; 6 enable bg + sta $2001 + jsr begin_and_wait + ldx $2002 + nop + nop + ldy $2002 + + lda #4;) PPU frame with BG enabled is too short + sta result + txa + and #$80 + jsr error_if_ne + + lda #5;) PPU frame with BG enabled is too long + sta result + tya + and #$80 + jsr error_if_eq + + jsr wait_vbl + lda #$00 ; 6 disable bg + sta $2001 + jsr begin_and_wait + nop + nop + nop + nop + nop + nop + nop + ldx $2002 + nop + nop + ldy $2002 + + lda #6;) PPU frame with BG disabled is too short + sta result + txa + and #$80 + jsr error_if_ne + + lda #7;) PPU frame with BG disabled is too long + sta result + tya + and #$80 + jsr error_if_eq + + jmp tests_passed diff --git a/vbl_nmi_timing/source/2.vbl_timing.a b/vbl_nmi_timing/source/2.vbl_timing.a new file mode 100644 index 0000000..4563904 --- /dev/null +++ b/vbl_nmi_timing/source/2.vbl_timing.a @@ -0,0 +1,74 @@ +; Tests timing of VBL being set, and special case where reading VBL flag +; as it would be set causes it to not be set for that frame. + + .include "prefix_ppu.a" + +test_name: + .db "VBL TIMING",0 + +test_too_soon: + jsr delay_20 + lda $2002 + and #$80 + jsr error_if_ne + lda $2002 + and #$80 + jsr error_if_eq + rts + +test_too_late: + jsr delay_21 + lda $2002 + and #$80 + jsr error_if_eq + lda $2002 + and #$80 + jsr error_if_ne + rts + .code + +reset: + jsr begin_ppu_test + + lda #2;) Flag should read as clear 3 PPU clocks before VBL + sta D%46h$wnqJXF}nhXj80|N#Otg4`(U|^shP%s4*6jqa!uNc}V>?@2OilU)v zV5)`+tDz|%vUXpi-dMSLe$Uq@z$B}JMO9U|jjBp~DwyyY9!3MKb5pK?dh=XvH;*vf zQkha^U~(0G>)cj*#)SKfwY83VeND>mA8=2-TwWZkQ-Bsh=Kc^9+QRxw0v3MXrJ}$X z$4u+xE{;M^QrNn#IWM}@+pIVO`WKe*H|M>kToI4*6M)HQ#01=WMq1kY$J@%o?M0FZ z7_JMxi7_@FLnk8LfE42x$weR7(S9$@672GrpjCYG&og3@N4l@y;k(D~rWSHd>BKp? z{H1d*%1Z^kPZ)fw&)uumy`DREF=XsdxmNF?m@9G(&d^UOU75!!(3__51VEZE+~FtT EA1~&oj{pDw literal 0 HcmV?d00001 diff --git a/vbl_nmi_timing/source/support/console.a b/vbl_nmi_timing/source/support/console.a new file mode 100644 index 0000000..08ffc91 --- /dev/null +++ b/vbl_nmi_timing/source/support/console.a @@ -0,0 +1,107 @@ + +console_pos = $7f2 +console_pos_h = $7f3 + +; Print char A to console +; Preserved: A, X, Y +print_char: + jsr wait_vbl ; wait for safe access +print_char_no_wait: + pha + lda console_pos_h + sta $2006 + inc console_pos + lda console_pos + sta $2006 + lda #0 ; restore scroll + sta $2005 + sta $2005 + pla + sta $2007 + rts + .code + +; Go to next line +; Preserved: A, X, Y +console_newline: + pha + lda console_pos + and #$e0 + clc + adc #$21 + sta console_pos + lda console_pos_h + adc #0 + sta console_pos_h + pla + rts + .code + +; Initialize console +init_console: + lda #$81 + sta console_pos + lda #$20 + sta console_pos_h + + jsr wait_vbl ; init ppu + lda #0 + sta $2000 + sta $2001 + + lda #$3f ; load palette + jsr set_vpage + lda #15 ; bg + ldx #48 ; fg + ldy #8 +pal: sta $2007 + stx $2007 + stx $2007 + stx $2007 + dey + bne pal + + lda #$02 ; load tiles + jsr set_vpage + lda #chr_data.lsb + sta <$f0 + lda #chr_data.msb + sta <$f1 + ldy #0 + lda #59 ; 59 chars in data + sta <$f2 +chr_loop: + ldx #8 + lda #0 +: sta $2007 + dex + bne - + + ldx #8 +: lda ($f0),y + iny + sta $2007 + dex + bne - + + tya + bne + + inc <$f1 +: dec <$f2 + bne chr_loop + + lda #32 + jsr fill_nametable + + jsr wait_vbl ; enable ppu + lda #0 + sta $2005 + sta $2005 + lda #$0a + sta $2001 + rts + .code + +chr_data: + .incbin "chr.bin" + diff --git a/vbl_nmi_timing/source/support/debug.a b/vbl_nmi_timing/source/support/debug.a new file mode 100644 index 0000000..daeb38b --- /dev/null +++ b/vbl_nmi_timing/source/support/debug.a @@ -0,0 +1,154 @@ + +; Beep A times. Made to require minimal features from APU. +debug_beeps: +beep_loop: + pha + + lda #1 ; set up square 1 + sta $4015 + sta $4003 + sta $4001 + sta $4002 + + lda #$0f ; fade volume +: pha + eor #$30 + sta $4000 + lda #8 + jsr delay_msec + pla + clc + adc #-1 + bpl - + + lda #0 + sta $4015 ; silence square for a bit + lda #120 + jsr delay_msec + + pla + clc + adc #-1 + bne beep_loop + rts + .code + +; Print indicated register to console as $hh +; Preserved: A, X, Y, P +print_a: + php + jsr debug_byte + plp + rts + .code + +print_x: + php + pha + txa + jsr debug_byte + pla + plp + rts + .code + +print_y: + php + pha + tya + jsr debug_byte + pla + plp + rts + .code + +print_s: + php + pha + txa + pha + tsx + txa + jsr debug_byte + pla + tax + pla + plp + rts + .code + +print_p: + php + pha + php + pla + jsr debug_byte + pla + plp + rts + .code + +print_ay: + php + pha + lda #36 + jsr debug_char + pla + pha + jsr hex_byte + tya + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + plp + rts + .code + +print_newline: + jmp debug_newline + .code + +; Print address YA to console as $hhhh +; Preserved: A, X, Y +debug_addr: + pha + lda #36 ; '$' + jsr debug_char + tya + jsr hex_byte + jmp debug_byte_impl + .code + +; Print byte A to console as $hh +; Preserved: A, X, Y +debug_byte: + pha + lda #36 ; '$' + jsr debug_char +debug_byte_impl: + pla + pha + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + rts + +hex_byte: + pha + lsr a + lsr a + lsr a + lsr a + jsr nybble + pla + and #$0f +nybble: + cmp #10 + bcc not_letter + adc #6 ; relies on carry being set +not_letter: + adc #$30 + jmp debug_char_no_wait + .code diff --git a/vbl_nmi_timing/source/support/delays.a b/vbl_nmi_timing/source/support/delays.a new file mode 100644 index 0000000..db4f23e --- /dev/null +++ b/vbl_nmi_timing/source/support/delays.a @@ -0,0 +1,118 @@ +; to do: delay loops that take only a single count + +; Delay for almost A milliseconds (A * 0.999009524 msec) +; Preserved: X, Y +delay_msec: + pha ; 3 + lda #253 ; 2 + sec ; 2 +delay_msec_: + nop ; 2 + adc #-2 ; 2 + bne delay_msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_msec ; 3 + rts + .code + +; Delay for almost 'A / 10' milliseconds (A * 0.099453968 msec) +; Preserved: X, Y +delay_01msec: + pha ; 3 + lda #18 ; 2 + sec ; 2 +delay_01msec_: + nop ; 2 + nop ; 2 + adc #-2 ; 2 + bne delay_01msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_01msec ; 3 + rts + .code + +; Delay for almost A*10 milliseconds +; Preserved: X, Y +delay_10msec: + pha + lda #10 + jsr delay_msec + pla + clc + adc #-1 + bne delay_10msec + rts + .code + +; Delay n clocks +; Preserved: P, A, X, Y +delay_32: nop +delay_30: nop +delay_28: nop +delay_26: nop +delay_24: nop +delay_22: nop +delay_20: nop +delay_18: nop +delay_16: nop +delay_14: nop +delay_12: rts + +delay_33: nop +delay_31: nop +delay_29: nop +delay_27: nop +delay_25: nop +delay_23: nop +delay_21: nop +delay_19: nop +delay_17: beq + ; 5 +: bne + +: rts ; 6 + .code + +; Delay (5 * A + 6) * Y + 7 + n clocks +delay_ya11: + .db $a2 ; 1 ldx #imm +delay_ya10: + .db $a2 ; 1 ldx #imm +delay_ya9: + .db $a2 ; 1 ldx #imm +delay_ya8: + .db $a2 ; 1 ldx #imm +delay_ya7: + .db $a2 ; 1 ldx #imm +delay_ya6: + .db $a2 ; 1 ldx #imm +delay_ya5: + .db $a2 ; 1 ldx #imm +delay_ya4: + .db $a2 ; 1 ldx #imm +delay_ya3: + .db $a2 ; 1 ldx #imm +delay_ya2: + .db $a2 ; 1 ldx #imm +delay_ya1: + .db $a6 ; 1 ldx zp +delay_ya0: + nop ; 2 +delay_ya: + ; 2 lda # + ; 2 ldy # + ; 6 jsr + tax ; *2 +delay_yax: + dex ; **2 + bne delay_yax ; **3 + ; *-1 + dey ; *2 + bne delay_ya ; *3 + ; -1 + rts ; 6 + .code diff --git a/vbl_nmi_timing/source/support/ppu_sync.a b/vbl_nmi_timing/source/support/ppu_sync.a new file mode 100644 index 0000000..58f1792 --- /dev/null +++ b/vbl_nmi_timing/source/support/ppu_sync.a @@ -0,0 +1,124 @@ + +; Same as sync_ppu_20 plus next frame is odd (clock subtracted) or even +; (no clock subtracted). +sync_ppu_odd_20: + lda #$80 + bne sync_ppu_frame_ +sync_ppu_even_20: + lda #$00 +sync_ppu_frame_: + pha + ; Synchronize with PPU + jsr sync_ppu_20 ; synchronize with PPU + + ; Run for two frames with BG enabled. One of the two frames will + ; be one PPU clock shorter. Note whether the first frame was the + ; shorter one. + + lda #$08 ; 6 enable bg + sta $2001 + ldy #41 ; 29785 delay + lda #144 + jsr delay_ya2 + nop ; 2 delay + pla ; 4 + eor $2002 ; 4 find whether frame was odd or even + pha ; 3 + ; run another enabled frame so that clock will + ; have been subtracted on one of the two frames + ldy #43 ; 29730+ delay + lda #137 + jsr delay_ya1 + lda #$00 ; 6 disable bg + sta $2001 + + ; If the first frame was shorter, wait three frames to switch + ; the even/odd synchronization without changing the CPU clock's + ; synchronization with the PPU clock. + + pla ; 4 + pha ; 3 + bpl + ; 3 + ; -1 + ldy #75 ; 89343 delay + lda #237 + jsr delay_ya1 +: pla ; 4 + rts ; 6 + .code + +; After return, 30 clocks until VBL flag will read +; as set, then 29781, 29780, 29781, 29781, 29780, etc. +; Turns off PPU rendering, NMI, IRQ, and DMC. +sync_ppu_align2_30: + pha + txa + pha + tya + pha + lda #0 ; disable dmc and irq + sta $4015 + sei + jsr wait_vbl + lda #0 ; disable bg and nmi + sta $2000 + sta $2001 + + bit $2002 +: bit $2002 ; 1 + bpl - ; 2 + + ldy #141 ; 29774 delay + lda #41 + jsr delay_ya6 + +: ldy #86 ; 29774 delay + lda #68 + jsr delay_ya1 + + bit $2002 ; 1 + bpl - ; 2 + + ldy #28 ; 29726 delay + lda #211 + jsr delay_ya1 + + pla ; 16 + tay + pla + tax + pla + + rts ; 6 + .code + +sync_ppu_align1_30: + jsr sync_ppu_align2_30 + ldy #86 ; 29775 delay + lda #68 + jsr delay_ya2 + rts + .code + +sync_ppu_align1_31: + jsr sync_ppu_align2_30 + ldy #86 ; 29774 delay + lda #68 + jsr delay_ya1 + rts + .code + +sync_ppu_align0_30: + jsr sync_ppu_align1_30 + ldy #86 ; 29774 delay + lda #68 + jsr delay_ya1 + rts + .code + +sync_ppu_20: + jsr sync_ppu_align2_30 + nop ; 4 + nop + rts ; 6 + .code diff --git a/vbl_nmi_timing/source/support/ppu_util.a b/vbl_nmi_timing/source/support/ppu_util.a new file mode 100644 index 0000000..2a479ee --- /dev/null +++ b/vbl_nmi_timing/source/support/ppu_util.a @@ -0,0 +1,112 @@ + +; Clear VBL flag then wait for it to be set +; Preserved: A, X, Y +wait_vbl: + bit $2002 +: bit $2002 + bpl - + rts + .code + +; Set VRAM address to A * $100 +; Preserved: X, Y +set_vpage: + bit $2002 + sta $2006 + lda #0 + sta $2006 + rts + .code + +; Set VRAM address to A * $100 + X +; Preserved: A, X, Y +set_vaddr: + bit $2002 + sta $2006 + stx $2006 + rts + .code + +; Set X and Y scroll +; Preserved: A, X, Y +set_vscroll: + bit $2002 + stx $2005 + sty $2005 + rts + .code + +; Turn off NMI and disable BG and sprites +; Preserved: A, X, Y +disable_ppu: + pha + lda #0 + sta $2000 + sta $2001 + bit $2002 + sta $2006 + sta $2006 + pla + rts + .code + +; Set sprite memory to $ff +; Preserved: Y +clear_sprites: + lda #$ff + ldx #0 +: sta $2004 + dex + bne - + rts + .code + +; Clear/fill nametable with 0/A and clear attributes to 0 +clear_nametable: + lda #0 +fill_nametable: + pha + lda #$20 + jsr set_vpage + pla + ldx #240 +: sta $2007 + sta $2007 + sta $2007 + sta $2007 + dex + bne - + lda #0 + ldx #64 +: sta $2007 + dex + bne - + rts + .code + +; Clear/fill VRAM with 0/A +clear_vram: + lda #0 +fill_vram: + ldy #$24 + jmp fill_vram_ + .code + +; Clear/fill CHR with 0/A +clear_chr: + lda #0 +fill_chr: + ldy #$20 +fill_vram_: + tax + lda #0 + jsr set_vpage + txa + ldx #0 +: sta $2007 + dex + bne - + dey + bne - + rts + .code diff --git a/vbl_nmi_timing/source/support/prefix_ppu.a b/vbl_nmi_timing/source/support/prefix_ppu.a new file mode 100644 index 0000000..8603e1e --- /dev/null +++ b/vbl_nmi_timing/source/support/prefix_ppu.a @@ -0,0 +1,143 @@ + .include "validation.a" + .include "ppu_sync.a" + + .default palette = default_palette + .default tiles = default_tiles + +begin_ppu_test: + lda #40 + jsr delay_msec + jsr wait_vbl + jsr disable_ppu + jsr clear_vram + jsr clear_sprites + rts + .code + +default_palette: + .db $0f,$01,$02,$39 + .db $0f,$03,$04,$38 + .db $0f,$05,$06,$38 + .db $0f,$11,$12,$38 + + .db $0f,$32,$32,$21 + .db $0f,$32,$32,$32 + .db $0f,$32,$32,$32 + .db $0f,$32,$32,$32 + .code + +default_tiles: + .db $00,$00,$00,$00,$00,$00,$00,$00 + .db $00,$00,$00,$00,$00,$00,$00,$00 + + .db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff + .db $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff + + .db $f0,$0f,$f0,$0f,$f0,$0f,$f0,$0f + .db $f0,$0f,$f0,$0f,$f0,$0f,$f0,$0f + + .db $80,$00,$00,$00,$00,$00,$00,$00 + .db $80,$00,$00,$00,$00,$00,$00,$00 + + .db $81,$00,$00,$00,$00,$00,$00,$81 + .db $81,$00,$00,$00,$00,$00,$00,$81 + .code + +clear_palette: + jsr wait_vbl + lda #$3f + jsr set_vpage + lda #$0f + ldx #$20 +: sta $2007 + dex + bne - + rts + .code + +; A = # of tiles +load_tiles: + asl a + asl a + asl a + asl a + tax + jsr wait_vbl + lda #0 + jsr set_vpage + ldy #0 +: lda tiles,y + sta $2007 + iny + dex + bne - + rts + .code + +load_test_chr: + jsr wait_vbl + lda #0 + jsr set_vpage + ldy #0 +: lda tiles,y + sta $2007 + iny + cpy #$40 + bne - + rts + .code + +load_palette: + lda #$3f + jsr set_vpage + ldy #0 +: lda palette,y + sta $2007 + iny + cpy #$20 + bne - + rts + .code + +load_graphics: + jsr wait_vbl + jsr load_palette + jsr load_test_chr + jsr clear_nametable + rts + .code + +; Find first byte in VRAM which doesn't match A. +; Address is Y * $100 + X +find_changed_vram: + pha + lda #0 + jsr set_vpage + bit $2007 + pla + ldx #0 + ldy #0 +: cmp $2007 + bne found + inx + bne - + iny + cpy #$24 + bne - +found: + rts + .code + +delay_29781: + ldy #141 ; 29769 delay + lda #41 + jsr delay_ya1 + rts + .code + +delay_29780: + ldy #141 ; 29768 delay + lda #41 + jsr delay_ya0 + rts + .code diff --git a/vbl_nmi_timing/source/support/runtime_rom.a b/vbl_nmi_timing/source/support/runtime_rom.a new file mode 100644 index 0000000..1429cd5 --- /dev/null +++ b/vbl_nmi_timing/source/support/runtime_rom.a @@ -0,0 +1,13 @@ +; Build as standalone NES ROM using console for output + + .include "runtime_rom_common.a" + +patch_reset_then_wait: +exit: jmp exit + + .default reset = main + + .org $fffa + .dw nmi + .dw reset + .dw irq diff --git a/vbl_nmi_timing/source/support/runtime_rom_common.a b/vbl_nmi_timing/source/support/runtime_rom_common.a new file mode 100644 index 0000000..80f8fd7 --- /dev/null +++ b/vbl_nmi_timing/source/support/runtime_rom_common.a @@ -0,0 +1,45 @@ + + .include "delays.a" + .include "console.a" + .include "debug.a" + .include "ppu_util.a" + +console_ready = $7f1 + +debug_char: + pha + lda #$a5 + cmp console_ready + beq + + sta console_ready + txa + pha + tya + pha + jsr init_console + pla + tay + pla + tax +: pla + jmp print_char + +debug_newline: + jsr console_newline + jmp console_newline + +debug_char_no_wait: + jmp print_char_no_wait + +init_runtime: +clear_console_ready: + lda #0 + sta console_ready + rts + +forever: + sei ; disable interrupts + lda #0 + sta $2000 + jsr clear_console_ready + jmp exit diff --git a/vbl_nmi_timing/source/support/validation.a b/vbl_nmi_timing/source/support/validation.a new file mode 100644 index 0000000..180d7ea --- /dev/null +++ b/vbl_nmi_timing/source/support/validation.a @@ -0,0 +1,120 @@ + +result = $f8 + +default_test_name: + .db 0 + .default test_name = default_test_name + +; Report error if branch with given condition would be taken +error_if_ne: + bne report_final_result_ + rts +error_if_eq: + beq report_final_result_ + rts +error_if_mi: + bmi report_final_result_ + rts +error_if_pl: + bpl report_final_result_ + rts +error_if_cc: + bcc report_final_result_ + rts +error_if_cs: + bcs report_final_result_ + rts +error_if_vc: + bvc report_final_result_ + rts +error_if_vs: + bvs report_final_result_ + rts + +; Report passing result +tests_passed: + lda #1 + sta result +; Report final result code and wait forever +report_final_result: +report_final_result_: + sei ; disable interrupts + lda #0 + sta $2000 + jsr init_runtime + + lda test_name + beq no_name + jsr debug_char + ldx #1 +: lda test_name,x + beq no_name + jsr debug_char_no_wait + inx + jmp - + +no_name: + jsr debug_newline + + lda result + cmp #1 + beq test_passed + + lda #'F' + jsr debug_char + lda #'A' + jsr debug_char_no_wait + lda #'I' + jsr debug_char_no_wait + lda #'L' + jsr debug_char_no_wait + lda #'E' + jsr debug_char_no_wait + lda #'D' + jsr debug_char_no_wait + lda #32 ; ' ' + jsr debug_char_no_wait + lda #'#' + jsr debug_char_no_wait + + lda result + cmp #10 + bcc + + clc + adc #-10 + pha + lda #'1' + jsr debug_char_no_wait + pla +: clc + adc #'0' + jsr debug_char_no_wait +report_beeps: + lda result + jsr debug_beeps + jmp forever + +test_passed: + lda #'P' + jsr debug_char + lda #'A' + jsr debug_char_no_wait + lda #'S' + jsr debug_char_no_wait + lda #'S' + jsr debug_char_no_wait + lda #'E' + jsr debug_char_no_wait + lda #'D' + jsr debug_char_no_wait + jmp report_beeps + .code + + .default nmi = default_nmi + .default irq = default_irq + .code +default_irq: + bit $4015 +default_nmi: + rti + diff --git a/volume_tests/README.txt b/volume_tests/README.txt new file mode 100644 index 0000000..63a8093 --- /dev/null +++ b/volume_tests/README.txt @@ -0,0 +1,97 @@ +Volume tests for NES + +_____________________________________________________________________ +Background + +The NES has four tone generator channels and one digital sample +playback channel: + +1. Rectangular pulse ("square") wave +2. Another square wave +3. 32-step triangle wave +4. Binary noise generated by a linear feedback shift register +5. Delta pulse code modulation; also allows writes of raw LPCM to + the counter for use as a generic 7-bit DAC + +Unlike systems such as the GBA, which digitally add all channels +before passing them to a DAC, the NES has a separate DAC for each +channel and mixes them analog. Nonlinearities in this mixing can +cause one channel to affect the volume of another channel. + +The NES uses an unsigned DAC, meaning that each channel can generate +only positive signal values. Such a DAC generates a lot of DC, and +the NES has a high-pass filter on its audio output to block the DC. +Different emulators use different time constants on their DC filters, +which human listeners generally can't perceive. So you can't just +measure the maximum voltage; you have to measure the difference +between the high and low values. + +Different emulators use different amounts of headroom in the 16-bit +range, depending on what Famicom expansion audio chips are present. +So you have to compare relative volumes, not absolute volumes. + +_____________________________________________________________________ +The test pattern + +This program demonstrates the channel balance among implementations +of the NES architecture. + +The pattern consists of a set of 12 tones, as close to 1000 Hz as +the NES allows: +1. Channel 1, 1/8 duty +2. Channel 1, 1/4 duty +3. Channel 1, 1/2 duty +4. Channel 1, 3/4 duty +5. Channels 1 and 2, 1/8 duty +6. Channels 1 and 2, 1/4 duty +7. Channels 1 and 2, 1/2 duty +8. Channels 1 and 2, 3/4 duty +9. Channel 3 +10. Channel 4, long LFSR period +11. Channel 4, short LFSR period +12. Channel 5, amplitude 30 + +When the user presses A on controller 1, the pattern plays three +times, with channel 5 held steady at 0, 48, and 96. The high point +of tone 12 each time is 30 units above the level for that time, +that is, 30, 78, and 126 respectively. + +_____________________________________________________________________ +Recordings + +The files in the 'recordings' folder are recordings of volumes.nes +run in various environments. They were recorded at 44100 Hz and then +encoded using OggDropXPd 1.90 (libvorbis 1.2.0) at -q 7.00. + +* nes-001.ogg: Nintendo Entertainment System (NTSC U/C) with PowerPak +* nestopia.ogg: Nestopia 1.40 +* nintendulator.ogg: Nintendulator snapshot 2009-02-28 +* fceux.ogg: FCEUX 2.0.4-interim 2008-11-24 + +_____________________________________________________________________ +Legal + +Copyright (c) 2009 Damian Yerrick + +The program and manual are under the following license: + + This work is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any + damages arising from the use of this work. + + Permission is granted to anyone to use this work for any + purpose, including commercial applications, and to alter it and + redistribute it freely, subject to the following restrictions: + + 1. The origin of this work must not be misrepresented; you + must not claim that you wrote the original work. If you use + this work in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + 2. Altered source versions must be plainly marked as such, + and must not be misrepresented as being the original work. + 3. This notice may not be removed or altered from any + source distribution. + + The term "source" refers to the preferred form of a work for making + changes to it. + diff --git a/volume_tests/empty.chr b/volume_tests/empty.chr new file mode 100644 index 0000000000000000000000000000000000000000..6d17cf9d15fb9f4a2358a2d079f3b8c755d005fa GIT binary patch literal 8192 zcmeIu0Sy2E0K%a6Pi+o2h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM GyblZ@00031 literal 0 HcmV?d00001 diff --git a/volume_tests/makefile b/volume_tests/makefile new file mode 100644 index 0000000..a86a656 --- /dev/null +++ b/volume_tests/makefile @@ -0,0 +1,31 @@ +CC65 = /e/nesdev/cc65/bin +AS65 = $(CC65)/ca65.exe +LD65 = $(CC65)/ld65.exe +#EMU = /e/games/nes/fceu080win/fceu.exe +EMU := /e/games/nes/nintendulator0900bin/Nintendulator.exe +CC = gcc +DOTEXE=.exe +CFLAGS = -std=gnu99 -Wall -DNDEBUG -O +CFLAGS65 = +objdir = obj/nes +srcdir = src + +objlist = hello pads sound +objlistntsc = $(foreach o,$(objlist),$(objdir)/$(o).o) + +.PHONY: run + +run: volumes.nes + $(EMU) $< + +$(objdir)/%.o: $(srcdir)/%.s + $(AS65) $(CFLAGS65) $< -o $@ + +$(objdir)/%.o: $(objdir)/%.s + $(AS65) $(CFLAGS65) $< -o $@ + +map.txt volumes.prg: nes.ini $(objlistntsc) + $(LD65) -C $^ -m map.txt -o volumes.prg + +%.nes: %.prg empty.chr + cat $^ > $@ diff --git a/volume_tests/nes.ini b/volume_tests/nes.ini new file mode 100644 index 0000000..6f47490 --- /dev/null +++ b/volume_tests/nes.ini @@ -0,0 +1,22 @@ +MEMORY { + ZP: start = $10, size = $f0, type = rw; + # use first $10 zeropage locations as locals + HEADER: start = $0000, size = $0010, type = ro, file = %O, fill=yes, fillval=$00; + RAM: start = $0300, size = $0500, type = rw; + ROM: start = $C000, size = $4000, type = ro, file = %O, fill=yes, fillval=$FF; +} + +SEGMENTS { + INESHDR: load = HEADER, type = ro, align = $10; + ZEROPAGE: load = ZP, type = zp; + BSS: load = RAM, type = bss, define = yes, align = $100; + CODE: load = ROM, type = ro, align = $100; + RODATA: load = ROM, type = ro, align = $100; + DMC: load = ROM, type = ro, start = $C000, optional = yes; + VECTORS: load = ROM, type = ro, start = $FFFA; +} + +FILES { + %O: format = bin; +} + diff --git a/volume_tests/obj/nes/khan b/volume_tests/obj/nes/khan new file mode 100644 index 0000000..e69de29 diff --git a/volume_tests/recordings/fceux.ogg b/volume_tests/recordings/fceux.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0b2f6673725aa58353c05bff4a8b831d9fa6657c GIT binary patch literal 596578 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

    gtw<{Yyz!GIySNtQ!bhLa=&Uim<2 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𝔩L~9@4bKE^eq`C|-}~$Scu;xwuZ}ajM@qRK9=-BG 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 +7*O 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 -!cj$abT>wH3>#q`4@;8Gzk;axLBwDYA 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

    8xOr%KwwE;xx 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≤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 kQatJV_D6&)#Fs#`Qa~nwPahjpk~2WJy& zmz!G{(iQ*oeEp5_x6zEDa`WbYm76zjdWr;w|Fdjj{WH!Zu=}mGqZNmWvnAbo zYm+yBN2imc@L0Pw&&+=_HPfupfn06+`??--Z~<1OTv z3lnmgyiyWg-?VzTKBpvn?jbjgVOAE~BBT zqy-i?18sM6sJk1~-A^awlU}o*PV*;@%t_;HV!F}{yqW{@z%|1fE??z zqW_~>=p>o{zw1k@pDe&j5SM*U)O}72GU^O{&TP1UG5iw%Y5G!~t;d;H)`hpvMFgy} zuF}5}6o*a}iT+K58?pnyOK$2OC+c4yHq_ZCocXj}M4>K9P!JV282O*ehrj#+0z#i@ zkz^By_dM44FIob@VaapxqzL|*3492uhh8e@(1XsW}KF_Axw%{9pEtFZt-VpxHz5mWWFG0E) zPm}j%ex&n@#xWtGFQSj9ag8C2&*A>bTtE{Q{Yt(xNL8JJvC#G7U&!eIAei_s7ytY6 zmzDqF;)1wvmVTzXL7oA&n@dIaun@eun^=l~8{}d(K9Gx}8rHL1ssvx#7B)=jvKA(& z%QF}LBT*nx>C9p!a47x?Nl1!wKXWlC75_=N1BQ`%kH-F^jvP{}-G2(!F&=h}=b~Dg zTH5Y*I>~NxO`i;=-Ikz!OVB7IvXKAISpOwC04OxUe`PYkB$B%?BS={i{~rSXTXLL8 z`o2*A`of@4%b+yQHgv?Ra?CsSKt_#MN#mix*h9AoQgaP{g9$$K2`%$Uck`J>bG;@% zoyLC&%s*nY1aD16V=Hk#T1D56St;O)UjV zQ!Sg)@joz%j)4eul_C320sz3*SOSH=`-qx4`=mPGq&mBnrs)4HF<|c`uhIlBh}c8` zpa1}~Z%DdeV#562l3Ws2gAzEUe{v+`3MZ$6)`_1-3hpNc$H~cyz8#kM5qnHW-$!C9 zZ_UbX{+s;U%Z+&_81XG|+q(s*0YD&k2=@{l&z0ay0515slRFyw5aT5Y0GJS{-)8=lpgzpJ9;@EZ z4Wm|<7c9!q7#75P6x`2^lNm(JTu7}k%)CJzJSYLn2pW}O0sy+N7~n^eiPua9AZ7%X zW2r~tc@;>WDm;);Au)$OP|{A~9U|dV)6^Pxpf#zfHAkwX)%aBDfsE3Lrq%-)t%q6@ zNlID`b|buYGnxhqq*_`{=5wch+Kr!QXyBG>fz}rq;4&;bpdEW%lW1wsT2LWo0F0 zwL7V0tmUcl+iqo< z>#XUog}^%@^==DD(TN05DEt;QwTzP8mYC*RxgyKT;AL#+UY3E*YP4AE;e%INlWtn> zp9~W1jHaV9tI?e`gRMi&enx`!M%qbBZ;w7TH?kAdIXt&FdU4(hA?V}zlUigKQB?*n z+TQ+N0q=D{w{l08ZG(dzYiXZ?bKbJoTd299tQd@cUUP4Lv z+ytgf~veiZo(8elq;e7HeG?Hx=m%mZQ~D#16vp%N2J6xk=IOez|{$=6d7BEiXT<|x&Ql-tV5 zj}v4n1>az1?g3ZzC^$g~k2z7(gq67gTva95!Bp5os#nR}@J8zIP;AUS(BD^bu0K9NKI{OrbtaIxu<4LD?5t+ zt_tiBoSHJN>_Pv?y=0_> zRjgV+H(r#4JV+t+aPEx)X?gDTjD$h%4TgdQ?hWdM1WCNYf^l`c+=K*mR?u+yEB81` zpL;OC1>L(@5YS84OKgfKgi9ZPU+`y+D={S=eWJ4btHOjgx&s9XN%FS$f|cc8Gv}-8 zvX+|1$=entVgg?Yslg9hFu0Rp0$!k{z4S-dZaO6KGQkc!`UG&Vq6b+E+@XjinG3;HV%}_VR5JXG0}wT#&`{6I|5QZ4yB4VX2h4&5e^=FvZfF5g(@>`OtJ&PVRo@}qWsr-7VIN81yP%EV@!jV$V~@mj(}$MjZG2>c7R_&U~f#6{|gYrk8cbH z>w>>l1MiLL@VE8A_jbZ!l$B)ALr4@oC|dZbc3FHKJiE&4uwPC=!(opz?@pSf6znr7tA49RiW0U|R!H zlt?UP+N81rndPI(J*6MCCxMr1QXvRZil`F+;_+~SAJ|lHWCfTh@37sRDu}TFu3LZv zQyK;kh))QfSl(2#*45kOHJTq=CEDh9f&PfV=AUV`3p1QuKxK$ZE%KRxT zFG-g*SL&x+KX>mGGY$wn9q{#K@Zc>>Y}I#kSO6jM{Q@BHJEl~h<2~Y7g`Z4ZOw%$c<1zio)+NYgha$%N=mEv%huG8gM-7=gq@Aez|87%BCi$n4zCL-;puUHzTRE^>KC&#qtyz*Rwy0eeeMJ+wp8bnjNBrz$tl>Ct zh7n-c4a5i}_=UW@n%6YQf_as6ks|#&oB5+f51HLFE&X-;UObeF@riN27dfROVOomP zNV(LM{pRpt@$q|3k9F#~781N3QPFchX|a~$>a6#TQ-`b9#LxK+9WJkrERLCo0cvbn zLaEqGxZ^1yS5}hFoBi_@M`ia%vWVwt`DiaUmCDxV$hkwI=9fxSw^<=+G@p_6D=~ZJ zc42W})Fe}!o-RG)A#cKcv9uyP_x-L13q_1z%2zz6iC;%v1mZR84tAQb<~#V3tqdw3 z-k%vf9lZ^ZX_XAGxwcC0Sx(N{zM_pT{Sw%^f|9t#I@tuNOi?>`>np}bPP#ae zZ?(1D6LJ)fw?lqBTKYXV;vn=SPp7auRKm5;&Wem-g=C6iMS@!iNW)=y=WG>Gq`~|& zTwt{pxt$hd*>kxU4OGm3*Cw{u@KY6^#}q*|V+G=Cy9YLj81{G%#N;EA`qXxsDj=(F z&9XHf?vEf%on=sde9RD+p()?$=DMYE`9hTF$WC^^K2fQ;q-SuYsZ4nd3e)S5=+U1S ze(PSY-J&En$Ob0YIsMpBC$hB^QnDuH2=NwfJtZVhd>KX>lEFqNFKW;~RM+=7Lm zhc-NW9ETBZi>5yXy|V~|uAL-ILj@0-Vs}n_!n@bpZ7B?%{r-hO>}vZrLP&$jnl8Tu zWeYA@WxhWbFW`81+ftnNuFI4Sjz0d#dQ--6F-%XtG5#3aujfx)z0L#J3*vOC;st)DNSECiO@VUV);S7oHrUqlz zD1UR6yj#35mb{`b4gJy;*rOk@mpiDN=>Oc;pC5{up>2_*XkdP2_*@%1m&}ea4z1)i zDFpDYkh?g>2Ia!C3vUVC+s}0gE-k(Fo%Yl7t71zn#Nux@UcWhWB(>P3+jmSed`{84 zT3^SgYe)S{YqD;nMpv(tzPp&(ej@5o=)-)J;YOW~Ap4OgUwvzGsZK`b#sZO?lx|CG z^l{C0e48^%YA18d%-s4&-&)(pv_j~7&q~#)VYduR(W_gUh-U0S!o{xG<6M7Ox$mETl-jp11TfClv*1IghlIPf|d-2cn z+ASWusH?@$HOmKTs=q3U?xCs?!`Ei5nrwG+Brv5Bl=v8~DOYtJ>vL!kl?~3~rlyH4 zB>Kd^YiZHJ!J)VbxwVU&^UB)zTNjJ#XbIH^qRi=BE1no31By{AmYTZ(=6e=3>y5c9 z)hl}*PWE1O=6mMqsTeMs*^Y^v*M80wufgqBe=G7AfOl}TWE(gvW6vZc8i3j5AloKp zx!zf?wkx!*`1T256rgregZu(0ZehAUZ`BQLUeAui4vvmmg~cX0i~lN{{;t>4UY@~w_3@|<$%eejf%t^SX%LTP-0I3Wb#+_+H^cyl| zmvwkUXK~rEZCx+~9ES-HD5K%3BcU#?BklsxS$@M_Q{p;(5|U?!ga<8<`#ML<*6twzl1pb^I-wh$D4|zb-7bR7p{+1fKP@3is9V)!1c$k76 z2<&r49NS$@tN3-U6D?h$L@Wc)&EnbTwubB3xt3CcQYuk!!JynBa zAd(f1sb-o_pL^$Mw=gH|eI)JlcssSFvR)I7JKx{cgw~3YQP*Zs;sd0y$!z1y{J0-& zr_XmAmz}p(4ipO@eFHipo_A%8Wb_^kUV26!rU`oxcX~hvUl<9# z^>!04Ev#r)ZFb;k|7OX|*IuwweEH+l!cCdx4Xu$wsM!~gP6>!F!L20D$4xlFSX`dB z_0ddX)uYe+F=}i&g{b?Nm9J3?uSK^ED|{n-S{ngH7>Nfi-Pb9oAb@x8JyClauLNK3 z_eM{$anp(e$Mg97#C_>6iGsaaM_9aDVUrjF)1+U=t1&~Yja1^3%^mqP&s#-H@>hGD z70c4FXWsc2x!V+1;%Hpc^AYGHD6v|pK3pys7#aL6ljvQrK;aF@xfQT+aC&+=+hyoe z+Eyj2t*z~5klsig=DhV=;qp3wOn0_HU6WvNi8Elsp&|+c@hQTkab)yzo%H>oQ#&=< z-N@L_@#1)-5#cH%We5?mMmFh zfWuS-7cJ^dSNV(dbWZNQ|t_k6*dH2L&L(zWKSx}MZPYQ!DG zB}4CLaf%V7cc}5TH=c6f*|cMk^w7U5KZ4t`h8*|#R*Y1bS0#2|*bXMc6J>wjK3hPA zSbu2Sh7=`Dy&)T+q0KH#EVtJ>$+jCRPc+#pd84^~OXxZ)+o>@n)7w6~`>^;O;W{W@ zFqRYbpSm!4fq`FkFCP?aQPwT=`F=SGS7Sk9fNQxrG7Pa%SE#0w+~bAf9gtppN%*F0xBO9_f(HE@x2$df&@F5SFhmTdbaW@>vB zYtODbwL2s+@lj<7;)#qs=gIzcndm;Q2ybM-U_%vvCd5SOVQbWY+hQ@tnwy?)>D4@G zGI)c=Im?e?ikG81?QV;`Wzkci?Fvg;`Iv=dzsGOtzPgIc&%(yuvz+vuFdtzNZGGQ! zyzF?uUBzTs<(jSD6_D*w6`uc;0?-7}IZn=F+x_A<{^m#XM%J|QJLji5l~a6gc><;P8-KVoJ)RD8Xd05K;h7X2F2OGB?$(;SLDx(`qY z&!6bsiMhFE{VGT(@5u44?};NtNd5ZU*5GoJw)uO(_J!2pwmEG%!S>5qej}QJ%f6iV zf+@560s3{JBlG)}9?zJT23&22^LJt{Hy$fZxB|Se6j!`YcYcrtD&NA|qz!6GEK+u) z_IdMA5`$D>WIV=$Ounu5z2TPbC8M1gj2hYJ$TEG9%nc|>r5$fAl6?-RZA}#R`1U+1 z==j+sw7~{{+`(0+^g_WCTLhNis=EAc+o0$cT^k^$FH~avL7eQUs5887&?o+~fXC=zUN_4%fjshdf^rD3ps=K{?4N!vD3XTnQk5Kq%|GyfRX*l z77;VI1_W*8dAVxs=TQH=5Fu~8##+);^ZiA%W%y`5>iT$OT!bp^B9%SH%|)1fd+kz) z1JFEd23h_JX|0c*wX`-d?DO#R<60ntsA>1wWx=(`p&o7)D?(XZoIF3{$6VK3iu!~Gy$*2&^$K+TyR*xR zf!Iu22K>;Mu!*&pwrzD_@6fn&5P4YkeB-#!I5onwir;9kYPpY;vtnV^HP zVWs2`APQ=`U$ujxLF;>lRVB;^WhX}t$?MlNJtYk@HvzXN%##ojceOS40AVUCO0j9A zx5Vr8&5EUMQFkugE#aL#Hv8|$@Mokt=d_P86k#cD_ZY%$yN!nLy#2Ox`W*+2pS{~O zo02?wn?kuL3Q_j@&ZXdw1!JN{#@lRL1TL<>MO|vy1J{8H09WGT{#Yb@SC=0f>h8;@n{34JZ z-9%j}e!X9JO*4{A{s1^Rxm6DQuVvWK z#Rnq(g{Rg1NM-G4QKZ@U{;uZcn7Yot6Itl+a|c1_ugYr&*se$E6f(v5 zz4X@W14fsxtFX2`>`mSajo%uT?73of_Sp-nwEk1=Z?6+EX7BAdR{GgJ_r=FzfQ6mh zqr`Z2&4!`WeWg!t_b1VG-SgXuv%uU#=wPVk7hiV5O{0pPvj92_-mPXQ47_UgK)h$~ zuC@7;XyeP$<;`eUp9v8f*-xl6*aY-WJuNMtpT@RqEX2@6B!Iis)q_2kdgl`%>W!ni zRlasYQC))zf#0m+tnOWekIGFgciO`%qLS`lXxn@17q732hZqG396`_SIgErqCb0u=_3AH-*{+*Vz6XsVwtUzq62^5>Uw?PvHV zAB@dDqw0ZKe z2d6n+{?PK-&DrWTzV%pewTVG-ivWpa~p9J41CTM2N&BkeJZp_NYX=bL+#j0;+#m&xUXllsC&S7P0#LmHGZVvh? z^i6Hq**J_W-hsDGO$=Ds-kBXHz<|eiSK{R^M;S?wVViC{RQ|r2I7(TcW!NE9AOhae zFOWZMDMI^XyuO{jb#^GJ9Hm*K`2lBN-jN`xvXqI)dbVLL_MPs!-u%VXuOamMOBz3& z>Fh3N$JWv~nuqKKfHW%31yD@6KDN{~stR=zrmAx36yG(@fV*!yXCC|QaVBSM%*1+i zWpZ{eV|z$ki%$x#m*zU9CMlrrh(8V=j|tM%eN+&zQN=GT^mCHZV=J%Okc2kVpG@rB zXxyE>6PI^|jf+_k@+Yz$z@c0WJQFA3FTv$@Y$7K5ekfolC$=GscW))8KYa7_wZO(j z*gZgVtHKovuX;tC;%>$A<_1>}GfY#6M#1CJ5A|^2Z0XYEX*MwvJN2}ho+v!UE&UVY zz~Bsi#&}Ark0alQzrFiZKGDXEoXvKPGniyP{Y6zHAoK75!GKN<7Y2AQO@Kh`jZFYv zEM;WS1J|DE^X}+?S!s$xTn+mC&11Hw9U{MXnE}7jOfwy1M;^-x-D~zDe=s<)?R{9x za%3c{MHKT`E%TBJs%3V#Tqo12TkP9h7=k+N80=m<7QCy61sWNcfdp$!6KE%qXl4k({&aitL|KOiw6;j@h>6z;<~eBaHa8)lg0A0<-w)_@u5=60pwL7 zD`&oMGWJ&|s-V36Z{xj(AR8PUHNPq9uGpGChS)hXy?eyRv6$?9jUMWZc6D2O6D^Bw zq3ZR`^qNp-;pqrd5M(8w?pk$5HO9m!+y-?oK@-cn?wj@yh zyCIe1(ay-ZKQRd`Q1c6M;+QUQZxnduwQ#D`7%P&udW>D_JCl8O)$eA#;fEKh(qGQ} z@ILJmKoJoMdIL(Y+jg6pKyQ!1B)Ygs%D=s=W07#Xyu8{d)H8xT;7Sx;u4d;DPoFW` zq(0Jx-o4%!v+LLo*gM}XXNZx8KA2FcTUo)Sb+ajM;4l^Q8sgIEjNi>3Iakfnp?LzZ zA*vIdtO(cD)Wjd0T{!A()I&1YI3xOy=iWVz*`D{Hu=#y!qL6mkVNw6>Z!wNYMvalr z-`vorsYMoA*>#)DkEYC2Ii^ z5_L>8KzQ)R!<;tja?W)VvY2NmllcWPpqqG_F`G91O*`aI1@nAusWHhqT4l!9qa`sJ zk03s!<#AK*$nGT((rCdw=+jW>q}uApiHD<+=&V~Aw-FW~0xBS5H=ZhM4Bop~j)K4S zwAkgfyMuGe&kZ?)`k7YQnp3GQJ6h`FBg7c48K?m^m;e%^BnKwm^5Nl+e&G^lem14j z`?+ta6o#*iLd*{D*Q;11TXe2>rC{pgcNGY~F!y)daS#}8)89BacUATgnHLw$_ShX1 zt&GS+8*aE5yAg0-|N7x$ZR5)HM7qsKHmrX!LA?Uae9zA>3rQ;$4Y7mTsb?*S#UWMP zY-@P2?epvtv4Hoe$O#P1gDjdV|47JG4SCg+YWw*Hu|qctWU4R?DHFZeL1;+PmKDls znZiGPd<|tlVwxETY(bnwm+%elMw}0Kt_7(LS-SI8K`uEv81T)X#2igpZ1wH?olWQo zmd1y@0T@ut7zX8cILyLQO+ zM+BWs&{w7vz^7hOdX^f;pq?mkw3C*qH|ef@_P9aV$(wt{_XuQ!|;*g>aE9&9GbuHS*91}NhgOTe|VdYskkDb zQsXR;axf?G;lqmK6VqCrALnyfG#;XgyShux(C$zHj6=J5^(kIEKofi87as<0^yU8X zVW+9?6hurplu3NUjhDJ>Q5%dl_eE_FYAi4xmA4;E{kiD+l-`^cQUq4eV zAnz1#&MxiPPkXxHGRz`)McBW7`zjA}u?HQmY=Q~;dT!27;^mx8-MIpL8}}c=%C9oC zDYQ|36we49oT{?Ntvm&v^rJTAT&|@E2$-8Zf9R#6R`i_G6??LBI_0)hcHgs-Dlrqu z@FBVbmxyE+pF)UxMi@4rk(|7C0^DwZ^rej}R!c&gyKLvl=Od?` zyyMX8(@y_Iu+(-^8W;?XI5}LoNj2Dds`nWE$W24R?!9M{ z@rl0-UyELJm&>}hL#BWOEy=`;+Pi)GUkH0V~GQt!cRTXdnZKfg5=?_u?g71`7T zU)M@NoUy@+oBLEC5w>e>=}=zyQR_}cw&$uf6rP5v>$*idxo71?-La}Mg<|W`JK13sr>D}Mu7AdffMVy=y%8af|S8nj#C*IT-A5)r5s=_e8Ec7 zBcAIuZ!3Eo#e=KagRy!C*!ctC4ABdJ*S$k$_Q5$2l3iTmERA(b!q98ci2Aw~>Xzx@ zXo=i^qm|~%ReteAN&3b+eS7VN@xGK%lwoKmM5EE=(0B$bUubD zjI+`>0djZ%HLAc=%SQ9(;ZonoklW%~T$7W*Vg%=!kN%ON5oGRMX#eo(2KiKd--w;j zzI963K~o014bRxVFWU&Ynq$gYTcdq}l+xW#Qv1ysPtMojUX!cK4I65zFNX#~k5#r8 zbFHRKSsCz)H)G;gLj%*c0U2!)K`+7Ud2g70l4zPoW`6|qm-E!Ar~_GpN#Hr*X*_IZ z-McOAU_E$QzWU;<|4q@_asCJKn6+I)sere#q8t-5gZ#SeM(OrGVFM}!AvGAhFmjhC z^qAipu}6ce0TJyr=L9wh?x<}B9agQH_4{}iLb6Bh@hjfh0Av>^BYPjcN05qpUQw>zu2B8s81t5tpef`Tn?@T>eF`CG8<=z-eUu_wwwYPEOv& z?N?$noxMLe5}#0`@floR3(v_WvfyBVw(x7+DybXiGHvV`EAEnfAV2Mzvn12pR0o?-s11VaIzKa*Q_If?y(u?5U3V+ou^v zMuYSYBZq#S)J6G+;d8!S!*j;XyAg9V;t={`x0V9y%bM$!4Xs`@aXxiD9cjzOHp37G$?E^#;DNLMV)Ph{80V(HhHZbM*Z^LYDr0r zV)BozDM!<3%vDx*Mt-`?xyLN}7YAtfLF{e*6axAyY#uB*K?z2~6m-F(9WPDGR@o*W z22Aryx+yY-T>WrBk?;ed_KwrV z!~L%7EA$*#I6PWI_Fr2EI38B72$xk-Vcv6Y=B_#q_&MW!nBy8ST{{?p`n7R28M9A9 z(qt!tM(v!iSpp;oRV?7aJQ#W?_6+A6nmgm!>#=PuvPaXX)I?+uj(}k+a{}(>o#A(T z(|)OnapQLPZ;SnSF5})9psPGnVnnO(Gylhc{1)=Uwva6lA6ta#; zwK4%j@MCP~&BeAGvUa-5v!?dNUm2=wIi4|TBhFH$e)&il`XF=>Hsu~NzdqOs4_(*` zb$!-CMDxto^6^wA>v#*aDkUyb^YPIvL7$AYKP^kEjLMr=om(Ip_kuHlW&sIOR+S~? z0){`jwahe(&?~Ix{+0LXYrbbQyOo0jeMw)$_{+`FILA_<;d`(UJng{MDZ zOtwVjj^f4OZZkcdVJv@pK~Ho^CdwRnZFU02@RR@Cj~h*{-v&anPyL3`ZQ1aBzl_rs z@4dr$Sn^spdGx~6#r(4d$%AG1&%+Pp)pCY&3ceGSKd4bd*z-oaqVLi*a>F-<<3`b1 zo=O`|FZMKSq8Dr*G~W9?W{!*XuM`R}8UCi+q)>o4%)nCe`>%rL<{X?HhNfnmV3vd# z=zrj}u`uM~=CH85xo!3i%#|>;&<8s$%njH%jZLjNxHyc=jX7CZ^--Rh7@8?njmLFk za7XG6!VRlkF?YirJ=Dymn?UrNDTuaF4=dag#$9Whztosx;j$pNz(!5`B>hO! zw6pCEVoV`T%>CzkK4j8$)420`aT{cMM$aK5KvYb`I#V1MWEW7x@wcuZP`JBy3(eGS zJ>=Nk+i1gYo2OX?Ewn#@7TORDQCI}C1v4!36&!7C!!mx|#qzr>J&Dl6y3D6jr$9*cqa z-VE}W^UvI@)K9)vRj3fp5sZxaE~VU1ef8{tqHmJf+nW69>R%~Qe#LRV z+Kq&mfXH8qaIuR^WW$%VPwRR!`&=tKp9Y~XmN??sNz!-Ld=68Z675$TwyvL_*6Bee zsBy+xdCz<9%QzjBnTlpbIFp*iCH49uilN?Gxno_kq~Uw&YGd6J8_*5IPm}%zxV(r~ z268Qy%Y$qPxJR@=IH6FeZRe6d=v;z8a3{c!W(95U+PAcgt-%A7C)Y=xy4<_8F#5xU zNX|*NZ{ew5$Y&C>)ifJ^rn7zNg;mEhOSejkQEqqI#<2pmtN-VskP6Ny9@~ zjS98OX?d;O*^?lBNAgkFuV`@$3BjX#tX&E6pR$#?KBnzoxMP?t+z$h`rynPY+rFHr z?rfb&M!%L|GQW&!sAWEyp3&4RaFLQIlS;fLEN%fFL$;a`jHLpT>%zhx3h6VM^OJXE z68f)-v?nIYA3Dvjj%F&0xhdcC{;7DCj`bV?7I zVvWg1#X=8-Tz4Db-n&kZ{3+B%+nn@!8cO(@Y>Iih8+cP^i|)4D>ucn%aPu{$*0v$N zSB4|}JzsZ>8NUN&nZe9;3Ue&WZ%F~$aOd=rk%9iZjK zNT=Y*{6EV+zD8LbZo?EBQ_6qd?8!+DArSKo?bp|-VltiMaX1A{Z^7Xb~GSJHfn9+Qp#@4J{RG_p4BpO~d27yJHryaq&8BAvPM zNTBsVQW(C#@RFZie9(PWU)^I>dAs$8p$06J(jta&9oY-Rxm{dZ55QQ+6L{7=<96tN zOyAniIZ!P(E-m&V^28!Q208=;-;4LM$TyO0y`luyRehT{NjAnn}+IZd}9zc{#5Ru8$lS zmo+HXd^#NVAU%Sj&#Rz1q8!3Ujs8lY3&r;rO&fLiH{Np|_NI!lF7`1k=X56q3%fA~ zv z0+9}_6Gk>9yY_ljE60;`U#Mxp83P6hOkm0hElhmBian52|79zg(}^ZyLk=Oyt5Eo( zZ}A3vuzIcA3YE%zLoSkgRhea=LyG(qlb%$`7IXCDLt+b4C6=cOfQDd*iqeZ`eu={7 zQ6&7PO%JEEV$J%=T!o~;IQVPBnd&YZH1)3W2@71?pI`L1c&H19IP0RfKh-NZb;ol< zuR=I9*U*b#Ldj~7WNlyJb;@q~S7d&`;$?a|;o%7GH)l@`LO%lWo};mo>;0ugf!nt_ zIM{qo;VMrOSeqg+*$^o(O-bdlYow#-pG$Y$>np~JEcoeZ3&epOg5Ko~fh!Cn9X4o) zg1m%ejf@ztpGZzd9?|t(SzJ>Uw*(cqNLO~Ch1=M(ABg?QbIsf9-g_krO%ywQ5%GL3 zT`3!ZSywaD1HsmWQNBiEn~ffYP^!M}ehF#cmcKZBeJw{T+C#O(tFmDNO$itSf9QHoSCxj6z04n{{fXT-aE zaW^iG$I=FpKZnnu+yzc8mC?2Y-9PnX;I;mDAv6t{nKOw!&ehZl11d!-RJ%@9)C>B; z#&1GwKcPz24ianmgx;I=?mzX{6S=_mPqwg$rZ@11Xi7ZP1n~*j5Vr?R33@3HXp3qR zEVaN#@{DZt+p{~K8ue+Vb(jpx z+%5$eWHzee@h$Z7TmRU{zMtekcg$bi%T`AVWnfC9oE-s0fi>|;YrmF7FoCO?27*2z z2g4a7ek~PSb|(kZBCN;MGJk|PH}}TJn z#0BtMeBGl)%w4L*b!s`+Og@qo0>cv2F4bi?GXvt%m`bFo@H>$&AwAJ9TC@Siox$g1 z6-vqNLk*Q*80URvsr6SPZ(|5pq3S3{c^PVDd7Sz!qAVv1%+pJPMxJQ7cc9n2_-I*T zo6W8UYwk*KG2Bt>WgQtvpU1Dyp_s0l!((PTZekoB>hsg782>{=rO`{vcY!lI+q9;Q zp@^!Tz)%!8zcz$4bsyH1qYxT8Du!ovmVOl*Q2LmBla5m`sIfcPS=NzgBTlSF^Y{c_I2dz=A|ukaOx_q>zmeYa?JWn$|mryJc$=7 z+1|}r$P>X(Cy}0!o@W2>xd9!WfT*prx}CPiBh-7g^&^jb#lDZOv|Vd01Ux5B^nCvr z>rO!NH>F02s}6T6c?YMFs}+1B(XDN}VI2dd!B8p(OTEjbnzJNnFvNgALYc{RLN>SU z(JQ_(B16-9dsls<*v=Bp~Y653W#hG)WpRxyV%`%ng0Pp(VqYHqo-|Q z%|995Vh>Xrc}h=)kE8M%HXKwL?{OYO_P~gflNN8h7k!eEGF4a(`?=Ma)I;M&!w9_x zEYmW6fn%TW*qVa)AfHKx*=#^dk;KI`tmK_bt-{L*)%rTM}n4r}b2Q z2gt-*{GZ)fHu_EtNP|(_IG)2S6m8AY;v$$6IqM*voq*{3a_PRgrnT!Oycy%R10D9} z4M!yXs(%_LZ}G%k1t>~bx_J#v47lOow~PEZu0O@v%E?m=Yv3?OO1Q9z)b+?bZt+!W-&#&xzOY@qD4+7<)2kY$W&6p097lh=;ckpC+G>D$ zq4zGII{X#`Hj!l3G579U*}n@ zre{>-SU!=qYc=dCUFG!2FT6|tkj+qOcm&ATllUsowX>fCx5n_~|YLM)mvSA_m7A z$0>Zu+$(I$zhidsUcO(|>?WV68=UsrQx+V)C>z8^$n5<>(u!661^G;|WI{IU>!9}n zEJt*dR*go_D4a=PZEl>HUzc+I7Pk-iFTJbbzd*lHb0SsF#{ezDd??p!ABqPBXREzR zJpNV=rpg>UHbnQlD&Gjwu4*!*5N68!%G6p{XU%){jpzjvgd^(qQsU6U?sQVjE||CB zPBWjJHXE1XNl+DaXfTvVM7yeAt#{uPU_hi`NodG=XurN(NIrBF?d$}@E<30GH|c@% z-LUhU!c(w;I&~Kskst!??Vz#yxZ;K% z&@wOF0@I^6yHzg_v`V{FiCnS}E2gJcf@NJ*0c;Rs|GPD99)6bl-IiYv{pQpIPwmGC zhu@j<*z^ndDlKlr1pW3WQ7eeR?GgVBVagi_V|hJ>GZJi@HIm!c65@j2|KmNl&w=O4 zn|Q{EPg0MQIN5}Aj950Gv|4A>Fq)DqzZ=qOY5p56=+jDMeC3u|=-{ zq2|8(re$V7WBufQnpuD-(RMjm&kM&mwM~Es^U-k z%(qfz;uGcuQQH6dJ%6CnU(do{*8=#{Ef;;hcfdLYC z8c0>utHX;474ZOJGe0*zREZ&aw|j253T|pJ2RW*adRgH$VN&`Gu`4RP`PKvtxrdf3 z79Fkm!%5{3K#$DXsY5Jh`2~J^({=k9<4_@$s9z+C2h^u2Pl4aW7Y@Z>gd`GvsMFzb zNFv@-hSc%zKmP19kM?r3qZWj0vD7M0n0%=4N%s?=KKBs8Z{k%b>c5MUo6$bFy6_mj zo_r{$K!>=O!`Eh;rZ~aVZctHg#5erG3|Y=WAc8+q5W#RJ@!-#X?fisbzt=2`HS6Mv z7YRun(EBYj+cyibwyW%m4hTL!*cf#4bFH)Q%$T0!l)AsG389d7ZY$i-v#n z9Zzv*Br0V2s^w12-3R@ELc1KFmpNXAhhGq7zPuHqV6Y*3!oG@l#0WH+sKgcEMWj)6RY}%p>bG6%a}U5Qr0$X z7Dr^O;6%3i)=(pmhV>Hj`>kUltClN+;UF39=aV_zoGhuNrAuXawZSl7d`jtxr7{t4 ziweYE3`poevlxaRgP#f_VW0X%!i~ub_sy{y4_Y{)f6c1H+<@vbWdHh751)b!yQy~8 z+5|r)i&&O@>Q9_h)QhQLCf5wZy^~#-`Ah%L4GZ<6T}9{pq-lvA>4a=xKsWFn#XgZ@@|>c%d0cQu$z;RAvQHOa;jdboOV$7tEXnC zq3!CWP*H$)l@?K+r+WwEnodWph^@m%$bFJMn%>W|-;37WF3%3^xmrJywBrn@$Ecfk z*70Dwgm)88#sepRRBfX;S=LWQw+{K97^RbhA%YM6lW%)ysr~33d4H9Nsb_^RE7YxHW6|Z_9-n^r!^Q2y z{g|Z~Y-5gyiji6FXs0(+&pcqwV#A_DUuxjm;;4eL zBQskHz2eVV*>WDp;@qqb@upYTM?quz^(6hzkUdz6J04**S7I3@+{h6`nMaAN3rj4#P}&ti6US+Y_s!P9KkDFFv%IS zT8Jarz)^uzwcDnoSl;N;QGZl0+#~aKJH6w|kfXT+7VnC{;g{5TK~~gp28Kbbp>A*D zmlVph(Ri$Gy+meNavj> zA!!lPf(TLvA{_@JpdcmPAaQgbN8fJ`=L$&JmfvTvuuF936hTuyqsgx4A zHEoA^R%4igGHTS%FFCKi8>Fhvpb!1lw&cFoO6|^U)FgZ^#mSj^lIY)r)Yn4^5fCmh zT;WIaNJfgdS&Xk6i>}o@hM0RVV;VpE@$_AuWtsIJ>Gmh@W@GQ1tABXeJ+GEg8Qc1! z^z`bK+WEj=-iE2R42qvBOuCpfD2W^>*;B^L4l!Fjhq2$8M+1h2fntT8BPldL?7;50 zudV}z*0!Ml_g0OzNj2^E@nbjX+Z2(*SgYD>t;v@$tNdX5Ar)|hM$u3@T$kmezDA-w ze4>PRm&wZ7$oH3A&W}U5{8CILk|1HOz`NeA-sns#kX7qtH1?!|IC%mxY8@Fvorvy~ zxtytJ_jokJMuKbD6> ziKW-+3QR3p*Uff^m-m?rznds-$#UAC{xsKor_DB_b9&0H_VQtHBf9g}r)BkkQbd*_ z_+A}v?pN#(vyC2jO0(6{ZrYx~EZ$bM-t`$x&Q(L2lJbutqtGnr4AMC9tf%w!i+sIK zM~^9pC5J!XhL4%``$~BpzG^tZB(jvhy30%&c1GjP`r6ZbNzcc$F1&e5ZagF7mZejA zZ-}h;z?#sF?^-|GJE|)yX!l^Q+sQkzdU@5GBzc!4I%K(SPX2gw8mJ;C)@D9b#<4mc z`O})GO$B24&jl)69jO)7_5WG1Q<^{7EG)!4%-l@U$Z_=U(GOror*b)?k?8XIloF*r z)av=U!YYtN4I?va*uyUP#mb$KI<>C1!k=ct?*k?o4im>XLqNYLHFUZcLjK_0!6oy=VN^v)&Fq*W*ZuCo_8k(N?TLru z<$@mumf_E@IVebnu?DNToK7+IQP?uW#8abBKrEPeV4R&Y1D=yujMu1BfuitgS+j_w z*5cy2D|1}Yu5|EvWruvcO`OYK>JmcWrv9nq>Uo6lP*{;vV(Ji0@xFzdHTrwz^xnOplBGUX?clq_x4I=N$O zLgGH~Ho5ny;YspCnbcFQO|C6dcQ)2+ha#6)rG6~RpLe_$G3NA3;d+(8B)zE3`u5rb zNt6csLx*#K!n`+6Bur(J!R6%5cDka2`wz|Sb|PcHg|0LX)h0i3{?OVMsWoF1~d`+M{EsWfl6xtvLvU)+D;c8DqJMW@lJhB2pqpqg+BslN7L zJlej!dL{bwcN#X9v8hOpYu%ncUrH8{sE2!tyPuZ}ilwR9uZ`=8oDskv0B=JP=6P-E zqvzN#a&j}#lhS)XY*941Ngpz@~I46q|&RAg&XQpv{nr{#}PIylOMV0i?mrb!eFklTX_ypTWa?pu4s06 zxXZhumTmhGY#Q8j_V<@>clX^~&O?Tj?;YOA4_UM*d?3Zr_ZcSKS;QdrCHm9Q2U{DB zCHQB-b@vsof(Q1kZN6oSP0kCW>3)aJ4%}bn+poMEovS>hJ|nO$^DN%-@z)JXcY=5C zD5SWV(;x5VnMRB*ho#|OGp?Rm%v|Gh@VkAM{U!{InC-V$d>%%9PkaDrs7i{$1vl*G z9UEysCl`E6S$q&gM9Y?fG<{G#b>sqx&r?YjnFqd7)Itc|HPv9JN|*g&YMgs}eEGIk zSN5;U`1hjDA3SfZo?M2hAKHT@jJro61KtALEBwgOl5rXnWSM+UzYubv#-P~&ExHYM z?wBcGw?Ur_c6UC)@;DZ#=-3yOPpe&#HHf0UxA0+~b+pheF5tRkXLi4QS(mdEn*s(Y z%e%^spJ(AWa!6^R9k7)`A;XxLRbJGGVd>RBI$U_d_tz>Iy`OVO>`O+Ur7Aej92Ax@ zZeplDU#|G1>TGy@&=g(1b5OSLsXbkdv+Uo06s!e|#QXCuxABix#l3E`yfIU|=K~zy z*xSQDZ3mJ37(e?1lMox$(JVib6rI(MteDO-aCy7hD&zSms12@G$)xVbbo=wlV#mzb z#VWt6_Y87hm!*H5)1Z0hyF@gDkoCRUf7>W41Dj%{cd+*IVBm|0`uv+MHHwQ-z}Ub^ zW4?PPjP5>zD`}afRXzvR6^m2Yb50@Qq=%KfRVOO$%XtGkA%TbZchStm&ubm`p(})Y zmXFB8s2z6q4%_XJcPoAQi7XlWS>6PxmPZJmRheONu~a4zbP|&)44m1>mNy_?_tm^`0>uf)EpzM%=c2m0i zy+xG7GPioFu&rM|`swW!UmbblU zOS0eM=eTZq4dm4q4_Y0~$=}ghH|5A`-%F{@kqVFSInj2S;7G_r_T1#hprcFcv?}ug z#Sb$$ub*o}Zc>R;qsFjpf=?JoWq&&MJTEfSSCzkEP;Z>>X~%p;`G}DixBvQ^_Dwz(_y4D z{;Ja*Z?E`4>e&zL^U@SIO}89mI|7r7Jh0-?=2X zOY1Ch(w^F&<6S_DWfDeatHshv9(7Ol48d|$VQ-eyYX8MI%i;|yhbwLS*vQ-Uw-P>R zQ7}C4I^Y@#lUa@ORuvX=y7qW%7p=$rs1idB>_}kuJeAF%`^0Wm@Rk zS~m3ZviP2l-1Me@%Dx!Y>^zG+n_tOhOoAWl%!#T=3+zoh?42Vg0!!cW@d;c2MMb7& z{p=G#1yr1D!2!yX=cC=_K5Pe$n_|F$h-H#){u3*atsvsV6N*A{>jG7Jy54L)!-HF6 znYQ*OaUG-g&77WfN1hvq;^^2Xzz+fm#MAGIg(qz5t1k}@HPUsiqBHuW=-z|X+{dXt&WG3Ggguhg!4H!fCo zdwxQ_$yn};E5m8+*O-gH0Xqm0T#)XXjFP`5OTf1-^y9lW#;hqVyEW+tb{Ui3O;Woj zW6st$zvn=RWvhHrHCpAd>C&NJTv>Gdj{U^0U{YI&5jJM*8`mIS@6x+F`%q4xod{i3 zVqrAhP&_ENDmGdW$_W$SO?O9pGCxvu@CgVQ#LoLww4*%&z=Fx{SidFKj_RsHNB5av z`3|9}>hT7rkU(Hr7L+au7#(XT;lo@GQyx4JxQA0wm#(2>Yc5m7V#6D&B9oUxs9V2G zmf-xhLx=~7RA$QEVc*iGPcIOQv#NXa-b`Ghd?!Yyai!DFngNy5&%CtBd&OIV*{CX( z2JHIrI8WB`aAl@yK%$c>gk51S`Mz|+r>q&5pS8~~G7KBvR#Vj%*l^Li$jK@&^G1(e zl1fqvF3N0sWsWXCGl=z_?VdNWx+*Vs*Q48*(|&r5eoVJo)Q?UA7v9|jJ+NHz3r^+~ zqM*sv(Lw7k5!OH4zGn}NN}r<7@7L^K4m%w3W(i6@qF|pwvo+p%?;8H9iN%4kDIQ( zdv~fb*%8y6}%e0eQY_h~AZ zQ#38Ffv?`jU%l0j6y4O|)T-4cHze-+`;`L!TH*GfXSi&}jl_{n=Tk`kgT0Sp?I!D9 z)+NTh_j}^zFCpEhMNs-w6*S!&K~DqT3fXL=tIC{` z^|gb%dnT-JEz;dHAb0=gwG3YeBwC%= zcrk}}sO8bMUlr;$itm64Dc#Kiq14kRj3#pX1QS2~MRB=ufFOGzyh-3o+(lZ)F0XET z_Qu(wpcYFkyZAh(n}x(n?+?TxWEUq6#*FS*x9L4*jKP$!$v!NYlak%B-D662ZrMqG zmNfB(115)wu!eLmZ@`Pk$2{O3jL1}6wH%VIF<{vLV9CCQ#_6iOOrL^Pzxz^IO>aq8 zZgJd>;mgvc;El69cX#%rA8rH?*>Re}1q9)vhw7^~Grg&7Cv+D|OPzJ4ksqWKWgbak zI?XOZa+uJPITD?>bMVCOTVqW-0b_;efQtc9=;DJ<<$e9WL%v5W9WSwG#DXQ3lQf1S zdFZ;sgXFPS4%03!QPJasN=Jod!_}JouY7J(VP#DSib@D~A89j)PmSDc-ADE}dc1ge z_bUkya!a1MVsPgO?*06{@f2)JLjd~4xHqa|VK~|}TBh|QT4GfK)&A7$zA-6R??_Z> ztiEeB?XAz<)x|H{g&$mWNT`_^+DBoiHw}hF0_&(3sd{!!pWb+qd$u0TcH=Quy~{`F z&39XipJYxZRYsqD(a;eYMWyRG?3tWJyspfo!~RUYd_Z~{Wlalq>0E+cF2`W05S`jz zSojc1OglC0Az`!V&eV?!Z)i()o3J91gy$urZU7M%x3qd~)@->rYY=P#GWTh4^iuj)ui+;=O%L@DYhTY8Y;Cf9|?;KMX+6oc0K##geFo7 zrP;Ns=xGWojLmX66e{h-44a%9CDg^dj{#dh3iP9n9?F5$lDtyIM4AlGnij7`umMCq zE(0UFXAgG9tn9Y&YoO#8sAenH&x$dR(7Ob5X=-K?5)W=+U0xUZSS`1v7>kxmv-1R2 z&?fGT$eq$R(;vs2x^Kf_0lcWcL0?7;cnA(w*_s+K07R(DHkX(2&PU6Swwx<~#0#FZ zFs}uxa${q19hXcQ-Cc8%rCsem1&q71-(ap~pZ>V3)b2ul`O$OFcH-}nTtpg74UQpWL)!IFsXdu8u2SE{BX%{K^y+2tfzP;U*j}E zJI%Y&eK4;PpSj>7&Cz6T2=Q}3@T&RRW!{V{ZcAr8MxUiQDc{v29Jwn*oM3j|@$?0S z5;lPus(#+Q1|pN4j!zN-)cQ>DL4%1#_;vzrvq6ngmE+PoeXi&rqEY2+!a8^p6%lY8 z>tKU5JaNSZ)yg@c`8vFfPw$V!9ZnaTqWKs1wbcR&T=L}NjPL87EwF$Wzlt^bRUY7T zBG!IlGVao^?NsB(h79S+Uk|c3if(K@CH=9^ife4C*^k@RxFdm=OMuM2g{Ww>j0&`rWqT&Q1y;UypcUs#GA|)Ca&R?S>3J{?Da)Vvi)N`WHJZD0 zZ^3W2%T7XkvOxOrH}PlpH3)Pk1;Ex1j%ndg5D!PIMLxJqBf=Z5$?%M4QdUZxiCabx zmG*q~o%R~dT}TBuT8~4p=WkXoq!AmGm7TwEW21ODw0C(NX5wNt->u(|+f6<<_%rU1 z@*dcU{mPZ@Ym!*^)@rj(HJ7>lD(tAYOD*5xCc}krYO(SC<{7;e5)DFia%|UQ zhfHi|(C$T7lT?>jY-{tm#oVcWC!N(WBd1nvtb>eWzvgDxq$S#1DB;*4^>BA&+aLFyw zmer-_{1XkzZ;BMd)8Vu(nUW1>$BA1^gtgG5494^CAK$qlR=zt!Wvd)!rD^&gzwwjl zk2o3gfS5_5m?evE$onbhEwb|tX;o&ZeqA{$BpLDLb#kuqNf!>YamLa2);Jsez}!&T zb`GROj+dBUqF6`h@L6RoNO#xj6^zJueSF)f&tSb}YI;*Egl#zn^KG%ypfP|siXK^1WZ17H0n#%W^3gvdj70=JFTa~)w0px@r0Updy+YR z0d)HcM>YO=*~!37Ot}7w*v3qWi#uYYa3ceYtG(>7>0f~5Gn}?&lYPAxF_tRBBk@F- zq{}UL53QaE_cSufyf*qgGH7Nni+hwfE2I`{=e%3)cCfiCg^E1%Fmsk05=HF`U;j$w zHxu|A(c03z;ZJy_A;0X5`4ti&;r3e>)L1dARXR)9#IVB}>GD3_9nH(Y;j7R^iqWcb z0aZY(M0rh1t4iY@w@rQ2>kJaO#Pc&2vaAZ$o)xFFmyeXcQ{%m&moED5nB5L$HTN6o zSa!avl@(&|Znl8Y?Ff}HL+;(x%0O-whP2WZWPAw9%CqHxpU^IsYv11HO^usbq}(j# z(`&eetKWmCZMjPEmXB9t<77%;pSKN6nFAD>SB~yh5Q^`n;iFFJNy)wbmG6ma_vQ)i zl3#eqzlwHcOONnpsrH`XPkpQ~U@^qBu5Drc>fAN^ zvEDfCoE!T3nCAo|Nu#E|dq+Alr}Y3}2PU5^)5>S+N-G|s4+WH9EPP~!?Mi>>&D zdmlNfh6b$yGJwr9*X3qb;-zigN3LB1M$#Vwr!T? zgRln}{@lSG++Y!>>fXnPw@p)!=t-Zw+7*U*5z$1e(6@q)Mv!0{L2cYXr^pHvX@sT%TM zzPjNtuHokNiE^5J3yNWwcJifX6#gZ-dg5J-u)W_YDA*}~}tD4x$9sHdtz+zrD zq5p9jEYnVG(JK?4UZK4v=qh|<7)FmylbbikE2}GF0~xG?d4nS-}>0herZ8b z!$-o(%l+4p@23Mp&e+#aww?;sB9r*??ipPyx*+^e*s(DaXRX#uKn|SBHjDMM?w9O_ zFmYet{ z^}Vcpmb`bV9wH@0{X~ZoDqy7ulTJVm0;1IvL}zsM_S(8hR5F=F7O1()Gxav-=631% zv#=`mfyf}>AEroXVaT?XqbCx}#O66W<-d0Xc7kkA9!;(kebm{&RqVh$d)&6}Y&vt3 z??;x`c9u%+^dd77r3wanT=uSmExBL|Db>;HudylxhN_QLm2v+oc$dRYoX$1p?>+Jr~%5XsYmM$g|CiyxK?5}${bd0l2cn5Uu1o~ z_gGJKj_7Zkhn)Wm5Fq#}B#=fQBP}8zXk}%=FKl6L4VEP>ErF>)*xnj=IDq&LBK*SU z)?j}HzlAjj_#pJa+DKT~)W%v=SkTPITwvyctIpPkyCWc?k0e40GN0h5`z*T2Is5Qp z4vik0-}QTw%}K@|>7Px<;rQB@h>Yj+wqO!(!Nycx4&%=(Q+8*w$5PU5(vfFsFL8zF zGIjUR&umYQ&G7}%;+2yPn6vhVNi3x;)0ijPhNpc_t>8r?1~b%;EV?9Ua6T%5LhmC( zkU#OrS#kUlKGhV?0!3Z3KmJgwvPO~ep&h514-lj;;7_iFKgDSsS=H=ts;C< z4fzDzf@50fy;}q46L3@h?@p*zIr2PY8#tXmpD5K^;ifqh98NA*wzRuv(Ul|8-B?T@ zj(MZ=(mW6s*HBvnVp(~k@{!GpM@wRP!dVUO?O5+}A=G%^RJ|N?)1t@FQ(oq&1x%rt z*N~M1aY?#qTetPdx@2f)*Kc9}uwvZPXZ9Dy?YgMR=2*?a@Gp*&@qVM@5^c$xG+n!e!xxf; zhMfd%jZ(@okHICS+DKe`kK8>Lm%pxZF%$H4cN|?_ZfX97stszRGM*H3A#@hmz1Ocq zNXCgo7q903!d(-10s?L9ewt)>D>T)<6D^^YB@cGrqYqn$?M6}+P!`pzWo5-| zX0*Rj58jv7oNL1l^P*&SZ9lV<^v%3XMXhG3uu<(5Cepiiy5S67_4_TQ&tP$L5}5TI z%;?m-8Sm~sPQw3fSPub+|FZcjkIK+F0h%Kkp!7PZyrGvvT(8p_S-RmhB-lHw8^A;V z^l9@`&$n#b+z`tQn5wOD5#FXuQ~63@{v&!JX!>?wc4)+n<&2YLyPR{SubmuMZ1`@g z&5u55BDgRq;+gPHtd)=pXG}p?PvVJ?o_Wy19j3@IqM!Nbs`1D8Rj<5r5{o~MPKrTb z4~R32mxc;=g?;00UYT4}AOGT>&22WznknE1QybQgEU;t^&K*EbUN#waGM~%%wY{$P zUhd5J%I3?OdGqR8-#Fu-l8iSmZB8e6fVfh@n>!x!M~hVgsqU%UZ+|p&N&+1b1Qww% zCCv`l-7}7vn#UH?y2$zs<$hcATCg1Pbf2xRq{YZc^%?j1k-y21bQNJ!FZ)X$>Zd6M~K?^-gSw)_exj&H=5U+Z`|Lsp;sc}dRaH2>%6(huxwdoAn_i# zU{e0_O;piQK00;c;uk6q0;AkbBwJa``!%mJrJ+~}u?O+#H@q3cx-a99IUP>}Q98Y) zi;CM(6}q{a=ec1IF|S-ch(B_wG(7b6mn&!(9-eeAX8|kwW+1@GGTO;0B!4kCcTc8o z%*i*a0C~;*5z*E2Xa~57lJ8;sp?sFcl(b#Cah=M-ZhPSVoXK~ia*W!v-vK%6P+8JC~ z6eUQ1O}5wdid8vpU^2(=-P%}jNV9U+I!moqRK1zUTB-E%-kvl(zt|@+c(ixi&(-I+3oh})ALVCA9f^21!mIRbSsvCG31>E zadp&iyqdcB2~~eS!_3OXFb{c>(+660qisE_t(Szh&pJgMT~+A_4?(jKP^E>;nc6)TH@nMy`0B;2 zgu2zOltxi!IfF!9_09B(<^-h1^2YO-{8Sv*_az-t5Dw-IAp((m^wuH?tfGBv#kg0j zz`b3!FsGY9Y%H4wYZe3e?P2Px1;fMA2OfG9NE=t3Mh;Q&NShhbFqCn2cek+wV^OZF zPJ2TFDWz7*UB$s^m(|L5;+G!}qB>GW7_z$UCAQPJwf}Y zWtv?+XFnKeDP|B}AXam?&^1l6^gtBMN(d@OE*QJKZC>rS-N)`=EFFVwzAfEVJ!?;# zzUHxj8?AC3I2C#Lq2|iwBdppGyl6b8w0ujNK9a$AvN1Y?MPUE_yrRkAL-*pbsMYxv z+Q*k5s&yVhh_RYRL?){t@z(l!Nz3H~{?y`v*m3Wuc3-yi3@p>Ha`o0lhG&g*Q8+J0 z>eT*)hnM~kBdM}iPwo+Bq*de#{9Gvu6>d&o8hpx%iO!mTAoC0*xZijE zG6)*-c#V-v{=Mr#hkX0wC&w)R3e&Rg9iODKvPNrXROIBVP1mi<{cg2X4V5+6iIbWi z)%{TQ8Xx5sgzO9&7rd_D^v~akk3~6vn%!GJn=RE5-%+pjaylBsaD_=5o7= zj<*&hV2wQF!}=X;`b!Rn?wzhjDt&kN2*+6Oiq+9sop?Z~@J2AtGkvsZ;~ zj93$4+e6CTij8l+Sh*aN!Jc;mOyc+;FI1+a@d~}$Su9#`zLZPIDZTY1$54}lo`NcY z6d!7nKCSpZZdgO~470B87T3DFiez=yvQQgiNqk%8SLBmX9g7*kDmQzvE7~hVF`Ii= z-!?REyO$i=l|;5WICdl#k%^OcOx*M!lI{7b*l`KffqolnQWE8JBIp$tzs&_$s0xF&M=QuhL z(Fv;=rgeBk5|kfsiV{i=-)huJa&a{)i?S#T_!6q)BxM(UVwiE)LQKiwY$;%H^8(?b z5eA_TYh596(zMe_9%yeCD0Gd)cK6|)^v!cA)JPI~lg9bccpG&~m^#z`=(ZBjFa*+!qo_z*IrFN>^CtLI>C^fA21Z1eqh7%L9 z&reTnDsG+_cAIcK8;!fjJ-*(Y-oiJ#SdYf! z4`3!*Oj306`q03q5Q%R0HAai(4g1`c&#UP7yP?QJ5*+AQmieG_l<|oK?XuV0!q}eN zkJBr*@6BUYIY{gk8QdJ$OrSjZECg(tgi&>Io!wVQ5_qD#zU4z6dk z?W)fYd~F$&e4z5yURO~HIqX!wGL+fWnwi+5?NU_sz%fYD4+B_3kzGjqWv;s8QFbK2e{~QKCH`N@90W zOb(A&LMrDr?(dxV=UZq3!k$z2}Wo+$a?Wlzg# z$SRI`->n=MQ!$UC275cES}`*|Wt4dN*Erz_~9>dp4>Mq{TfDK+=8=0fa!T0lc3DHmW1Qd+fA;F#b{jOEg}%h@-Y*K z(*+|+bGkgp=4`bfh2Euf2e;>!wa2o9BtFXepL5++U66uD`?zYV?06G`mBX!ubKD+= zwN)oOFGCI?cDPK;i76?oks($yWYS-jEUde&d0 zCF<(e$rIj9W46fM?{}|^IXViTNIQ_lX7(>ib<7fQ^DDzokUmH1Eg!WVAwCyWPY#w1 z8y0`n9y1T_fJ`O(B5*?2h}{I)O=JTxzXp87Aw1NxoKV-$G+?F)6EI zO@4V~Gq}3>#pY*HS1GA0?=y_;s!hko41>{4RSCKs)g6y$eXwnfqvp>&+-&&c?7yrq zxJy?)txb>KPdZZf;Laxg?G91b_n$QapM4{W;I1dLpfLXjKt_k$$|$fy&T_d1EQWwxjdzDB@`pCekcT@$<*elgJY^{2I9arHC))Mo zvTo^7zo;yG1X60#LuH@*kwbsk&kwnW`!?eq*t)3->}jp^;(EwfbDsHy`pd5m@|zp7 z_-2R2_`|b@E;~JT{2{dvU_*|eSqqs=w2|rxjzrXPMQB3Ymg>6{w%$A+1f%4 zC`TDm>h*(nFpdOJN;wAyTWRu8!E8_xEh3l%f$2JR03wU}K{8&94^R-4okou!c`8IN z8+5Ko#jp~E-NsIvwPM@N#<9wZz02$e2h`be+WDlP6BbsIX<8?EVNe~B*GZ7*jkw+* z+4B@zbkzRanws|Y$MOtxl!0}kq$ktT7(n8krgRh&%?sPLihx6K021(^2{i`Ab`Y)p-yp--43S{1Jw~6m;!tph==zzip`-8%Uqs(+%r|%-=ex0_M!{T{KuOy_@0GWHmmE!9YF#_a5Am0l_r%?xk1nRT_k$dI*Bt)Pol*9=T zw?|7rh=vvcnDf z6+)zC4br?aiEu+{2t4xkHjg_uasNNOB63Vy0q&0>n@r%(83e6iKafEa!ysqTUogLq z$2bB52t_*M?;}v>5Iclm;(wK$o3n(jvJg%S3k|L0pOBDxi1D<5={eJOFV3(lGty}j zt0=+n4OsaL!aqQWCxKY>0dFkXZ?XsFIekZF!}(+sN{9PBbNC-Zq;sq_^$(aRGJ>mP z5P^gIg%E-o;FYyfo{06$!6I&DUJB)harvlolc{Y%E;#Z8ly(l9*v-Uq5J;H<>I9#= z8xSQqcoSxX0cZ=M0Htvg(M3WNTKCoz0h-jHE;1#q_$CNqP@z;}e>D1L6DK%oy16>B z@Qa@kQAWr?lt)j-he+G)x1~C=0I7FvPqN?SW^(TZnbKrlkfty}z-fs%~#Ks7vdA9w13Yv2#{8P*8hV?r>ica+I!&qfN zCJg47ZkTcr@p|`R!XJ}6sCeC_@X=$4sAJz=Sd9o!&TkO!-|tvuf)IW$LhvSem=eAD zw6Q{_40#+p&{~lELX3CY^9vLyBh@U56lQ7}RW5 zh;N$XIt)qxoEbD6f%|$BGKU=@K{5NumNQ!#1fkcUHEGI=U}&!;bI=J^e-Wn#C{iSr znh}~97zE2R<01_qbtH%|2tjxorgTYhc)|vtV2#oiP$9w-Q0be>-@U>gJGlO^S#XYs z%Z9*^8NjJ>!k^au(OJpxGkN$M$_@Q0}o&w>M7 z$oQV;FullWfC_?4E(j{8avlYp5QMoBK*Z-kONe36&%59R4?LP6sFgPL%imY{Bjc?T zP+gn{zURMTj`hhg&gyb_A?V3}=P}Kn)q&)8An#r+n8hgN6>rZjY z`S9_?aun*|Rfl36ujX^9p_8X#jX^Rvz&!tlK%shr5(4Nh0w)AyJd!k!)U_9eCs0*^ z9d>}1I6$DrmP|0{MJSCDT#!ET-tyh~lkUcqx62V7Cjs^lNWewv*e8kshHln*Kpa>9 z!;jZBmJ7cz2#ySDOc2C|wf$EB?YC1vO1YE&)kk#P62aeY2fWYm`M>fB1M)u)P23^~ zBxt#S6WY!sNJ~o#<%AGv1P}*L_&o0Wg~E0S;`BY@{uIvl?>C&6!vbibY^S3H7BuI- z(oi?W=y@=d{CH?Y@r7v=6y^_0KNUdPFF{xY$`gQlraTy(@S|X(JCZm;jjqSR^KS4w zNP6W6GIlil1exxxLUp^Y{|J@$Sn8{sTm!Oi!W2;4PW%#3y~goke&h}DYanNKAcA8C zY6?L;9JkJ`lx&$tUo27-$}(!PP$ESjrzb%1)%-0%+G=%LS^zK12bT*WnYP zht3>-x2DtqLX%AjsgX&HN|GkEwu=L+ZM<}TiL*-0jewJ!Cx@r8E36OIl(LB%CPL=Mymmw@6OBgYpzkL zvtvb~5F!{>w^{K&!ielBI)@0T2hDtdu>1)SIiz@L)FiMY2VR#8$auZCnn1-!C+swO zJM|I$eD!<4V}Ga0Zmnp=Xe7>D6LNN?{@q1z ztSftbOe`ETe~YM`=Kh|7Inie_zzMehD+s&Ai5Ff76Lu1WP1j%aL(uAR@4=mkl3SUH z*11KgEeY&PEMx3T47F8y)82kJ(xqom{__v$SXP-uDdZg4Ep11SJ?{Md zv~&z%k|V)P5ZxXc*_;g;<$w@%%&%WB&{Fu}^(s6t6}*BTLbZTOy(rkU_t5V{vc?aV z4>EcccXBjn#5U(|lTUiXAEieIwY>0z_yJ+cX0ViLjIqB5KET#cFwcf1qo( ziT{pL2wI>0r(Ysa7ydCU=*8Pp5JJDc*hT>ZO&k`WVx^rAo05fRE@`bog&~=0HOM~COZ&9}}AP8jo|Ia=-$_b$3QGYC+kfQZZYk3j2M9|4X^9?{IiUdUILAj!l zFo^8i?fiM)+KkhSN&d@@x?iCW;3xUkXu(ilBi#Y|miayb7gWc`4~h}tHsBhZ;32K| z707_TgHI{@2b>R1oPh?u;1gW_1|^5@VfZuW6f(%C|4*(a7mvvcFem~{E^yrV&u;!FfMgvAl#2&^07*QV zh(eXIXK)5M9bj2_jMKmwV!f30@q2;<}@m0E>i&SoR|_Zot@V~C*a+u{Ee@H>Ex05HcrrGPlz z{&!<}>d(27U$3DGb(Hke*h{oDVLa*a_o0gO`?J$*5MN%y16wo#q`e1K5rAd$yc?ss z6P<=&rJLE7t%*4aY5(a95#x}E#yuD`2S>)92O~BRfRJ%il|EDmV^d=t7$ZK-Q_Hfm zhRL-%e1yv$xXd+XE+las3??Q5s9mvy7`z^WgBZ^`pn67#BLP7OR0AzNP`aA){ft~c zUZSZ>QXT<%`oTq}LWykAC5M!r3gmwY{!rRyKNHr|(qRu1VMK61gtikbXnXGmWc@D=<7&;{S)B!9!{sB{5Xe zmNA5m;UzmR1BdH*v5TuW!7zQ{)Y}feJ(R{1sw6;|DsAu-i@yY*bSyQsV9?I$@wi}y zOs|cu`H^{a`Yj(R)-(vC1TbnJU2ay_H=EZpasKAMAXzVj3(EO_ECGSYPXy2aw8RJQ z_(OHZ?s$aiMjopO*|+F`;^jc}0Z35B9bPS=%-36$U;T$o*JhO2-{C zcI+UUcn4&(HUR@vr)rDu;xTmgD;;Cy84#1lfM^!{Puy`B@T-Cx(;LdM8^#( z%^)CXF81=jJ3GGM9r&Ut$P%)Sc9RL9G_pWjB4uqoIvBB1ykoSYn zMsDH4wjw4u8$argAyh&!1g~V>TaT9lm`;Pp5OWblvdrS7Adc@b1a2`myuhEq!Ds;l zYQQ?8Kn$xlSRKBBI@mZ+^A3L_o{)d@(hv=lHV?Qn{>8`u=D?)jMHd8h5y^qPEIV1? z7n5H1lHyHWfcHv$59|Q#`$11^i8}9y0ETc~g*45;cTbnCW_$(S7Py$2zY?rgR|>u< zgaW9MBmD-3_k==S5>&?nbOZiSOu+rsZtjNzaDgG=!@x1qY+ ze9k}jK%1iUztN3&PXyJeF#W4)9`mOTqV~qH^$+6r1qD-|uBg&8ib!=aaD7FPo_-FK zVAO?7rVYrlvzAs@63$Vjr7KL2Ztgjyr>7C{@KA&Wf>%v1Jlywh*EpxsN60w!N^*S` z!IKWuL;wiLFz8^8Nmcntbc#tP&i`fs(zc^pGd<&4rKG84?^7sn-jVSYD;sw<54WM*q-v+$!AJ`fPmG!6p;S+Dr zQa-+CP7a7js|;{}Kk(@YbYC1uzS^NRQizO)L%WKSgXbKl!rQ5TLmu(@z$hO=^kzLO zOvVq!-@xE~WLg42(|26f0X_r4e*}7U6*suJHL0K-VbHhisenw-C#7S4O9P~kJ?JNd zw_;sm9bgZnj6X<3(Q+SB9JWrW&FH@W%6w3w?0Fa1Ti!u+o4JDcx_Enw_@4=bGf0>Y ziq?>-of8!Vcm)?N5HAOVlumJgi@q~>GZs*BwLNn}QC0G(I4AxjT9|It4+-+&e{hen7$iA>QCQs1gdWO~h}$2O)GEfW{EY3|Pw_nDaKEAVly8 z|A#h+=r?x0-Z%kGMBM*d5%SXcb6Tf0s%Ai^oMZ3AKoQCjNJh4XMTyHo3~K@%&OVoc zah8CS178&pD$tZ_p$#$IQxqEi{O5~;a@`>mY8`aVrtSju=1qLhh=_ZI+{JY_krvXr-Bv|hwu;6 zz5id{2`^^&4gpasY#0(ve&f}r~hgpfJdLeZY=*dFhDWYF=94Rw?y zkGO#-4SS{}&tabb(&PG_34YK98-X8S2|!2Vh6-=uQ5aEd1CEdq`VKSx?=fiCst`g- zJ%h(%@wlYWI+h;V>9hV*0U+iw@|awJU?qnTWB<)?Lvz3jP>ZU#-dPtf!Qm>hd7$(U zv-zTOB|_QP&OzCF9)^cY>Uv6GzE5<_-<7H+%a`cr7{3Id0=``c{Pznh%X{b=A_nM0 zkD>v;2|&FnOc~)u>#^3mx43P0Y%T!Zn8Twh9{=Sh#$Vy7H{c@cU1T8X=R+pk_{vry zDw0<9#`|x~2M&cwh5*IXz=8xSAImW?`2{weZ#!Cf_}Q5b7Z|Hr&|KoNtq_=H6!GfT zU2%dr-uR0I5FMEg9W~1f9p)Un#6|Jg(MRU|z{&(EUIm>%LvYZIYWzf^?>Ealev7e; zJI55m`7diNg!JZzvHUMhtHKkzb_t~2WITIf1d(2R4W+xsWdXC{*cK} z#1OGEF$=I)0Lvd;N@bz?eHK+T8v!;oxKjh;rz`7fLR3?4eoyCBv^&+ewufaN!HAwzG`W3i4sf>p$Xo46nKkL zT5Sk%?Kxl#L_5Fd?+liFV01yyiw*n{fYL48*WYL0$khHr41#$%>kxY&g>is8JGZ|NR|ZZeN6dQk8|E3Yv>OdI)Ts?k95e&& zcx)#EW^TMziLy?Y@=w4D8s6STd(0fPzGS%7^@D~dWa?9aFt~|035fts@dpsEuLS<1AdU*r zCx6QKJ{ej-YtNhi)`Ot2YBD?;o$JaJbs@wG%RjW!p@5=a%J(!pjG}U9zkmixPX{dF zm($LS^+#7-rJ&5}*+mT%fF^Cg*a29WYh{ul64Pg~3phG)V2?>VE{5W%6mxeq8B~cE zQnTLV07L+x_C+7^+7!}YhT`Fme%H!g(9k*a+~LiIC=l~tMG;t1tyoc+F~x;THAjgl;JmmG>{U9hlBLkC`rEXX{iQ7K)PGfe zdsR@A8z~XI7!ZBh_5MbQQ7iy<3B4H5w2>Pu2Fc3;nh2e0hda%Apj=8l;90KCoq~JW z+zfo%lW?2ah9xdyv6XrQ5?YuyKM?DN=kp|!qwTWaRqO`jr&~KM+pYPj|qlAF=FmU*)`|1c&YEAF z>`hFpYs?%TE1!SbKV%XdkaR`B#N_hRwXSWV_ah=v8ZVhE)=K=!OhM}?)gJdt-|StIkvm;t>#+fS+K)MqyhxseLnRjP_*! zGU5#cADZqkkcArJ)hq7JOxAoMPzl1;Bs+R0LvFI@%TK0#IE}&@sw}9G&4J>KaInLA z6e*U;36(6)9rqtOYcTDpGUeZT-}ck>BPT!d^7w-S2TY_wqZ`KdDW$03uF7fixa(w7%^Rwg`UXaINM$?_o4L@ny@cqBIs6I<2bl-StYtkn2-Y~e8jwEouyggxOZ zD}KADPfH2L!}T>4KQ3iJW+`e|$jC|MMUfotoYck$J7ZwK1?yPCOq32fB((K&VvgGV z0XO2=Z9=*UY~ty#xpRcxyapu)u8w^X2OWR(AN~)e&8=1eBLk6-9+bUHpprN?&;n$U z^(||QtwJ_9qzNU1hJV{qaJvp~6trIbl2Pw6c;ANHRz1z28A9y4bW>x{KmN4`&bdOz z`Up6t-{op@3nQB|W@<)9wkCvD7{#PnM6G$WkZ%QOrIv`=!d8pzSYe;aBcKvZWs8D8 zrx;eoZ>#d2%4>v5VLTLR29m2N-1Mv?uCrA#lAl&u-q*WDX*i?P(xy*bjh1e{%DE}% z`qKSBY4)6QaB;>04>1G=@H)}?ugBWIzlN}m{Co#GbO9`R zBuu-*4a(2IZe8G+l{aj~M6+G`d$E6AtF z(p1Qqe6QsXMzd*V{&Cl~Gc~anF%~C@;nH#G8B?9Qlt`MRk0a4;V2w~5 zjhBf3i`Mn@+Lu50D}3UsRoB;5vC|+=5r&2)`*q8|-^z4Fqi{~2glAZd?v6<3Hga;3 z`}gl?1|ISG5^wsZoA;ev4M*xBPQmiE<3DC|2x>Kf9k-NV0JhLGwTw@8NZ~mO2~QY< zFzhgo#06xBrHVqSx%EfNt$MPK*LS-5y{zDANe-Dnhhf3(XwOJsDq(*>avdbxMl>FG zO)*5w#gjn5+_hriEB+CQfujq3Cc3ju@Iz&FFgKzvT*w*;f)gA&8w}twh#!f9_luf0 zuVkR#pFpu+nZk>mI_+S@hX}^TB2+PgjWOWdsiR@vbC)KMZbq~no0wGsIKHwP{paXN z2Nz0f3LO9AHIJKO^z@nGH5@>h9@E(?o^oK|=L6xmkAHvbK(xe}qfKl+jD(RM@2k>Z z9r*mmz%dVY6^9|0Own4>LgA1GWiE7)v2!yJx5Uv6cF?jzcXvu{tvpS48 z(JI@0oFEy)a8;p>!x)^Ez#JAj^(_Q#9F(|MI=CCn9(Y6U`2(a5ySk3LDgV#X#2&B# z$P6!dYH++CgtfU&9LupIAZ<$dlY5)b)ke<3)x&98YAO49;V4#u@R>rR8x{hI=>H3x zqrOOf_zewHMAW)67Rd2&eJ@~9Sgo&3kVxY{?jN-XSe3AejVUL=dYgy|Vc$x_07Vl0 z&Ts}0QCa6&b!q&^oGfilclC<^KEya@bndthaW*U*O^k><+S@xoLiALjR1^M|n5JVV zew~7F|5tfj^Q79V$K&_J*2y&2Z+2pPjd(lRVmC)r?TVA?1~D*4xi7$xESouGqh zb6}z0;FdHM`_sVWSvep$*1|Iq8&yH{J3l;MGS2b?-Q>IvSC(TTZNxWVzmQtfQRC(N z#v`k`ZA)k5p+RyAx|XA{EU7-?zZdPECO450f$pYLC%JoXR(fSUeGKH9n;;FL{hA*@ zF}~M72;kK8@DS&am}9S)UU4%wqITZ+$3iIjt1u47ck?hs$XA?`6(aJBp%9Sa1{EBs zS?!QF7orWsFRdzT?1)u6Y%e0V;ONQ=7M8vJJ00%v>o=*1*qMHHUzbpBL$VivZ?9l0 zUm8VgE{`TGbQG~Cu>`8Hn27xo;Wgv6kt)Q>N*_KEdji$iTG*Z>o+T$*9YXKl|8p5H z8x2hGIq{r2clxz%GLYI_m@{-ldaYaps!N`+tQhJ9H2%Egp;@;6tICgppn#yhV0PT% zG9-oxKp>+dK@JRQ*Da79(gpe)mNtT@H5_1!`0bI{0W_-1p{8H(>Ih^vRFbI)nP0l6sVbC@T_M0`K%i3G_@@rO{>dzGZ;k_0|NhBQ12oAwf`A z0oaIq+jyRY5#4Uior#!6AQ@&G_V)?|JYO)_M1ZT$j4DnNqRx_godcMsdAWL$Ga)bZrS7-g|sfh!Q3>$;{7{^td@$MXM%pDOUrG(zR0q&pCX1UXL zNe>oJnO<&s3R>+34lL*?+cS)NDS?pxj$09^+5~Q34#hF>05_>`*}gTm^%7Gs>AeK^ z4JZZS>Y4tOcC+l1ZE4*HzmDT;y^rHw;kX*fJwBdj?}L0rTsxz1OaT}?&`2EtF{Jkh zZ7NaaB46P_G&*>{p~dZuSvvoiZ|?X)&r`Me4oocvl!WmW^BrhY3RxR2S6O)p2>n3i z{1;g+KyfE&^2)YbN6vb|rHRUwo}JfL^HPp|$a9@egMk=(u;<`AbAGC|q5flYeqmE% zyb}U)!uAt&`9?(4$5l?GOQ-yGwx2Fg=cHf}`1iv21T>4xgf_%zub1J&@R|1s0n=EF zirS^6Uqle833MhJ%yZ(h`>u$Jb1R`ud(zN>zFbQ&j0DZN=Yax0~9841C8cvp} z!pMAb-nfMy_%8LR;(1ZjM?5F!xCbmP3S~3l z&j%=9&x3r7m4g8+p&~4Fz>SEuN(EKMBKiQXsI%Jx-{lA$-Tm-Xit##&Gn1j=3el;z za-B(a_2E12tU12uT75+^>YfLLIbI5;OCm!XW zm(l*xM%>OsMA*(6lFMKk;^r^L8r{<(%Dd|hNK)VXgdFS;p`C4Is&m>Ki`eBI+r>=< z%z>~4LO-`rKfChtY)z0(Ky+plKCyb#T+`?Vk&dCvnWGhl#tSD?E+;O{Svlsm|8dL; zh_oz0j2RyT7#Vzs&6;u82h7ML${18{cf!KJE@ouL(~Mh|;_i3*EQUTXZH`Av&~>+X zGRs9I+g-P>DlsXlw>F)NTjR?H#!ggQMmTI``36n(zZNhAgHIE|3XB{$N19TBUmMVv zuB+jer_df<6+~x+I4~}Tbh)}7o8>(w=%Q!tfHNlLpitth0dLw@Noc9sEJbr5ZWOry zzY1Lvxdz$sqeN5IDExqVNzZ`O*>-y`6(cIT3V~-NPn^*Mm~Jw(w;vsgiK$E z>;>yuoMmzJW-U6Xz{;lSvi4%wr6NZ|LPO!6t#{62Q)ej>W}o@ip2*~wSQHL^;!^3H zzY$z<0Q3f+{dJfs3ly&!0O5Athg7Z@qV^W!53}RD zZVu$c6MO?6as}2PX$TY($6=PY`zFVJmIa1!k*qDOS!@_oFo-zq-wrg{2QJ__lzyN@ z8M%|$Q3NkvN|e&R`t0;}=; zj6M`9Lhvk*Tn23JP`;585<@jvV`0%6CdOh^W7buK;hkzBQ!A{I+Y9cSTYbH+WCID# zT*Rp@Ym4srb8WJIxDTbzTMUl4_uWA{4j6>>?fAB5XMK&XOD+3bH2rmN?z96jbFmU_ z5!!ncN7V^FPSOwXF@hiSj0CU=io!nJ$Cd#Tev~#uK!?RykXztgktDb+Z>96ib9<0LePw;6za#O@nYT_X+2x>jSFiz(DPdfX2q(FWx%s?+ zXz<3EuqkI?tdH>RpKu82T3epQ7lLy+87qH|FA%C*qeVn+LWe-nK5$?gBGB>7ZD_bR z0q2N({elwG{!DM?L2x1LW`;BUm{+L=##DXd1G||POg<)SG#DNuupF!wV!6t2s8!t6 z@21j{=#=-*ZiSq==#iqFNQ;QROV)g4a5L@rq1#)(o07!sfg3>_5SOKPrVl&!<{uI_ zJ+i~N(5mU(Uo^TwM!|QLq;^v6_eJ8e0cPE73G$qPitMFt?>EK{`PUwK+Z9_q8Zo(g zEI#ky#T61Pi#i9N1uKIZMCA3sg}8_m!t+v7VTEqncM|9z#Uc77}^oQ_`XrNkN+bn;L;_V*3^($A~zc7<{Nq zcCndhyd)2o;)OUKe&Ontfy{+;eLm_+gU|X+v@^;otPFo}h*Fjwm&ji)#u@(UdGALt ze%lVqnpHO<<0m$s0X||9e6i=Vi$aMX?Y390^IBDR~i8t1A{;7 z4EoIx_lJaNXUNFaTqbb+*FCDronK#{E>)u;a&6b%?9=(n9Lu{Ezf*XR!1=Dw2dOo6OVT*kY{`=Klz6@BJ22 z_YD?k+11=nyy|y*jJfAW)#-K76nTlCR_Z$yiD}XDMEO%a9&#ckUB&x-R5z4}Q>k!I z6C`H0r1Np%b7grfNL8Muy{25n;edc}(VJyd4#r{5Esv%HCeZzzINb=J7C=Q3pGU-x zFIzZRtf$`66RQz4-FLcPJ&eDvp$wHFw>tqaZpe2J`4wbuWB^-Vp-6%twKU4YhKm9F z2fLcrLA_n z$7`@B-M7{Xi~c#48f5=cr~pw&PIMQ0k=__4k(dK_R7uI$9L`JE`|Wg+zPR@dl>&X0 z*h+Y-vQvL7Q5}$m;t~gAi%5UXI|#6$wK?lcKLdy5zE*xN3l@0Cw75iA2h_ zM5EAmX;^|~3Qz^1Rtn?rKs{P%lCvu%d?EjS?UQxtYcDC>OH7ns`So4E)73&gyejIv zP)MH>*!6cCz#Pz~(VXW%c`4XW*Jy-xtuU$$QsP8p!F;;tX_=fH!!|5lSVwZWp z6*&U&V;FdtltFU4xXN~{M?{*+>K0~Q>LGD!VKJPySsRO)*fphpdbrS-Ff{qS`|zsQ z4$SsnySHNFHe#Ac6eB(K9BNBBw9=8|{I?N21_rSY*qR|Oy-90FeCbqj_a`Xbw!$p% z{>8JWcNmN|BS30Ox+l&*j8rLPZiJ^8YCjv+16{?Ni1>sd*B#4v$_>dwxIyU-F}Oa8 z8MjUn@XYYb{3k!9X{omb_FKPxz47Z8aT;;&iOz#~Sn%4JQtPk&emtm_Dh2OCF&oIP z6<$&RunC|KOgrv%e&he<377O_{K{HZIEqp(^2v1Odi8!u7Y+})R2D8o8)WMCmzPL0 z5MU+a%$G!b9a!z`6{{Mlte%JXi5COGoO>k6RAa6W1v@soqeK@D4&){vsk_n47_1+N zX*9G;yV~1758mnXkcT%q&(p3B>E<&t9A^IJW$W16*%#h;*JbtD!UU2v2~Ng^OlD?} zY{%m|*L{lekrcQGEm|cbH!c0GOGTO9LyDrjL-_k%zkSJjM`H?Zob@Y3mz4vK9`kZN zU)Yx!_h|o3^l0Wu20piyrykXTyd3?ub^2isdtXgVRCrA!6E2+U<&wm} zR)+xC8eE$Z;OMgx@$gV2VzPd6kY7m0^{*I_o#Kfci)9E-9G5MYv3yL@cP1?g!YWf; z3i5)22Ks-sdiU=>etf0Bx7_;&qC8sJO^)qvuUD?F?GEUjQKcf9Xqtlv5jC4PJ+vr5 z*kxV}9X_gjd-Z~}`22c%s*8gBJ&}8>Rq`&Z;z(1=G3qr7KS@wS7+p_dt&f}URna{- z>Y+`G=|qX(@Sm%;d*#dJ@pGJkxn-#wK6gtQ)mS}+Aw()>OL}};RQ$8MIh8J*1;5vQ z_XtSfzj_sx7X|%x++p7zG~KpEL}&FjyRU2GX8wM9@@Waznl%e`#7h$r5(+Iv?nOTP z;algRm$LjKZ=$k_O5S^49*%MEZz`v?w&uk(9Qki)K$2IPZxD@}VZlEWIJ7aN>G`KD z)!xZ}o{(LBh^D*N3~$-K8JO!IT=c_~Ca%t1Ah__eSG zJRn6XOLBo+!8AWJyclWjgmhbM1{4HT5ywE{c#@**R&lghJL1=3q!qw?*ByrTmWuPYH|pK)4}KkN4qUsEDV z(cn3!+p5CNa;Y48ll)Of@NQ&YndE&G9w#QndwQkgUUN;1l63o{{VlQj1b0w9cDuL2 z^w$C3Vx%bqo!{pgyQS%Y&y8rY^_qMi9+~?OA0Mu9+!b>4Xw1SR-{M1$sCm8^ohn}W z&Z+m@VD9gT$SC(TGA}P8M@E_>EzMxj906lZg>N0Fs~;$SzakMOsS&JKmb!T5O6*td z^tr#kJUtr{8}cr+Nvw+CIv;a!F>%-@ZUB)0aga73EFKt4=ZmfTg$m^ zF|F}>{6Xh?|CtO?cu%g+FE!pb`sVxIgUf~vOk=sc6raM0(*DP%>=;UK!-TotqZjK{ zUYsKA=+4-@T5b8;T(sWR{q);wRmNh3%jw-=G2J3ro8JtcUl2Ft@xJD`_2W{4?fdE# zm7);|o7yWaeg&Bjb~FW8aT!z&UDtiDYb$lsAdI_29K&x)U&^w?Y;jU8lbih`SJ(P^kSu=AU0 z{Waqyo+rP?W%`(=E{~K|=hKQSG5%V4IwMX_a!Bd6*&x?C0@c@R=v<|_=7PQjl>|%i z^*y^RNtj$e+R?eTieov?MkGEe_h&R_T#hfy!6xiwopMXUsPnff*I2{a?~Y@)TC+MCqr`O5~tl&D=vSoBKB0JXZTi$ln&X~96KVMDu zUJ85GXuH-nZCK%vWxlCdk^&tO*N@9j`pTZvy*a+|ul|Tf>h@h;2P;aRzZFE*_VzIr)tjYFYi{f8 z7%`l@IW@8SE+5DCT{k^629gf90-5 z{W&o(WgT!jjIVSbRu(zgv3@w+*Q@PIhwHQDRY@Dvr$ir>8>6_?jgwPHGO z*RJUyUVAG=?FF%CUj%gy$_7rCy>Zh|?i${8ud7W_{|>gSdf)YdsE*UEt74XJ_;Vm7 z=;h-R(;e1F94s89Z)dlr|Jm@ZMO`ZHyKdghp!E*Rv;12Xw%!j2dH=A(c}LO_A|_ok z9GDU$*mY#RQooedv38Y*PpFltUv%yc-1PV6rQi0t=H(knSbI3uYg-qYmtvE@5tKAz0)E?iZqIKDdO&mX-Y@BTL=Nn$3YwWp=@OUUzH?nA_# zVl%2SOxr>Z4FSY;NTFss=MTk~gpUq`y`HLN&OA%=B7=or7S`Oj_~H4mZ--dfx%Z}* zsrxH?(#KktKdQdhEw;y@XOZ{jKD(!}eWthG?dJX}%eD4{=g!KgFuR|HNnG@ya)*L1 zV|R!?Wi_`X;T?fmepVHs9cICO->#OFuU6^G)hL(Ow&R(< zvh&-273?whtwtMiKAF{aJeKX$B}m@cey?>jc6j@N)_NXve0_hLRlcBpTZpEXrq!e1 zg0~NsCuUlbDBF~qlY2J2%w42~PV%2Mte_q`=;3a*{%h3cz^+NgNlJJ6-wW@j6G}a{ zUY6a}eKD`h%Hp80VzWkML9_BH9m0*7CH6k-TpT}{HxHK^QPW(|=)@9o6xZ6S1@{lT)Gs7WTFoQKne?Ps9I z;OZ*d&wx839@%Q<%5gDynB3q~5M=7Bt2uf4GDDcEOg*LsQ;liBRA+{UtmJshakp)c zO+;n+Quh@Tip5E$@;q-$0D69I1{YF97nxq`O+M50x5}he?c~^1+ZP|jLOLeY3qtFA zEAlzFhdqw{X2GxaL>MxG8f)Fzv|pT0^(dtV-#TAVR+Y;uxo%dzH> zp^jSFoyNYNiQ&!%XkTqlU%k$od6}AZ{g2I$7QLckHGwnF3cU4wSLiA^E7I57gewR% zonE*tB6#wU2J>aWx|gII$}VlOjj;N^`i9<^_+?zCKW zxj@}}K-+*%i^IEzCeVNP@ZW>7k0wulNNv)4f}&4cGIoG_cnzWzLxO`lgS=7}Mw2%bK;MS-_OIm>rT39+8Jz4WuU z!N+d`yWzFMQ-wbT9*^yGx%714+PW2si9t!f&FcR2}w7WKO+c=G@4~>`)2S-nqeWeL3!fv=y$b6E7ML?&Ri)=daZ>L zk~;l@b`Td2rUf`PD$0T_W051)7jT=d8wkv%&HHZ zmwW&FTmGu~&BX6A>R3ECnyDG&_@t22+s?EG$5Bt<``jU7kOUj*9eXY0VM+s1t~X^1#ls86QdpCf>i=m=T@TbN6zt%B#G|>IWrM&AY4XQYynO zva@@R?c|8;YI*q|2PMrnC%HW<-*BVQZToM44~I>$D;GACeykbas`K*KRU4;oWvfw| zt-W4MO89?!;N8MfCUPJ_)Vgw(iGncAgj4NV)U$V{gV#T%x4v zGoj~Ne%>wD4k}Ov#x{N%|L`nphW`ceS@uMUpl%{#ch~`0@|)!2;aRb zwVt;qbz{sV_0gRJ9lQI?N35C_Y}D42p%NF-(p2;;Ux-Clw;c7%7$~K!Xo~q_|E^5K zcltna!S>+$kD_)@=G<&-fB0%|Z+k-9tDiq!{BH9&YCnD4-yx_TG%&nNP(NB6)l~%KliMAdY&< z!uze&2AAk9YP@Z6Q#77~s(&rTWZ8lzF8e}_Nm5TIL(A%#*Z=X%aMK8)dD{Ikv}lul z;X!L%GyX|}#+g|U8;6(JWL8D&X>s?I*`{48ZoVz-?8&WXZyIdPf>46Sw}utDyT@8a zbB$hicgogXS$8pPm0!B2)!IDCkyw5AyWGEzo~>BZNFI*=o7?}oH8`aq@7$zDT+>=6 z)Anb3yM+A4=SHg!{fK(n@5140zUha5_FEHlaMd^BqtOqGTu74!zL^_#UAXAz*sniS z)1QvF`s2Z)`I#AJPnx&aIVzkeZWfHX(&8YgtI_fF^b2nPk2@Y8ofxmn-#pEX^=}#H zyKrOYjn(!Nyf2gvxn-KkztFt>P_vZ#-tmCow_`#k4xJZHy$#PGTJ%4A3w!@KkhaQ? zOX^5D?u+>Y-{#8%ZY3p)+(m&Vx3UWt9M`IBr1Bp4`C*{{gj1bOQg3mK!%+W?|8@`F z8E*Pj__cPIQL$}KY|HjkpEuUOJF_zt^))=Z&$Pd^T99g_Cy|zj;?Fj{pODCkcvPtL z_W=LQ^hyzNwQJq7c^v5T;OD8)$*r{ANVo>#>lj5Ewhe*zuvc-bF1%}a zC=+C?q2h7@0W_VgHWsFZC+s~F*?Bq@oNofOg$Pp^nfa~c^37v`ozqyD zSQGNjy4=nlPQjr`GVUv5;I1>U&UHt(MKHE)T{yWMir%og)X7Cb`Y~Hlk-V*xkX+%x z+}cFiOLg32W3}H3A_y}uJa}N*{iS|J`>o?O+~-Pj>+fbH4|WFY8{I!(*F0i0uEhMM zaV|Rk?2Zqwm`mfMi71hx|L1+@*;uZX>(-T}9AgB_{5c-8jlZgKhn<}r9^|pJYjp3b zHapOeW}%ncl=|EOGTCNUNH?0nmO7v5U;C0O{)CB^cnXx!eq%7Du`s+0 zMjC=dDU4{ne@}&Hv%~Tl3F{Nf97Q4_l8@^_m{)r+_f#8VWW)GgLGYg8(?yj9_z_Fo zz8?RJY;k|hTni2Z&!Kh9zpktxWh(1SztIN-WLK;+Hxlu~92IF~^S)j!t58<2*dOOn zBRSSuxSas65wdQ&t+=P>U*;3-LiWBiapbnTpatFPooY!(|Cf4VrAC$ z5(R~4;C&26Pj?yiexq zBZCR~)&Q^<+@F^rr_*eO5})8@PWDXacUC|jwZb`wjDnx(;{#ZYZhnLP6U}x_L_f!v z?FP5`Is(#s5_dnEe5!SF|K+huI3Ulq?|#Dq5v`v&bL7!QB_ zkga|a@j@Touuaa_Zv|L$q6wzy6&ZHl#iklg439QKqiL>FR71^yW$QADf|?^orwraI zoSkl~xhvqFb;YErap&=t0SO&;ipT#0w?rOYd>fz*%(_VFvMOYOU2yKRf*Z1`gQ%1Y z0o|c>!=KHE?~GPgRp;(6ADrM}6oFTUmywC+8UTd<-0%=4-UMY?e;y}ao1HeC9{R%m ztf||-2W@h>_z$8(AH!KEZk3P>qFV|s?%6gL1reAlkW!o8rr!W;1qq9Ba$1`Z(Dl-; zao7n=wSL6V=rKyfhf{~OK5a(VZ#CsC10T(7OU&-nDX>QLKqI4gc9&b!a5co)SPk>Q zZ>xri0?P_Bh@mBIUem?r9Y;RdPA)s`@!DkZ4qnU4Cx9N4AlCPPV0CPE$60Z>nF7jP z&Zh!Cbm=XS!?9K=P8}|)+-Ii8Yo+YWdne^3zeM;7aPq43E#yX1;3W4O<%U8*EX42Y z(F6WA3nS_uJN75?Mo8VXJ~ii02R|_nku~MYW{8Y6KLEG(Y)jw)2c|#Cv~R52Fmnxb zQgAk>jLAzcb~UpEHGAy#(QKo9e6*(K_Q5@J`Y2|5Vdp0|U;^xhiCs`rf@njWML>%g zo26n;41XVN`geD#YpAaZoK|wV5$>Lqagiem(q?K3y)ys4FuE>wU*MYAU`x|P{oM_? zrx%;d|9|Q6-#!LMokjRA-F1ASfUA9~0IU?E#S5GmWp`H33}0Ita-=_O_{WusZYJFT zm7cP@9`KI%>QVbAZrR`0P+vMsI6(<~@5DFw)XNh9JxuBtlWO^GB54Dn$`Yv;A(LB zyRJDCQ4}v_FXG~|iZ)`S(m2Qf)ge946RM)Ak_zpZO zl$0ShpA|@0NXR4{Kipbn=$;ZLb4wucSyjs7?j;^h00Wraf3uP0|ExrD$r+|gh$F2S_aOfes?(@9J&Y`zcOE7UBrD&-}pA8*JsIRo+ z&+L4-e){^enFhGuQRrEj;AW7J-*0IJ4k}DEy!1V(?7g&$%f?(y1n&L+BS`X$q601; z+wnM66%H&~np(;xoLR$XJDw!CwJ42jI+b&E(}>n)=c14(PB)-aOmOT!9wY?e2e(hy z45B|3nnw_9$!=TL$rA8!&$qaxKqK~@^XDilaS7`rMF`3$JR1G?#W?_pov^)eOzMtx5D^C+C=1?|eLhNA@0pPBZP8nf@YAW&!1VDW4T zJW=T69`Bcn)tSajMdori>M(VgRB&OeXKrGyf@}%%xqI6rq!ss&k>>WbOno+9BA{OqH}7+n6*OIr@j_+B3rIBGZ4w=|@DTe3VaELFSV;xWD2Egh}OLW+p$MSa+b3`%^s+2>59B= zgrWmwM!m!y%8>V1@n1*5>3q;lNQ*a1S-##nrcJQc^1!GZ zu+x<*h{5DT2VgpVBT$})Zp||nJcMLsW6C`4(%uiUCwqmkfP?zZANPT=TUOo&_J_ts z&|-Fq{v+!B08~4B>+_%0%YU5)${=bYUXvdZt#UZL7%L85Qtk30V5RT&sV-)zkF3k2 zo*TEiy&PegGlner%84WyUa3Nu#&Xa{2@*iZ0=?S_#crKmQwCpDC-?nO)8kxh=G(XK zId$YC$aYwhYEao!K*wdtSXQNsdUy_Om(VJJPc9FOiZx?FL|}sR6|)3n(KhhR^NyFStzZEJ$che_8WI{Ce;>r{3Z0irp$z z7qhSl8-@ox7T`YDkA7Ri{2WAVOg+3dc;dYz77CV<^}if}QdtiDw`G{1iNI7VK6P6z zLz^bUY;UFFz+yE@o@Bxg4n#lLKj94+fHzvBVI~jzBYwOvqi76&)Szk@+8HQgSWJ3E zpGxi6HW?Xud@ALXq__6!_&*myvb#Buha}_*)M)?z3<5QJFDIZ<++Pm@NY=)sd^0dd zh7**?qA7)g%|=Cb1-&6dwIL&|Cw|(#3;gs@*6jq+f0?#yTh0Sr2fZW%TgD#_RI~*s zu}Ka@D=Qk0dhfE(O1J4fi-ohM+!v%UpXv-9S>TsOai`dOBUl3p)XuSh?bf%R6ZVLY zu{!YsBMEXTckiQfiVvt+74z9ZR+jZ^4xVfmvBKLlBD#P6MGGsV5VJR|Elr_XUm1R> z*Ja^qZOy)d4T+XEF?#SmjrM*lyYnM!Ml>3|oSf{fL17PZ0%lgWR-NeMHe42!KM;M7 zsXt=A6<(rhRy|f+_;@J`$zWUM|5UoE0t~1}JJR3+CRVsP6}Yd&2<9KkiEnD>sun{S z>381a#~qhO{M%wa6){)a7tjIkshk;x1O_C#Aw#PyAw;3#n8c{Nf=>jiyJw64MgMCV zU~-oUBy^`8l%v^(Rq3=v5Y=I3T@CO2 z0Q^IWtGH|yuJso85bsjDy~p&*x1+`>ChG`Be$ zeu*H9=_CK7MAmXBxpiQRBJHC^+wn+Vd1Yn!^;s)Oh`QrMdcY@d~Hd_rvlZoIz|ga>{EK%-if z0DG`T-yKK74HLFc7xxx_bBzgOmSVh@m)BlU|H0=WPU5)az);{pVep$39O?w>%75$0 zu)not9yXMni&#^o7k4ed;0|~TI?Luc6bz^qiWAN?X%~e2>$vRf`m&}^Y^@-sD7PlX zZ8(&-B|#o;Q{g^6z5P}SiXfh))!yYAs2>~HPR@xrkd^asGYb-lz;uD@PWVYlRT{XC_!|oGEcN#YRzr+d^YH(Y3EIp};jAqVrG64g|M1XF8Z^rcwL~Bk9 zQu6=1^xcPB?GH0H@EnBQB>1CZXFseO`vxisq*DcQk3fzp2E7PZKCMl@Sq9`Iq*vB$%)uNba;QzcO)ad_zX4qyhbfzymznC>z)5|qMv z{yN{J?m#O<$&(9hu+wLC;lCz(H?ByB9SXty$30n{1hlogp>0?4{H4*?JS%*033Q^N zql`-rQJpbT3%-xUU3W(T(acVoRS)=Y+0rb^+Rg>L3I4}Nbh&@wHhh;e6G~V@ohegp z@C-RI-$q1>A~Y2Pz;dc7IYL4dlvjGcqSxwfg6rh3qL*WKlS8t{AVm!7BfCQWHjrF5 zffx0OznPy@-;q?%^JbgNlWnt@#p;mj0MA+^1=mm6%}u*MHo?N68pTOPVoe7zkPyo$hb%ZKZl7Uoq&|yGVGg$x>%-8qa9MB_8 zbRE>{Mbk#0U!X?S@H5CsL315$av8qNTPZO*GVt?2@yI*Fepzd@RC|;&tp;;K)SE(l zV|wV=VgRQY$WxX)aJwbPn(~JyF>HLo&uZkB{nNb=)rij#&3bc=lt#0tlmbQ-o&1jV zQ~cof1r+R$^2w5oYk&LX{0@W?-O=ab<838xv}Eb-M>cEYETf0n^(Jq;diCfnGnX5C zGqbYiLEyI84ataP^EG&Nj{i1<%~Xp&$DvE3kW*UiPP87)`#gIi;2YZ0Q)*Id<|xF6 zpq^AgGpXR@)BIuPN~5%v=h?=*`-iyX6m;St*9fQA@rNuu7fKhf^js=CB^uw0MRi=} z0@eXGtbs#OS`{xQwV>n(uEvRFXZW6b*0D3wVa-fTIzJScgQ^97WjY>)l*K2DbrHjZ zrIdg&D23s)GOLs@mS5$aohe}T)b)Av0xkQJyaL9aHnzqAWGl4G|50G`)5>`vfgJ@* zQBaQfm?jxp_W+kaYOq1@aOlsOzxYiUzvEWBTN^0* zs#HS762IioeAzFfuiQtrogvnV({n?M3p^_UEEefdd3IZ5HrDd>Zz+jD3WXzR0E(JhNg>x3e;*W{paCA7TX%A_Y zgrM;%xz3s`w`L6T1CCcZg!&S5h+jh_(>K*@vM0EHD5Xsy>_32`HhmeQVG#t_aQYe; z+?*99_L9x*#t!V~M~pq{|KNCx+lGw86SW80fyabR_V_uLi9iXJSec@nQjy-}n~|7; zR6KoNiS}q{_>hort!BbP5rVk5I1!?TW?u*Q zDBw)oas6`pMUeks1+Ij3P&iT>oC({Q`fz3gFRcLJ7c`Qlu&2pQEmfiWioJ?|EoC`j z9uizYW7qz_E-NZ{rCGMyr4R4L!R-zu&jH;rypX(ooC;V|Nc>sN@>j0A!}5z~l)RTQ z@?pNbjAT*N15?c*7$6$BS~PKZL1VO z(b+^#8M|c-dBs%l0U`(c`y9AovWV?wc8tJX2W!|tAK6fS#ZiW1!-+@odY{wZWfBh~ zu~g4!ZodfOT(hs1i>COHA(%}C>wxf6%;qo=rj^VR{rPVxYl5)7jo3GrCnPbOg@Th~>3Gx! z<@^#>oRBZiQrirA$+sh}i?ZjJQF*;{y}Q0K0ULSlX^yX*7;>YA2o7`fEepR`L~=q< z7$+cvd@Q2hATUTW;m)otqmQo|$4B|}@$z|nfOV_}1vCTD#D30!I$M`i4wjpdpJxMh ziH18|m|iG~7lb#*wH*?*=8eromwH84E#}g-YmRWW12-p*slrA*SW?aa@NFN)pN(4x zKVlNFIcKg3C*YbnT#nl@lphEi8kW0PiN%3v3u#1j+i#AeA~YZm)F4K%UXheM>Ioo= zz?MY7lk+0wYu|c2c|C!WRfi5Y6|+1pey3IGHygkDuL>cdefvIV^UjlR^zR2-e{hiz zsjsy6k|NxZU`)l{q(-$@{L-f3GXNC|ClW9YJZ20J=&*WpU@w}Xl8mk#kxOjd@SX3f zlTCrkOm+hSPrVqK0O{fp1P}wkk^7J70Sr0EcEPjEctQyZMiR>k_ER&yFG8<&%fk&i z6{W!Gj}7^Y9W%`*nStFlHM^*AXVEcD!~l!God_2@z`Fe(YzsamR>Q_v1;Yg6PQK5k zAnTiU0PWcpoKVX8lx?zJ955m4WJA0DfJc9HQNgHty`_Fz#q{MSkdEnSg zlZP@NlTzMh-f7KNXZf$fvOQBjGhtx1kz{XTZHgUz+Wa)^%$ABDUpj)XUfdlZ;|rEaq-vZSqF9bH6a?XO$TS1u8nm@ZiGMm+hmPEE8_ZW8?Qu^m?(!Vk6VP zsmw;#82U+0StYzu?q6zm*|O@X_thE)8qBwrm?gqaex>O>AiPPau|=F!NNnCzPK4=! z0kZ{cELY1YGo(piQ!!pjUxf~@fuRwOl#EYvq2h|aMvN0km>aBouZ(g3 z!#vl)J);E+972pm6#4_0RphRXIAx)V>;Kpq#V4OV-+`k>i299{&&}?zzHP?-psWpn z?S1#*N!iV98C>-#FYl`zAv5>!3sMqQk&0?grt?150ORg!1go6d)vhA&3{T_VZG7}^ z?VeS={vc08Lz%9iHGxPXlZ9n!>eE6DJ!hwM8F5mp7VrTHmnAq7T4+OMGWq>i;BA|m z(0})<7Eh&Lq`r6#h)70bW4`}akod7|7Py<0copskw0Iv81``bC#p~d95Vsx0bw{3x zfy}AR+Z1kf?@WD=3~?fw4!$REhp(3-uI}LAs1D2GK<8I+z?F`KvGi*FldJ!cXwVb| zXAZ1~g~NN#6=Zbv%Z9mggtcBGvYe6N)3veO<1P8*=pES0uq%qg#p23DM8Rt^X7oYfFvk+5t#PIJm`#F)_HL3ZbGcYpJhSQXqA9O1Z1QOK9uz^~$1cI^N*iug7 z9^XU~dX$viUAQDx#hU@_ou8 z35ffT#YnO555^Yg2nEB>i)vxfw1We)S%S#zHX%hBLgidC0WbM-IkNMIHSS#c8|&K; zbNj)~ppz$3cMCix;rq@s8<*nlRX-3$Qf%=&W5#;Hl?ym)UQS}jw8#cFG+5KlA7F~32yiFcxH+b4N#_Fof|i*B>kh^`@}^+ zce72%3I9Ns7Tc_PhK+`FPYw3N{Z6+aAg2a!r_8p`;0UkWzf!DZeAozTpTU;+V?E&! z!lz%am{|ftursy~LWNI+ncGkP1g`5gGm~+Xpv>A2j9=jB?({>66eNwwHLn4iiL6Xc zOrfMZJ1Qz7M^tosEa2{gkc6DLGi%owOy?#&Z=LgJ=LboXfA z!R+CVWp2~M$BFR-`b6arXeN+hhPxd=5oD*X4B=k6OB~*0lp@8KrVO_9jtEme$33_J zN7Js$^sW^T^t@=vzRN5-VD$W5-G5$3ht>)zIUSt1dcE?yrR6w(^#O`;rh!%;m@$Bj z%3v`d^q;Vjz|+o9e0oksZH8=m#LrASrNJiya13(kZ{TgA9@>XQOzk+u?G8KN?~BX(-MVhLHKzL9CJo7# zk!iF;pZ7IIfg>A3%0wEOH<}jl@nFTVtC6W64~kmH`{l1uP9&=+gMMxOXPvZ3ZbsUA z+#Z1@D$H2)9Er<7Xk>G?qs|z5tINJ_ZSWmL<+3;(Zs9c`%_Jxc&s%q{pT>I^ko?8vFzi z>2TP2X%7SbAirrUF#hma!UI?bfIGqoRM~;0JBt^<0Mp&wla}06lM^#vdR=fxTkAQW z9jE-zRk>?CsP|kE{9Dt_UDl~8ysYw17*wQ>7Au?bUAcjPZ4>$$+o5g%NJGIA>Gagh zyC2{gndcwOvXcxf z^ehv6uMGGIoW6C^hzM`0`+!#%!4*5}n%}s|(u?nh#CC<7Lal$$V<-gkN!TxZNWi># z~=Rb7HqF&(!Jrl}s!E@6IZWR*L zEVfy%DQb#?jJnsE3+u$U{<9k$rh$dpX>AbaIXC{dkZ5gU&8b-;E+TT2Q_F_i*lAKt z?*lWYNfcd=`r2tL2|wb^y%GEB*TUIN6)SLhU~j6xwS9)}$&a!|%st>Uuww3m1cd!? zj50DX+puB7-hI#~z;q2&FWt8Sh}5~9DY!%rwgI!QfQVb~zg}iaK&99AM8TZGUYCk; z=W?U6-tI>%Hs!|9Ga>MyoyngsoW1<#d7WS9N#D_E3+2*b?}Wg~oN@D^;!xbEei;vD zvM_KKaQxsbR46xWF`#Ze@O3x)OM<{+`xdZLvx0fEz<k7V((Ndq8eEA0paz%4 zZx+{t=kTM_joa2wX#uO9YfXAX90-cAN+M85k&~Cxj%H86H2Z4Kc>>TJA5dWN5dB>0 z|3}t$z*G5!kDoj2oyc~RWG9i4ag~vZ$j&TT$!OT?reTJLWM7nQiYW6cqe7IOSt1!B zd*1(fufD(E@ALVePu=^zulK(1InQ~{^E~I7^#Io%{y&o|+zwy!cGOK(%IT)>gIr=} zUzymB4@$v!FHAYo)-Ju-#WRs^B2@Hi&(TY>x=nN(90M{uE<;FO;i%S%y6*uz83GaNYzTrV2+<&lCogu=D`U%KdwC}-dAZ`( zJD1gw`B$2U>IBW-9%F3Xj+aTEk+&qx?t5t`vna5(2UJ5LYMA+^sqzWH1GRzFXas(7 zb!mqYG~I2(9``6Ki=y_Eaz`%G+*x+g3{tE}-_z9fM}ZOK zO)XATiw$y^7+^J#pR=Mg7Sskh@`yR&lNhe_GnYEq^ih3E@9a<;CG4sDb=s5&OHg{> z*Q!@Vpu(3YiPeO9tkTB_HLj?SZz&E+p#seq@JB&-#6QU$Vf#F%&qBLuee7u@|B5~o zlZ@ria8p_Bqyf$GqrBlvC_6?(WI}cD?)#OXmO7Y{?lEGu=|3B>`qy`kSjR8Ul7z$N zp(X{E^!_m1X&@%i^?FfPgHb)W2}RMZJN6mhy1{$_?&qikZU&8U+OoRt^r$$<9Yn$<5d4wM{M; zC!BD0qLyuB`u3ez#Aa+PgEc_B&RM~=Yx&97OOqUo44*p2fUNr2S)+5U3F zQ}C~V8I}{kP@792$KZx)M!6!8?xaZm7-}Zk8vvxfh7@O%fMQKPBm=A@kHFh#@PG)P zkpV?MJ``Km&yp$_^{%0T*W!|~<_*T~jl);A`G`XC6D|IY_fp8?e*KM==f{qm`^|v? zq2>9Dy8c)b6s#i%!D-B9pmFhoLO&fKxwG6zuYNg@h1zrb370|oqkT^MdVYD-JWz2O zsyppDxDWabQ}fMK5m0+fZa47+t{Z65i@hFsResI#>f3|!*JzyKMlx^Sq&_lz%1K%a`5@xOuLp+D&@QEsc$4CCIZpZVsr)>rM&XUvB zCA+)UJhI;;=pT~$eY5hd63j%==@NC3%O&gAEfx$YhjjNX;ip?>gHQwNS^>(nhx0O9 z3+fsILgsL<^nzn2F%a2c_6ZEQ_mdq`g&v+mk9u#ipwL05UqQPZD~&Au`M4v?wXY9C znulYa9D`|f*Sg#}ktev4;71C)T==@D{-o_|bxk{%Q~rMA$dr0gVmLJ8qEFO|OT2Xq z*rR>cW8tRl%?#Y5M_R3tDr(2`O$@a-5V+!5S?e{=o2na_xz>YJ6Z*rM%epRxCCys^#OXCvdc_hHmD_(U(|(vK-Z0FRX^4$2crU5N#1ZfV_scyp3`+X;PAZEg05|o;I<8hE2 zq@kf-jbmd%DMLeEkKR{$5+2YFJE?D^t3Rl*xS?1TFqxfOaAHGT z>2j1tTcehqmX_8wmx#$%S`JkG)>}`XFKj%##LrmW6`buuqmgLI()-&uC z|D>%ox#c`)kjdSXHVOA!-rWOsN!V&oV3zn-VqGUKe2>OMiiQH>u!Z%}pV$N73*-$3 zU?XKl^W<+I$k0Y$4G);g6z=mm;GTbrVAYewjmFo z4dC_)Tx$?g2)N;XoDmXRE=A8abc@!XNT{oT*eu`Q?^JA#k$f`qD&4^XPk7TKa~6g! z{62Udk`|um&zLAS{IO{#3#g&?Y-4J$!^y7tii_GImI-sR`T z#&_gTo$F+Ol9%^wYtC%E_OSiuDMJ$uW7Jyu$ITt~aTZx{L-`ZT?r9-Au{d;NqI>*- z12FhibSgfrG5b6nZq;g{fBV>bQMJ@(qG&>C*yfpHmqQP)HfP5?5LN9{R5j}`0oE2{jB-FFV_;5(mX+K0 z)3u$#AM5DZNux5Q`EZ_EpPqCQpU@RcD?DGPQWg--AN)IewmrOOPiOeSY>lf|9SjV^ z#ZLNnz~7`mjNrDF@lXI_gT43r!XjmHp1?r4SX zz|2BT{d?mIO2hhp3(5=7$}9un?>0wiB3-ufr!REPN$LJIsM$C`$Hb<~$##x(Qrlk> zk1^`zr#=?Ks=%ts2+mird*U!)jy6ik2G~tz=H5Nc#bP{OWErh}Z0DNcC8p2xx<{?X z7HuVQ{&9Ch=~aIF<5^u^avWQ)ryZw}+ZQf{ZAkcLiLy;+hcaa?t*!eh@P#1*b9Tta zVm8WcE8kTss)CrxXvMyAP!hlHz;=yiued48sdH}g6S%NNnvCtGGo%Dsuu7eOO96Zs zAq6woUESh-bI@0z>w5=nu3szmtw=&9;9E$>V0=2wD%qzzvU6xaflshT ze}&h2r=XZ0=9oCcjaQT&=O%v}wlj@LbH z4%vPZvv&|wj2G}6<#Ilt~^<~UkP#ZW;GJ}%Nb_kQ}odfHd5 zJ<}`+hd4d_e2)zc{#wg6WNefA=)SReyf6ypJuPv=j zeQy`~X1P(_c>d7S>;6MoHMZ4`U#MOfo_G=A?w^)r#!{U4RPlc0Z;r_P9oLwZ4PLtP zn~mMe$BnI))1CIqlPd2sa!9Dp$h?`vW?08 zGEx}%Y8ka)^<(_oPN&DE1X1dDMcZFbb9lvb(%Ma1X~{dZ(iJqPNmvi;p~GiKWDF}O zOxE0a|6YB#enacb`)# z>D8-ZM+idtlw3All`P^xcc}~B8V^nQ&L6&exc~A-ke4gDz?HmdQ8sJ6-+~1zH?Mf$ z?a@M|)f{Gq=(lN0Qa0atwchL(usSv7E8F;9)uuAx(y&8B=JDL%(o+hysqaEDmqnh` zn%oi0eQJ3%g`jbkbGCij?&U{bkTpu($h7b?>{=-5>(Sg{qazhdf=nMuXcsB7k7BQak(gqu*9;NI_c3@Dvyxe-shQ z8l~HCVO}rB<+iyHkHsBE1CB5&JC|x{MMBg0>B}9lU;A-lp5yLbxJ^!Zg^=g2Ze;bk z-}ty_Zs)1zYeIbS0^&W#FWwF~IVWvUomFgHz>Yn+m@94Yaz{s8O<(A#Jj05XgiX7~ zQmQ8CoBW9jel8TOu@{)9(Z)EPFHnf!Bk5DOCkxd{@WjnL-YI=L!J;9E=I;{JQu{Cw zjFx*x!>{YHyd-?fd-AylqPJuXkMBS?s2h^`&^1*Ow3cgM3vf=<%Gp`SIvmQvgCt* zJKY^ropWBj54~9_-D8_HEg24Uo+;gWRo-x7+@Eu?Wd%F*^k=i)AUV2d$mPfH`x!Yrh&Q;kDGU=-IM_v=oJIqLfqqTiAzhI>Q z5z1mB)z*bwbvTGg9}?5Y4K@U-|seM@b$;=yOKh!`cDO9qTSy; zaf{Kj+jj1om!3RQ6c{)@MxEUGyAKqctiH>K7muxwXlgnRbKVLitX8^*UzY2AA~x=S~IulHUT zRW8ZjDjQ>PNYJfBXq<#o@|4PSX>8*z+Ect&aAwD5VWDa@k^zbx;-kQ@%W z4@--Wv)?ye;N>ZFWc|pqe9QqoUz%?0ZE}R6BzNXV28O@sb&hq*#|&!Cjh`JmBd0$P zD-0~&_8(Ye-z4}w^0GQYKb36cq`iVFva|fi4QvRj%7xDSdSKq4DpRFnQF7o(QPo@J1=;Tn_^F1i%N-l$Ihbhu z)^%LocG!d%=FyrzpPz)Pq&^|z5JzxIo(ru3%OfFc*D0YR;cr%7$=^-aI2*+%a-~DI zBlSthrL(HsD*|m+tC$Keb?<$_7Y%OEx*z>8y-6cRS_?bH;Xw1}R@g{9o87&)@;%4c zSNFh_H4(QWKchJ7lUtutU)MU((l3rNK7FecYskt$FUu^HlRopk|5k;;5vPeZTscw&Pl$XCj_^Ew)PQ%OmcYnYpn16ZniW9JCi#39!Qu?>!0)9YW z?vdl6Q6Lk~ri^_Is_FKQ~wzTcCEnq;EWOuZh z#*PS8)ux=Vw{<^R^{}xl*i`Z!TNhnMSj)V2dcyPiPj7A04PI^>qPm5W8a|xyW2{r4 z<1V%Kt85XEUfCZi85opZoyDO;3(8tcr-U%x)L+zdc~q-(j~*vndD>w)cvdXzAUJCJ zxpz`A$1GA2x~b?!t{$c8w!#3HU*a*9*37PGEC0WV9{2MO9U%A}VD_v#b?`m&IU9){ z`@N2w48mX685?}w$4aOj5eoa2yPUanI1Y>R`jT>RmcHXpmSD3h_!C`GcC~G+poR*_ z{eHT@3xZ457t8QQhKnRColhtID{E(r2i$Mgewv+qf8(?0X8rfTkAclW0497RahMyKC%@#FAVRjCe8 zTjCK3`Q)FPWp;1O+3DxYzM8LQ4@Hi4?T6K%q$0R9FaJgc?)mr9(6^nGI(8urUB9EYQu_uR`6f(? zrZUr86`J2K+*IQ~*F1FHIg0PPp+eC1?B#+_kB#K^X>|o}FDsl&I7uVwGEiSjXY=i{ z{{^i^sqB|xX;E%Q`;;14+uGnhItci(;9avD8yiE)xGtHid3gh;ld?O786MpQE`87%iVpkw1OX1`7u24zzFDL@>d6T85qCLnlGQy(m~KHi1E3coU#;kJ_OB`z@>B%I}*+?ad<| z`)UL1c)|RF2-s2wc4`2;M&4T`j&upOU87t3gd;SQ!^S)%hkOxWR4&1eO@mEEJ-_=G zGrU6L-h5i_{b|FT9~gT}ikcz;wJ?RVU_J)_vtp=QFPs)RClv&{B|%O6zs5S`(+Tyj zlqRtIMKB#sCqso0G&=pCWu3oP4l*e4z2@bX{lh%1f z<8+4*A0w~Z(xp?}YBR$p1HB60aLH$3QFk3myk-rxkY9dN{WiDv{dvQnm`r*TU+tTSgprRM%>Sivp!_W-Dx?J}HXyu-vYUy9x2cF=_yzyru5EP^dmSpi z>e<%A8(f)h8(7O-pfw3X0VW;?aQLixBxqAZR+b11TtL7ABNd2;FtoBjRP9fX%~_qQ z>o=Dg+^2&u2D$_U8Yz`!*%J zXTthsmaYbrbX#5yYnKosB12S?gKfU6yvkcRF>{NwFOtnB-G~p%OQYIh8jT1 zXknjW-V+1{aKtdy>;@C9EQ~Z8EepSH_G9j2>9^Cj=mz(JQJBns&7FeilnL&*KLS;) zpt|N?|3DfbLH#yVX1xP+$ae_@3#*o~mT}=g!GJpzG+?p9LJCf`E0KqR!PV3ISEDFP zrDJ+o6@>p0Y}ZRtreI13sxW)vZa1Izh@ODtDgUFp?AWO()sQV`92cM zLq$sunoQti+nF%2UKRyGOVz)&hC*tCU+fI1tf(B6Cd$ER8)|nQl&QfPhWhlU&{1j6lyi0@>&7qHuAImmA^1PFOf%m7D*v(O#?0i; z18kAnE)gJe6N-##LkqGd$X)-_9(;QR^-@SHtejIyIDs~R%RAM*b#wmK zR>)?}*u?kldlsL0Q(PW=fF$+;oNXi!x(tpR8nM}-TLKjbKZXQGBTF5+@~Lv;HImwFCD5}$L<%SaGHtIcaBqjXJ-K^ zeBpl-Ud0L$TI9C>X~OqDJMNyi1<{L%Q4W``et?T=CqXZ&oU0rcLf-0eI7~W?Rnob! z-m^IxEC_u%DPGBNf%eG3j6Lv06w*dbA#G?v9TGG&Z%l*brpLE!CXM`JNn2Un+HAPt zySc~<{d81BP@|QM|Iv9=_N+X7Ek5GnZa*NQgpG9LgEnOVlheGE`65-L0A9S!u}J8r zwGz1%mZQncjfC$QMU(avMRi{PL!@8^pn18OL$`al+ZAwWWkZnC9enQ04Nqt! zqv#L-30j1Zh6H7>!S6VqQdw@OD&Sd!=_=Xh$XsO3Me<%U^D0@Gj3Ns>wfil zdWkX>@S#fjkH(Ra|8Eo4UHlg|l(W6caaIF0oRG>g<>b3(YNrk(zWO}y0P1~NJ?2#c zWG*@X2u26=2BQSa7R!w$I_l^JeVsUFcrxJ~iIjtSa}LZOp#yc| zpp`<+;Ja1)p23+Q)d1o@xoAFlKV_68J?M5MotrO|x~D?FFRgJ;lDG(H01UNd`)}>QP9o|Cm|Z$T~~ancD4G6c3m;fhl-Ucy3s40a-A> zS#Awh8-=b%XJR3>L7D-I1U+jY?_AfT;K1Y|NR++CuSANLhumF>5X~WGUip;qUhlI* z;H0OA*Q&N}Q>oRo4Ae~;JWyL(Dl?=E<#<+8_Q>m_;=nM7BdoaRQY7-olB4t=yu2-? zH7H00(kg;Ohc*8p+CS3G+P!~HKoGeZ7(cairK9|naPjTd88pCfLAkLuEVaCEE`;!x zTt|w@Zz&dz>!cREO?62MmR>;o0-?a*48?{2UvRYMfB`lIbcm?j@#^r}$;eL+wOgbk^W>~q?{n}2uQ0gf4Dnk7Ce+O+8I&9Kp+l7t+MoU zX@1b%gKz?PuPva5c?gL#fK|m%Z^9O$2_W5ydR^s>A_g{WTwtOM$dko5_$4Ba!8Ta& z>VE?ckqaH8-^+J_GFfJOnau#~gz>ZN?+Yugo1aS`Ii6A5W~IxO?OZ$f!@&M&s9AMo*3 zix971ii-ba`2?gtKqcW7G7MNbVGv;%06;%@;#84P_^IQ8EYlIN_OOu1q+g>EzVL|N zo%VY)*0$DL7wKNy5rLd7ySHyAoC3Agc6yLA*i_sN>jWVe%t@Eks!X^k4fZFQbFZ(~})izydP#kH?>*g@SU18^9nv8USm$ z8bFbg@IK*V`@JrQuvo+bxI_jp4TXHIOBn?Ly89hcM_C6 z^<3%GN^eMucF=RkV_&nP>>2|t&>(;bT!C*R!Fhyj(!qx!On?j1d=&YDu!Ny71p_Em z5Dl>$8WwkVyqF^42@Vi$t~9FYbDZvDguxUiYxp_uAwa`-|EZ)QUP-R|C|rzq*F(ax zCuc@e965sE2!M|z-0QH`+&%yIN&LC})&lw@fwZt$8(L2Dg~ho;C1bzB-#(OS{lX^$ zD~ha+gwTLf|JXqZBm!3ffIJY{Hv0eLfp7A}S?_}$EF3Uu@6LsUY?M<1@=1T7*^@epat>2$Wwq$yQNupg zI^sF+Kc#Q8XB1b~KbN4>sy~&rzU~zK&aFZffZ~4yVpqz7REk0%;9d%B`LXT=8zTrR zsOaG1GEhtAz2u=6=g#S?_D}bYsI$bN24INPLlAcm5E)@XS~%{>t69Nx3rF zv*Kez%)wDkMk${}96^(znVTLahDnt+p63@JCyo$mHxl=n%0`AhaF64le&`G}D!pMzN)psa_pn>8;zn78Hf!z;x8+OWp;+M?bMcc*vg>oV7E#yx7BY}{;ysQhrQ<#l~ zT+>nN_wV4wtnYE;CM7lj^i990K#6jyCqF7Mp!^VP@G>fQ_u(MsRT5IE^#8Q_OK>7< zeeRdCUH05uU*9M!HkC*Wmrt^6+T1RW#)2H^E{jy5Btd}?21@U8$xJ2~TmZcgu~gtB zC9@n2vbj=Ivyt-Y2;B#ITkQAcf=lbHu_09f*(2zNdz9)Gs0 z#Id{j1KB$>>k*Ic@7Pf#U`h;P$ZR_3pDVJTxTP?OsAb5p#06X_g*_aKY_yaH{?&!?W8H_jwxW@m7?gljV}jp@x3Eb zC?=7HfyDlK=wg*70&zSH`nR8n3N~il#Tev;@an_rZ?2N?fPkbYU=jBvvyRar&q3r6;ES2l5EU+LOpp}8_5nuM!O#VQY0JPB zB(`9$GX@{fY~B60!A!yt?z-y(iWbRLaBTvRzxaA(-Ixjp4ft&)i&MzWXki+@QP=1n z-bHN)&cW@}|7nEKkKs}VFDTEPCktM+V3nX)j0Tu2;2iVx0@6A*f4Bk0TUUKd1zH4F$i|MF5 zMA8}kuV!@xu5_f^6yce0&vbti5$WcVKsKd2R)^t^MJ!KP!1}?;h`W)7H5 z|5yzUFAeSnp5gEK1+6}-grVhWI;n?5L`i>d#1d*3Cp%8zAFyiO2>9s#+LQ{=!T=rw zFo+f!YUFlxG@8i>t=#c|YAJ0*0XuDN6+O4(!gW359^*ZQ*d5lUWrsEJ%NEqx?oKo^tnQz z=sfJmX!`*=_+@zz?$`eT0B$J}!3Ton(Sc}6zeaapA}QF`+Tp1VhsI0aZ`K|PFdP6i z32Hu>)xEktQa-SL`6Mu~o*$6%KZ*Qk=34f>_k2fT>LLD#>Bp4aH>iDbfIuUzpN7B# z53n76(^R+zk^n zhr%clu0=^(R7MAbHh>0ZbOa*@MUQI9WsAI`+xFtm*m{+bhakOGeN4Mx%A>re z_o*^zYU#l+Jy_hGwi99s8xF9GqyZ@erpOU$0{MDTdPfUBnc&LB{}4F``cQrg;$KHf z*DNYO*}lPCRKzmQUTm;@qajs48>_+5a(?@da|LIU3(X795ekKMG6|tyFfgou z6^0%fw0-}zw!4GLk?%ZU*hdBE6%CMpb03k(_Y0|8Sjn2^M!7u^rxG*YYWl6TO~Ocq ze;e3cXdxP4=#HDu1_RAw_d`8S9)K#bl00f!*}a6?>baZipComM<=4m#_1>duC=%q# z9vHaP2%*T(8^(VjUq~Z9-`+h)zr2h8YgxPCA&gSQavQ4n=1Z4#H zs=8zSJ-U*Pr9uK87XYfxH|e#&5q^i`Dh?2 zibkVJmZiCm+YeCw2nZLwh(O?wn*@i|`^kXr6-!&yPcFh4Li>kD&pU@gZo&GWMgyw< zA@hL(SqH54oF|Rs5CU}o?pI>zOPsNu`p|}m&57sFNt%wSc>O76gHjV$6hM8+$}7*+p&G_wS{hi6-j9g8Soujk1{1SkV{}OfQ){O zis!qItggLS6ah8eHJ3NT!Akk7T`XW3Wq_8CLvCLf=sRW|$W+p)`@&BXzfy;1z2)od z>+9nJczMVo5kAyM(c(c#9WvB#X1H$|jk-$&qak=Gs4rcH3JfrL#W?+sPu|Gyov3oP zZ;IvXTqXR#ml}qFJl#b(aOubIL-5tCwYLm#lrF#zOy6a9%CWD}buP+*)|0EqHx7xM zbv`kx`-(c^c_I0Ult@g3{SO{ZZjIcy6ZBq^SsAn(=QB)mvZivBnOj=Uu$izG8!3fI zT5FnMwczxyv$H4kS}g_y-=U9>*LwF|2Ks_pJiGWu2yxk^4GivihGl40jyd`4+qq*= zIpU)5l?0+Vo2z$_H1Y(4{~?6{U;mi_MZXv7JUHDLUXjs%$;^|XPR6qJV)IRL=T7X= zgR}ZCnFXRY2BF2TppFxYDw#CI{b1A@52bgXgXU0LX`*cPo^pCWe9c?auqDx?M#bMJ z0Op@!2~hIJfX~AJAqD=!KlKL!3g-KQ$0)S9+wLYh|;znb|2%lSrYm`aKf&HHjZXAU2M)dP$>^rx4Va z*O{aF-_>&WWYF>(Pl*F3-`KJC;~LQi-{s{&KTK!J*1ZZ<^o6lzPnJ|U+j{KxJzP`dxqg$ee7a0 zpv!-=HUO{C0{koYqJc}wPTg~w0{$yT8(lPjHsIcJP7HE?&O66%iMC(%TY7i`T4fax zmUMa?5eMO5V3ur%^&lF5|4G@_U=59-8`MVsbK8HjqDg^bDrR1r1@8P;qqS%+$ShwQ zwsBrCMaPTzj=4y_RsQw)EehoQMgdxB$X#Inxa+Ev5hF3dHsLEP2>%#LM9sU>LH0~M zghm7u?x9TcS~~6SU~J4fTO$gp4@S?zZvO#}o) zOD^urNSAtWr~Y~)f5N9*LE}x~>GQ&x_jazUvuRmrvNfl8zW&t4oLq@A6FS zw>K=i@+SOJWG=n9Vn55yU`poIO*wPc3xcmFmebD3{)e^T^rh)pg?Fe)IvHT9J|=}n z)vgpA-BWP!hx#;gPJPxv@kHX@n^_L1q10qJO)bv<7hND>*bDUw4`Emj-ekWs*a{$M z9U!D(X=R1+i9eLyzI`e)oUivwBg~pW4FWkppa_g}!c&&%s2ehRq#5vip?urhoi5~p ztR0YCM8gRPkVgGuDEIaWLDh&R+ur)worQHMhoQ7|!Hi_vh+xR@I~yHrsfvON9>way z-Px{1RwpG}-;hjbm_+3@0XMq|J~1$!0LA_FJ(IWI0qQl-8|? znAg***Yo}nk8m^r?!jJT?Fz75q&4MuNNiWGQqjwb1`nUBGZU!E5#B3yMb3W7eQwqo zTD1RLKL4}(BO+1HIyBC-K(kxJ0LU045HW#n2F@UU`@x7!{|x!XM(I?)#fZ}g$s3IN z!1@vtxekSpvw83T=B2DdsfB{O@G5L=)`G@(;mxN|?5 z+@nfQON^vd)HAYYKlJlG!)Ab(k%aVhbSlpiKok&eS%Rwx2S!W21nkUYWg4#>QUnJ2 zrZMs;Dv0htMp}Qw;ub@w0b}Fwg9Zr1pz5n+$$Im(@={m(m_6ByDVpV2Ln29TN6w1(DyMv}r+ypb6e2>ky=^agUh(So(;qNcZe zuxI0e+3ocAv1>)cu8R9|bHaHqc(sg6(O-$oA>9lV!NqGbPfK0HQ8b2<8HN>sGb z-iQQ;b^8&IMW8sjg$lVkq8uI)&yY;@?-=A8Gl^Hfxc&Jm8rE=x#xldylG?(g3)Od2})m32Z2Jw z^vPZ(_=$&e0DkBmrI6rJsu<;Wd@?l9gF_!lJOFPpLr@M@=Z5-NRw~xLrOij(&%xJ< z8o=Dl-bO*`^;4zcX}EXX1qzLHD5@_>M%OOnBR{zEIOko`>|)E~$gf#&5*lCCHlKik zFA@mbS-3Fih`}B?n+K*d6IWqSJ0i`(()OIq|Mq7Y?Dmm(+M@H^4xT zFo;21JcoB2pa=lL4-U@Ftrb^?|Zn+m<1gp&O|>s zY2X1PFfhPkHSu8id_wz~hp!1qRr9DoU@^@o+1#u{MSwOZngS{Y^ed@}PL78!&U`qZ zNfyhVI|mZ-M39AuWD>S3$mj~G{g1(8z{r6t7@qwRQtYmSZ|=c3UFZ!$U=%D&_q`gp z(tm$vE2ko0J8?AsuyoI_{<-rwoL%Y^bcM(U_zFp7{pZG`DHv+J9W@(pRr*?npdHFC zT8YqerD~IUl%SE%6PNI}g#H2sQkw39JqQ(RN?{59K!vQ*zDDStbJ(>twk5-;Fjj~+ z%0XVxwzlBP1hv~A==@e#*e~a0pwZZ-r=@W%ooUlt=c8cyJ+}e%ym76p*hq2bOO~_F zj7$QVTGtE~M<+tZ#&B+u&w0BI9WJ!yE6@CTIuTHtcgQv|DT$saDh_f0QF#83E)Zq} zwlCDQ`vyq8xiqeajeDpD_cw2E3EsX_621<_0vLhG1AOxwyI}A-HQaetV2>zQ(_^`LaPP_WH=nO4A6xJt>!=T% zB&|T90H#6!1bRT9BuB$YfMbW)rcHn=(0YTiBA;a>x!W^>B$zcR<~hRoGJa1pBE%hG zejJ7dtZj=bo1bAP3@&?-%3POg4;aoKn$SfVju%QA0^*q8P8Z}BgwQt{oMJ~S^dIze zUkRCvfcI~zb#UYf!HUH&CH>iGo?}xFxYFx#??^|HU82x9BB0F+f5+ETS)4*e4c1j} zEaQ0WU=-iH(q+Vv1bLbx2esayy{p~Z* zV`~Pwm!O0TX-9rWAo&o?wRCi~FWZszV73Z+=w87Dqc*T) zC28r)PFKk|=g98~+OcPc0K8#hk%Ogn)}c*?p)0zbQ#gaN?`XV@6TJEpX&YUcZu z7&6!WJO>7bSD*p+_pSizcrrHx1(pb_kd$L-z@&Jq2pFZ(z}Si6w8C8DsOUb74tbJQ z*NZ*XgLXVFERXgb!NWw$;3|sn`Z-|_YZO(qk}POsGLMG_%1gfKv+d}w1enJc5R7Bw zN-i8QIUxVQLK(4X66Bsv8qp%D6`oy@H(}j_WyU{;*M%c9@015{i9avvm5NE1(F9;`y& z5#oIcawDjf%k7teRa;p3Ks5!|={|(=;BNc*%MT9BO__S&etFu+?>w!$&k*wY^X$U+ z(Tmf>>a=(XJ^tuFci_J2YJTD9&eRO)_Pl-pP`^e zubJ?Gc%7B*PIBR(aSRk;0A8`lWJ)WP&6Elgec3;K`R+kJ89OHGcfR##E*Z$3%M%hY z(J&fn?TAeF{@Py;8BS`L)TA7%n-zJ!H#9LZoK7U1Oa45YKo6sAZ5`U7T2Y%lC8h9n zr)t9Z^*S4-{G!uZ7df#{o6@I*bVSSisNL`z;?7*Q7g7c(A{32qlp-+c4YDbN9rN*$6&3KWUJeo((i- zmrm53|6!4MsqIQUHb;C@lDJ>!R4XZ>z|+Fcp1wL=N1@S4c~9$u>zM)f#&7PYG3T=< zWDVqs@+jMUC& z*?5`)+Oucb+hSRm9|@O4V=)cqmd`4##iC|Y0sh4}tiJ^56OdWL5K^f;0ONP8b)6&m zX~@A-%7z_s{K8M=F>(#qb0qeK=k`;l7@Vmczkj^Lr6q`-{(?ramI@K(7isXVps5Wz z+EX1L6qF;UBouk#F1QH?mGw7l>xR_tBD;CPpCY+erbFncUb+^bO&`ZZWXkD3e<_pK=7@%SvCzZ0aneM;%`sma51jDP0kAp1$}{RgXUBTeNL+7L%gt z_ZCiGYft7>CBsXtoLBI^$;Yi|#6id#U!=yvN~oaofDA$A!Y0By{Y0Ux5Lc(HGT?yJBg|R)8un68PQBT z9WBL^*1>d7d}g9eJO3Vsg_s>K3@=DB$f!AgsU7U{XzctGbvF_3TQv9Ga?8IcW?YEI z;Ip9rOEafsOPCz2_4#}L)bR`Ij#tyLW6{6d-KJ{N9Jn#M!&mNvy=mz)sy$ouJ16J@ z%d*HXG)XtAI`VL}s|#5Av(a@(+WJz4Qox6x7;|0S{m%QwgWh_-M{})MGI`fKogo^n zydUi(61FaOu=B94EW|q>Cww{c>YP$7F1c@GDv_GC{~Wd66I4m;Irc^Zw_Jn?3W{jK z-6!=!=bM<(G5Mp(-_1g=_RB6*7UhYTV_vXPwHwZuTs?HrQ~P^JPaxUbK zCW79ZTeoutjA!}&WWbuSKb?+j>+!^`eUb@Qni4Ofvv1uN`!xLZ32L6#>CfKOn1=bm z6}RLAP5K>eL5}`iM#i*%T4#doe2ngDgD%GjDTjI@+f+slnkeb@$BnwR^@r=*bI2bG z1xl{ef}QcB5w}=V^_nEt-1}nQs!dMbMHz5Zk(BN(gc{2Aef%AguvOvpYpO+^qprJT zWYxU-x#jkH@82cPitOW|M>RiQ|HhYVJW-pLE^lj67s(wX(0CwbNd z!LeO9`icq~)0bO5YKLfPI?js!2_y5KZnR2+{xN-B>=&1IPS9wc*N^oND&V`z2AVkr ze~k94o@Y|c!oJ>q%V+OLIA8JWa?QYf4H}lotiq+zZ#1KCmgs3D9tvl;@aDbsURDGj z-X#zCQz<&%4mL>%kT9=EP0L!#k?Nu1D-}F{hb^_97} z3UdYvsO^4~c8hof1U?eH__F6K)2tjdo;qhQGgYOQ@I$VC+9UQ>sUcGi_$H3dk+ORW`UR@CLDU(>W|>RT%X!f_uLQwGce=947w;*$(x*axHx)G1Nl3;ceL+57w2 z#>}qGT|W-$d=2dBYq`PVZT(9-o_phm{Hx|T=DOmK(c)DusU6yyG40umXIN7XD4x5e zdep!2p}t*kLtp^9J&hTpjlb6q)p6oP%?8#hynW$L%M@B9i*L*@u**F=&lo2%YULox?X>#&irDk<+hjF+vu-zFKW*QrzVz~X&8eK(+&^k+agOx{uodnwq}rWo00kY zc4_N?3H9Nir;c1HNo(v|+}9d@%hp)k1bnh<_J+${yoY1B2^v!gh3|6}jzv-9eO3KN zjuggr$AG}pKsJ}4ly6e^0#m2QPfgqVRNlUoQY)Y{{7JkAe0s~NZ3-!Y-R<|%CRH7QzR;A3KDj-r7`vb399zKs<^*)m%XbMkl5$9M=^AksshN#wLAACnC%MHQ{3E z<)AD7kE}O=hwA+v$DbK9_O)z@Oxk1#AuVDQktjmQ8Y*oliOO=*J4B_DQi_Q}_7$-V9HpR3;kINw`yMq{1V+Uy3O8Swo_!Xp3UdE>h#_6$8R-JsYjbbIGf4v#O!+G!mA z`+&)*iQca|NJUL@Z5Xu0RrW~aU&hmJ?KVMhYO8paOjycwCi)w2!R@4jL?Z~55c z2U}^pjSIMtsvxRKAoJ`8`R9P8zMV&qtU*S5?J^RgN`(nH zNsuB+o{nh`^LhX2yrU~B{ohT{6N2&&)El_Z280m0lbvT;p0APm5I^H7I9uk&#z_&B z0aZMS0`$!s^zA2X!hB`GR9e7Wvn6l6_Za~MqJyfhM+hamh^GrBv-Kteuf zA^F9_ldq>Xb|srwS>akS-a{FEC$utkKu4OIx_syK*D-rnx)L|8wT4xEiSHfV_}j5b z*XH5(A|ydsESwU$x8;HU*rA|0+f*)!9+S9$$o=)JQ+d(BjHbMau56?82Nj|)8aMkI zGOGrUl^a>>8;(D7Itc2!H0L*z{nufAX2iQLS7&RshMn`sjJ6Jl+G{vEQ5aj#=8#xqv zg`BQb`jfP3<#3zzHX8Ms5h=_ufC>*D3ArC4pOmS;XRS0u{bjgx=dJ~NWMH4U;XQl5 z_diJ}G6G2Sx9zT8O6=0TmxzJ7>%-sk$m<C ziK%?2wYY9N&HDnRlkRjpc4^H#&0ED!!gFqnNmKCT@P2_006Y)?ge4IP2spGVDj3b40mIh?+}jUy8!r>YIOz6Gf6ZWEq235- z_V6n|Wx<+M$G#0eu^qbQx3Em#s_eLTL*^nHgB!fdzRIFhm&DTeP6beZLRS|y_^v6umeV`PLoRE)2{6~zAwF(wHqF^i)Cn_O2PGk_ALB7B+f)LOiF zyd^2=Jlsv6@4fhxCOs`6yTU_AtW3?ziFm)epnXNfk-=)j1U535?<|gpVMCL|h3p3AP22m ztaD~cj6fo+w3770_x2&(n@vK7MwElJGEK^#L{yO(6o0i5#%S=fUu5hd<4IJ`O?|aeH{= zxDg&mAQZD4YV0B7t)djPqu*Vv+y6RVzeMEG6k|^f2|Bi@P<3-08}76;m_0i zId>;Jo?BnMI(NTGLD$v?poXUWcn z&&zgUf^rs)04u9cM2*&hSSl!Yku2d@9(;fTI`F~w)t`G>T8ecidJhzz5O~ZT zy6w~Cp_3@(Ywv_qMU|xpc;^sJ*xa)?tI1Xbxjj0fbB^7m%QJ4Nv+s5cl{wW&v1jyU z1bGDRDpqRPbxa&*T-!{*1s_MCDeu{^omuuyVU<}zH6P}Ep#MP!hfMJO(tX&f04&Ii z2x4O5+#6G#*2%oV;%jcut!qEGxpU=U6OPaB2xUg!7aaGSkNV-RfI3onKl_$Ig-u%Un# z$S;L#0x#xaU=Gw3{hSdlw4Q-BRn$Nr3#Q>7Xnz|^<3uLFJpAk!5_s(bXza>8XycB% z?C!yqt~g7OtompY`Y(A7SHRIxnmxXw*H?nWDE?-4!vf)Z;`j~C(hF*zvv9D2m1@6< z20LyT3!U6|LKlf{9r$UxLjLb>(9V$V{mlUWz_h1e4T6T%b+Abtm=;cPCcby`Je)Q@ z|8sNt*QY0XSJyzH)kT$x4e3IVxgPwHTY3NgV!=3saN*TsaI|4%6Vsg&xDR?YmmKGU z@-bl+odY}GHu=vK`psM!cJJqo0n(yjGs_^~Kd?34zrFJtBPJ^5<2767`b(c$jpGYw+;1wL=)3FX#UAk67mF+;O}5WRX<;Umz(kK>8G?=5Se*e zWx1;07h%K*3M~q)EbJ#cwvK8}Z)?ky8Xdd6#^^=J`-Odb$`dxsCwMtgI|gP=Q6k$v zkzIhz$~kaK)DpJ`R-K1e+wOXU9e|iE(&ZC}k6l}?Has}W7^-$w#U|lR3WIhObQsVm zhEJ6bS)RvxpdDlkV2A#0`d>B_^eh})l4tn@ejBao7F#ABmF+_4`JsQDACD!3j3bu& zN0y90Cx}La(#OwiGaTjvc}lZ%Wr3%`BNUfb4ln5-iLQ+QgG=zUjlSuj-xQG8;K)eY z0`|EJlVaN=@S0$=Z8z(IDE03Fvdm0_YP2$WI+R9ivf-C*Wwq1n+PrYy0%q z4eGQCq?#sh=}8ASrhCu0HJ*g!LOhT!=q-1nCS<#cM*e2`|+>Shl` z<~oi%F0)~nIbZ}%c$#w;aN!n7iRc-G{d&AMdIwCz;8iuUDKNCnn!t~eQP~;k=ZIdO z*8hS*a4h1d0>z7<(?izBj0EL zF@Q2;=2UTHaayKzP^0(vfrwQJee%TnJS9rF~JS%e4KKs`pfETZwI z&h@P3D?5h=aiV!W@r`Ke$R+T{D-@c$3%gSKk~mnOmw=E_2|-1Q^`2RE*klr{?V{6HRJ0%3KpK8oU48@4NkM6m9YCl z^2-5nb9DS6Yg(3KPQ1z}5%-*{HpxeJ(F6PwYS zg+ulqkMnc9ooT^=FfNja)s+(?T24FWet=>;s#zX9*T~$>A6MxR`HRsGvmBpgNdI$2 z&f@=JUSES&J%$oa;}bK9v!p4$xqm&C{UmNwLkje*G}R(0ng#SYlxOuuU*KJs=NOja%0yb6*SAd(r9lx*9q2W-`UGrqV-j_#F8 zLU%pd9<+@bj#OxAExhNv{9;GsjjX3>GXPAeD^!s96P7o?EpPoT$jb%Unu|foS(|nZ zLfe?}Zty;4BpJx?5P#BqfQj>D#cx*R=`q=$HDh;=L8u#5#|csFnd_r>=F{lc6nQ3O zA@KBS;UfATj%#I}Vtu+>W*P+#TKNbjvwGG}fjDy)bsoe8&0MSUv%BPO2Ei3}v^6QH90o`O+S2(Fdi1Fn00Xe;I9@V{UsMwM@03lBq09o29~1fW74qv!V}iD$7}`Fra?CVKgI$ zYp;H`B5sqj%mEk?K|Ci#3w)0}2^L=jF1B`prv@O7WhXb$DSShF^L7sD0Opg2 zbP+n;F?Shd>>_@HE}QQJ4cC91b63`ZmkJH^6mfBVJw<;}PFU1T-*@CZxrRjddG)jQ z2@wmjsJ2YgHl72$Z+97zz!~Li(~lk4yB6MAF}YcteQK)rR$tJz*~@&W$hz`~C;2*K zI+Io5_v!uE={M_Q9wg@PJ=e1hg3n<_9g#@JJzZY>#ZK%3tAZ$&1IQlNjW4;!sp3;d z;i%|3E{Lp*DaUnji=?xP9=#dT&^?CvM#`t{E7cG*GH|F?C;{XcuBa zMP|@c09|ti5>qMBFF!t9DKpzn{RTROrfNMvLKJeu>}mKjRK_F@oI`*CHlLdVG4mA= z|2$-=SE1$+WG6y2bq=$0`PIwEIKsH)Xy97*+T>8i&ezGOI;s;ScxaQkB)Z77_1v z1Wxg=tAk|%3$*&D+hO9f#4bSSfiqh`PocH}p45#8asMWnSitmzJ^AxhDE`g_t2mOy z0u{@MklmRhfB?Kx>L?o~fjkL(a>HA}bE2oOO&7C|VN2^cN$g|(o2f6^M1U^IvstD8 zavq4NubI176(+s#HS%cFs?j13OT0nK_fp}_{E#0nKmS3Byh88I-PiTGF#6#s+w>p; znanmVVXXLl@MmRjC51XPRWIvC2zU51>B9G0#rd=hsF1ckZB}EtcBG2sR~8V;X3zA6 z2-|r*vW5*xC{PXy%mU_k-FWea_>(h*J`0y0PBho@JI57abA^~a++iZt1Mhyw43h*3 zf+?cjpPv;DyITM|$Z}&1NWm6M*2ln7(;dAy-zZ$9eADC1{g%4NduaH?AwE6;!W~q} z6@v-Zc|v3k0Ht>DlfP{!oK0`S&5vowdA7&I#j@Q(M2|6zZ4hD{`1c2(V>ShfYUMV* z%-VC^6HfDD#5MV-w(dimAcYHWPa8MD-%$Fjbs*<)fEr>>ciO8_iM#NPM(vGnIS{;? zTphKKI7w~2AQZ~ae1Xu6b>#)EyLtO|-0|?YEcXAjZF`A{Or^5xm+J##P&G*&dCesL z1g!-`G0e>tLU=_LK+Hi)bzHkTqBM>N1%kKblR*WOCAiR5()Kk}ifi$NSAj zY9lDwU!uKCBsLoxoFIm7_pm5iOv8Jr#v=NP`V)*W4odg` zP+}Qb9KYn!5{ei-N7;A5c5prkNrt>Iv$8V18|k`}PDgZU|1zo?5?-8qccvkNhmnfH z!kCwD6l@F9wwz*Je3qm9*w8*LSe!L^<^lJt#0IY2!Pi)kP0jj9|LbHD9$X1cSap-? z0RlAv`SHGDq-L$k-cXEs*{|nLx#C27?BgH*S$uZiB~g@HI0kbjc;MDa99aL4C?Nu= zYhg50fS*zUGE3FxgEbXHp%q*j5}En(5&b>^gc}$M>8w&0!VX-0!8UhynJw> zgp;nfGAm>BSP-|EavjlT#F4sFU67<45G6sr3cuE=W(>U9v3WSI~ zhQGNg8rPZ~S2%@<*AsNx425Rm(*I6@P+b^CEH9N2=67uQP5Bib0$@Xx6k(LOyLhN( z_6B{N`Z21GQBLya*FKYfCOy+j>g<-CQCfFUW9+kHzVD}Iuybri%)wQ&A%KMX6=zs1 zYbd;>N-(J;V+}Hv`ml8v9@YX#XvQ{pFhAuEk91B3snn@#zdbm5gC*<7#rPs|;jzco zt8Q0F=EedO+fd$oU^Xim9LU#!IooF@iT@sL?hCNVboTk_+tP@6V|4BUlrK^suFxlL zQPA4Q#L9*^u?SomgAEO8t(20#?F`@G68y|%d3cF}fr$CQ_wKwmZ_KRpDOSSnHD8|8 zH!an9&UN&GzwYz=WnKEuxVs%j)H@E7<=KgVAhF0ziRASe(jqlYzT#om8phV#V!snU z6maYU7n37SOF-p0Ch&T^JLq6m*I4he6}KO0t>VDCCWT z76lh6aFfwbA$i0c;U(BN{?!3!E8WLi9uS1v$a9sX6i`1({sP&jmfz7apX2hB%a(=L zbE6rk#oaysBoXJ>5e)!Rh*uU8@<_WGZb= zz2hXHG_F1y_4IGSiC1mSg)h1tbpf=FjbYS*-SE}Vh(h4Js;~~>M#F76>JeKmr+eIK zIHmQR2N=GWAk@L)syWATWH6HS&*;I#yHSMCV~F|FoQeM>TB}1UduQ4hk+2}PPJ(?! z;T$n5V2rJR?Ccc;aREq3WNBNv&hu6_TK1q)$#Rc`o zZ{?_l!%mMb_N{xehEQpwpMo_39ty>t8?g&%5+J3+6OUW9ALK^At8E8g0gVKj*0_I@ zvRDQzgL%Hnqa@)_bMvRFJEL*8o9<9LD9%>zmIowNdU}aTc=6A0B46m?bJBX`wQaV) z=r5bjW;2s_BLi)S6WdyNeGcR3Y7m==B^31#b6yZ03?zEAjRyC>2VRUw+O4FS8ly?}yx)B|L?KebF&mW zzJDo18eznBxK>}TgRsv7>?sPrnIS*MzGigC5@G%1xhViQgwPbj<%1`Ovm9;%9^&j9 z>046JwJ+oAZ&H2>p)fzwTRLEi#GiZC<#uJ`ra+kzguQj!xZ#yCu{Osq(Jd$I_8#2= zI+XP~yu`bNQTF)V*%8C;n0N6MEtk=@CTR)Jw99L)3bZ}(_y-ge-BN$96vSOzt{ARf zocC`99~Q~tKos4Rgi!?G?r*JyD?B=F1~UQUBo*iYL~Vg2fFX%?=(E{T!=*nZTn{i- z6yw=J?~%}2cRC~SoZ$E^3Q_0VQ-!`i5AX^*!@<1qPkVtSgE{JND@|krsV3LkfgdFd z%rZM?xPGaf05&}ysG@b#KXqDb5;uexKoM$_w)UKGL_-)FrlQvu_5|3(;K-7yWcAAZ zWlzM2k_@7K`qS{wNW!4io;)31$cqLWHoC+`EzMcmF*fb9Va3fc`>c;Yj|*F-j*Zmr zcxR;#l^7w-G1UJS1p}6bZ+w|n7!XDe>!c!-4adi)afj(&ot+6eyOqR`nmeTPGGQs- zR=Kq)Z@j&C&BCR(uWGGYaDbkB^PfbQM-VwKsjQxPj2E{H;ss*fxEk2wc&H3KIEWM> zo>@*<4)WGSr_WtI8(N`0!4-cMmpGU}~rTrF9>g*&!!-Cz1rxyaVAEawJG~<*E z{NNmQG(;8jp##9BR+F-IYD)z#%cK069l-0L@kw`VP^HFoNUyghZ3sKnll6qF*uOzz z9x3_9#lez-((diz#9H1>0~VxW#DdiQ_>3&NJQR-$D&tN72&;4EAmO#xcqIbW`77%I zbst}bD?voDr%HzBY7ge5`!{aP9lKZo>7H@7mJG0l0-pco@;cB(^aABQWv|rnqc|5} z46_Z}ZbHBjIo_3XNADA4|6V{0O^}B0R+I~DvH5?rzbUZnG`qQ8&OQ3R!Zt)lP?ZDh zO;!~2-^r0X&z4)BAkp1wWm%a}krNnuNZ^;&q4gDk?FvBUe{QY$FuVSPYnM~2e?24< zNo8ha1Q0(76}(?evOtdYPs$x$8x&~XC|sJA+^@j1>FuSCQ!0vvlSe>l>@JDY6(M}* zZ<+MXy(()+46gB9C{&K&MW9pUPC;D(G?T0JI|x`3Ba;##?ihVQ4&Jz4QKC91&}@=r zH*(%1F4KTcRjs9)P+a7Mm*`2@MBuU8IN%Dggk5_sW^?jmq@(B_4aPa^%$+l;@BpG| zM{|OFHQT19mQ}+T!77$e*TopBRIW5=2=XJf# zrI^RzwHj8 zkv6O<_!6uIulJpP&>2GOX=vh#r9wo}>FRDS*)<{Mid+RUs6!eO#jnLOk7ks#upwzr zg8Z3^G~$EtP1u9~5tH+@2w>d%Cb!NN#AGSq4+t&U%Z-yR8OxU;A=>|V4OvFO$TG;Z zuTOQKX2N7l!9?n!6R?=BZe1NS{Ly_o&sK%z9B&&~*jKj46tL^huL)TNDoh199@3H7 zru@8VVA(d9hkqO~4O2v^tvsjs8s*Ss9$M>2`Bd{;@_eA(;{OPh^qHKr$Nv?c6fz;{ zyn3e$bv0-El>PzHU^yTX zSs&)(@fh39h{1}bYAJv&GK=(87;U6}gt?JyHo5Ec(9L%jy9fSo72XJRXppTJ$I@#{ zE8WUu?XV?p8A4N_Dh7BQ=Ey7Pfv=z;eqmsy@XX!#7MU0+5P$KF=tk%P=&3SwufxvF zp}C0$IUny`jL+oKYb*4j%&6`^2`35|qRkC+lE`_3uhW9$)bKDKzk4tHT?4&T7H!f; zSzk`X=HO$*crfymY(7?R{`2{{MZlxe8*J?;)@J&kB7kOvM0^IE#>&j~kR)eotC0YH z641VsTwdl@%{5{B5dCg*=0$;$KW-Sj_Bo`@8fxuP-gZy4^8Jf;uZ93n{F3OFcNa|U z7a%fr2vC_U4}O7%#q|^vya?By_+JA|RJsUMt+T&G0(!(xwb_i0^UQG3IbtGNA9Z|L zC+$zS^*`!;p=+o`BB`pF{{E7>cF!@=icy|4Y<|*(UzJoux$O;(G7{P0d8qrDwK*sM zr?iurys(l%=TEX;yP zd@+I0fX`Nhjlfx=(QX06-iF1-y6D6nxgO;np0_eDKWv@gEs4o(+M#{&o0q@vxS{MP z^ZZf9vFk6(%a)7~1@naMvnbUN4R*e2tJebyc4t}6p2kx@u&?Qw+M0Q)}@#t2#) zQM5M@2%{!?3rwC)j{vV)t?*7M3jg4`8Pw)ox%pJ2057_*=$ePNBTmz1!e+vfGSmIXzJnQUMh2L< z6uCLiCVJ^X2~k?zD@#HwNY^^$SARzZ$4Eo|3b`L2_TO=}f8*I7EqT;fs`9N}$#pQe zRD$xL20)0XkO6a}d)P48n%m-eaU&xjIKvnZxL3)B8fP#ka~$HvG|3-jKz&f}P#k5Q zb@I2Ry`%TUkC&0>IGh#GVoBr?bTQsJN3G&gi2<1z3jpECZtPhQ!ifaA(fX6(NW+u;=lU*6UR#bg`VLi&u2A0aJ z$VCy$j0P-xV=T&QQc}CuMyxZisui;m#h(c4p39PPJua>;%jHV!9L@|q1ltw5J@CGh z->7sRV}IYcB-R%v+1#Co9cPN7d5)5nlZ)M+q&|%0bDB=!Ub*uy%R)1JUrAM z%b0_wKtlv8wGt3`?)EO^KnsHMLDd`}gT707zK#%LZc|#HqIQvlQb@lOM=HZl zWCe|~dMPMCLA=;LI*8dWUd1PAv;H;WVw z`wu2ZP&PzXA1OSJ)_z)~GN~W>vD!Fq;546V@v9P1q$B=L$&`sPzKj=NJJ%9$UGnH# zz}64m6+QDIR-XfDIDpxStx5%(#_RE13KFLQln43K7o%2A@hO-QQnqD7&Jm87BwTo$ z**JPKTU||etTQ%q-KsVc?jIYK9&|3*FvlCL@-IH##PIJ+3+q)VbRm)KsrOYSsV zVy;iZXK-NFU`Q3vV&*)a9gB|Y&74~y`4$0ZSos0Pz{(VnjU1+LG?3{cbT3%fSm80( z=+e7o2?A9aX)m(4G0qo0MWEK8BYlfKE4V*?JtmtxWk22XpfViHs?85=T{w8nXp^=+DnAHHPr9CKn3oIfD1&<&oeAWd4Od|;o zJD|$A-AA}l%xl7QtFCug9+f-8lz3HvqVQT?RrG@d|9*!19j6>nHZnX{@W1T09%e(qh zdF8}U1fAymy-;`2!}^_8BVB5BGpiKA$VE55zw9t&o6vmoxEsxT8){NZ==*xAKGWnD z-?RH8ki#7enGE2W7&$oRznXL5!}4KawwlY&dKj&sJn*Gz@cEv4tAGERTZGgvnZ~yy zud@9mwKAIKPKBBBm%h4XWOHy^A3k_PCx%Q%admCo+!8^qx@D{W+}e6HytusPC3Z57 zV{k^Cu>k!}TmVI=5KD=Ur<%!6k>b$o4$;po7jhOOfsTK2|;A4y&2yhl32e25gdVD3rX^5DPh z`D@cOds09SU_y=^4!Ev4xuBFmHnZ6qSZFVdG%s4RFM)pilcNalE~QO|pC>8~nhbt< zDLSCMW=D~qecthhTOS5o-7&ByEPdpweQj*_kk8nUJit;in7(-vQfT2WN2Zk@CCjg> zaeH>gdx!eL(>m6kRa*rFm^mT3S4`@Tx8DoF8o48NhCff`ll7PQ4JWO1zUlZpZ63C7 z=jipJ6?=H`V%=RQ#8hb;4sP#zd~$et$^O*xT@MAtM%H#;`1Vx&S!U0(Ox@*C*p*hR z*hNqQZo23#g>e^+_ee>-O_f5bI=JHu#Hk=Lz0Dk0Fi#8AzRB*Q#Y_V|@YV?G`NdO3 z?|W-pa<;WRq9fU?)q&O3`yT&!^(s0 z5Chz=D5QMrlIN3!LMF>R?w#eJR2(ZkBW8K&eUeuVO%tESq_WF7ZFc=f#|Hy_mR_RA z@wxm`>N;Sux4j-;n9=Frq_4v@PlwPWk|0{=`8Y%r3%+JD%|mAP%v;F$*_oEkR*Nuu z*%KhH7QyAUcTzf)i%+hj>+5ZD+ULwNhcu-^(=2|dpd!fHprm}%%Zv4ZwSC=|O&G_O z;Uz*GJI#t)g1U5vO6QlHrJkMGC%13j&ih=GOP(q4(h^*ZjXu2^$&hfkT`RxnZP!QL z=`g4MWUtlk89sudlb3&4pz_gg_wtqAklb(mo?jfc-F$1i<>}o#8X+o8n?ov;i^x$M zHf*83eEjiD?y7xJ=T<_j|B1DBTZb%GU+(tau?x@o)VD%G?Rlijb!)VZ zXs=XVj9e28@5Y~Fyp^6wv4T;z%J0T`GwPo4+&f2UpKEYc*--JWh0CP4VmUd8lSb_{R&I5w{RsP@zWF zttqpqH~h%da8A-WW%m_rDQ~*BxzmDg=%XLK+elLuWY3K@A;a9K$fv?FckN#{M16N6 zKf`f)7nymt^U1XuS^jT2*41_gr`lX<7`wJgg*;ox>mHW$TX;yr&pqXy+QdF)ndk-! zN2+4)Vh*+AZQI1RilgRbwH%R%`Pn63xWZXR|C|2@Z?`HPOI5QU_c%<_4`!tYC2{y2 z-0`63Ke@vFsCd;m0hMwmUnx&o+TP1yy7T0AeJy3ChiocM^+`NqrKz)_YQFAJ8EedS zB+#cuW6i*ydAEj+3Y}q1%a|L~OaJb>5N+Qbms@oL`*uoVv!jP!X1q#gnEmkas@`qd znJQ1kdK|}YcZj^;R6V@A&|H3`ZH3SAv7GdC^VL%rch+q6czEJ@+AH2&SH3)-pHV;6 zc`N?+&Cfx-(t^32Uwh)cXY8%bcWmV^osKiPAYy-JVFatR%Dbg%WAn#6`_D(p@(OmG zel43j>A%Z*&-b2s znq3;d+tOR3;A*F*<((r{=MR&=jto1<-LrYSa`oqgATG4_&9c>xKBv{8wTOvQQjM>- zOB=rDLtT@8CHBX^tklh(^5Dq$nh{YjFT^5q=5}ATV8Bwo)63V}E=RlM@3ajB#Wy)> z5A7-lHj>(x+w7$MD=KQlzESh0OZY2~Bl(E%3i2R@y1dRF#+MU+}*icNm} zf2@8V))9R%W3kZP20I@9Qi;oAHD1a_2cMnxD=H40T69#|V8_eLyIeCY<*lp(zu&Gh zZ*_YgT%n@#s%KPCQS{xlY47GSm2UTxE~=>(P5CiE+lo>MZ$=J>~Tj)?`5dbiSa{bd|7A{|UmiPTxf-3yqyKpxA{?ffdo zpHXEzqY(07$+*D*o>1jh1Ecvxr)+N;qd}$G6$cJU@Gy=X4si7-;k?u~R1#+*`G8~5 z=O}}-gWo+E%9UDt`*;7inon-lw~CJ7NItq$j%%&_MZMJ?=6zA0?5p~AkFK{rI^i@a zHxbu(ZmP}csoV{b;bFT}|K^=1lPct}=Ru*z+Ji!$<-WPe-TE~4S6XqH-@5GAHXH?7 zV{t7z+lyTVw@F^!P&l^YQ=yi!Te<*Uu3+jwx5tr)3ppfIG3?xaDfEWCgyxFO@5c=72 zpr8^|6=A!MKA~_Ntay24+)JN&T&}qLhaf5cv3d^2{$AH!0mH0cJ^_W!X7f+a7enur zZc){+eJgG(Ia)5L(=mK*Q&`zjmyXzP^Q5lZkS(93hWB0WvrM=w8op?1oXNYz)VFA- z{L_&B;C$PupVM!O;#*{z{6|$c-J9?B<@wLFyM8CiHi!)@?b^2XPT~DF^{{xKf+%d? z#1|_k(~&WYvS(CE_WQEZN z>sGGkQN7;sw7vfq#|0Vw4ud0-Hk<>RTOK&KHZ~-k`Zn{c`T?1-CaP+LBJ!^Ii>YV8 zejfUfje3?O?2D1YfwFi3x8ZYQV|PNoLe5C20)PI@S3jGWDZ4T~gY<@Q8_`@yu3bQ2nMA?z3Ur=8}iCR2e zd-wa(t;;dhck9HAU7Z9a4RiiHq;>D-`gLag@|8lJu6pD3JWKVaIz{u<-yU)I{VG!$ zba0y$kE*h-cSEkKF#Xc$C)Di+Im<(2KmC@W+B`U3(44Hr`O8_Oe|P=O0Lvv^FV}5) zdZr}qNB${cj5}l6kHR>SYsb#KDAL%$3Y=`RzmoM!DnHdZ{7S>)39sVBs+_Ui z^WKT}DBl>cD0Ivwg&ci#Z_^pa(lXKM`bz#a9*rAi73AFSzcq^>o5c>aY?&OJH+_B? z2PWRrq+E3IR53$<`Bd)WA(0IA+oGo_q_6sLXZwx5Bn!9om#V)^DUJomMLXrKeo$PW znz0<*o1X+1s2>gS$vaQg-&nOJ%l>D|RFTN@6OxBx%?{n~F1|A6vdKk=x6ZWelh1z7 z`GU-+vg!|d<4aDSRYC`1EK>7K3VSZr^Qe|TwaM7O0=dqf zahUEKP%N~LdhBq!DNdvVg_-7kHKkS@cWCJz{($8OHl(3z2?_3k{b}p+`3#*P$x4*e z*=rZKQirtuL@)TU`{u>yT_-pgoOEeHvc-~lTcr)|xjROQFPRv((yY*W)c8n$+GqRd zjPTvg_xjy3i%zDW8d`fO^;EObzA|w#rkyZN+9UAmkJ*-)D3Pq@^uupd zOHaMu^(s7QmxOiJ&Zm@{bs-b>LhXz9UCJRD4LB}voIdlmy7Cc;ajfS`+GuOXCDNnO z7$K>Kz{@T+i%U*F_SbolB3rg2nQU2H|0qZIfXvzb4S_2=mc*)wk>16MJyE`~gM9c_ zyu)cuN=V87O`E@bzY;o|j*X&v2adQl|7R+5#~)BEeA z&820wAB>0$dV2Mm^djHN=8O4X4+V-(4L=BoIUF#>+L6(CQ*O(fZ=3IS>>c#a{yo5Q zX|Ef3bf|toeVf-)g<;>sPWlO|?U^U)nkr`pvQAeUj4l0gW@hECuM560HpcxnY**1K z>P{Pfm1_7=^?I(zA8W~qg$~nQL1Lr6S|ZGS+B+Od2h2{&9^2!LT>@TgI&@G^bIH;R zYb;xCIFH;E%@U1fVg->Nf1a)6y0x%|5qtZQ@5d$=@)g5AD1kSMtMjANd)>Ehsvm+a_#du#Ltk0f~p@`5wHyYO?-S zrZFi^o2W>%qlO#T^S%s_d#}c0GpKl(n6{}L5)sa{KOloF_)0j@=r3Grs ze8>E1Q#GnbJGuOOD&nog*14u0ABI|ylAXxcM)m7g@3c-+e;FkqvnS5OM(wsXwgP}%w0w>P?>@r{X@ zMWXur+P*AP-3Ok-Hm4mtCiWFq=qLuQ%Hb4pM8Efrq!l(wUNDI@oXxdBn&}!`D0%u~ z#w{by*Dq>zz9`{&dCyd3Mb`Up9r8T#y4&OW=y~Yv$@ZqQ>83Q%>Q{&M{c64#wVli1 zpwEHoo#hfy9~P%rPEGaRPtA^*KK@q9?)k}#qMK8D4THFrqGzvUcE<;6z5X_EbUoMj zNk-&b3zPR75L3JQol{HBd{E+}dRW4#TJHMK9W-xXoG{f6YD6_0PbYVPJC7366Rc@* z3X>G9lbf*^;^vjdK@n9?g=FnEOH@xo7>vxL-(V^$oID%f?wT-`ZIi`C5kUW4OZw;< z88h7)wFPqmK90Xj>$$(;CAGb_z2F12gI zN%Y9j9Ks9(Cu!U+DzWCERI#%9WNFsHg9cAYDG=%$c-(GZk5$W%QAPDp@52s>>96%( zo?7FP8QRl+a-CCEXkqC!i|y;$@l7eDM>uydXLnj^%E{Md$JAmq2kv@yCzucy4C;=8 zH)d;p#H*OMsTPEDzJgA^>?wlynfL!T=9)|S!sxr8r zjQ_bXy!X_&S26`HR0;Q?{f$k5!_Q~rt!@WzQJ07;k|K-*Pw|`Z@^}_7KoW>3w~&p4 zCCHTKS`$UZ9dq1l2BG{LHh|ZgsIgGB0#~TkRv6TQ>g~9k9 zP>;yATEoFpk}>{lXnA1f!xpml(QY!XAh@P6dkBC2yaTO$kKEh|`nFqaTb1xb&}sK! z>_LLd48E11y=8D4a|bnajKc{tGf~(ey2$9++lk9zFzg0Lza2`Qdy&-$0s@UssdLrvKu{dU=t|V*un9HGeXfeuuc3e)e31A z@P=z0aK+pMb-{!MplmRP5^{T3Cai5NJC*@>WH_+4!yXL4(*Ryhuj!uVJA)OTLH5RL zml+OAyeufv*#)W)PBi8Vy#amuJs1HJ(ij?w2ZPv*gC!a94Gw@(wl&DKrq!Pdf*`O| z*Ag(|prZMBK~q^K_{!78-jlkLA`dn9JNfIT*Lpa4O}#(w3e`(VTX)bt#2G(g}yAOppfZ}Ew^W-+rz|J;$nkCeoIQ(@Mq2cW1Ls#XHu;9|a zcR)A~7wG7r(Uq2wP&zz#wlPotH9<0cWi6Jy7rFb*D~3x?OvF;{BX``Ni=yTW?~$=p z7A(bz3*eVA`--arX%Xw8#v-e-P=@VAi9b%heQGIARrG}m5Q#Y;SaXKLK!Le3{*8?# z#x|@IEmIXvV?y8Vr@T+Ul++syW+(868ge?K2fxLuK->bqfoFd`g6wg;2(pS&^Yh@x zv6`I(gMN(&#_>^wQFgz4pLH^8h4=TG>4CwCA=cz|Po^cTnh{fzE3=QP681|0Y_OCf zC15L0xejx&?Vwl_q3s?#%+CuiV7DiDczNT7`+tw2q^}b%2VJrIFBQOrHM8kxe=db& zF)yY5-b$Z(1G?e!P+{d#{`5vrf6@?bEz5t(U=smu{5EIbFZR~Fm`g;(r?%}t0kiG= z0fzuEa?~b|EMwCToR>pJoCN+7`!M7SK-s?qf08@`#5|=#1qDC`OSXCFM)7)<{qEZd zTH_HnJ#IpLJDA@7Kgw zXn$tW$VA&SCv-+SyAVcEWzYxItTogwW9Yy#Itk62O%s5BfQ!OK0vEVX;zxM9z&QsL zL=O@Nww<<@eFfj{Sow-LU|gku&FIY>aJtsuia@*#9!%j)4ZdD6Gh|Q35W6xU4TZlx z#+vX2Y7VpilkXFnGKb@s#8~$=epD8|S*?o%AINTW_vJqTfa)F^f4Ku)^u!AhG&76k zj9<;7`{-md94((hO_8-hg|czqZnR9L)XOcq*dZNT4h?Lvf(Sg!0RA+#1LXM~tS__7 zmPCZALrkkzAP){sl}D{1aHlNp&i7kibt8=Ex8#=9E`F!petKK+N9;qmCAmNu=X)%B zf-BqNxF&%%Uth#Y^qD|M`Y^$x{5q6~zcjbM0Lojkoc(36?K*v0mIG5+HpgL+{H|&C z)oF;!Y^{y>`zthf2slE>RcwiSlYNrwJc!WNw<`Ul^z3HZ&9w7rVX0xM>D{h-gI|2B zPAiQn3SyviiW&*v)KZdPeAZc{tFgx3cp3<}MJI zMHVdjg707|ASqCrlV$v19^;;o_L&+N>sHBPpML$d1VwvjDM#3XTfnk0L~>!^?jJaCMgXNDu#Ed^<*q;{vyeM65Mk?=^qpiZ{7<| zbuWP!XB$>`Lk{1yuU(A_^5>`%YrY3wRW$iv7ypXSad4fi%8%q9)W-MRwKAOjDO6Ls zGaZ@3!KgpJ#(ej#yXGR z2z3yX@emCs)eg_;+~)xk4nfzX?w2mK=QUO80DBuuly+dBo12duU>XD>Q6hrfTb+#*1^qjvAAr(}SO>rbMuI00 zcb)u*mVt>0@5o>#G5xguIkb2V%@~rtB;;KA2)|A=Mwa&>2<_PP4>jnqQpD}dshi*j zzVX1{J5hcA>@MB^QZt~{>o#|hH zcI+)*x$aiRM(@fJAS9UFM@*04y~QK1@yY$kKe|UwX@E<`+vR`-=`TU)PHehwA(7v| zNW+CJhTe5Y`}V+@0j-vb!_QZ0Z}8j6)iKZ6;qJb-YKwQR+Y+<=9<%y3;NfCsJOK2t z6Lz;P0Ph_W-@y6r1cE-P5`~w~HqrejXtTTaR{Ie;V~Gne?8eyp1|JuCqb3DCCD5EW zA6C2sQrf5Tqz2DR`ZaMAf@9<$8+T&6^aYP`Nh*DB$8<~g4ry>m)1y*xS7|i3^^3&< zWFueh(<8LNlI*z0t<_?_G`&%t}N*c_OsrT#BBy&Hgg)s?h7!2?L283TQ9KOuywd~vvr zhf=|9nk_Pc_b&{v*_rt3%BwdVjjvkelgZmi4#P6wt2w4100U`rjcWk_H=xKdAG}N8 z9laFCA$Id1i~Ze21r)8$dX^zvJ&QFoLt?#DQvV0(eG7{JS7n z0LNYwVeRV%>NC=omI!1_)wUC^2h^)ITJl{ zADM)*6e#ZQH*UmYCvTWh;6V)3oGas3K=EZv3AD7YnC2b1abHIv$LP)bCo!X6A(a>K z%zmc}%J{rCy8wW+Ag}m&V%2USCPn9`$(8Tai2w$LDae(akD#Ho zL5*#)>^kxIee|UKRZzq3TfDj$1cJ;q{bN4)c(s&wel;}qDdvsNWvlo6z0Uq?5TKHT z@3qR3=%m0KGWLst$uWO=0yg~AD%K9P+;>~f@Uhs}@2_Ma+Zm)Usvzcf#%xve=qUI!XGjD8X?H{9~ zzaUps$ahUA15GN79f^dKxn9U4!8?5D68YEjgGq~@OL1fDw_4A}ho{FNpvx+!2vw=zskG8tYzKAWxg6a3d|9~UB&yHF zAiuk5DfO-X^`aM_tomj1RPcmHUT{-jN-(Pl0J?}gbpQYvKzhmn932|-56nwA&f)FJ z7NGL5>%cZ<8&&}cacXw@`aq%z<*6N+Wo#0;G%2R{5ke7v7qr6nnMw; zbE5|8ivI0#aJLZ|9E{)tijpf^76o%%n_9^7s2)_Tb#nB#Ob6C!qbvU3od@8u4o(-@ zRQSUG154;W**_J&Y06XI41l`@b?NRc*$?1Zh0pIu%o(4oea0V5UfB1-vG0kQ`;>*m zL@wcZP8}=;773iw0|z4+zM7a*;&S2FFa#>b1XS^TlpemAHv7^38lE7wCMXc+@eRmG zY;4IkmPhEud0=VmhM9txCYSO|k#1GoX_|%P!ccc+e^}T}o|IGt8u@w6Q#~H1ed2mt zi04c4t4|_q9S{E7!9Z<|9FqL_FHf--jdQ@p-ew#*h|oTzCwjAQK!MrwzBXl;u@C9^ z&|Drq?KG z5i}H768MqCAPw#tcDeI9#z>fw-E7Cy1sWJ%TmrKzis5wjTg%3R+e{o;y9QRl7V075 zA-%J0Ug^;}hWUGL1%OApzmi1%Ee2AVZP;}ioTO2e0)#Qy{beK|f$$>wC+l_cv{kQ; z&U#!B`Kj2t59kK+EX^@r;KVXx?FLl`o#o2f$=b>~#M%NODSKGEKRFl}P|c1;B>4p= zcgKn{$TagpNeNvVyoQYaA6s7n57ieverL?siLBW}k!ci*|^o^$TG=bRe~k7E%f z!-0d>ZlXaInKK=aW9zIXCq?Yb7x^v*<#;0m-4at!Y2=X+4R1)+T}>zg&vc~{x?Fy! zCB1IJxNLt+I>-9R(pe4cSXtSP&;%3|#1SA=i%@AI$l`SWmv$TN}+5%1pYwb;xwbX(N(*j=NcYRm090v$?kxRnDF+pMOlGS&q6W*QTs!+ zflzb71*D2gVDfllsOdYy7SYo7YvI3W=0tyGVz(yg5WVm4ha5%LNyIJ0Cc_gKB0zPC zz#?}QPIh`U96+20gcYSE3q}~~4dj43KHvdH0J+S8?|V~u*MSinTIwkxKnrgO@%TH% z_7yyWojoA4b7Npw2MJ3kNh7(_o|qGVaL=DrpvHII#A+f7Y(SY4NXMkvy^e zUbJqA>z7AL95XI9fh=H{0O|tmwF~45BMgQuyZR8%Ol6Qws0)p-*5dQD2e$BzX|!ms z0`;K7Wi6^>UxLTp-P!EhA7^NSHvcOPe~4*f{ow@9W=8OTAQh1y>qV z+uDlw!|g9#x1^wtx8GV@yf=ddQ*hLRP9p6T)B;?Ltv36sZrI(VsTc0M>IbW4#rpQ( zmJA$>>ea zCC_gyId4=s_qKJl3mL*^(a5)FfhRVfV+@R2J4j=#&GP^&71%=^ymPbu0*bkm20T~? zlne3Ccq?%Mi@O1Cci(IOgSR9iJOe~rI2l$MtC+YGRkj2D=_k)Y>Sv1vx8F!6AT%X8 z85RKg1#Yiu?@Qa?pDJq~nvr5k_5I@eA;4zxS=&;-ZXZc1#U;o^&P78Q@8>wE{cPj( zJ8GkIA2?r~Y<^=C=Rx``-J}e>Et^LVUB!rr#-o)F9~Eq1HYd&X&T|QVHSi&roRH$EslNffM-3Qgh*@Qt)Ruyls) z-pLc_1dN1eY5jm}9HsWmKfem2qA+d%o0~$eBfOdwD0hf3} z@6u&KuZIwqbLXA~3V>OKu}U^58cGGl3tu)YoK9499-DNK-iM0n2y$X zUc+ET4_EJ1)44EGW2HheBUxMXIsDyQ4MN_$r0nOJvuL9ISTmjX^P#0#>VMZSA@GD3 zOPk|3oGB}f^xOTe!;5<@L>MvVU8Tp~71(rQfRS;h> zG=!%M69xhdyecjRFhPv(07%5Ff`f|WncPFz3My9^BA-WiYjQ#2Ebk-IXG43=W=x#N zZtEgsv~b8Yy&OyEJ_ORv{|l~f4hkQm)K7movmra&Q!Oi3-v35rz~@e%|EnSf7O4I@0; zFs`F!Y-s5`a6zU)s>Y&X(HWFvfR)otE5dhP^=Mc-=Xeqf3s@J~_Ck>ESKz%6DiFdI zR4&}yCWL|eU!8!XYehjEKc6@Rv({JMoYfpH64LgXyubp_4KA=!bOIt%v@?mKuBj3Sq4ZW?`+2zea*=2cj8r*DB&$_Ew3hj=l}} zCMx>uieDfAd%N@$iFs%MnqUHwFaq(k>o9qm8Ynh#8b!?qhA%*?$WG{K;KLAv8Nr&l zD!RSbF&-^KWB!u<030cP<#?3utVyI|Kb!IcKfqd!hQ&t9eh2Xi#EB8P9Yp9VPaHY# zQO*q!Bs&HjI;=JNYa_>Mcf{sT<1WKxNdtd`io9LPaU@p3ef$f@w9dfa)+lN!6<%iI6=-8k(DUccGS&sIg`GCnKtTV>%fw5I*QC{GZg!GUt z-&|S;-~TebeKjq1;}N0zy4&}inX@?Wmrig{#Iv1z=og4gqvuwP2ZBz3B03qyYKM6r z04#xF8##qIn%5F&g^iQQfR&Y3oKyHia~CFq;4jGYku({;)m7YXu+tqHSKZpsD56qzfdeia8tnqzXttR1gBSd;U$ zyaWb>gm8jeX&1m)00u$`aUfDJD-yX9h#5d)j!JGTVI!P|ck?5{cVMaKlS%qrzg<+L zoIh2MJw8})zg2?`(+U`Qum!L`DzCNyYA`^Jl|u5fY~Tg#K7tz4{SFg|lIVeR1XP4h z5)3jl*Z}!_`X~4=RO@343=06>>PjMXH)xViV8yebGfbz^Ze>{B23d>)t`U+OG)8Lbo#tN?mn49o<#lohLnH~Uq3>PxaeLlh zc;|n>Y<8Oab!!~`UC>3C6P_1AT#1Q$Uf`3%x5U3U%YmnbH~3s^;$UEgaNxMX@exiC zr(un9e}G_v+R)drxh};+Pe}kR1-!9=8f02A1MQrFvohn^ zSLV^}aILGMER+K`#X$0qQ)vsFV8mq_y(;bdn{Fj3@8Q*Fw`eHxCrhJG&@1jE=7KBY zgD%h%_ldd^ zo}~vkZCVfcq3VL9poZj#P)z57y67wVzch;*lQ*G9&X=JPX$$c)P(O|q-lR-qY@r<2 z5Q^rxbTr?xav96N9&zQ7i}MlwfsxpYts!H&5I4&>_J9ia5~eS1vL9jutIHVkhwdAk zAf&RQ6SvX+OS(@O2MW>IH7NDOZ&}FF~5qD>RLcGqWX9Gw-T)0r1RL~`L@ zN*oyBs&l7J;+5GsVjwOk)xBck7NBcUf~1)K0x$v&nM$+8Trx4nYD&}1IOEgjyIn)y zLelQW&(GhARDAG6Dl*m-NYa8#C11sr4&7ZXDIq798roml@<_?d&P)=-1%lPsO{wO) z3LZYOlQdszXmoG>+^}3p31BO9io`y;fmuGD_&0qE0*&T zL0^Ti5s<^GQ7onchXwuYFwg>pQ4m_Fy`gZYRVweJ{qw^K{_5 zj*(dfBwX9gvdmwPXjZz*920&6(W@^*R~wX%2EY>ai#TIn3w#57L-exwD(>@(o|L*C z#}17St7n2U9L6^YRrMs%2VI4?$z+$@UqhyRSzEHs=%QGGDufZPWwq(dzo>zK%PrnF zWp5F<`VqIqaUo;4Mjq9kR_97NI9F3LpN!UCtn3p*v3ETtZbSWGLg2!1bm7-D%aZAL zUOiss;q%hmF?@~a^`A2uVG%$Ii*CAcY`#~FRyWft71Fo}6U51^{Wr>SDb)Tl(t1V- zEef;}pDTApT|YTgSVt`amVAKkxKMcH@iq2ok>VWHP*=5(*nF$U*Iqh#Nh3PQRcUKn zy#O$mp3gByTl`r|Z<1-#@QEGSvV=l5We(>w=l4VV)j2kYlgK90M-o(}mk@r1UX zIQ8({Ulf`~d%@Uc1(tSPn;Xm=Rzc~h_^7Q*P6RhxD@j3CmlVopXkeIu>~x-+;3%ps zPQJ6W?dv&yyeV^7KY*0;H{t2NvFWJb0#G08`p)+P2@?z!R51cx=FbI|OaSc$bBcto z(?t+X{vWR~;Cg_*5sv!`v=^-W45zn~x3Uj{jDUOv5wA*{AJqZHsp0NgFr^FgK3;W; zcJJsQA@vQxZlz~5xbK1OT6?RrYe=+zUpMZ&2nIVI*xuS+Rsvs~y7GIFI2-7K{Pkqx zqZGKhROEU|4Ig68#v7N3f@gp8d9v-ePI^nX(zN2S8!6V)6*iV?g^d$#8zcPO5t%Sy z=oaf9{rDf(SdOC9ilxPP)^vyB9Aaq^fo%8hGPt4^+KL`F+J8G1tQ&0L6Zy`dUfqfM z3(*pE`$wv7Q5`5$SJgrI)Gi6O6`*r~>MnO%7_mqT5t+}B2H))>%bPueI@Su#Lg;T6 zI05qja~a(UD_xzMz&msv$sD-GQ0q7%jW!KUQM&$C-XkpgDoXt~nYjh7eeM#HbUW62 zmPX?2NZlWR?SwDG1LxF$k6=u&eIZQn#rZvZ$k+yClBDl^&f3%rK^4LLNF&{g=sWZg z6U=5NemnYAhgUSxCV#qOA}0ye%N9k<6EbNUIFpbov$8iuFI@_+_k3?3v$?7HElRe$ z&3-#JK9)dP$cLpohmjT5w?{_eBqT53+7{-IgP}{7y&2v&=%Kmuf*lzj(3PCr30_^< zgsB^JowlyeVvSasJ{MdHoTEm=C%b1sii5`2Q( zSTQI?4Xk=BYEVhhMj3A?`Z5h+J=f)VxtPRQr(D-;0zW1k1knj+7iB&qc;0x{BzLG7 zf4{9tVTJjroxCq*KHiJL?g!Jd<_v_CtHUN+W*PLNx7YoY%dMWe&fjBedxgFvPs!km zv^C73Thp`WG%YG=`t`5y`7QGkBH&c|b$cSG^Uj5|CdC(BS z{Ug=gAhLS&+I$i!825UK*XNc}Kw=zT3pUtMKtZ@&-x?%Hu527`JXZIj^Xb!7Yu0t~ z$5gm~0eKFyUZS0!fR3OSfwLjZ(X75+EQofELJn#NEFGvn$leKzU>bxI7vtF>xX}qS z5A(oHV3bw!-=EY!^$GmN#qW2&Qx{l>(uL8s90dt}>vxC)*jh0w0G~tnj6_v#!}nu+ zzv2o~NRyZlww@B*5`|&Sc%^a3*1&7Tg~1kZCQ(~BGWifXcp(DbEf|qA2Qju)PTYrD zV?j~d2AS#d8}c?D;z!^}@<$(G7EMR{vj`TghTr;jlryjg{B%b=u6m}Cu~6RQDSiGf zFyT($d$3afJkZ=wvx@l5@+y4>&=O)B+{ABVu0V-*>V3Wn>(IY>G$eL>_vfSpXbTPS zS%h$!$D;V!Lz4LL6oVh(dDNMCQca1Mw4hoJ@)&dQbXkM=AjS5!09rW{I}OIQtz9sh zUqPytK;JRB3i}spF@7{Wn##e1vyo%e;B@ko3Crxt- ziBF#wO{f@4)i&avM*z0>UKojnPc<&YWA6bZ&i)oetcuzS`H>V&M9am9evV&Zl^?}_ z0BHX2-bIachrjwsv7w=L-9x>~h(e^ipDBf|8y_=!ulc9OCDM9jK>;M1NloQ)1qJ`J z+x1ZPILE3=B|C((;Og6bo32vO2cwn{W%duNmA-fS?=Qd@BOhpiu;Sc%Pk&P(%RR?F z>!0=Jg!k5jIR7}`p9^ZNK8z=r-Y~+2p7|X7KZG$(LPd6pFnB_Lrf@wvuhUt-vmbiWpxG>1wUKzqvf~@qvTc9Ye)0Ze9`YXn+3jn&IYqULnk+ z^|x*A+3MVgJELJh0{Z}_7%PlSB`D{NWcu;2rmVH30qFhBb$>c(}*>6t~Kv{U3s0_?XJr0tgQ4oihtke?RI>BqPhyK--uf z{wSht?1C!Bqi6B+Ua$-;0KYRxv;BDLfyEF$~+_so4V zj~>J;4}4042i0_Rbjr(V?k7{J^z=tT34`NKSYq8n6O8w6Jg?);IW)4$@l}oPS90rymeIiFam$A7>|6FAHU5 za#xFFzy-|J5*lgyY63NI44<&>wj>g?!j%q;&mHs$)YbkHZw+78Q4tEFy}ie48MqZ@ zC<(yw)Aun2*E&>o_;WoOFknJB;I;%s`1S7>OPsltbAWT0b8ES&xvAOyT@cG5NaT*d zGe`(<^!4=hPm^KcE}hd6+9>>nzBXCCci6w_()D29WopdpwQhn0^JA8IJnp?0t`6c5 z2Vw11`nhGD6e^l+5m^=3w-s18dH7YU(tXztN=wHWpbwPrA!GaZQQPxpZ`t^@qq*Jb zUX$iG@2%bM+%|Ylf$49RoqyvP&lUh zZcL_F@Z7E=quv-8su;%$;ayakpC3qfMg=zS{Y!P$X#%J6$al#+p#zZklpzW!s?g$x z0+1+T-9W}-80ZiPRhpTt$1mv<`PVku94btMVLCJMC2TFUZ;|ZIonH3>oK%)#u%Ll( zc9bfwp_p@zcHJ~l$yiWfps%jZ%m@iM2p&HLsbuxpuK3D1u;VHlbogbNW%&6SZ_c!H zeC_17lqMavHM4waMuFaHN0N{B?sbM58B!Nd)AkE#Oa9d9oJG13SGDHfI5;t z+O;CkoYaN8lQ)x4(dp6wq0EO>%rCMoo$F_4E`Hrgnkx&HgTc)3Zs;(WwUFsj+_&#Z zlAzcP&;+|+N=k$YAGv47_k9(xz|O_QZiKWX6v;FpT=`Q_7cyMd6y;aUC;9KtfRX)^ zhJKQe+N*oPjb=qhXsk0eXDC+4$5a<$>vekEj-Hxxayf~4kw22^6?@h~W4gw?jMY*U z$UBoZ@6!!aD~WtaP6JF^P0TT97on#>x*C=e&HT0D70Kt`9;EeZfL@r#rEcbHEAGais^Q!K6sn)D^M0xebnMyF zvFIhcNnK~&ONr#je9!KKlInByY4yq1+SC3lGV`;h`);<59o%Ytt>M*bQ9FlevQ^3V zQbJQeLqB`rV(0@?#=*+J+Z3-e@>G+L$Y~l=FXPyqjN;p9Tq^fM{`1gZt%&o(r_0!ZaP4|){v(;A0@{4(XJp% zFpRW;!RO%BV`NN+1gyulMU;ZouSvu^UDIoIs^l>hUO6=L-=Jrvyg^d7v%tx~sj{SPiS%@DKOKXz62t$P#e z9!YNG!_PIR8c$xPYzUNcof}Y*mA>b}AG43E3%VPY3f>YHl?e);wsv8kvwy&*t=qz_ z>B$M~%8ml9R`s^fm!iUcf87hZSBDvG9XxAhDf_P6y<)@Fl~TU?P1n0q2Nm_v+zbvuGvUCmUb#H~Hnq%q6TsdIPML@$V)xvql0Moi#$h(jVD_F(K%o8GSb>905Z z*_k0{!kn%kM+uN_6&g(%B(XKfBtFM(XQLJF8_vAAWxGuvGqrEtqQvk`m*n5yI$pl> z4ny);x9~F4=rGeShS>HuMd1z>C%T$*Y}nVjVkA9^P`mh`ik3#enP;M5NsC0~@4U#G9u_U~iDUQ#d>^uk!WnNFHLhFJ$RRTtXNWb)VRN7J z2?hOL@lICA*^C|WnuL~NcaJIcx2w0!eSzHUDK#Hzi0$F~nL-GNCOVM^6;nJUxfDr7Dz@EsWm zl(b#GF@SM>^~sLLhx=bIs*WG&joxzfO(6YK!LquKtmZla@1)0#W5-sWO}*OUeQ9&C zSIFs@amBP0aZ~_lWynhWl4sfROWc~2{B(U=AOG1KSpMwM>k@lY0X04)#7r$Q`mPyC zR@O~@aA#zbdFXe1C9Y_>*>rl7s80 zSd4K?{%2awp`Yz0>E&A;om5M-5?gMknV!E;W~0B-z}Cc~KK|12pNx@DEgKzIDm`dC z$HMRPYHyIrGIWm?U9C84#K3-~Mg3k^`TXJ+;@{b3R}7`eu1@i%sR6JpK1#Nu+|lb6qGsC7a`RhJWw&;MeZ{`j)$jveo2 z**~KT*~u)gGrDRYDDHDu@v?N5d9PD$5f<;FY}qz#Z~KXXB>NcP4Pu~jKHqX?+KRe? zb}9dq6&22pe9>3W)eOzaefsr4O*vWaaqzc2AvUjv z-BxIo?hIc$c435{DJ6dBL1t`M;x4g(>C)L@)v}LC3tk-C9mwEwU#xyJfg#XPb<>>O zFk>BSoy?PWD;Md0yS6qXk3^RVBeyKvq@g2y<>U+g)$0^G-YoIxynm&^qit^2m!7{i zL9uW3f`eUL>|PtXzZo3Ku+RTVQxaml4B>l4BLh{3(K^hwVFMv;=RM; z{5$2FQ_yzlHr*j=Bde-d)eZlFCS6Lqg+RP@9fy+8_=@a+rm_p z+!toEsWQQ8n}vd5XwBxTw!Akxgc5&+WS)yLLg($h9^E};63>Ut^M8=DL2+5=qo;YB zw+G%l=r{2Go}|tUcegu!GsqvRj5ChyI3;zzwP#~it<#Ya*78G6$4EZGeW&>uf4{%+ z)%;Kb^U_rd)?pF}8(+UqP?C~ZcC*`UCSN6LMXP+-wlgU=1-o5T`wVA$wj>(XZ=7SW zW^Z4eXI)*}J+0yq-5}$~OD-RgIIuahepyb;y0Jai?EfBGs(3+$E-Dt6AZ~EtZ(PL< zj**dP`{8d?PG;Q+V~fx6D6HdSrps_oM`d~S!3}@v8kQD!bhkwR*j)ze$t8KHHueq$ z^sGaP9z%W|!|$9<+z9G{%sh>G*BklymS+5Na#2mo+Hi=LX>4CSwyXFT$usv;%iO1p zN>uumVaAt5KjpD&gJoZQMEJkf7oF8!u!zct6xg!_@qb=X7Af7uIJ`aA`a;+rZH;Nj zvqm6HjAp%1-d+5%hL+#-Xeu(U;fOYo{*Qe3e&+Pm7Uy+!=<+G;ZGLZSlo8Msb2a8+{q4WwFY^@d zwN7hzC7PqVC3t+@A^EwP-fJl5Od}Xu#)mZQ5(Q=m?*F`EuC4AjU+KAuD0_vAL$pU# zyJ@JWns${*)Xi-MPIKh1MLZm1SKVGAwYKZA(NCMPQTpa8zI(&hZZV(yHO58#|<1@{Eu8k(Y1M zcbR9L&i^#x=<*k%HT(ZyiCKeHx38jY54}Fey=gbHhJ-3Rov~Z<-Z=zZUOn^1?#*jc ze8e!}>z_}~mZzSPv)s}%^Y_58%Z^EMAf?TK1rS`?ufgv#hMu zDyrLaLbS8$dfYRmUK@6K_MG0Ns<)Je=o|M0l%4(EREb>07fTyxH|U!?ofOjie*58{ zPLW%2qyn#ixTAFzsReL+r>Tq*BEfcl`53(`$L4 zv}fEV(RT|RW?NpO&wvO9$C-ge8}o*a{R}=_)5+Z9w3T%4`|n|9Q?Fvfu{9f9wkJGn z-?@LAtH!I=t8I*JCxt%FxWYfr`$kXHK+|^q6KF$6U4efGidQw;_Xcf`F?wk8?5)J!3{$Ta7q*#EHOZ;{*j^@IEk$J>sLeDaj28D3QS`|oK7^RIvPtdiPO*@hN3 zzgUMX50k%ydq>ojtkj)Z`u$v$TVqn}Zd3_5-Gr~-S$--xC}f~2)EQ@&;zXg0ez<(V5^j?;9`E9zh!7JfP z^U8d-Q6(>PeTlccCFhtR5ntB7cV{Qs8 z^tIY&Erg^y-5SH@KM?4?NWu2?=J&rXkxX}4N1-PgZ?xIH^vr<1IyQg*{M$$V)_6#f z-kz*Z7q!TCk&%!;u}c1sM@_G`MC`i5hkrR~)H(2VU3co3R?*zGr!mcK_fp=5~s8L2~@njMv`wKi~K@#XG(G)M2fQbbr(TzV_8O)Wa&W z(UWOoi>qfvOZfhb-M*Zed(iRkf!-|!aaWJ+d^caSviKsuZnH$Qd8!J#IY~^>U13ww zhVcUz)wW7D(OWk!Gl;MMlvv7nzF@hE`}^yh^Xn#D7Mh4rF=1xFRsNd(GshM8`EV|B z7H~{Ci(#qK74W|RA|~c@W{B>c`8&zddiF(~^ zy%o(bMs~N=Cz*)(ci^I(e~wn}X@M+{g!CDyq0)WbQS zG=FWk?bFzH&^;r5-zV(E2^7Cs!fWW=KMVaOCLSJJy$(e5xKArwd~#sN?;854K=CJg z`hv7)+hq#WSz7yP-sw3O9GT$aHc&sLdqq7$U3Xb6ByOO-m#Fg?5$Wj-7^7bhb$g%; zZmH!v#xsX03s(|xUBuFG;Ab&I3|!!80${QZ*#H(X7nd~~5o7EqL|~)VMiHLt);usR zRq&xMM$#B(&VtLm2Ub6Ic5$Sj>2Ja56GrgD*YPnHqOJdI(Yy#@BB5%6QhQ+>Nt~2` zyfG^^J@Ea9ajoLIj}+Lr0ZNwgOm1-e-7j0P>C@8AELEH?6591!4Zn?m=KWB>xNdpm z-DbDKt=`dTzjqnUkn8n&x>uy!e0klkE1N~<1%%H$E$iu94S|BPH-BRmo)&g zoS%L3-iD9zWFj8S)OnNx{dfg_ujaB{r zs(ppdT64N`0ga^5humIZAk6lH5p(o$Wyk{ovy0rZHDb*@`;)he*RD0HP7KlZp%hOA)**lutx5UipTdzzwa}W7J5*>`m3j)O*5Cg!vh=pW9QD#=)xy>5p6PZ05 z=DDmfIBGq^hy!~isr3Y(>f@*&lY#L(ri*`1`kn<$Y3!BMEIlvlPi#RC`}zDPiYRC? zLhM35eY}zY4n_DD`*?X3{)=qHi68E!I8uKHqEoqc9{dz7?R6+|iIvI(I~{kQII$V# zXg^cWi>v<%`;nJFM?ExEefHAqf-Dhb6kfILy||n`x8;!1jE{;!*l^pHv7fjvFc+jR z##M?znCt1PKQ@oKr+m%~7eoG#{{R-TDOgzuC@%PI*^?}?Gkf?D#{||-9xj!O7u%e@ zgYE8R|Es1(4&mu92152p0iXPj>!B&k74sS5KAho+#GKV7Dn|uSVSxL`ec+1)D<`V( zfK@tf?LW4}yXSXta0BPxVK$)W>P{3%%Ks(SFErRm)Ce=6bftj_J8zng5K<>7Dti4* zqN@MJA67KyFc@WvfI4`9U4>8*90EEoLM*J=VDTj*LCMnz z#S*yx52OKHsT-N(2uZDZptgI#hdSUaKQt`&@d^n5>ip%Bu46rM5AjQXY9ON73Q;;L zZd^1@A7tKJ<*=w03Qi*rw2mYBJ%Q4S`rZn!^{@ga{4bVr&a|3p=ZA z4LGqCg%cf>?M(hC$k>R8CBne(hUAp)TkH>arU0@`{5l7$-B;Q<-1W@7m~b zdon&BU@I5j=+X;p!{LN(Qb;oQ!#ysFqbnBOMOVEhpI3VyQ5`}@w8CZ^s2&cqSw12A zp&t=IV2+%PqpCKGtS>QKb+pF$qk-zcdeM(-)Gc~VuC({IM41wiR(R|%FFq4@z=X9j zV4+qp?4t2~vf$<;=U_OG1TkEIDfYc*2O-=EE%PsX5q3Z|WN`d*%RY+-d(Vn^@@YoM?WG_c*C_=0Se+qmX9NK+PW;HlCVp=s z_%wc9rs-(z<5Dy`D<_nxmJ)H#!|;6Uy`9OCOkrmGopz`FC-aPI)|1o*Ja3< z>t|!N@tap<^!U7q$$mlY$yeE&?2>W|CDWFCwg<;e0*KkwY|iJgCtQMtq2?w5T?DLc zus}FKAkV;J)5z7a1H%HiFj%X&Lf7FM%vV6<`iR`>HGGgv1LlY(mXn{x^_Cn@jl-9! zihmo52T25P#D#Mz!q>&%ukiT&Dzo7t_3kgl6&3sI1-R=$LPhkSW?*lwqOLU9Pttx}DJ8FK-kVUG8y_5Sw_;DIWg?k-p%~Lj|ixB(ZYYbMs3&OzqGeNiW7jPoPjW{7gOB^tqCzDST*aipFCndj-I@k z6`~LANHM4Da{lFYia-g_8}TV0dc5l2O2EyRoJ{+}L1XL{&VaP}Y2ZhF@9V zA#fHWqmkK{0K@;q8X!oF^>jUa<3HS6I-B7NWuF!%h>L=|iU?KMN2P^cuWuT^Ydr4x zJ@<0V-{X%__Gz2rR}8*?cI4aTwVHi*I{FKE&u-?MAgU+r1X;Awe*z`r2;}vP3kci0 zd#dVPVhP*>3*bhy-%}R`0Rt767Dn9L{_#{}ov1mT^2&#l{OsQ5I$3ixd!9@dPYgEy zdZ7i_9L=jc;FcPy&MP3o-K*|fZ>ltEypks0g1v3C<2}OM^;9@n z9^}AyURhBdxgo48X=t8tj!WPhw-aifngNHFUgs$5u1lEX?T^}gmIKyn6a2bG;?q?Pf=&Z=5f}baSirg$_Kn#^|1asLxqfc`| zsU!+uVm)2+G@-*s^eJ_kgrpKDfgQ*kPBlQ;O*8j6-Qb-pkJqEeY_P5!QZeU)a^5TOuVLW z3lCvpAa>j0Nw}bC6qG{rl_jwS$cJd>%6ZuIrGD`T#Yk0W8c(jT84YgY# zsmfLkT=wpkglTM%Od^lcj!6=W+8U#tLQJPwYz zR#6f7WHxgLZp8JB^IWYWpdB1w^EF+GllUedrmC46*ZG*4e;v$m_aK>?+u4>~J^uE+ zIjoeYE-Zch=P--}0DRuDcXo(M*j*eRQ4YGTgP$TG`+~)oDV4T0eN)&oN#YC^zaTj3 zEHIY|Q11K+yK39;V_w_X)$1kWdKnC#8YrV!)si1xA-jroyDy4`KHO0$c12>>5}4N` zp*IGRppEf#jS7%c?$9ircp=Ffae?apj*ypa({XW0@dJKCp&biY%O52avD2HrYx@qx zu6}%$9sEUTcNaKy#XvfP7&sas=kxS$_5gG%29&zi2(KRxB(B{tMAAPdRaEd;yT^4I zYI9nKSofYyc1r|{abfb7cC=S*pMNj-hF1;#yJto1IC_xySnR-Z4>?rZGqPlw)D%+Y z2p29|z)J_Az&(vSQ2=v6PqzFPR5Ii&;wbZ;5c$1qgK%Y zdz^* zD@L4phnh`b)l8Ubr~Q^fxEDOTm%^(dwlritUKysgtTq0N>?TzWI1nv^r!M`OI>q?+ z<27-cVW2C*=H8yXf^h&lD{M)$`wuS<9|D(3lC6xSq^%5uBU2cPp-c?x@QhW>DDo+g7d9;3XilYE#l zUK!|~)jFcOUijmh&^3Ox`+JX$0Mp-r3>zs^Lk2w2BR5X27LbN@rbgj|d$!zGToGp7 z1%-tL%A7o|%sCfF3|_1+R4lYA>e-$-dW`g!8XJ?h!1?XknfmV8yT_Q`hy?-!)D=g( zf&hljgu23vNB~B{gK+9*7`{z{?s^bSciJXD6v^vBE-4)TM!N%dAQsppj6g_CU=vx)OqQk@Q>UHgwJ+$967 z27uKLVJ>S4KE*9T3mn#F>xZfb47z0fbs^5#?(yvL^5B;Gj#eyyb=?-8RPsQ2|A{%v zSpdGBH4YQ1FwR6+BSJLbcSU!Va~rAkw6FH%VcikIM~h#o?T=j;7o2uiFISY%;j#=q z0o#~Jbtm>8kLi%}KY2@4?}5q&OB0c8^9kDr`QTXrr=h{GoL{#;+`KGc<=qd7m<$cu z`$xuf$%c$)TXECJ=sG~|x8qNFEmh$SeU!(Ku&Pup>t-MMN=0j(L6@F@ZA)aijPlDi zK-$|Z-qXM`F9Q0RnQfVEeF0CskCGrKfSnz?Gi3HT3Z|aX`STzjw@5T-B(ahtd_*<# zeu+4!1_WTC{l?cUAv`N+9tUJS4y@H7?!UOZ`1avY4o*{Q_yZ1rIY?azsX=wI;q9Gu zLAxQZ%IY&Szpkxx4_5KaI|&|8U>$h5Yp=q8vn;3$rlvtMJJvAnaCf&YnGYhT24`_C zM z_{}Cv(UZ^c{k?cq30RxHWYNSv{0@d~WHps`R4pztc?Ib^~`MfQ~K{e1H5c zUriW0zDf4gO3s?)-uEDm*qz)6PLsf>4Kd2gRB*dwwO@_#U~^U2rJWBy-uhVY zd0#VlWXzxFoaK9Pw?WEx7#qMy0nDpwNJy7vD+JoXy9k`)XOEvJtVB$G5R?$kUjzCk zU+bG1{eltByIhr(NBn=JfA*v1Ps1L6RWK(8AUICOpBeo^aP zXJ2F(^8mkr3wMhpxJt%6h|i1Fnd--$aYn{8=IuT_%M~bO*YinQY&&l6^MSl>W zvG&g_-60u@7s~h+acOJSn3+AA*;C}@kT%)5lWoV}+lV06uBvZ3=3FxU#JQQFvXc8^ z8Xrb2iYY7hCI|DkU(RX#Wzm=S$mM{jTNnR;%?WqNZ2}AihN1sU|Ajt^_k`eY3l&I= zvE{gu6+8{ZWO^Gzfe&3k=50NwwC>Z+i$S#uwS^hLnK5CofiU$zD*~m0*R0van}Eo; z)j;%f`-wf4)+I^Yvkw6KxJsIPs|X;a)qE*&7T?rMfGwa^Cs`-pad}QB5CF}T_+I+S zjt57~q45OwsGOH2%pNSqavc`8IN8kppT7Q^^Z1S03q>ij^SYzkHlvH)s(1PXBq4(aTxIQ!crff#3a$BKC$=bbj<9O#r#eI*K=xaw??Cg*7StL%CnP zmqI^9SZ@p1+z3<(6C_9^dxK0GQ2ar=n^YKUbqUB?I)GSJ#e?mSsK?HRAQ5!r4@Y4| zPu*ZZ$cvDRU6~owD`Z-t!`%y3>2?zTX4a8Hj8HyEiGby7ZapCh+!DN2j6ZTyA)5-h1G0CII^y;y+!6guU}Rw3pjQ>GFx)cPHjw7(}|9M#__E zpO*L+)fK0@Z0e{pT&H-Z;F-SWZJ_aZyHbIRq9E5n{?EF?9{DZ?Hj{ z0+kNp`;d7AFfpBZGL!Tm;gVaxpQKEwMi#UeD726&zu4qD29YsAvjJO2A)1W6Ym%j) ze0l4Mnj>0_LC@p?AaYqfP9gjVIFGdj#qV%-wU z-~?5TBy5&aJ#30!MXaNT)3c~p+rH<<(FBVl&R#hCVu#6Qg#Ff-_J}*i!i2R^?@m$? zq-O~fl&23@`!C7*6O(0pI5(W6+j`yiR z3qkfvaMhM7I|}&cX&VALpl?%X%|Ewf9sBp^|o3ed-y~!hXgy7#;$$K*rGKURpS2``3jaaKTrM0XwqnlIg z%;<~ut@$PqGcz;uciZ9T5#D20dOyV$N=qi>k6%%s151%W6ln^gUsbzmb$7WLJzqdY zJtkO^DrqYT>pDnNq^+rY*jlLr6%*2j;K&pP$=P2yz=`@E3+~HPO!{I_zWao>r^KST z4U7ZjGhBpe1!eo~b!gGtVqv zJ_xB?FGZ~gXlU&ahrCP4Oq9X|v7qKDat$015Yw-%BQT37mN8sB{Ne%QKPia`oaS5}Z5a{dlFRFq@+XDJ%3ib2+vgb&es&4m?1tIeWoy z5>vvhHIl*k21l-@l+Z%)k`Y$W7+eLvEV8q`@{xM#DE6@M8)tXO;ox^3Ii}HWm14%9 z)XzNPrne|ggYNzRo31HJdnW@u`ZW+8*D3<31VK|)pxJ2_M*qC@&&Mu0L|cT!9^t3q ztc?%3n9ZUOQ?PP47!U#>OvTkatoJTZs0i%g(49h%Eegv1BS7F5CRCEi+&wRGZG?87 znqq^B&?eW^wV!WE`e6eW4HA+i(RROSOiLjqWh8zMy1^PECHt<-l!gAq1)N0nnbZjaH<&j1`CO^la}RKAd$) ztv2$fyMD-(9)1A(=7|I7?v;<=?o=pdov$;_zZ6p9!Mv+a(O`EG!|k&)X)U5P2?aCsQ#rwLGc`? zMe*S&5#QylPn=2CcX_&M_r6EW@RR|k)};J!h^J->3LjjiX{5YA=DSi0L;u2b+x-Xn ztmb{Xk%LkLzZ&GFNgBhK*5mup6Vq3Xfp_V z)DVSJ9X?BFyr=A2E*LJGORwGw0`sul;@^=g8USM|SoO3GZY zxxF!a3}z(TXQ7Rt|JvjE>Fz#TC*?ahi#h1JV zplfcy)nbWKz#DLhvj?YW=1DYn%!=h&kdgGPDe^5Z zzLd~?HDQ5-*_ti^`ZCRwu0QO323Vm(*-zgAo z78~U8csT!&u9XcPolo1>*B9#E6q|Y@)aIsjz`5Daqw4O_v%EK+3|l0rQhieO&c2k4 zmdAhSphe&*W=ti`>Caw0adbSL^vsq@br|`c8)wqKUYe*VB^%y)fn(d5{S`T$n?`EA z4CC1~WlnoYZ?I$MIU54I3S%xJ?OEOrFRPu|Hk%k<5GpcvB^p2~m)nIvX{rJI55Af|aDG|J{u)fShjOY6%&ktUKRxp>eGkf#3-~rw)IOjA4 zvAp%RBGu3e(bH9p+hq!@hc05kfhj0bOHuN_IsiAFtU5!`kqQ=knHW!;@`EPF^)$uVHk)nUr z$VRgAO|)1wVkiK59wa-BfpItf^;}r0T)K5)AF(eV3!FTF&O8?L+y}@I0Lxj(MQqzT z9mLA{OEf=mAzcu}$ZA7d$upO8pMWw%H#ZCIy#o=87wejy9>lT8oT>7#t*plS6$z^i z7;ut@5hMZ9kj*Fjg(2AS#(f@NnWS$NB!Kj)Id;U0p^Gjli@b}G((~Me4T>7l*0Sd4 z#qCeZ8~GrKXbaF=A>4Np^f}x@qR=#?jQ(K*E=wTGZVa>uv&3Brf+c-4pqGMrHX27e z7+^=N7DF3r+|Xd}bam`)@0TBCS)DG4WU|`ktB23%Tyy2y)_m352*kTLeD?_Da+o*d zdqE6PuOvVntF4tTLi~u!zOjHW`|p!+y8-~4xvKwv*!u2xD#P~i``Bb=CLt{usSrsV znUy$J*`zWHSsCG^K@=)dSqEhtWt9=(NFrPI2qoEj&-1&V=Xl@u^Zk5&*B|FR&;6`> zUGu)K>+VO%ALSgc)U!&%@^$*tTdM!`H#V(Pkr7^HSA}~(Y-Sz%uaL293Qav%-kGp^ z)kGgCS8Mt7R$?ms}M7V@$=N63=X6=HG)bA_@l%a z@0)BuIfuX4BXIcug1n5j0UxLj`%h;SQ;Z>`1+=9pe@1cq6#RG@OT3)!bd;LH;)SBy|-&ca$xO%;Rng` zl>=13BXcP*36?_7C>R-3y# zA9j{B-1)=a7j^sHF`_VRKSDBI2*Iii`dPDJz)UTyJ3fg@!nBAVaUh{3WCw4Tm;ReO zH9+1-4D>B=+l|94)8~$`tv}P@=QEvVU4^tA_FONo7C0`JyHj5vV4Z&m@|zuK?xq~% zSQRcXIKyM4>tc-`z+Y@rH4S*~Pq_|%@tnsXL3zd;(UNj8@bi+pk&)UrZMC*Nsh*Z) z<2RXPiZH;VK=JMflZXgaI*fV#kP*KxH6SuEQQwMw{pLPxr%&HgX=h7cs_)Mtgdo|4 zK{{0k5Og=wA+KZ+Nisn6O5MOD5ibl^obbYz7V`MJpB71bT%{rj&;pL;Pl0mr@G*eL z%8?Ez{ODc^BdQ^)9G*txNAO9PnK#o)*Ko$b)f&!79I z8U0AUf@v-*-vVWy!%qls{yTxG%p2MDJ}we0=K#wB0aIQKeNB=3^+KVFnGZK#>0Rg- z-oPlFizKm|8yjfW_Yh&VJBddSX?i13rfgmkb~p7mEq_cv)J6uyYHGC*7yjb2yT zU6yg9`wa_s?{3;0Nl5VlnF=ol$w4o~a%&N!r4)F-3<>iN-~|WZY=#WT+r*!MsUM(0 z%U$6wJ~|wZApo4pboi0Y8XdSQWM zf2y_KZiT#xJ%3-`hq&!uT-*!7*8uLp+Fw7`d=XJZ%7cIxdEPpllL!%~gkWYKxC;(C zH0njt>L-dnsY8=EQxKjJZhAIsjESIvADKUxQAqnSpboBes% z1Y{}W68(RBZU4Fj6sEdkSQ{e!ozj?yF@nb zw*I3n&pH-YyFwoY>%e#y1NtE@Md3G2T}OKX6e+sy#AnM3HxhNxtW`*L0XVS3s6|s< zPVBHBBicvkQ-q7URA6wdlX4^cEi!~1X3l-5U6FZZq25RjV3CMzxV?ZjI|s)Jr#rm| zfHAqL-@wSQJzDS43Ze{QRr1&9E+!>YOb6gT+DT~a2qM0J-VU%8!I4eK!Kzqw4K;Pg z8_?6Q^7n( z6FPk6(hF_Jv;-vt10CsFajSdL^qQzH(9$72bY45Gu7I|(M-+SRAI^@m906f!cyLV*Hm zKcdF%UWqjtOpt}WTZv%?#(4x3i?Hy)gDy6-_#)z;rS)s2;X_2R7{P*$V1wA<;5e3v zudzR>CVx*VZG5uINq;_eTkd=3w^XIJtLf$2o)-={JkVeV=gz(lKHxnxePX(rddMl6 z9?R&N9&8L4I%xY={ds3;lao}wPo-%%BB#hO$uvPhX>TYpwe>{Y)$lPsJ6+` zf|J`Pq2ePCb>YFdhDTKRZQF`(kTAqCb~HnytS!_Q8Srjt&`FMFb@eZEYS~!r%S*AR zZYext!vcIdeC^=-US&BF`!D7+$>_@Tr&Y({e8y7Ay!Yjy-ivBI#*KN~nI68)Hhg>t zp`hn6ZoC|cR0xEG6@NP{?$#+|8%WpsDCvYX3+W#1HoI4c!zU5H{=ReM#)VA2Kc6J;eh_eyOv}Y)X2ohh`f;7_(N)gW-lLf$w{u$Y`@G0EUc(JLlJQid+&CW2j{)(vQ+#cswoEbO_MnQ0QE=!q9 zbx5c)BKPpg=YN?Sz>D1+2_k=v;+Uxw8SEc1F1nL;vzJ(IJr}71B%kjm!c2kp^i)Iy z6aNO`xYDd?(9sNfiMfDLhJu2*?CdAMmF#q$^E>GWK2T3mPxA?7*d4$`+ke8ooOb$* zeMh40Lw_^@enn*az#=uM!Q^q}X=4MxE8_Q@f02>JOv`vk zq*PQY=#?mIqt8L&4bseMW?MI!Ew+}c!fhuCMH=~l^93!g+e|P)%O_b4m$J;x zN`06csY0F6x5RWd-UQLm4K;^7G$K(Y(eY&==_ z$dfx{TiA5bcI@}n-QTZP8x2Wz$zM43TVml_4KuT<%?&x<=-wLV^0gB~F3t%H1#DBx zE^B^P)go=ZWcBMuv1NQL--h`OF*Nr3NFy5^{x*sJ@%61fd%jmj&gll^{aSXbdP7&S ze0QI9Uh2Nr3a!DfIz*gLFU_vZvkS<1H6+pR%UG~pbs1I|&l$`~${4*ZHU2A&)?ulY zt7_rp$W>3lk+6pQ!|%9EmnSlTytWum*_wL7*k=7gsF9}0%ye*mXZ5mxFBRU99tLvG zYyU72sH(mw!R2o!>~nKs>AqaN(;4NGu-dolJ@Xff*XHIvuc+>tJofYJ#gZ7}3n8-i zaQI6ZwH`?}r>wQo7N+*t0IQlf^Iv8dYq9wIo<>vAW>-#HvF%DXUR&q>{v4}#c3>!4 zXj?I~U#d~PZ;ye}7wdyU+Y*N6XTO|lu{c8QkUUZTZ?snTi+PI!=!h%cUa+{mG|Qyk zs?{Yp*IwzAG`jAm(f~So)n|O0Li<16XaR6vrR61`NW1j{mk=1%Yv2) zogo?S_x+{*4)tK-*blSUatiE^qMh%|UcvjGF{fX~|5CaFwuf8K<9~LmNqpH;#`tNJ z_G?);9k%HCN7a{yA6RpJUCv^^M9g@o`(`upj8H_!Id^{*^3s7ONjrmqx-;EF6;Fg$ z!2HVZv!Y8Gu77ogCva=#zaRI7d^%vgRZvrCIM-lkZpMrYRSDh8RalTPT)|8d{#UR( zE$Juql2POEonAkw%YujNTtDtpa;?E|p{rst%iBMa zA?qfq1&(-*GRg5><0_h~r9deo3-BcWdB>hzBoBky(QGi;a7 z7f`34b@0k##@imL^QZAVP0MYF`Wbxe!vV8;r9q1GmO2Z z)sCvXKQy~;NhD5kxt$yK(Rfyspk=8_T>Hdj#)dbFvR-f^QY)(Uq-I9;+>}PCU9_45k3)57NGDw^U@l0r_i0_~7FSB13KDcZfMt8- zBiIqtq}a`{*XAE$)RGO21RhYOF+I2D`uRipV8=7++X6kpA8WU~?~-F~|ZTwY$C81HQIT5)9W_6z$QA@uSk z2It?teWL#uFUh#@ioeq3{-3m<<$?>VpA)YdzPm3r{_0*lK{DWD>y`!&lq6Uu$V@b^ zu08&YH7=2V{+WSfnaJ;+(0+BRO1D z%O)U5{QDlThhW1ifAQKEYp!=ZLA6<0>)Fnht`?cf#(6J-cV%^x4Y!}VJ%7Qbc!fXm z;h^43V}O^9i}+k=+q%%?*OPAHf6pbwOY3P84SlkV$_H**)E`%}GE*9#kuw$2?>@8# z1mo<>zgT{Gb>1G>dcHL*IPi*240Ai7x{z7q-6K^{ye1bqbU!Yi<3)E^`@0$CHi_Ml z8A>CK<+kCNZ)b$=Rwq2Q;HT1%BWv7dj=S3C{l{2$u0oJ;pL_Dlb{uv5W*yg4Vd~S& zAF>}x%jQlqpZOE|*~EiAKknvPD?0Iiwzp{q#lpE8k7uQ4PceThhQXoR!_trM{d|4> zz52jkZXQ$9J%l%OSi1D<^o<#6Nw>MK`=zUTM85raey!=6#;NOAW&Z@jK*Np6t=x;{ zc{5puSl`V{+*MdHeVEWq|M;fA^?s^Pt-o|TG; z+HA?u>GFH5efq~^anlKJ^~SanE*z=Y1K2jtx$He)=56c!(?EJeag%&)`MSlXqHWXi82*D;hRZNYs4Dhm6-c9Hk=Y7T|!b@d%vS^d& z;+ed(-~LRMN7sBGzu!S`R>v!w`^WbSkWSSJxGG5p(BE_EIX2<^0+aedoptY*5^zgE zxy?KK^}VwP{;q}1D1YAaex|aa`i|(N*KrkrL+u^w67l!!*#>UsRI7;qkT=r|yp#I_&j%D(}frM4LO;Y#c!I->vV@csb(*zA*v?s|8nkAq^E=Y_NliJB)K$a3QU%rzT4k5Yo=Cne2k`CIY_cYs%>Vt%-B6E*;ntJ`?UAZmBF4vCwO#+~ebEG#ReEvA~)i z-?>yfWOQ?GeJ$x-3y;dI-BknExNf!q&(7L*6QA|h#V?bM62E1C@!T4Hml5eQobxoo0+a1VtRnPOAmX>v@W`i;fsQ4%^;i1}7e@C-_ucgE?TA+AbbMCM z$6fg=_Vy_wm1kae(^%h(#*6cCRfaUh9Z>3=yy3-tyQ-8H>Pz-}35(PZdL&$+ z$-#hsK2RNnUST0T1V*qJXu-e){4La>k2zMCj{UkQD20z1fV-OmFFrd25%b@-1k>z4 z9_W5)LwP(+Kb1&ar3D43E!^JdlIKbQze0Qhv~vKLjik<#sD_68FqEyY+=Lq3uApoM z<$C9`4QQcJVSj)P5WS3;H6jVnUi8WK^Q-KR%q_>VS3Ek7C2O`Ny)OS=yoChsy`0L#!~|yx>GD0*b1b{ zl;oSj@PA0Cc#Ze+0-0lLk<7Ra|CblZ?5pHmWcC^Ide*oIJuf%RGpcufl@$!?s(x^b zUsAP-J{ruI{5c~%Jsps~+A8~*Uun(Cs^z*L8x{&%iG^S1=H`}_E97$%i_Itv9Xhk( zHv)wR3Oy&@LPu_Bj%%TT zrUVtZ0_2Mr;)U(OW;zlQAx%fKXB-@|bV-h`_N{? zd-EV4GHAdI6IGr&-NQvO&Cm*j$7~?}uMqI}oNxcfHGU8+fe}HUT+M|k$B}((a^g^V z24$-s(hB%Gk`~ELF43C7(F|8ZZKE3mOre$G4Kz%vz{v*v?O?nr#cNY-FFqAc4>73x zYk*8gys#=*>>O~CTKAv6v))Ikn~H)QV2mhQ8wulg5@l%cLjpw*NZ? z6e(T}Xdo)K8LZA+Kw>*MF)EL!n$_Juj?J$a3y?QFjDqJCW|v_My(nf-?j5j((KaXu zubqcSBrYDxDITpIendr@QXeaEbbv|F0R$hb!AbjRfY<349DCpmfaUJeTgw|T&Jkxd zD{b}b67mMT!#(0Y%OzvCDi`(#oC^FP zg%|`w*W{02f|ywdYSrEHQu1Egeys*mcbHbEF@Riw!3XOD!Xo8kK#}Z&G~6Fj7qrAX z7{+iyz|XM4cS7`lHIy}nJESO;nCl|@96}&9AD-}G1W`EYT`^WhXpt5Z{?aj3-aEY~uu14z^#&9FP(JHqI7XnhXQp4q7oEFpx?xF1)?i~`Hi zeKTznf%qfj^$%{kwS_9I1~L~XvLLI_K;puLVH7!ZwCI8^!EiZ(8%E+WLMIg@!vq#i zd&PFR^*hbzwd_I8#8bRy2edYRJa!*kfWB%bR3sS0deds>hndgu4QtqHOcGihd z5~aM8ek#LzXO<6ArVp^6uN-@_Ll}>>Mf{{yKyM{Dtw4WLQHb^dqw#`mO@Z`ZMkiLn zOJvB0>`tq<#x2qTk`}V!`j$fXp*JGZV)k296taKUk{gKvKD%GIrWu$H9uWWOcXcH2 zP|ww8pf3gtrtN~eThKx?EFNXC{3fvF2*4=>Av8CNa=!Z|IvlgNp*v6Xv1GC2esgm9 zM``pX7&KZM3`uYCjr8gdVQ5jL8a8+Aw>%>~1rM|_!9x=YFf0!Nw7o^aRbD&&0w(}k z4sgjjlsov&3cz&y)^NZRMkPx)xGKLll?Mh)p7yr~oK>>acVgoE(^<99tY zFti4XgZsc3A*pKQ2jH+%HAg!+DhF-+9#F64WbSrfvF_Lo$t>sBOYxz zvO8;a!f37RWeX_i*?$H)0YHFBV@T9`_3fYfPi+^f2JDnp+> z6lN)Zpyj>e8T1f;fo!9Z19!Nw9F3oDTM5LlZ7-TtThwQ=Mt#uVHfwF82X^0kVn!)fW3Z??WN+tXzzA*DY z=Twxu7KE#+s0>h)01>i+gX?PS@`&ATbiVrjFovE^A?B}jZ@QudcqSN=D>9R|X{1V- zM-tYheB0{;O1l�@xrGL17jZBOrvCDvoa&aVdRseE4V1FXFI%2?QvwyXGCORg+ z&(j)adf8NG#BV`|s-HU(V29oHQsL1_k8jnbFgil_0km0zM_?3cH}o7{=ydX1)uhx> zM#+3Q7vR^Qe3Fl+a5)z2>RuPs7b56OtTAZ|Yl=H8VsP-*5R_U_(4zbS$*pZ<_w60< zxV`>E1P77bvMYXfJ}cGy_T%Qch4iA`DmpFZfjwonG+;a!nsMSN08adX1bx?`3y&6b zG@~cLq97`~o{G)4GA1F#6?^kj3*4=4Do27+&oHvwIPu|H^LXlce1B zxdqrhe4*A3pWg{6`?N!W`hHP_ZY3}1RNOd!)u2m4w-)D%9D1LiidQD(^!wVu46EfFF0iAwNeLjV} zzJ>%|#@3~x(e&m87DX{2lUaVz75ZZC0|{LgtmCI8 zTz%;;Cv6LGU*7%T=o_hEOV;xM?+68ch}-y6Fvkc65xLNoQ}3WWLi%t<2-j~Lde^_{ zCwEsNDec$WtQv!(ZzQ0!ZB;=m3iE*5CUc$SM9B?3$wz zG}JQRXC&jdfw~&j$mm1%$6SZ6KRT>xbpe9Ynnd{Nxuh zB7_WDf>~5aB8lliN`pX26h$7;hB{HZAqSVZ%f#{~dIcsHcx1lvfEGm2Pn2E4prcH> zZvpU~)#S{56nVf{iYL%tAHAKhmLRnA9MT66uw$#;LT>lboiWC5~0Yu?p6Rv@gQtlUr zdzuo>-5a9C6XV~^d(xOB*(^{QBuczRCxvoen<=?1RgUAC4rHRSPOLnaA^2cdnvSm zq>BP0O&G?0sNU$3!uTQCjZ|Hdp31!IR=<200ri09 zNzPJzVzM(zndDw8b=X`4P~nM-7DKD}cWNhI*F2aElirTPG;8tGhO=vIBvR`Mw^Y@JJuT}XTxHLB0y5E-y z=HHs_1cPBGL02_WQ3xJOBM24i4MERfL?il7l8vU!=c^CVS~`b9rWL^#9yxp}vlgBI z_?!!W44>}X|IGu;L{908pxBfQ`M^Lb!tKmTUT(uez68Fnd8tGE4Ke~Cr@Hg zg&Y`*vdw6~kOuS$q@}O|51zOFqnNX>wqxg>qE~SBJVNeJq}(pN^nzzGX?qu$yw<+3 zdQW^$l|aL|GmG+f$c}M4!Zf-!AsYMyvs2-j5vlSm>?&wQ^Vx+6)BV@xN4m%XLj@lq zGPeVl%V-Md!KMV56~|a7P$nb%=96t?lFq>0ns(+wh95c=a*o1~fN`ZZLdn7 zy%#xYkxw<(Ja|Rv2>iY6pQVV*j{t>bfshV`TLb-+A|R|J7@?npp2#eb4>JNfJgZ<4 zVpLp{T8kJUnf^Mo855_f@#UVr%@1{G$%87ja60@1RJLkFA)au-v_deY2!1;oW(F`9 zgNMy8AU|QkGA^my%PPJscIHQ0xPXWC1whi}1+#LXs|*m1z*-JIg(Ay;!B-qICkUjJ zFb4F%l_mrIhc2!pNdiOYJ57@SE3_o;QpdhZ*!vdq#FtLINPF?q%m5egb*$SFy#Y@p zAs3;!mooZzr167-Keq<{GaJx*z=bt!=TV?kbW4Ycsd-yEkc!9h+XWHtaN8SI{{sCw ziBRcn#h}qtIsdgFA!va?jR;UxMw&YN1fxO+wleN+P7KfVomw-vvQc*TYy$N(EjYvo zp#NADWIzxY_=dI+j?wj;k&{9ipo9j&dqeb=4RV10@erK{tFVcLY3cp6EqpI{6@nfQ zPKUhC$W~O=D+$kM2-#<3>M=Q~^4Og~EtN z1lS*6TabDvrT~=EEsltZKKebf!D3F__`G@Huub^C<>xJ4%F_T$BKo!=Y#h|EDdtv0 z@nC`U0!xlTa03#`On%`ScF-Oums))}>%u@CxwN%#f#Ve&P}Bh=yZ@P62m9F&#=wON z7HAy+Ht_7?PH3KWz5!as14-Xs&jgc9IF4 zo>;i%>Q4pn0os+!VFq9*Cm^Yo5ZtFIT(m$v8V>vDd1zgy9<@nwAvZbm#{0TWZ)A}x zGOm#dz@Qu;z@RX+>uWEVaCTNF9)Tb3+qI+m%z837Ar&DNzCkBsGa^aakMX#2&rA=W z7Ck)vDm{~SZJ@AdWfpFX()8z~QFeLdyC##lcFAd(Tnr#SNFPz}N#`Sm5JCt{@AN*7 zr%G;+&$Wj=&y=~ts2ygger{>)bVNKux=6Z6keCRw_J|sHxM2S2OU9|(muI@uc5|Zr zKuQj~$ZA7z*G3BfL0JF#M#-PyGN)cn_VlzBdXrBu6-D5u-DT9`H%nU05V~P!6W7zz-m{_xIzl!!V=cvYiK6$11{A z8U+7_9utO?lFSQ=cOyzU0sZ3LafEmjQL1RYst^Ll9a=f137Q1!g@tqK(7B6 z2+i(u;m6=9p0z9{-dTHgPub?oB8#!_o%0YGLLYeFk6^cd4K-VKC^(>o)&DNMAe4ZT z9uA{|A&|M@?C>T+b2}qWJTLyex6l>+m8iC!8`RU(V3QiSzNA>35YmLtR))XU#Q)JH zIO8tmp_Q8bB8A8Suq#XtqyK;5T{SR1^kl}VVPixX5(dJ#?OlCRY6%nPNC0nI?XbRq zhF$=o?t2>WPdV_6NfP?#B1S?kw){U9Sb?G9|0O9yuH)%$$+>%ggpl|YE-u25T>!P; zW$`g~cbS;Vjn&mv#M%g>tX(l+5Zc*=Qy>)-gO-NFJ64woln){+D|F2lE0lo&z`DSlO~7R~hT+|jp@D!Ta-R!dS_O~E4*?mY)2B{>Y$|8z|TZ}eR< zgo!?rdFL^Y$qXHO_b1qF$Uhz5nG`_G?TAM($g1$I#SPg#Un2D)M?)_QwXa7$9M9pL3VW~ z{4a_Ta1_wmm~uc`gFuNaDi|M!^zWc1j{A$^$kG5})`2UFZ^aK(eAykk>I?H`u-?p4 zKaMbn*@IRS*EXnuNbAOcq_!bSD~~fpesGsU-iO6-t>@$`T#0mi-TUpb7=V7wEa3oy!cv?}$v$JOKrXoWp=- z4?kACvXcJS=W?m)LYLxyfr%HzNq1ldP$`%&9qu&=u^RzWi8SQ^+9RH-Q4VXZVAcV& z$$!r)pf@c+0-AP%N0sCItallO)aSVOf6!@4sk7*5(7>>tcH4g^9J!TY+Sp(#00`$< z=*DE+M&I{`5_1MbxLUzjy&MjA|#{YoCA6bFW1LI~M$*RxmZ z&=${gU_j0(6Ni_FilzgeJuM130E1XNwaUv3W0VgM`zj4pvGUBEUmNaMXVP_xyl053 z81wZHcV{UI5rLbWYduf1&u?J7YZ%-EJ%R4y)Y(_T zZzdk^8kxUTV&bZ1gj1oVg$a<{m1*}-Lm$PbxtPB3BLDfw^kG`THRRS>oPZr|MHDg-46 zdN6=u0@@wkrIgtYF`>Me(m@=7bSRQwIiZFP0iSpT9mGK-K9*fY9p`Yky3U4juR~_1 z=4`D}tLtmtbPOR&o(!<0cGjjVK0-T>5) zj}fR*!vw(Y1ezd*34~l9b*1|#xK2JaP3DIAAsER9Fx*4!oZ5LUO^s_daC1^7GHZa{ zzFm22xBvQ66%WpFioXuo&8{g;N8UEu42Bs%94LGg+H^rhpdO?Y(2xU{^&u;@Vy2-5 z<%sMdZ-vMn_DeH%Qg>!zgaQK>x7O}AcAl};0kbnyq(mD06fMYvG@1g!J0UXY*=&j@ z#XK8lD~QtFLEKmL!V>JbJP()|$Z#erOb-LojNm%jj1BTMJUgEz1}9(J)!h2PHVTOF zTl7~irXg*`mOfi=`t%}=ML41c=59 zaMQHi?N-J_-#WBU{-K6@)U#Zx4@_{cBDfi+umHe!{a3~W;H(L>X77i2E%%Fp#TnQI zgxv_SJnQ4$+LUi6=S&VFQDU)Ib@Ki&FU!RN!g}{P(+G&d=gqUS5qK!DKbP% z-`@P}*R}9E^LeJ5N7~E}th7Zx>|$G;252brUhs+&L{dZ`v>V{htcEsvIH*iELh)zt z85IS`Qcj~6URhBA61Yj75c8gnk?HtUPB|u;$MKL} z275!TvdhKtPAKJ$LF9!JxUs>1JbExN3)ux#Kp-O-FS41M;e=p2E7zMf{zMtMwVvm~_x3G2vsrZmC?eO3* zDj5F>n5-G*r>0K_a{0yQcVB#DVT2=p7w%0T2O=R*rn!8g6Jw{iG^QJ4LuF{h4cMVC zkz2=O3Ks{@v2^%jnB6czPJ(fq2s;<4)25vI+RwhrfA$~TNOaqLTd;R`_>2f>UxWk# zF8g;vDN1m5`#qczaIrz}#v%=j+uGb6L}$IlZQb%!mf<89_L0*|qoqu8V22#JyJrjc z*;ge0;3GAm&Ys;FQ5o}Klos#<9NGuzH-t-1z5hfMp$rgGMtZo%zqk4%_9%vk-a@3C z&6iLDjTnG6YRc9%Xoq35>6XV4{JsqD*j)FhsP^@=IMoyu>0VlFTHswQ;8t~;8}4%5 z)-$^&I7x<^7Fv2}k4qDb1gecCUPd?k!-N-I3Gmay@YmX2zWG&O@f#tP3bBhuMi20; z`bz=MAzF{t0SV{j;2&Z~cxlz3q0^9^2AlN6_35Q_E<$fC@8CsDIy)%4{GRj3Xyq!` zc08$8`Uy=`=-w&DFk@!83qlb>PmSQ(j10_Ogvwp`EJqKRbqq^ZM)`6@G6x|+ozsUvohe*y#zwZ`RMSM%8nHHmjne9 z07JrdYg?xXQxGI&*8bb(-APg_!dWg>5%482>j;CZlnQ)(`AnS)Bl00wrKKA16SFD+ z3>ko+@gyAsl?0Fb2KRj)$7d!Fuq}NjPh}SNxz$Pj523VSWH7QZ5Oj>QHY&~D4{`z? z5-{wCj6cm15lioM__4svIWl=`g*>9Gs}$fnMaDD1JVs#i`vkzg(kY7cOVLs2mO=~_dB}c_K|N0LJ-3RQ+PC`pubjw6 zxtzKZXBVlT)=!Tw`wwY)6QQco|@QEGq&7Xu@g3b9o-;K(mqX2M&I?!Iu%{I4_L~Nr;1= z2T>6E;HYepFKR1E@kE3TS69292(F9x$h`IMscaWWPmgXl+}2MF6R-)XXn-47J!Gj_ zmG8(Dnpjd$T35aH>iA3Hap^q+>QB`d*dwf_VfgSxY*Z) zT*ue9fZe@Yfajlh%Auk_|J=luli8%A-OA^^>4A4|?3RBDSch2@ebGDsgM0sM<^t?@ zGPJ%xy`khOKR@U=0=?LTNXZW~Rp5HeNmovw*p*sM)*EQ*efP$?q3>&xozTi69}DyM z@;smN6DH3td#W~sef*O_S4zTy1Y0GIfUZr7Rr~jsR`}KDW=IwQDyQMeTDJSnkwQ1<|Z-7_7pah-rPnD>S zR8@L*nn>@GJe3&khwSJqUhRDgSr3Ci^FW4S?#l;e6_MA!v`;<5+ ze?VEz9dN^J3rjS`R^c&gzI6rGYN@%_={BWIqu14Z$6otveyh0uhu2u`)wE~vH+1$L z33e_PA9^-kE8)S#^H1ZOYjk9r4Xw=A2h6JbrC3JELFW^staZ6|8E)AZTQLVVl-Ejf zZU#B{wiw_4$&9Oc^_^4rLUrXGE*`~E+83W94(x7pVJC!LWB@QNrobNHyANm`1ZP%W z$)`mbr7(o#V9d90M62=*r|nd;VyPMn{)_ou_NeaiH=P;JeNTn5X%NlbVJ`!~Z4CUNSDfVxp{iw=6hWF?*!0W!+Gtpf2=KZQAIS zdjV9bQl;abUq3c`Q(1J+#JKa`ZKszcC#OUNS-GzjC;g~Y4;}onNcZrY^Y7F{sc~_) z_^U1zrd=w33l=d#wH6r8#!cSw-_IAO8aS^N^&M|q+n9Qvoh?1$lfW|M?Weqb@X^(r z>4nMt#aCmLbaWvk#h5PdwWE7gMKkL{1wIA1-)y?NW^|mIL@kUb65Sd-!l`{FL1gIK)Jl``ArTN(z z!718X7sTK8FDU$BvhqJ;yMLnrt9{E?ipyfw$E*&|I6J;RBF`gsIiPFE)$wVq=L&qp zi0H-EWErO=p5gnse}U*W7WbU-k_&RCbZ)<=G-&(I%3ZpBnw9Mh=F%V8m-{vf#g7Js zi#Es>Pj(zT@#yHB*D?277j5w2@(s~EnJ$NtTAvAYHLC4CUbuTk=BjL7`>Eo8Vqr{~ zm`_jT4yx-hV~tDaddfbfd-Ykb_h7a2PUcAPUN~7SJTOy3lxmV5`B;)^~3|;m-0QxdD`Hj6c2M$ zw%yc+KLMv){yh!i3l+=2n>{wsA2y?PU5xiVY)KV`tA4J7O+R-a>)YNH>i_IB>O^5f zi0$A2WI>l57(NJ+X~@*jO2AB3k(4m8cOplV50O>LqU0lRyHRN}jGr^Yzy0|56|IXK zqpV8fzFP{#FpJ8=_}Y*lOcF_8gv=@MgRS|c7;(q^4VNlb{A!#H=!Xjvqd^Kc=x{^ z&udo&BY4lV1Rc_mG^!6yOrd4g5IMqATNz$`Dv7Fr}tR+t9pFvTbr!e5w|D9 ztXx5}+%rPrk|vCVoPjr;x&;r$fwA|TlPih)C5CXy>NmD_599F{cT1l#xeDv6KG|eD zXFXM&o!@%qjK5nSZ8pC3$_K!!l&};ELAKP|&>%$;qmt~p( z7G-~ZI+;A7=(B`BBrlx&E4 zr|i4!X+&u!dY{N-F14r|z6fQwH<^F%Nox7P9$RYT`=c5(SC@HLHe17c zuzTXv6DCHRpLAXGM4=UNJu1xTOS#%wdT9(k*ChJV9R)hl0cG4t8LyoA_CRk(X>5;B zMezb@B41jF8g6A_L@gv1W+Nny${uYpd5LEaJN0CN7?)eP9T6vLFCjJy0^g3i zkEa%->r^Gi;&kJWvH!f#?|bbR*9c7F^V~uAU4nvtjy&U_f@c4*>0=+}g>@?4d7f2k z9QmWbZ~xibA$oxMs}pw(N8h+Z!fd^bGS=ovYu-wb2cK|jf=^@Vz!Sdw{@TfJ%~Uzs z?NPap^a=tad+xGME^j#6c3zpYXX>|3Z<#m*4^;08VRdq=0>sAPNGJRS<`eVS5no6f_!+5IvIJa*+) zNn}lY%bx4bMyV-3MCCJ#=AP14NSB!`UJcp)V5rFvadgN9H|KxZJfg@&jqc*v3mhvm z=a%+n6uoW+Kjq63hPExz`?dIh8&73Qr+c5!L1z3|!C;C;kF+S`U{>*9SPlKN` z3VYkkWbhB5LfU8xKG@6NrlfQ!?-uZz)%nbEK*x5*Q#$D0km^i3*IsOClj5Z|*7URf z<1Q7|IT*7*aKl0WD+aS@nHTaIl zP8(mLN=-61cmM0-_|xO0wS9oa)k@6*#}ZaBc|STr?&SjPwAI?<+s{6%R-FJ`Uwens zdxwt$c2}McJt@(VGDpwqveeF?|hgAvX3Z5C24%#%enX&m+-yoUEvK@x!|Emj-1sz1jD-aKRZV zcd};{O@fIzH!<43y`PoJ0e^>Z9omA(T()%m&N+BsCup<4wau-**AUON1 z{1?WYHf@sHwNkd+XJzZ;FZI*D`&Q;o51n1^vK_7!3EQ_J@4@W0RO=dS6*!eEIbd^I zka<#8>dA}kKN$<<jV}!feP5VtOboc327hga{}OzEG*2wO zO}Vno*A!z@l-T65U?)4#MAQwQH6Y7(Zlqj^zcQY`CG+0$`+L>vPow=uS8MZbO;5)E z{8`!5*I-Tf<9p0SDMI)Ae85T|p?tMhQc(Tn+sC*RonHx+mpbG><9WaX$BMTMx=L1Y zM;AMb9&dm6*+eu4-(l83qkFLufbXLtQ(Ja+)!5eW-kFCn7Ztk3X;p@-_fP$yH+3~@ zk&n>OP&QMfG5S&U$1e4jvbpp0+MaL|oQlPrh@`2lSp%Bz%Hb}LqcNTKaK-6O*FJ>= zs>_3(D-Sk~sg?gfvc3cys`q>RoyEQvk;Ehl36;HK6s2qp_2l zm5?V`Cxdq0Z@hwrZ%b3o`b&1>HF4(lI+U+cr zsh*R{c6PWT1fcUSoYX!j^<>iR=?Asuf_t&5*IDMPit$)VB_!a_ z4Z0GqS+U<~heJz`+TgkkaNZJLbkjUxHM`z4Tugx?(_V*V-FnB`(hsWevrobI#vd(8 z<)hj*Zk=Rm?*Rn?Uc8#n2|Ch3y|Q`M;5k?ux{K=*_v@<{q9(IPUZ1Z$yCuG2ksXAQ z+}Nq`FEuGxDZs1=8N$I26-q`B*tIhg=hsMFf|jXfIzj*K!VTlSq&P6dX<{{rJCn;+ zZ;0NLpx(G$nD7xano3wUH~Iwnv(ojTbK}5o+;IYRmU!b%R2*Qeu;8rs`h(8g`XF>i5}R0qh+Xpi3K6Q3{W3>FWL)?L`F>ot|9*q(ecN&mBF}V{Fam zBSgPyV}DW|`ileDwYv*@AO!Wu$&!;CX$?Eo!#X^tKVYX>#)xGvYt{Uhv<&3*H0(-p zDVxenlX*jLn7LzDaBoT^2fF1Lq-0ZL8-sCAT`&@YHyOrNY!AH>lB9y0MxO~oJ6K%2 zkU7|Hu{rcU7d^V@)vVsSv7Xkud#sYxb!TU!*oC=?vx+EaJ6NE^>jltTb}O$eyz=*Z zLR!8WPWN<<+K9n(aR|7=aks&|qWO`J3cT_h41*gmJy%s6vSE%#Ex6T{^1#@B#AQF@ZHK~_kt;1qwOc$Y~l%- zZEAIW46X_UX_wl>g40h8i%N@IKFe8>zzYEf&6d*URovw!;Fd)MzJRu}_kzN5^cs7O zMaRjQ1B{caIV;!hNj#r3C)iP{+53EUZGhsJ;_&U}U^Tq)zNNzSxX{BRpE(G4U$4X< zh2z!QN2tl_Rc~Nh8Q2$?R&|ZWf!#JSXddv6PqeU)BF1rpvhHAm6bW31(&_$&zb#{D=1fUpPI2RH*R~*xKHC|TwFi{{2 z%w1R}-bwZI!}rUB5{zy+RlfDB$KLF2#pdyQkJTaBEe@V2H*~1EGju1KfIc>md;{2u z1A{4z|M>LZ$J@t&fG$pm7`37dH{eP9N0f-`D*Ke-F;gg*@d~uWb1+d%M)ZrzvUpXV zdnw_;)POt@5+BFLma^B81ZeNudUI=}{$7CU`zF>t1~MP`(y@lKbLQL5*}t9NfL~^c z_fm3kZH_;I^d{v*N6qG*B14rWW@|h(Lr=;D`wW1GLj5Sj2S7S@I>gIDW8ZUXw}4MM z-U3d&5udAURLa2}UP~&V;u4k6yV+aLr7Sem_rCd1N?`e~cgt}mMG133ozNJ@PQnQS zbvgeW*0^$-2i4rtz_t7zI27*Fm?KFg_w^i$!4MDy?e@P@&@u?=mM{y?jEt%N$gEF= zO!1xM^RnTa`HanXf{P1sbxPJz6Ew@CDV?&^G219+{gD17D>Q=LXECqs^wKTbdU`bY zXnWVBRIOh4k1f!5&&;p}K+hVQkgCmj8aTCqZy$VAEYfTR+YI6PSQSEQaDdEUt+mWg zMmo(V>EyIuTa25knLeoO<{R=`cvhP?&e;{=3v8}8#mz|nC9 zZV+VRT%X35?gdnbg7emmz43PcvFxUeT=0pHK>~^Upw9_2OS#Y|cyKGX68>-iyj+|s zdkv0%%lO|;)TP^rm2wX0wr$|7)LPgg%slxY)-jsFBjmw7`AE@kb$tbYW4hto8uwj> z;qau&&6Xd>%Q?LhfGAhHx(qp1VD|m`2Ndr;f)X9obvfYsfrINULvdgB8hep7^?NBk z1P~GR^~mmC&N(=79wvrV^d_8&nrxfwYRpYjt?d+gTln&ZDZ9?i>y(WBZ0r6Uc~WVh z@yGDGm)H>7K_=vFc-D0o?zV9f$U}T973DAG-!WFRAn(xb?0wdR;aN^2WQs#tKVs23 zgibZ+@Q-171S*>tY4;v*cq)Ecggpn@u*o1vMEyQTzW5Q@8%yyYq`MxjK6vjRucMdq zg17fq-pKrmzb7u?I28b<(6#PQ+&r@I^EKKwf*CFM#IWUmPw5X>@09}sBqvaVaho$V z;yMkyMfJ)@%Vid^w4rQqPs891#$s?l%tY^T9(!kbXqnvjkMWM@{vX%cOXhkLKk{HCl)2%J+vz38){|yM zP~1EiwEnPjb-)Ga`yzaaEL4Qpzxcw*l(QOg+XH-q*xe>w7W`qm+Xgz0BXG(cFR5`uOTG3Y0{IF0>eKqS1jIN-8G>wlOQVHSw*155Xe zbSHcj0ESIGXC?vJbG=XlPe) ztwAnvuyaa#c5Qc_T4Q;X^A_v0dksN3*MqW`aRvrW=&Ju)sCEZD9rGlKLiN3nR~&L3 z;*_Nz+z3Y$k0dY$7fibAM#eVm`Wzi z_y~9+r;-PSX0|Jp6+9>8l)^d)SP|S}ocI)P8o#*Ty?KDM zLT~$8w1tMTbkVRgy#0QRh?G43Yh=Rd>-_(=+HZ2YY3A+%0&+UP^xpwY-Z_kon4JeU z06#kM?*M9v1bLAvCf?9jT$;{iTvWd5liOJAemID{Z$tI~S$}D180+Rhv+?*za5Rk@ zO|Y30_!#(i8n(i(W`J7?FtVM4#O?GyjpL6(?aG7h+aJBAyf)styr$!Z$luB$cy!MH znGcBDL0^}vflJhAXaT){E8H;;PyVBK>MpQ7E_%ZFP;^StRO!UWf{C0UCEvvXC!srp zC%{*z3=rlZshiAc;OSX*Col}J{}nJ1GRfm`uKaW$QU!~noHJpG*=Xa9hle>W{l9`p zDU50|1xw}SuPhJU_>|opMOn+nxXx_ z51gD10U;Nd7`S{OBi+BlXpIGuKp?m7d=RsLlE0_ zduF7qpu4esJa~Muh9ck*A;^NrkOS5|0Nx;!Ir#{0iFu^FGN(zfyasU}ICQ2oiXm#r zTA0z!LFYq9P8XkxK8CP1hdDBZkG=_f!W1$*`MvH9z8|tMfxd`y>G%wGIUDM2t)ZEy!Ui2Bi-%lI@pGzoc7W50Ba?(I* z2G<*)Ts*N91LrspV~ac8*(?BmepHGJ7wh(Dv_M4;)LWDLNVKf3bKST>|5(jSLisL4 zg$v?Iy}89axzgYmg6lV^bL^eUgsuQQi}??gpv(Fnkx=~!*|~Gz>dHNwZf0~vl96ug z|B4nM=T^|jUDdD5#KF4>29q^STW+&ELE}&nqB<;RSq;J+I6!rbi-rbYJ>utO%-J*X zW%3EIo4-J_OK~~!cLUz{`D0^(L1yj2JmPWM?^n0#JycFY zn&N1JDal5#|0`7B)8FlL^&9mBvH*7`R^Z;>S-4O^A)GK=TjsWGviD1Y!EF4AIz?9% z>WHhauYQu{4#DRP$=~EDGc;j|3mD+C$OfzfI2N0k;hV!+ui#z&0ycDZ9!zU*{zt6& z@p`!U0KD|EI1s2Bho`|d1~h>VB{)l98s%kmJ4|qIpwH`xcdX==3-CrTHk=*L;^b$k zAN#ZaaPo&2#*hPaOl8*vaAf!k?E|mB0`16opRD8XO@`3pUGD#VvCNrwKuw5_lH+P+ zMPM%4F?G_b+^&4j3T1x0j%c0X$kmh?NXX8|uJk)*!4BkCff18k=@-HUV8le_;8uhU z@v#eWuUQZT16=0;+*djSS8jk?$2~~iM!yE+#R04}mecS|G0?IF35@(bfKW~^M>e4<8bJsg zKYPZ=K6>yKWD8JHQS*}R85`G=kBE$nk4zvz73p$rEd0{Z?gC#t5QP#^ylO!1dHaVQ zD8fo)Na>+K>fd{3Iy}ram~V|-XI!={=Io@doc#$=S8OQ6TSSA9quR0}V%fRj*n+4( zj-hhfr%~k zRCm6~8zn{Q&)Hk$Keq~&g0iI^v7}HbP-d|t=;hcQ#4cD1JSkWZxaS;rK7fw5U-46b`TRW3hFO zos3Puou}&#yW4PtHT!UvO5bx;ZAXPvqWbfixeiJGal(n)R$ePJj!tvB=pME&iR{l}yWLc~1xw7v?5 z(iMlGdo)1_QokR6GY&*twdK$QzFE0~(-G7|`k;e90W#qnU~aoOas*{DWTK~CQ2l!V z1;Hv!&_WDCr9G-L%1c&YAT-W+3n5#Rkstm+fwo+tfQjo0(>q#sTNO-ftQC81ZB$=g zSFvf1p~0O@yPk!%fXD5`*!|`RoC+f-jAx7H|F~$5C|?Hg9T?FdQ>Z5aM9nT-nlb zSs=Hgq>kdLAL-*29xS~SD^~5{V`0-kv_wxkt|+cqHE#xJ)<6u&7lLpOGP@-qfbfgp zra091$I5Wl*vpsR@J?kZ`u}z@de?9|m!1vCv-;G3CwrN|5aU#7VshDbv}7d>uAm{T z^I=p^OB);El6Uxya#3m1pY+r5r?P>P8GT{)a2|O040UMFH9^W_?40|5ER^~=FU1Q^ zrlYcq#S^6h6ASmc{9qksW`%fv=HBwbbd+0ee?#|@STY{{Iy~hz7y5&1)qvDEHEDOi z^_=;V>jw64xf35QM~yWgj)R7_t~uu}ZdjM|y&?4Gl?d)PitMHl>v#U9am#rV89;m> zXF%b;zn>R__xV2)rWi*c;G9afWW~N1D}t#Z4oXBWvJh-@6Z|1yrAv^oxK>PYfK^mtYe!zEjkz?vS$z$6tfM_{hO$T(^NYbh!43 zsmxL+0?P5upn#6Un6(7_H7wy@7eYT62ZNmT|F$d+WF{3`&bu56DaCPxUpc!Ck? zieKti36-Nk|dMc^47@O<6n_!NNJ zR6uuvp@>~{&;Tomf>W`wX{V{gYfrxT{x(jj-5j0U#!f2AOIJmmxp_JCiRprK=Tcv*lrsH<6v_>%09emsUjN3(+q1v`9l{H5|jKTfIJr zKRtKLnls8{9KvS$*B5+I7CcQs z3kWr6u0yx%NoQMP!dZpzokQ_b)7$+tK-dz;wq5x{I*>HA@za`sfq75)0syHgVbNRA z#64(-GF=i~`|}TF(AR}A|9Yl#zaeMcVyg*6?N4yJ9p4oY;=#FuxOg6<)Vc8QdUmPM z4LfaVVFp1R=O`+fn9|qq1bMZu>0VKpptOEpH8~(0N&i`F`u>6v+z;Eleii=b167MHYExpiKIM-pRhBIh`(ZjL4kl}gzU3&lQ zymC2Q_#me#g7nGH9a1wel}zD-I!;WCh{z1Qk!30P63OhrTg8EOoX{jhYjz;a&Fr%$ z1=&=G`OSy&>biP=PlXb8pt#qvBUjCgOnxq9?`Cud1RC7M`#4|LpZOsnl1y#0y=r&- zU*96-tjVB26MI7(l|=}B+^D2BlYO!c%1nRD z`L1wCQ#amFB*$xy+$m5af#}<-t_2uU0g^BD7OoSwhA{qNYaqyit?ZJZm)L`=F(1qq z{+e4d`pW*iN@>Y4U@hL&U-I}6xf^MGx=&5}%(rc?k8{bI3PWxLeZ%PCgUP54-WJ9I z@jdJ|;fu~^xMU3)dTq+<{F0$4Z81xtC>l<%zeT*n&YZBarY{)<}&-MAKO zSY4mwg@MBq*&c1YRCjI}RgLd&ul*I_#POiFTcFkHbb+sHtHl{-Uxn8Jvo5uQaU*e& zIZ&!NcGy2Jb(N~&<5_j3z{6XGi>-i_6Ioy-1YC(*K~+Z+!fgJIHw`5k{}0n0Zu|Zp zIv{G=UNn9OT!bGxuQB~<2L3l;K`T}Ka0 zrF5@2H+6EwqP_cXTi@Q_I`%XNvRQ-7hMTDVV_ARa2Jof<%VKaP&?SdqXwNXNS<52Z zXyJ9CCGEO34VDM~np|7HXZRZF5xgINryLhbfv?oMnhwv$yNB@`|7hsq_tj+lmkp0+ zpyvVVy`j@8`~Qw!aB{CcryE_%p=x=|!td1h|66Z7NG?^%y~K~L=YDBBKe#=fYoZf z36sl5DJszZaR*39fH7ezid#U<2*&5^<3QFSQ`hPbJt^+!TO{Z5q^i8^$&5e%k87dI z@vZyIO^oL`I42iYEagKW&|pQR!gU8YggB9>^=~%Ra{Ce}-sYflC2%@`XZ`BIh%{{b zIP>43V-5L{_@S@4DMZG=T+}vfV>8A;K=GM$`CS?11BK$xt87hno~m4?zCLf*U>@SFAz?prH3v~j@#{UqU3wa=5IIg4!ANkHIk;zlN=A|vlI zq#}E-e$&N7A;s^WYdA`G-hv9pi;D-`xJ2HZ*&jqMFM6od; zfLrZRe<~%@AyC;Wlr6i`C|G{aWY%Z=0_^-^r?H2SCg)y2dJ(+W98eW9+KLB3Pg!2> zr_I^d8OJ&%!C3`M8{&d$*`Gv?Ab$tL{p%*WYHPV2TPa61_mn>J_iQ5nBgHJvG@T1d z%o@TBT>v8aq2cxxc)kn6`<)=?b+UDilNj52GU_TH`fPKt!%6S<+K@XXdl)<6iG(2Y zzvdH!9hIDGBB1%cZ5;Z;_e9h^=Nu^53;D^<;JrNu+l$U{)^g?pf16tMcRy-`PRcfS zHle=j_h~ygx7!x9M2@P=_HF_ZW#;P2y64=2BbY~Q$%&-ELp})mb*S0=AE%;QKtoZ2m&DN<{}hv zHy6#yNl5Df1t{ZT%Gu0& zF&Za?mvB%Dws+bT-h-Jv2Qcn?hBv$kx~*4D{xfBa?asm{c#*YM`g5CQYtOqy;U zTx$+fBPRVI0GP z%rzsy4qX0#O_#x(!n?q(d9nD{!OVlfPt#8hJjyQr@IE9uYyf#FtxZ^)nZD`*Lv-Kv zPDwlm2PiqH1SHI{8nT<@wEjI{@*K#{DLHfiisv*DV9lQUXAxE&%Vh^6 z6+M)T*zm>6ya|`+#x665rkSH{^I1^O?$1bzWb8&_v(BP3mw0@hjh?xW1>v# zzS?4!yE3*l`NpD!{6tT(lqTY)&a8L9aSb)TzJ>&6;?wKd5 zWfyHy;uxPG59OSdQlB~UPDZ@gGaVt>Z)4JBRVHh8UnO#7jHqL+sF9bw(?|IR_!&jRsPh+OAqyD} zpUO-T*1zQ+aZ|m)V9X7L=~WXSC5(Xl2&p3BaWpY;n(z@jayTIH^@U%K#k24GrCH}x zSzm^3=Z7vHL~VUBrab51A;6h$;7SmnK4f$I+hf_4EGyPdmMZ+av5p%V8gDdl-Rs7( zfI_ES5Xtg|SBc#oq{K@dc)uzZzTWuQYWA>=VaZ%-w?SnAg)WbZ&~db#c+ zyKbNcQ8fE!eaN@l@4IR?Tcw2bubFwuT`Y+$E$UF;u<4zf6g9~#`~kwe;kyhF_)%xb zcTQtrsWEly>c0&}Usuv}&cytm@m$!~-N-us%qj!e;5VBm^w%XD>>vpU4x$9Y@UB8xNq1sCsxKVhG7q9o36S$Xp1stbouZBu zsDTR@`b}0hBLwWSYDrKs0MtQra-&_83f2sf%;@cfQ;3&MwZNHz?naaT4b{|E&de*H zI(yTV%8*;h=8_mUVEM3@RzeowC`xN?{2+#k5BxXs99#qME9>@h$=SH-kE_&AB_!}i zq{gftTlhuYzDo!42Ta7QwCu41Cu+zTU{V$HFlx`l*CY3RWLN>kKWDqXRhd{Def07@ zdY)T}AGjqwoPwo(?KXM(q@_zSfk*O?wdl8-G-JX3Q}?vOm_wdh4q`%RDu1nr)DdTb zmf;{_2CF0>z7TDh4{wRvX{&yO>d3aKdn9ZkQmQU}*oa+};KLQjw9q5*z|SDier^i4 zcP4`mIyVCzxo(dl2-7PCm_VqV2f|GR?7yu=npExyeV^XROP!@-J6=tG70Z8$Ons3s zorpfYo!6O7KzK=sajtp-*7TpiN8KOBMm{!<&?nW|zb)6V13O$4$KGHs3gZv5d;R+s zIiebWxdu!nFMN zD{IH2XCjl=o2K=Kyk5DYeQ1T|z4B!|ATwren;VCurLoYbY`qf;Qicg=fCzwPTt7=h zEvggC;d$4fCVV}Q1{ld84UCFNGBeb|N+$Tx9pAq4qg@_%Z`2pu(B<#jn^#hzcgUxC zXnfl723L&BlZyGMm5l9{I!j=*tr%M$r!5FNsOydwZV}LZ)z|W<{zHD+`+uEPN%(r5 zBQYNHO*^~Kae?(aRggM4kXS|L7KT;ERgZay?yi1*4zGbU$lyx7Idq*u$ZTj`j3UL& z-EPbvaD_YoQ7KDh$2-ltf2QLfIOpabr0448%v1|TIK+JX?qsrR)tdQYV#wC+mQLgF zaQVB>=@(9CXQ?0zqadn9<4ZIg`0}ciJC^6?VY*_*BhJ8PEkjstUg?0LpAwRlDy)&; z`~B8eo@D8?rRwwdfhs!%~(*8=NXe-t3iScF?M3E3hJf%AGPBoj_i6LGYfpDy3SLpj<3Oo-_y^A07aXdT@i z_Hamr62ad+c9BR$kGMV+2a4sB40GP)lt#L^{Mw~Ru{@IP<}7(+)8@}(_j7+d&b=Et zeUu=)lQfsa!1FQ8rSHRlLWb0au7nVAV0(7PJYbE>e9Km4B{EW0|c#D>R8H2c#+NdZwL#BVo zjn|^f7lP9kt|s$5ej_hjegS-g(__jR1on9EdP(TemQZc&(osoK$M5ffR9CqHipA!^I@jcYI@@}{9FJoq~%_w zPeQiVc7Ay(B@e;IoR!-jsiN}U=mGb9pI)`cGlSz_1Lt2QI2{mJBJugq$eWP|Z&q!x zv$r#mKs1_(grA-LPCe~&(sp)DYe=%mbtU6#H5?aWO*(4TMOsBxr0vUxeYmLuJ1uXa z#DQFG?S@u*<%VTW+_?*pqWro`t7Fa)WJBCv9622j-7BPhq*DB`5io$3kj=11*rIO`bu;tvth$abZj8k`R9%UGv{)>r4to%)=Xr@-=b)4)x0A) zU=l-n)95o#X!Vyv!dpf*eqZFekCJL(7AXnYP!)7dbcIm~BZ^n)=K5p5j{95f_nh$! zs_)E+(KOP!q zA0}_ZC44v#1*m^r^UNE09_MxZ;P^-+XpBE8y!()uVgym7nt=4Ng5la1d@WzRqg*d; zJE!yMpzG%eMsDv=A8mcV3nusJfRkH%)pAUOHG>}|3!2x- zE3CXz^o1G9{N?{)y8AY9W?@It6VhSbsZh6B@#p(?=6>uuCMB}3w#awX=T*wR5@#*u ztN4%EZ%1~D#Dvy8>Tk5Y&E>wCr z%Ei|@Zsxd!i|>)zI~}phZU~+S$8McGNq%*|IiX?dWg^Nn(HZJ#Rk{LRFfe6hX6CFt-tQXhXvctjXbT*PO$X& zv03M0+oFUlt%p8YAA6Q8crm-w?R0X#ealHpZY?*56K5i`nSrxGk~@WN9B+@(5SFl? z)jmWLT=($4_YVzW6Du7vEY67~GhHSuvD%Z{;lwNY55ws7_NM6FyQnj%lE-E}R**;` zkcDvZl9lI=A=l5Nfop&IG>8!zqwJYOQ`KBs#EvPL*vUyeqIRBHL0jAYj+-yPA#kPg z*3;jvW$a*$)Ib0wH~U^7mxe_ImpNv> zufB3%-v*;Q4{Vft!Ygf~p50i~edCV!!*7mCqx6X1TA5{@7Ihu33R-f;UwnGGcA@(b zpQTk}s^UeH6vIQu-Y=D3|LIKRk0s#*(3onBt+Fa|I=|iTrJPmD?~Watm^Qc8y(GlE z8sR+|`snxXt!@16p9Vsh6XmXBO9Xo#pZK|1yV|x!%5?SZPWJ|8tu`-p$G+EnpO?Jb zb%(quKz8%fr(U{t=;yiN_7~RP1w7wvefr$4FAf&u+nO6#@%c2Bx0So?VzneA_s`7R z)#TGF2HT#!_#-m8mwUc;@ayEWNq3Vv2$iVOTK(ZI&0}Fo-mwizWq< z;=cX5mzj)e&fOT)%qybFCUeIq`a!k=@-KU5V#!z8Py?B}-_YKmKLU~-=38D+oF>}( zB5f}kX|^1Zu~~<0+EqR^d2#HN+ZFF3o}rw_NlhYOVq6xVv#agqZA*G8Ks7$(@dqvI zN>cj0dv}JFp`&l>Wq#D&w8sQHv4<=+pw;nx?HkGl_j$C15UH+|uPMJpgWoJ%Usd4p zQGMr4{sGF?<;oYF>)wY7@6AgNlnEI+UJ|_H{O72P#19UEI;Vt6cWF6`l$CBZuSUw( zX}40-YG?wNFJ1mQVmmZAnd2Z`v&()1W)$NkBA;W`_4{5n+WYnRb7sNVA)f=Mw%j?J z!*v@yE%zA|4xXagS3$6r_37pg{MM0?7dW%;-2&BoVotCwp}G2_-OB@AqZ_XIy*N3& z*`{GSVN=PxnMG-c$$f?AY5KS>G(jCb`d59o=I4 zb4OtAnF>rnb$NHsww+Oq8@~SDTdu6qeX{Kg*F}nI&hM-1qh2H4yyY%h5h}Nr$0Yk* ze_Ou9wKQ*7KdI#!!Shggon>l=(TejtKMbYOaaM7#$oRgG7N}9`k>2j5j7J|=eIV!G z$bYJhnXRAtkSRppwx(fy>5{cjGuk&P%={8xXNt`G@Hb5*z1MII^68X$Ay9$t($ue} zta~R-6F+Sqxy_=ep>*QVv|PuF%>`yH(P#Xb7w+(!*F$#Oev!i8&3NBESzaf`lIb5r zJ(iD`o(PVX=urKTavm9oY&YQ1QJOkcsqqdu)f_JP9r*h2#$||PvF7fs9iLLRNTHA& zrDGc#KkgBsK7P>lC;esDeQi<3p^XM|yA$NTX6&IWR6O)aS;{Ri@N&7<8}%CTfPru` zN&ZN}%kt}4M&kPM+>i=^cbN;CNlh5Vp@7tMUYjfW>`!|ngZg~(b9ML!xs_W9qvOHk0ZhU;L zjo22|!7oSr8w+}u2aWR>QxE@G)3>5&S5P7CIM*HNv@L^ebuIfsDwB`6pQaKOtwx(l zj~y3jTByia`a~@8%f>%v4Hlk1ojX5kXhCJh`Mr#Kp&!p6r$M2h&`aaeTLF-0=BD`O zZG@l8o-eX?8OWJ1iDU4#uZ>_Xsd{3q=vw_nsAjsiQOExAs(HuKqFmAfyd&om`%MC# zI0;F9u{-E$GvfGtYWn&6;+p2qwE&Ze%sl! zW^Nj9hzTiG4f0q%b5|RsO@8OrchD$zd)M@1o6Os&Cf zd${C)h_=ZuZ<5OuOkHfjApQBV<#|sETK?!21+Ct!!|Lg}ZJFONqdTkD+}^RhZ+d#~ zi#4l>X}gLJzxeZGwa=U72PQIV{8Xn>`hTpM_4wvn*l!pcu4B0ds>E4=a+VbR*w<)(TC2kKHq4n=>;6S3(VGEkYf3K_d^7JTWE zbZg1J!+v$TU}6akzB*KVVnhDG>JJ~c zTsLq^Q-H{W+H=LqQ6YbBCu^SRC`%}2zF6jT(kqytAE!0lD;;9tJ2SE>GPZ4n!l_DO zq)|7ruC8Ogf`+CD9~L5c9JpTG_6g3ZnJd|vv5t<}CJZ_8Nk$vA&Mn~cPx!=0(=nRLd{$sa7omq=rbIj~;n=yk(X zBb5IoIqR+xI{z)UP@(x!{Bcuvdf%H``RQrLYrz1e)3s#GKTsKPLWxKi_5PUy5A7VKcvSbl8 z8uAI(&`6yzT(S=u!cQa7=-9%1=KWfh@QRU@X9RE$E;kLqiXpu zJ<*I2v|#qU*7+4?ACv}d(o-UHU48^1|0-6P+Z8`!8t;uf&x(K@y9~K z693;<-H`a}(54OUS&=IIkq`@E`9&H0{wJfA4qm%US0JKb&8?0tzs|1@lgK^t)BJ0s zitGWso88HESFOLi&&z@{_;-0qq!jej&o7BdThRX_)sYx=rQzQ7!7(d%MIvf`G5{|! ze1;!)CTZYhyw}KC1j#F7enle$x?NYhO)>Sn>%NmrkBXraQ>9AD2H&&n+((v8a;Fx; zg*Xf+_Hl=Dlw)AnF*-dAwg)Qd9abpIA`r2ea4D!@+>PnMnHpj?t3rU#azlcWeE?0~N5;BlI@Q z87bXZ7=1yKAGY$HpJdOYrOgW6v7pjSs744gfVK>r6!+{mOR9Wzv(=ra=xmY~deolQ zP`EIT(%WvJAq3uD3f^*37?~M+J+HxI;;FBwa&6t|EMqan)cv04h={%fbhm4jcwqrzD9^flwO#yJV7Q(M@ zvjBBe@%SoT%DoC|YdMvIq}p!-l40C}GH|R`>K6T`8EKOYeg)|(Mi%0B?TlxwL1n=_ zo3D0Pf?oAqn%;x`aXb-Qj42PyWi|JEfA!&mV~)hN5sAVdjX#c_uinbfzA^d_B7*?16vA z{Ja{{?U)Yd616p5Mn{~-e1(y$=bfRpp<$2j<{4UsrB7GPd!gWZYPo757_>lj<)G7m z>pfj=h}z=FM3vM?0`iHYOn~7HOftiolf0g2-BHG^*Hly=FKshrWwxs9*zJ$a6dxC& zD_jY%&lWEd1+WL)=e_Gu5H1himG+I!6X89L43xLPCK=P?0ga@cTXy6pK|(d`K^X5F zx+bL2KvE=1PMB}hk$dA9x+tkgUc!}4L{bWA`HptO5@c|L%=b9GhZ;7XZ=2M6<4=!RvqR|p7~3~d zzE9u!9t@hV-^Vjg(2nSH+DcIwBg$qr)x8=D9lL2`ty)$0@C2Xk)`P=o^A*5&C4^kz zO|Z~K8)?AVc~Otx`^T$*6NRgRL*ObjEdJmU<1&fDLve}`MH=ghFXrC(b6wMKzs)4~ zBWNanCypb)(^2ArGBk{f#tbdW8=V#vL=D*@2pUvfM1-TG8mG|qBpD4N1I|FEq;6?j zVX4uHG%}Kww%B_>SyMMmim_Ht$n55Kzk1JbzDgvDg<2&XOu}3Ka6#1wvy3T%B(&1(3r3EO)^YGid`)W|{ zkLdh$T{~}!c>JUke)*}Rq@!_=b|o`pKzk`vhVZzP*XHpuvVbXYCvbiHR)&#${DQgz z;ODmlOvr2m3RRk8*TI+t42ChkTp*7%4`O6RP;L>1VK#rAfbo`WA3aGK+wXGnee7i} z<|q7h0pbHKPvPD%B*cxRZf!dK3(Q!M!2Mu@&r??d!kIK0KKWIqGjmVQDmJr`sgTKc zk%!)NB57;7<`90|=fUoeh`%PdS>{tv1g5+2=P0F8Cf_KFaal&!R5#o$(J`H11ov?* zW8GcBpY_vo*L8Ldg`a(ntpqGG*=8&@H9M6~hp)}dNWP|$7Y}3&gr>rO;w(fjGcR=3 zw*OSF7$T^YwLg8o%}2z!Z$-kBexDb0^9KSWQY=jvZ(oG222yJp8XPYld()sC`!(ZU zDp~A|j_yVwd0uvMn4kEIu;#clwl!`FFv3N26vTw}U{K2C)k4CPoknU-@XFm`5yNlw zrN=|E&v-8pI0&87N|4172vLBBYNZKf;2$LI%aB<}e9mq9TuTwo0DRgH!_LGt$IGjv zh`^2U(~065F8D7-0Ns1cSwDR$!tRMXYVW(c+8QI?UjT1)M71YrDePnn{+ab8P+PA4mfk8s6QzlQS#^{Fwt?7?Z5v6H>GibZ zjmwixl5JD06NKo??R;lPZmc#fvtLgZsepK0oD;pO8@B3-QNGcAu4>0+d0uaNj3+!1 z6!o(LxD+*!r-=I|pGEoAFp5EN5_LF*hMUVs$|AUP-LJ9E{VH6>u{PJ<+-N;O*qP0=a@sW$c z=ZNSZj_hYW0(1m%?df_)WE^|0T)QxmPUok9Bh=dMX!ud}`f;J`bEVQN6185LoiDBU zw7hGNoY*Gg;*L*mz&Xx5^~VmVJR$3Oy{-W`(M#hJO~X6;Z%{T|$**`W_y+j2G-BXf zx?FWhCVVh5mT?w{EPyg02Puc7AaqbhK@%O9M{L|_PRf0F?f9Dx13{C#wId8DdW9q= zU_6zAUZIMq3t&ai;S_RQrB@dOX|g|eri(lG%Vt3g&yAH^;(rV zF>E2q-ts(VzsXG_@i&Oy&={dLr;e>6VM@y&O#Ncl&Q0tKVIhj7f^VcMEOV1ZktU__ zpJ=cT%PZ3XAC#i#+UiXbCP0TY6qIBkocTKo9~e+1F+9w-+%#wnFpiALTk+q1m4E~i^iy`U6G6>CB%<|s*H9(Vyf=Z~mm$f})3HN;sT4u<| zR>Swm3sJdUn&n?fOiv*aZEhsgSaDS1%)8R=WW}#BU< zjrD=gEF+8#s$<~xKC*ikg{ePaEWs-Xdde4u$4Gv%96#vYEWEb_m<0})d^{H}E8uW( zfj7ZN6IM>^ZIW))lXE0j{qPck@@3T9BUMr(y)cvz@2-v9K5Z{D>me zd~27-229Evg-l|X#F}WQGtbSsjNspCxKRO0V7+h%#-&W`Ra+Gi)v}sCG^;=*BMdwu z#u^na-r9e@1A@OyyGxsm|ByOU#{F`eqGVQaKXc7re7>aIc9F^D-uef}TNQqTwf&TD z5f_kUTvK$zkk8W|R@JtdYnibTsl(hJV7Gwz2uPQ2Sp~pJ7*-Ph1O!~V42b!a2Ps2H z$XS_(&=9s*uQTR5*t4A!>YR=QnKV^hnvj|p#9t18LDA{-VB;A=Nu!hv5v#$sn5Nh4 zJ`4F8opF1b!2K;#&-NU-eZ%wD684^+q42sn?BX;5aDUvo*g@AWK9D^qz*Jj z)k1NUQU6rqDHmfzSr~bwVOL45;G-#}qfr&Ts_DR@lph%7VUuP1GAJyD*Mc%9Fv^91{cJ~Yp zKKX_tG2`_IF4UX&W9axGn=xVGfFJ1Eh1o}&zJ!cU3!@ySTuxn;tpr(|j4+j4_Hajx zwY0$DVqs&C&_fua)*o zxgm%w_D=Mx>CoD@ms2$jOFx^5TFb|83f0N-|2OLS*zp-bD8&-Uah*N_!@EFcd+<24|x~E4W zEHfigFsn!$sbtUrDgo6Hwoy*d=0tGxjv8_uE{4h7fqEIy-X1M9oUdpeBgIdGy^Z8? z#Yd#LYns??r_=iKk#vV6TQlnL0h9xn+U#44Q%eoEA|og>tFi_c!{ZXCb|U)ooXPQB zqT;p$G8vgxZ$(nQn~(0><|j=)T7?D9Y#1adjYx$AC|H!}+_(^B?=Kbr!832Q5tRo9 zzUa1&`m1`^Osjr;%`p~J&<@xZV;sXC_?|y01R0nU?n*}2*^@V2(HV~RAlXQmN}^vS z$v)UbM)h}>*62}-#*Z?WRa77YD+IU!*s(j)6MF#|R2&9D%k?Pnl-L2IWn4(AR16T! zRgjkel&*B`=J|I9=psx-U~b%r6>^99*54lo0ZqG7G(9&F&a{gXT_?Rl)RE|qG=-8PAPFppNs1E(97fg0vRr{5#quO z$0+Z3U&;~2+VWs%kDsg>^I@&0SLStp-Izz!x82&9YEX9fu4lY&>4Gr=HMO=!b~joK zkpZ#$>RwF`Z}-@;O3U!hXR}J9qovS0|P5l&$a~NkDLW-bQJJD8kTxkmEH!jB!>Ap* zKq^vnU}*X?6DMf;G6L4mV2ydG<9*}fQu|669j}ew8IJ*T4o8f`JXxh)@G`s@B2u!1 zJFl7vZYxA+vjq5JYnpz83QX;&lx2a3iy(B8po z-5%OI_>@c!`mEk4fC~a>wC*5I1bF3RX(Ges`7!YJ>ZE)FxnLBy09*L3e?{;CkqL|K zHj?38|2(Rrus)xw9p@4t@Sw)xd7XI#;6C6);zL#C`5tyMjzny|a|Mn@kiO#6+Xaro z4wmUgB)060g^Q2&kxp^X^-_LL!hx8`f9G*tb{k+G2hlX!3G8{CA+89(Cn;DYZK=j(E{Zr2 z4R26Z&e_{zzai**bUMjf1adeq459VXF;D`}uoz7M$@ws31PLVvj6q0ITm`QHOqmL} z`KWSxML`<(X-x|3yT`wMI2Onn#Lah%Z~{uqdV`dxVpHp}Z9qH2DgqjOc48)JDLL(3 zY$AqB;N(Z`vOBLVKTbe{zk4sR@hJaEo4*9QZt+CLceS-Rr0GE?_TLs|Y7*&5skaDd z`e^!(GrpG`>W_N64;-#q^tquYOGu#FE-NGpIXsS%6vxQ??Xh>p+s5;!yF0~ge%XB3 zaelSw!Qs;;F@Qke+uDj_>)g<8&sYYjQmDh_L|kt~U-6wn7i*0n39og6tsjdW0u>gA zTJ&sc(_kkIL56S#;5l#u%q}Y6js0_Z1X3x$x`z~@)aUgv`Q+V(jZ88 zN_T@aNOw2<&*1NU-}QZGErvTYXXf5Hcb|Qp{p>hdyf)n^Ke~Ec$l|5v^`}0?(C`+% z1%7Uepo+;$b}z2mxP-8NFWRmIWWWQo=~myF{%fgIKnl`4|3g8I{QqVe?tfH(L*HK# ze^HJ*CH?&I=V$my$~)_sEZL1fZT@R67HHmF;1F$q1bX+Sks4kXkLv-Sn&t#EHQ-2S z;ZS&0lAco3LyVvYQ0ny>w7kcH|2Ipi;mQ4Bt02kuOvH0?|IhWU1Wupo80v zyrbUZSIm}|XFM)$CMJ{F#z?n>y>f@$Y4nwXmz;R7EOP)neBo;XY$;?gHmwz%mk#ut zp(9r>xSkWh&40g(3y>HB2qeG%C2K=)e9d%?K)jq}n;!yPgyyIJ(xf94QK5s1(gaz&aXkuWLHV)LvAkAu9FjX1rYqstq5K19{ zwdGPl30&BLD32j&Ica&8O7ql%f-DKkbJe#7M1e2FF11-+c|;=s2y{0vGPf}{6m6`D6io|IO$d?+ie{P$K7@4*7Xe_l z;;2Co1p!i6Eg?7tufP!gspotT50Dgc9fT^+?+*|wrnRwWbO(UZj3z7$v4pwQl;4g| z^mk6-U-GYUwQSgsYa1OJAc&0#^-qDoBA|qKDe{mSx11{16vzOO2B+j!6?BzB+1yy@ zUG>9<#5ii&KPs8?`l9t(h+qz0$ip7Ih`oN&9TM$nRIrevgi%zo`4Tw|Y1SeGzQQZ7 zFvP3xbMC)H#33LxrIKfvx(lVfE5HNaD-giMe1bce_?Y7clpFv$I2(%_k<_uVCGr6b z2-U}>VWP|)i?34_OOO7gY^Q>&tK<%Brh>QT|xqi~%bl><&LeYq~`NIW9QF zPM`;%mYS}>C_-YoNJ9xoZDihXHAQDe7#=u5!j3MM5?-9_bYTH1IZ$t%*0!0<;|TfF^(69q>k2tnlzxF{gQ; zfncFxke)6?%m?o(K}qP`cDG(Nli1*-asNbs#xN(vzvGy&1H%k8)4Y_V1NAq=e=0C@P*8L=LIHiFwAwy#H*hxrdw3v=5Pxhwc zUOrR#^R-BTXiwH@#tfC_w2g>$XdMhL12TvV@Ip{Oa8Pl0mkvp+h z)Ji%CLFhXk4mkK6sjyHVQDv#L&d&=%4`rS(LjFERmIv$*fC3kB|J`Ugq{9 z#b1AS%Oah^#T>LW%~C|T0nfY#H|sudoA4LCx)0smeX&G*`~+oSjl%nhA!{)DJbwhn zE`>((H5R)6$qs_pQiPgmj69_o6oPK!@<&#O@_`eC>3s%U9IPk| ztUE}|r}sY8^kwRwEe{XF1j6N5H8+a*o9-#-Y;w5dcb`O4`c8!hNBN3<(ozKXPE71S zmZTcs8qna`8jRq-{%VLPIX&P)p4^33Py)7u6a-vQfs&j|fHi?LCU|0lbr_+HGj@?o z(n(XU!LD=<6BK;i8&|>(k}&GFcW6&~JsYeMX5VM@PoDaHvAf`!gcuoqgLa(g;W9bG^UaTsE*<*V36yyVf;A1)p1Z>!QZ-+GwJP0=2B^8yo5H)a6 z8xiJzNdVS1c+=89Z-j#e_@pT%(Ieh_43A^w8bX|6Vn;yOA^VO1wAF$nV2rY1A{w(e9|JEgMR_!7t+ zBtio2Ke*b)oc&-VfZ>7Ok0=UO3JgOq-h2KJAp-9bjGR+W+!Yn=-9LHdGM0QTi3Afd z07g8f+T*EUKD1S1$ekVu2Rx1LLIOJ^O5*Q(8}!&)fG_;l#2$HnMfBem>~{luE6e$P z0ZS5aU@3j31zG-=(?05;PN#|rfD%Wd$E8si#L4djrpXHs#7tJ>TI-u2cb>4G0D??+ zsAnlnPs|$UdLx_Y|0{FcxGkiMB;V-8VPRUD2Q@>?uHGN&&!rG8uy9god##Lqj<*U8Pi zbt8Eh@#Zx>_qVqlweKTAp`7Qwfe7wm5P7ysA&{UyD=%_^1XUrE0U`iBKhp63jFelg z|L8}iR|0;(Qb2*jgn=cH2Ni~nNCF8uHcA341*NICYrj{kSe>zN-=2f?fM`6P2T}}_ zI6NG{2bxy~Phd9e+C2ptA0Ss?cmnA%Mm7dLo(3XLheLNT0nEX`b-1cyhnivdXalvM zfY0foB&`z%6A;FblE4W@1l^05bd+N#atI7~#<76zq05Fl3hZ12{>dQd2BEY0G8hY? zK-AA!4?R}l1HQN6gaJ7VUJ8W|Nvntx0p$!V<|-WefDfMz31sq!(K)L~rI0h5rcW3B zQ!8q(LPg`dV^E-3i`LW0{=LtQdEq><3QKssOHa zkTFr`Qs<7@MlKb>mD)RXqeEmd4YaUb8CqVb-XheeE?uVswCmZBRfH!`Md^4$JjI0NN>LFSp+e?*%Qc3dtJw0Fk@z&!*H&*dzUUH?LG z=LsyHB;=La*e=BX*dOa(i4C~#-vL}L!-DjOJsxlXz%%LxTx|%J&IU9SFnQC&fhj=| zEFEozLWbN3UV?!!MEk%+xmOEDp0l0tMNuav9fYnj7UIc+L8yRb%!Es)AVnzdLTtuL z1N#4KlsyLF9ZxKLB5@#X^S-Sh_>fJHt(xM3D)%wXE9lvIO*Myx013Ky#FtaC z2GUGAzh_Y|MA^C<2bYu{As3k0`zrl3Zgw(zSPajTS4uhk04P(SdI~3Z*`Mm(sx$O% z4l*O4bz)Z!P&&!O-ASO#%oaG+-tPYpNSFzI05y{RPb`21;}moji-cnU6ipBM!Xbyn zM*lSK!-tR#>wj{d7UCKRCM0M`z@NLT**FN6W2CW(fqCvQ=R17+b$L&Ck0>w3sf8B11z`xe;_Dmg3%wcs* z3sma{0@uC)V(8BFn9XnkFqs$_KyJA|$VKq~NT5521U;!(*8pi~%jcBd=oHP^OsEH& zbR**bZMqk5px-wZ_`o_bi-JQYN7=9pcj1xeV$U!p<}vQsNaq7i z5e}MC!4eGl=E8Yw@VpvkHA4(FA~oG<md#^C$od1(39XlCi*$Pt(9AmBR`96r%bg z#DDi6jRc92{>6lc0Ei(`La>*`Iw(>A9C1mIIN{`_ptJwy?Zz|iYXZLufjDhi2#pyo zZcu(0lu>~R#!Sve42FV3?4Ac?Q1c$44z?8hXoBY)Tc$J&of?DyNHDn|OFK_0oadr| z5AL;Hr&GeXu}-}3;ZKQe?6(p98FokCbAQXGOas#SdfG_@Z7T?YGqV(o;p0`=Iz# z8kyb$XZTMmuVN*G*+98g{J$JO^o0!4fg|lzlN2I7j5r0JV;iT&6YvpuYkXz<2yXW` zA_6lIFe1cnEk||0DdFJfFDg0;I|4hr8}v>BX&(_t*PSAkC7$mj0vhh|NAedMl7QxM zr$^&?M$8mIy}WRt^A&U_+-u816q8z=ZkPh8$(X%zfvVR>|5lqo^+v;%%Ln(xN)tc-C8jTE=a>0~2zWeR8#gc(v*^F@l$`4ZP$ zpGB8lSW=&$LB<0v%IGk}dW(#T!Arja%PTguL%ZWxsTTy_tgcFnpZ_23*-`jML5juS z#g72@kP$#DU@gi3u1UoE=TJFV)1yzFD9|~kc3G8f?}ZX3fMHF8;H&vOxcJ6v(nex8 z6hM$@z8-=NrV>-ZlvN49FDpgG0(E{=?n$w~$1OvJ#K24FUHJ2C_~2lXOe5kK>imTV zHPm%2r;_~M7;LwJs#>>TXF|P<&JNST))poSOS5j3Z|(;_|Gx$&_ybYBSrB2x->b0i z>Sh<^1#2RSHP+}|M5!a-N#Oy_Eh1pig$zT!mg8BABSr!)Hw-o3zXjb=1p)p$8MG0qY0;Azatn~3Zt!Vnh(5=)rAo!py7LWnsx4ZVxG;{9Cy{|po$BwH@FS--es4I+q{ zK95`dawltdZ);q84TUtWxyd3T7}&N^jniQwVul2O!h3UisE~*W(Mnk@4_`aYe60nu z(lr3>v`2aSdo|q%lF$2uNr0{<0xrj*r;c)AIp>VqhKM-w&8RxWccr61*w%RlTp`Wo z{HKt{h(W;Cym(tG;$7Iy2w3LjaonRhsli~ZWfJK;6vc3HRLd3{|L?;0tgNtZz5xdT z+`=X1ReG@Z6pV^C(in68i5#-nT`zY8wdl$ogtzb~jUc=N%140N?9wzsdNHe`l;vTDk%o9A_8gO%U;Y? z0B=EQX=&uZ*LX&3_>F)C68o~0{I(6^+dh@*8GZhkyincMHP2*59ujDZ$^80EM!W3U zidxQNTqrocc1Hq|qXcU`+-2lI&%vK_zL0DX%J&3;ROl7HDepfdl)(Z&i8u<}C=PqldNaO(};vfq|B*#kBC@C-~j z679w(XuHZZ$a^_(EfGBigMbV$TStpa?Lg7FaEZdp)}=w#o+m4MNeZ!7aOmeo2U8+~ zC@9a6E(*rygN0#NJ*Mf ze6{qv&2%bAHN`dUN5=vFNlNHUz-D~Lcn0NX=xrncB-NNLs@|mZS*fVyy6lN7N>S|^ z8xdR0mYVWT$qNz$W5^kZk=ZVY-I|HvG{EY`jk1vEc!ELNlMyTp>Tz)aNDR)G`;rz} z^DdwS^KQ8OoT4`9*Z;Jy~?3iXm3^^AKgvGmhvAV?(=GwJgj*SRN*qEpewF~e zLp3A9MHNFz7ZXdpgtd%nplHVUmV3r?-hJTi;m?JqL(^dnB<-+z$T$mM`e6-f*SS!x z0J%xxLJJNeO&;dX6 zndd_!P}3s5b$s&D!E2QvG{>X8M5_AM8 zp6cj8m`qwYOfm}e*+Wpyf0M;p!ebbQa^DgtF&N|vUUooA1qLsY1epzX0n&XwFbF{X zd?}@b-Ln90L{#wIAy8ls3m6jgw>Tv1V^BiPDMT6jv71WgUK0b@iYN3<3R*b7+$Zz_ zadA{AfhPJILLtPLRgpMrC;_(le~nU1-3W)SNzdpWCCugB`stldA4-G2JD_5NCh<8g zRRaswY%=rH$qW;n8XXLrAW>RZ9uv6Efd6V*?7?;5Kb8c%3~7B^Pkh3BOLnWp!z(Bx z$YWr5D|?H6i+c+qJa5s!BR4aPow>uU!M8LRB`M&(uJowik4Lz^+$n#&^}vHK_9reb zW!>aNSxOR}g+$HwN#+x7xGDotI}Yv1x6hSY!o5PNo`{pCq|>1T=2sFDyXA+^IE_L? z_+}=O5TC^z?7R{mFawodQK7y>eWdxQ52jLpIynwKDQQ|VaF3o;dI#%A5d)tCt)dbM z&JEnP(@M-ruxL8q@jc)xUC|VSQU&0qOd3c;0?|Oq#wg(_DX(#e;eFxZx>cBRPL&M5 z5MiA!TY0-cd{-J++^f*wRx;+Hy)%NCbLVy4mphGcT2_OZ#?&&I%Lf<{%m75_!;Q6@ zPbB#V+u-2(Z(#M9>WH(koz+0haj*SA>`!#t-R_OB-gXrNhLKY(hx;VJ@ zD!!ng>AoJALCDZp)^d5)+^dFAKh|EOeF_v)yjkOivDcnnUQ+-avO(GpK|c_k>j1%I z_MQ&kNFYJZct>-0z=6+AMuMgYA0gl|&~yW;h98e#)05AY?XY^_CSdNl3r(c(V7186 z4fh^w1NH;jLo@(CixP$VcvSh2zx}3ZUTdHqEJ~FV^=RxC`9w%eoM+v1TzV*ltI=PG&4v#_B|5+vAENy6EjKsQ zD#^}lso&M`vsvV`wge~E?t@U@hPmBSii>N;wbRSE(8M4OtOdGTAA^;(9k78f{Khaa zfQ;%gd!9kqwVP!`V;1>qot>+d_dj#hm?Y5Y%&9>g0hr!({Oufq_v!KTIBfkkGx!kkD?73q^*j zb`MfdXKo%7`Y^^ykV_(hToi<%Kv;7<%57ZIKF9>o?2eMksB)*lbQ5snY@8UT9tz|a zYzlua&KFBdCx`Nv`-F`OX{qMzvIq1|wOhH$ z&U=SQ_KyZ)0n??L_+DuUr4VPd0NOKg?d-h@%-z@(@zZQk+E3rbCBz52jG_8Rk4bbI zpFM$CDB zk&3l2bflBR57ImQe(Uhc9NuagJfq-ge0HE8=UMIcTOa8u8&z?H+v9r)=^{6{pXnD| z6j{x7qif|}tlcxq_|9XwZ;d7*X>+SLKEB_Bd>laO~Am=|?hKA+~CqaFKnQD^;Ria+L$4xb_>w@%RFu#e9>8u(b?{3~~ zog6H9I;%_m4w$f?{eF_Pbo~9W>4n&j?-gr(=bE(~qr%_f{71Nj=jKiuqVmFN2$ir* zX4ZE?SJ!Jrn9*R)2bB-yr2oPK!=K^5>EArpmTGa43L=b!Y(5X$Y)wr?Rq;J~7b|}6 zXQuEM8Wsd?k08uPPc;Rt1rRD}+eV*iP~E$SY(-$-&N5ESiqaT6L_{lmg<4eTPLcZgZ+pDYNkFBOn2W-HrV=bxJ}r&P_{RJ0r3 z#@@=JeIbd8n4#(xt?w0CmculTE;KC{53~B^XYnasG-rhx_A%9u-$ZY7Qpy-2;E7vY zAeG*jJO5JrJeqjHe7Wi?xnk=OZ#V`_Tz^jP8Oxs-U{bYthTVJ4Q!r)K|cE~*@|R5GA>F}E_8 z#3)~(pFS13PTPqVy*1{{U#uDjek+hm?0nYfYis=2wHtC)z(`NT7V-`u^lW6&ak#7I z<*Yo3m{8i)*RGpE6xlGuG+si#v_+KG60`_}AE7*Q9^-X_oe0%g*flZ3mxwqn$db5C zxWDYVE$z0T3{|)BE;ikGB}_Tp?Yut}XNXp=5;P9CQem-ER9I)!S6zEU^4N`>ehBYR zcyVD?lQOp0%h;tPQR5y_ZHUdGM#)$R^961RT*P>q4oNF4E_t6>+-5?}35Fe0_ldsa z;Em30-FVznNtVx;2`XViFdTdSIPlXKapc(u@@pDP3{6c}GQNoHIAZC!h1|zzNT+rE&qqL;ShG92q9x{L4DG-+trPt(J(N#m{gGH=g;KuP&Sw8Q+KxGW~3#G4Oc9q9C%63JYdmGop`6Zskjt2o0sLx;tn1K59p86!Sg{ zYCcPnRt|Kr+IZzBtE!wtOY2qRb@hmY91jPEEBbVH%H|2hBV)syCKu0gDF0Bb{EJiRwQKD#N02Yc~i{HIzD(V$!PBj~eZ$nl)*cp&ZbXfN_I zqe#r>Dj1aVHZOzYv>QHeTLs!|93Orx*CJm27GcZuNT&7qo~Il{Hp^P)`|=MbSHK$? z4X!K#+6%~gyZ(ttwAk-?`Z?OQ97mYhV399pe%&ev+fC*DbrNK+P$){~^9HdkS}|M* z1IBF>Y6i<2x$XVTli;lVeT!Vk3uOIkB7Q5mZ<%#Y=fa4=@!3G>g@R`5E4IHHnHZ4) zD9Wz}y@s4y)ci;2bt_Xx{N_$sPh#~`kt|Mp@O-h@DFbJA?WUFzKL$wi%+z1+AJ96i6d91K z{yfGYYD-xpgXvy|Zl5YX3C3PJo(^DOc#l^V_DWa*!F7C?&A8a;==woqN#4Wfh~F;E ztgme$>2`u*gh*QQ7iQ4DvDPdK@k0TyEqhChe}>aT81MPR!`SC5L&g-EnhTBmpYGR6 zq#G9Vn(n`>dT?qJYGpD}!+i5WB;3!{H_Pz#<<+lwd`*mHEx+Whyasf={KxO!3C-n; zjF)$0V^b@1_*8nfSMa}l5r}R)yMBOo%Kx%1krKxL%!zFJ#V_X)ZBpW(M{jR4iLU)8 zh@o}yu$u_NVXRJASBBiBVvK7)VvE@8=#Ar$!0tjj+zySN_Vg;{Vk)=_{PCGh0Na1p zc;Dt2*Odo(_M?x>iEYX;g6TF=pN#7Y>?nsVO#O9hW7g~^Bc#2bHzUdZxMddI{D`h) zt4gde;W;OI-XcABZe0rWFMHLmC_q3l*!kx8yFtJ}Cl2+`AId;UYyZb zl7Yn9A9+tU#rugLrAoV>q&-8xXswZUcf%c>apt`rU9H6Ob#C-umk#r5`CN}%>U~c)`lq_a$qEbIR(+0UH%IO3vK&{_ zzK%B~;OkK%m(0=rsZLAx=)nIiyh&V}$4}3_$KV~Dm~)Zxsl0!-Rj`aIzJ}t5x!EP} zj9`gaa~3v)72uD;?u3co6(Kb3?dSAep+fX{+d1Kg7!5jW)wg=gll1JEp8Znr_4yR zmK-Lx*bWm%Po`N!EjAJ{F61-;R}UrJALn|nvs&Hd#W8K?@AYf>Yrv-*8 zEH}Fv8#@;^@r)NSvTdy*IW{l+w7Y*(}$PGnqEO*xkvAJ{xI>k!b;pC zZsu))1R0}qu&l39Xex%?AJ+8WK8zKiIe)0$m-O%)q_Y-UkoSgZU&~9d>oI=)joR?w z!^0GkRu_kr@G_h!>WW$HcB7}8FKv|~Usap15d_U|RJl0POF)tGD-zPbsWbVjCv5FX zYsfq^nO$dKQ}*J-O$<8aaZaRo;zXvM^&Q!{_T!p(!SD7>D6o8n_HRavGi{WOJHjDc z1H?NT0&IQ;w>AIK5KqDXXd=V!q#!DT9hAkOz7+v~w6`SSm=$ERzzb#EXajE?2)oMV zu(J=2ZA1Bhk*#4Ez10}w6fpR?p+B`@&L`Kg+=$;p*L!Em&*|y7tRdKS_|)(Vd8uQ$ z{AOp*RL7IvuZV&%UnR+u4jNl-Kfbd}VEL$>m`paX>7#Fw-RtsKRJEb4ELBmvx3tAW zMDkScr;C)}Ziqp~%fv_mPFA1c=nWIgpdiz$4@p&}i0@G@D)6*(U2>D$dZk_nsXkwk zd}BV`OY-q}C6|Y(+MKFjMHYuiQVh3jwtcywl)n1;&o=zh0mUBAVoIbV0j$j676rQ- zgqj(heyN`&28w)K_|lJFdrn+-ZTZbmw(jV-|8g7@R`TLAC;AlJ<2*p^ScJ1ZvT;zk zMk)V|F73RUbKv#6Z|bZkS8G_we1Ja`0TrFm@gR)7w-23Io|Xg`bwM4FCSwL6UuP+C z!H?I)>Vr7t~xs?D=eXRbT8ohDsOzf-$DA5~VM&61$F@8RA=8+g1cYQTj{zWsIj z_sH#5$^|Fcu)Moy5BB266I+wnGA#6h*`BYJJmsynZVH&$EsuYk7kza36-a8;gQiY& zQPFa)7W+zt<3$A z$IlcvS6QANRi%y*wLR;!OVUIWxAA=A>qs?){K~d6YU7J9(vM)=<8aU1l1-}q3%Z3A z5ZK3dzD)2KOTE|JgYZw-5;Q9Zq973EptI>@q-paZh3}v^X{*0eUm_XLPv+W@)!UiG z?Wc#9J7@3JzXSzbZM2KZvTaWuO`QF>WJW7%y!B>#R#Ld6ca% z2NSj!qIsQ_A4o?W4rZrE7ZvAwITzkQkx>eYr?fumDW9@K)sY_eT!fOTZ`E`N5=2^! zAntYk{5uo6d&NxjBg4(-eNi&@QzX$g?V!JzhQqN)D2)7{DC3{7Mr0M&uUe;$|7C-2 z6->VuU{|+**qmNO2!j}^R2D7s^)zv= z?c3k&2>c`D9r# zQrdz~Lk%QDO}g=4ITN?v$XoqETJYZ^$$5TQ)$c><{!?D6+Ig|tm<5wfLYC`;>``)d z+3dx5MD@&uif#7I(|x`#!VO71L!7?}TAIhHgjQ(6$tR+I;U6t=evRuP`@xIAlv{9f zru#)r1-HJse(Cr_y1nGXSCjX%WXnU_R{6j%uN$mM#$#;#(hm41vt znxnDRCY7IzAye1^hZwD3qS9ivpP_anu0?OoV*D2O7_-pZQ_zj`N?bAzkM=g%{5 zPZt{sv;-7shz5r>pVt1ZjuT+qtxDOI5HOGd%u}9PZA`P$$>By zpxQTL4ix6_P(TGQgHBqVRc54?)brj;ly6Rl(g$-E;S}Xr%H8n>4S~1HWDRdSEw(qG zt)6X;Z;yN8CEqutOaIY9;lBQBdHsD^5u-jvScKIx3SZKgKplYxn`A5zMB3I;6eBxf zr%oj$S3#9-<3R>e*NNU zoU1jR0m;1^lDks*TA39=nSKBA)HK@7DdCKpU3d?vn5En#GM5`X-*76HNA8!Ii_plbQFHQ%W#4%q(d(+9Bpd%V@E2# zT(N-TG4%$?7vpz6r^QM}CY#5@kF(j#4<7^J%|!d3540LX{E}%-#_8; z;@M9L7pJ|h`;ZdFhuA)wXnuhjS&SnWP4;mtue9TSYiIITwgc=%JBqW%wo?msrG`4X zxbmVFFWrSjS2JVZ9~&sRjGyzcC#`-nKvUZ@p^CbYtwGRDERR z#zz_{Q+R1Ik?#{Z;TwKp8S9O{l2mtkg?lC0Fz~K#y)dD~Mm2t4#oFXOE-roV5z>Ow zGoj^csfLIDBSe)3oMKYwc6&vHnx(|Bwr>RRzj(C1>3dtKYt{nm16Byifu z^DSH4OB^qSbhTDb`u22=e$jUo#J_nb2M!k$sh%+YGM#av713S%HOyusEEw{8TB23K zV0K8(x^9vpqjz*iu18~5Hro8c%p_KXeuE3|aWt~tm4Wk&TIY9sbLM=>1YWDzQ2%a+ z`Z#itov`LeG5HJSB?0s9o`+>S(=<|o!^}tR5rn^#Z6;_9^h&oYnWA5Kz0KdE(KHDV z@)&TIQ;a!rXFkGzIHGIWXHt^eRhNU2tF*Bz%+^Y1;hz^{Go=%lA8DIDN>J38^v3Vl z%=@Fsi(qsVYld2M;?QPJ@0}-cjWHlE$l1m9_n8U+j$5P(rjEiLy=_fk)*~e_PC?!$h&i%N8DHL`rGyQh2458kR zF#5%@OEi%6v+VSIk9i(JlN>-O;JTYPi~JPv)hm*%BrP{~l}V|OKVtBUe#z-20qb0^ zU+9$S?Qu%Ix$m;__1Z|hck0sZ_;l)Ke@w&3>XL>;Y8BG#pTBD6;h!GsIUZ|Q&bjtr zezEG!WBmQX_8?w~{ix~vn}Jj6pue)4)#-1#N#D3Au39qDyu2Wh*-4rq+MT#j zV|zQ!qqULL|3WJzHWrEN-i}MKi5*Tj`QUQzjFx7_$x;0_-mWK)Rr{Nzwq_k<%;eXj z%&$+=Y|I5Rl{O>df`SFov-#NKXfq7@e8h*iNd+q;9qC0zKfNq{q=X%--qIGLY+-Ht z_k!!b(MnoZ@cd|&Tjc%cn^FqV6j>2O2_zV2`WSU|`*H8eZ-xYR!1qX!DM1Q2Y${)FnS6epIxrraN--fbVcK6ZN*ta*H=yt) ze1SVCm)tiGYkLKd0bq~2T$NsOuzOEvU2mS1o$vSdH+;SRNuYG=`Lm&|z^tDwNzbx( zI%13^i&{viuLR9IJB8$wjPsYH8`Po9#}#VDmOb&=sC2|qR;Ydd{M04%M04{g9Rs4) z1Ges(xh*$}?8|Uxhn$5t;`VoAto=})5I5vY`%e|h(M9`9C9&C>scg4{ zr&f70r>k9+DWAwSJ^#2Wou?3enN%>0PRZDN?B(freKW5QQO(BguRS-LCEj!{%8*{> zzb}5K%^bInRH!snQu~!v5N5M_6}zD`{4)LE^n3NUd^8GFj}E{<5!CoT&&PbZp7^Pi zAGQpdhUO=y+GUN%CX25}Eyp%~g(q)LS*K4}a%%nbJ-me7R#aOi6hA*KlYXvaJO1{f zL=RiwP2r`uO{jfyf1Jq6>cww5a&I@e+{!(*T^mFesb@DorRP!5I+!!LDcR@oV19d5 zMKIOGt592Az8uC^-SW=Ga~TH}V^+fHdkeZY z!~tauf;I6nCVPPF#SX8@ieD;=C zk@u%aWorC2f8K_UMo83|`w4|q%=;ew3ffKo`lDO!8+RWDKO=qTKgyR?hVs9!2?qN( zmY*k7bR~quOhHCQ1(G}%08zko%La}Z0gXU^%M1QkK&l7b!C>G! zyjX839xJo0BQ~*Mp63N#qA*>{ez3DVCRY6e5Jj8Dp^10 zF|I7O*@%gWwD>=ZSj(v2Z`rUD&k+Aco5y*Zr4=pskEPbr&u;l8dK00r@lvg8V0v-c2ufAFE4BF@YugV zt6KjxHGGnv>Qz*fFZv*N>XYa1QmrAY5+j0{r?01aip|#9hg4ku?h2!%ntVuG4EOw^ zo5z#l*LPgRxm4e-dtx?p`^vrke5TFgEFIJ$nm5;-L8x=v~o&I;NcinyVMSeD}x#h zp+-SX(va?L{%Vl%rOLyd+G9$^d&*w|jaiH^gEHza0#8G5i5Sn=bB&J@we0DBw=B)w zy1OTF)z#Q0Xj2=QQqXKVhx8HYK6EX1!m+iV`ny;1Hs$t(nPVY?_N&fdBIjAOUL<(n zMbiU4wpYHTPoGF4<#uVgI`+v6$x@tuDY$a4XTB+0lu>oM)jt`$z8dZ=UZU~n|G9qI zG-owOFw?21@5XP%T~S{+j>nanzy0=*S*drZnOPvyi^(nJmtqfb_kMMLo%eJ`U4HF7 zkMl7l{#`B84=Uxx%G^jYmWOXYsq|P+B6>#^CkTGy;jwn8gGIU7@MKFGgttCgA^Aa7 zV&b_T9oE#IS#obDQ4pt*{_L2$(DOB&)gkHDi-2i+(Zo7##iOuxau%NIYVOY8H_P80 z%IC1Ymn~20P-R^TWDD+XpEwr0)eF|vRWmp-!v7FuMJC4a%fD3;DZP^Jhj-Ru^Our& z`-Wlu{l%%I_fjnpKOgene}JXcV82hXVeCA~wJ0ExFB0Po`GRO5L-?((JgMlCsin`+A1_pRS(_XS+G(GM=3IpqTymJvg@~5k})usOnYiMUY$7LIh@7&)F82rP*OrqkSzjHfqX=S^uEV??qcyj z$+1R1JkIdPNuwpjHRPyRl=}(JkgRu3oXqY$M zm%pgAI}&F)uSqsomyeazqgS47{t^vX_|dN0;u49>IAz73{aQ(2DdYR&QZf@dTDNxh zSt~W{UotzvR<{gvHaHPeu`LuS{J{}dn27PgQGPQt6wsY`p^G89+loDEZKRkg;=L?0 zfi!5RO4R35atPMV_m75?+~U2I=gt~js|?(Qw^9r9&&IBf^e+cDX6ilvULq}=g&Wl! zv52-LN2;_J1y~w$1#gmx<+{AbzO~4Ih1T?Kdu}_vpSFSdM9eO ztU3)GVJQ8z8_zye>be;lTt4crk)PA4%TxQs{OHA8qI2CZBZbV1L_+nJwJYtqH$OCA zaS?Fj^YE7L7QIGOb<1IS{Vl&m&#opX{oO?(ZZGqP#3w5)3bDQZis`!bIVv^T@l(mR zJyI=+A{(U5FWE-4V>VuyenL&P9u;s*mrO?GI9^7(Xl-Dc>=8F=!8}lW8g}ge=hqJH z4M71T4d2F-drNP$LPTZ^TM@pIJHEq*M2PQr1@{}eu1TAe_hgW!_(4jE%PL>6?btRi zBZa7*aP5n)GgzJhkh2_%e#foMI3jwdI{YFdd)2KVmWZxtSlv8*C@u`v9Ov^&z{I~`gs zYCxd+8YP1I^nP$GBC`AqLPWaN-_@@#-+U{R`GcN+DD@?wKiTj}NAyZqIr8#lSx?Vf z&ynQUsL15#y_xLvVJIQ%N z>`MPPN7Y{i2Rp%8mOR$^Jfhv&j9lV_TRi z`qwL(FU|OZ7G?Acauh#dwIYIy!Fs})!gPOoEq{ZNxB7Jdrd?#M;II=k+unnK9)cx> zHSbrak(v?_83W5L&O>pC)KYBvMbbNpt8{6kei%ACJl?)r5 zeFB)1kK>fQJl7@Cqcns~uRdK@{SY8WZ9P;WE(Zxph1_HB%b7}PtTRPl?!PP6dpYL2 zJ&}a?q-kkm#`XI*M%We_pc3&yB`TBQ`@~N=;$S~?6-b4-*Bks5>K}g zr2Uv?A>6oU;6Zryy<8rxwkLvvw*^!FmQ41i?6?%)pxMo`4hr&h1Bv?p(3+L3PkD5yKh$j44n$e+qAr%H;htF5{e zGBzx7>XMDBnZ3DW5h*Y;pdPDsNve^j#v&-Dk97DraE!{yI^1})@ch1abZ%s9@sJI% zyM|1H4_$BjiZ+FK`*`IOMg4W>aeK**B(Fzo1FK%+!l)=b=~b0Zxp$zG5FY`Ybk^z*>-j@*%V2BPWY|u-?7FKPutL&83;hxZRXSn#dx{l-w(0nNagp^H*VYjZ5aDDOs&KP5y(UHCr#Hm(C}$)e%&Os&C;k$#rtCz{zmckLG=ZLF$C zQv|L^cD7J!kqdsY{>;P1@R7Q;;MljxLhd~=f2U<_fysu)&wyI?4sCLKZYj5BnPxK2 zDl>K6wOanmP-c|w{POt0yeZo3ng#-qz8y=oV#BW^YeF^tSf1&*9U5w??PiLc3nITMaGzqtcy#vGRh-ooP zY8j*2EybES>YkCW@BZ#kyFU9FHpPC7sP1Kc~k>Ns>pvr-r z!dFsf?b2q210|Fi^LTVuNWj-ffc2G@zCD8wKWPCaj>Fcb=?*?ecpaTnEz=`)r-T3l zBF$%RbZ9b+rqt{1K~=D$Qi&njcU$k&v5NPK-dQ)?7o6)Ie=$lYGauVlJckyfM6w%{R z1*hMexZ&iUJTz>X?3FK^iF6ieZ1!>7@2)$9TiAb{dT+T~i!%t^>|5U^Z+q^$An0z| zSUGhx)2w=5W8UOFV-@{rInXf8{Prv6#-$#^kAj2f*F9~Un^q!0=F?H3I6;KNVJEPM)1Rr%jjsY@Jb_*hs--&7@P?i72lS3>1}UTiyT<4k7DtkH`YE6QTG}7FwZfN zK$*1jwg2&t-A`|v6iqd5CU(G&?T~0OyV7u5$etyrIE83 z;*bAXcq~^;yPK%^y`%y&$7B8vZx(6CTWc${q@By3&6Igg)i+Ev&{rCSuj7CrRRIYG zhqiAAJzErz(*7S+&jC;6_x`!pwaEy{ypfSDM2jnitLvfjX>A4F)q0Ub zKbwZcPm7G^RfGgQ>vL*eWzs$RJFd!YLHcvUrm3W6qT<65c9s{P=M@(zi`Awc(Wzvo zD1FK_-w8aD74amVYE+DO=}T?f8;*^7qm0}O;=a5Tt?vwek1o`&zxmAg($<|2a&O@9 zv*=0e!G^o~Kg(+*#vgMFGDy0)T1FRnNe3mpEfK$5l*n-{@T_`||6{J;GIl zV&e6|&2Qs6wh3LzC5jG`xs(*sbX_hIe&3dGA`{Lhd*0_)Hfv@VGvf01T6G_}ZM$hA zgLX;3YNyjiq_+V(gH@bp4iyIrfeKF7c5 z=4)gvy}4R)ntxw&h6er}KlADgqvX9l`)VcmZNK=fK-q2ewZV+%tAQKZ&UuSjya~J~ zcls{mxA+aqCmWI`I@l-1@VUCrwx8RjuSk?#5^u3Pc#8AGywOW%HdDbI+h?vaFH)RY z%uYXfv?zA3Zr%jXw{!dMqYe?V&sXuov^TB`RcOar>BhAGm?~+1>f@4F@u19vx{BxJ zbDgim${6UOW#f&AbrZ}@9?_o zWe;27vPeGzLyBGV14#ML{D6FK6mRh62A>q%xo{NjQaA+74Id5ysJIp<~5$ExsT<3YQX9l`FFEFMc)E!u$| zYBrj4#X^==XHM3CQPe|cc6_8gX*hqu!iC29)}0T}iz+<^2QpOd4jdy1w|p^eGv}TE zvlHRgUcLA*>Nb;t*||HCxes+MCJJfp&h@(q5I8=H*hR1}^_iM%e(L(rI$8bbC;mNu zB%6OC&EWYcin2RT(!x5{3!au~(|nxvXuL$l#@E3EFj)9;E=8n+PiA!X7%SZAuzw7I zQZc_gd(+#$zb{N{424))C|fRk;BQ_jdQ0NpdEAq(lDbhcaAtOA>AmvlS>@EmSCVwq z-|u`o9xAA%{qCznHN{6AssZ^5)zaniyx)fvmnQvXS4urT@OnBPerU#;|I*>l8EN~w zkJ5=|S`SJ-r~RgVJonweI#)E z-&E^~msF_nh@PYW?QlkGSUBkA#)G6c7Bcx*6R^pUs&K40)4R5;*AF`JsR;o;I+5m^+* z#!{c|dcAR_S6S7AL>+mJ zvO+3p73Jxx)fD>!7X@m)Ix2(3_`7463y=9nm^U#KN|Tl>mxmZ=KFKItJfWi#+H0%i zV4y9uP{JK;eO2cdZu(EQVpSz?-05s1A_eu~@_Cxty!*WEC-?=^A3VJ9gRSyXNyuxl z{tBul58c>91z&Fl%8poxX|B{&A4!{nW6-C~e)!Hpww}A8|LN~>(>)Wve1@3LsYjk^ z5*EyVbdjLb_@E}=&++(41;e;b!JSmsAsvzJ-uNqykIpIkdE(v?@*>1c?^sr&Vlr6{ zjY~c2;!I)Y+eTT5bfYj)j9{^B#v(&_X2fVe(ICl#L!ai{W%IHl#?2c%XZbsQHgp=6 zl)n1>b{GtZ&F?5$de0u{)0sUzJfT}~=8ddC{a zakLS|iLZ;eB41Lee9FSwvVWu72j0FSdV1d~`EB;$g08^Ep3pZ(bcYxsS6AIOzZwSD z-qeA~RpLBxMdm@?h-dg7U?pJEu1B-cdO@4;_FDoi-LXiT_Y6rH@q zb9JZGIH!@nht^OtT#RA;x??-rn%&Zh{G$*Zb*@gY6Z?x9-XCTnsprG*j+oM)AiI)`jZ0Be4SuY11pYv65EgklB5)t&7PfUz) zl3Mq@D&JhYUZ^}2{i~(h>y8y#{8h{I%Xg}j#R9wbS$E*OIiFhlMAU{@#rRx~$J!?| z@SQkS$^KTclyPsYNZ)|}FM}GtrSoM<-*Q+;vs?FmV~o=@eau$gvtNE3R)KFkamw=a zTjt1#+=ZoQZ37v%a?!%6;jA2Z#-fZJm7jyWdOU$a?Loii33WH<`kR+@+kE$BHH?RI zxP30VdrPS~{q7}`&LhS>4~mPNqNZHv9K&6!->mO%R+6N&<5lj^eNh^Acs}pw`nj1o zQ41P@^-=}#upQT^3n#^%9in;4rtF@gx}OK#xAP~0eOv8&(WU+IfNy8D@*paTF^aP# zr0|ika)~R2Z>AJAE@_g|-t2^kQR{NR>Qnc#$!GFvGR20@HJeo6-W0Yd%p2iB{Kz|Dc*NKe(>D-$b{oAuW z>4Hh6_xNYhhj?x68A}osysX>X+YhRzxEwg&A#^P~>zecY`KOLAK95A4KD1^MFUZd3 zuC(*ba_@mkL&urBKieMO>d!I!W5Q|b+xO_#*fmYF#9+y(C!44vTj7!o+*7~rskgP# zW|%g5&0Rh!~DCN~IG}?v&Y*ijBQD{zS0R{KOgi`mZYbn+ZrRG2S zu`#@o^UgKMN0t6lj8-j=T+Ql+_#k^{RbHkBCJ*6#Q5NfI8@@P&JAw=1tXK-}Buk{Sh*l*&f;oj#)pKk5AlzD7@m|qw? zI;nbYY3%n%cbI8n77Pd*pD9@W$bn(+8q}A-i;%Uiull zi>a)qLYW8a^K|i}6)~AtP}G}Q+m8(RI%}AJJzF_rd+sSpiI09fCF)d%|A^;l<7iIw z`wrHp?tDA~hx*Sh1jpd+ZdD5uZTg#st_l4Y8S)2AL z1y9NTk8E@^Vx7~WPtGMQdwktq&R7#lYv4SqpJ4WrX0m$C0Y88WI4M4_^Jai$Q@;Jo z&1)dI#t=nY4!2)*p%~(hGTx?5Ec6BU`uyJ9z43ba+5E2)CkHJ(my$AfO4c7(ZkJk< z<}wX8F9yl#+`RQjcs=skZ;I538)`yBe3i_SiRTUC`Fr|XgwC(KiOi)+GnJ84s8kyY zhNl#qX*S)qk0}QSD~ob%aj8z-lIAiSDB&QoS2$l4P7tg2Yspo~()cJo>ndv;5ng(H zfaiDg%G}i}-&5v?e*KEcaMKoZu6deq`;$7Oc74(irQv5ChuB~E)eFN;*Ef@r1@c|6 zUK;B+8A4v&Qae7JPEk0#|M^h>55K0Y`@B>)Ycf(Z zE)RjlBDj`3^8R}BHjk984z3>*upKuR(!M)Zy1i|+nyI|G8t*S&cK^HLE2e##!L0)8 z4hn&#lqD;@ay$?dFGnDs|iBRz<1Ry(6kO+;~sE%{ISc&$ZvV{KQ7~ z=dtSIYo^WYb&;$^{WIpXSFS_{q~>tDt#D9heb?gN+UfA-l3H#1!bNM!chk&gkC$-h z_*;zhrFXKr7hJMxrtfJu1_wFNsf5MZie=o5H_|GZ^>bvfd#+)9C^CKat-o&0=gi74 zy0QmpWCE1{Khw8fckqkJ zc6rlQLyc<3!k|Ii?3WSkfyX6YMb(U(cB@}Eg+Co@OeoPg$>e|E|Lbe|oGK^R>BUxc zd&N5n!#VXPEZ<%{8@*_2`*w}s611ot`&RAky|HSvW7|CwR{kd!S@dPwzvX`O!*BWX zhgGP|fN7(H zm~E`|w@;hXX`i^JZRrlD3z%DFzA2XWVZK~3S^iPwPJx+R*-8C|e#t{0-{)4dsO)!r zamhev%~Su&b?Y$W*!F`zBppjq^|!GHn0>P?L^0|lNb9hJ4IVxtkT+>=|`=z?%fxdSzO+h z<|#>#F>RR?Wza}A5Q<`UJ*C-gw9FQ8?Ss#tWby4Pg;ukscMau{2S_~C367v)SP8Eu zbCc?M#@3p?ZQ#k!UHX0x8#c<;~S^$K!bP3tM&XgVwPuB|;9>-op2$S!Q7 zOPDVva8SXdJ>(ty+6Q!~L z%P<#8vnG14dUMS5iJqnVeF3uFO=(Jlfz7e(KiobH1ah|DOq;yYeSk)?+Wh%Wjrl_@ z>076Ng>2?5$31#WaVW(9((4o3OHcEfe9B}fy5{1aHJp85$#~O%X_MDwYvbdytS#32 zvf$WCQ6)xc4lI^%mnmH1SSn2N+S5LKIQir9>yIY^47F)|^fFwIUgXf+GuhguGDH%5 zY2B5Wv+$K}qW>0gH?*0l5BKfzc5;J*iqB_ zZU1aDM|4pnZ=sa~TB440BIayJfct}Jl>1^}Jd~~x-wv}=r}a)o1)N2?@sCuM1Lv<# z`;k~`%@yE1wD!Gehw>#S2Ar){d!!&MD6v<)Yw7>86wvE?PGPTOE5I* zYr|~Jq`}nBo-KESmD|5pn^uRX{JcJ|o~iI7{7JTNHu9FQmZ8IWJh}O$=5^XNTaUt& zLy1YV=A7HF*aw@ANVVf`@E?EwZ3!R3_gli@;CF|Kq33J37yxo{gzn_wfo)~Vz1S}MI^{?%U0$HX6xXFj}LOV5xcuJkTE zOuCe1c;#4)@03ka<6!q&+*0Zwi_X~RPaQM2YHp(e-$3FyF!G6oM{yxJLodffgC5#S z@tsFw`!G35cXpEPT~AmK76oOF4Dzg8op_;mYwpSD&n15sQl_R@Eb(03n#0M7gDYCm zIjG`UzoODVKGdqO{cr+?F~T7hXOrR$VYm&z=Wi|g+>K;>qxK0EJ~eFo+aQPEx9sqOExd zp1!GZB2Bqp(46r~xY;ZHl;GRv2hZF`FEUTP3`!OJmDv(^U#=^@NAyvEkK6+4V}qOj zrLW%y_dPqSshQi+mp(&bF>Ib>gf19A*4NGSrRQgWP;n#N$~TdyMR?>9WwIvRQFSKU zRO9$*sse5H>u&|<1aew-V$xh?ub&OL$k{D1dcv_F;2lrk@aop~%7TwYZGRSRSoKAb zfDc^fAHT-D#mnB`Sl}5oz9Do;8e8Hzl+pZjr}^@-)fGcIAma73f2FDGwauBTJFSnC3S;kK!a|)(*A)gk67@C@QQXBE zaXvm-c)5(?Zo@{&`}-V`GE`olf-bl(yK~xR`aBH9dK{$;gPR?n^EC6aI<$ zo2{V8H7T=xJBq066HcMn^N06ou#7eKT<}4+c=M(0-FPss@*q)3$`ds8U(zBl$D)eY zg)>i`^GvlrWevB@7JgG=Q%a(>%EERW4&ArG3Af08V(T(_+^h5R_58>s^h zgl=r7@9g9?9@Ijz$NUi3M#4 zbq47r9}GEiCY=_e&f%?DQjgMB_aC_CGn}07%AsXfHa5=sRbh1~@ST_%flpv`{AYcM z?{I3H7B|k`-M4vFtticVFE{Q~TDVcL^Xst)CDcLvRD+;li?n(@nb_;DLNhZWz6p`Z zbSfPEJ4(MFF_^Ksm0cT`IZV+#(EGqU7-fFUmzziN;NVBbTvmuzq@90GBf(MKMqQn)_DrBpxGe`_<0*Le&duY{F&FUXN~2 zRU}8>+TnyrXl&MdN}0te`%#5Mc>tVdE)P4lG)cvO>}$erD|_OKR;3nOd2_y=hH^nV zhP>2ZEifW(i>mxmv;Sr{{{{fWZ^ODax4L40m+-tdzx`u+Wo z$=vEnn-WLXjT-f4bJOLi+g+b*o07M6-TY^3c(dEF)6D^2R$WakhrQb^m7+4fURxU& z;e9-Lt1Lb8pf){@^Xz6tak8a%d-!)|!fnki1EEOk@JKsR^K?F)$9w}|WwRtEEjnpu z?h38geYYG1X2OkgrADKFf`v6Ku7G}B-tynSQoRiJGIVqBlo_}LK97&-#j&=l{PDYc zu`!Fbvl}NrvHj!Z6#-PazH32yYR5}$Mev&^;OS=gw@!vDO;R^GQToRO{k;tPY_LZX@<6`>_o;`N*tah0#s{AwomPdTveIHt~AC9}l@~F9! z7k*!U`&Wn7J%=UD0FB{cq`L3QnHN4>h->rXdpoqQblP;#{{)kGkzL=L%dv)}kr>9I^X{asOupJ3)32?Y zIomU~r%@b*?qa9305Y*GEda)0MYKuJY5Aag|Uf7}fbW+}X_C<)F zDaZEr5x!`HnbAB;zvbCi9xCEgT|r*8b|o?1$9K-`RjX7v^T>IJ>F$0|e?NVYu=Ox~ z#o=*V^K8HPod?KLAg*178Gfal3d2UV2*YwKJ2_S=7{DB+gWlM|q$E&XVgNEIT!;=Q z^uOC{jLBw65l0;pB!E!p!wgtC20R;ftywjg_~_~HJNHr64pzELl0N-#9W-;GgoSv| z+Pb<~GqT4nMex_rtQ1X{`vL`y5=gB%*aaqNJuZyKK4Bj|f_WJRZy_fvP18))iRHzY zRc8(%Uu{5VX!Oq|Sef#5*m1^t&F?oK!qT9rKtl!Gy$Z$_21SO9Rm@A{?vIZ*eU_?d zt9Tqaez9&ycOZ4bPC0eYcrS<79YftZ(Y|^~VYMq_bn|9qgR`UUBo%>1dC47;{W2B} zkX)MHGd&3 z?CUEnfpGjVGws%2Tlcu2pgO^!pefJAa8E_m(pK;NY5u;PY~YL~hZKu~u!DZ*$o~F_hoH08-AE)j zb_^w9QiTF@2zrpTHD&}bUf|mDElu!N49gX2OzX}Fuu&N3dzG*cNQ2D~_&a})w_tr5 zhQKELeG$-+xGgdQ@VOK^>c@boA!NPn-(>ZK4ElyX5r`!KXZXkn$+kNGZ2+WeXX*~c zvlmox8a$SlIg^qg#!tuJ9oBI;CAIceG)>2;%mM+N3>d4i;)&*e)PjS)-?u06(Qr}z zHr*d4{Mv(z^Lo&eB8ot0dWG+b2n8Pccaf zg@N(K&cU$H(2L@phiDj-72d3<1!Jy}gqYdJ)&W-Zk2*+!zMJhR)CB>*VU(tgG1`+0 zM`-yTzR=H2{WM-|&|;_Y+Esn8+NJ>Zd(7>DzZr%Y;D=a5N9mW)U26w5bo@(D@j-AC zrk!!LJ0tYm{x`XHASc9<*hA#&$H_3x6GN!wpM+bxw?VEZS1bw(L4W~VWG)&0fiXxe zvGUxvKhB~Hr8~B-#}7%gc?$T_^h#NKc^a{^;BiO`axy&+U0~u=)q7K_}TcIV9;&e2k&SG` zAuF+xfmuCpIIYqu>sW8S*ROMz%QtH*t|f1}(zhJ%wu2toQEPs1EWLe%P>SaS^7E5Y z_Yn4iF<)QWf58WT#$p~tL}LLVrdbOaG)zW__lv(tqX)(lfRC09#|UF^h}j~g@`K~o z>&q5Mc~W=`B@WlKoB{V6wVY<3Ie=BPE@9F~+5ij=r2$a8)(uq4#(&lghaC2n$Q zlGLGb;|xg!S~66iJ;MMVwc+0}5}>i=CJ%XfPkp8};+_#`k6cMapiCYPd}Gp)#?bR7 zq`BzkdNRzB0sygHdPr+G7SMni$>YuEk?YyBs%EV@6{1s-{vhJWn!*Q(!y1r$p(D!k zwAcdZ79WP~gWiZyKpuu_M*y=OPK2H*@dOx_F)U0BMWh9bgN!hUdJEoN=O+`Q0ptqQekq^qqv7_?)LDpqtEo%Ls^%EigC&L<3EN2P9EsSol&v z1km@~-vs?+!@vaqdzt(sYZ<-&UV*h2N6APOox=tB4!{jYJ%$;qz%k=!t|;k8SZYv)K%*gRtiwXq*}a2r-V)1j=Fu5RTgW z0I0r{Yb1T~86q)R?c8q+Xt+jFv2S|P$atW8`3CdUO=?bXVjmpEiAZEDDrj!#9yDu2uM90I?Sqlm*ijld6!fuyQ^jlG`zw&W zbu@I2vLSxg*kBk3K)gqqXh(pEo7pl=Cad4R!Fc9VM|H4XtCJsp|uzex7}y@2ohkFdtt4jhBkgp5Q(EYbR zAS(pH2^`Z2T@uJe;QN;?EwA{+{e$I%o69xGHI2|Ks?=6_k|(Ldhd~T?suo5VVy!rX7NQLGABf=~P!+rfy9{jcJ{$M~rjQ{a$wmfE zK!CKtD~=TPTy|R_=P)&OBp`tOo5We5^nfnQrw|+@4A>)umMUe{m* zRM0lE+)L&?mhkDO>2X~=WLLnr{CpJW@j zUWfFKOY%N*5`i85V^;UBJfvd=y{f3DW=}<&+@;P^eM!hEa{J=Y$eL4-_fSAHwKRU{UrHfHK9$D@qe5gv*Dd z+__v|p>);WuI%c{{Zes$h^Yl=npV@#uLgBz+GtQMqCf9IIR0{k&}_-f#~Q24Kyo33 zR8fv`0mQ90Idx|uv;{a`kTc(BWM294G#Nd1TRl$<540|mzdPvLYs}AMH2^#s~fD1x+HrN^peP*0K9^$`c19CTB!dj|hoC}dH z3AoKUZlq3h>2u5@VGBjtXvqZRz;+;Zz%#^EDFNT8Y+}TZNgh-9P?MFcY6{$yw&Plg13_Q zwRvUE6_2*ilMJC~0R*%-w2n^Ti|eGm>_P$9dUGom-Vm|**s?e@dP>ekN+XRmR;MH(zReMH(27McHrGAt5} zcm9VX_Fi8ldx^LEjzAWavi{Q*c)3q(n)|c%?DI=_1!LyA4tpMVwYG+~i{inqcU-T# zu#7IO?AxRQxH$Ut)XU^B12|O_ibWma_3VMyp~8g2;f#Egixng2#N>UDfoLvNHe#`G z2&ZP_53m;^KM0zULkfn{>ZYV5ecjP7Mat)(T!~@OmhbvlH8?^6qJ&`sgrcdDjlWPX zBXdTC*i16JI0=)Zp)e}q4D?4oNdXuc!Il?$EC{?1j=-&0ja64FriV1U8mAYq zAq|cYXmIS*dwU)(n72~MfHj1Tjn%PSVWio8@SQ9aj`}~WEL1>-2huN+fs_)XgOq-r zM2`O?Tz4sQij~?ybVQJ#N(N+HI8yjXjLSPSEhbDAcW?4lj5fO}B-fPheF^H252x_+ z{?sq;9~wVMZi>hj0we+8JB!>&_*h%3>ly+z4j2@$VKkM9R2of>dy&;tpo|m|g%a+; zRfB4FhPR|Fg}L8H{rh>=fv-jx#CYBm?D)hrPT#B73svzrV!-$o^YbQT-|7a+a*bF{CAf0Y!{H@q~i;s!nvxB>%ohFBggmx2wo3j#7@n$cD(MkfeB#tl;3ylaUf`DdO)Wosd9giAW_N#u!4513-=?nSrP3bCrYYSQoKe9~*O99v}Xp{}9vBW;gsVcuQmhx^u_tk_S?3O1=&sd)1>v2`rr1Fz>o5YZ4o zR9H4q6bl90Od<*gFgTw2tYf@PQS{x&uc`Z$sO7^G@cE3hmW3!@@%=ozFE6CqItK0ZHFo7j+bMX{JNQBnEfIM$5EcJnj|E(+ zsIhe>TmqbLvt>B#Dmel2=-z)pNiYuZ4L6f~WsFq{bZi%da5MocB-l#<98k+R8?2au zC30$MB2Q9rb4idS0Wsf|48Fe?36n5HC``dla4hiY& zn!nP~zMon2A;tZnojw;7f`m^o2z!N-kQu~m_K$wOz$_0YGiflCzRJ|l)^lT5!v=`0 zXYTY2>OknE=TJ!fFHg`Ek3jz5N@h?Pata zG)j7Ks5U#=>A30nd(nl5tA4I#`r?D0Uwk$<^7ec9Gt6HX6H>d(ZT&hDw*&x}o1RWw z8YC@fq0l4gK%0d&=_D)}l5o&dr8()~z3pIA2TDpxMCRaN&>KhyZ1*PYkYVC_FK+lX zDo2aK^Naq0HHd-)Iq4-YvZy2*4hdYSzVJQ4mrIN_;({GbJ74JO1<^b7h45XiX`B~w z-ZSQGY|Dc;V#hJ>AsdNk5itarB8Z;2Nq7SRkM91>}1=80D z0dR&p|J#?ppjKYwQI>9;O|5$wP!*zQ&(O#z@5Q*Br5e)+MAQZRiAp#qt zzhDs6NN^Fb|1&_M zF`8@-JVhpWAQnsJk$(=F(Bv$LkCl`p>QY|;^+l=N?^lRwrwH?y*I)^ zeG51WXCAOoZpe%Tx$iCV5jnI4-3dqGs*uwZ3d&%g60J}RrdYQ8Obb#pNSdnQnToA! z!wu+;1sNwg!dFW}jZCzKp~(lTn190xnPl!g0VYEz!`PrfbI}42vrvTQxW9HY{I0?0 z-PY56achf}Aw56dgv4Z8F?Fo^Q2T`k%$eTcyovh9;4>Ww_r|X!Qo^$YqyWYgF;JZHU3PhOQ(r=p&4rYL z73DO_E~~z~AmXCPKtUvxu(qS_(;=~$p_Yz^q|F7O?A{^KBBTuz5j}y1Zm~gpcTwW6 z{U^=%6j{F0!*wI){P_)1llhVO9u+^gwIig7mEb9*M43BQ6S)S)0by8B`&bzbV-N=4 zhyC$16OP*KA;@DPbV3mJT2&?z0}=LLOtpE-2*C=&!7G!kW}=d0^$1p+`j5GS!P9V5 z5TdLH;Soo_A1Oo)o@SuuZ_JSnVJ|u{m_t*5&YoHq9sZ=shHynyjIlbL3NZs__E#0~ zwKC(4ZmV7E)VrqY&dG}}Tx7K8Ak*^{(iNPik+xrvi2*6x934g~=k;w^J%O^rIU$PV zbiZka<~2bQr7EvR-}}lQZAjWE6=M_@TFbAZff4E)#lLn)on4VmbfbgDi(8M{J~Kz~&_cLIDJE!I5X1o*4O z!3!NCfDUFUF=Sb@mJ|aENWyjgOS^!OA44W~#e-yAoHW>N0*_-6mTGLY8afe|evZ8s zOA0Vz#_ECIuh#Jm{*g09w!Gg%`BCCOuJ74zjDUs>g+i%95km=5PP|3>z#dx}zvu(C z0!Ze#v=`M*NM*t?t0A#nj)@e(n?I`}2q};g>z-6DPdre*ENK;SVox}8ex^PMi>zb+RN@k zg{k)M&;VhFnS9z5kFd|h&C`$wVVtMAJLKBG2R ztRCleFkU4ygPN-Bv@`b%%cac}0%8_61a@%GsVq+|2@+GMmepBUP{tbS08*(cP9Mjt z!LI%R3E?G5gPs|gm|O_CB21juQgj-=H4LpOhellK?Xkdiu;7QBN z^qQ^?_g>8NSJsQBJbbyKP*`O-Bs}T!du}2+c{4 zU1JdB%KVAhEQEZBl=ndT0RnhWGQN9>e|g1f{K^k2_(8;Yf6#HdiyY(kX%5Opqm){- z6cgbRN>&XV(wO;87COcoa9oT0S5dW8xPR5AO30`ogvRs8*-!m8B*&Ao{=-fN;t zclo1X#6LGPEAFGp31^MN;GhvYmVh=cD2Z`>|0( zVnAV76mm|phMXjPnM>(;5mReAko?DV`4-Eu9>S}mSXRO)HDDGe(1m58E)nQ5Uzkx0 zaLFL!*@>hEBLA^KA{!$C4N$<0guHtsJ^I&B4hSY8WRzUgK;}hYBb7{DbPP+r(?bn$ zdnVf1A^G%33jre0QSzE}f}1e&_Xe$N+(tOqS{42Sz|u4O$#y%OhVT%9%i-DeY%(`3 zTvYj>Pj0YAJ|YJy7d0}v71o~p3p=EixhNmL!4?u4GNX*a;T%dqCc(~Yo2&P9UyTWr z=d3T;3>~i;=%EBHN@GE^aJ?JaD~NEi!$>A+#2nc>iqP{UN)`3i4O!s=$O@MZqBSb2 z3--dv_a5*x>2ju&PmMK6a=1FPxoT`bv`>ap5NU@c9lM=$#}2`#_pN0&p%7#QXDHrt zf*@7`!2M&bB3K29;}Dl=B~*7;zJ?%4PdA$IXlSxrUAO|y}D_GW9zjQr)?5KqG=Z}aw|waxiYgoz0h z2ndKqK`Vxsm>3ZYvGL7o4ZH@#PafIm>q)_>2Mfhkv2e_f)_i%wvtR>4sDP=pmu(#U zH2@@c6(4xEMa_4g_cVR+$N5jUs;xg5t0X#7t)7)JPnMNvi7zCZCkqktWD6Tv>&e^Q zJYW-~y9iE@SZLq_hCTPAh5`m!CvsQ_3tZVOQ&0=1!4hJ`J$}!x6b5%?aOby=zEIG6 zHTS!4RUKX2<@pdrK(%OFA%(&)bx8W}{xg#10i9>zTd?kk8hwtv%0 zfAZU0CzjGEo^d|H#5 zIu5y?4K8J&P*9YW=;^^C9{*^eaLN4?3yvS+9`4O-l^lYDM7og5V{}M+K-LIwre%=~ z1ud9$Kl~P;M@DJw~ zQNL_X?0iyV{~4uTr2cvFo&Et4TT^LjKzL^vg$C%!wZo8Rv08CP(7sVUuh5>RVMZ|t z$4ej~$m%%G2toEA$Mj%CY+%5Kivxi#p-LBd2b?^Odzc~&6oPV>4?q0rcMbv+SHj3K z6503?9Nr@|yR@<(R>GE=kW**zOBp7(cuZl%PJpZtvg-o$|Cn_P?qZRNA8wS5KrAn$ zfH3o~fEFNvF|?0+(#rV3-$51s+zDBG_iJ@w$71f8+P33fUlqQKxlxYQKf zLTP|G9X<4z17pl$jL}eM*9Yn_bgGet5eu7ov}?S8C=B2%P@2_uPOg#ChlLd~VEhM% z%S9Ls$T>9VwlnQC{-X^SpN_J6I`~dUl1p;X13o`RKL+1D(YSsnqbElpG6p3=jps53vF--yeDTXXVkW(Zv<&rZ^ zF$9(bA6^9b*p&*T5+5CvU?gphfB8 zGQP72V_bfSTx%<<@~2{l;^nXF3j5t(Ld+Vnus=t6>jo|y={PiGsKJdFRwPxjQA3?% zMzSUmPU7_2TJ<|x_1P)enZadfp2f4V8QXFN$6P>xsih!D{=@{~&j=FZc$+u>s-2Vx z$VkB$To|y*D>)aT!=uU0OG+u$ysKLw{>6~-tOVQ%@{F}TblHbC0m?hrt=Ip^c;JR% z!i8KzbR&8=l{JR(K`8)#Bvjbxqcn+U37TC1rNnwJ;8Z2!zBgJaPIn9xTN0>JxwoiP za;J^#9C5&1EKdu7T^JjhwZ_1R-q*Zj1<4Gsm^SBM{YP?tMlnK59(5)c<}6zqt+HxW(`U}%tYGL5cYLV_%Df|LCz=>1laA>hO3a(0$kCeW&f_&U!($XjRg>$ zh!l_yXwX;xc2IZjh<`vzrm5dN`Mu-g##r!m*Oo?YPHMI!gcX>;JyC_n0AY*{S}U=n z5IGw}^BV}*Pa$K(PD4jT6R?{=816DeLsQ%&+pZ+S&|sxEmIPM6!>udM)#voS@E55> z{YXu{5{fz76nNm+1+66K8++e*)r&bEEU4WJqMT)bV4M=jn=3nG+Tp1if*_432>?HY!0n&JeMs-Gw18TO#;5`r$)61y zA+)kKei$|*ynFfWq<>M21=sVY*RxVq4OO=%Kj^kU&UQ_F^|SmGijs{D515&m+1T_I z`W+505A*B4d{vzpb!ILc2B24P5ip8@}olOK>xR3&*Br{63rX#0F>iq@*4V9!GvTi??7X#r1 zS3%{F$}l>U-gY5PuMaryX&ojUY5QwESUeaye$Hp^AptQD(}Wd#E3gR@jYGpwC1Zz>_U1?ag_FNux-RdZ;v$oqd*wOM)$Q_H$YC=nFG*|#qhfWmz28PtnB z)ZnZU?a2X9Mk;ehM^}rlK74j<@I|J}Gn4H%d>^+#*7El&oyKpU5`bCUVS3PM^9zAj zS`7i%ma2Nd(-u7;K>I(a*8}SSush;{WSq)!2rU0-knN914U)dql7TofP2Py5^cB$u zff;#qQZ#qK@o11fRaYx%W1?qaPfPinXN>3{OHn67Xj#PJ+3_q!jK(^~8f9sBP@NJe5@>?uor|GrT! zfa)lOJ6Cm*DeO+cnDS(OUMZ4$HjwB$H10 z)hK&z6ulS{Gq}M}3}M7x0#wcj_!BZkrpufwvcr83IQACHK;d%uoB7+9(1$d}nVTj_pkfp>D zOnG`PHvSs*pZ4h~+t`8Yj=6)P0ykdYe_Y3XBA@F3aJ+K_4Jt*azgAqxr{}o@9x2d+ zT2iQhD5XB!pxiP@4fUvhx2gd#1RUUokN}b;l!(F&MsP6-hv48piEzb?jG?>b$wTB@ zM6Mo$W!x@)3+U!~o`b%GpAa@|$_~Xve`MbrmJLc!>N7U7e2KpRcZ;C_@nIker;1Z$ zu5zh4ts(}Lib};HHm0??8HN&INO>GL|K#g`1>G8VFKWa=l0}tIF`RW>cGiu~KWBf) z+33+3b4W+j1J-{rvjFZ@z`0ZYYgRK7bOamRa8nR92%EcrSb9CUVnG2kVAQh`@*Bmz(AOT>^Ck3 z$o^fC-shE;^+lVxM4@jPOZ9 zskpkwry6_DeXU_pUK3aL8slZn-}_lf)fTNi{xgwlBueT`s{*Wy7OWWadwSd-7-X4^ zjP==NP;f$Ip-=h1bfnn%wEFEPe0S3z+$~mE=#ZEg7cEABTd)$^+fq>K@JB$YfGSys zAe6za8R>KwL&aR}q#nIHDOM!I^P95OMWudJYfsVbs8tN->1D`pq3c3MG9+onMu9i% zp@mzOB0-U=qMVvpp1kysb{rbkl6LjX0|c;9d?I9%mDX3XED1MFJ^yT70YNtt8k>ehx%Anq4c`>0p=7__B*U> zz&h-_F{a6MgO8q*8T|)tQzuKG-b6b0J!VBML27S>RUzn_66@i}=s!gNizu*IE)93V z!*uFtGNeb)aLhm(vDQ^#kjl;z15YG_trmkza#~Hc@5W5*H&zFm#o6fW?Ch{_95KNc zGKx;~S{P+MHM6iv=09<|&4nv?<+Gh3N?%_eXiz>NIi;hoV_JG`klx@BYG_0OpKxpv zX7+dw_T}`xl4FM?wEmB-HvxzG{r<+^vlv6jo-M{$Ln6B-!8%B;o3(Yuoq0agMBp3Y}HiuviE^1nP=8sVYQ!;u5ai7STEBrKaC z70Ia&x(@AgX@~|MjT{B6RiZQ{C}(~vV?f07l4X;|^!fh1d2ne>`CDvDjEa$WEB+1u zZF6|o7CAWn&j;r4(cg^z_mP}kB6%g}u*b;HR5`-{uK3=&Cq+0o67pqUF|_Rm`g789 zF)%~GkO~MmB%~22cCEe?j!$pebL2Jpuvi)N_nnage3Y%gmIpX~IE9_iWg05(n6TKu zn~w(>C0~X2!os$b>!d5U6Yo$T?C#p#a%i6M}JZ?MD3izI}AKzqPx1#A7iy%elWJgUprnu89#k zb~c$?)X^$vO1+*v`bsRVp?d8)4Xm_PfmCLgk!7g?Cvka5blB^fAa9}v+7w)%EfDGO zHpi=<0;`cCqyp{$d|a<5%3}r?zWk~mxdhg_^`of9ghbU-NmN+U-%$F`Pl4-S5`_LW z&kFb`&~%-BoHxxrR5xW;+*vxsLTW7 zszRmmkeAH51*kzc|GS*s_1h~)xQeid4_&^jVt+Q ztV_2_E(<4$dgpzZ6)Y>hT>?L=E%zbR%Vf>h1hSkxeO<;zsOBl`0Tz~n$S)~Lf4Acg zOHg2AI{~$}K}a@m^Zr8&@9<{*FE*+v+&ph$p!(jdGWJe>|e zM0|q+EWQi?Qb_MA4gM{hfXd>7R7Zg22vqEFGJ^!Vt-y}uXl?C>V>XYHR!2iZKiuL9 zO$cSkuGT8`{WWyMZsU!XcfDXui#&PBYSfdBlAF$?kEb z53vlfDJbY00_wGjC@5YP^&Ga0GT1?RZAM`ql9Lr!D3ENgPG4b%7KnUuUo5&uP$)okbmDc{I3XlE4qtF2*fHl_qz37yx z{i!~Km-uA=8i`kcXiipQ;u_u5pMTZvTzhGbk_wO6&5+6uOUZiKaj12K#56h06VZ{vtBlKn8XVcY10t=Ty(DIA6VTqKgm^cD&L8PQ46n&kz(v0rB%z(pQ+C#!d!2 zgtmX0#TprGX=L)96KWIgf|oWkbVjZTw{Jx^qh0qY%D5K%e^Wg@EpOI-2p8fYwu(X0 zyf-8{OwVL(ytD8`4H?v_Jx$3>;l&4-x~AMe&g^}bjjL0gZrN8+AKjG4SF%m>c{q8t zEuZlP_FD^NEultfD|rf&z51;n_}Az#Xk+{g+210R7+khKaaf*Dov@wwM)m43Mbv>L ztZqvw%4dwwn!l)iUbt`ZD1FHN4#Bqix*y={qom1+m zx-sU^RpVp)!H>hY%|(c`=Su5A0XJ5@RQ6_cEywjd7&xx@TBiNoX#KUz_xpeDTU&-@ zW&62{S!YR%u9{aM(sDvag8xiq$vyb#X&Wumr4}@^c-GE;OJH;4X2{t5bE!db1ucj+ zpy%CKe9+E0>afXt#7*ywS-W%m1I5hOei>;g|JwaI8@g+mwZlj2U#Zd*{H0eL%;HQe z05dy0;-S}$@ZT#ZcC!Wsl``JD9xqME2Vr+G@R+un7_n#|6$wtHlM{bK5J{ibc3*D;Ft;;gQ6 z9<4C@n^1TEjkbf7ifENj*W&i2S)lVFkIee!#Z`nxv(MaZM6~{1oM7L&JGnG?O=W%6 zsw{}POh?GWx0Gf}*=Et4oql(bc~c$Voheodclip~i}T|nm+@NzUOA_;Z!8K4WcwT8 ze1)BD2$z%)te>4K>-^vDMWmhkm5sUay-sH@Y+F{2jvqTlO|3Bl`~Zqr17EXI;j$BhC^z(JHlb@*4Rq`V3(O zB$P^Ct%F?o%>j%7hRWmRhFWX!qdc$mq{bd!*gSvJvvX@-{BB-BD2ms)zs&P` zl$oR7Qd}qX_AHchDAsVKnV-!Jot{5^vdOddxPrU#;?k<4-0i&M!G7MdnMrZLOz*h9nF@ zF9Cb!!gO4VkkIG3je(jjrMDL4ML|XQ>pW%nryA53MM3*Y{eRc^UcCG>caUel{` z&tCy`=VbTl0|^uRd4Jwk|CTI2Zz{fL?*;IS?@EdH-_W7Xh~EwRuw#=_)jzT3(r1Kc zzIsANLE=q)c6NNQO#QE@%)0dePL%ZvudCe7KFCu#$GQWe*<377&D}lxJd_s2G7M`T z%QMEiJ0X2C&A;hKx8ns;e7MbU)E6U7AI~XJAKP@mt|jW$g;|6Rv*+3Fb zeQ0gwu`|@CZfkPYTa+;W1Uh>aeaF%7me*N?p;30nea@?ah$`cJ=bM{`{2cc}i|p-| z273pk5SpreIGYP+Djq;SU-Z^_Ubs|1-{M=AnuV{yWS4Zi8E!GE629BXPc-CzRXut? z5*>{XOf;?bS@Sq2L@IKRcT6DN-Tg2|-Fj!{Cq3uq%LVZB42buiEqzgCPar63>9t1G z)_~sJO$zTHhBt>qU8<>LlVMRMm-TbdG_}? z=2x4inNMp&Zuw6JZiSU>JkE!eWt`N1wy)ZA*y{*&zi&^=en%6(;*8-nxO{9n!!Ajz zTB86Le)86Sj;a>o^w=KhwV{&e2IZNO?6egVv;C)tsy1IfNwZlUNBUE>KH+IZ*f-mz zL4&@>u%YT#HGAX!rg-1U!l3!^5^fhn0PamjpZh5b+m<+0>MFe>Hadi7W5mfup9{}k zo`gZ%%Og0#(7;LLlX8N$pJ5`azN~qW8IHoY`(2udyvma&^{$<_(O%~{k}pQAHgbh+ znSVUoH~LjO8^3oUET?(G;R2y(uyk#(z9~4wJ0xbheXwOM^{BCD2Yq}U8ai1KdVISv z;_jnsjMs#JuFWp8Y!n0=UV*kSW1Jel@5jAhk%Lf@E=u;}Gm~O+Y#0y99lNOz)$?p` zc6~>W(_Y|ErtA|f3a~KP){KK)fx4v{81_{^U344L@L_l{rPqR{ykxjT6G03{$G{Tz zKN?I;ldj+vmz=I4`Fy_Em2Z*Gu~|!G8lOBj>p8qPBc>vK&T0dW2wGxFjHFMw?;J4KF1PJ+)oVOyp_%zv^o8+G_dE`H1tLuSV_Zy`QkWi{ROcX1Jfy7hC^ymcZk?ttS$3 zOJmFX3HnpeTiR<=Qae&N#T#g2;CN7(X^p*)jOn|F3p70FXS;D}(tZCsXf7h+qBkGUXQQtmP_7^R=_zu59p{$C{-n z!9j2dJzyYeClrfx7*A*2TruIw0Lq{HBgcb;oOBO~^jm!VVtJ_&c=om*C1c!~Qpu6{ z+S0&>3xj=mp~~JrkL00qf8^~@a|yO*^dIqz|9Pk<_B2%~_DW&bZ>3Qc?`ub^q*^oj z>YpxQv~2bWNPWI6pcfgS)|=7C;y|yWpMCes#TU33!o~i=;y1$+wQy6O1EZ`GqH{zp ztr`jn z9tE8WKi#$*aZq!EtEML~JZ!*yk0+0pE>KIzT$ip?Z=7EyY>DjFi)j|qT<)jbJ)jM=GkIBMfPo&E*wn>l+Bgd}D1Uj| zVVEkZcP8b+%1Gsv(eCcy?8Ft=T#xq3r&5a}wiE2D5z!A0w3~iB?0Z#^V&~p9J}W$L z!=cNmf6S%k*6QZBH#YX0EbD=_5>w~DURd)Puas|h8f|v(nR=_{iqNw=6L7r$S()9- z^s5b0bijxPtSg|?K}0pbe29XpD(niiJR>7=OPwD=>$SKl+sZ99d+J?1Hzj*Ocf9cX z=(Jy!AOp+n%sYQ7{Ou;s9#v+{fQ8{*$fRdyg^^j^t=$9sd!fCUbw1Xzqw@O2lcz@v z$~!`4fQ7H4Zs}#%?PNI=K!!k$a(OP5a2c~4?~0qsJZuOVOrSD zXc)b-5_A9FS63D?FU8Ru(S7naoN8pJ!-dQ=5O z?>8l>J7?dMRO!@aI<3>A)Xtlv0F8(GHdDf&xVM`7?zVaso8sA7)l=YX`39RX>l?je zT*heeiTb0?v#Ge}Po^A=e2tAo=t=qtzt+{*Q{#FcJe1;kddL6f-Q<|Ek&&hh4U5+d z{+-M+qy5#3rvsPyDU4;pq^~yKkQ|GoZ(~MkK&{K~2GoZ+$)fujwt;xHPNdwnFC%dH z#`_T58TV77kJvDAL~L$c&TR#*H(PbWgc7s}p_JGdJI>3(d2Xxd*Ndv(Wx|UA2(7ps zx4Ef}Hqf6iHzJNl0N<59A5#Wgu%E14c0*g?xpe z3&4y=@F6pmw6yr&a`e*pX677eM9oFbas`a%3Q%b7KgQM7|tJO z>$1N7`0&8>-4GsH;k7@@3gNB&_)9cL%KNSb5{Y>t73$K>1wU@RoLagPd!>3!E?zuL zO*+l^+ru1^Zu1*c3)W$E3UyUujgO&OcUGQSFU8yBeM(Pl__AvkdoJwdq3)NYi`vBE z*mSH2scB`aZ9sE;o0hlr_=kjREx0e)JEjlRBawO%^y>8V4i+K74>!n-mTgEic$>EN zd}luYi*^?KY7=913M35!K^x1gC?@hksy|Zs>-^Wz_7A@k29cp#cRL3~U7ykpz0VGY zb3=B-awaBQHOG~MGh)Y{{d5rhK?LrH)oWJUplxv#nCXDtBijZ#1`*Kb2-x3derd>+ z4Vrn(>k4_CXyt%ci9mz|x||!Y7*`x?2RFz453ld-YE4F-CU?Bv9R${3y^MSf2TJKomS)pdM zw?&5E_D)EJm^-ti8G|a0!r1Jdr5Vg!>S#yl{n<-?iP&ghLn|Q)i(Fz+f0n@LBjGcu zZids77P)Lk!+F_4)lBu<^A_W!$X1Ne%hI64{o&0J{KVzdJRlU?5k2`>z*}Kpm#X`s z=X9#d;>?^guSGnN*2h3x0uxrC3?TDY!Jx0e+LQyVD!^P1%`MZaBEDH5E!Ch#2z~Yt z;`nhsw)e8Y?D0p|bWITmVHkcF1<62jOppqfZ({ccFuqhzvSb4M{dn`E^sD#eUGF8M z*l6hKkKMkxw8V*6$U>D-^uzC5*CvLEtl+Cy6XLk{7SiT8s25x>Tyq3Ys`UkNS8BEQ zd#`aSDjf_vCY6;>(e|HR3yb5&BJ|i_bsd=damGhdCw=02bljeUfy)@F&decC+b-7_ zT;^fMS^pqEi=zHyazpfyDOYk#zB|VqqA*IZ#A1>yC|bcjJvWp3|RVU7fK^=5_GL#Pqc~q2A$Ki7bQG69t>*+_crZRQQ zzb|_HYP()b3Goo>Mh4=tK0An^d=Q5*+lf@oQGb^I{0zyzQ%>aDaOHUZanc;{YUC9j zCd=vnjr)|)-tQyt7n~f>E)Rl$syft}QDEr7>IT=%-bhOTtyO zoxTf5-eReK8VS>p+*JnofHpBQ<%&u9U<8vI)M?BlWm*zYZt2Y}=P{^HGBJ%-c$!rk*!{hzurh!*YIgb+sJdCO_8=NNz>~Y8MHr%Nzu^npzkui zZCq}@{;M0uR$>y?D;idakslt9FGVw3JH#o1t{Y*I?p>UE;m2q+Ts|p|SS$}rjBeKB zcPHg4i;X3zM3O|&(WG1wu~%C%yEOaPPeIQVw^e%E68AF~^JQ&AC0Fz_O1)Ixsw_r>wv_w~D^D z5lM7DeZ7xC6LkzSL;Ls1Xz^zh22zKfQel&bQ$E=!aqrw)cZe>ns?2+qyB!T^Vjf1& zmfx*_HYThQu89kylhERXBVl&`7S5Pd#Rd{L-y;pC>Fv&O0~0w0=GQ0YC+G@A2z)tc z%sVmTvW%JF3oMzg?~A%H#Tf+x#{zW~^d2tB-IO)PG2v)5I#?dv%F{J@kS^(`AXcoX z$Ya>_W74aVb40kX1Y3fpCQy^A_H9^p#np|#ED=ewPFt!6x0%cDu#Wf3#^I@{qf636 zu#d6h!E9l7y5CRs#GaxxCkAiv{Q$BY>-E-`mQSH>;r}Gf(3tO;`)4G6IGTS--9g>m z_{@4b7YvmI(gg6c;q`$``vH)}av;pfLn>QTuC7qWC#p8soF)7{IG^RZ$~{RK^LI+$ zmAlRLdH0vUS}K6vP5drB6v{>pF?Fai98AclwL5|19huSoEcu&z-HNN-506k0qwEOQ zJ}WZeB};gMSjfThe2}}tRILMbaol#^_n#Z#Q|F?eL(9qNK+q00PMxW!#IR`R9cYAR zf-^2#ZeNQ#Ok^I>D|x**Cz)6O?KEpB-X@X|?|qaVQGkI-f}}@JxSiV`_v7Sn>CDn} z^!2xAQ_f+}@92jmYQj`IN7ZTdG|V1~pPD^;&e>~GDs=hVzo?b$I^!9CL>-F&w&vYS|uZfNN zPg5u|jr1hj8DCVXi~E^sf(}7=6*+J6F@>T!2M)i7us+9$M7}wxf2^kj?7shGO>U4i zG3j{VEG6$^4t}8L_z~C%sG*i?_;^h`j*8xy3%~Y}X*HvMZ>0W@%)CsklnMgcr-F1C zp=KB!t%JDD%O69@UGzJcoSrO;tX&+KJ{sZSx23B%{GGq!sJXo?IVk&J`%1kL1D-Y> z1jI5|yl&(hdwRD%7~b(mwhWM8tpzU`U!HpNyt*`=I(H2lt!XjsSK>9)xvzgqZL{KK zC;yn7aLlFmC2?#W(n_zWuqAQm5;Xk!+!a4=ldufjOu5SIP5z`c9p)XS+ed+}db$F{ zhQ`=a;%rk{@uh)p?#r3*f4QznHNnm`s9KwN;W9Vw7=LcGFz7dhkC{`D`dwd5XbX=; zrIqlZsIeqM&cLgFlD{D{B|=MIeN2N8{3fntM`5YgB*XaOp4E^L7^8}piKvi8K+j$V zowxvco>#v%ar2Gb}wiYkLcLHPS(80^FIc4F5}HRyw+qL^osvbssf? z`Xrpz0hHt@JZ2FloNoB)5l_U2&wZ(fgNLE%aPKovA0;@15(aq#xv4b_2DNId*z%qI z#oktvANsa=!S!{O1A<+T=+R0n-N;{~`JiD%M=Vu(`oK*pX+N1eGw z_ZtZr=^uy43cB6M-?2I2YpB1NhZY5Kpzsk0RfGgH)i`}?usa^(1b3~Hx_d#t|Ltnw zjmf+AKk0sRLq;fIc*Td+Lxn{}oAblU)0<<8 zk31hxJ0R#I@f?@^G$|}EddzX(HQd-frzv)fhW@E-Y#)T5@KY5)Ppt}xu(PndHnW|s zzbNBSa2so#>9;}o{mZAx{sD`%w+%89dbf+RqQtg!{;}57#@o(nEKk{C^*ki_|IXoe_^g%D;IEEtPo{MJpV|DTEBwBR~2c@ zOo3e8VoCtxvkKACr%D<~vFwa**U}q`@ASOTdBse?#EFQc5lPNxdj#$jME9a)nJtz! za4L#@Fg>Re>spN^?W$?JscNcVIfaJ%=MDL^hb#KMqA>Y4(<B3;GruMB0_JvTQv5n@xe5wZ6A z(we#vOaAW5(0D44y@({NFuhH!f^5cE~fTEvo-!ulldZ>R=hNy^&gRsX0!6bx3+R16Xnf6S{*eQ9CK~usJc&|R3N{(!%Ih8()RN@;Wd#q3gHpcgJSpL zDtV{e&}o+G0a7grB@GL6u1cd8-sa6`ztRcch<;QrYHxIbM_f)xSA!wu?9TBsQRyT+ z9*;3(#)mbC_wXj$>Vc&~m`bLK_@B>vg*pHDp0M#HiW92) z7PVF%y?F|kt)_fCRRQ)?eZ5`r%ZHUe@mP7XAfKuV4Va5UPcPIv+K-hZ`xzXFq*&B& zzTTmCQTrHOitzml`pizp@%6#uC)X%Po+g@{3won<1g2cg#BA5nH-Tzn$6iH{2SCTT zbLp%Pp8cwz{Tn+}d|*&j1_}au6X^N!(A@8%O%&4*@}IJKu2OFZRC7`)_k5v}UeRY3 zT`|v&vtHk~uFMugZXAO?Xu(=d|EFv=Ll~85xHB4OWhN|Wi`;mci@Qc)L*WFHpFHbb zY?oXxaAUbFEr+@D=)3o|91@YF z$Viei)Sns3C@SO{zhi1TQ&!(_ZAoGkMJ@O|EU}A`7oSHEroJeMOO`k3s8sttLrMB- z`YBRE{vOeAVR7H$+UYyD8%knN(M3;X9l9tg+|gWPbZHbE@LR|(Ee#R-9GA1^Kmf^9 z82!0{NB8b!RTgz4(B_Kk82X$~I5d8>qnl43yM{&4!AnH2Im?42|7YwB@ginV56M~3 z(^b8NM>G4wWfvAPJS7qx<~#OHT6ip zy;lzq9#)2u6(UJ2h>UYFHJ=VM%+GOe#gOd!=)Ocwuy&;*juEd18oVZ|+agp{j%xyQ zlcWIXJ{PNd9ET7=MPt{jiyL@?(#;YQO=S{hj)#n!NS-ioninQHaTfPpG6zYDf&z!s zT?nY*zoi6DfWG+Hu;PqDUp1)+i_<--d?mqRdIFo9Mj|%5F&nYwxnDfT@FPWhV}7v9 zEpD1WMn9kagfBpSMn>{7y{={Dp8WdxfT3q6?2v@}N#C}dQ-)(V zyok9aBJPesDHekTpO4>C5WOjJ>sH0wJgc3ug#>#&QWcrevLIU$Un(L3GU2=Ax?48{ zw}mz?Cu!Mk*ezi^g<+Hm@--~WdM0VoXW4TvJJc>(If{mA9$Dxf}m00rU; zND*J)#Q3~cDCkIBjEjHsPUD7blm7VP&9;|LHVxEW%uyYT0SH+R%Qr?+vNx}E?d-;(=5{n**%&K`!&$s`R;yuhbS zp}u3<)d^HomXKXqc?x}K>t6rv_Ymgi1=jbaXK1so3WiXTt3Ynh;{g8$pXX9pQbOe6 z14O!^AxJ_MNdUAga-1HIdkktoi1~KL{@kn3wvURsDMtq_3=Mw(>Q2LGMyUnLmRm z(f(2L`*S;yn1c}}mas^lOY@s(iPJUW?Yf{WJv>+@ekt#^zoGFS&)ZqX5Q;ESx{b5$m>m}9C@r@w=3d5;${!A6>$jyuFRt{Tti~_L9U;%m?@%$g_ z<{MblRgEOfByo>&>?|TCT|QLqsF{JBxzuC~`x2IP8Fo)O7eYZ48Z!Z1u zxR1N#tv7rIiQfg&G?7pfd28*EgUsja8Np?|()4C;h0#?gE|0U1(KJ~epRdvp5q=@d zZT9716#TBO*6}wAHhtI`z}u|uKv)P24hrrj={|WF(Q<*0EzN=c-rTU8xTMS1Y1mTy z=wQL2QhTXfFRdY9KC3tOKRoxlOC_dw6)>~c%@TeMPrqpcmC9mtCi0tO)CP!;7f%Izcqfj})n zdJ0R{dDAP(b~B7}4{$R+ zqhuNFf(L^kicdfDx-b@KeLvzQ$j9IY0H$trx zlHYEPfkzKs^dN?>f@{2(Bx+O~buQ_#+$j@d-W&{Z!GXw>c>95!IDsE$az{iS5T^LN z=u^hh3_9y_yw9HBB$jc1))V3sAdbG6sCvAvrJ60B4|5m`UH_FW>y{_{hBK@Q_6@`f zPbQ|On2!G4V|^DrpPGMS0P#HKVDb3>9xnbXRAt9w?$Or65=&z^zk^84EK{q^=GXm;|T{%t4W1X}cF2FNj zxIz@uYMfL%A?+dCM>qL!7|wpTIcSu?=(dw%# z_gIk~Cs=KX=85=d6A2soNOt)Z?Xmn1LTA@xlTjarh=C#UDkA2kZ1P$qZx&kh&1sO4 z5|D}K1?f1jr89`<1hBQ&mQOINsjGL6Etc-R&wFK;=B;>MJTsu&NTs+Yo+Z+El7xxO z4-CyqBgvPLFc@Y_!fn})nfbxWze5WWRZ|nEg;@iYd&OhLigC)W^incinZhOBh>)T| zK@qF7jC6x$6~WC%+TuSFb5mK7s$3RkX7sAej?a^i?8d$OC{Ddy6L(L$5+{-b$BN@@ ztgj1nV`e>uGXd^8GwK^@}?PH#kdpj#Cv zG2Qaeo$_6aoePJvuZ7dFvOqF;kDLq$8G5 zav*VkHP1rPakxbm)My#BpF}{*988(-qxjys!{{;NZ;u|bK|`9JK3!&U3!9rac-OEb z>V>%Sj5P(*B76Gj^3(AyuO6DpRc0)3-BVOGN|iq98w_Lw@{JhJjvfcyh%YFV&-}ifdEP1RhFc%leH}}(v-`&Ncd$2q9*;nz3gAT{RaJ1-f0#y>4 zIu|c2GJCBgfGHKIJm6(X>Gbzis4nkr&Q@BpT<$j;13kjN8tSUTSI$+Ic$%t$?kqKy zDB-rIO|PPPgcV~p?%u=pE@v@vK!cq!M7F$s+Q+O z|2s{ng%x@L2h$`~Siu^9+xU9YAql?_`L>#x4I-6&ePPaF&;z5BfW)L7Xr0RnPVBhz z8{ko8s@jYTak;elCI#7zrc0>awoX-GQQJrUSbT+>L&a__Ll_kBfm0=m5&QrD%c%p zV_{GoyhEg_gCECRZOt%Yz$#qi|0ZFM2x8fQ?~-VVvTBT-iEc<=M5Lc|9ErIaAO=M_K(aPirW9Dg5EZV zlWD%yeH3Wp{11Rk0)+>?z6$W2gK*8};R>Z;;6Ok;1F%ibS(xe@n6SChV1ym(&V81U znH>d%5IR@L;ljTKbSwR(l#}U}3KH>^l@EYi1ufsHTAu5iT99Sl6tIElQF>@9SeO#s zLmGm|5LdjIhp#@t>;(!xG@S=JWuf>2Ur{l@BgqGB#v9Ldlm^%DEtACJC|QVHA& z`2K5Av6%hX30%i1{tuUBO9V@R>LTn`1!5Z+Kpq^UOHCgP-8M_amb`i+uS4WFX2BM^ z=ZYi*eULl%+Q6OEf8R&mSb9S8roO<)1L-(*8Vw^OB)zn@akqK-<5jt?d!vcO97j?P zIxZ*wqme8(l7Ni^05VrZRrxJj%XW75{{4M1X9X)PZO5Gm z(N=9kF$Xdkl1kO=aIk!Ef_|0DQ-jOR`&-$wI`rd^{~v@T$AG^8G8hi3jzekkjyBY| z=!SMscEV%w5W;h=_btl2H}Yk1PkEN{^(UZZ1lb_+O%Oa$4+buZGC$tYb3Idlmtbx~ zPHKGKW{N(H0p~CeqZqn|N(;0uF~B&gx$h1>$}SfKgezWl`zRF+4P6q}#(cKico(uU zCts2)$m-Q>KY2osnLi{uqi`~3=b`(FxYh#OTwV?# z7DybI-b@WxXM$msd$+JoCJ)+W7pol;dGs@IRHbK6SH0n9JcV?H8Sf zAMu5=!5LS9K=mKI&h>Ac_V^DWLbi>dFrsikhZrJ|>`W?ca_0lic-#IgGr6@FzCT9y z4K$6>K!0EmdEDe&R>F?QBIGe&(&ir7NuHRF(soLsa3(%4T8@?#1kGHD5HGj8!)aRz zq;UF_9-0P9)q0fA5hWHlK1y8}N6Z!c?YP$eU1J-)KbGyrcMZwwMk^w-^dhWBl6e9c9j{sCXBK6O>F<@6=~sCgYo3t9i_U9rE!^mUsj z?$xJHdHO2)1-fYe{CdfUg@F==gHae~klyv1<)BFpB_f3!o$9sPsk*1l+fAF>%^Bce z@@KRN%1X@5{$oeR$0BRrHAfGFOP#W|ayphM4HZ?R(N@W7^Y#H37UK(OnNJ-w#;1H* zj`p}%*}}%0wObL*F^K>fK5hK@hblf`;PQQ~iQ&4jnW+eFz*d9KC6M{5sDP#8Z$A}q z;XqEb6!<^>41lcW(ZI_f9avyw;;Fsod{0a8g(;oAOz*v>W%+;UYEdfa23dTu1sA+7 zULJECZSPmwz-TMO1?C=(-2Sckpwb5p9**rR=38o-*4W`!Z7?U+34te9X7E|578oWM~BldC;r^ zG&SHqd!z!Wk*i0}f5{QIBQM|!@c`es0jh+=Y&TNe7v(ZcR3znqS9MI%URV8y2Fz+M zHcp-qSEI{b?!|L3TbuGuI{q4QE{7P0ArMmve&zg9SD{x$GH5XSrg9b7XN6z1Da+^J zzQ=hsu~!AFWfamKzEJur2Y=F1dckSinYl^|Aa?*LFQd;#{kax;@X#$&C;z+V$dIeI z=p;at?x5$5?2{rZzC=L>*gw!c2LYmvvBt$AXxyF=KuR+R$$nfV@Yb)b&M!ybA0L($ zUD%~Cfzmu2&S^J7k;26ILk%Iu8?UVhtY1HjX8`BMXiX$a+xe%yWINeSLM7; z$z@wkm0}qpuVlP@S6Z!a<(nW8M@E0)v}cC{5~9$kb#9yb!X-(QgTB+yXit~v1jtoh7ntfm6P>y_x0n-0`lu_rzIe0nL^xWiqD zVf=8>Zs#7qJcA64EzAA-lTBBdB@Ne-qqg+g44%7eeL>h)3sQ`pq%r0~!YE{~p1Q3V z?Wc1WC1pl_hz5p}+Vm7Ki_OErOGsCAI->YVUm{*~B+F^&bOgQ|QFtood2_Kkq-2xL zFRwT3xXh6z#0soviTdbf;E_5!LGN~1bYACN`g5-@p5=7^H#o^ceh<(>5hS1{H2)!1&)D}_e3L!$$S@eRlvmxQfG%8u8pus;&&h8A1O~`6s)C`?f&-~A zJ{5jObfeSc=mG@riT1SlyUbmtqwY&b@v3>%%ycF$)(ANl}%LLL0CTdTfV?$Irht#$MObmhod=hDgNY45Ub{i`V=nlk+#SXv()BZD;ahD1rd1^763za<~!HNSecF0 zjoNVPlGt2hk<*C5!%Zd2AO@ivkh_T_0ycpw`@B7`a4r!)hZc!+HSyau@_h8Z-c!Lu z&Iz8DD{FCjf)`a`-)b1F(^-UNZI!2)gMsXcLx;~b*0zMl*Xd{^SIONRPgb86`>+3I zjvQ@(DZ~l(kMWWT5PaV*&`U$ce~UqXnZK@(ixUgVR0PmuV{?LXCd|WHqHtLF3fiGuh82JBLCGwq!COeSZaGVfxg+RmXN-&k zjrP{rsClL)embO&k%EQ^8@Ti03!<8NF(u!`;S=t95b;W7~{;H4UIUPP^`^|r`qV;MF$9gMr73y}%C}Na zN+`UTGbBlwX!g2%GegVsohPKpVPqS)nPuq=sIH6K!*obUyX~wOp-bFeeDehWba6yc z#tW1lSrd+m%6nxNFFi;_DJ*ABH^SVC+2r5NTqu>l0T;&RVsdm+A9#Ho-Fl>Zfpfxe zjI&>0z)GEWG-7Z?SqH`-X)EcY?h_;Of#dRM4$ENWit{l(jlQw1;7h05j85p`7{J_7 z)%zfWG6SYmgPxKJCsX}3Kli=&o~~5N*K5lqg5XBL-4FzEudhzv@z@-PxitExt=qpD zf_A+6g3C8==#E@f7$BrSpPjse+j}*Q1Sc>&0>$8r!{U|j18%ohsXm>r+7#~TR{*$%ef%R296C2q)PbLin~*zgP3<(w8x*xz7kdS08|;ZZch+gP~=l z)b1*<8L7=77u(k|e{l=kz+}*9tF}h7O8+ps?`^|;{P7i9%P4{Q`8T*RTdFj~g0;Zx zr5_ed1ki8V*dhg{DMSg`j>g`yKC|wbONeWv=e1_Df9Z(%Rol+AmbW?Vku>1)mMP0x zgWgnEHCr~;QG|ddVoTm7r!*Dv3RVoCJFJ~B7qF6eciwnPE$)%oGx4j;H;iRQTaip- zi+kqhLa7#}zWEpubS3L&-whP}2*Rd!(4OGp0)ylv9gWs`C;PrW7j&i)fx+2CNI5w< zSMYqOF>c`AqgT~qzy;PUe#ErCd+ zilS!j=*pMIJ7}C5OmpQ(lN}l=e&#%k+1fsu9hA;>z?Q7hR}}Pgnhn|rC&e4)nGP@w zn5oYexoOL(8{g^Q+(=dL!?6ID0So&2Yk>@TyBO?DxF|((SVq(r#{tE1ua!@hjQ#*R zl1iv&a}uI!Kg-@3=eLzw7dyD+So-Ui#X`X~R-DQa=PLb8;xNU3ZnkuhmD1&Xk$=l2!)quM{1f0UV>t^`y;z-?*{C%`1i{| zf+~;MAcqPT0r=P0*E(RjwVH;sUH$4U_mM&`_k|jM+@Q+G3mS%Uyln)EE~BKHp8^-v zAyt@$g9N)T`<*UqqdcAKRjKb8nLDopjXlK2!+DL8jS`4Y9p(K>11cr;``pr`FZHK! zSjr`SWtb$cxUmfKrbI{cC(T>iHCC5L`-_D+rc_`t)r9hJ+>0%(}V|#NOIu6Z{W5(ae zd@P}ECN5{y>)Um|VGxMPBp-PgS`gWXLr!IX0lJJd^ka|$gyp;N2hmWOBVa@5a`0Af zOgS!`kL?%fsR^LH4ud8UQ1ichbst&Sl82#gTOKz{)dNNrTH=zeko2}Ct7W+i6_-b1 z@#^~ORJ&sWJ>(P|hz4!hqv~VAbz=vI=?c{1arF0mMtrM({AgD?rV-ITqyKUJ_g>*0 z39ncYYO%vO!;7{W6iArr5WHTDQ}Fik#jB5$TX&%h*(!@t$m zY2l98jgm++NF{R5st3%cVolcSMEjbE{kbA6LM%hzu9xIb#6H!WsxQn@G@ z;g^pkmYz^hZvQNjmWw42AkH+AQ&#mwBc0h-Io0&{-bdteUmPeZ*3%FHAgc3{~ z)`;RtT{#DX83Qn`t9Oj0-2UDYKH6WAjeBV@e?zzNarmZK-mKeo3xdvTYUmhXLlS|Z zTFucS`$FXXfuEJ#ArqWWUh(JNp#b^-fN>oE>goR_L-vq>-uvTA&VbLzimf;h6sdBc znnmA=qY@jeqTH+*q7Rsy@}RjWB%VAh!$A~W8Zh1KoUG{>Iv*gk;AOfxw6$m*;u8=H zt<+S9Jl2o8kto_|)_|)&!m%bx5T1EaOP3zPSf2zoagTSizg!AQ)FOpQ^r_J^-5g~N z1@|U{yPlNn{I=!}Ei6L8)F!hRrH+FWlfYzc0mkgfilLtUKUd>gCQCY4KDr>exL`AYDOV*nxB(#V~gb-PZ$`Y=!vS+m{$JQuy6 z@9#hF+x0x>InVQ)XU@!=IdkUBe5m@5kVCP_IqYQ0U|v~;(F3OiGKJWH)X$L4GbGp3 zvYoz&`WNS$b|&V!XjGoBj+(_Q^Zu{3dYifP0kQr<#J=nr8H15`Or_cl{7;FHKXT~(Chf~=ml<#lY)D^=TYVFIS!44- z@LgwT53PSB8UH8X&81roei!?`rF{;X-v0dRoh|s`VR@x%V&d%82C8ga)$4a^e;IH) zArZ58IFyiaxb;;?UiLa4!PY6n!|IL24-_~c! zQAQhi7=a5sF*>f^SeX9^H-X03c%yar0rAI*f~nd2jS`+2a<4Zqs+8t7)l7>Xc099l zdTiwB%xUfn_p*-akT>co$KAeif$!z<4SDobYxNCA2G`JTMG7r-GtxzQ?;RU=tN({* zt^ZY;Nl#(@#fk+cC*#=q3j_pJts&@typf&#rt`wXw>5VXb_+oAfdMr%F}-T4200DU z<``%W(bcA$4ilCYawapdon>ZER2GsvM<7Yps{1VN_p~)}M@JhM6Cg53;unWrf{j6! z^Y|mC@X(UbtYEt`m-fh;Gk%#Syl~1gU9gX=!P@*c(EKP<9GE{KrJ0Tcpr=GQ?LK$p}Ig zSgvhO2FKJq#hI?+!yiia#$_hlF&7W$9Y2-wRXvd;ra;FKiBkSF&~ek^i0njHb)zd) z65O+Dl6y^$)Te%ZQK-(3U1O4c5a3LDbLx2SL6s$B@}!Bi2UmX0!r+QTkzDYE6n zP1#XK0Q9VlnvIcQ;&7t66|)w$gMgj%ZkHd6AWykLDpA;UX~qy@!9KGCQDwBdZ1nr3u`$I^D)j&0hM|;18%#%^;?IyYWZGJ2{@`A>5vu zC0{w&`6>OOcSt!&d00^JT4E$;s*zI~TZz044u7C-tB5jHgyg*4US@CJ(B1{PDZp2l z>hJe|jDf`hOz3w(FpQf<*fyjV1>A91Rv$|bcwY9pslcH%?8R3WN0>Zt?(B_4Wzhde{1>6slqa@32Y~`)&guBz@ z-RE-|BphI%^uF3lTRpVo{I}$oUMa0+mayU@!Du=Sb)&xF*{R1y&FrcW|Bm2jO>-i# zGImh3{P1Av2N&4K^|ax`!&06QaZ_GS!S!L*2VLu*^>;D!GoQD&-&K{z$-U^_z9;HI zmBmW3iU#MSSyLSeypTwz2$D?ZwP)^}iRVE32Kz`HVmkM*Y3Ok5Kxgg3`5G2NqeWfNkL3}{sUhc6LtBP7Z92C# zI&$y2&LJj;u1=>v$McohvRL2uaZ-*mN}{<=Jn1&w*R-R|9`VZS)WMgBRC>}`tK-(+ zV1=;!_cGwtjiehG&O2xR5TFEBGRK1V>(=K--sEZiCNaBCB!7#>p`z^4+K#PxPxc%I z?>&8eXD;VH@2>r6?HhtcQm?;ZzBI>pPfgqAjg*CbhRlnvAD+l$X&Rd@>I`nW!0LC@ zSjVew@x%+;2#+tnic(pa!d-(q+BMR+aH<+c>lvdXQlcF=;y;M((ACZrj;u6cXJb=c z9~6y$ELNB0rr(}B7sC+M`1V8Gj&rm|hNlRP{rR0} z2OC;ni+UV4;-n4tQ=jAJWw~4vEya+L@wB0(qgL`%1W##=CZorl{Z@XJmy))paosA~ zoB#1s3=NG?Ixs6UBcc#c(sdL+iY7b==*As%Ut6v%Pb%;@gYMU+KCn#aZ+qP%5Ok#kD&Z8+zt(<``Sur zR;Ic2-8Nd5s>@euK0n%!%>L9=Vf(|>iJxD9m_V3qq-CqPc|?4t|5v|*@)%f&r-f!*9;zi z;`Z9DS>~uw=ySy@TBYVi$FHxJZ)eYa{2MjVK<>Rz`Q3Q%@3raI8cVz#0am3wk!fYR z*W{CUYd?zP;;+5>$j_|oj-T5LyVx^s%x~|L{}3a1}8E${x zyrvIM=|o`GM!c zjy=C+o^|IK2P|d=Y&xF*h3!w7g0R`fC}}yO$+F_NTX|Qdj?@v3SiDW0JZ~YpUGZ{o zT5*lGl1%JoK3Dz?Q<4#yh8c7X?xW!eN1_hhY$%*IGLbMQqp)=@&e=7)qyN7C?CEpk z>41yJqV?hZE;7VYrC(`h*y-#`uUTqcZY$@5xq8d?Jv8dJx1TbU>mX9Rr?QSQcl*Xc zqgz?K!(nFQ<s|W&32&;{%RwMa8ZK`}GJ^bliM-+^LLtZ|?QM!N*o2!}a%x zb;-r~4<$LQ1&FGZx6S$wZBT2NO)2XuAGQz?<;?3TQBGhW+6f%7o8%04y*Pd$$$Xvl zjp@HLiwpyrgya6!o{J^dHW6|Q-EwVcw9XTb)96=J%!~8Roa|1R4>H?_Lk|XySfUj7 zP_xN8FLqYq4vvTV84ao)d1qdwbGJpkn9djO~+*vljjozZui$@!0}L z+KQMkUDXr^4xLEeXyV~&_rPxL$MbgPr82j8B_9}Dsc4;{6x!5D7dg-CQKGhqSy>Ip zsnhgq$xsRXQaUz}8b*h<)Lu^={L*KbmvCGXuGkuZE|>q)v~%k%o% zX9f+;BI(Qxo5TOU6Wy_ueuwF~>c!IqJcA^iUV-l>mQlg!?4P(^m?aYIgR^(M%XPjZ z)FmHt{7v#)?F)~n`1_qt$4-4d|EA-$glr>Qv&uId**W#}1{CvNi-jiHa6`GAt2!47 zXqimB9R6vGO`We(M2uSFy0b@&jlYX}^55JlNoKZisvb5jooIb??Sz%+Qh{XR*aC$z zKHTxBdFRXBvHK23c62N>87*(09%S*QS11_jf9b8LVo@%tC%t~2u3A27W>8HgH3C<1 z&%3C0yWb}6)-8p&a~IZ4Z>YbZw2z&S@sjYVan|i#?@iF|8?3kU43p?zURB-fJE8I8 z!V@J%>(5uXoSZ-Jc7=ou_u=L?4elpT6)#&HF6bD?d49 zFadE?*`3{E9>ktM)@;`&;y_TmsPZK8<-D&C50~`M&0l@V9Etj|YC81Z2U2rU=IqoC z3EEgsl^>q?faW*aq=uR>v0OLxZi^+UpkH^N9MUy1u70tHTbCiyX8B%Rbm=|Wrz0XK z&N~eF^4_#FU;OQEI_9J?bt!vRj6eF?$^E<3rj1UH?7B~;i!AqI8`8_lwPI^VsV#+b zvFzoG8@b1K63B{Acu%Iv&w6ESyKNmE)%s-7ZD)-9NE_*>{`-dqE;%I%&}iG(u~o!7 zBsRPwZA^%?dR)>K{%XtSIk156cI?SGcX_aPJ;cp&2;r?oA9D9NDY<8`P5s@(6774( zK%I1VwEcxhl^yBf7unWAT2=Yk$B!sE>q?&|Kx+6M9(6wCvU~EAJmHyX>2>Ysj(+Vy zUX+!_bVD?Ghg^nc?~S}hTvxxX#+8Uqr3?zWetVch=)#$C~6MZ$Hl6u17>H9YyIP9Yv+hr&MiITOunWYKOUQb88dGMTT{h=Va z?O!y#JNC-ikgZR6UEcmWc91|O%N<_wl`@d~T*MbRtY` z>?2owh5#7Z4n>ncZ9ed-$8n?o8SY zhuC!`_huRn(3>WmYe>uKj%CX{%Cx%zyA7QY2>=~R~)y^ zzkHfx_dFfF`(B#oJs=fPE=%4i<4E+VPkk+<)TuU3J@?=3e*l3;Et`X>c#Cpyo zh$KBcl`M{y_WeF_NbJ`8yXwfXVZQUr@AYC?d-L5auYI+8zK+o26xgHtZM!{Re6aoa z6O~`5*sj*~Z~j65M;vv_-q~&5NA#Z-c~D{+Ct~VYzF+PsQ}8_6!(45*Z+&jzsSq>V zbk5ZpCbIGHB)A>qjq5xgaP!-SmiwD@P)Y%(ea5BRz7C&}$aic7ch6_%{lz4R;ipRb9bX+sQ+bzvKh$jDZ^^w}|Uv6B{z-uM$@u;*qcJWFg zdXgbA?9l(AQd{)#ei@Yw!KUvLccyD}{hT`9q}|KLC{}zhyd?5U3{L!aQb5VG?2FAo z>6BP_-EgYRgstEbM`|U zw>}f`o)h{szj&j-I*Bna<}Ol?dOwj9Y)rF~Tm({D{AWCXo##kM+Q?aiLPKGLe~c7X z$_7Z8$_YnI5czZO&YdS6+$nj>&3nQwr@8Zzh?Z&vgT?-{xxm0KS2OEvUzzGCn;)_he9-@*#-+w;c5 zdp6`uy{hiDxMn(@|MDL0LV&N{U#U$2cjtEu;u~&BX||QwU9#WGEUPQy|NXWx_uw8e z%q8;5Tf4n94C%dcB3(n>wz~+K7U6$?vPbUuw0^=d)v|hPbFqv!V;R56-x(e?;=tXE z{FxkCI({se)+QG*l8&ibM(9VpYxP&wV{{DonU2Yy1e!_+m&HRmyY&M{aER_B%|S;` zqO1yw&jBR!b4j>>@LI4%q$ji$iYusB{dRn zwfn>Z;)?a~*&QPPfG0*!+?zi0PuDaZ;h!127&g?NG| zBxWAdNV^D8E}1-;vZL>H|3;qk2wx77gXUh8$!Mbu&f1JsW6L&ciK_=+ zB6fk1OZV%`HY5`KjmBhXTx$|Rlq9-k6db<2tP|zANp&-XoJ-XvISjJka}Cy&zuP5l za{gureGE>LW#6FD7VkqFb$8fRRTVCnMObavAu_l4qvq*!&}g1r-$>5A@jJdRy#+3| zp2mm1F@8um7HPZqbnGFcwxPF7S68lH^V@@23{m-X(b`XrKaA|^UM_jwBd(477JfU8 z*zGjF_nKgRZm=rr=zH%idgvmowC!2G{Q+n8yw>Vvz|xOxp;b%6(}VjvMSOLcbp~_v zvP_+L*zH?9pTr;U;4Rh*v-!2DPSWPb5rVCua78>V~cOSl;1*ns>~6( ze0iy}?Ak@IUVRosT1VxTDZgA#9kf>)IJr(OsBPwh0I5uP@^9scN6NwAjZ$*He9Z#} z3o$ejLzBPe-zSGDwV9l!yBYDa>yQqL$$pSj`#Xz>WX~GU&_CZm()sH!K(`;KN_M`; zF@;hET)hhHz1US!sRE!uG&ULyS=BGHkEd9dX7ZTv=R*lE$6A2~alHqY6sf(O<wh}ro;?MIH~Z^eCY_j&JTP~nl%6hfmAg|P4Ku@adcQ3#VeUt6>yQa%q3-e)40_+CA=N7`xb(v%T_ z;l$GI_%PqnuC^0WbXjsn1*v*YhvrXO8Lr=X?wuO0z#wMhsf-`*c30QRgnLfDrYM*G z?zU@HUg&vHGC#ERB1(C=sI7T<>G8a))q;1ghy?31%F?fjjJj~m+PL~j2#T&;F`S!Z zHmsMmq27`VXzP~dWiI<157(xwZmsFNZr(id zXou>9oGQ0NmkFf(udii}XG||v#O!RK+Z~FN`Q`RUHAq3?QAe~u$G5@OythT37N@Sg zp%*Prv)Q~kx*fesqG<1OIb(s^jtTmAKBOateO`KXpyN_@pv3`6KHmf1m){>dx^)>O z#lRPYvedU`lE$Rxj;9)J~)nNR=_9&1OS*L2K z?IF{X=dvIT8bTF2R2}R`AVo3CKOFrM_k%>gZ9iurneMnEnS?`v3xSPE0`9F*WuK1B zk2;rfAI?}O`S8W0T=1!)uqtnvaa-f-Jdb5s7!vrxdnbG)H_$!0bNjZ|V@AT+Th9VV zZ_-^O5NHGi?l&7f4BZ*DAv-urb<^ZVd(Mtbz6_tvcQ&az%xPgWfnnOv`vZ^TwH|x7 zL>;dbWg;Dy+bsct8iETwD#-m3|5h}7+S#fqi)~Uc?4iA4b6?#1hXNNI+UE_IykCC4 zcwbX+$c3r7OhdnBBGT`gh>=LyWHb5U|lj@~51_-Nutb?@+S4nl2dNkv0IhS0!H?1q$vi$ayqY~dzL)cA0 z+bJhVxcS!8=uF#5?$$E?==(=ciHELNK&Z7V?mnBcQ^7dz@4?TUQNx?UbaJcysN6f? zCh>(u#8PQ9`6}b>m_)Pn{-zEFTc-85C^j2^v{V|(iSs(s`|dk?dr%Z5&?&~xz~keX z=95IP!onwNPbXd+c5iEu6`rkinRXL$bCZ<*vZ0k>GUAi@(q5mBiXS)V-+jtDZaTml z-I%p^XWKASh?f19-&Pm(1g|{p`<-AFn{!iWnDkco^v7n-7)yn3Z^F$VB)^zp+7j{Z zT6?ornkdq`GCuGBNba|o_t`*Ke>TX1Am`>ksY|PM;nKW@7+xdUH8Jn>E)E0KH`%bda%6i!m+eNI>D(g#b41&&KujeGN(y zjM4gjgZob%M534HNd?D)E_*5%e9)<7_~uFb>f6RUF*PThNEfbIX7A+tWv=V#ql|j9 z6-a)qz>$t;$92Lc9)Y$$Ko+typ2v)hC0uoFZ&^cv&z{Y4v4_r4 zOy8;mc>Fkd)oEXAO*+#fCe^elN!iI?djx9DLZsV7%N}|U*?V<n(|FVQ<#u%G-uGK$EqWDr6s2K=mC}L zyDZ5AMeHN>&u-uwBH9{fch{hM!kY0n%?%#)t8sUo=Yu~NTO@xicb}Wu_v>n1;Z45p zFa4BtKO#{{r#(72HYEr5EDfC*lhk|C`;}WJHAqcys4_vmQJZAJ;bUb8CN%D{)E4s^7ez;#HQ*jF~zt)9e z-;1|KiVwWHNfTz`&MBYSb)uD>N6I}-m+_)B>q$6$;}_{ex)0}^ohi+Way+qi8CR-B%$J&GJ7Wso zY=5@!b>WrraIxz=!TlGZd&sZ5y4=;z9dY{o6l>354^?mZ)aZiIxJT|x69pba^c6_4v~Y>y%hvU+N20mu7ebfbA~v|8B042r5x5` zNzcgZx8(2q32Sbr^r`Gh`s(aqK5Ssv^s@HmCyMd&sU_yEL$|CJGPz3KO_us9atvnz zCyIURGOXs;x9cpl%>>$W&-z*#b0A0Io3wmC>2!7lj?^C-acVXFy??6N-v4K|_h@?5 zQ`SpjXv#`tEIWjSo6QW^7S zz&)L(ceEcPI?Galft6NQLmihj*TmcEBMOa6DXJr+~~lax50+!%T~ z^!=%(Ui#qq30Si303T0RRW`rNM1Qx;b1qV;S@c(0yFFy+c3JDQ;}0Gtq^YBeoq>=NX1Qah-za)f#o3fuIQ3i}-9dP&Ou^Hc9m<*t*!xw&t*D{xu&$GH_yjLE)=8cSuG9~eukVvaVBxgXP(1@I} zVlzld+4%lbe9wIP`YY2%BPz#P5teN$D@&P!v|-J>@ajMF0_Y{^n9R1>4HRWaUAhmF zml{&kA$jRx_$5L-Pi2a*mr#kLWwOwTWiK!u`L?_3+)BN7-R_JP?1R;zS@p3?gJT?0 zPmO{^-_gGVcj8F2b2;E_J9v5;^%UbF9kw-|XOR^sfdf*=NLF5?N6C1VrNS~j*7!Zc zf%Jk4@fG-w5chzK90<2L;Ff`G(%1J~`-YJZB7eh5SHZQ!_}1DnA|KhhZ|x-II{4wO z0{J`iXW?0?wR3O`6kAU{d8uNANNy0BXszZeh$A3JK+R|8|2ji_76h4_fhuV=^i8f$ zHbG7o(q_;0{v_}{UWKBijt4d}xEL%_@*Q)gc=3=YwnKpr=HE8V?)CfA0oYx_=l&&Zi+8nQhpH z%&c9M><lVp!yFZ)=InN-3`!s zE`{;Ct-CNEv=y-55%tD{Q39F0{aL(S16~UM_Y{kOj~faMWU0kmHdlaj^*l42v0*qu zh_V&CVokSvR>)IHh%7Xc@Sy+utTS)2wyP|&iW1-`g&lQtH?R1}QIqQ>Z+xJFL!xt1 zYgj$cDXZYZ0V$$LSUm-=EBYG95GH9i+MbRecxLD+^bV9l}~k1!CrqEie%uBHO`v*36&n(D6jPG}?ofO@vAW1IP?*i-A6OW4qfwB}%(Y zRBSen-i8MULmas_=^NH2wlpdy%U1ohBA`ZsB4pB>GlK7#^Vq$cuAUh~ve6A%2vdNr z;t472M7>H`Mnu9N5AQv9T9t820E6{#&OHSFa}*(! zrthM*b%Ofa(+>{^wtpnMB9pKaZx^8Rk6bp`@d}h~qeJ#}5W#m1I;2FYhZ9Zkx!^dx z1`WIr;t-!j3a{>rpr&~zpx{l{X?p(?3{Qk#*)fqqrMll(nPsothD3`?9&`hu@1`zm z%dM2Id9nQM ziE{h0ilXm~Yh}Lx*#e3COKO`fYQG#n9ER(aSEb&BZ~1F{Gt;d{AAY9hnmt{H`~U?AAZ}94=1g30Ylc=x-(CeVT%f0NRCBr zrAx`y&8T~&k))K;K&)-ck}!nQDcjX`dg?V;FG+d%1TQPuJv6-as!}t)@dw=Z|BNiM zRg+sGvM{ii87WW_283hH!svcCmFGigli-BytnxaTfVOR3GGcI z;dEo1kT;qXXb-|%ghqV>h(=bFvEx6YfUu3gC?Gj`&izMAQ>P7tu|f=lm9|&E086vXJWaw;yP2Y0DS*vX$V}D67BJM!}XFK0M^`IYa zo6lRkbFI5{>0n5($CV=wRiA7|h#!xxCKS?Q2v>!?)?7fP_bD1kv@Z$r*I}K#D0eyH zau$};&)nkK`^MrIxM3OxHcqa5&hybNzR%Re&dyR|F zMFF=w;IN1VRc(P_WP}+)`}I#lmZ!JUI0R26^M$CZ>WdF zOaf%o8~BG=QV(pybk)=+4BDoHI0EG1M5~C!0xtjcoYwXvvjZqdzMWDaqOtls;Ed2E zFMC=8?R)Z&f? zdKG$PFM%c&ov|B;(J*zV#Zua%4U|>_HPL8KppHJ-ofeavrN>=k5E4C%p-zdm33lFH z{fVYNPUgEie!tRMq15^!A;7Ab@s$v%T}({JElbdy=6l;dTp)D3#nw4TASPKNEqdg? zLPS{VVk(fD+h7Q}C5g3Q1s2z3F(CEu{cGni>eH^=bT$r;q|-s%titc@Ye!aRY&WQ} z@9c}J5>{n5R+SO7r=M?Qr6(mD+Aj*L^h!!l`weP~-X1w6V}OWTlg7;l{^1u7IhCh* zRB=B&J~yvE5@VDJ7x>A^?la(qzv~&$StM*K^yITUdWzeg|{Vjf<=qv?3X6FvTWg`t*0? zb(QaiJM-5IA$RbY_pcz?N)QH>jpRINj-wUI5T`bo0Y}CV((~NsKdd$Q?AFHKP6hjz zC-A8!j;)=;Zm>5_2zBSKp#k!D3v$>}FS8w!M#Q{N|EMv!0=5U!)97owul5dv`KUgE zJsgOQKtPH2d05?%y5DINi}97g4SPWH6~06ynw4Q1_%=1{-}CKrXG_QVAuFdCR!0+K zi-{a@1j_lzvqBc8@(s86DerelRV=J;0ZuL{Y77xSw zS;&^QAaeoc(*HFSw$MO0RRD%d*e?dm>o8a573dKu-3>wcAV&KdNF3g@a@efGfr!sQ z*Z(r97PFAvgI()6#(|*QyG%N*i_LLdBV*-#{jp86>-e_5YqXGh<)mx{ zqcInXb2&|AW=z{=qK?f}^#*oo0t#RfI?+MZgH(1D!MQY-DBI3gOt6QD#GgW&oKW#X z%DnMFeSKG?)ZEM8#q_RHBndW7+?%N?$y)0pC921vT^WQxpv-pqOeBgm3wc8!JozcV z4wa*Wfv~AS^2zy6jqCaLf)24Y9$dW!e=NifVJB@z7|_9}f5oCsbMSBsAYn(@aV{gH z(xNy$H&t47c5XMa_*Y+PhGelp*|Mn=$rL0iO09|7F7CW`64%p7vZoi2TI{w15?=*k;69jg0r>fIBGk$HPuC%;z?4mVn*@V! zZfnvKb-?F9na*041$zxv??osr?8rGTWTfmA>cJ$jR!Vw1F{z@25KXYTHI(UdXJlj7 zsI6#$2k}t*@gsV0sB@yoJ4nB6G0*qqHLI={R%QmE=%}1J6b+&r2I-j_PB^%c!4Q$s zp`ds1HWmsUrq)nO3aleAe{w;M3}}gW-7<&^Kbp(---nL^7w|7~J@C?hD3Wz~%b&-e zlRrf#D)ug!UM+;8{)E#OGBa4K1oX| zAbF^;8Wdt;MZo;MfY3fDmr(nBV#6WI3Ccl=E|?sSQcNIr=3)3}NYS9!Lo@AS>o18R zlEqB?hfk2Geg%k+nEJcZK%}Xpt6UjW%Y*Mx=47 zJXleTz-|G1G$)!yo4q_+HUG?9njHH1%dBpT^$8$;QXt^-K2G@vNMCE4TzRx~Sw4>;v= z>T@}kz!WN0N=dA}*AtYo(f|@Nk69SarKKe?vhJSFJ&#SwiEPNMVfHF;8o65lt7aR8 zDPVIisYBKBA)%57V`L!#ir2Vj$a2|2rt8L2T|IF;(tsd)u!3|w`u~miqJ5Nj2nlPQ z351ZWhrDyKnb2GURe2BP*kSG+G6eaDxu41Qu)O_x@%pV$=Z^y~?y)BmV1pbYL8O|! z`d06~k0m6~7 zYel2r&`U43Rt+t01{%{R>K_eYF@`)o2yv`K5_kEo_Ors9SK--m!eSja%76D=rYiBD zP(YGP^%py65K&ZSRZW8Gp7q$szZZ;bIb@m^3m` z;)qLofIlI+3)32_6C32gB!q9FaD(>Xi{EgiTpJUx<)mhUIb9r+=!{!~LrUUqV=k3Qj-Fu{O#JY6fWQeBeH_{19?hB*WzN`` z{crdo-ylmPw4~bOC#X0tCBMB|qM5Dzyx7 zDaA8s|HSNSm_cI&m0Z+g=HH8qh$ssm2Hm#J*c$Ary^B&jB%{fl?N zG-Cn}!S@5X-p4(_1mz4)zY1$N^d?Reeo1-oDcGwpFi#alNNcc)dP4nKc!ftj?J@rq zcD}Su~f4PxPtC;h-dDu;OqpZUf5o#~C3uCZK23 zbB2lsy7MrzSOrnf@egY!`W647mw56AJ#w}C*8vFa+_-|$hFKUwVhh)#2Rv0J03P;n zXMDo-pWo-4Jz+^mLNxq?cX90yQ;>w@XO8-)+gT(KS3%Twig}Lh&BXUy&2;PX!8c9#QYBU|id&3o?Z6Wrsv#7j9utYG3 z)5yQr;nH2rpH_FBRJMy(3iwIN@-#LAj&Z1d@C8;CQ=ecuNfiXBlJW}D-=SJbc#A(G zQ4LG3$9Vie7w&lgLbcg!1R5nw+|-jv9y?g5ef^PDv*nBW0TpW&6b$#|55#{+{m>J* z3%ZGRQ2_2z#_^rSw3qW_@@Ap`hLWzkX;c&*q^j$1ojeix-&HncAWc7viB^GVVP6S{ z60V-=$Tc4O&{ZgTuy#Zohh3-9DVIF5p$CYlkQ4RP%(pCWT)U3Qn~i?M>eZ`-gW*4z zU~HfQ$?){jxH*n=x%rqTnqXZiB=+jwzpSPKf&f&|fSQi{q#$(TX(#(91uX2G-1zAB0;{oj}K;-RTFSB-nTswf39MQk4NWYq6J#x#4 z`d0(t2~=Vw#wu~Zmbw2X1qkejR3N+Da7-V$y^!LO{*Xyb%<$7f-yv>xeOgr_jvYtK zM&wq{U;0kUG*obrHZABjGuOjs|@G(?a1m9fzh6 zWg`v(V*!DA9G>_;D{Km!pn_6Y*uvO4T`DXU9^CD>@*2B)VeGSHGEf`$+;zage%2}c zD|ZG#63v$qx-Q(MV#$V4f`peyXGjT6u#wEdXNK;|ZvD(%*C+^EI5l@&8#iEwkrL(+ zMEL26v?_H>5Lwebr~!ml(jDz?fpIUYq2gtksE(n0<`Kpe4KSk+{?8H{NLDq>m`9wT z>Qjplyb}d<5}4<=;6S&}yhYmz1nD72EC4FQl)(cBjM8J7A~qkk$f$B;4FZydV0aPAh~>JYNXz6$!$}m3!PR zRazXlW~~#H`j@F}bQB~d4Qbf{V?N^Qs;}DpKn`l8~wC54eVYwbf}%OKOdK$(ps2VdDkpWCP8t*7&6A7qRSb; zn~pgC%{dH6!J387no66GEH_^M_f5fn_z>E)kpt^>Di8xTG?4jL=nw#~KEP@K6DRdP zWG9A5!>q5VSExTbp`6^l@jrCqT>=OknnDrd*T81Zw7aIGw-7+Q^ zvq5@KZU}^e(;yhD+n+74yTVY)Wa@l9`6*?-yCHj(NhCr;B?p@QJVv;1w5~8zseuQ{ zLRdSvo>GZC`4sk6MVBdG?C&xc#?^pks$~JvaboCP2{#G$6f|H=+QdsS25*Mb6g`S5 z1Y9^yF{509XpNit$Znr{4fBNM%Mjc~ge(gN?noBbDeZ0nX-d?XZGDsq&)Id$Gy`~&(LT|h zEP+ky)lI32Sp%)NB%t*$i3uq>qJJa(^TR6y^>5Lx=Ty?ai->I~o)5L-^*>%VVHhAc@SN*QX!OzKb7`UU@%ieD~Qv@QZ~W zc_Sugu-VrmLFJu6v_ToufnMLOvyQi- zj@eXt0G2UzEWgIu2Q2IM1i_HGj3i%$o2hfX5dj<*Kpy~$;oMhvuRBQsa5;-}-O2Fx4(^e)2|5t{vO@TPfM-0d;*L5EGgIapbeZUGcwSn;S@3cN5N0lC2Ph2-N!7DKz;@C=t1)+hav5U>UxK?@&1d#8sFp z&wn1w0|pugOp?Z#lFe)wK8P4V)m6qn{j4m9ju!dN-8*i<6uz=TKuSqYKD_YEEegb5 zH|NxE!x)&jCugQ4qqgO?8KBZ%fvI?(u`euSHuMoK$8=bC(yj~c9;Hat&rJBXuj>`R zcqK4|-vk!OK(6XntovVlGWY)lm16_tzXibDEw-!1EY5Yg@KyI2d4zI5$)iob%At0EJQK7*imqLk^ zL_IeGR3h+4_qUIzsR4#J!9~(SK2T@3`{*=OzBJwcNnn^$?J6sq|iDP!Hu7Vx` zaC?ODiX;=a1&^W`-dR&Fbq_q9p4Mog%ne`Rti|D^pC4Cqs<#Q3yB=1&W!+D02&3D| zkZqAFbmnsP9O$n3G=BFt^Z@&~F`J!`*l}ph&B0oS`4;ut7!c$|9NV;S3-t`4@Vz@$ zk6^iWhGiHQjGJ-vYegg*Eofsh4t?o_iG98v+u8->`-%>cUOY8F_$4{Mq;pK6QbW){ zPEjj3R_>{{p5-s?qY!KUHveA%BU)~VNy2?m|F`y!VO-@I?sny(@JuGiVT~jpoNiWf zsExU4#Y_aOdBtt|IHf}VR?fE%I(Fe!@Rj%xlClHVn}HiFu@`GGp>mH7*Kf4AiL&L` z*`mcRe~C1SGcN1P?>)3V$&ZpZBJ1*-E4l&gieHZ@M!~dz>jL-=%aDl55;~yti7Sk$ z1X$p@&XV`qh!GK)8*!Qob=krG9ly-Vm)`BQytP0sLxhKN_W5%Ptznf%1Tx|h%c-2|})4Q5s0Z-ngU`%Q9KE2+Q*%JCYI-C<#p+`SRw{}r$< zQ-HOe(<>|w3`u;;2px^^q-@^HfXsoldSEmC3U^rxr;3RUKU@6p;W?fpDVD{TLJ7-F zVPP}!h%W9t#E#Y0$9{|CRUbI7|dft3;rpRx>?b4yc{@V*TJ2Y=l zlotmTfv+9A5et0@E8moobIA{Xt?Z15)WfxP_#_Xrc| zy$|`nw6OB-bskyd{$4K=c+d8Fg8k%a$!Qgf?U})PT4vX$i^fBGxp=R<7uKce0Sxi= zupn1NFw0&nnUVyb6uAKelS0Al&_2PB@aY;2dK6&1Rgg}Z2lF2y(LvZSq#sa^L%h0Y z@ouP!ifUPgw!}8E8^0Zpz%r5&&n-t z=f~aLMn+GZzBvk*9#hp|=Z28&h>b|gtKX(&j*Nh(#`Strfv}|{Z>nl^uMc9wMSACP|F0qt6E_1ry%tEBqgIX zCt!T$iqW|%N9^Mr0ofMdLx(koz)iI^fCC^Yxf_p32q+x9+ykCgm~LTRDFKvyTNI=* z$5EJ-US^qy;88j#{_)b^!48-F_FaNFtn+Y-z}gBleqbHyQNBz-&n4;q;qYW3whn@U zDEOipfujEX!2UH^LF6}K236{SEmj34e{rxF^(q-}59<%EWbG)(m*(IGS5_$fXYmd= z#vs@>IaE^Yj0ZEgL$K)^vmf(d(^q%nJSIrE$fNvx8+){KGwdjM=VIA~5wiva1tY=> zb~eXXqEX;o!TPO|o=3=8g#y%3lB@^MXIQRow>GC`PM$5v7%Wh8uQ^LEX@_3ly&$12c5rK4n zg>L-@ZRv1~`muSA7o`fX-|qiF&&7ww10h5c2)n;#bn& z$0NO1p)(KAmIR_}$=BMn{4{6B?T zv?Fyp$KB|=zb17|SDSk&8TiT@1~>7k4ZE096r0(tdJH)^({QAF9MLEz=OyztTQUsH zW1DvJzWegq$SN$Sh=ihOM8r=Gl?feIK-*wIR4sDzkYfWNXBmj5q6-R4u}A>8l@xC5 zVtJm-w8R;-A0ARHd0+c<1hG@i$bv+Q{n!y}L_-JG#>XsYDVYBAC1B5cMCHqZWE8j# z!s(9mBwelTBprQMC;D#ay}(7sEkNf+UV5Df*%G?B1K_FfvE^YqjG6(IsE~J09U2x? zJoX#J#&hI9O&>a`YG8pg^EIRRh#YCW_@K#9Eu=E8^QnQqnSlwk7KD6JK9ZT`-Nl2$ z2mJlbyyOo}KblwJ-;XWvzSmOjT-ImvRBIeDe<>H|dMk{6RNBk>d9Yx7~+ z1@B-h`ONTr2p#px6F-*avoIc?M~w2^n8-i_7Z{B(x*ed7)wdHsD8j%2D1IKu>C|P0 zm!5Rhy^ai}9J_!|IArQx5QNE)y$JwfA7E5Z1^dEawq+ILo0cCFSPfi0R1TMR}^9*S#pzJbdPL?g_#K8VFJo9ZvO(%Oy z-`e?~!TCfr@}XVIDc}(Gr7|hEP1LKUTK6c~xBVW=bl1H(JN>PsxmIe()@s4)Lf1wP z>-iUy%I;Nhny#{TW%}Gm?4cMcRKHlmuKw;2kZU2~&i9R+h>G(~v{n3~wM~p+vvrfn zB?ewXn4|~D!x6oDAmOLFk`*Xs2}E_=2~jb66QF{?-Nyx8%r-_LKGxS-zh9CyDI^wn zP2FToWDaCzn7I63vAhiL6Xal>9GITly_^4n?=~~5fb`>b9XAA`uU(79pp*^Y+!Yy+ z6cTn^QbzwHpFRohUxlEcQlJhPAL|3w}B@a+ZhftZt1|kY7wV z*QnXn!!DZEe~#!*-e#J8i${8(ZfJzXrs^z0eq2s-O7kCD%ueH<)><1>-`zeMlf~l7 zg5(uO*DHeefc~7QnO6z207`2p&f%=c5ARdX>|`)XB9PA@vK&9?MZSeDLv`KQzk;XO(_SsPvLcaDWT~rnDsq68y~>y^*8_J zYfiJ}W7a<8um)YNDC0`ddW(M>jmYH2ecWvLxAu4mcYaH6R5RoGDT@D}YGtsm3D`gl)YyuAk3(VlfBBmf;lQ;lEWmA*{r zpEP+eu^3E$bXfmmJ2WxVaRAfibb`Jfmcdqa za|~%4F!9avlJWaLoFPC}7_A}RWy77jUiZECcYOY{1&N~r>xhZ%d6k={g~K)56Ttp} z&FpUaoR9jng3|F!u~jqb>~D%}fJAo4KG66&2Jy1kn=!$?pIa&pZ)d<|7UTS)O$ za<^4&rohNZF}E9P7AalStCH6~f>I(})#RhOGJi(s(QU1`Xz4fRikrZ4^o3k*qD#o( z%K}$(6sHHh6`uKU-rs1`HkW5N66opcb1=`mfpDo`;(KF+;uAK*N68<}FE(Dav(MM9 zoE;c+3{Tml_4IbmfXeichsHrms|(xMjvbSdiM?gLd-JQu)ARJJhg%ij4r+ch-z9S_ zmQ9L?P|e_j#KCy(lgAy;T6P5`sIoS$)preS-@eC8UQP&~FDz`e^Kw02+$lYA9iAMp zt{x(w+DZf1gC0Y6J^8CyoO;$)U8ztDIda==eFnR-Y=VOw<&mRhA$t<{-fex#9{Qi2 zKG^oIFEq+Kp^}>$lC=)yI?L-CZ$Sb-9RkwS-e27)gkmF(&+zY)XL1=R57OV%8kMfv z%)anWbz5@S{Ethd+|%1F$J{IxR%Qk0hk9S+5rErH9Sz!KDyGe zOf%T~Ve$?Cemu_`<(La^gBo#K3g;rnj_RBsRdcQT5hnEBWbx!P+zLkSump~{$#^z+?}2}v@S;Kv`MA7lX=sht=+w^1{XS8 zCO;&8+?!gW5Z2i@FmFIeNlfDS?zD6e}H=9KND12`_b1cB-?)JPyu_233TGL`8 zc2F~8`VKKsa^$7IiLvfEShdba!2aQv$A0G`y~3s6o_0AWG}lwBlfM{xBEn+vL^z&p z(Z)-o&|8;ALcW+6`cEu0bxn^Aj1=A9us^t>M+Vzc|hS_cx%`SX72 z>f3~S4>2$x2$9mGLbNTeJq^a4y$G3!K`vVt(ZkJwn@ZVX39^NV`HlOr+zAB@E zow(7ZJ~UY3Ay?aFt~)8`a^22u8#s1)r`ge#{g-bk=R`#fVu%&C_d%8ECD|T?r?6f)8>nZ}|f)8{Vzo{|MPoBur z={5TCs^a(PwZJDIDr{6Xu+;^M{8?wyZ?T!Bt?ldaLEpxhT5`{oEZVF`mab96`Zl*w zE~?8xW$7NyI`#l9$NFb6QMnqA16g#N^8)MiqK8|A389*yHlfH`^BfS#g|4_ZT*Ljm zbknF?4>dSYXH%wO%)}=NeB1AkOA71mAAS2$KKlcbceIZrb99z&t6>n`VqQ6 zDM<*lH7|r$inKoH%kBtc{}fEx)Wv`M5$CSeAxAS#d~m)sd(6+b$RWF7;8$+NGxzYj z6+b%>B8szqQNV$d|=pR zdM}=;Yx}hHSWkO|9kb@<@^HS%#jH%PH!P}-kGs~oy(0iMp!FAj2qlZ%62<3v?*q%3z9PkOM(-d?fwni0;*T$&rA@y`#ObSvs;_JTDE zXq!?~ws5pxn>jJI@_S^v&X^jG89DT1UXS{$#eV18jrlhT(%W5kk*wb6zuPbWeW%!I zzp}ZN3PrEm?_P{g+oy3$>CU&7BZJ%Gy4nrv7jHW1sN!}6){*7(>ohK?TAgAKs5Qi+&i=0f!%@@v%>a=`m zd}sdhQlc;4UcH^`P$jqQ*PB0TPnR5mUQ$hm)1vs!?|glI$H=0Fa+a;0hLM`<$sXq0Zf`mL z`%wcI$u#}7yhi+Crb4qjLmR_FU)H0UDy4$oeXOX0f;Wx4Ws^d|w+SHWq6#C}7czvqwrv1l& zrz5*Br)9ZUl{8f<(8G2QElR(CPJcch*-RfB`SG==C|+OlN7_KDe&={n;*DdQH+n0r z{^_XKWZ^Bqzq0$LUr2mAy;}ZRy%B|Sdq91i_JxX+e%mewXygYU*IQMqrE1uV<_h&Hkquja$E&DBhMiFu`Hls&_9Z zJ|?+H_1;(lo|AC2L9NKB^K0F-Tu7)X`*cV9)Y-EO^vHvSJtNl9*S4!6+S;=|=X8JW$UCX@jo5Ft zyG!;Zbec|g_d=`Vw7&oGJ7uGEg`He$aj?>BoKF{JPHN6ehozh*Iyp4$dHU$8(i;ca zsE-oppJrWsptWZiQ(E^1RN z;m%u)&0QR2iNykgaT!0;XBTHhM|~g(jw996?USYKV#O1);rG*rope83DJ!^ZGbs|N z=lM`@;n(T%+Wa)n%{SMED3%J(ZY&M5S?IiC-gyO>xGp>UBDk zHJY25#$XY`{z;*(F+rs_bYl0OUj0?p_6tSO!DSOsnbci;I=-?tN@{C^)4JEb<~}FJ zU+>aTUWp5c7?Mx*R@}~XF~l}&@tA$%+0MQ7)N4EiPU#1HJyt@gP}-ef`kFVhr&!kN zkL6l^cNwB1^pn^Ce_C`ox-xW_kfSToV+p@z-j0dzXs&HJCpG(C zZF6F`<+em^c2aMqpz(o=Yys_aT~EX6%Fgl&cIk{(bugiIJ%uNdPX)$i${-UqPU@m% z+U}Ycn>CMV_;H5kmjC3tG*HoS@?G_S$a(|qwRZ@rJ;bE;`2Fu!SL;E)R}q%&9GRBU zN3@HbA4&zy?X7v6TO6jlE=?#Sw>pEj8D~lGuF6fGbo@?^yd5E4yIarq+Hh8c1FwDU zUG+3~!M)xiB7t&lPlU3TSV-{NUFx#`=w+z=-Y)G=fHl8nTZ|ZSTv3uUH zX8EVnxwyo1c0)ayim+SKgH5T$^jX+}ko(``L4@xF__Q z=~n83%@6sPzMSi<18%Gk;SGq9z4=KKx?3Rh9Wt>7SAD)`a-*)kmB-7ArMz4rdFAuW zgS=WlHMa&1OuEtU$DO6Oh~L@Qyw4`f^vC$2+wUbs&z;Gze6Mj14eJ5PsHGg5VM zvcolX^^--PjtC--lhE#EYCDzC88lMpNSvGGp5D#%InZzfp>gfak&e9NUL0z^?*>lr zZ;;mv&R6(Z&+Ng93dxJl!OyUGHIo~hQq=k3Cp1VCCD}(CttIE9B5&}RAUJ`maC(Pc zz21!bQ-=bjPQAsAXPJ#pO!M&YO!2U&ZyqI}V3_AaUL4REHK*7!=f@5bM9F#3&Q%ry!zTy?B8%X7Nbmed|RD4vIu!??6SK#&%Rt`(TI=JW8b-eqw&UQ;GGb8l|QXcs*Cpi@5K(3xDju+ff zx>zd$C~&e-h2q}ToL=yxqwY{UPiuF|fdU+y?1_!i-w%pi8(QEsiF4wGa67n27rPO8 z1W>exPQ3}K7T8!^!I1#)X5BsPivgq+;4K26=#9bcd}bLZF!mVfd2wMss9lx9hUUfUGP-UU4_JhZt@?6GF3sFJD*D6tR9WtC5 zJK!U^F}$LLp93|v%z;0T0nq9>3EV~)5V5h6aA~PE4{UI(#*2f`ISYPG=7vh2c3m5n z`PAFz`q3syM5aM~yy{Ykhy^1dA6r6Blxz>aLgE3)z9mnJGK%l!C7`TU8Fy74u39&p zelJ~nm8aeKm!SF<&ow24tAL?w>fx1W5qzmLc7@_db0szi(i-Rl0C4p(EB3VveNL+p z(c#PAO~@>#8!T;fNy1CZ75MK6?EttCZ7ucf^$lcNs)LxKbK=FXI6_VmT4HKNCfq6@S)2up|ERoGH1P)Sqe*s?PSpDATB@ zO`;6KA&?M0zA6)Ado1?Fh|2JpP_g3V#rtp#gButM7xjd~;9MtJ*cfeeg47>Kn`xfz zw=CL|zdn7oX}U_CbtVi)cBhKK5qj7k{ijg=2v0u8VTwoF7%%)4=B-3dry=GAkh}@| zT!x99Kmz!&{}Be7i9f?Q<`i}wp#jCEh!?ge%MhA1y|yG=zP7iQ(@Fqmik$RueEGl5 zkr*$4<>d2XCiJc5mAu%0R92Va`P~D&tlJ`_ln@4K*)4jqEI$@Pj~f|jW2mmcf)i2h z1~blJ9L+OjFgT+4g8?-13fO)b9PynMxOJF@9qoqYoj*vJTR&k8BZj#3U65R#Fj-C(33u zPUtgj!x4ii<tkmDMY_EHdVA?7 zO2(d;05Yq*i#aUjQNbkrp<}(0S$LuIW%cXjFBI3cZUiy~<;aN9Lo*5iMrB|IJJ?Qy zSg=c|K~097eCH8u-+mupck(l6bwu@#{t2ac%-I}jLOG$kKC2g)6z<-MH-nLDM$y?& z8qi4LT~Lo?1|!bStznGDn270$C3xMJ_K(}3M#k_fgt+zs!Ttr-r6_(~r!J`4jwPbQ zj?Ds!HF1Wf(a)8JX5ftwDMZ+dN3owYTJ)w**(1|!pAYHL`59W~*usqnUef3k-R1ah zK@yzD0KRm~vT7z^&ROlh%$a3AS)s9fSQe$Zh--S`t!Y!u- zk8S<4CpI^712r6-de)Qpbz7`eKJMUI8LS#L1IS=cBqegU$Gl()^Gi+Nu&7z|T+x`&5d1-|C(q)4uK3 zI{{K~8FsDxo~eODw#Fmk7_P`fbaVE=44UzVm0yBt9KG?2)c&vY-X)Ip1q~02^yAf6 z2E;hB=1Rvh|80iH22XARJo@?%l-)6SQyeZd6OdsCYO*4hpaIfAm;;cMy>bt{coEWy ziAdcoj^ghhr$p=_~f5MrOfPpCiM=(GnMEWxAyh>U{ zQ3$;$Ey~AZeF;$ASc_;GCz>428VOVUk95dF50uX8;E}eR*mq0{E&*9)(Zm35O2p2i zAkdO_3@zEbQ0GuTt#|oy^m&8x$3z1=vJXJAvM~B+m4)d@D~91E()|`Jrgt;;);Od< z9RcHk)?$(gdElIk?u*cI?D1&M9ve8Hq>-jK+ddu~GBkd}=8hVtUO9dQHD0>*NL8A{ zHHC>yaK(%Ma*1__^pFFM zYPD!?Z)B_Jc&A3XJMJ#xgMm=RO1;cAXeE#j2CAJJq-2W7XblXToU#f-5cQBe(AP3( zr!R>zV&qypa#Hg8yC1^v&_@jeSUIlh}9$ln?HkjN>5%l*}x=ze~Y(GT?DfpLj1UPIxIsW0?)kjs2Wne(g&=@#=14 z=&~Qi>k^0D7F%nQga?$?PkHcVo@ePOtgs*zsV(&|cnh`&qs-}VyB&nSpmIPLs+YlZ z#gT_J%s`*UT7p93EQpS?m|EIBb~G8yvg55ccdq6yRYGiQk~ zMIF&vIC3;5+^FN~7=w{Dk1Yx6|Eg$UClWZt4Yg@!u@jb{J8da7-bp(aT3!lZ2~bOL z9a!ytG*la#a}PR-B3M=R^{CPbL}Zbh{w|3T4(-n!naYKEyI}HfS%<7G*MT#a!LxMU z7EDX zgcc70iNPH9(p`*~|L-J9!D*oYu92HlkH@O&6{8Vx2OC=}pnIfW;}plc8cIEibd8iLr0@B@l>n#j?lJUAO;-y{8^W^&VHn0fZtaO2n=xZky@6p_=@2@-r zp9HuaU~=?Vb8usQbint737xK{o_Hf@(jzo)CJkCdEy|S{%8W3N2j0@BV8@Lwlt8-*kc7chQ9jt&a2sgN}2w3qw@y ziu1_n(f(1$O+zy}Fm*4?iMo%C@p*4i%-%8ma;5ai=YGw7*ZZJm(`!YwA9_`1`@JoY zU0Vi6D}wXVIr|;j5*UP~DWZ(9cYy(Q;K~v&VjGlzLrat=bsdk0ljr}Dq0u*G>}Cix z7y@VAVfkWYEU7|jHQBcF`9eIU4=I-KyD8E z6*82$VP9H!V2z99$&$#4RbTK9FKfCKul}s=LJdfI@4l3?`6r&>K$2oZ_V{qX!N;D82i41d+E~z$2f6 zbAO)`Y?Cx@#&J?{GBf(ptM%Uz4`8*@IFup(CgWMB5GJm$hKV4$*v5zG1qWZ&<46H- z{%GC+(G3QXV)j$_lIaFq{N2j-{(mykRJ@>}mj_%&iwxHh2|QX!Tb$4$uNVdC+KAg0 z;H{IVn*42aGrHP0Xzdg=5vkd@fxhnvs5h)lh$>jU;3UH28W0}1)vyAeE_miTt2iDk z<94kOWI3Z5PBsImvljmtfemvpvd#1R_gY=?;;yW&@P4_dIiL{^S}r2)21@_R2`-}* zPAu@y+F&jMtYy8lL`2v|Eboth^9Dq9oCdkPW(4lB46e7-7`P=JBEn*pr~hY~3ON1o zOws=Y;rdMF^%N-jm%XsJ8ACZ8cs5eE$A_D8TflcqSOyt7H>o5Iv&!8xd;*Q6_`=YjB^eb9&6mu zvT^w|ft5~L1Oc?D-a!jy`x4b_QQNWjF(PEr?ETI*=XgQA9%*oYmFp-E%| z`3IKCnhGeHWb|8uX&78rlK+Ds%>4V78loy;dctVQNwR)%u0qc+_5;;x&bLw=e;G%T zPf=Mh!;B-Hm$^ifWFl{bfA{7b73OlohD4(v3{5jl;D7;jDzbrrY3w&DXB6ARo7iLQ zgj_p37&{pshi(WmBqV7o2~LyyH;45C5^H?FLQw5==z*U$CT9AECNtDgve%_eh5 zobYHX0nrKWvGaV2=4%7guJ^*MM^LWo`vI9HO$%2in;v-TCTfKHLM5%9Rm`k z(#ZHl^%^}zye`x1kHoU6)eC;*Mfxk%S3U=4$-9lK7=mxQ(j8tkmfs5M2Ar6&GBoJb zL+j!MhtA+fY~s3t!L$@bz*!yt3z!U&m}JefROhbMbkKQb*bli$1aC#_5Mq6;=IV8G zAFTj7A;7&i;((f28P?p$S!_sX?{54*?meUecL10lEQ2i7&XbG{#)ozsV_Jfa+yhbP zw*RkcfhML;wp@fSbKLC`%OmMkOrr46=e=_=ak;Ch<zI@BbaC73-JIO(~33ZA<9?slBR4)N;}cox@+fW+SiC(g|7h%@`* zdO|g`^DDI{Y6Gw-j?`rd?8=tIz>{li65Rt4GcjbD!(}6G-2n+Vk^Ydj1t?$#z8<>y zHQ_+2bX4d`&zTLar_(mlbO^};E~h)7b2wM_8<9?VKvHyDgYPC1S;({6mW=W zI(>A+Mn=~7>)VHona(8@K(5gwAUmIj|5#a@{VjHO@K$zIsH}SN$5xgK7b)!#S*Y1Gj!1>AYRQD$foE6(KKVa-rEKx&a)~cL zrf0z}EF2Y;JbbGQ%_{|S2$*6$&H_W(f?2=q8xH;MR3m{ z@*kQ1i#bLFMu7?yKZugEgtu4GwJX6iA+Q;67Q8$GY8%Ddp7gx))Kf2OH{t!c?iCP! zN#+nHuZ5Xf!80uW;tg`F0xy7wR7@1rePf{Iaml*>hK>p^fLrmet&Y&DRt`j782$TX zKyIRIu#K<>>=nm^^97pi#l%MzeHZ}j6ZchOx zfWeM&y%SSjRYTBHh6{c2HsOWXCd8}3{M)WYpNHV#dZ<6LB||kR3YJOUAcAvR_z*n^ z_bR|*IP%mJP}YI#Z@=xIlWtx;j?*N^wg;P=yI5}{-paw!pADNgIL8PZ7UcD zo9axazR*O9t~0TaEB`(b3_OLGp;oX5M#_x>jPFs40uDs0_GfG`K0Hg7{>8Wg% z(EkN7Pza5m*D2{RZ))f=+?pXDEiWU&&VD@e2))%X>k^JgF)1%tJVdqPg0>yZM>~!U z+}oa`n^f8o*;+RF`N0P1D_+Fxy)KcFh9@vn0f#-5fXaD?#M}-CK{B34y5 zflR}Ap`#(SOJN3HAlBU-n(~21g{4kQPf|`toS?PU_~gKOE~xqz#zC7iL|ye8TAt#l zH-KV?2w!nzgmE=_oZ(L?Y=g##f1&%z5*gA?KzUxQq3GZJu;NP|hCEVN+9qUoS>(U{ z>Ue0nsfA*j$Gchr;o(im+Ds^Z^4HtSOCWm?Im)VY-?baEe)gyFWJowMdZ3d^w3 ze?t#=xr z>o7)cYt1xfwi4{7*(yY`RnhmnS|W6pQ! ztBP=g>}Q?(t_Hh!K9)GEU^u2S`UDfy^M}!>H7M;TV2ZY3?-CslGWd^BNb`4=e$%xT z@TgD;dy`8*eA2q4Z*8+J5xL~nfBKfny#kSCGuViq121hKhLf2E009C7lBu=xepdX{ zBD*Y2-)Pnm?nS~S>fc#C{&{^)c@v1$p&*k-4*$_O-#}qxF#IR`vEQpi;bcB$Oa0_L zA6~sc0x$+msrtk8fjqhuu| zz>l!HR;1EGBWBy3P@kB)(? zMQ`*m!mG0rUGtB!T+KkF0+8-EvY@L1KuiEcD6jyLA&lYi^)!JWO)oFZgB@Ie=Zx1C zx}wG>{n4P0(_$6;Y50!>IM6?hwB=+837D0(tl1AI zDv<3mu1=Nk-Kd9H2iD>clNJK{&cf!ltK%u;r_#b@nScK5l*++l14eu}GRPfiQxqX2 zu5FEDm8JU~InEp5UGyWtVxWq4B&r`G*H9$(M|w3-p6Sxm7dk(wf(-~-8DCxigUwMs z4&F@sR=8e-3D%?xzvnRKm6y9vl#~~q*%Pu_ZTd3-Vn0q?NJP0A&AY3!fW7Ss7nop8 zp2l!i*i4SX#)HO+7+)j&7Z~4+53F|%z|3Nds1ww&fg^$H`fka$M;*unWn%x&Sk8YB zp#eqN=ntkoPhe;i*@SRy4vyg3v5^sAA9&y`^@-0a7SbK73*awaYw%S8dwzsVLgC-_PPqdbi;+wW_WZ3 z)+TQ$Msi{^X8L^kqk8ZjJXICsoPQM5sJs1-Qk9hc zXSbx4G8l`dd`lXK+SmT$V@m&$x>m}>$S+_XvV+eIik(q)4^(XO73JRTvNU}T&9f; zZbqCN?Y)Vp3rJJ>BpDwu{n7pj{t0FD!N}v(U(+`Y4K8QQP1ZL|h1?o_7RT<&g0!MQ z%o9st;>!)VQ;d{Yo@mt30fk|E&WqrYm(zM&|Mjp7wpNpY-Ncw?0T(?ekIfz(jIIk zvl1evpk*75lW*~u!r`9Oq9OSeM|Pb*wqIAH2+IEfi9aE&160L5ES5I@7Od3ug21%% z4xqV`YA|$u0L+pl3AX>mh9G5gLwqFbm|y?;t9@Vd2@Kx{Z7n+r0wMVU_2**`>dMWQ zErand22}K22b(hih#(vaw!_#)guLD4b2P@S5c426rx;;}weK^b=C}WN^@kx$bP3F4 z^^_Jx92vz&6Ulg44z>*PrW>7#GEv3TT?Ev`?qGLPAMyp!(RDWo4Tq+_s8@7`**C!j zmGipa9K1I!s)da zju6o+_CyRHNE~Y}N;v1}(3O&G5P$yO5Uh6$E1lGtBHH{;a1&sOU@+OmtUavJt&kHY zKyF@2!0`4lTF)FFtdh~;4#$Z1m_B8CzxLbp%D(4Qv*!zRQ+aXHNFn!L$Z6wyI?S`7 z?KnpQN(YVI=|F)_)Fc>==_1U(0C*AL765v-qM=*Y8NYD?!{-pPabR#15(dPgJYqBB zkdOa994b{l%-Fy_N?||W^_QkrufNze{E#8%#G+viC-)DN(egxV_u~#*A@C!BoL~0F zigf?nn$BA*&5J|XiZUa*F8ojxi(LXo(r13KTm3NDl>Mv_vLL{t%0jm#eAV!m`J`g` zC2Hr}h*&NlVJ*3!sGVBW!^WUCvOd;ik#PwYMUOYk3`AUD&nk_uRI4njwUL=A)j~DM z$sW8|WFQq{DQM)^fBd1_dhISqS#kgkO36(~!%V@rrNk$l7a6abFylp)JUcNhNN=?3 zmk}3&b{MIo*eqfVndiy<-rs3u7abgG8ms#)2vzmJHlmpyeVBn6j%q;db$m8>H z%EV9S{PE4;ab^HbDAOHO43&Z_G`h*Ot>V})C-f=XQd#Sz~+s$?f#Gt^sXh9MJFFrSUEepvs-idUgc_yf=W&@ir_&o zbpk&Or4N&P#!Th`WoMXr;U@zg=&xUT^Vrq{cOVrqQ!ni#MYs@=pmP8syDz1!aF-oj ziK9+9{FR-E$`3A}1Qw2L>+fEnKXC|WWkAwLri~;V=^EFK=W==BHgaq^D}|p|QsBxQ zhtk&bRwX}n{Iy`{kTr1$aWPx_Y8tM9xH?QWfOwe&49c}?)VB&CW2)%$Z?EHUXmQ0x z@D_1pcUYBW#zb*sT>f?+b|4C|aX9D1ulzPO5-#nGn7TM#o#aulxkmaA6mH9S#MHS~ zW%Xf!TX5CvHELi&;E!VjjzF+&T7<+FA*|ObZFMgAg{=y)Ol9h|rM`5GfYHSEruws4 zBZ+zAT@QoK75scl<}khgV8t5ci&q{y*Yny4Ycr9tcQ66{x1B2fspsGx2AhGi3sCrD zGvk05pW!Y7Qe3$-g#&d22BZiFMtU^L&Me4rOnC^usf>U0F@*P^QYGx4pfXVESaUBM znk{c3Mjdod_!+l;@^tYJOG~pRkFKAdmR3PlRwTX^^+v8`K`&?bO~eeO{V{iFJB53o z!nfkuW4CK2%*-UPMFuQp5*R56NCiU_3y_`FcWlFeN-qSOQXQ4$fDg5UkSS}ADTDZGVv8i^n zav#?0GT<(}cQ)YWP0&T@_QY10E$`un$?^z@>#j!N`dtj~wI);E8f1;T2hvo8+F76% zJJdBO89DD9?(;KqpUq&>cA1ie;Q$jpeA97qW1OY@(R=3d=$yen7pC)iOY2fh-Xh|h>737_QPn`(JgxDKe1XTFO#S$9KD{ewGp&zzN#j(q| z2@;H##;ASJgFF2=BO*m~hxU_pba#5fRvm-w28OOj!Q;RT?ILh=Hu%KT!AW%E#yO5g z-9u~mbi<#~4hIByR^;r?smh&A8@OkD+~#hqTy!?32Ju9B_{_-Im7LzKx1Lq-xwP3H zR{e7$ePPd>?a!QP7z~k!(>JMNRoZYUwcw<<`@V3K*V+|EAIn(z_l7$&k(nb1?S(aX zma9_=sZY<;D|rv^N{}_|poJeGhQ5I*kt_0vXgYzzmY&2oK%@;U1X2|p9-aCeCgIv^ zAAlG+&Txi9D^hM;odsrZ$)d8$1Nu-g`51;kgM-@VM*piziR`MA=+wC4DgPg#^ zQcgv;gD_!XjdRuws#bI50rVg-5|eNXGpIl~q94=O!9CiXRl>Oxck5rb=d!b7K8@p;jusXc-&Z|E zvq6@4Xh{Tv7d$b1@2D_Km547%!Exfxif-6v%Ty(zSt!Wc3cmr|Q62dbwuTsV8pym> z9j{syd*=XyR++(La*3`33wI&&j&MF4ZBPVI%MlG&p%jof&;fT7*S?v>NprhS=sdmpAx^-`(#i@;?A13gc>Q`$ z^o*m;_1IWrNp@;};3WccN@?i!P+b~bG-`9$nH~7Tm-{t21!wvrKlg>6v<#cz{UX}b z()9&(HdjC1`A%*4BmIM5m`>KZd`Yo~Cqs85T^?*|Ag`(eRv1_Ysz@(q`}RQ%SVk<2 z0F(+1PLaT|?KtuZ&MF`u3BL1`4-;SxQSzqgpL~tWGzy+i*)$dDK6f2i5Stf#egD8i zbfD(M9Fv>{L4u7LA4Ot02(xx(WGQ%G#8xa@{db^|p{J?QIThFQmfXg#5C;f>yqN(V zwH;U=AXie3(Xj+0Nqti*D?^cF79p-gRpNtY0ap^dbxu3#?^8L&aaXP@1M0~*1!%z( z!&hc53x@`=BF2v?+{wQj8)i(VtIBA(a?mvhA1Cfbs0 zd)j)8FN&x-ftrhD8jNf2^Z&H8Vrq)J(Aq@X>HGO`t6r9u19#6H(#Id-Z9Wr)L+)OD zXQPF49xHEhL2N%{C#jmdws=dPvlV(sF6|X&$FWHL4&{|*+Qwn^)cwlg6%G!~?x}8H zYf|k)3kLfhcR2Jl9Cb{skCGYYY5MG+P_JWDd$(_P!0+ko{6KC&{>iVRT5F_)6u3K* zdOhv0Xc;Bt59j1}SNbdldhh%( zW^^$QaV<2_4LD>Mc+VdD-AH6|6Sq?eU*kPwu@V>4I&~@CHRlj{-Z3S|uV?vT z-N;{SD*e77g`W-V$RBq*G2}+e zs%@gUasK)J3Q^J47gnFb@97C#z3;({CksJy+>$?M_j=iSW?4#q#Vzu_(7HkAv-rpt zYYQUR+d5c()rdZ?{5#!X;+x*eytjwB+3q2OZ}|tcH>fW9dB!#s6W_lI=ucXwYOrp< zfi{jeWL6T#y(eJ$H2V#`SkYJs7RsY3YwB|@RKDBx;}{-oSGrPc%KjZ^(BrV*!$^J6 z_d@se#*25@bEf+$ZAlZvY75h-^($nA+#a&$MhF+rlaIxHF+vrMogBe`(nrP7MWvUi zqWY-*R2|N;Bi~Uw&vSmfNvJrRu#+kO#vIo-{$#TzokyDr9D$BASp>KHN;A~*zn zRL&Yz=Tg{zy(1Z9maI&8ghp+s4r37XJ^O-}J1ed5Ryg0b59lj;-IHy6Z@BX4-m$=@ zGjpDfNqs-B*-Spus<2FN+259?ocFBK;Ow>$saj9Y2f3?f?R6%kL%V)>;&$KVuJ+qq zIrS>CEjqZL95FXZS1V5sT2&!(#H*{MZu?~!XyR|mYnS>SI@%Jdkq`4^hd z-~Z9=+6zZY#s{i>7G`Eo3bQn8*G_-^X*Vu*#<|qPJM`=B>F9Y$otaz%tHTdo=sFQLN%I)EX!Tk%?1A04+_NnUYy@{|qN%J^ zhpXZp=;aYLZt;#J!Io4+L^x-{BSB)4RI@aj8T zQ1@`~LR(dHi9=z*z$>oc`@G&`Q@hdEG1qC;V$#=VPiC8)FD3_w%zgIDBXpfcOb`CadEUAtaw{^_{r;C+44$Hsd5G>eX>WKXUD=j zT!I_7Dh7S}9)3TyjqtV7c=+?P?mrn9(o{*t!w#k)A!k4IU9?~QwLDYrM=I^-(=C^G zd_=oy@6Oh&)ftPiw7Wr!DXDqhV(qxFvnNEEiGow9d3dPTHgqMr|2$Xo%;q*0obhAm zoO|)P&4(*a!u5rvk?Y?)rtvV}D(~qRU$iowrTBL1zHeT<^OPI+bwkXTq?K;_`pD!SdG$$q}4OW&O4>-YxdjRHI~27aq^IheD#slDD-FU_Vi%2 zUVfAvdz06WK6G@8nO%^t9xoaSqC4&{-Cq)6<-H|8_M$p;dx)55wRGH=Z6tgzY`)WQ z{+PVW;7goQ#$NtN^MD0y!}R^@_*I|Xo?WddZnH3R%9zZ0xhrovc;niL?cOZVAwoQF zajjs1kR?ZQ*U7b6c`Vh@YqW}Q&SYigf6j3`Gb=E!Fg0y9zD79tl#Sds-A{MS(0TeP zfh(_NT~Douv~4Z&U}c-Hy0+D@`cguznSawk^3jZ=J(v6qW%ao<$~dRLCuOppxjx>? z72n_6(sJn8>O_}zk#Edo+4Rg_r;5Oq3eM@wLFfU%Z$+N?fIyYR<!CxoASc9;n# zG3U+KniySe`Bt>^8)4m%&cRTA`L4|T8_Dc?=dIeiW;dAUmU`>I$LX!b20=^ zEO>ao#G!Fg<{IJ|*wD30_^FN<`Hn4jWy>Lt6-?BuJs)00Xdf@iVYUtbd|@`n`^_$= zQw8UyGP7;W(UVV~-fir`v)2g|Y+v(TKtoT5#dmb;-}dVWH|pRyP-j(B)aF+9JKxL3`ZahqI3vru zrth@QyItS5=6K892JzO@l}W{tU0Z4+w)c$)wa<^3EdCs7ztSiA=p5@yzBdE=gBHIz z*gg+&XFpP}`lIKMX?W>-ubAYzhW7A^?nTufeKMX-I^{avV?N{6Pj@mYf3J2Q928A2 zGlrl3sTFBu{+HB8uk+d+91iu{iPE!DYpcEYDM@p`mne?3>l@lJWOI^w@Bgv&CGb#v zU*LDf*a?M@m{dZR7PN^GO34;Nvb2(Hr6TJ~3sF(BM3_{_64_;K)h4o}$P%F}A^ST2 z^WLcM@Bjb&51;qm+_&9#@44rmd)D!^GGG6CzbDV~OL{|Bx;TyA8`PP}$WB`?;-Ge8 zVqa#{=!M~Hd2J@bhGIQIMp4Khm%btl>mc93N-00>s=kGni zBW}egFO*o+_(AF7_RVF2$fn``l?(KZoIy$7_5JuRtUi<9x|auIL8f0XG#uRu{tbvVbhkGOCR*R z3RYx|I(C#C)78I3n*FBey|uNc;?*iezEZi=x#ZDQ{w(nl>pWMr5EiW?v7XX>smqo- zNN-R*cI?Jgv`n1atat;9u8{x!MSWXEOv}gj{`h{TCfn1f>eJT&(YJ@tXo_l#mB_0@ zo2rgFku5w7A99dSx_gzJ`(E}trUdnY#6rE{Ma+ep*E!{VHbz{&B&<*oo3ViwZ2iVE zU?tbi6*+>s9Yv3Ft=%Uzm+FPuI^QihHdVfDD!J!ymDRWGSxrxSmJrfDeYu29FR0R? z=94$&T-?)pq||*fTc0aE>%3QZ>h|5RuxcychhBjlUNk_7Z-0^2AEGEbsN;6ObAJ5n!!iCb)n&IuZ|mLUlNyjES#3X< z5EtuunEtlA_+{xaZk{muk89(PuNZRepQ;bEF(=W+)zx`}jrX?n|6nuno_^x>JpJo* z``fs09D2yyXz-UM()KeP*0!tvSpTu2a{2%f{b6@a+()+T!)5vi>vyK5JIQ>EqFHWmqzQWH?C)+^o^;3966bYuQPZ)Ng+Ulskg>sFl{{-9U+NT^tVL(OpCoU^vg z{Kt1+qc{Hg^1w4eb5t@-VhxAx=d(}j4c;4?ilM0oCr5ubLX@6b-Z!g;_cV-cl)YhM zLXKB-)-!l^b~nqaB8iL}Zh{VWp3UQbqh{jq(gAQ23mWXJzcoJ*-K?l^)aeN0@FatO ze2l?1HNX&<8fFO2FcyiQ+PcQ!yr+sm5{2H=w=Beh=KQBQpGCd%=KR1$+vFNu^vg?gHnwI2?*CKa2FV*?Bg8h!1-CqRgR3LO8halY91u zjl6nRnPsVcj>>D0+ONVV=;*qsWOt+|f=N3)oWA+xwXk&A#+1IyY8Rm$d8{TjAM5Yf zTiYA5a9tX9W5ZY;F(|LTPaaI_`q|)asqx~~_svoFeLq?bx_|7fHtP4{ebT3L?OdR3 zgKm+B@l@!mo+ASt->S7Q#R}O!8A!hdvt7ez^m@=V!rw5iQ2Vy z8tPV|+xx7tmw0DZI@+0V$|l&&J9k*NPP=Qhj;}kf>awjo?d~>G*`6yWjt%+j?b?v! z$8t(UH$J}Kd0nvZw#j;T-_IXDuv;GP@LFM>eUVz_KWgj5)h3)7nZ(cw*u3+?&*R?n zt*YlY?8}wypa06He1NZJrMEy`>%y$ynuwO~JqTU)*zOetx`YTZ`lBJ+&Spkl=ZVk!sY*yQ0{BuX3A{Bzje#z91_- zwOJW)Pe;Wam)p!J@H^-II{y#XL9>pvRohU-*t&H--;^;GM_k*48#!vS9W=p1K!CnS zlNC{$R-;(J5DF_|+@oBFRP(24VJk=wD4<=p%(_g;!f9F^0!w;p@FmQ799AUl&&U@2 zfWYC`0~gq!cc0H~Vz|b`kxY8t=L07Pp5XQ|7294^#ui74;#aiav4@BcAWmmOMaxT; z!z7fOntJtjg@>g)l-dpWgA_GruIfel;B=Dou6J)wZ)nLdiF@Gmx?!HiF7!b%LEU%y z%oB^kV1UmTZN-E(EmaW$h){^-DHUIYZkwG=Z?xTKnfJo`W_M`M1J`#_fewmtTxc|8 zs=qI1#L1~wDp@44=uwIcN7ht}xN=wfv#Kf`09Xx!7M9i6*nNawOYvQ5!rip4MRZ&6TwD`oVJ;<{_NpIQU?PwncsvNhX z9~!u96-DQ4Jcp=W^P|@5J&5PD`}hqcC*h|+f>>Q<8%1;<^Eb#uZl8*OP* ze7vTbvYLQI4y2L?;$$Yx#pcEZ!U` zAa{X=#+?xU2MM4#>~Yh1JAK5lK^fa$%Gh{v`#wg(S}PAFrSTO*a|q4f0^66Rxx=IK{q6x%(Udd}m znoo{Xsvq>+6Jx!=Igr@4=EwBE_03kB{v%qr z)rDEN)(c*cgG;uK(Cr%eleti*mos&ItPq_h#k%0b zj9UeFo8O?anFl9hC;6Rh%)^oHTlpXr~dS!O~Z;EH9C`X4N~VYrp(cz#|6hWh*tvmnM3->qyIa5?y`9Ci9d6 zaUFID-LoiIFbzQv*$5#cqQ=MXl3*Au3kjOb4BdJMiVo;=w+E z77`x|hEq6w1De*pg&e@cOZRfFet-BYWBw6BJa=QRV!H&gnv zGcEJl$45o-tU9z$?-NSbLmkjiYj3(b(kwE~kyL`QA;2#vc%g`!_EjN2Q2HM6s&!Q} zpSAz5FF!nc!k#!qH+@yzsz)@G(UnuBdSsyT645~AXZ&}24wqvGUf66e{~;evcMxM7 z4TU&PFvsIwv~(c%LDKCo0{&|dGFF`iX}+*j6u?8O;Vvj=w_bIA3qy?WM5iow$#&E( z3Dzm3ioXpI=BEo)_;Pyz_36Z(KKY7CmW{UQ5(PuxUE{XiOw%mgc5c=Hr2B}Ack>@b zhP$J$R{k`iJqe!aon1rVzEfkLH`1KqEcQ+#5p3M1;C%MucZz0P5{Vk z=|e_SxfdH{>0liQRst2nK57O!%zmb(_jMADLc9duIDAdWj9fqhTI}I1KVLb zXf3s8&5o$jSJqdl+&jgqBER)C`;bt{0(rB55%B+=+Kg7?)UByBsX9SN(r3P2Z7gEq zj+M{y!lekJ@lTrJ`Lq%7!Ux%4+yj2{c`yQSH58qU5&dH%2R;h`(lEyMFYSFMAX)QR zWvPy-wtj>7E=w~Pvnh4!@QH%0X&!2kwrMLreA&!OskvK0V7)w{|)gb5!^8WVYcOx zwk$L=)pD(O8%=0$BH0;&k0)lJ7 zgwI{RKdesCu6P>g+xd}(KZ;h}!x*SH{rCBk-0ZfunO}^b#z88-=_qkP+x1OuA?d~) z=B$H@4>aMNu#@duaTdn%5lF7VH_BMa;2dMD0P6`3#=0pmpjgW=&O-AZ89BoB_l8GC zdM4iatp=WWs!Mob^bmXylm;+4BNcQwIwJPgetB7#(R})=j=HkyoR7A zBAIUc1jnA})VZxBHBbwjJJ%QyOOadb?azAMYD zUjRP;e|Te2I<`xzBB4C5~Whh_uxBnP+$R6$>#4!U{WN|up+z!oes=vjb~L#KqE51+X)@mbFeLwI!M-AnSsN`W z!jvC*ej;p25RLr?(HmGR1<@KFfM2@qO_w^wN2xeG?dv*Sl>7OBNB-~A@6vjH_vREI zRJ1>>cO22>o-J*eXY$D&Hoj&4?UH9LekY}!Aq(*1FXH|pnLMM8!4ZaGJhT}`QyTMP zyafL@_1RSI0F8!G>`1Nl*4)B^7pErYUuKzVRIir18WbR~Yh>g=&l-&>K-Wf`sLK6y zCuXwLiTbc~!jvRna+SnA*DcIgD57M#*(Trlx#ID+{*3vVdXK(_G^-0m6eLN;Aieq* zbwrB*OIt87-U?g0R06A^LO7IK>^+3?j^X3FA)ExCRa9wEAi5&E6w`_ zg|tB~@-`ePOeriEbq(73S#o$QA2T?XL1)eP4#- z7u#7`O~BaEg((+bQT(@trhtE@r#XZ{!Hcucti-JCPFMaa7-&}7h@Ylwc{2dN1mc2{MkFg?pj0DW1V73XNsEGI&xXfrF zMB@moq$Z0gxC3uEi6SaSlhpA0GZDks6z_Y$%~z*;uEz|*JkVz$8YsjsBLOu85b(oS zGFfI<{?-BZx!m?3kpKb}VzrLANHNlw=qoRvA5Y|Sg74hPm0G)A(@f~4eDu)NSgYsZ zNAcyi?n~B>MBI%x%Bap%R6X(TD2Al;iqdCxXquUk__4jw`D)9o7^H!YW4>OQqwJb{ zKTr8L338<*!kg^6!YXDTzV#}$DF6z|kGJ#tXrCK;OW+r@BK*XG|E^>Hb22cV<^wtW z_4lSnCORh`diezJ*=fw5=&(QS;Ad$>6F3Mqi_eKr1;p$N+&9y$PXKTtaWNhY&SW|N zQSjKc_5IV`ZIav?*Dv5ZZ&gZi;zW~=D3}Jan}HOmopPco?PmrK z5eHvJOo)9vCva0LnxqFYvkcyiP-Mi5$g&!l*Bkons#$B2@NIYvU7UEziHkA z1-TSE$7K_=#cqs`dTGvKVQ|n>Hm{%(k6qXp{b6{5;dB;iHP86O5qx2?ug2APY{z45 zsSO=|uBErU&F4yP4rSU>Qj%ct?*_gs3lcV5=8y<+i;>;jGF;puL50|WUQ*OI{HSHR z`^ntMukfhYC`0*M<0IZp8h=Ry8Ke+v|3`O z1I}@@JCXh?PnkczV*KZ4aPJ>2aWfIyg12EpX85Gx`P-vWF>9uLCR8D+@5IT+81Zn6 z8AZ3L@=qN~X#pIm7>+gVM5n-t-gvx6pA;4WR{6W)q@`u93=PL!(CZl{U8hKK@60_V zDt0FLqbQ=KoB(MAbOCc=1`9kw41;Hzo@M~~C^W@@X#U&{6DsMa$3)JH4cG5SxEFK( z=x)I_fawitcg9Bt+DC=@gpHSjd;=M+BkD$M+PxyIm}s&_NPsADYgt1S7y!T8^m=;= zSBgek{v@j)XaUt0-wu7=N8xoJ%8UQ~;21x@;Mz&?2_=G8+I5%ya*1U&Y#Jt!& zV{pNQmX(8hi&Bvcm&|0Z#?mt|GT{G_$4n5u|PnN|6eX+F@u? zv0=Nja?cmJcBAgPQ(HSYWbkUN>zg=x^+hb#5?oEXJuFeL+=mieDKF6)-&XFFtG_+!7JQ7J)yLpEWFDEf@m8b(IrN8cRU7#aUw( zcCkrZR%B@TCA$yZSP?>9>?oHP7i`g~_*-k#333NV^e@>2exQS8uZh}ZId-il4lI^A z5c@JfvIE?yQmOm92`L+QdROBi?7xcz!w z28g2bF8A3%$IpwO!031jRS9q-K7Ap$6g1vs^ff$?<6JV#B-#;nAlUPPnM91HZ+cAR z#l!aNuCC`dh4f%E6r>S>$8dzThn?(yZH~V^-jMk{(1{7b-G%U@q);4?D;1=+>@ag8?-ghquzVj5Q9-KP6Z6?ak(5?U1 zReDgzt7Mt|0aB>}QZfN9X$`Emw|j>C#8znxp52N9q_ocR-ZP~@^afTPBev%Jw#t0b z?&(*oWsjrg77IYJj*+I2v9_$;a(CmowvQAYW)5({2S#8nK9h9{l(L0#$`@40n?;?7V`Mct|8}8BpPJCiMLh{ zAz!e-^5j3GFs;#^v7!6X<4S)1FH%0={&0%C8Y3(A-x!v}A2yV?K}7QMpUPY^mL02> zUj)Mf#|G(>)=x+!@hrzfts3!%(nx|L?Ft}=6+wqDE!tVKXhG!h=|7Rj4!EqaBehhV z41OUpkXclcv5_GL9+ldj)9D#fT_U-Z*iv^lzx0d3koSFGrT_ILN-7lrNduvSJ zmx5&j;1Gd_R{$VFt39gSGf4bVM2tbR@5pWf;LkZrMgZK zt3Ay3I7A^koSvAZ>t>nJ+xfad(D>!6gGZ-ahkitL{JNp2D4Fx;h}ZP7U%v)Z-z&Y! zk}}+aeS8%A?>^2$~RPdDE54_VAQ`Z)tb6%%Y&aBaE4v_5g0hloT$xl%Io| zhWr6d7n=k=91_=y{e7_z^b|5UMB~$;(M0^K+bq~}VLK9~ebPcO3zdz_FUjVUlbLPy zd;jeIl8C)Vx5TP8s1BIDCLszqVPSMGQ~@hL@bNhTEe2m-9Am77D)cYWNibuFK+t&# zPKK8T$6Al;LK>bMN(nsfjVM70$@oG*SdcLzY=9Urc-s)ru?FT>fG|cFBEufDcZcx< zk}70IC+M&d%v8I9DjYu?5(VWl!Pts{`s%e#x|NyvS(|)KAuyxxY{LGCd-z?IS(kK^ zZ#?Q614Z3Yl~Dg82!BX|C)^wU+QXG)#d$o`q>ciZ2tg(=)>;}Yax|n+m>pX8`z=~r zGe$};?UIm(zI5VjVqf}WZrrM}^XA$+?Sflkp1f}LVmJ?!LVV-uQ8iuch+c+G~bhVA>+GM-?~{@O)-Hfd9a5WUOxnpDw&*lJs$TQr)Tyl?Kiwt1l3$S8 z^Kq8#$Ae?#iys;N++~)W|1y+q^3;+gM*0wFrJcNhC!3(la29_%qF(;6e zL@wNPNA$hjY0#P(QpN0IH7)=O0 zPk`XYJOo?HBX-JmATx0NXZSd|Ox=g#Aa>=TON1NX2!<`?0Ktex?c9l(pvwD_C*^i8Mq@?g7Kh@EdD=f5{ZZgW};$O_B?~&ej=)P|t>rs0$x`an}cm`tn z6NH+A9f%Ra+;`ju_r_FO4VuiLz_9A!;n+}*L{*0exbCcF*p3{upB7SraB--Nf~+~w zPl&}p#ou4B3E$#S;w}nXWh(E-a3(8qP2LZmH*{INB&3K5Bq0KRk%a_rmOXj{(hDUe>Vh=lW*s6B5e0J2es%1ik0Cd-KSkicM&<9U(iQW5>&Xvj&}_fj-xu@-%)DVbz)hqel3NS(^ySMhE?D4=JQ+ztr9@0PMh{TT+9<+?+WW1y(ag7X zDm;iY?(<*P&ofm2F-u(X+)fgp(LDQIDZw*T_w{Xlp-yYR-&#D^^UT@R+l-$vz7cZ- z$t7gkMIfMESR$|>$v`&5%ZpOkG+EmBVLE~4mqAc{)U&o#W2>s&+;7I3x?kV?n_oR` z){qg5eTbn0vA%8)i4f70kS@s#1yO@7d|~|GWnn`VBEjLt{wFg6NPCzR0b^BK8LEGc z1QA4HtY?ZUfZJ-2aK(9HY)BeJ`!mf-X=ys`ZW51e{7M3|8@$ezdWq|>rldT2C74#8 zB&kiplNj-{>h%lwPZ@s6oo_r_>KM8xNylVFIm5eS@2gijyqbbKtk2wy=`a0ui*>Vj z>YKKo@chy}yxmYyPEk&dBPD=JFWs!7VUytHXnfF=AMe83zP1U7zAB zzEkB-oTM^UG(QN|H=S+!eA`;POkh@+)>KFeT%>HuXNFE`}vK zwG$7|K;eaO4eKE`jVF5mumb1_I2yBp=mz8AOPsUn^sy*fb)etW!(~CRU4Tazw^Jq4 z@G*eHN;tySWD>{9mr`YUVpxDWMmOW0sWdd%9ef3EOuIA=LNT#)LW0`BS*3je5;%Ui}oy-Ip2``^Wg8^s({i;QHT zT5bq?oSJ!$WT(FfkSr4mT4a7vUYB;II@ES%WY}?i(Rhr4RlIz6Ljoi4vY3C5GWYbH z{7>bdyOAdgI!>x+7hU$`0_lnT`_nZLh}(fzB+Pp{?-~Ro@8P&`Z0`mIj;wp6&F`gm z9u}x&qkOzsG_`3R4N$BNL=8g?jY`W$>-oqXBU80~`yfv%ST1(UbR?yw_8z$1HM1{r z%TqbXDSnmXr~lXT)Ls5+L6UC1=kCAc&^kyt)YSdL>DFFtv-_1ljmnIx!QEFmf&voh(dsvho}{k!Ij*%QH&OB|{QspZ&Z*ktb9 zvhLa3_OO#zBErQA?E_}^y!iGoLxAGiBe!^6)BYYUpB+C7ykjN1UVhz9wu|%DG|ehb zWdZr~d{?*-$DW#osfp^fg4L;ZVY?M$o{T=&!;~w5?J$Z!L1!-QYbp_~~=YFT-6YX(X`l05i@)Iw)ay0*-I#Xv$?_C#EkE zWz>OXvGGiA;lRL;v?8^@Il?TRlqSxPbWex?FH%dJxF>>?0VA^zoepcck%n#h!ZKv3 zpp>AQ%OZD98>V+uets9_p?q;Paavmb9zDqM)s(Lb%&RobJhi-#n=cgteaU*G z9uyw@ay^$(lFLp58@G(ZE-kL=mgz=F{qshB)Z|cc;HNhaqac&>!BJ3d$_Q@0 zA;8M=pe`n>adz=q^8}>=#)BT~XXl5k-_6ds6fBqD>TmyJE7wc3X=xnytzX~HC=ZcM zhN=<;%C4vMwqJ}U)gE~n94i^PHle^>>=Q@mMYH*t=0`s2YLu|BD2?<#BiD68#?YbU zew(7OzIK-#BG@JOtFfAJPjYwa*E$6%n8A4ClpIeu*9BVq-@~QINpU;)!>^@G6NA~Ua z?bD>ivwFLm7GqhCYuA%xj{o6m>?k?gbJl*+Lb9yuh%x49zoy29+jpbS66)t*8qLg1 zW=oxvW66&7cRz@8w|>kXjfhaa@?fS-d#vTtI77lKzR*K>R#i^@dZEE`jXvG#1E;)d zgkR_9b$m6|SUTr&s_MI)s>O7DeWUpB>vt!0c{fP}P4dc>e`;7|aG$d5spY}k4#`KJ znm4J`74i2bS%h3EZz-!@er#_E&@$jyLi2qXIH2vzfA$dOE<5{1)uXTK=@!zu@Ekv{ z+1w58+*HQSV>7-NQlHekoS0xu?fvYswZfwHghxFaYssA?+v_W?l13FXKJD2qdO)>B zMZfa*xRYzEOhsYl+Ll|c1w5_q4}F!X-_L5y>hQJm?D6|{Ht#?AO;pVN1mCz9S1#0k zC27AHk~ZEW{7J84YwEj2J3cjx0^)*-R*`w6(b}!vfH5AgnI`WZ&qtOw_hh}ajo``QJM7qZ?{Bf z?}rLC*O%8sM3Lf$gc-6PCnLu$oPVgAxy#t_=>ycT>wDjk^?BkF&O3AI{?7gzt{oJ_ z1k|He7A(zZSRM9rMACgz!GLCt< zy3>Aur_OokyeA{w~yTc?u+##;!^@_s+ zzTvia-X2%DK6*Qq#2>ihV~42m5y5=p4UZ((49|yqZD8B|&}*NyZ-QU(_iww=RmXS9Z2=Q~I*sAC zY2gwy#os1#=RYYI9Ys42m!6+jZ5ol*MB@XsBRRD;FIceYzWUJjuCCj6erb>K@{6za zD>}BDmXH~$*0%KJ1KzN&8g4D`Y@7v@ZF1YTwtp4fY4gJONYqas-k2>#6%Sa&+xLwX zU!_x=i|?&vpL6Q2+}?Xqcx20=M{`bdW@M)X5!+FUUG4WX57pN_Ik%>ax=RL6k{usV z`xQdJyfFB{=ecJS+CY1?V(I3~OT>14KbvbfD*dQBJ^4>Y%M#Uf{=eH?yUtECSjwlu zV`t6J>F#Dd;rn?c=UVIj4*Tq**&oC>-gSp@eZKZ7OZ8s1ztH!#vx42&uO=7R5J-m|L*XA}$t;yU!iX6p7S( zHFNdb#{vnK3mUz>d3l@9-Di1o>U`bE6HgC2O#jxChu+tDE>?sXcjr#Cane;=qdVof z-pTPSQ+?@t*?sz;@)}Ck@&uDDS9jN$nqIQXyO4N@(ZCRMnx3&q-@$qt?!y4J5?hh$7If{jj8@pGUEsoCLbNyX<(kcO` z82{|iuUmKybSh`(+&s(m#_+56YrfSFFMkd5B=c8w1UFqclASKECzvJOBek?b;^WRt z)piLljWcN#l}|^e$zFTV{;?za0Rkb`+PM#>r2W0zK5YMDotdrrKGpJdL?#(D7~nE% zw#B3&ZilfZFW(D>Rwqwq(G&mK(!0I=%R2u2bebN`>waw=IVJJ%&6u+PC(FXAyixB% zQ)gFZpG(?x_D;g@q^oB*84ou+7uO-E zh1AuPCmkugzd9n4V((^qnE1r>Zq#0HC-3^XxUcoF7BdoYNa=GRCIDzCm`{F?DcbkfDMY+7o1MGUvG{QEA^QjxYyxyIMBn`_uJXQ(TeORQZrfbN?^Fuf+m(KX<&E9Q$QPQ!7q_z5f-9bDS5{?@ z`oG(1l#sx9dEK>s^l`w7+B=)Ks`QXdyQFw_rNtfy%bjK=(dsUEZoJ?8z~)_<#1WU{ zvR~rY*qmZKzEbZS86glm!^f*U9wv9hO!nxVY1y_PTT(TaWi&S53r(ty>c%*P;>hGD1iED`Q#IReW9Ioh)CV(y@;SH=!#U*WP4rw+%r6?h2gJ_s|aig|rdYr9c~64mwR^iBo=<z`^!8%jTUpDWEi+rRR^`oVBF82ktQxnWiD8Cd zX6B*phLzsX`iK=`BwB;T(0LFDl!JE%o{$tw)X-=I`(@Sj3SJZ6ZIv$?wu7hu(`)Zs zjMSGv$YohNWTYS(%+;Q#j~nkQVvlb;Gh~Qk?BI0~M4JR(fWMIbjj7SX(s!|=!o!Y# z%Te?JgjUfxg0mLoRLjAtnF*NG({H8fzX2HW2`u2^QMGpyi5t!I-l?@8dmo$gV3pIZGs zx%Y^q5s*Sgt-KzWm&!rFQD(EfX1v0KWZnQNZ~GBws0#h;b|pB*Gq<*Hd1eYRH7V5X z)3(18J_Ppq|FJqLJmVbBl24(zQ$)~;>lggZLfX?%J2YAJJSKtcwlI4Suhx*0G9e}< zs;FkjMeL1i*OAcS(*M3Ih(((D1H{y*bSG0lj$c|0tLk9I?~j9ml>Cl|giApHe+NyK z##OQi)2$wx-vs$7p~u(`7+Xi)?|)*&NjtkTp{+^(pBWx$$0<1_Zde@Nh_YWzyc-SS zyBYH`A~_`6gVHhcZu_37jcGsRot1yS9;>1Cq;CW%v;Y!kXcKy@e@QfP!%YZ;o(FZ3 z4F3_l6Rq1q9h6a+FP6!!B!wI1om?H6X?a;QE`Ug*urE z!b@S$jw716EUp$#$Y~FS{$yr-KWG;Nmdd0Q-MJi2wFuF%kK40X=b;Jc6r&3eaoGoI zQJ9Iqt6#^usXP|owva3Ud*wx-Vu zm2zDTK_x{L;50^(2&&5DBeC%Nmlls3&z*KOKN_hjrV^tup*qoj@;Zzx9@L$x<;DsY zPs|KJCvd9_H5`S2Mqy?RL>AVPSXO^{VFK=GluE(VaPw9iepcC&)3Zi+u6*9UgNH@wvmw5a;-4Wu3qa~en#3s$0p0S zexWvH-^BhnR({#gur&Gx*akTpM#vaRa-pKI z%d{gHgV8A=hQ`;~__Th-H)Ydwcn`wjgm5Hnfxl>kO^`1S9yJOF0tr#g~KpV*@y&tbwf* zLxQmdj@L1^F_tpa81AhNrDXKeYvw+#umhMsL_xM2@Xn~fM{A)qE2Jz`vX7XuoXh@T zb6PlmK6G9Z<3zR6vNB&3-dm)l2U`lFwfW zYB>O`5q#olGJg>kN;0;w6YY-0dUK(QoZtUi6az9s(>9{LdRI5;H%Q#gf5S=Z&T{;U zFCx)VcO*Snj8>IQc*N0(v-n0guD9)}F~WvhB0=VhLq*rt`PU{)n!y~c_`FD)>9y?M zH4gLQ4?%ohjH-P7`gOkR%x4lFbRzNXjRwB7Mctm9(+%9lZ;w_N)8b%h8blMgW z)UB1s(#=-!!X+|%(7btYbXP*W)Al^)73+ZF(_n%C@

      z~d41$vDFO56>`>E~1Q9 zepL~4HM#%cnT38GaRz1XA|tyG^~@izb<+pM+D`q=0ec)B71uKLw8%_gml5T%<-~cm zV|xt@fW|8ZmahnrlEGh;wCMQllu&V$GE^LTis?d(Ka8Fj{vv-HCl?C$olJw&eK^?R zEjI37+*hzb=EC5&4dB!74)XGKOP`K&`MK7~(B2x~w_HB=Yc)aqskmi>9Fv8BM(fnD z#8WwHzyN!+Cl@dX`5k)(*&QKE2<|dYNdnryNvoB%k7s?L@XXxuHBV z%7+)$Nk%V4B7ltxfZ5j)WQO=juPgxZ;Xi0UAq+X6gBQ>dimAeBOhsDE(nr8Tu>HqE zT!eP)4UkIt*sFK*?{p$4ND~;hZrY^}eC&owrJgwAt(PQt1X>>HqOd<=e6{!fy-U|| zKIZ)*R&=IpZo!-iKQ((80SmF+g&a@sud;OUsWGBrx%msNO-0BlC` z|CeaB!WP=lD1w=V`&B?6Jnk&vTFqtxn7~WFV>VFE|HWflk82a(!vHdEVYE9K_(xV~ zun?}^>PvsJ;tU^*EW&XNS*-8>t4V}DaC*ZW1o#EusqzX&*rxxPF$*z*RAckv;o!DP z*w7GH5_yYnhA}5I}pO0t{bG zTiOYj;Bd&=fBup)OvO0BG-*+#n2eFcTz!j&gZ;eMuGib>pxoG8R@B{I35@d#h<_j4 z4qSv01l-^v91#N&=r|)`1E2Tt>S>*oXwn1cOlD)CMJ*aClsOTGerk?|^jz;TS95Ju znl2rR>#wXhhmKh##pJTxN}>z=p3ivJ1|~;vTODFWL5Hbu!~_RX+JD0>bQ5z-mhkOD zK*ew{a6iU0n!9zJjHtN}{xu}chJvW|ix092_4@2>-fyI-Bk2BNcXUxd^7wteC?{qzzH`QI=lfOvFXQ#;XD5T{vT8@_1$9(K<=*=+H_CFi z;%sU;JCH3et|XYESm~v`yS_SkzBuYzynjjX5j%XTLzy>55F``PL@T6!FVqO%VNnFz zN?j#m`mb~-nE4?!=5dQ)4Q0b@IQ+E8*Zcg$Ws_jIS5pd;$^ziop{d5Enwq_@7+#QB zhX9%;5{!1K_IKetgD8W;Rec%wldvDfnZ5_Md?Io5ZLKo-?-54J8G&zw5XUyxh1+57 zw(+RSEZ&T5OV2#1ua}1f$M6>BZey6!U-l|Gm~xq%LM%N2a2>g z?KUJ8tEm10&l|dr8`Wo}Ui<}oGD;aQdd;|RGWdAvYp?7tr>Pm%Z`>IF(%fM1-`gVJ zzgiP`fifT$zzZzYrJ|asQhd7ALWN;hJ;^+_&grFkGOx>ew~E<9^jcjo=X>+-`>-{_ z2+KdM|J7(j(_D3z4qWb8@OC366L5FHYV;GBKaxn`ip8}=xb>2UkoOW3!7yKQ#Sdox zhBmD!b@s+`IrKB@pt>A0Xh8dUE8u?!_(WWX?epJ3jCza}#oO~Hq+x3c{kGKQne)uO z-|&J>H1^rDZze}Fq6rTzoMT!LE(GnAWUwPIjFCw!c%W{kDhF_`)%In8hXM>j2F^lV zuQ#?S%!a{hX>f5d zK@x}>W1Jwm_y<{o6D(*_N#|byW-rT4{0KV?L*H2jzw}`FSNl1?Gbr)>t6xj@{A)?{>3g2_U9f_;ugU~M9%(z* z*R*zec`WZ@)rWP!dW-~^81QLDrC7;&op^BR8l&-pc1uE7RahZ=*zZvK9#faL4joN)%B6dOP7+|h}kbHwG*yRQ+{acQ($^PfWk1#yCcInoInF*SOp$$E! zqis~*H#K}(oCI+s!1%y*tq*p&Oy}JptQ{)GS&(slH9J8>SJ{qg)O1HF8y&$?*?RWj#67U>(5wDr2m>F@(lxeGS@F) z+Xso{D;Ti#G1q?#^l3>Jkqb7NaG0vMgQxQ&U(ejB;kv#}nWtXg5A{~tyS$JOIf-03 zB!YcQUl!NDc4#T8fVQED)^H>82fUKL1kG$0y|?0Dm4gfyR`!+mK+5AY@DKNppr|}? z)z9JO+~72E>fbFtmB29h#xYaYFsbXUYs{fHD%ACl2y*-%vc3cy%I|yp&X}>UA(CZ2 zQi+N}wqk@9WvNIiOG=coRF<;6w23682r)_at<}!7sw7lW36t!EvJ3M+?+p6>p8u(5 zymR0C-ns9&=bm%!x#yf4>LM6EdGZxW#DD}W{@dY|2{z&?CcF2qKg>nh_`6_#7kFvU zHX;%{IlWifn2Nr^5!8S%m?gZtdw$rn2MX*6cs&INWTz?9brBPw29B)$`BcT-ZQX0F zrA>;R805Z&frGQH^DDTYg1&%T>e)-<*S>!i;74sPh0_kKE-i%BGt~+gi>j8u*{S4M zJ7~D;d#n4qyiU0boKG?;TpsYfTZ%Z5l~qY*n7aO+zw`zL1VMqw*Do02CU)XIVFBjz zHgm53px^G)p1T2mV}n<5<1GWwH-)kOG7f`ukIlzljty?W2*r-?xZt7`W*R%j?tQ&n6uUfKlUWY-7t)ynqh>4`C>JQ`p|<^ z7fYBM;f&H1a6YLDSRBm2-e6ECvIE#98`NXkbC25!qvH1QOyHR~XuUUq&p)C_ar(e2 zRtYDX*(6i=tCdGq)w&3lj1y1R^17T&UtDU=S0)c^2M?O4`@c*N`VI$6!c2Xr#5y>3 z`#P3EwUk#FCT=I+J1;snoMx^wu$kNfp8Cm{Gu5ZGZBK%)N$Y@Sq8-B3bEPOgrF$O&NR58I(Nl_QUUm9v0OG>7lrwf2dmxCVCt=6;2`a zx_AlTwP?ZnZf-@Gn&JE%`W-SPJu@PST-P~wQL-mD^cGLQNRa(P#L%g$KT!v# zbkH(+<%u~4y`S&*f1G$T%_t1|v|;P2ZEF~MmikVsjc2X)#sni_N6%t)Wgl`1L3l+& zgR44zay!6Ege8G#sWQfK3oMf~tEEdYfm;7w`$Z~&+G~zqwJ?e37`^tVjD$e#_6^MF zhPkkxwFH1u)v(LVL-^4WczB)vN{B09EW<^t2OPW(CvmQU!$2K+D@=dQSl8DxBO%}D zH1jRDBBASWX{J_`f!+eke*KlfdEzYl{q`Wxa?@v-4BoH2?Mvrriayka7r{yP#XR}! zt597|oC4^uCa&f4V3)zC?=lFc=xGa~h4cr;gr9{IokPOnl->y<%H?ByCC_lO#ymdf zw+p?UIK6%K>p&zPZTc`jliw&mql-n#cTqd9LEZy~oWLR>cKF`XUf=$3Uks|HklP?FSV~ zFa%(IIS+$t@k{LEUG90Z!Nyjzk;lKDgBux*{$q8he+`TafQ2e3m?!>CEswn^TDVYG=r@qK#yd$Td?f#Wrv+wB5PVX`<$_(UFK&p)`sYx4392{{bK!W|au zz(2vyn_Hl9Mcao8ohqBN_E!q7Jyg^_p+1%y_pSLc1k}Tp*`a#ZGc0*BXQIdhKFv1> zf{>PV6wcMG9bik=%^_f;(2`TNBEsUa=ciAfLH%`!mUub6kzYgO$;5X&^j9hS9vAZP zZRV6C5~c(YzUubjI0XqZ@b_SYgAw`Pnjj>NHHaT3hi(y2zb(%1XTey%iuH(t*ICF$ z6!Z^0S3nodeCoJ+&5oEeC%;F-xqLKaTJ?{(0`LP`F^F>@!GSsj~7vNAHdTi?<+-~z!v?SD?cO9t_SLw-xLuDW_{ zE#r&r4KX^>zMUWyBVqae^7h z!pp3sLiOgQd0~ZIW>M)d(8@8p&Qz7+U4nNTr7zDws7VceYZf%Yc6`%Rj5XO1|TnD-i6y%-u$wt`r&-Hc6^MgkH^tYw4 zjT=!llPY-eQs7wJ-b0|V;y~GpN2!5ks2!LMQwJtK;&gx*I_dBI#MM`Sw{6#yty8JW zU3>|H<@&)dr*rz?C`fLk#gxWR!u4RA#{PQ`%WTqy(>NQu2XDW=9zUdX<}zE^y+b4= zpSN~8gX?r7Du?`+YQ?;-@C$1HWL!~$6>y*&h}Z2zd%OFwysan}9xp9J63wjsQyn7z zu_cE2oYD#1{QZzka2_&852C&_YrN~wKER*=%O1~26G9Bf7kCK^25$i!E`kVx%e@uy zKr0mPFMcw@7Ps!dNjr~Mpz#4n4J50iYq`k$9R*|7m^0#P zj8)`OY+N@avvE1F8OQ|A{s!}r{_HX73s>!r=oW-o+I3s=g{th^jjbJe+7-zi z!A0=<#4dXx2Ctfb4+GaLS=L0w`-L7|;b#eQ)|dObtXUZPyjz+BJ^J9vD#Smq-Ounp zL@j*jPd{J)P#g z-7bwWd29&CRdT?y27;f6Fzzj0o?1&j{ELQvvHk)6Xk;(Vzo} zg~SeNIHp>cJ1BnUo+r7Yz~;oW6}oY20{1%AgN}jg6r6xC_I8nQCzAkiE=TamX%9_h zK1=@(<e8O>KiiPr0=m^g-X51L2C}?3JiDz7n;&0W6aZ^mO1xp%_i)Q~0tN zD8lm&qL6fXEdQ9>wuW;}WMs6-`;T1)K2+CAiefr$jio92-Bg9IE0WstOf3m)6B^i& zqbzUVOuC_nIF9;ggLocX49f~0^gS|<@F`a?;c)@zwRT?~r5V27ofKDPd%eMW%w)@d zPMc3gx(2jVepv@Ac-Co+kj?`H0vL(}?w5Zd0p=RxEDJMGr?Lf78g}tQ^Ik&mFe&zY!ymEqB1~C8RA&+%nm>2)GB}*kvOr1_ zzk_U|Yu5o4GFaOu{t6Ijyl083DOkjj)HQ7pPpu2L8~7v?oX*l4p%o;3m3L3A#_+oF z#i$hKdk3!t*tyx{grkYFb;182?-Wa?VoYV+R9%T!84DFZhvC(Li;RH?=$9GyvW*eO!&BTnu>%@M6bg4f&8~&RO$4ofO`?ZRB*bz}Q?P44ZI0qSu-Job zkclNG9+r-iAaJa-4oJJdtin}UJ3Lw=&TsSEOdnB})Mzm>g$O$atTELQc0r3N1Uuqj z1S0g909mhj2vPk^*hjI2P^=_y?d70vSU@|0#rNpigfxpo&MWA5Q8-79tXp zx^bi7VS7j;!O66fZ0odnt#P}wV*U7;JPJ=(-Tsz>-tZrpK#_3-`u_8&U>C>PCJAFU zY1LVbO2i}T;9cC{5(%s?;SFdtdd{q)*AEds3nSYQCZQIsV^TXzY92OT7YZnF*Y{@r z?jGKQB$opoW=jM^IVggv)=MBR3x7$N z&N4fsQrK_oNrg4t`l<*Qql9Ze5bOb&$*=)j__k8Uics@`_>4mKrP z=zbx1_g!w?p?eqI^HwEeD3DWn{b2%!WZBI3!UruSwr_Zp-5#l}65a-ON=2mlJtdWo z6_N^m3^+l{GFmtQqxL}3r|#jI7gq7jfWR%~%?JJGpz3XqgP6t^X2_=t3wp19F5b9D zi>N1o)k+aMW82VV|1A<|KCC^RRS;y(&x-*fnp6HUOl*fSn?7*_(KqALn}HFO;uVOs zIlV%7p&)*QC3>MP0rdnW5s`-<<$v?Q@36oZe9~w(h_uI|Q3g?|;JZ;fK1t+#meBn} z5+`DdYqyh~d#XeO55M1ZjV;<7aq& zzlo}>XPW8hl#e`ra*%F`#20^8*;uB2*v9fkBo$J(x&sqgMaWf_VIbQ54ph88n>7`2 zL^vq4uf+edfo*lc#!^-yk0{%>tXj|?L{&cE!m1(M&I4X9Tj$v;YkwytnL8x2WO(3r zp_LU0lI38DpC0^pP^n0xsO_7)w-C-*wiKtj^e9i*roHOipu0YISJKsQp^G-rGJmEd zUHG;G@|od{TabmHKAN=I?k%sVIC*v9C+31b;Bg~YN95rMCOFz|p}r)3e%VbILksLA zEnnFvYCbsHcQ~fB++R_?RqU~xNXgV20fv{TXe~c-#M9$SR<>A?S*QKVyC;B;NF#V~ zF?NE`vy##vq3`cPYTz}#i)R0awm((pL^Mv-ipB_Yy#l7nUOhi%t@HDfo-xhUu^TtF z3WYv4@m(Lapr^Ia^$#Ywpze~MFQOdC4Loux2`M2EMyY7VaP_78pQW_8a(bQ;UaVoG z3(~%bzmCEslRCoHP2moLD*Wlp-0;9E*zaM}23(F&xzSlp6e{BcZ0JvmDrk0+uY=wH1m74tG}uC;pTzi z^VZut1YzHUv}1=+$@G+N_6ooF>@qYq;?%qMrG6#CShLcBVadu%mnS$Vre z6P?{1mr|s+6DWk4`l<+HI&XsCPv*{IhR?uKg^a?wavt^jFpI!OO#`&fiTW3rI)Ky` zoNodJ(bZsLV?8YW98O~I^6*Lpq9f*ii`<_0M<#z$!AFzB>E&FuLTY5JdiNk1L6n+x|OadZJ~3I%e#8#aF3b$jSw5GgOuZ$Y%<-6E$!=JZ$# zOZ-S3Im5Q88gdM-`FiPs7V!TNIY0=4I1#k|@dsg~8b!uUtnW##ipWG2=DRv(RpjxQD-@i+0fEn9F62 z%FqHSW-Z#FhB{J=1^*RQ4p$WNRRyeqv{P=DMSqWe zIJ3^@@99*pB@@R~N>py^PH9OWll?9?vth(9a9zBN{>=FJ@1K?KqZKcv`=y+@?+KvX z6Kw|;AllQ~3r|i3e!MAF5o%?;=%(>X$Kd*vo3wOYww)!g*oSNO{kl6OoWMCzHj!IO z-K_iwdx&f9E-R`&ju$j zeI<9g4F8=D49W<~iEZT(9f@3#r!x6zty}G#tM-1yiOdY%mZFO3tDa# zz3Zvl!DR&|eWMQ!Vj?eeuE@E@@sMJp1aqxJSJ@~o%%mWbpvcH+N;j9s+1s~IJ{588 z|0d{ge5+VH8TiKjCU1?%Pf|f8+v94lxk+l+^n5Vf{7ECmlv`}qJ=bSii)(u?zItOF zRjjp-SZhmG*?CBtm~TZ_S<{RhmOqhNA<4DAJ=Zf>e*a&wZJM2Zz4gx5q~xy|U3Y%w zL*f^a`r3sZyu;)$+iIH5-=A_?;*iwL+M)N?FOP1Rpj=0%nsWJ<-g;$z=&nh}BaXPt zz07dV$KB-xE87xOGn@pvP&sxwPx%At@*klt@OYS#)WkEGmzjrY-%^+&`TjJzl`b)7TF%3@_ zj!JR_H;-R4zQ%=B@pJ|sL=I7F&PY1QSpLX0lYO&prgUXoZGwV(cIHFA@Js1G4GhSM zmIHwn^-l=m+D_hyl;bZ41%aJ?f9vRU)Kdms(4agwy|R!JC%ld;;m4z6mLn}ZX3<(| zaEc1^;pan7cdhF9V8bJEfw_!qy(c37zYo~^i1i9N-XxbxnstAj47Pm5+QY)eiY&E8 zTi)2LyOEsL@%B^u?SYso`;0zav$uMyt&gbn$?9iiUcTt}af+GbKQ-b=vbu5O;a>^O z+nwd*2MYNc#=LaR^>3+Ydq_Ng7bAVMD8^5c-~Tb=;iYY@CcirS$bWgg-(4T@@cBoM)aFDKDO}C>r*cXi~%ki-z5`pE2D$+h(eaIZiE3ZU|bH6?mmkLcukK zD@MdVH`1e9I{72Dr)_3vWp1vJ7jw9kbo*}fbm#e=_JuxAkC0StH+}c>J)ar#UmU?S zZU1D#ORJ!Z1`mnUrcUErh9sJvaw8gR0hW@=B zs}|8xDiTtE(QUxZ38MaO(YGT!r_!^#HoP)7-nKXS5SGasLao=j=78;LAJ}+h;nbv` zWACW_8HGKsD~i%&_m9M!-de7|qUda`@Tgnvero?x<2?#bDIF(sX5NL?D0QR^k~rEs z@67b<`Q0*k|K=w01u>4y0>k^hJ6;4`<)MfqK7P%Re8L0oVPx~=9!H}rU$c{uc;tQQx@ZRIrQKvYubm`ThE$__t}vvA~-wx5rK zP>(?yr*QR{`I(#JU-~Zd4iXaUpYI@klcet*tp1w!&T-YoXVq4gR_8aqUtyGJt=O-0 zd-2cD$^L_T!!D%Q*=6o_>uhN0%{*=|%e6Tqte*7c#qa%@zgM`6j_qH5Dy=kV?1qzY z#S`Irejd++NuIFM)`GgNqGSQ>;ok{LyC<(t)3$P8ZEM#5X^l&a7batmwd}+W1Vl9~ zyLW^hTgiBTc0}1&mE*(11wYeu<-VTarQ0NG8kbL-UG5_tDgP$p<=S~XnA2jC>saZ~ z;nh=U!o|&DK$y;qkj%Nki(yU*}QYR6x)S?{`H?JVlzmU|l>j%o#%I_14cOD!18F4|w;8N4rM^5&K7t7MVaFCe^h)sEfa1(jnl za${1BuQ&JT7p$9(FYZ+<-18Cr{uH9@)ED*XqK;15N^Je<=~d4w3ZzuFaa{fUYFko+ zvxlJI0{*jZdo$PF`Lr^h`_to`C*PWV&bJ@pY(CpDmL8eppWBYPwilUA*qQx3wIFtH z`->-QFYmd7gtuPt?&`WGM$HXTer7!;iKPy``rNO1nRebt{H5F)#gx89jk>qbjMyZ3 zJeJbRf4l}VH-;r6`a+@iJgP2d$G#)4ilUE4-~G2)5Czts-GqIJB^(khf1`gu#B_`A z)yxozhnbVng1Zj=$$@0C#`wJlPmZ_geUDmQTh6EHRu*9MpxsL*Z$U|u%MJNWfq}nQ zF531%)QoAK4NCEMgDqcbH+r4xR5rXt;;32~uz2I0=Wg!a=$7;ea>H3i$6JU|aB-hi z%C8#%46k>~@4wyPXF|D`-Py_W{2o6_Q2x>WVXV?~8&5uMTIbQRa1qJ4otg4g(;qSf zA|AGH@Vh@MIryz(m6&zAtK|4Au9z@KjoReaC+0FzXm@~n5aV{nrRs)fQ^(w2TSODot`AT!3fY@NOGkI+6y0rb%d6TVHzCNtX-%vKA?@9Kp(++EF7q;5u4S$a;S)si= zy~0P?OhTeY{sJdbwaV^CKVa`+^rL38Gi-VpvKVhQ^O|&Mj{MvV^2r; zqGn8!<0%5y&oy|y6N)PMa69&e#DTv*UmJQX5V~zSZeR)5XOV13!L}W8=bS!M4TYW- ziFy5yR=Bhz(P=>G_7+qzVe@3ox-DIwv+d81ad50^-%<1PGdKN#=E(p}ow0+v<@XRe z6aU;;BqLikk>d<0hNg8jkD#}Me#7d-;;V)0nq(|)0U{382M=yime0MT9-5?TDexzlks}n^i*51eEZu+A`Z1D*SG1G>O9$x^b?ihJ^Q!*cAVYuW zVgL1;yMy!8k&&%^vAZmURLY7hE+P+;M z&k9-Vy@?(1`12;i&8p%8?Q_L|aZ-0xPJ;8VB)J~XwM(957yk*c*BPteD|)*+YZG@y zU*M`~*PP1lO;kbbz~&8JK@(M-T5&wrUWEFEH!_U)Dj{AgkTVee|q@ zWuDARC-(`xLXN0KdpW}*oy!wb)~cg-CrFh^mWtj5g#w4sVgF$H$v~TyJw(-mMX_BI zHtDb8tLa-3-J4f<=`{`Q>ArP`NYj>%k2g0ip`e-f@nIw5 z(#I=BqR-g;xbv$q!$?N^$V_h3@zUN!h_K4j(v3$T_AB$JvN9yeUd#ieO-n&`6*Jb)wMw?kHZLDJ+pWKL z*mHQlqhe=Ft7=fom|xjj<98#4KBb+13UkI(D~sKy?kF{Hm0Rq+L%(L!Wu^Ap-I;eU z9y<^}Vf%5<`=Vce_Ki==7c}XeIq*x*?VL-u=@r5$c~kO-!=hq}SVdXc^i;l3fR$Wc z&(Hd<$)kUYuay1W(_rlt;BV=ZU1sm@o>vg@nmN`Ibg^PIpnm$@W!>bE>JJ1z+gn1~ zt4@8j>do@(FT6Ru*PpqH^TUPpeu3FhA3GQ3e*ZF7^dMrl-pu&7i3Ea?V}>c8vdyK& zbvHZ_`iYPXLw`}};>$THkJgrT$H!d1ew|lz8UJ(BT|s~2D%aH7w!L@OzVzWuXVa0i zGj4&YySgiV#ddLLYQP0Xq3wu)4mX-R@fblc5gzpkvz{sL|F=|1z6Dt)WF#$)@; zNKA>f=uAP=i|Nf4*j4j^Vb#`wnQ2qeuY2w-D&|1%hTcszI3a$9l{ZMvcj7nj?Ke@> z8>Gqa(mGRR2C2M$EmK{0}S7)Vh%E;&-Pn`MS-#n z){+5Z({=WzK210m+2z%!GzWdII&x;b>&U=_TXY=nzC~`$*=0!3GR6K z)tt;rpAsE29@yn_1q#OV#z<|1R04oPBDUS7==4{!eG+w)$Cn5`Kk3Zv$TqPBSrq0T56^|{s=;= zx$7@0-_3-xfIs}myCKl9ccr*HM+k*=52Zwh=}+g7vAolot3E$$KU%J9_vE_MJ^2yU z+$UMT4wp2lEDTRGPnwx@eVv}Ew8JwzBjHo{VDqr4ZCkV6rUZX8!RWIHcK4Nl6I_=hY+nnVVuRv2=NTjHHFJjx$|H z1#(vdmQ@%Tu-ED9N8itKSpl=b44A=S&wvoYiT`E6-8vwNmCoIB-@yQ9=!CErssA>m zgg%oeU0>fXjmKWR%w)IQt~n-tofmECm)K3uFRM^Dg9`?wuaw zubBEX@pGs63QzSc@<UN9T>f zs(WA3e?MTq8SMbHMT0HylRK-!tdGyBM_EY4zhHSw;Cd^Yrdf9fm%*4e53FTc z`v6S{slXg^UxXV2S%8TyLfC&Icjbxe#G2g5^64R=>6(p|Au$H5bv)%#T$tlAO6!;N4qJ%l26H#8sv(+?s_iaxoW|BJSqw0Tumu3Ph9) zEg4xg@F(b-cITO`iS1E!8826!dk~y~{cSQ7=f9?R{kT;P+eY_*kK&{nSRga%KTamU ziz@M%YL6*oY8Q)nogMfp|N1f5$~Ga73FCbpP*peuw$p)jZNc}D2*=aUVfPJQX;6Z% zd^^-x%5B7#_ZCmmp_9yE5qirfF;8*Z+b$Q+l$*gTIbd%CymUNF|Ng?5V2-6nF~Wh+ zJXB)&kT45vg}#6=X!sw7qc5JC?>V;X2QQ-h-v1B7)I|sJyHnX~(V-(OHwjkdBoGX2 zuy>?rZH#VMc>^}W0g~^_4-Z7J&#=b7JG2`|ekBNxR6ouyT{zz?w$aOG1wzmB{KV(V zLWxVK)MME8ar{B7xX{jO?k1>b8~U#=5=O^30GUtpzhi{nfRg7I?e&88AC7*oX(+E{ z@=GER4|tn&`s~A>58-78j7UHLYlQ`FByBJO_Ov1R^3x%0h~C0RR2EL{gE<^Y!b9Jb z=$5dLK{ropcsD)z*JHA#ky-CE)c>;*yd}o7*9BGX+8Xs#!(8Vr1Kds^U(D1|;34}7 zN+>oC|1~z;j#ZfNF=Yaxwz2=jq4q4ueO(3{{k8uJsCA2;vF>@OB}3%Fnz@Q_CI=v= zY+>pZ?zo}D$Cq$ta%akGabL3bIevGEBDaZZh1F2Od}Zu)&t^L{5;7DS_Ba??b_XXq z927(LmaJfY2I+5I={$Sb0?^MI47!N5bm84NjMp2?Ve!-Q0+}g)-Y0~KPFka8z=f$3 z9Z4qPyFR%{nP>b0X%5a}Uqav+{JdP;sT0^FJE4HE70h|2E1aSXQi;ZlCtnAC=T8DE zwLYi=yEu%rn3BgbI$slf8KW(`PdEDr`uagL9OFVjcGzk<9ApKf`h*N>0RWwKmNLq} zO`As(y{CwKRsvwwo@C_k2sX3l;H3rYmWLip+%+0=rRbOsQ20(uf^kp%%QRrCNSH0zrzNXS(AeRdt(dte%Jzc1`&VOqU~T}ILNdD6N5cm?P5B> z^)BXKrs)ld-I6GM=Gd}_#Tu*~RlF@~S((2km@E1Q10Y784K#wJSqZ*9&IYQeTn2tc z$3HOhtq8bpVnMZje~7;1U+2?)H|+!8{ER&Daz!_%++&ATAdJELjKvN92m8WPhhPr! z4VL3nZLP8B><||olNjXiG=>ME3*a6qLNzC{GK|y_E!vs}`0p2bURv&3{PP6IF6fvg zqd*=Q#7X*;1SkZ$4A?&3Gf%uIY&jXmWft~k0!{fxNX>nRv;4gI(N*8v`2tjEbeZ+V zA?OMTeOY&M{*G_#+@;C_VPlJxO|O1Vli+A3q=<_FOn(2z$JKGQ1ayPrV2r!Lzu&ZN z?yuQ_s1rgpe!c&?mHzXOtScFH1@7gYlan-&BNQ<#Mjn0!BRDKZK*!#vdDb~hdASYz zQSKWU-=+OCTDsav%`G4R;-(HD)t1*dW1U4MoeP=7a{hr!Z$59|OfN$@J1dh$_ZcZX%k)t6KAQ#H)z@SY z$PX*vN=MjJoID-yUDP>x{Tkqmb&Ww$3t~xOvS+=?K#geE&nWa`6zCx@hN-%)w@e*+<;w0R{QdI1H(QL zjI8Xcem+{g-O6J22gGQ{9JSZM;Zyd~c{xh#!ohYI-!G*=ShE0$PI8ms8g_f~Rq@6E z!*&JLO}QaLUxqu=o3>U=dG+0py2lWh*?Tk8ZQC+d@X8bXY0?T71BRqZ6r4rkOc~Qd zj9b!prUaFIhn?`<9Y53TGxv5N!3CR69oBB*-u6X9&1XRB?0+2ie)j3$$Za6LZZihp zw-w0{Ex^(`sYwMu<8Cn7K+Llto#)c*75wq$TMEME$Q+5l{NY)|zRLtYFqk_sUv+RN z3|O^Nh`g_sduIcPc|-%kR8#~UDuprfQW`~K=2!sdPkQLcNcEfPbPvJIWtef;z7 z7?u3|vflzxvYRVz;)Ou6_DigOCnG-yT?>EYTn5P#wfV*p|ne zr|*MtfIp$aFyCik@OvPrbbS94|JV_#j;P5EfVWu)<(qXwHF6{(hvM}4=}IdG$9^@( z^e~qa+qOUfc6B)L40}CXuJ5-6d~Cei9z8CA9QU(;nO(ba8_|wltk@UjoH|#EwkWQ9 zUc-;D{)d9+XXlPT=ehzWtJ9#A;*5#P!ezx$IGvfp?xM`z{t&@u{v&~3x;67!n1uVn$&cX9Y+ z0&2n9-uVLbT0a^*FUKPPl~|BjghjtcfV0Y9G3IX!KPDrJ*u6`9O3~F(UQ5Hkku0q6 zYJ^MSk5t)D0^-Kew?D5j=(zcpQ&&xrY-|}mZgV-vF^oO7&`9#ZU2S!UzJPohZk;gKvnInW6jEV5r&Z%1^e3NrZ3M@J&Y6}rXv#nnlGT2CKDLMD=R#u-8=ru zK2Uqw{NBZ#9|Ydlp1Zddf`MQFo-?lIfTt%tpJUiAE8gn6=P~+3?7#D#02j+AQ`$7@My-66T;bQ?F}Hh)R5x@EP0NF z!d`gdp7~cn7VE*KhyLe3_M73KpZ0#_1|be!l(RtdRd8Tk3OjFw_xdMs=yzvd7x`W~ zoXj2ehUu6NPTok23_P4npo-j}zQUuu61FN2oGrAe1y7Wgakfb?rbfXL!z@?yma&6&mx&s8c)$J4X5mPVxh zkUI`0N$@@^XIB4zk_y%de1i~y4+q`#xj=_usa1Gs<@iVFqa1Du!1EBml%VZ6U|sL2 zH*NQL-=y`|H`81UJ;dL)=^I+8&S|&9oDqcUV7(;gBREHA%)U6S1jrq<329Xx{4Waz z*NL8HU$GP|cxoz%geac>!w|$W>ew}S;6=GtXt2M)C+LLOx>U$eYg_*U9Gb|&2D-l> z_`TJ#jp=(*gvH76x>xUfy?KKJJGVZ5ReQ+X7$91+U2{B0!zO$4AG3v1-VvW(03K%{ zvyhvGZJ^C^Sd7!xA-l9DhQBVAdr!?p=kaQlB&Oxzgpf@q)i+PRJqj*<2arVz?hy5V ziF0)pVkIO(0Yv%)2QHj=YzEzdj4W``-*w5M7(5qw^_x~QPuKtbDUoz3Dg0Dl)(wu1 z1$2Ft{==ohX8*13>T;9tF9ocX^AGNa{*=nVp$m^WX6cX)zqw^r0Kvc+{3Bjfv4te` zvSahyD?uKnS-c$T0puNzo3EO`fD4vHS*H8N)>l8C+{dS+l%CFbDw2`@u|awhQq2D1 zS|I9aU=06uuo`=znbzsUiKULxFR zk!=BV(hAP%hRt_J@qHfa$#DqUqjA{9$oOv{+2?oEl)0H#OzkaZW;{|{+C))WdgrDB zOYq}L)ObxU@Bhkv40pC-!dXP9JWCJP1n@xCw;@|$AnnLtDgf5n4a$|_Db(}v<9eY2 zr;3*I0nAt(u45{|5`uA!3J2ec780WpCe+|4cAS8eK_fx*xA(z-g7KDEK=o(Q6I?SIcN$rcsvA?7Fi%KgB)}9% zUy&=1&5{*35moD9qL{Wk{tU%?YM;cB4ki4W1#OS~++Y?x>zHw7{XUGMdqLao+aTk z@)$_OxYf9msv6EuzvKDvf+Bci*I&mKRtxckQ%68$VyRTSy;N;MccI=KJ@xKcWsJUV zxr>kY=#Oq@66S->bUzBVDQKyA!2No|LVxg^#pE!3cykM0Py~Wk%;Fn<(>B=x|7jM` z!~qi&?QL`4!Sij266gVsX6Gi9yLg>o-+d^-^M8~qdL;;gr5u*xGEP(KTaEAxwKx9g z4KssMiNe9xOFwn~oAs1l=2VF#+49F3+4!Rt^FJp1E4Q~to`OD1_ZhONlZGgW!LdHu z2=HicLc}c^mYeX-e&N)Mky)ot=7=5d{d;QaPrRIjn%UO76Q`X=3Q4F|6@u*Ev6w22 z6$pSJ;7-_-4%s;9_f3GdDny>1Enk5zq^?)9jDr0<#JV3=v2Nh{D_Q4k9e(FTUDNpV z#O4}(x1T~Z#ArQJW+y~ab=k5fSBFu+4f1H&xF|5yNe(4&u*F|s3ivUA{o-`iU;Lw1 zX9WQ<435o_8}L9iZhrJ~;2)J>zFOh<`{Y}LM;W-Q&I0`|ES{2c-in_Spu$H$ zl&AhD%Enl;oR@-H%-UXd=7E`>1=}ECAK|lUuz^J5(DRWwvz{cU`lsr)Y+`qez1eie z7s#x@*nD7BRt$t40MhdGzx{s_YY-19Yf%FI$fy1g|Ct8_Tx7wSH}LYI_@U<*uc{Rn zcmwOVdm7X%OPKmu=-Zq4qKY0s0C!Zxm0Q$NG)kJnQ;X^a2Z8S7_tcI9v!Fn)uyAL* zoAmB|o93yInk@)*{=k_@b8xj$bO}=J!&%cTaI=Gc&`D*m5$%39Pvcj?lO1ys7qd9B ztkPW#iovfp^v25GzlQjHWy64&JYg$;R2@e&KtYdV*v zM^futAU*89fPn|UH7EpZp>a0Yg1&*>P2AkD6>cs}xbs~S>XG@P14jZTC)<7eE%$huNLQO48&}U2M72O8_#1hR9s;Ei>SsP&xB`TsjsAn47_b zKCh*Nu!o##5{U9;4#l9GQrhNlcGZ5a7^Lck17x)2*k}AT+0c9z4$Xw!rI%3Y$6O&S zC$hn2UPo9Xa-_%D{}C@m-qG>!vSr{V)zjafo5}k&Tp)W;3Ttf>EpCC$bz<|}sZe5#Eac(&)m`*x9W*!FV)|&o#L+w=uj=hbow9gc zssUDC^!Y|jijvUmZ^BG?Y0P3RNY+~dOb3AEQD1I7+Hj4G4{i$2W@e-(N1r}xZhZpe0Y#iT}MEp00T+fn{jq2MvNRPt_Lo&aU1| zC`)`p)NMKFHm(=2kHOJQpyMk;r0$alNxn^?GnRvR{)%QnPy!!7bF+Z?q|PE13M`J{ ziI^LX&fP@VgslXk=YM050AB2CaT)(JSPx5`cwkYpPz);`8iPAbHIi9zo%PbZ$l@!* z@V*)>ZD!%JYx55jI{ru3|M}i|^imbeGCJ=O(U%|7`Lm3MIek}$h{fTA4U?K4v>E^P zFPyR$n>_sabcCmSPk;Xr(=f)g%#=6Y{O|#@u_W_>BjhPMjA{#>;J-x@XR8aWTvIri z+QLF-FweBs!D<7`_`Qu~DsYg%O$C-1%UgKxBXendvzOdNneOPrJ*h2s?Z?3A_|(^8 zzsS;uA&ZaP{S%Lzpd)(0u&6`sLLQJSIT}b9o0wp!VYMdl^VV)`^-mba3W*fFGi>Or z5JuG2uk)mdYVFstUpLhRJn@Ar=PIJoAz(45Z8nLEM16VJQ^gRJmru_MJ96lu-gHBJ z$gx^dX4u!*!1ASVs$wXX84`*qQ4nt^caK_BH-i$qWN~KLtDnO*5sv9f6xL)XDpHnd zd;RtLnTe(E&hs(ZL820bEyRQm9T+Yfx%6>2l|8m`kRSzMMu`V>T|H-+Z}uUC{r)3k zqr+A1LHo0{oM1QX$_gOJT(&g}U*F6o5E@3zTX;_OnG9$^ZhmKxQL~4&lF$?ecDn{N zGM7+6YGl)}jG%d8StW1ewx*Jwt5_LiiE=TZd-Dl9!8BSyBVr^+yeoN-WMdAndU0Gt zumS7jgZ(Yj9jw=56?q68hZur>k+~X(=G4ZzRym2Vv}ZUQW&yT&ZXq(bTl0#s;rU10 zjTJoUC{$j_ER@(063^$x8!CVKWBW@o#?-cfc!G5gBGzi`z(=>i=Z3Vpx4#yJnlFd8P$mt~*rf}>W38yK9Ob+x{12$z_BuD|c3_^3~S z2%?_(Iigu^Eu0DXx?$UcIOIJGri+ z9^J{ z95ZaNJoPa0Fw7wh)<`!ZS?4B)zhb09=7_)VMf0Ha8O7aE*ES7ReCzE!u7c-VrM29L z!FQOR$mBJEWN$}ckE~ZkkQG%#9v^@q&Fb+(wbu!(jqv-7Dk#|zLdAoyfxo3M(Lp!5 zJDI(mrz(VEvi{DL{J0TFw8VsZZ9mrQA{wL?`;$@{R~&XH40h0Vm1Hdl z6^?IMVY1jmT!fVn#fl^bjc;7b9OU;Spuq&`(N`Hp8D_VZxu@* zz`@6`cJ;T8S>vmRJ00Xh!sH5g3po}olVbr3+~eKfN6VW#PW#HOA4@x%XDY|x&V|7t z1f1DL9Z5Tu4C({b`bROW0THR7FepBr!vaEk7gFZGP@1)XmZp~CW5R}nO-o>Jp>xUH zcSQYdewkID;R>rJ+L!qoXd3)Zw(OQi76n-u1;CP!q>~q-NSbG`4FRl*ulsfVR*6w9 zHk5u&J8_gP-{A&!K?fZ8pl{Eozh=T15<@~l`YBicc&>WQ0qfGc__HuKKrCFtH6A@{ znNmHnk40S7*#ngXrj=C5b3O_(FB*xMv=IV~_OTQ%)TRiU^epVjIZU0soKCQZ1f=ymbGMKMKTD@a??nkzYQ{Y7 z9ZH}nC`n0N#Y}`tj1uewC;#fLEm_a}C*Y`AlXYU8l=S9>`gsr3=O3n)ZLr0+4xjy) zxC+ZWL`$boIs5x>JFW>Ag=xtK+NA;u{0ghXpDSI?gKx`Adc<)wkH6OnEerJ8|Fq%^G>Qp;BS!F9DL7k>kQem{C zrnb`V4;iaN}ti#4flz5A@88* zy(us1vaguB2LkqhbcZ7TnQg#l3?v-OrGq$?1sF27I)m~vWpP`hzSC28z|m^@Y&IW@ z;FY!vwSmroZOs?AZELVL(q;^iaXr>@A^JU_tyu`{2umYD221eb!g!HZC?JP^{|^f< zW)Zyq(E2T4`J9xaZT&cpLaP1g#h@wl{nHevLE6GN?hilUM-t%aGYizscA%DJ(&QDD z*A;WX;ll(<908qED?jRJG*<^*UB?uAOypLIoZN8pDT^-gTh!MX``+t<#!C3f=-i9{ zG=X5?&-vk=MyG6;Q{=3mRvYu&jufdkR$K>#($b05o^B@n?;f5T1aAm&mOsPvgaC5BQyXV6OCBv2iZD zGuIS)eW?5vKQATo#8-);WB&&6oLf+ynIaPQ9=HzE7Yvakv6bZ5Q%@R}1C339&WJ3_ zyZ?2OYP3vQb8-XTDidBXUx4M-0HG7W6#;NNg9-dC4&h`jVjg80gLUB~(;Vy#KH$@E zis{cx(5D*cEtgr>Od^N{-R`~|lQ**?Rq?>D23_UG&ZYFR2t3-`vS6N-;DPg#;78F# z7)t^lF>GcGxa#1V19GTVleLXLw3#lh193P4I)3x#Y^>*|7>Wk(> z;j5yC#qWe$UNN=57J97d)8!fpaZPxAONp>A$mlMt1bTgvKr~#{CUu~iKp^H2a5}A= zt|QJe1X#IQCxOG{EYPl?s(rK9g$i9_>T@?7F4cCR{3ikj<_eI@8VwfBGcqGW2sC+9 z_K?EuEz8wrE4}cMiWzX2IC$;8#tE?<+k20SUbv){s+3Lx2`5jXD8feEq=!wwwH0es z^%?@hwBiR$8p*5EX*9?+6cR$@<_h%n)8VI#w^Ro9msI0`76QP-c&{E;moF zeNkh(PYds&1sxHi=g9JhVC(Gv(mU(`L(UxVu$teatfehqjPnl_N1T69qjCHSIY@CJ z3(7WTL|5$KRsSy^BpP>nFB*geA(b$75a?Z-Zny&X27}Fs8oqf1V8>}Y=f60RV3}gk z|8L!a;v$v6ZRxB0d=(Tbf*-g*Cw$ObfGAaM^EZaUZ_Gjz2_GpjuGU}j zMNvZcCDq{;4TVTdy&GfxYl;@2`6vhUkG6HU{+b~eX%KN_Iccrz1t0}=AS z&=VuJgGz6Y){}ReZGkoCUA*csj`C$P-uu@FD;@Lq(Qg-@9Q)4awxIYxfN4a16fC#6 zkz_NZl?E{2W#@hIo#8-~u6R5}ydA8|F?%7BP@*f#H1;;c5DL_uCX3Le&StY?0BPd`2 z_IWXIhFPG!hV`Ye%iLQ+>CucMB(&+#zhwg5RZNvto3vK}kUr0g(U=&=tKJ{4a0p^}2@Xf^O*3;v z5VhcxS>y=ME4gbVB<40O6uQgB`%9{=lY`305aZqZ z2=p1cN|qs*weh@R>PFLGK4vRqpY4GoXl3<@BIp5drh1#fr9fyz$fKh{1lfaONhU4& z0i_OEHFD zjM>x{jVHk1(y>UD=a8#~;3*i|i9oQ08F4{>Kp_U{jI$#K5Tqx1EPa1`8D0#~8}v_K zqZynY_(&gl(k;oxFWjaU^|R%p>DSGYsHaMj^$>nTDh2v}^Y?#&H(le37?iN|Lju!B zfMMoU7|)5AhS;6E=nH<6gUvEsJuC_&u#kYnGM%HRh5 zn{GX3#=^pQ%NXiHkAI@~pqnH5Uswz1AiY%S^1cw6*yadkjI-Z(*{}0DTbo=e796VT zhph@>`WeHhsT1X3(rR*ttp${QhMv{<_Ey)r|$d-Mb|9fXt-{<##pE7sOJ#+85 z?|t|4p7%g-oAZy^0hK@gL;}e!Ky=ErzzOSVl$Ofc#N3qf6kCE9xfC1P3&5Ycf?o;C@xt< zGcJG_2A*b=PGO10Xcs2ovl*b5eLp_(nje zKWNhKN2GVQ2k|UMQuqN?dekj$k$c|#FbG|YiCc8+Fdtn{bLi%)K5 zTbeZ9eJ<@x5i>J4BYluNV`-hWK{!QeBQr6*q^W&Q4iBMANJ`cpp3E@}NL(20GJMHR zvNA?+ZC)r~LU`WS?=GeTs)yonqHMZitcV^dYBk`a7(z|QwAQ0kZrCR1!=0m(_lq~w z{vI3l+o8L!fRgqu<%`FDMA=E)Mu(ZLWGskKXCUg02BQhsZ7p2dj)Vh>FH1ON@4*c< z)9h}Lo$BCZkOlGVFPYHrZ|@3I=5oE9{Yr-)e7A3SAsjK>Ws_Vh&nqFuOi%w(E0k!X zEYadrt#e63wg3jjk5?*@mKd*lp9Y4xE2rhC%6aYE1YovG!EL*O9^?zTYJ)r$!d%gF z<+riE$n5%Z6IDLqNV9C-5gd%tI0fXA}WnzgJuel z12UoeP~4{FxE4e5^=ePllJl{5g`F>Y}SgB(kNe=Uo2r@@x*bUp%rq)=~0aTXJ17qe8$3c;TC8*rJ;(fMT)%B759or+ZPdQanf1mE^4}AA&Tlz(TPx>;hxIwX z^WP`dhMN-@Fn&a5UPe#P9hFPQ0}Z(>%YcH1YzahUT0>X|Hv*s+@ewCc$x{N6VWCe1 zh_fF~pr8LhT0BTliaf0g2efhrDkG)@TWr;8I>Epbf4ZS#)hld{jT~g)HP+#psXPg> z0xTG7IR>_v#-(L*FaQuyg8GY98+x~>VgzZ)$~>oA-OSQN>f0nTV|sd#&1Yf5EZ;u% z;pmz|Q|L|5B{BTsmmb(4(}K{mED76=2XU+N4t{3s7TX8fgc~iN7RfutAZ4rN{&j4u z@R#*56Nl1M*M%)VMJUe}tg%H|uwm$mzs!p$-rBppI_ba$!x5{g54>&qKQX^N5&Gl;v#114kpRHRi-f1~G*F{N62zqYhCL6m=Zs6qnY{QxD z(Y2>@_I;ciEF>6$M%W02J7U&FtZS+5JP?1?@z%Y!%6t)h%&HQcL8a{1sE>~>kYaLr z*Jf0ZXA0TTVQ%$I@rbq9$&mW-@ zG@MI4Ul6*2{Oe=xH|VdS{U!$&unC4(dag5FaO(7z1ax{>LyDjU@F6I{M&09VGQUU&zDGz(;N z>A+C}?Bp_X*`T4E@LXMpz-cE&)_8Is|4Gr}~WTReO zw7%coQE;+|TQZwk@PV z?`DmN(>DyVy2Q?0;XZhFLHrouq2(Jr-4q57`3v%U+vh)TKj+&bY+z``h-|xNMnPsT zUW13B7a6v0)MyWmh}(ZcE&DVIlEzGSvn0gJdRAa`tI;g8 zP7qVB&WX{`)zf70D#Q2eBEx?5>e68;in@vP&FkHh-mUk3v*rZxy6+dJ-HH`sr@Ljl z6{5@>9yx5Yc~;t|bnmhFoA-K}lEQ1vhIG5`zaprQTbItnF}%{n5U1F=E>GKVOTud*IjI6J&+9%yam$>xqH?RO)4T5L{;3-o1GE5u zhZy$5XT#@v$HjK-I(70C6p7@Zu+1(l!^d{{&E^hgDGy-}3dnF6$n4ryeTbx^&7`~` z-!|MW8bH=REa{HVtzl>J6DyX~eiOL^-z6&C}vIhTc2am}ja(v9g{ zC__5K)@|y?T{!kS9vISgKIDH**GtDFR0kqiCZ2R}6|O1>pP}#E9lv&d6?VmIbKuTR zoy=Wiw)2pTKnSP%euQ@uQXdX}*1v5Fx&6W*8a4H7ouoYHv<)xZb!@m*T0}-hHwkB%o);hYH6KJ+y;JKq?>Z#aBW!~3CAtlrEpFuf(6SegXphKqN z{W0I^_l|pQ_+GT5YqP`h*WbO3&Cic6jA$*bkKGx{C$2E-c46+}Gt!fzUfu)eUXKp+ z+eBv=WO7P2WQ%w&_%AO;c1`!nUd}SwlG2vkUSrnWp6Mr=(RML+)d|Z-x%VH`mF888 zmb$&p40D%g-B|nh=lJBJQRjr`)-8m?#Yz4%1^I9MTb=tpIU+Z&ua{@@gRH0W1?c+9 z`aJZSGXl+1f4UW#e0*`tyQH#uxv%gIEZ@tua^tGYNo*Wov8e9$$ds*IZkc9avc7vi zJ+l2Vdz6%L(H#}e1qZRrnmkna>-AKj`n1YhNxh;o%SquUZk<3)R`)f|GIIZj$qh@t ziB9%}^9x(u9J6A6J>B@~t@Kt25ret|xmfwRD6eQ&2L0$|wGHiK2Ru+*vt8U3-dHPo zxuP|lDQh-clB=zEF{bKYVcQwr>vcEahIcu&hNn`hY9CT*Nt?wq-!0LyD@*~{DW)ZaUtE~dnt`fb*p>b)oIgxNPhT&qMkcRkU5TIJ@L3KW&M={+%|`l z0$-!eo=v_|!N!FfuXc_iiBgp%yDMr?N^bD>z{2i3Gcs5CGG`{`$R9^!Ywi+Wrr2Ky z%=d=E_RV$&uX?92)OYqDlz*)KjIV*$fi6MjZZFyK0P~*XtXV>GnmHOr3qoBTm)Sqq z#5(tBrO#K1u~{>|s=mg{aq#md&Np`RGP*HX$6Yo_pE(nmy8<`Qpj3lHK8rjuohgS8 zZr|0ifp4^*R57$A;2mAUm#3cbS9*>Z6uQ!d?(1pZ&~RO4XjeJ=K<%(oh1M2!j@#Fg zf2{Vt75&8NL;`oGrl@=A={|KSI>q;1s)H>fiZ$$yII}$VTJ;q;kdo!2h8#z20<=T> zv%?ZX*3f(1*9@slHAr9@8n_?#k>&GvYtF*mg|?+%V!fTwGutH|dTs404o7kmS#0h| zexg-)@OsT~@m#T&g|ZFm?0c{e`?Q8dr@S}1=*^qN$hTJsMtn?Ha!e%+Pw=Yl8@TUS z$39!s5+X6g#vao5V%YqnM`^ z=IMs&*(tYE{-w8v^1a>ozJ8dU8(kxR;Bj{L&Ih6PsoVK@l67ai%S7o(hOP?}DVr5? zS+9FV?s<7cG$J@@Xw2uV2a1s_sGWmiC%YWbX}2?JVJ{N33ZyV!@A~C?b?xf}|i^|A%C0z8@e#$7g!?|xNB3R2r zE+uzcbQ**Ih!Ck?VSd+2@pN_qQI&LzX>knS~n& zmQyxnZ3@DQexqTPC%Ffq+#xp1{UCm$XZC$t4#^SDgN5zAY3*8I{l4n2O+hBcpw8ARj-dIjpeBk`; z(M^okjvS4yZI1mlg;+>CoXmyE}vfoNJuRRMwcgrmZ{7J0UX^zx_+QOmFq- z4OoO|D1nhwAoKJ=OcJ_EiT2Hn*BA{Nv@`9IU6}1H-JN6cU(#sBvz*Iy_9=@(*N+eM zwdN(y-2bk5S+21Ckww-4vGR$}`**o_WhH;HPb+)x;rLC&PpYo^NCDA|Z&)bKQg8Mk5V0 zZtrMh{NB_4GtH&!+y!XHRVHkeo+;`O^yD=yfcX)}BYt&D~MI zdF7c>RL;{9bao9Tz0z4))h5lnrt{5+zWTQyC4#BZ8-GnU2cbQU>XEN2SHHAQ>f^Y- z{dQ;Z`;QxChu?hREW16MHA7)RI(-jsy~u1>yWQ)-D~unL+`rM|j<4wWj!jxBQTnkv zV$(d9qGjXQd!jcE^P8CxW#*Q!S0K4~90fDU}em zIg}*=3tzw@$oDPgsW^slS_CX>S#8zP-kF8FS9=?c3wRKIxBWJ{py zvJg7pl-73oq@9sUP{7x=4Ls(v%`rc9aRfb#LO{ri~?WeEBi?~mZp zTobp^HG0@jD!jaInxW~fS+nVm8xwP~&F{rsO|>5+xBqv*y~E4+$5OR6gS0}RSM<-r zLo%m*8R_VMBB9TC?)_KNTZp#I+cd~N@k^~a@S)NJYFH~O`poy3qgvEmlm?~Csl{Ro z!Ot9Cu3@BYU6>Fk10Lc~))V7KIwa?vim%SVN-@%II!^<9i=}$xO+cR6i`zOV*O~TL zGA)I%?jm72mqxoK?1;0|i<|3VuU~K?O^8~*ua@-7ZYYVuAiHZEXcQ`J& z6gy|A^})WH(YJ#2!OvNXDhbwtw<0tDj1@RgEh_V~nPj;Le&t651g~PHE>I@mgfgv)^ zoQ^Lt!&7*C%r~pS6a$G8!a#`yH{6+;t;A<51hWiCX2EzV>gL<`cR#kwRdt2$v|WH- zaE!sE`=UOK%?k>9AZoH9De=*+Ke$7f;Ep~R@*ntV<_PI1d6YljA>w#ihBoh&5eB90 z?ZI1H0nZbV?<5^!tak=CKEBV*zaBx#a@M6ZuKA9liA zGPXP~>s7L(w_G(@S2pS=#wJeaQb9+I8{?#J9=UTxJmPCYE04v1E~G!Yk2>>G zFN%rthg@X+dwu*Mamx~O6vnw+SzD4%Ja=^HdC}H@~{CX3H~d<_M2N^Hw}G?C~UxqBt$*0!Arsc zXc86$ykgk|(ajYg)ky^Zdo0QLcp(BSiD|h~biROPcFjqf-nfVDUZhk+IUC47O91;I~PehqgjHP{vmH4d2g7capafejrj!y&s8az@(YtL2xl{R5^|6@agt z5u|Qbn&D(y$O!w$Pma~44T;~Kn%Ft+-}R=qw3m1uWLK%5V!^3rLu3s5UPX`TS zu?#!#$Se(ltL&%;^(xbx2z!0}-xMo(2ZXu-NVN(K$TqT@+717cy@P-huYIXCghqj%neYdL->$rP-1@X`Ikp|wVPx7&Hz(TVQfvn6q4RPx4-e?3F(zK zgxp^=yfLL`aBK7VLd{-)6SM5R7qnK$jTf=tl$Ij8SjaMqHK!~q^sig!(E3c$7v9s+ zeR9t&OUSVh0-f=f&hYi#iGZ_gbl3<)MzV@wne(jy7vE$nSJ z!Mum_`ZR%ux8Jn#^EW`~X>9zim2R^f+xj2VR29PaQv;Q#1`4Fs*NS10y+_4f z>z(~%&8_15*R$^>G;DJVo5y#nLt{(gkPY}pe^9GqU{G5JEgl6zmhdLR>To5)3^pjRvFTCf@kBiPjzGD+yRE@i|^`HP)Z`8s=c(sQ2 z(zL}`q)B>wEg>v_ha6k%GH#pL-YMG#%Ww#jXZDv4iJvW6oGoVA8Sh^2<`GL6XwR=PW9-9I_cONi{B^8CO0kzHC{>oKfiSsWjg} z$v;fUEF;=)VGjEvJdbeCSh*9`xcL>`^+@8+tzk3zWBn_%25s2jeAcc2h6K9h{91o& zh9btQ$N|-?Uy-YK3g57$t7^#g`S6RHFhbpenYI?_uT;Zdd&x#coH6As6t&@z2leqC zm@|ZMOGO%Wbidl6C%=KyinAV@F+p7a#sT1j; zwuGN(IbYPLgWl(AUe+9C3v9xfHLZW3Y!7j7;|a^=M3_#8e8vG-$Z1O5M;J%mmgUvJ zesbg#86XuKI%ig73-}|u;KY`&F<^ihXU$#jL^RqiwvU<);=0393PEB=%Z++GaB8mSr3~x25{=I_qenvmYgNd8*f--?r zfV3ERoeJ$}1$kkGv9LOr^!s>QB=tN$#tGK&XBQ%8_jGfyY}U`IB`zsO$MV#MW8%q? z$}?x_Xv?W@jqA3k1LlVEj1o z0-Qe!{CMd5KlQ0N&qeE#)t(01|NKuvZHg{<81lys@>JZ-$}C>T3S|_c=pL*c6?W`L z+|BZwbALBDndpI5+%B8PHc3_TC0;6i1*i zc$=>opp+t&3b2|wDsFN=9;SZ(>pZMSBtOVw{sRRmBg3^Oz z5_`8~J)}01q>pr(Q_@#{sb$de6LFU;NAdOixfVFiY=uuDZ*jv?;0jSuen#1^yo!}x zsYNP$;2Ytf-xi_G$3|kZE~xeUN?$}CeqP$)Q!(a0ccSjbS}@Q!hIB0^^+C@;=G*@W zGDuP92D6Y_5{Wd4S3pTsqZzW)VyI97Wg8DHnlZ|g{-#n}yukd#)=A^z2RauR2Ndd| zN6YZz>?9`F6(o?e)`6u0NMb!g8y59%cNmcLm&SE}n=sWR9_p7fvh?uo{w?`Ph=#;~ z+BSmDVAZph>j;)J2c*kLN@6mSh?VSgu{escaWNK2yp_Inc_xGUE{uevoR!;V%~AcO z{ChHcXfh72&0Y1tcNUD3dUeVIwc-T4(N(oxssBV?!sf1xeE$@Zc9efVp9NSQ%aNjA zIvJixETzqyElRYp_L1JSM|jU(*KM1+tRPd99o?vEaicl*2dPqyx_J3BU;qoL3g!ei zwcF~yZoF{ZG7(5Fju~H)NlZ8@kf{(}$^TrlV}97&YkHaAh}hj+ae;O2t)(vU*`xKd zM}Xu&^$v&wE#neNLRu4ag1`#W)FW!HtQ^9Jpd{M{M(o75f2zUO9c(=uPC|ww0s;F6 zd^SL|=g#%?H0gKWraP@oc_9a)qSoGMw$=8aFZc;UFD6DAAl(Y_a;rD~zFV@}cfzOb zdL%NnExnxe%tMEERe0SWPCG8XmX<*WZoL@MB~b5tF=kP%#9(ykUqk|Z>B;fH&*AzZ zvbI=(xJ-T@eN|y%-F#ou>8sLb*AFt>Lkp*2C80E zYXr|r)82 z&^v5-<hIr0)WxU)B zc^@kj#+`a`k#oNhawy3ck)(B$J8*7lrB12@{)$LUosps*zRaJs=Z`KNS5G(JGHZNu z?H9dz2fyV9OBZep13$7Ok7j3hJbZ!XChA()_p^pZQlLji@#RAOC-<`9EZRX+q#-!w zOs?Xl2jOR8t)D`?)!b;)gPlHF%Rj4>Y%deiAA7$PVy1sftStJm7KsU?^Id}at0xJ6X$$MW9Qw~2K;#)yaUv$^`;WvFgIR5<&!=k0gUBWWe>e=0ff1SxuK8+e zdaU14td$uSt)(8%8e3k)#OxvKLq42Bw14kB0C@;VnEqR*+9{Q zaEJ_S;js}iLk!_aj;!`g>dH$K5;gLz8>7LKzKqQYp)C(r0-oRSwsfWS|;QERx{q5{?7>ve!yxKgEwvReB zK(jRMlypkrQF;*3iJIm8k*{f#j>v&)`B6aNf=AL(Do<0pZg%#Ymx5h+c~xk)fJIix z3*vuofKtKn(MOx6Nf7Pe zfF)DwKtr`0a982|WA;ScylYWtgD;AvVAynj#iJq;Xr9v8bui|0-thOnC3o>Un>r+g zBx4VxaFB(tC%u8|XPuEE=ro^v+Z9PA;e8p7K+sSjVUFhL*d9wG7SWozx2}SlfJxa8 zI{4T83V%VvcU>4%CQE>~TkY%R_XbvGeB4`eLf4NkQQU1Bf;f=GDY@42{Z?jXd?X$E z(C12SrG{Q}^Hoox>Qy;3Hm#YKPN*H4Xr``i$FEPK=dqltc?|gXF8vZpph?M$$+@Z? zYpS`0_d%p@x9}4>Gy|-nvd)4kffDHAB1MZj=zk^PcFb(5-`olN^(5T)|1cb!2l%@| zAWytbrb8rdsMkV^w4dY!%Y$0QaapJaXK``<#VufsWFYYT6ZG*&NdlUDwVh%mJN0CL z$X$in7f-fADL10K5+k4E(|{iukC~TYJ8r<{8N6%&STgWp#_t^aM+@UCqFsKHACdN{ zt$c%SK?m=^UxXxtpAr%MBM?6;fD77-#^!CNMw`?+`u6aWpuo_zD%OQ07jT z&U35@kgoncT6fyotF%wyQe)Nd4HPt(Jrt0?A_ZX-tQQ!6D4@i@N)G1{dqUhW4} zjg^*rfJ&r-1tai_DC!KXEp-8&9jWTSgZ}UIRH`TAWQG$n!63yy9d; zg2_O(QNFVWSy0{uuz<80)57an#4(yk!AwK~vyjG@l#jKMN1q0UZR#!ooN#vA8=%<( zKx;|lJlebo(u=2#Y)B{Y)P1?O#h3sAtS}F43X%j3ZtlNq;YZU3(l&v4)8P zCXH(=jdUTS-ZV~ts;6|IM=sTds1Rh0E)QxXh5VWt4qWA$eJ{1)ws-te=^XH?1_a^= zV3~ly2W~9574$Y!puPUgbF6D1T4hP3+y%U{mAd{DLnV{wS%*BX9WdN%i$5Ccz>{U?z@2Vw&4%B(>N zQIlCNSA&?PLmylEX!!=OP@@VM8S!`H@L`LhID65;uME#fOV2O2#W&+qJRd*ZxcB6h zM*n|@A;iRt9=bfmkw=S~P@N52;-N)+jg!O|+~1guWhezAGKz#r3srH&Vu&rGB#M}L z?b6`R<$3p0VZ|4Ia`|+jXV_{zvP_S~M46D5^kzaggyaeouB>QP%#Vt?xXatAbobXm z!=Gh#t2sR+(1YLi2gWvvQoEB*fCf1Ir@t`9xx30SMaj zK#mas!l>3vyAwYtB}JVvgxJ#mZ@l2+?LVnYHC0fY-$iKu`iL?2*Uz7%3I`i*^UWSr{{-0z#FK5ZD}S0LAcdht=#T>jvW{rz2S2D$a zJJFS(XwbI!0#n>#QQNm&X_f^Q0Je&XL8X#elhO5ngFi>8Xvt1QiUBvXv33?l7eu<9{AXBecCGLWfU@?b{_K9%Eg4bC#ZaX-BG- zkIDEU1Gkj2VHC|K0sAZrj`Tml5>a5e-eCx8q7ld3RE%;vi_?$Jko_5Iu z30So#Q;UVTT7_yy5kN=MVBlqg z*i*)}gV@n@K8oS)AD@)@8Y7u6s+=10Yggmq&o?E&Dg z(QW91Lt_BU+bq0Tk=KOA+8mc_ivhVC_a;poS?WBy{llj{iRZ>de@MMQLnSvHQTXCFi1kB6g;qkk311`> zvXAPS5!uqg5ccH5rJB7W1PYk3D3S(^1@rTj3_fLk26;j4(# z(5yT4?Mg@h->m=^_=HM-*l6WBcny31w8K2>DmEI9T6tiS1~$3+1CuaGll_c2n0v}) zAuaCDbzp+uEr)W+FadGjytgM%9PW&;D`}JtCqpECzw<&CZmzGu%~(nar!)#RD1@b{ zI87nX-ja3?Tt?zRHQ5sAI?ZbhFA>-z#+ydo*iSbvfgWvm+Hg$F?#vm86eb*pJ$szh zR&3sX(Gm+RL?3Jsvpf9Y)svyJlL~Mw2k22N7Cc(ADj{R-$EgRSmkKEX&$+hWJ*!DL z!$e9l+GNTazDr7RRmmB%^BgD)#y-FWVcDx7#?eXt4t!Wx&mrEwB-CxB`@enz={GkW z%GIyM`_bUJ2aQoB7ILAaN#dVoC_1nKX3H})_BBbo$err?@7-G-k#glA%h-&TX3HeY z&C-cZW}U}6Wli{uK`Th@bS=LA%DlYur<+==LCVzx{jebc9y zx-wH;Bl0Sikb`HA@$eEzP}YF_Fec{n1@0B3yWzD*in{23*)BTH+q~O5wO=z||AuYy z-P7*l-yNpl;cg(TR{=r+|DzzdeVWa2!^9bA&n)Q}ghbDMfQQ1eU~`jom@*@7moU~x zm6(+z&d8n%^UeDxcKGrY@RY%VW4?f5ZSu=18POR)VF4FV+#g>EPTQK^qf#9eD-MrY zsh>XQm4Y7Qnh=;s*3p)F@N*VI#$o?w3WrUbP*L46?*0|;LMEcb{qkLNu-phjb5bv- zmu-DFBi-Naom&#{^Hiw+oYD-WKjAh)V@gse!OmVE{4EFSFhVEQ&&X0cLYOnoyw=Kv zsG0C9&A(&WZ1<8z4dcG3G!@m|#cx-E^rudwLX1uZxbqLy;i2?WAPvv-8a_Nmmu(9o z12u&Mhgvj~Ct=o!kjhfC{qd!td#BzW-rMABD-UR74U0fy;G=@c3#G3zKHvk00Idh; z(GggSe^MdH+?V=^oqrD(`l7Sa3?GYh_o!baszHM0?BMu&rcw?F{Q!u1Sp&zZoIhM; z#6ZxsXpMZdpD2pL*a~-1*X7w>>P+@9mqL2}u^-L=Bd$QbX=hEjDMFt%W$vOj5f~J` z%}&vD75KJzn;TkIsZ|KX2)DCF4z+xrS}K;zInV&p4#jPnHqTfPl%V*L{%2qJMj(29 z$}T92yHSAvVK`Gje92KqW?1l>1EQ(B6*qM?7#blYOfM~7Dsy=v$-X^FHhNxcsBIo5 zq_R1}HXn{ZKF=O5ytbUfn?ODaBj6yN^|q+jtH*eluzB{sT9RC4nWh+IKVntDe zVxgxfH#JGSb@tetK1ne((ylV8DL?6>#b?;%>puB$wD0?xN2@E`ZV&rszU9$1(xyeO zbWL^pJ1%%^OcnAzYly9L64!akE^TaJt@dA>Iy3Tk*FT6}US*Z}RO07)i#i51)VW9W z%Ls8Kp~rc#|J}Oz;)Cl5M%5h-UGyDip98xBmrvAz-+?7Sp#_?Ao5-RHanbic&*T}s z8xHiy?0A{K9tcgm+(H7EZ6Vk}$o+_nV|99D=lY$sH5=1c)gxQD-x+jX^tcDvCJc>< z!YdpGWo$&{-$j}!vn}@TTR<0-@Zb%+j`kEuB&hZE-M{Q3 zyd^}cp&n58^nyuU9k3iCZ-Nz=BGIkX)sduU8hINH%?BZBE7yK-O#nQ=3Rt#GkMu)n zh4RlW)D~uRZN?EK85Q8kz*N~Qs%k*E#68vQDwHKSf2r$C=!NP#KVExjb%Aro!GPiv z@Y)I7K&4ScNC&9%CqjLE*vY__;0IiRnd#=@Gel4y8+T`^Q5Bfdb_45%kb2@9h_QZR11;3_E(UG@h92Z!qmG#?B<{=y92#|k85 zrT|U-1?;J}EKjB$?^Uy=x+0z=iL?raj`7{emmIndj1A`k0CyspAi$iNXXvZ z8)&2k-`UH0o$&S*n4c9_m7@i)&h2OiJq)jM`(=72WO*E3BMnG+j@m`}sPfW=BgJ;E z{CrI!n^IERl%*4)enesdd-(kv(~Qmb_I>-7ACA5XxY7H4=4ZDy51%QoF~OL`3m@9G z6@wM$WjyYtk}_<+GAe3X-khT2Yp&PIya1>1yZ9v1b^Z`hHz!;Qo%{ZNi}+&a!F4=3 z`a-o^emQXc^VInMgqdkuIE|G8pY-cI0UoZ(?$!bx>s9~_1EufNfl<)Buy~E5Ms*0M z)^qhCT|PxAU^WInel!b0Nl}W#Kns47Td9v3ckL#QLMo6ae$WmQDbEG5NPg;!Gp*%t z6^)Zg$u|Mh`m{#;uO_@c3D)3*haDvgQ*b4cHg0q9Ad-bg{B!3wOFxMT7L`&HdUSLBlMYIx$Du7eMrL=` z^-V?dnVRt-`fJ(VVaJQ^&DFI8tg?Nc?s+-=beg*vWWLkGa2U*tNIK8h=6@NH5(vCw zaC!0Tdj8k3lBZN7IesZn}51T>43Xj9?B;z`E45qYQFGfE-6=P+9if-QS8yf7h>mQ$wP(n3y%OJQSlbe2{I zT4gI?7ofn+%$(3XP0+`P2oF&`s88N_5!UYF6&^UaVO-q3gZRtG*aGn|IZD8#;Q6uP z68L}{1j*+}}a;(dfJI2e+$H#}2)DL#q*nc~+uKi(mm5$10 zd1AyPUN(IuKBx_0jC6E?Nlcqe)td{g3?AHKouzv!&YiK-(nThiO08s#!&m3`Y(R(a z8uTl+#BuJC#=N*hk@a>FKRF_2XoE22Qg6>pUYi6Kc=FG; ziz}jsP=W1;{E|)FX2KeMIa&S4~qij3j8R=wrsqLV*;t zo%$cY7qr?jU2W~$V|CH}5Vt4sjO~!df)6;B%7-=K~T<=XIU@EB7oW0+Q zj0TQe>Q}MO4G%S{{_66ouRh}Fxi#eZAyz1Yn7RwpNvJVACEZx-!D}}>mznVjFzmSY z-3$}gRHQAfW=j_Uq^-`rfsC-WOOPIg78Wh%D3pas%1ertwWs%G@z|whadENj%vate zbk#{JM$JS=M>h`SRw%OfW;kIRQ34S=b%c`{^?XkfIoW3YyNeoYCtU@vwguP8BsxTP zkg(fIEeeCFN<`#5Yahk6OE>oUPH3;~+wDiqr~wch4cPQ1L5ymIk5STukmgTFSzUoy z3nBytU^#odjc@ZyM$)aIherg{J5KDpbjb|j+iUftr3KN^l6a0GWf7Fb`+|Gd%$(A& znK9C)=i%YGcajBrSJdyn>RqQ!vOclf^<%NIaj5j_Q;GCTcD~qFeF}P(xzX1C*J?FH z^b`0nZI&9@u!&M(*ts~mk+exUD*nkMKFA1jh~}kWd7+ z6OLANz~~a5n)_L#=n47zslzSIido}7-aBw1QYq;gWNx83eBVrjx!kCCK2XyxI z^4CLXm)%c4H^vMPf>HD%mCb6Xh2d+#DSMKXze0zv>K%;-rdIZ>$~Xdhpb`*EHQAV#{R#b?~K#HTwo*0(~PdkTt0-8_BI7 zaTd567=Ej=w#~ZGUhjdV;ax4wrOEH(m6}KE%2ZG|!#l6>rkI14?0``+KZ%GG9l>L~ zo%4ySB*(G5UXY4sj4nRszaXl%;t*m#yZ*8Te#|NIIqzw#M~)xmzb5$FjVTg2Zfw8( zeME+r_XSAwZMNzm1f+7>o4=fT70_M%x}r}|sLs22%8`#Zew@CL{$PvYef|_D548`R zDYc)<%U2t!4@COyGizSO!5(CL_`|!*_Q+Eol?q?KPM010Sl_KkEzOHQ zf$R(oEDH0wF`ve-EgxIU!is$@Ll<`5*!eU9`~0%0x|a?13Mq?`@elfCbcdVoe~%V& ztKuQadg>HLC&`o%rZ*2T#Wc&`Up8IZIe)R^m*ryIU00oep-j(T)$e)PdkU_ESNW=5 zL9f1)yqc*kK36xz(=X7{FEH&@ym=^Z=4^5N3Eiv{7OuO>E}s#!-M4M?k29^;Z+1J| zJ{*7fIrwTuM~CO(K=rc%2`Q0PWl@+80;+i{;5B=|GxHCWb1pk-0l=D=0W!U7xOR#QE|gR zl2^=>!bV}HAPNhGKw+Y&DahKMJxKwtnRnqgg?-|@rP{Y-yRPRp#quFmAx(K6KYqz< zR+8iP6h7MJtsTY)38+Rc!`AHeJW|$AUJgG0?mnF2dOu$*=ekg6Nv%d9rz!fDT@g|E z!yBcfq}4Jj9%4eveGkk68rSU8S+E?dJ%7V??H6_qGd`v&kGuU0d#~u$a42Tzk2=hx zxg7f9R+aM0Pt-4O_Q|`^bH8H!ZDqQY-X|1zxedtkw(>J=m6k1`<2B!97CfBeLar@p8kAXK|mMUChn++ONn2 z?dp>@urpaZ?Y5{f(!v(c`Ks&s;ABL4yw;?~65|{bQ?M$bMXq$9^S8T6XY&5kdkeqz z&U5i-%KKJqWoipeKC0T>oS&4{q;<-L{!Y$7(e3Udb4IdU&F|1M1GVHljd(*4oS%5FX6D45r6MB8eoil#WwVJ~4DI{PUONyh9) zUi;4~rta3@Dl;%f+kZ>Gr;lE=O^acCj!&2Gr5W`aFD6F0%LOK*XUp$K ze|vz+hBtP7dCuJBV;~{u6K(pTp`x^bK~8n`!Ph4=7mw_(I2MDdor<2Vc6IZ6%!Br; zZ8H7JweukB-a8(xYr^+A+HjJWEWL(|YeV9gTz*C+&Oe_UPnD9r!ZRIW-O1Zr6h@bI z?xAaSW~h>9T8^P;Uh@S(l9l&W6$XELT%K~ zr6r?pa^O|(yxE0L4vXW8=7j`XEwQzMu}2L20^FfA!|I!aZ5w!Ux}$Z{j@&v|^Q3Yc z+Cr-MCUKr03YENJRM?rJ&UCuOT-mxR+2%x%PwhEt>+n(!i?5YKP46)R-_pkG{ezb3 zhi=B$o?6;1fs$WjvEI1SJzOXLwd9Vs3umnK9i114+Tyx;7F61^VoxK+=UuVhN}Cd! z_c3Ctu3RtPdU%+t?P7MH`}jo8yn9+5<}CB+m}%Jc05Y0*)KnVxdQ_`0^D9=HKcu*j z;h{vpw$4c0S5`OKC!w0r(LJHIMP}9ADr+#z^Qq4ldwtfDW46EK zjv3qda(TqgJ=`qkP%$Om>4wbHBAu8eL?u&=*|=XvhWnJ6(BTDJu0z3=gKytN`#h~6 z$tl??SejMjiCVC(4lw>KW9<4i&@$~+wDYlHSqaE9257D8J9}Ol`7Y&mJ(^iu@xA3M64sDP$I4D3;JT$a_ ztd+OA;hCV`lkcgwxea}=hRCF~=0+WM?{!Z5e zQl}prtYP_BUZXu^_cGp=<>cp{jW_mvGZK_&j8hiSKS^)0obGJV%AzM4cgOY8@e$XH z9xu+@Jjl6q{jxEKDNkYc4znalf?T6Xk}y_263-&+1RXT5lz=qYdi_e{L(?;TE*Du2 z<~kT(eqe`8lXz9FPs!YT!ab37KQ9g||k9#Lk+9Z&< zXvmm(WK(K}S;obUveu&qdQW`6!HZlwg)%U0o7J~NhbqlAc;94Q^OUGf{${Sy5Rv?W zT}PA-3U*tz)+KTV`Fn*Y6mLsf>A&>V)sTgor_&}GjU$b+b2G<3b~q-s+`TZX?q`@Y zJ}vn&e_G~F;r5<8O{drlx<0#GdrOM%wj0vvaUjBjswZGv5#PB8p_;o=}ar10MTts$gA*54Wy4RqUv>bfMDX^g9a?BmhpUYFOHYCVAFha&95sRZIBM=)2s2{!?#tZ zTR!p@dylAKi(i=JZsY-f@1c*+?#2BRm1M; z1{<`8@5lT2{*0{l=Zax(LSu_wg*&YfebP0jVC7a5rO0$SF=}#}^7UuL5=M81dFxNN zlg{Fjr*dLSJtiI$=RQ_EB7D)@LI0`lxYS}FBc+4y3eO|df$J^#Efjvf=F&bhx+zuh ztd+Zv-`eKbFPQCY?@TpSN%{=Szh^icE{601{eL7{%8@_v7c>G z%=F(Gb)YYSmv`)SvL}jcd?Y0DP^-AV@%*>p-y-Kr-r)PVC5WGYn5js@V_TSFjv!mx z3>re+AQHp%21ffyk;uA&X{xnY8QC9wP<0i#b5d_VMx*dL4NVR<-8)g^PqPc{*tuV& z&PcBmaiSMVa&!2WFYx}C(V@n|sBwIYj$S3j9h!~#P?hU>5cc8i{YlK0mKGOWn-(_w z#&z0ugPLz-K_-fOXz&wDQoI6Nb6TBtc6tkhbOT1s?%-TeWKikwVqtlcclz(I_t*9w z%h_%@kUes&uvww&-mj|7E=F+=Uqyfr3-y>>M`yG&G+5`E|qdJK&9>*d7>S2JOqDsN_`S+w*9^aERgdr*NuyP-5bW z-}0wQ=k99>9RUqbYiZDqfLKT9t1?*rAUY3W4ivZ$L}y5oL@zWVj2Vsi1yAnAcqQ|f z1t$w_Qz*H~wbo4HwIT!r6GRLRk~N5w=HUgfRuH|JC6)pq5W!uipGmyKVx&ca`Xqon z@CAl!OT0>3$2cna0Jj$#Xg-}xQhMf{q|rG4PVef$CZ zI(5&8BRrtSsyeB2LU^-)8og|6M z1d#IV5K+j}oCuSui|}usoAEme8mTx?U;2&nB2-sZRnb})OC+`PQwnBZXq@RMzJig? zDjeGYa}bC2?>&Ad#1*co#e$+A=JV|01c5fm#7ksRj02wujg><(d6Uh9D!u!sWY%oe ztpU*@dV;IALEI)Ta5Jv|AgGL5lW;BQAww?qrOT*mXZI*CnM!K)4HlJf zx4)zz05U2b7jZ~evxI|eOA0G(i%Qd=?)6SwVI+BkwkJ^Mk&_R1>R*qQ13 zVb3VUGpuwl8Y*4f(2~?y2ZIH;UVN0v*Ps1dS#hT5L5CG(h&Pe=C$aA9^BJl94p7t_D?| z?`;_VhrsZUs5UeP=qn^Iqm&Aw*)i*38#fz`N{!jVQ_;Bs>Ihh^dND|_6H#&TCl1Yo zKJox~4<>-lhlj$23h3(*_btM}&+HSfU1aF}IDAl(UB^J%P$$wMEbPF(=glXYzk0N( zN*YUpZ|75?6Yr`bKr{m2{xnwolGNf3M(*0rtP~p7Kf5G8miQ!+Z;9{JW?jx7Z|{tm z23{`?RF}J=^{fVRna$G%EgDO_^Jo0ld@m{VO=*$I`%3w^HS$yst}Ad578qRLW6KdC8l&FaLp*9+4MK&C>q&u0M&TdYdRYZi%3E=s2}RxV?(*A3c%dU&*|7GK z*X5p|fQEmEygB^UGJpIMq2aCH_*hri{PdC)`7@Hn%}PVD9pmdo42T=d^TJ#RFSgK{ zMDQ{YJ?lSS2L1+hWc#St1XFBclF7{gmd2uyDdvI+rZ|(Ug9$TaMQtS$=}(QBRSfVj zHD%sBnxOQ!E2_Df8u>^TB7QlgWHtFxIqxAr0CK0If4pL$5^D4yTcd*pp%OiD$Gw4dEpr5Q6d$byt96d)-y~7 zSh=9uT;`K78ru;R-T2~-sIb;-cUwrC{pd*@|A(QNR2cIw{a-DJ>cVw^=o$t2Xtsv)A&kImv8 zX{&vlRiGZ?wB%f}G;y(8;v#;=5}|QxEpJx{PkNYlm~n_4+*cR)XSl=ED8C@)lBdu1 zl0VbFNl6+5l}Wv0wm(l%WOru8v^8NXQ}KwS;lG+5R)sD-CrV2PLwZShN)YPZJ%>+_|B~F_5%$Xh`^2}jY!rr z2s;Yd(>KE+OF%SYVal&=re9vlI0_Bddo?}mahsjM5$l*45B z5mbBOZ!dT1_d$sx88e4`uW$WS{VF%K#rXvnvaVGoDvQn$D}?~UXrM*2g9N%VeT6v1 zB$)*ET2y^*?v3o!D<7u|!z*L<#awUj9sOh9yuBUpGfeodLY{xC#g73H?4kCGdBTM# z6k|j5JK|!M&1K?@nP2C`FH#NI5v|^u9JD*XQTaDJq(Ji3tNWum0PPwNF`}(v@z>~2 zehWa9Bn64AvU;Ez1IHDUL@d+8GdaL=7?MFuf z-`u50f2uy~;W+WlfgKsl69(2S!eAa>o&oJt4&-P=7+ql$EmFeFTv=gc!{2Nxq5ycs*P$g=)1-@FUwf2WUZ~9E{OlKgk zTvBXc%_pv{Wojj#o zNxu20{k#lfSfGC^1%0LtGRCrHSwj!?a3DpzB=lJ}&{TjdphsIah!<_Wu76jS7f(U9 zjM2H98K22WZp|NyWm@NYcTzoTEyVC~0iV89Y1hb2T!N=^);X~D zOQ_#`nr*qoBma5hZuygQ>0O!|uNm-d`S7R#>nYQ9s(k z$OkFjW_|=#+dv~h2sG{GxHTS5DC5X~E7^Ym2QAv`S3u`4ri_4>!)TjlQsq{#vAZvc zhN2du2$<722nzV&#CxjDV&WDd1w;pF1Bm?XLWmJNSqa$hL12Ph?=g+J!pb23KnSpF z<=$)m>V3p3b+3Ha{8#s5tX%2^5>z<3DZevA)18Pf(b?F4kD9zJ(*Zp-NRX$W?XD#r zpj0J^Kc=k9`J-TVC@2o$kgIH|$10hvjYdoluQdcui7tI{Eo(^@ZD=s2ZTr#bQ0&63 zF5B?7uj9}XDnK&)|Io-}?2Hj^GRF&h29oFO#51OP*lfmFz>s{a?iCEspCrPrEylMD z1PDr6;8=g(bylC@TRs3RO9_S(fZz&i;_ME|lw#ou9krAXADk7yJzqjjjuW$Dqo4Qn z{_|TujU^pdQ^=kOPuO8G9>mwh%RSld*WH$hHv#6E{~+-AyUOq1*JLBNVm#bvMV z%gSuUc{?+ucIMy;#2SWw$IG7S@m2GEPuindGGB+2uv0b=5x(;)wQWHF{sb*3Gwr;| zhOF1Gu#z+)Qii%#AiV_9dM5_V&N`Zg&b$l8+4k-1F5k3X$wIk6QhB(g#fBK z38+P0s)pC}aNYXKwu!Ub^OTvH!!GRFX8`?^F?oK}HNW)UD#?VBU|u9D2U5k$ggw+F zkm3@UXdAq4+{z7_yXrH=$qwr7TuA+VRmWpP`Fj8*(n!j#-pG3qj_a^O6a66rqwDW{ z6jU{}sZ>Z>fOLy59yVA9mjD98bH+jhg~_^yZQ)hBu}K#CMWY*&`S8zxe7q1iEU*B+ zwontjn95LNO1U;w2Ar4i{}dQIHKiY|uQByeAE6{1?XQJset*|MsD9vP624m!M&9@W zNOuNQz)v$W^HHCj7|vj-&rN3ZHEYa_@Nda zK5(Oj^G>E586EmmliB;i#v4ohH|W;<@z@0VE@xoT1{!!CBeIqT?I;2x@*+#ze8qqR z-#@9GY0lf8S6t$GYT7iVP}0eYj1@|w_78_ps?U7ZTgG>j0r|7|9?+u%KA;q2!{7pN zO2rvruw*U*!;~JWq(IM1rq$kg{>jYUi2KcF)Bw5{!==1A>!ARylR&SK0&T$&0!U))ZZ&B^a{_ep_M~URneLux3 z)_1tEFe?S3!rw8#Tb}#27+$A^F@(O)l)Yr zTePW079wdwdw)#%nW*ikuB;4xwI-~1s!l{-U%uMo7ft0-QqsnR;zy71?xl*4PbQyF zZBXdbAAE*1KaGDFOj>4s&R`*%>{FG_P`2aV-zlXbW1?(Cr{8am&O`WO4;E@I~|(aF)U93hGqP z1b$_f%qk3V>?!eAAc!P)g@x8c$`&=yB?IUMx?7>PVtr7Lp=}H%*cF zTgVJuUUgH1V3VQeD_j~lSgp)p9-T*$#9LtU`P^4MjD%ysgnmmtUMFUwABk^0Lr?1X zt*%zjXO^b+l`x28@I^1_|1ykjC!Zn6VWu%&N#i=`X7-*svB%6zKK0f~MnhmNDnPTWNfloC8=&Pk2jZUS1(z!vvohB8SB=oI9tg3kSAoQ{``kf8M~Po##8`b!30MZ^2gSn zWOXu87J3~M0?FZ*^f!J4E~GQ1Am)#(jyYOC-LXGhE{RM@p#4}md|cm{H>ka8J>v=u ze|^+<8=}p8+Z4yLPqv;Z=t^9RKOi74>a&>0-y7oWbmsFW;zG^>C{Ci@3P*+{)HRp| zq`j^=-mC5e-8d6)Pp8Kmuw5oTX5jb0hWcNs+7?XY{r;||RDCi|P`oHM{A|z8Ibx?_ zG`>K_X)}0ffDHs0-%_wp)SEWEx-u+0Pn3W``91-HYs6_7lkLg9k&^roC%QnleUQ2Mq2?~@udgE9|lMoiJ&M$?V zNS!}m*3;~;eG0r;!9%u`tW2p?u&*|jy0i4KGE>Vwr7}ii8<5UBATk^*nLtASKV7^W zHj;11xJ#L3Y&h*udGSJe7c*I-@}&CN2bQ@xOWe7T_Y&l!4CdL$T^fpS%{xyr;Q8BH z-ucX$G?ND?L{(EwR};Oz83@@IqM}dO&sQFs>^ii;a6^mCZbRM4-WjtOo;m6}>&nO0 z8JfRrd)(VOeOq(W@tgiMOOvr_^_z13@JHrVSyzAV{%?)8&Hr=SX+mb{J9MpGXF6o|M8+?TE+G!om5iuxIqQ*{p9jMG%&L!lh463xCnN?6WMQO@B3p5STcOx8+K}B8P+f zmU@qs#MR$}L8+T($UnVp>Nf>}gTR$5xF(TpI5ZbBS*b?aJ9c~-kGAxuEBXJe z8Pxk4`1*)f8b&XY+45Z-|X}53j(K+wU>3Iei zvKRK{I1!!uHMGMXjLMi(hTu{N2Z>bAOryVB>=R<0uIq{9zXyXM&$jhs*gyKZ_aEdV zC;5I>rF9RJ*4+tQ8Cia!=0!>h1SWz7oAMfVcTr$@g*)xWkz4g@!cztZs*!{JqtgMH z@ynSSxTPK*b#c6(tfOGg{vN)4|H&7(Z9 z@iyKJ)N33BwLp)9)U&~Yb;Wgun9g&ukfQj)_@GgmssQ)X<;7%5klU1&vU(1Q9LGKZ{LcD_Y#uAJ0KIqq#+sWJt ze({~Gjgq+iRIgj?qSDK^wjsmkr#xpE;Nb+o{koxl3xbL_>;b@;SbppyK_#`+uuAZJ)0N z0(F3@IRT=??HWKD<qBoANDp2 z2gmAt$WS$-!b$ucAMGfn-mLw>1^_^dGV)IqnJKoMZ)wPL2kf@qIaLW$xDv& z9f-e1ksLDK7$m(VvM>KRL!q7_j%bl9AV@12S#O@V$^mHt-OVLu8N_0;<>p1|_(n=; zCBBhbFEFPuHSs+&MBg_;r2l1&WFtZvTqtIqok|vO$6gfTCBWfGHj8k@&iZX4O6`$- z_}ZJkKbb(I@z;$rE58};H!|c9F{FkKxBQs8p{}m$sTOng+ST%p`468<-Pt?y^+ED? z{8Ms20#`jTz5eM&>8DcP-RXnUGl`LkCLyuASdt2bC^abxUQ|TAco2F<9^YQ*_Vaz8 zi#M3cW_#1VXVs-2!m^R4ex>EXR=Wx(tf5`O_bWtJHI%`n4_M(cm=Fb9pq*G^N~Z!? z7{~@OUvzIgd9<&>ztT8l*Dp1&m22IoQtda|rXLczD3j0l*%ea@0S2(l2~jYyt+-^NR~RT>9{_MR#XtwwcY4 zsZAy2Pgs6a+U>Vs3(vOIhX4+mhanSrkjLqsThUmwN!0l)GG2Z1KI=OCoI$e&D~F2tD(kx1~QEpkz`YWvnQX*>HortRLy1qVJS zMI`G(rrZ3-Y;AurKLuf1IKRkoO4_k#!L=qBQL6Si9fBWX3%*?HwRruLYMP#SJdq+N zVcf4yZ(AN!x|(g9RMc99M;cXY%x-_=#FEbbw5Z?}q5|=z6cw<`{^*~(r3j@*F&~x5 z(P$K)$%bmRPL4HQRe+U)2FAVDD)m>f8h{Et2_`8hddVXxQTCtSO;&~7vu+c-2#y(|h23me+8#0S^*Y4X}ykBgl>-o*AvI(reF29=s zIlnj4b>(h!3W-NK7$hEzd8T1v-QeH0ll5l|p5N6_3=`E_d=uZ_6;l(-!r zcI6KB%G+Jd97lF?ff#0e2)3nLq|D7V6cLpJcT^*jKxb z3o^4K7UCi)*mXLE<0KRI`vj2}94`MA7vk$Hxcxe~hj_v*`h_@q?FJqiEhr(#_KlxN zvkZ|&Tcox$N40;`nQi$7AVYqXT96+`ls&m|I^|6B#1l4Zq?^~+by*tzy5lJIh^1s- zJ-$xh|0h|P6$PGkU5Y{zFzU3s~)}= zqQRBLfq)nFQW%|O?efrVkH6YDD36^*I)$yP1X2#Je>Wb!OBC$)bTe^&^#Y_(yNlS3 zCK}5<%vFo_X|o%+gfM5OO(e{ij|*!Xif!IZ=jAHbYx+r@d%6%L)VXLde^AeiN$`lU#;E|{HD#DU>R-w@pJRm><&b6hyi|HB^&s-ier!m}9#IL%8 zER6O<-F%^%;$@*?&3VZY(b&;x61{mn=xhN$LTn4N1!(}s=OVALSM}VOv!<%q z+-Qp!`}ZAw5_D)Pe+qYXG`{knBS#>VN3LA(#!lhGIc3bww*}}bh%u(&>Lq0P+C8evb*gArJP89gT9Z_NeqG z*z>Z$(VumGNa1Y9uS$+w#ZNz6iOq965Jcep&A-gRgYfB3<)p6BpPF*_$=~66H}F)| z4HvSY@Luup=6kaEujJ~;FI|h1#@5_nLr)ox8nVCz6i$k^pKQ)Lc3&?wub}?LTDS+& z0#*J{&H|K-gEonxgs>}Y0xWI^rXWZpoTxwP-zhIL>myOGdj7!i4DQwbu`dS(dS52F@9}=( z_v7|LdIy)v8>W!6`_GJo+&4){{$ziQ0(wPjLKJ6Y;z<{s9-c?gT)y2Si+NX5d^S49 zThQ%ZLYozcmsz{?>^i?S!7%u}6e#KC;S42gWWA80S+G`?ck8 zMMC2%pV^VWfSw#*^2y~}&~t0;QA0C)aJJtEwaAFgr!E}UJeS+@vNz&*Ak4AAuN^h< z<$Ssl!@UQkd@SWP6ck%}13RAZVhJVMx!>NK>l`#V2%x#drFL5OPM3Oe_r31>F6Gyb zzp!)o>ZN*}V}nO&m!=Ns;KAw>{H2?=UjG%)Z9_HuZW+2Ic+_5+J2?BEDmCh~*vYRT z0ekYHN%@#qmD|nFv92cldBy2a*&S-Ulc|6xoenGsb6+> z$;VduPus-zgJNmi=krKtG1~G_lS*JXXh3`VGW&PCMPI<>k$}g;&)+YMgd`>EL!GPd zAq{~Qj!G(yxPj)NJ--v5`RDRNjh7O$s`;5Wnlifmj(<7@`@xpyky6jBMYR{eUQq9_ zZrdBg$)@xxTx zommqUMB_yJ#=LC{@0)ClTwFVJHngQ!#j}8I*&-n|YaJc~`CB~-8BcrnZZg=zSHA67 zp5FbN$Csj2AdvmIn^f$@(c{9!mUx=&|lUop?moS6Im z=B#|FhO+Uax?&f_$3j{>$=Izg9R`h*SvON{iunX7ZQn1&w-f~mN%=AlY7J$>%6X`2 zhfua38u~yvj|``<`V_U7<%5xjLVm6uy4`pqWpxs-!0t2?1Cm6w$K>^(PHdOV4dXNp z&e&ktLvJtWkcPnbjK(G;A4aY!CsDkVut)ENFHb3bNjd9Rs^PtF#=lxaxqe&Hbsza- zi#KSBRW17PxU|6HLfZ9em1tY-r3dBE=f`O1a13fcz7<9CV~y*u21OFxxM+bPM?kz) zhuwR7+tp<=U|G4OTk-9O1@A|kuIezEgIiDJ@dNy zTne`;cz7)jDVe&m!DnfTwNFS^m+jT>#}CwuE1d~Ho$}`KhbNWeb0NJ?zHFYYj2Uz> zv>#GATJU^sg?F2M)0)PkepX|e=J^i{U1E+joiGYBCfAZ;EI8>RlUq9cj{9s$e)H&B z-@^laecsWzE9%cJ5Sz&1N@=>?x8j}kt#Ufs)C|SdVR4*POnG=@?MEiFh3@G3OwFez zWqI)r@7lNfI}dJ{6XOZETZ^h^vT5JiSDqn%9ou^ky*qw5je9lU)eP=^(rOhd9hy&?J+lZ?1ztaPr4PC*SP3NbDl0V=gK*dXXp0vRFm|htI9KB z6{o)GJNAu_^`BT&85@xKYbvWiKc%@XzB(|dR6n=p6**8x%zXBTU$&3ewYP~yUq>Sw zMvh8oF1x3<;#xxv1Y}t97eDOec zf5bY&{$B^!c86>YOA7y$=Nnxfe93ouf2-R9*FPf4kE8^|*%z1CGW(=Lmw6F-_ zj=ti#*ZIRL%*y#%@;SC^>mP&_N4y)7l3s0j!t{Zj3bk>k&)pjei&uI^ZI5o;+~NMC zwoey6=a2uNeYCgcZ~jcJH&S<8 z>$VY#HJ#gW++?cz#SKQ@GxosKmNge9b`_TghuV-&%j|mHaBQ$8z1ez+UgZ|S=t0A* zll0vSQryE*?&d%G#QB9S&GOaE(y{S${xU-+AK!-f+-3g3T!YT3?I!W+>}SL58;p%r zHbm@e4-9pFdhSxu8ug4TE%I6^>Aocyma!<=;iYVE(AUIA#kW3g+*q*m066JZW zDa2N&4%zvNt?GJ#LnGG`FE+HIYlJ`G*oNy7mkXD!5S35U?l}F}4m~xH{iz%)y~R4T zQDd>)_FK=)YmR%K7P30_CF4r7pTtLo-bi=owRD@?g-Rpm)@&lB#x?HFXzduQ3)098 zY|zyYKDQ)&;zSUm?_KEhcT>(fS^f(Ve_nb8w=W)7wO{hFD4?#vU`pbSW9_BIO7`Df z;^*q`vpqU^KVD~IwDH4D*B$5YPL?H@WewaH3Nz&?;MUmKyUr|AoR1=5d0BF)%er{- z$!O25bDFg}5h(HAukGQ>72XzOyIP|c-Pp7^;DLM5+T1)+eSvYuhJx6)=~4D>-z`+u zCHf!qD4w0FAdjp?pcsI#(t1vNv2C;0-3h?-sgUWB@(T5_jEAfn_9(E?)SXx zUhU2iT(*?LX83UD%J>aMn|OC0xN53((|2_=e^JP@QgbUC_Y;F%R^RjwwCN~nttxwk zl)tX}ljylTJhr98a`s+?a9HHiuj@E>zjREL6POaesQX%lo3rAX@2{6q1%>A?=e)jD zt-Nl)enx)mycQj8>?}y@^`7KeD&XYW%01{O*k`G_M9DT}_QCyXvuCbRMehvrUNX#& z{p?+GK#L{y|qU zKlql|g%!nA(QlcDn}X#0@8PSyIZYvS3Ri{ekReLA{I;pmjsA*lr(Uh9rnp1Vd0 zeADy!eF8n9eT#eeOszT(TYcfu`RN> zT*A%-2ScMhG)qO_U#{= zGBe9F)p1Ncpj>@%V)m4k`QvoILuBiFH8JPa?jAbddy!24F%=dZU}PS5`V4!w=O3eh zgz+briaI~~9ya`KwzUDhvd@euHL_gFcF9Dqd~0D}<`OMkdDDZxyy!RR<)4xVXMMAL zu|2QvBt+CAFp|vdo8b@Wk6Rk5c8VhTGV%ALk4^h%yHV7ZCXwV*xd8=rZQ-1QbwAIF z9a9RuE7m|ht=qTfB1x13#>1xT{vtQ`m%Md*r~j%c@MZD>gSD=ggv1rMP(`Ip=GHRi zn9gIb;^zD;FC1->Wmqnsvi~fdUa6{ZqeaimUH*=8`s=;CbtJowa#kN=C&bFTJumOc zdolB^Hb(N;U}%{_ky208+7+T@g|EC{-qPWPplIEze$O_^rC7=@$BxA^ZyI{XoTyuV ze7{P8ezf~j^BFKQI_EqX+FM@!y?I~kg|%OzE1KPQYc5rOkQ;Pm(*ez@HgD0a6|t?S z1vZ{5&ur8Cy_WrUQ|pI0TOMhDldkLw%S_{!Og(B7Qanf?y;`3UZQ??J{=Rh zRPrpb^|i8Jy>s5gl(s8J?A17llLZ252N<_oEV$RA^(7Zv?r*;4X5Q89ots|Q($>qB zdFu1Ez_vvmM@~evdRwe};^x;=+m_*0^Qe#Ay=)-T*f(#$&{8XRrO@&C{lyIAQ}&VcTYXYbDSkOeLr z$$ovhlmEhIM0->;EnTwf_DxhAR{5}tt9d2;!T0_PjDY4%vexhaWOQkK&q#lFuL)e^ z99(KMAfKyd%P7$PHe%;n?kPOAZPe(up+u|P3ci;;`*r&Icdy(da{1ev z6yXj5i7pFO8T;4mo3^d8KPSSmz$9hJ)6_ddLj2^5lpl)g>*61B=h=Czc@lJPqp;mg zHl&ufsqNZ|mcobDlNn(q%P&+oey_P$uxxRm!c);-Djy%a^y|rGcs3TcJ=92j-w~Sc z>M->qOK0a@rGw4WZ=@!EX~k|*_l=nIopCPd*Hi5}w7-%WQEiQlCK7WB)M} z4#Q@pKKqouxE<3KoM$RCS1~D|G$G4e3!zs<;k=D0!!$pA<%(dWM=M8#@MjxwMBf71 zQRKODHpJ1Fc=fa5%fr%YRfp(tr;Nx|N9Sl(2O4h)GX3woh`G=qeD~AbUjkHHgQ;@o7)B_y@%}CnM6|p;dw|(jr)>2j#10_VL1QHQZ5%4Ij>31~}+gj2-;WbD`cKP{jh(gP|vKnEX zDyz}w{$(3Ld91?EioK<%w_#SXqOy15p^WaaCwEkn#4lTN#==$|6vgIr=hX^942VaY zn0Jks3EZrt#S*}$q=(DHE(>i5!)@`5UGS(*G}6T%vDf4Sx{G5N340`}Pf|gH2?wkz z;P(>7CYBdob?mS4je{fpkZNDGlf_%d@A8U)>Gcmr>)b%Y+dAl90?PAP#7W#GT>(Yk zZ>;a*2^WPxR4J~tDBVKgiyx7!onQ24#smrs-TRvp1U6Gn+~;sIEvuxK3{|fl;p+=&JF)!x~-pJ2CVrY zy4g&@k*(DdTas~=zKl$^&Yb$j>Boi*LUAT!s(?RbL==rUXaR@gFErM$81+NnF7SYB zzrVJQ@Oa5mmL@Y60=()73+2DRK)CT6ZEr6`g(x3d5=Zg($E3*nkN@iZAS4z#cPIFRsziEj$hx_`extuk_3@sV$?K!rQ#)V#hYIpHjf?gC+u1lK%;y~Vv5mIMTULP>8a z@cjms^| z`h7CWM9r(s++ITCW`jxwJIfTIh#`a%S#|nkGaqfv6?#3CPcaqC-87ti% zR4kDz-azeYSQC7npGGz^{W`tFL&?|OQ+Kh4wI0kk^5lcn$Q$~_QL%~-Da?;>C>B;7 z^PdN2O!YXcq`xI+Na%7Z zMtj&>E)U`;>ba71bBTF9UZjp$Aj;YG1NT^16@S^*RJ8LVFQSjSw`Rw&el3rm{LX-S zK=kX16jjn*Y_iX^On1zyIayn9^WrU$<2j;1qAm02QeuE$MnSA zgD~Zy(%T*3CIz>aOze)$fqmH$J# z9?1G(++}lkvPy&|e-Rh)3khi~aXr)uV*>!Ay@OixgO1Z*I68qd_2EhLdI{7nQS$GJ z^((NWU9GKp_`|Xo5oawUZTv5E_~*xaYxGYdk?J!?7Bn2= z02HsLi$^`!jp=2JhgV!Ee0sX0IxKqBoqrz;D_1O88s)+Aca|rDC_glLKQUjFmd&e; z;YtFyX6)ac@`>mWYS1?(^nb9iHede7MCr<95R=BMy* z#ke*Jm0f36>uC|c+---drv?gnUi@1`F!xQL4s3_ITKRlrea-1z$B-?nkT6XhL~_fXBF-?VMeH$yKG+3kq>z{#v_J)C9G5dyB_;Th$UPmXH$9#7gz=#5ym)T+P4Z12kF z{0|#a&y0?Su_M_G)#fr*ChfF6v-8;rvdYrg8)ZhMEP!cP;R8{XsWT0um5;1cek(R@ zJ{NJhKTy2lP_z-KfCcV?U`EH4`Q`s7suFd`$QYlBPv9GEH$lO~D78HU3Q!1|SD0MU zMd)hMXlviEaASvL4fR~fr-#q*Z-wb%nt#|u`PzSNXvdhq>);bE~ zKa8j^CL?ooqYu!s^FTd3rI8QV|F+AR7AKL0ae?rI4MI&rV2UGGj zvfMigYoZhm7<+D3hxl9&59*SiFv5|P@;|=-pDppS(33j;^(hLBv0#fQd| z%#_U{9N&YT2;d<1seg+catG53sw)TSS@PB6xIMQlMJj0)ogXF|Dg`te_X_y3IrC7?+2mmdR!VYK^dBS*g|cIB@C8t; zhlJvnvU(0ag4sL~`qwa+L-hb} zW7r^UQ`ccb1L~WODbxQNbBG7swdrO>IIzaYm+y-oUI}mC$0)1Ew$*IjSIViW>dt)> z_g)Ny=k01j!yR7(0jsm3{dj}w2(kzz8m&c|Pkk?-4hg{MTL!Ij0fT@EMA5Nhr`P_L zy|r`3=nFsYWm^wR1_d^lI73<1qC_)5qY=9XK`SL5RstMT5ByVX!Yfzx5T+Y=R{RG? zKkz`-Fe00?;ZtE={~ipT2j4e>CYpWz}XXYu4x$1SnR(3G>0fwlB zTv+dM7xm(!^Y1}cUpKnITiwU^6W>RZXB}Ah2{+PS5g`%bNOnbjeNmrv$NK`B&P4>k zx_6opCN?<1&RXg?2_s@~Du9y+tZ=olKxjM^>I?$3wMz5`3NOaIqQtvRf5V@=tHA+%11 z^(KCNafzK6McC9TK*#&7{tZH^Ea+$$JhLX-Dz?S6NwbCnMM{cHX;)Am2ol-g+7)<@oRJaF7hexd4@qEsY-KKmV5@7v z3xy6-3evVRS2CeF=i&PPvD}BS!^-|{8q6A;AvMYK%^Qfnvji1H@ON9tBXa$t_aclx zr?WK|%W&N4(qCKfu4x6(uZTVp6$k!~!P^NKssgG*OPR3y5pDO80iw$#4k&!z&;CrP zdKVt3r4q&IfjuPEQGQ25j9->T-kY4Ml%Ma?w5UWICL{%6Q8`kRfQvxi6kAL31Wim> z)#gDdr}OyVYb2`sa z^*0#}EeEN}!l5gi)&&kLbUZ}ENwoQLEZd8DE#3Y>gzmv5cUka?C z&gu&{0+H&jO3YO!d7Q*g;*7I{x2b&{hfNYJExb>3dKc=X)40Gf6akpM$GPP=^8u*S z_7R9Wzyj}Y_!&EFKxf^75v~UkGfRv@Jjj;}GfGM4Ulk znhYbzGNGd4+7b$>&&p&)k)ouV&T7L$?Y0g%KQEa%f``;=M6@W*?8Oy=MT>jSX2 zy<~;j@n!*r10TA&lr^RBA{|)7LL&He`!6pbC;x%dw=;lKj}gO=NTesg2*#ms8*E%o zFK4kQ@C49{Mus}vpgN~Bo4fEyl3bE33dF-N-~bl&N?m>0B}>|;naskZ*rbH+NIs|s zppclnQKy*`B&zAzzP5BhBRmZU!Gu5KZ_FTQX3Cnjv#caU-z$odEF&r`vdNXQ8f*XKUg=*5Yt}pi;?gf} z@J%o4`7J8uk^1?-&Mw_hp~5+|4D;0p-Drd~1*zOEfpiUCGyvT#%LXk@fIG`}Qs%nh zf9=;O`18Np&4Y6OHhe_{`cLgj%vBKG3BMG4W~(f6G$Js z;Kt_L#SYjCXHLN8(d1v(0s`Ie4}~DwP1YEqmwY25rx?BY>cHvi2?}x3XtW1r@b-VG z3_AhU0&|he=RS7bCGax!Tv6YfZ4ty|teKHT)TF`qi3k7XasOFn2avK^C6E3a_1?Si z6$^ILffWr}IdVrT(c81NsS86$J)+|I8;o?<%I6!SJ@f|96$WKDPiL0> zFl&aEf|daS4EIg)kF3D)xgUIb@+CAAl^KE$4nM-YiWjFUNCv|heo@!B;y-0JpKcYX z)Mt?5G+>UR>2Pq@0iClK`^yr5$U6W-=B_L8GXa5SuEZIOKh814YBOu2+wX}q3IvSB z%8dVEaC)W`VBp}hymFUy#=O4Lh?nHBAYM7%!1RcglsM#{-r;yObTy8XXl=#kbY!rg z;Sl}ub@=(5R@vB+u+qrp zK?bZ&0LnwMKF=4Tr#^GDO*A3}PsJ{;9){1+x4vKvQn(zn#UCs{1@8RuTBSz5W6wsH z<}180Idu8HN~BlA*EbKe#=z1<2n~71{engBErbf=#9Iiv0S0au?%I#Wi!&P-Yxx|^ zA&UvZ>=^_SI0c`ZGr_R$TT^H+$!MDB&z>D-qq3z6H56wBJs9U^Ym8bYIY~l!&^xci z!1WCfuJARN^{kliLF&|w$WrfMP%5=4<5=|7rlS`kFGBPr>cwk-*<3bW5_(@ z8k3>OT!yPmg+hojm5Qi{inqj}k|Cue4dPZv2&GaKSLRA6Q)Rd%6lJIk3HMt^^}gT# zd!GM(p2V5YK5MPL)^AOcTwD6ZKhy42MslKZV5hFlz>=Cw^S_UW7(U9d@c$W)=T`i; z)FCX=1wPyD%A&yBFCM6WgP;Rex}v=O7=wYSM9X7l?$1`h zc7)Y+{aQWnpcG+6=`JUoRQ^57&tY)eT}y$^GUuLKL6dD@c zTWnUV7u(I^O}x*G%K;!P9SHgbdc$SbpCr)VErd+6am{mD;^_`a4NOAXGpFLm?M5_T-^KZvyU_)e9QHC2ZUhv(fJ9R)A5WB;w1&->3DxDhc zSATmb*cU3&18=+icr!6K6q!8N`xPu&L}djCp>oi+0CnI%A3#6kQ;`skzkntf;tyQb+jD+oWzgcRi=bt@{METzb2g zx!B(XQhSRrq1Q&CD4Dk?aTyHLQ?pegBp46_h zclWsu$~RvJogJ7j)$32ywm-xLA@bna0dyj0!#P}uvU>xsHntIpn0Y&MzJ_y%%_rAw zmVUn0ysuMfVFuWeq)BX!{M)n2XLX#R&}- z!1vAUOC9{m%RU$?QK1 zjavzH!{#>U-S|v0cX8c}DXZ%y{V8NYZ}|^=z|~$8gOoHW1-1=DVTiMBAs%Bj+a7=i zE7+n3DIObIeh!2R`7dxY91YH-vXMjZvDt&0{>WC0u*A^0!-I)to;OAIahG?eoVSP{ zNxdO4JKIN^9#&RnTtoC;JniF8lXcw3xP;}a1omPoe9t1~SW$)?-b;6ZX%{pL2GO<+ zcWAU1rp^DD?Vqwr$h=apVx;S+YtfyzM@%gRx_m-uzNqq$J@GxhOpIM8=a<}xh=AQPB3h=cg+6#^6dGMvg&qy`^(lLwv>>WpWo;p&Hm zyH76Y5y*)ekw7@3vRv(|v8v!c)?Scw+yF%UA5TZ>0w4MbD*t^;M2q16&6^Kb31c81 z@KJL?8lOPc*DVP932VTg5%dafd5s!x-Rms3`Oh{L6-?f}fA}n!gjjriU*{LV`Jn2@ zO@&8qZeK!go*i1U66Eurk+WkOmzTwJ<;lOdIGwrsXU1a}{&@PU$^AQox6r1(0Shc|q4F;<~;-;!8l!q6^eml4QgPXP`>;#TG5I(g;wD_)=GkN=?=qAYD_fNPCZ1!t3_Q&_;zd4c0 z#kiYbZp{Je{O^%`p%af<5-3UJz!tUrCkLBAqYl3NIlhGlFG}MW@ay}}%MY(*tH!Hb zS2SwaDj~aNF5V=)6nOBCjNlTa^^HW@|co z%UTW*Tm*XGnG*f|4KQn&I3Xn@E+Xp9NkToMG7mgBzA(NwuImmbSCs5lByM;kC3bMV zx*$YA0hbl7Sg7m-pzx*z6|H`{8<%B~uqwDZi{rUjGN5;%LmW6nje*5LBW$6|{5WNz zW+;9s$e_557{Y~tWb)?6e%f7I6mCakdH{6sj^_u&I!OJQ4%odj)cfB*n&S)?e#g2D z$$tz=I;Z+?s&jSYhJMMXf4>VH#e~OVLYH{+`)`+At^@j@)1jQSrS_xzg;{a^6|9#L zyM6Nz)UD$`@>m48;?K}{E?g&wuzit7|JRZlZi#a}Qwlz7R+{m%1zQ)v!Y{^GXTe0p zh4ZP0vRXRuAQGCt&eTA&DJS^N@g(Fwsipuj(Ahhr9e+=5}xIlx5)dco@*e2tDuksK|57;|blIg}TSDbteeOLtr z9YRCz3q-%yDwW?w$>pw>zjs?uAdf_xcByz#oTnO#a)^FA0 zW^Vb1BJYR_{=F>WTFRpokp%;kY0BDEiI)8H@q%-`l3lu2*>jUokxS8zI#$((df&nu z@NuA+b$_Zr(1XC)7W+7k3mG%njlikqKwkzo@r-6=-%39C+U1MMl0>=^u7e0;lg2Y+ zZa)X#zP!&?Hj#Bn-$Uvl%L!nSZvH&z6iThx~eqQ{SHg=zF!Oq*<^0VVSeH}&1>w= z`ZLeJ+BkLmOxW{YSWAOLae10u4xfmK!0%7yB&>5U@0wl7p7@+EBMk+1EKB+hd3dT; zk}h&x1cZ1<+DMt8Z(km4zx&LWsWiQM*WEXa)sr+J8W6OKU#1WifXqPRf=-98p0iDO zAVp6qtYkj8v!e%kpu=p0K-KQ2c`H+Z2I;rlOs5n%E{ys21RfBu;{q)T?ni6Xt@ybl zs!#-h*ALlpfzDgt^Yye@X@xf;yLqX5~JDznI z(D)m$i2nS{)_I37+{{mTP@pvXMSIf;Rs4kFC8GgDiyeyf43OEIhTKMfc&OilAyiuM zvlm=;B~MIw@UI2M5u%Pj7C0w(rtFpnw(8d1g(Ny{L>JN zup=9FH|u$PAI)dsn2VsVi?!o|(M$mo){< z%wIfJG@f4{x*7U?dck(`K#SZ?4{=UnfyIkCHYd}rZt z#gt!7C#xnOlsqBK9!};0ulSCGxWEenubL!y**=2vlk7!-WkD9??`Aw>_wjFk$RfNU zHSP@&rpI`N{bIk__9}5>6M22#`=-0%0ipK}NOMz(es;7c--DrⅅOJ;c-`ZbHHXkYrC+>Er|ZK+g08B&v8iHV}OGR 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%0D$`XLX6j>T# z=*}56Z)6rKO@L1;S6r6h*I%^DQCwl6Fkr!SWP&OD}ql8c-fQpARrRwqx)O zg~HOIpbJ$OXwnN2ZQu9GFsp+)<)EwZkj}4>S`BnBATa)Om6asa_hi6}`3{uAs+BT% zGevMi=IP8)tS6irKoL49n2G|UsO_j(8of=Bh%oRLS5my!w6{u2%RHgqRWBgF<|^*| z72pt-khqM_EfWb>f01o=w#;%4I1EaSAX5@m20!rtC1sa!L#mD=o-*-8MoWHb>!Sk$6gzSB3^EhWeINFsyG)0TYeoigrMVM9fT8ojB{ zX-J&ZrAQuYSq2!XdgB={l;85AC&We0cd?(!;y9;QyAP}}tbI_{yO!^)sO0Jtf89jg z4?(d4r4b+Oyb=;0yh)CGh<&O)QxHPhOHJgAtP%xPI1z zfBq;NWL^DKa{ncOvzN5)!PY52*{W;o7IumYu7u1zFi|FGjTJ3W+S%N4*O_#k(iu++ zhe|N<5AI^?z>kvM{@3?SQ;lG=0Q8ydi@L_7;?u{|lC!h@;t00BT8q!B7x`=}f`p6s zRp7-~_(3ayKUE@uN1myMLPeZyRIV!OnrNi2Ig%!+n(9gB&Pk~S#_{HJR$=% zg{++frDi=~xpCOXIVa|E+W12dB}Kmd_vF|u%T+5<T>v8qplcrzv@v5n%Q%CQ$z6%~>&0nhS z?TDNTekUs^y1+BkZ55Y*l6Slo%TW%a9MvE43=!&sbz{b;nCp3bimIAOjY2ZKS~K+wrxjHA zP+dyEoVZ;S#8QPxq#u3xzt;CFy4ty32y@A}`qR!>W0}EL$?u$~Ri*4n*OH~gfd!Pl zJNiJwG{{#M8Fl(MFKe4sguetFDqD7oslzYJl^(8n*StTYQUcpj>_v=QAfP2j6Mq;@ z&Xz%Pa7lhky%GbiZs-@3&bEbx)cUs-0IY`Jc>N@aR2B< z-i%u^=o=O9Kq`0TZIP_v5iBv&DOfpxz*_XvJusXl!dX?(WX z2fw;ka=ec{st+wQD?Kv&I0uW3csfy#=#-lA**WOWJp5>(ge)I^7S}H|Zp9GiQ@~66 zdxFoxvQ!sf0q~~kC`U0?woB>F?imI-@{j`!2aWC*n{On=sG>1q$<s6mjbopDDUwS0@gW=213U%UR+Tn zZn6lCPOx$SI#fz1N4Eh?H3;aC^`{&?PHuiKtgJ_mur(D*Z z&7>F_2bw^_ZBQx@7CuwuNi$jImhhm|6#Hqcg`G?6ePuS}>eToLIEK$Z)OA`m>(BMB z&P#MZSFa~Fx4m3At}c_N7j51lT=MMvsx{V=E>;Cg`^ehw{BWjsjW4Vp?4oq$-btai z+VnsscHY?o1Hav-Hdp`gJk_)~=lH_Zx)GU&Ehoy{IkoH{T8_n`>&6>&e(q=t z6La?5YFec5X7yBQ4?2b&xmbh!aZ0!w{)95{+I22DP14X)&r)mjGNyV$oHWvPMM=T! z?=pBvciNK;SaZ*n?W66ui+LE2TB8q)3ENGV0g~gPF?CoAA*-BFK<&EN@Ep|Ik6mz= zD52S87;vLX%-Q*D8lRRV@~oM~bx_hRP@X6501WE~DEuyJZ0VWTb@#^8%*J=k*t?G} zJeD$Di!~117KlJ~=+R$-|A-~Q+PH6K4GkpzPWkq7;+s!L%$L}%IkNsL$FCJVcYma` z*zlq{i#N0NbCJlUGUjQ9iSX7Uec@6$4s01ykfBYp-J-oPB?MGP*1D;nsmXktF_NpM zJ6D8nT<*s11*H7ARUzI&zf5aFp4BpahP(toZ{ri zc^0`DQaZ3}tzibJV0FFI01L3%rQwbG$}NE`1&kB_(rppWF>9AVau zxt8v|pY&?J{cKuN8nQc$TNK+P>BIJpqp4JH3YK!fa2Q$21fPhD(mGl1fo-WG_GBg~ z)L{{1HQjFX>w*_LZa9hnGv5Vp^}SQaS9ERgVjU52aV~iL+(H@*WL+MsrgFi4@Zfui zd+uCHLwkS%6X|thtlz~=rR;GoizwXMzlUaSZ{C`Mc@{J=H1&m2VeJc|1qwmA*&6=cDTbKjD#Kg@ zva>s^=C#qelSL)_UmtDB4S#ku=s;WljoV)q*?+N7Jl?69Q@vF9q$(^qqW6M{iJYUW zUE9(t3vQ+xVVD^oI6NAt6*LIQBT}f-7YxdWb$in3)W1VN$Ku7G=O>B( z%+d|?z*AV!Og4^1GeN+O6CT{cgY}24PDr4)-s0fAeS4_Y1LicP_|Vk4>! zb(aR4%9bZ-`+Lnn%^<^4mdH^rHCi1hJ^ER7|B~rJ?p@>}9TA6bJ@dWW7Wa10T$&5l z8d2XpT{>A3I?h($WpsU5|F$E7HeKX`Eu~UXg0rxoe=+R>gM?dj1X9*ZlO)r?Oa zSpmQ8m!g(TVhOc{ZbBKMA>>#vght@Apn&&+{aQFx$cWo3pM4hb;8ON>2XQXu%;JF* z@+52tsu&}oC}OT%PZ>}4MEz*8_@~l!LvwWY$uEG*N!e`BFR;qW$CH>oI)FD8kn*fZ zWrdxU}m$SFN` z+xNPlBz>!~*y#mdGeYXi_)6>*>&}*A=1CSZu^#B>^5UCp<8wJID}e&XENBwwrBUgs zC7HgV>Mlx%h7|cbWYf;Erp*%;ke|k}54b3mlBA6ZHs}Ld(cQP2B;bJz7trbr@}=Yz zS;JAnL6f<|K(n7j%pP1gh%pV;rg@61ihwQ-Y;5!0PCp=6`x8{q?GL5SQ>SpVI@!vB z#C70fW>TQ~QSvPt#8zznSX8@|LXP1cA_gbpChk72bQ#k3a?YmVl>`OYE;JfnE-`%7 z@gCoQ=?(%kpLRgUv2!9~A*~l`&bo;Z_)g`j*u4Bh^c}c0@L-*zkAE6x!Q&^F?WZ(W zcc)#wI5Q-d`L)aQ`o(mclGv^k)v@1`liF`|jw-%CzPR}D^GuW0Uia&oCckx+0&5Nr z9C~MMRFtm6Vj24XZhfzI_<-E5{MT(>fijK|V+i6nE{=Q72!8m|CU$A_;>peRPR|(W zIz|){x~}nNokOXlgdZER@i0odaiL1-%sA-^P&yT4V2SL4_*;nwQlt7m4rA)=I>DYS zanOA;*0Wj|xH>nUA%|hf*bK@CCSR=pAm6dwvaA^N?f)_LB=AsuQQtRu$tA_Im_Tx)p{tcMRq%&~cv;U>2(6dun!W+mCT zN7|{rohjo4OyR+3@gPA}OEobjgW(-F-91la26Yvuh1f{s@uRC%_F{=MDWK0Pa?13> z?_HZ~F~b={jWEi23JdpbF>YR#givo@B};CY~Xt#+OyW9cf8;pGs= zA68b~mIbg3NGS6xKlhh81{A;M28gWsKIX}4nuN&uWaVR%<(Z6ZA7y-SKge#KZB!ye*NL)fIy_E zp)AK|%Ym-4=3+gve&XYY^*X9^#XGxW_3hMU)Ihc9WoQgA|1O<#F zhvV&0;dW}xiO|q}Q6E14X_h&6C0uN~=F8+ye9o6h=#Ds>gctz8nVlvkL{Iydfn{*= zF@+{e6w0{#pvWdl47?Tqh4@I1qaXv$5XOO$ckB4jAX(Huo6)JokuGQDxraU&oqqw* zam5EIcF}1{Ku3w@i|CAzJRRT|=Oh z!9z!^;nPi_UIK9$K+!RiTe~*zlq1#=wDH;6IO&C3{2FD;)BJpW&R}8FuPH199K?wZ zf)D$1u=O)uGi;oS3e`~0p|?hKZN`{a&pVD%kU+Sm$KsRUp}5d<-h>10|8LE8fa{nF zmj}xLvgi*xhLyp_Ih*H6f?uaJm+S^}{0o}5HtAC#!rx@;_NgA~r}%WM=f31hA$>?Q zVNARme2*so9#ouVD+Xx!uf2GqT@v6m=bsjY$iC9<&*r(yC-C_b^r;ZoyXMT-g>WPq zx@~pfW--|Ky{3I8js5PmeVnYWP}bnSU4viG6z);1)H&H#Qk*`THj$e4O!VW`6E%C% zO7yO&PJ}(~P@=1QChC1GmyrTF1kq)l-niu*B(mw&DfQEJ>n-nhey|n?a4W6=noctjm6N6S1!V4JJW2m-TWxW_8$%>lt(92&2+WuQ z#H!8*Fbz)+3h=>{umjwzWMmjjG<;eEU}V}#^Y+EX#1S`HoI<*lZf~H$$mudRrvmQ_ zoWX>8=iL4{e_Mh)(_yGYv&4I5On~#kR%d2Xq7I}E4XPb)O z?HG(I$}eC%`W~^vh2iMvh%6gsxi}3ssJ~V9*!=qHxmUV5o@#Lly^1RPaz1QMk0<5i zmuNy7G~kS;MC(Ec zSz%{wD+f`_KOsAp1dA>gj91YuJb#4dBxPmk1nCfewf`_A_zkG+4D$Yk$db9aY;ki; z4sqrHiH+9}&2J_(@GX2SbpF^6&-fQ$ffWL_+P|+Dr3k@fLdkm=CtG?x0O0Fo8l`R0 zzv)WI1$QaRyy`iS#_8dxfpWG9B+=$8sKt+~aRDTzpo@|8YkfIANtK;qn4 zjo-d0Vt`Bfw+*CEE(6qgu)I+F8U?Y@A|u5K((o6TqQ(IguY~3OHz96S_3xeQgO$1w zH*%lrr9FcZ?_Y{a^wOGp_XpoKH0qWt1LLyOsKIoE$}L*d$=FyZW%lOqT~|Giu+jE@ zr_QB%VG|>tU!K4Vk5pZse!x-uzdd`{7o zF9k3ub!-i|e!F9O4LuQ5DDO$M&94Taj;(j2j6fljx5RCI|9duStE*I^L-$ zkSZc_PRVX@Vt06|cfTT4#Bb-$Uz6$=?*yJrzhk(qURM-y`cp}Z+nC-Rr#4P|iHV7N zN|DIqH8=*!cx2>`MDK$z1~%rL+Sce;;DYG%)hm0A<^evtwC8R+wj`ovA|T7j-bwSh zYx(VUOV`KTAKZ8Ca_*JM>YFF%i!P2Ht9Gq^_w3n%2l8IKe<)br)O2Ki!hnqq@(tVAZH%m~7H=6yu=*^Dl4{#8qmfF|CZlDl zclwk3c@y_M%6h(@dMI*gb^os~8H=|Z{aD&sywWZFU_|h!*FF>L-HVc5_Ef!8*ygo0 z|MqE{h1U{O%WfMi94Q=2Kb}4I?%C0|@+V7O&JVtl-(Kt$Ci!QsfAEjf3o~EcFEL#7>xP!( z-MA-*-CSI@Y%UpGcQEN{|H(;ZC|J|i6m|5k^yI`&-wRsAW`5k0<()5I-s$m!#Pg@m z_LNj*Yu#SnP4eCCgL)oL^0Kcm+7;%0bF|U`Wu5cMc@TLC&>n#Z1^6wf%9|eAH(I;% zz+=QJ-)ZD_++YS_C4ax&a}M~df@XH zJ(T2@o|CQp*F59g4#c-azCzGVM3XY*aY?t8CT-C6slQc3wea9l5NJ%wmM9w5s~(93g+o;{pr zRvGRj<}^}r=wFPqz`sD*-Lj}}1+VT-CrxO<*DtBsHqpP=pQ=$5zL@P1rWs*BHL>Yg zUCNk8#k;>n$6$F^n%eihO%Z&bB@p%Sch`jT5siC^I(J<(l&r3ytS46t!JnD^Ijg(&_M8L`p}pE8CaC>J|EXsSoZp}3V)`#UHdz}EY=9k! z5Y?V-X?fb|Uo@Xlw7CoY#Zh<~KjxNQpxU&uecmdFBS$xJCAF00BxQ48D89tJUhgb1 z84vvXdcIfh?%EdD zikI*Bc>nW65&8314I+t3}R9i^(;JbAQ$NALH+mrUE#Iezju8* z{#~!rH)qdGY_l;xw)q}Um-$w8k3@2a!k9sK=E@=OeFqZv@4NpY^Eqae7`=+}?An|8 zHJ@48cH1+sWoZ4fm%CPtg^2ZR<%lWkS9p#_w;W;~_XwE8b%Qz%PA)0#eJNYLJ3e&- z6j5z82tTY@F(bF)opts}sU<{%z4<&$sl9EoCh6&Z9y1SA9jTFA^3>a^p0TmArqLr|K%VI#H9jTM ze(6~o-JflZL_JH~Mzobiw8oaJUE&V89a{WO<*P%KunGF4mMy8!pZg)rdoLz?23s2W zGw@4>`kEz4THgydctle3p1N|=mt_4s*SA-tTFqlKt+eFu{Cs)bVKG}b^2325huA&V zvImCB?Ik;|cPmRR%(+nWN}yj0%o>z!)h;ihSy|AZBXz1sA^ zq4<4xf%VkK{j~`R+jC3$*4bHGm)?mCi!`m-JoNQm|Ndq8iSP$h$A|!?k#W!6g!gBL zPbNuTtx8(=u{CF4_2Ov5p8gLnJpUvPI%S`8)+c*!cG=N(Yg3wYr=hPh?9(h;aPjP^ zEfzc8YgzXwPHx$7a>JrU%`LCw-EVg>x6eHx_hPS9?EBumevT_x%a{)fj!bFjI#gx$ z`rLi_szl}4-8(7OJf|O6wv+SS;g@{4+|Xau zG+Ll7C{Tp|(w~w+N&?9p_!nx7CqywK^}g0qh%uq?_CkuI5D(Zj&stAmk#OOckWIJt zoCegbS$l@4WDvx{kTh!wHct8?8SOv0p}zTog`*7*dF54^c@I@q9p3--mCUo*3S1>5 zfHTBAHL8N<)n301uX4T~uZs{zmYKNbXjl>Wlz`;k8~vdBf*H)FW2~T)mc?w#*`A^l6R(20{{FiwENo5U#~-rJaiSB8$yksp!};gE0^}} ziph~5pI>@J{L0v|lU`)murP0b$6(mKfTGHO;jw33Q=QDZK5J$*<`o-O+|4h@&nJeZ zqh#_)tt9?Wp59}Nmc5@RDYy$bI7Nc6d-m6wA7;lOCFv{ zAc!qQ(`S8>C&LaQA@U&{4WEPO_~PoMht-sGb@^~spMQy{gg};0$OY-s1b;0lAR_*z z+4ZO{&Yu_|WNgb2;0z6IdcWtxp1vER#adb73R1z3t_#tar}z7mKLgzdT28>hlHRxQ zc}NIPeKs*)MmC91;-KLxnCCm)NQOevc#ZS=bu)g2ysz90U~<-02Aa!O!4Szj)JUxznI-q8hkW}D_(|L85tU&d3x8ZiiV%qO73 zF(d7T0eXxO=CpQio)#G+3F+e>;NhGw;pBpS1hPPB-U z)zX1!snrXw`1v0Fw&L^A>nj4T8fe-HN`1bQQ7gySedB}*V^0=(=Bxi2U$SrQ0}?K@ z>x1`BdDvY*$W<<2?3PBNg+7%*yiOL?GaS16H!RAxHYW!mfk{F5uH?YFh?d1^kg1RX zT~JPl2Oa)24M0^OeZp>6K^_*kvlOFD+h{_8cX{^D&tnm8L21r}7FMJ=EpGs^I3)6#faE}UYK+I8H@n81E6&yWAG1E)9#K2M0Da&d! zhCk>NNGZUAdm!v1=6U3a_8o|WgdPl@oqxU7>Nq>CZdDzaOS@sP+ zGj%MqoXLO4M1j;D-VIW;Esz;m*blvuH9OA}CMeJ!y-bj&NM}5{4vRaML6T{@B5Z6! z=@S8Z59LlUo-%D?6|oar@G9hI+746u$3x4ZaEEO-0T0W$Xc;dP_&qBjfnRQhD2AQ< zqgD_Q&ILZRW(`CFJ6*!~kX53~%qiB(Te$!bjesi{o1u|WXZ)Jk!wQ;kjBAm%L<+ov z^HA23g!2rB4FMKJ(?|9c%#D8tH>&CRz#%wJU@aEy&C>}hVE>lFfm48;!k0aarKd6d zR+3=Gta~>Vw=9*tA_Qv()*7vp8Fz`=de7sLThvh@1E2WUPZm0(mo|F)q=cfnriNC% zFH&fs*pxLwt8@{f6}M& z@-vrh3RXgCGG5pXVP9=D99ky<@1K`*0X`}Z^2vulrr+cr*t(f7*2jT zRYrC*8R^R!77&4(@t@NPuX!h180Uq^=ly|cjZ3#sEp2a3Z!G9t7weQTyt`C{AN)X1 zD0Nmy*^x4`V-AS4LTDUNvqv637dRIqrUf5R4Epz7h!Pv&N&!O5pDr97aU-o69Hy^QIwb2W!d=FQ4{}oa<}m%p}6@ii$RfxWe`=G_Hq7u^;uG~@KHeO zI9BZSH|CJJ>OgVb7Xu~YSk$a}U`B}oz{`tI!l;;@wXvN^Fz z31SlMBf;tYyY_pXYeV%{5vyoi3ZOyzaVb523QNdK2|wK z6`+F{l!} zOB#7ZdGSe@yG)tYGH88_g!6E=#%%CiY|SOeY;J)xh8!70;dV9*Gyh)%1e8NkoX2?p z`A{KcuMYBU!IH2UKn98zMT@feCRP~hvXJkv7!Zk}(e!Kce(TFM`DRYsb4$M{d_5K>tN-+2ti;b2#)~nDlNSxX!+O1WVyEhdT6q! zjbULtT!pQlBP>61^QANcJ|EinnR@tl{p6hYHFa>n2r^egOQ9rP7Pc6#(7+^z8<(JY zC`++7$%;dwe?L|AWa)T!mH2*}8{42e4tcx(RuP`qUNb}i7}<~N*${j`N@PPW(S#Q` z^HEk%x8f2VT>sN`?Sm>NdJQcg91CKb_c46S)PVQ(N~#FQRcuC#ceI{+aj~$4+R17@?1!_`z8#f|1B9L`T}% z`noaRvsNeYX9`!`x?iEsn1K}WwH_U-J-kmX^Cf{1l|W@uu?;Ppk=bJm3w?g0?Sx}l zPs5$H4ufCbKEFESyTPEt3V=qW{oDh8=Or9$S9As|$yVMj$c(X-w~c4VbLF`}X;v>@ zj@I4Tb}PEwb>~CRAShpWzW9N0aX*0=NF?W%+hLpQB7kK?qax)i&)-XvgoNRcF`JHX zM(@ra#&D%{VfFkGdt9&wk$-A%6OGY4OhxGS^hK&}%%gknYQLLUe0g_km&Qq1z8_#L zk%zv3AW|DGm%zV#sbcyhQ7=>#q>4VEzkw>=^T20v1+gR;sr02p=)lX_z$Ed_Fo${Y zKjBkUtXX5E4I3HIpklib@{b@OL_$3x;0rFzQMnie2K#?a`~Bb)Y0eA?A$P^VoMff| zcjlUMwF4oS321x9jyse-iH3V{40K?yPb?(ayto0$su4r6I9sD%*Rf=2h%7jI5RFz! z_v*xk57(Zl(&(hAFEz;6Arc^)VsoJ#7~)kg7n6RX7tVGaxW&?jBNl!q?Pa?)73%a5 z7vP2IUup-vB#6-98_A?c_39uCSyuqQp}SRmN*a>KVY8X7jsLX4mf=WD6+umB*r)`+ z*6zf}Mq}T3-G?=6Gnel+%sF%a4)H*cfQdW>F+_MSAq|7BKykYci9y-LaN2E$FA0D2 z8K-Vp3-Ho%o?9Jv{*(}63po<*c|-uD#_%!%UW_Hf&omp1;DGE1^{+^T?;z0v#a$ED z`u>;cTig{q8-JhpBB7P%!02VWW1{jJ%hrFLhx#3MI1bEj65ontHEiHM3hSuvcX zFxlwO`~U0*MJIOGg~=!LiiyYb1VP%fmotfov(D2=#uzg%4Q75zdg&vXY#t?X@2SN} zuz&L#jVjDxrak|;7Zf*0l`NTtn0TU=A^PEhB)Ewhs06tS^_D{+yGw_rG8&aaSFV%z z7cU9?jR<=Fue#a>lOc#m!TGtBO#xL)3wKdqb5dbGPW8~X0Tt2e47k^Ca@l@l0H|9l zpd!KVn8*x6OpV*-dP(aIEMQDM?yZRpbb_Yw8;db(Z_ivL12P!Vl9`S|8ma%(HzcV2 z?9;xJGoJ?+mtmtGN-TozRr3hCuXQ?p2+=wf3z19yL)=Ic( z5K+XBs(~HNVO8OCWW4`~gMjCIcW?VS*RGc-`>RecM~;^XE6^NsuNMymK*o8d-4iQM zx>hHxA?JObzlhF2j>%?h~)I0PSqfg8b>&Z zF3@(Pa`Ya4sTzs$lWpvJW`ie^{6C79V)bq$n>g@}q|}T(*<~uaOrW#p@3!9y2sXHW z*_GYI2j)m2*YM|B05r${RAs0exE7RUGeUZsOovw&s6c}7Zdne&ch{LGuc(+<;s&tx zmnMV@HefoeO+=bHU>gNFhGDXG@0XCy2yy^fF_sbtKX=e(HL4N;XwDT{nd(1~m+HeN z;~QA{a2}FGznuj{hJysKuqCK!mOh-L!3Xgb!D0V;q2-9i!q+YmBn>GgJygO-1mR&* zj`T~O+s=x(r+H|pqvc0+x~F~q;rSoz-bmN&vs)jrRdOEjY}An1p7V!ItOCWTyfrlg zvctqN(Fz%}VqR90)G#)ZKLaTuBJAEu5!Ye`w4g>=)Bbj)vah048pbF^{>daz0mRIZ zMgtjtN$MGMEWeCXZQc!bB`)~W>!^5=W-IZZmN7nkC<8twYDUW-idup&tVP%!06yd2 ziQ>WGPbs<;wjeR++7L-Nyf&xr`3wvo-yUELz9-0;vQ|vxL*!iUlZX3ln#DwPq#E=|@ykE}vCV)*y;c>_$ks$0G2+WQv9JTa*QIp?# zNM=s~hj!plpj0t7sF`!vb6&`fUyy;3h{&$(J^GbjZQ(9*j%&hG_yZ*VArJqIh^NkQ zc7i~dBukYFw9Z^s`p{`g9F?KU099R0G5B^mvKjsp#(Ybj>B3oBc2mFtq!uy!!rZV$ z$9Bo|zopXn#73LePCcWFB`In*UMf~E*z-o+-@od{$*m(PHF54EPDWOaCZm1_GDLA$ z0+WbocP*uV>b8s{5COb?+xy>j$0HZ{ByBu;ET05Dh^9yH_~u?h&G$w@_@al;ZMta0 zj0fO?;Jb52Vitq4mOkGeX{d~eg z5P)n2AOK)j08e*7!ts;Bghg%mqDFu(T6N`ujxS)3Eu6UnGa^0={(3OsG8T8_x01Dq zL2vc zqXL1va7dwh^i#5 z>}nx~0}aXn(~2uo){`J>^wRS7>R<+3pjibQBW=%-8X+ zvN#W30vTPlVTowD>UDv$w-?|GP(B1*ED%B;HbmxX1OHMPQ(gx4$I>?|BP##cOb@@^ zbw1FxD@1`k2zj(Ci$UUrLZQY)u24fF?}RTAA4X6D9$|$n0Y25rhpVPcDeLD8f5?fU z={%PxBW{S;BECaDUl+AZ^@8h!U`7P*GJXi@m`Ah@je#c~{wr@bKh#y=z=dCLJ^Qv2 z-z1AnLDcudMbPi?$gY3t2QG3W8j>*)5QFB6$^cIhIvcIv60_~Zb~qHHiE`8Kz8?|B z^${^UEm2vsoWY{Oiu}6xRI~Zyu?ht;3(muu3%pNmv0$v0MovMNB1>hYpcyQA@EXJM zYa!E57Z-}a2UVa9TFn(v2n;4}p&_P>+S!x_o>D7CT6Uy&*J-LgU=uV`88YJFI4|dY z1ThIM3q1-j2eYSnL-i-uY|45I0oL@hwpWNe_g4zFr5v_$Z@{xT9hDt56V8o5eoMtUcJ?tQ z#K`e&;%^1mGl*m3Y^5xu1$35wfvnmIcuYqdzpTv{Uo-{E18QPCxpb`>v!oB};{u3_ z7)TQ9D~H|&oc;^ZK3chNGmlXjeCHQ-LI_PU6e~L$A4iftbYkj#E*;O$uL${(2j!se zO@4k?PrUPdr*eboEGxHUEa{LQ*+P!a%^R;m{ZYpBIBbO6PQ(I26r|5i`0gca<474m zdlgwntFa1U-z?Q4CG9c+4uA(+LY>VB6-6QH!+e9!P4Su&V*M`Xi`SG?eFYhyXwL&> zfaasGl#ZS+l>)?q=V-wyw*rt7WR>rk`3~IdsN+>IhW^}E3O*e#;LNu`42r&hOLO!FTrVH)Y^W-GYp%x#0nyiHRg~X zK-QOtgC~?P-@$kcimMF~bs5}&=vLZ7{(#ySnCP@uD|{NYCFenV??|gKYC{o#Rv?%n zCnu^oVqTXKoe{F=x%;+mZFGYRS5SolXqxrwRXq+jL05d! z$zBZq611`KlJ4VA&U$b1HYyc;-nAlCYe)N`V5Xe$nz4_Y{@E8C75MiM_JzH0RFxWi zah4Nr6VDf{3btTVu!1@wUXX>;0_w3E-d;m=X4c)R;Tat=CXN>c%F5tE&bMpRjdEx} zh4{@tPVr629OiR665%Ei&{pGFHJ8IW#C>LAKKLc7S(68eBNHhAY`k37{g4o5v z8ai?X#!XJUYHm;IEq$Q~?;&m*SzotU?AxJ-zA+~YL>K17Ioa;WPyY=mh34mYWra5K zl?MC`#jX2b4$Y&#l+fxVSG;2@yNx#z6({?}|ey?|4kl`uU#;Tw-rWt>wf9TNGP_u=yg$U;qI+6p$B) z(ze415TqY|l`QX=ssVe*HXU_EnSOB;^aTf9mm|P9V4%2j)!JR}bro~GNv;COD#pCy zh~8|OD;BUEDmJl6cu*=P!Y2$I3~#M5Nr_&HSnytgK9nqlKLWABAu?8PQz-x;NU~hu zB#d1(!xhOaxQ3*+E}W+b!_co2i@rdaKG(N1L2bsqBVe-N)oxU=H_2e>TF;AXonBNv z>kyy6>FA=$xXOc~Q42hKp6H#hb%La`^TcYi{u0vDlnAh#`XEa0KBW*6~G; z;-WC5VZ;(pTtSDJ0YNf8kE9BhGsJ6lin+(*a*oeT3|o@EroF5Zm)>}qPd)w_ZdUv& zlAVX45yT_JUB15S2LUQIuvI@s$56-_mbf@0Qa|xDVh9NVj94J&&?Bcc;pM0TuMXAN z1;9NIWp;=YC>qbcuQ05L&!8epu{{td@l0c>xq}9SAaN{H`b^+vGEfmP<}mh!tDMn< z9ZVXLkxu!8*=*~>;Jze`7fF)xgGwjKsWxJ|!~+=m+UumkqsLdy@v^_|YcHQ(mF};b zo9#WcRrL00a-6o!`Lm-#u#WAR=2lV)P{q!iYAMxt@b3P)l_0_2*roNFpyyl_7CcM9 zCUnpD#ppZnTxeX>ajN@pBHi2$Id(NKnZ=z6d*Q7ZH>LysQWfK*;w#Z!60vK+|IF6{ z;XB2QRH}e{9)F@02!#mx8Yxajuh4a%Yro1VH0?QJ zcybU9=c6zW!DcEWw`*0#a(Pd&<2%-!`lP$rns!q=N}8#)d@`E9@S!8pj=HHhB$xsR z>gzhTSJ@NN$*=%&H2?C^!1*d`25ewGh&s}3qPLE*fyU;(0C~H1ZuL%>Z73Wpz_P8= z`~?0{hO_|UfgQ-y*D=jXTQ8vFd!O9YPtPUNjNJTfa0QPcp{cyj7?DMY03+yVP+yDy zVm2UPDZg^)IuTY~{TY})UEz*al;E;nPy@d1A9H)sNIL!7@mS)}QQ_e(#08TWXC;G# zKbH0tMs(uch|czQa`|69OrHA{fX+cmgVIZ5vc-U#;b@thw2HXgAtAo#3x3PhjoPjD zFfWRAeJO3~(uMowitNPz{h=?5Yr6feBFB4${PE7LGv^HC+I9?F`?lM@Z0>5OQ|_9H zI@WDJZv0wWsGhHm9JfCWW|NRrta)}?_1y>t~r6zx|G zAyAlTVqA(ki~5g4h;hI3Nds47#M8LCjo7edBj%-iQ^wu+$holafiOp_@5B^94Mt07 zI{OEv_d9PFQz6JS4pcI}PO^3S2e|EN*;zcD-*4Te)e@g~D)F4OtrU&6uOAFW{1 z=!aH>wl=(-F!wNIy-laZ)#ji7Hza%+E&k|_Ow=dBUVSTcavlcTrO*^bN?oL;$pDWJ z99cF6OtsfxBhDSJNY@-Hn}$+&HM^$%y!)1vISoaw%eKqTKLSf`uy(Hnft`fOmO*4^ zgMGBsD|v$dO0rkMJ2M@2knn9#=5`ajM-S_uA(8aY4Yr7mT?Vzt5BqgsZx(-5GZ2p$ zGZJClQkEq))>Bc)WqDs|;vCT!R-u5$fPhmNC4n!W!Y|Rc+dygoQX2DEM>vsRR1ou( zKGQ8yR=qt&poI8F_B!wL#6JH0v0j*Gx^w%TkIuWh3=Td@}i})6W zm%3~VakvJ75|6#_9La!mebf?{Fug-^1fYha&@$!du*0k79SDS<{3aId<9V2DV-LY^ z$1dINSjrGU1a2nV$RoO>EE`t^Z%s=s8F7Pp(#ra*IMVdZVQ#LMI~~U2Yz&Trh6W29 z<1n2zKq_~5Ga=5#2FqZm&Vvx5CP7BR4?rY+U<*a}{CSw5Dijc1l>OOT6HHsaa09q% zeVOvFdi%S<^}tm7VnDzekRtw~uuZKPP#!S3$eRECXB0r#^&=wY>&SHCJY-X?DklEo zf-KzwI0Tyk^nIUH@feD-R-mU>e4RDJVG!&mgWqV_#~&gk=BW1Wuiv=5r*;NHZN_D8mfTpwP&& zzZ|r`W4<#tkUcY~BXR(Ik2U?Cb|)N@79H) z6>D9uTB3pT7Z_@WWvTy5s^Jifmd?QBX()u8Z;6J}YtlZM`d|yro804_{rw?rN!4le zN}z6rBO(0PUiemil5<$`t+alafLS~jScAhC;rtalsDVco?Ewb|E+#+6z4t<+E@Id+ zLDkZSuLM^M)G`_pL7f005}?&8Xio?gxF32fx^S3}rf)~FUHn1A$6d0*#E8{SG!7(S zf{a0W;}edBVX3al?mnXlK(Hh#Et3#p!e#hha%Oc&%%R<1EO z*uVZ_*-|H~?#He5rg?GBg~D-cquQ$vL*4d$BU< zr%m{rvTr+2+C$(JUAktkCn+5izH}Av<{}|RAdt$~FfZWhU3`rd0O90kh;dpBIni(? zRA$B;kP4iG;Rl#{+wGj|J3;5OUhQ)otkyL?&=K0&D=<+aj7y+haPJ1DYU*R5|WORd4P+h1q3qkf74qh`DE4*>o^&sutQNm5s_LcLGumVH&9qqgyjn1V%CRU zPQhA0;#@PW5ohw1eE&^g{UL6TO3sRVbsM*pTa#{IG~hI%)2DUrV)?P(bHe6&DWyrg zOPN^RyjYKEe!S8-yih`6pE(tFw$_RmA3q_H#9IFM%b__}jVq-t_}vt;sTxSTB zyf@ZCxyBU^kD%@pz7)g=z;QNI(JpvPJMEotW9EbiEpSsp(TTGB>D3mlP-$fPev z@5|CO4AyAMt~KereZoi4;_KDjWj+JzyPc#`j<286AQg(JM-|qdJhN=|+CfXq(O`T2 zlzL$y+|I7k&e#xiaHv3U_szh}`v}Ls_?TX@`p>8ZSt>lAmxTMESrqgTtzY;f0LX-V zAZH!h_8PLus)&B5F54Mc;_%|^O)?{Q@Ut@pnaz5lBij+WH_TvE6V$kOf?AI*!BzoN?rymhZf5 z!T`Xc@#Mi*Sv^{2KU@8(~YMzZ70SMXVr(|R(rM8vKs;MW!hJ^}7tYL1W@ zazq;gODv4tv1us={>A$5$%w&Dqz@PoHfSW9pr0O^>Pvha(b(o@Dq5VmM0#+jERG*j z26_pnIo1-4f51fIR_p(l`y(u$KsGRsq#6n9NCN$3AZ1QQkwp=S&F?QXzTRR0@EaSo ziWV3CogufVh5=&ivuAsWKqY<{S6l%UbNqsE!zUB(HuB#F->ixS;iPn<^<`8`cqG5s z(OP8A;#4*1dhezQ5vzLHNY zA0T>>`%B2>A~dzvX#*j}(-J3u;ebV#g*}CbyFt+rrZ6XZH4P2tyc`G&o=!ke%?Q4R z^kiXMY_ib{zxeHn7bGQgP^Q}4g|Tc*do%-9mMys@e_4t^3;rq%psN)woer0MJ;cGvK@GI?!(iRon}&d!zlzo z1=NqM!-ki*ILOYwBDJkf1!<;Dmd!e!NFKkqV(`$%mHS1SKWnPF+qW+kJ1 zk4+AB3-fMj$1k=rcjz8n{jTlN$s$%wNTu@P!osYHg!Ro4`*(d^Vlp?3I2hF>|1E{7Wk%l^}B2%_O9s{?kPbGncWcKvi9hJ=M8 zb6boSWCRnQhdApDS5#Y!wPVhNXieM-FL?TU8`lm6&I7|eMRBVg9o7`643d3hUE13`!lrJ#4#t{Xbu~#zL`Bh0*b+JI8w>@c16Ha zmI26pe%xu1JazmpT)`#8hQT@A;}ZxD(&0_fgF3Pb)#XnvyUu++^m>VP`+x*0H41$z z)+&ZNZs!RiIuu zZFU}X>fpR}D=7Fem&5)2*UD!0$T8^D1{x zH?|5J5R;Em7YA_+-$Pw=VQV)*1SP#yax1IS zx^nMt-Ed`M{wL9BQWRY%l0j$aJl0Y~ZI+t)9uL`t!cI;YgD8ex!MZK99Q-XJm6r* zwA-dDFWPU?0WtcG-qQ(Lrwd$My|*7p|1tTsailDv^VV#aOTu{#mu1h)M@`zqyYRYq z5k?WS86*^12d2sLwujetiFS1LzAM~2wh&v(FD%5Kg~U>b48at^S_Rm9L#te9iH?xv zX&OWs;ShwH0cMTSUQmqOQgH1@3IR1F#~mxZ3+-^}@{EnMH=2>2p}>Qozv>{f7SSX! zdv&+jK4(xz=DxszeSrbh&E^*I7aBY9Q<^k~k6sYB-y004aKkC7OD^Yv=W`Cs2-v8- zPrMbnaGHWy3ptwsTF^^t^p4)(ouP-HL+`roE&n?e9$}I-)-}4{^x~QF?>afCrPJ)G)ijXnHi*KD#_7_feY|lXh{0_JcxH^q%9r zZP)$bW3TENVj08VsE^1T9j_a*tHfBY*KgadaoiP%rPH<_|A8iF-InPvoW4BxJa@C7 zV5ScqBjirQk{_eJqKrqYBvu`NWzEPu{Bd2}f%&Mqd_4EOAe5Ne@FtP&PK|uCVVSJb z=XhG)kCNi1`ieT2)hlO}&O$i_QX9?1hy6Lnwu)_a#TKL|VXR^H-ov5S^*3YO!{Z8F zJL#~e#htz8{QSyGsD1qf)zR%*nCh}bN}+{ll@5?+a9C~{nK zR=QLRBhL$gzWbEX_Y+A2m(3l27c#};F^bNC82VqwA`y1WVZo3h(l6D0ybJy0r}uSE zKG1r%Eb2sKv`x~nyx-s7IlaF-Sh@$*^la&htsbLuKBc=v7HS;>59fLB{+d(YDc`>5 zZu2(nvd<3e)6!nC`#K7So(J*IuBtkF&iBVXYyP7$t1GOgrQfdQV0Nc_V%H@T(vu+< zog+hkHy0lHY@O4`3%T*7+-<;R;PdBIo82Ss{%)+Q>0hu&=D_HMua}qK9AB8`muZ&$ zr0)bz!Nbs+$17a@E|K*GZK>+P#zai=g+t#2wM^~X@aFC^7AaY;{m8AYPZi?7{Wy5{ z9R?XR-;7U2=yfjMyW#G3@=C<{X0k-=K{5wYlM5o;21EG}KXd7H*#6YdswRf9AMa(? z^0J6{*vhOc{Eu|XpUV@^FD@}XwKw_J&&wqlJqKs6H?F^ZJ7zFR&)sIS;B^&{74Gg; zS87`{kM($OFvgI|_)Jv&?94L4XMv*V!fHAKnJWIvIe?sxDqoxY^>^~y)U(OkQ3sc6 z!is(O|D;x;1bJNkG=0QeY`mwT zO<};26+ot=RH*gCo?+a^zv0qecU=m(>scG!PJ0 z5oPG0abB(89#)sB*kgPc^>j`~nAvJ>+57dDgIt6mc-WraX(>z+QKu4LkZJaASKc1A zheTEGnaFi@*dWgIX?iEJG-q_VH4FJU@U|DE7K*>CdHJ`9jMnCFH^D@hxx9ND9CjYs z@Q^&*7QuX(q0x8bAU_9$>J{~Rg@u`pR8Nr5IZd8imR!Pe8U>73ASDIQOK)gD@xg%S zb)b*a?@8mTf&JbVYsilJHd$y3Au)6H}Tiu6)_?<$G0z zmpF(P)Uc;2zQ$hb82|E4aPI$~ZDJn`>WqAsl47;4p7-8eyh>g)FNSx7cZ`<^q4hDm z_|1@ap-{6(H2>6TeK1MhdAoQrtFZUC>mP=2 zr>No6GaCQL_P*HR{*>#jj#+9;Vw6}!-EWBf>jOnL5hQ8t}U_9tykS%%uKuJe#v zE^xru;hs;}@2+Uc?f4&2s8^yP-=0fiRy>ud7QehjrStu=+KZPvnOim;PPjPwEP!V; z+&%jA$k~T~T5kxmYK;b#>O=^k_3`VSi5uV1vAd?5Yt>&*_(f<>|6Q@@UQ(sg z&g6He8?QXRy)!GRYSo_hv-y~%b;DUZn_Zc22Yw32M{G!V=Q(}lPttJlYC-1+r#_F5 zll@Q3Qp_G5vY6Fvw<=Cz&WYfYx4H&9HCfqC@+Vw3FO2NE`w)A-(AF(UHTS@usC>)# zx7t|=1;(z6HpoT0{$#M*>8o!{%uzV}-1zR#3MVoD=M5We8y?#$8I3OnQH*!^Y4)oJ^RpMCaOd+oK?T6?Xv zLsqPdPFTBBJoseBA$j$Lp@^uUmegN!?Z-c49=9t`4p#VQc~f!an^m*i+ub;=m#-VV znplt;Hyp>BJZn}yG+}#RE%u0I@@`2q7Vxa&MymLpz{+Okl=6N3>jRz}xV**CrA#ep z&Au>(6_prV^AC{bs}oDKPl1jngLv0AfMsjeX|a)Ja6;ydEdv|Yxr7s-2~t5gs#A+_VrY2Hnk0fhTE1#HOcJ$~awUR_F3a&#Y`&*66T4f`66#K);`NYf{k z&{k*d!(9R^dqpp-MiE?5oj$1)ls8_bz zA_?%&DF2?V(Oq9V36bIv(G+DgRN2~#=hii7`$&xSk28j@>4VQMu9oZ48Y*9cRT<~u8 zpo(Rk8siN@6#yj;Y(>LRN^MZ*T6mrc8x;1B?T^_@E1pjr5T>buGCW;#8`SmJTJRvwU?X(cUvM8&4<Vgy#EaEtP%K{!-z<4`+hpktb)SVrSr*3z`-1Sj{2dYp1x#b^I4X(2{`7i)| z#g#ch|6r=zEav5);o-1yf=ZCrxrojFFm$YuLG$N;H3W#vh!K_7?QiMS3y+wyKj36Z{M&xt7)ip^e1*T1BLoC@&Ut!Wkd zJ2<_n;JkK0wWplaVWa$q^_ItsR!u!=622SqEg@!B_%tFvO#V}M|BO;qVTZ$m^lPtl z&L9(Wg0;HV@)A>7 zh~II5G`5miZMi=vGu;M$I1IP`d8ysNiefZzc)Qd1qXS7|A=P_U+7=aBkQ9Nys)Gzp z$D5Isc^rOzUiEesEjVEj#LrVqB0b)g79t^96qK%qOe$X(XzKnZ-Y%P-v>li`Sg&ayk{?9|SpM!y^T zY=mP1utRw?mOOHF23wq%CtEY8W4S{%SG12Jk|3DgZ%$7Uhe3(l_#Wn~dW^g;Qc)D* zvN;?kgavrO^(7p+jPoT-uQCZX*)Ar^O3PZmPo*YBN;e1GT5xC?>T|gRe@W8EiUOVm zFLI=xFZ=K$cu8I2z{VC4>Hi>i+5w#Dml)9$LAjDd=Ent^lBlTJSsvIrIh*%)uNp$! z4mugLEPm8m7vayDT`*zWb$~;5F?FFKpcFVFjzQ1`xnPV27We3gj~D~B4NvEN3KKhl z*rX*xIsO3q`TEW^u80qmetlm%^uv3Md_V?iDj?Y$gB~aEWzt905v`Vh3Pkd0el?{@f$~*V|`3m*NT^;4PH`8YN+@(xH6uo;!9K ztW)QL&K0jKyR^RSlID!H?^r<={^IvOBn6acLuUT2u&%ID`0Zkr>PhVGFA~c!OPmvI z_7sJcUU_`4KJ~mDjxhW)Pn&o?IX1-ury*gp>A0d>Pr~hKn8G7S^ijK3>Lm5q`cr^# z;Jgrgm$O3kM1IM2b;Ptnr&oaIAx}~a$%!GFeSrG79ephxaQj^J@`(@j*}rOpV?mWn z{RxkADTvGre)jvKM-<|_$`35*aw_<*@;l1z0-LzaAZiyNaFvud|0s`mZ=6|8%&Cnh z7~Fk1Fbxpf!Lfx_yASF)!3&3K8&J^I9Qy+ZmeoNyQsL@TpRGxyaDg@T-1+bhPgt2!9syqA8>L;QLF!HDNW=lsm)?c1?3ans`UANb0N7G3kF@Q@ zoMa5ZB@DoAPoIN=%d8_)sNotoc>xh?jhHIv*%tXA3s%Wy$Jm$)Mm{rNso;+d4pqe; zk>MgXU<$@VNt$_R;)z}rNCcoA-nDV5i=yPegNr~FZ~q)q!Nus_?eCM41|zt@l*pPX zY{K%{<4fRC3ijDhDwiAqd_2rYEl&?-d{m!G1rHyHYTZwerAg+m5w2cSl!`rA)X|X{ z9(W_U-GSCD!aMMw$t)2M0tHpXgZkISzMzdk{4&%+Bzw6&;NN64HGv1SUQH_ad3@pG zu~pUMk%*#Bkdv<>vI?_c&}>hRVmqWJZvt6{V@duncK%SH511SEC=(`(MX987KhXff zBH3ILDE-{3NSHe~AyO6;oV)^%yHd^yzv9o#66eX1=Wg7KVzD#0o0=wN$W!FO|E@mI z_3o`>s^PUrhuj2={!*Ep~X8>JW=5YVKl&E$#fnRgh2M=lGniS#*8rQT9apgf( z1X$)VApI>jnYM1BL-s}M2c8^D&h8TRfin7?cO6QRY2Za%C>bcWZlNoNgcEb|QNSb2 z79|J8n`tQPP#WWfV^Q*6q~I)OHys$z7L@U0ci>CohsNk>`?Wiy#M!}vO|c*i3in5Q z8cm)@MfDhmzg(jG=S4D}|=Rr(n~760V!r=$8%GH?Kh0uCu`dnJaxTZ-m3z0EB<9pVg^`7h^W8 z!o1qhK)M>-0dR&zqln$B^B}vi49e&4fZb;Jrw-I<1eCk_f3ATd@H8yaNAQGD z0+feS7K*_?HEIE6`EFQ@u@sR%qU?Tb!}oZ((NYX-|7eQH;eprtKSl)*SI`#L09#2A zCrB0S6l@lx2r?lQF}vb&Lh}Btf#VxYq_4OGT0tLyWolAnb?cu2 z-FXD^3+yCTQ|f_}BD8&5Q@!>=tWw_1PdFgp620ijY}z0k5V`l}kr|>15N;nudM|(g zNC0XKdP`A^q=m#vb5sde^3q+GAjOk$oIuQUm2k`$D3{l{-O_lpNb$xmU?L<;ihrc{ z&pe)Q#AWISZ#VMJu`OP(N`=1D$^W#*r9&&l*oX~_uoQxVqZRhGTTM0Z7$HTiHDiMN z^XU796a?*{Fw4g@#oi+P=GVrnv#GGANmdR2Sba(knN$Kc$c5l>@g|TtA(J)vSoJ3HC+er!bGI)oH_el8Tl#vxh}jZ>1K zft)caumTqT>uLFdOkXKFeg{V3kq&Tf<-@pxi2zw#JE#UKw(_HAp7X-?Ue z)&8$mkoJiF$)>`SM-hFODt~C|$#Ml}EqwPrf}BL4W5o;^VnVV;zvHYI%3boAPS5}D zCUN$13rk|R{oeePV_{py)bhj-9Y|Kej|E{43fP*S^(!`MHZBn-3}>%wTbJb7`X4gz zL#Fb_dl5uEAHG*3FqtvWUo;%R(KM&U_+_{lQ-WfiJB{&p8IrR^+93GZO}V9HaM}f^ z1zv$zTRFMjM%jKQ5?tpe|7a;ASdahqN{@XV$v5$J8+?R!ffmFf9uWneb_d zc$;q{cEoDhCXhStA#U;patPqw;5bo@Q1d9P?{%Kl$WJT!A9?U`PKt>Z%zB^&^y`5?Ow)2Yuw??e z)e$n$P%Fr1V2E5WwLnENKYLHhlD9@~R_0z_Lk zSRoYx*I{))cGaBXy?zc)xW!ybv38WS;jPC$dMZefV<@mZURqE9$Yqm-nOWy1{)C-% zA`(*X_S)b4;^+-KQ;;`6T)XC^x0eV*@LBeIDcl!C(#B4!;uhFYjclI;QqEazn5kvX zlcJ&#EFHLNJO|~}0^_lzH?l9=CLh@vIPqbUx&1>4Dr1BRBZ%#ig$f$G1RNqFKzSZ* zj6|G*|FL3}btRyf4^q$r965P=SR*q{m2egtO*}=7$nlp^w81KzRBYE;#RN!s(vdXN zirrLtXLyvBYYIHfx_>pyAo(*;<}TX{=13CdQ&DG`UA!Lu)qYu|Acd-i!nVS<93uw^ z7h`98HGrWZpiIztOlB38m}h+*7J`Q^X~q&(a~o+6gA zgQm>`xgY72#X_YC5$>*sFhbjnvgqBCBIpmC$b5mdc$?OI_mwVz+J(SEuiDuAPvcJ2WD^c)m}Vgz%{qJ z%p+)!Oi2TA^;FH_QEv^DqcLB-I+QjoB6KLI=!e9_6Ke;VZnbBJ@AxOZb0EWu@d?xa zYReF{$&m-IBa=e|tBmq7k+w`luw#KL1(j~h5aVBY;^-6`uQ*yK!{y5M=L#0?=$dJ_ zW7**3o6kw#%VsQ3>7h3*kX$oiY)Md=A88|R;S1Ent3j;7so*w&bzW4^%}QCT{KCpA z1lrGoj|0BN3>*(*LwkX4_RX8kX9^h%2TAA5+2xor-lq9c%mD5Z6-{$g@*maa_e-a05l+s`G{v2dPcoP+LWE$N^ z$OZv<3Kg3!e>fte(CN%8ePS}U5V#0=i-mB!GC4#)9Km~eQUZC;)K*1pD+VcWA#o

      QRDPIB}N8OoJgZv}lujByKQR|j-1`zxXlM<|2 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 ?0Sqp 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

      v@KRf0=(n{7At4kmK>jW*bZNMj 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

      )LvXY|maRe+y#OZ?`!Xz|D4 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%0D7VWK^9-%>P)|@{^Gp0Si{Zi7q zs?UaArvlEKRYanN{`W%1R{TzBt8Yr_JatSlyENPPyG;KM9{q1*sZQ11PYJhG{Ra#S zF193ltX+}Olj?B))hfTpgI-30cHx)AGY^X`B0nm4ILIjYF8Wsc$*0-Sl$4;_-gv{o z%%L{Ep66#`gi4HoxFZ~_tX1rJ{@Quv3hdm_vJSNGXs|*QblDwS1?R8?3R5!^1A8I>lfA6 zv|*RX@_;@aiI+$ESBf0mnzv?^r_<%eq`e&(_q)Zn=SKt|-sbdng~^XooI9>#buS%* z!&6Fpdb-V?rRP7(_pp4Ce_wRTO%IFGDaQk4W{M{ zBO~LJhr(9sa>KALiTr)qtuB8`Ub8>q1iS)9es^p*< z;Sk1IeMdGXV-zgCvn1GB+*MfK$?N*g($?|qLQ*|ZCDdn2VvS$A0jlRF%_xHbjKJ}J)_uY5yIp>~xR@vP4 zj~|Hyrs(*EJ9!(PK0Cec5~&b0fIS*nrrV5lh{w>gWUDI^d&T!IHALbLw2@BPtUHfa zPpiSN{hTgQrq(dH{?cZSQ{;jAl8uf_k30YSk5ag6|v)87yqB9-^6+d3jiuTG^ zfs`0Ug+Y2-F=V;3|L5~%qU`+$Tl1}nRU0 zq2i8-Q3=nMLPj6AeEb^g=Rhc~_$akd@a@;k>y`93R5rW}=ig;@E1EiN79-Av^MZ|- zZ%G0=PV75*@JAr=;9mS(P-k<{W3hX!A$g=@HY9;J7UCaS!C(yJ*quqhG%tga`flTc z3Sp-#;z0TZ!g)45lQbFZLi2{0xbyV&kmH*GgRpcZAdcM2rp#Q5t*>2>l5?$9GBX!Qbev$W7hsDlHrn0YZQ>lh+imclp70 z8A#WNyX;Nif(NF61msG)6yKvg;K>(=WvB#@B7`u7C~?QmkgL`KPVU)YP!*T zJ(i&?c}?{k&S%WZTDlyE_n?yzZe`j93Qu8N3& z$PIC->}Yi+Lj%r;#zE=wMk*b$a43ha;cmBfc zE0U%Xj`z|GIg7yBVGU}0Ci;gme1MxPh9Hg=Fopy~IUH!!uordjzvPq-q+^n#*57RdY@}5m_Sn(=ktf z?ZE@-a){8Dr0SEEa@M?}FzS#I%#n3PpO*eMDxN~(O}>ndnCzPJSd0aE``JE>$o^Tz z?4GD40Eb{Lp8?Iqc2BFTOQ-Ja3V7mV*b|<#6(R%kfrXfW66NZ@fK0M2TZMTA8| zQg2_Yx`qbyV%8kFmErIX>+q)oTgp2$!BQb8kVjVl3?am;aa5*scq+ku@^|w5l}rei z3uMEe&xcV$<6-5}{DnGi1FSpH^lfx?oGrQx_n1 z6;~w_S>F1*YbpkeH+C<+s5w)doivZt_c<2rydA$U^@=dlxkNbcQRT$10Mp&8soo4` z+RyDv*E5~qBk?W`{t~&^%}-3fNgs6Zk@Ip!dw^=6=3VMvqUxONCh~;7w?1CpYpE$X zK=CHwRE*M{nANr#fWZ`Y3M(XM=20Yz3ZXx{S!cC<2L2wq^;7t$-*#4q_d%!Q5!N4i z|6ssY#6+tXYX()ctckeGbs69;?gYc-SyT91oW+x*qLI|9tEzuns&DS^YO;zJe1kGL z$|&9!wb~)UH3Bq|4~9#U21I_hHZjJkdWi691`{mCJ|Kuq8D=RWmdbDdzd@3%;o>6~ z`KWrWJ^TPqFI~XP2A3e+ts8|b0d$0v#A?}tQAU+tJ!mpG@Cq1Mx>M`8ViPyXPYegN zM3!QE2137N3x#dc>%>qkVk0ViCE`%|5e+Jptr+2&!%|9YIIznCf@>IHbI-VvlvqlZ zr66vw8q%6|7AWWMv9V$0hE4S^X31NA4Nvk0+X#U$7YMom)2TX9(;4SM)Q2sZNO!Zv zkieNGRAWa+^xMgg^_YQF=mGeh_aDawDk-f>Xq=1&OtDGQQA0HR1ZiAo1H%%0D-Jh2 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%0A<$DLjrED(uC1;KoZof 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 literal 0 HcmV?d00001 diff --git a/volume_tests/src/hello.s b/volume_tests/src/hello.s new file mode 100644 index 0000000..024b33c --- /dev/null +++ b/volume_tests/src/hello.s @@ -0,0 +1,126 @@ +; Copyright (c) 2009 Damian Yerrick +; +; This work is provided 'as-is', without any express or implied +; warranty. In no event will the authors be held liable for any +; damages arising from the use of this work. +; +; Permission is granted to anyone to use this work for any +; purpose, including commercial applications, and to alter it and +; redistribute it freely, subject to the following restrictions: +; +; 1. The origin of this work must not be misrepresented; you +; must not claim that you wrote the original work. If you use +; this work in a product, an acknowledgment in the product +; documentation would be appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, +; and must not be misrepresented as being the original work. +; 3. This notice may not be removed or altered from any +; source distribution. +; +; The term "source" refers to the preferred form of a work for making +; changes to it. + +.p02 + +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +PPUADDR = $2006 +PPUDATA = $2007 +OAM_DMA = $4014 +P1 = $4016 +P2 = $4017 + +.exportzp cur_keys, new_keys, retraces +.import read_pads +.import init_sound, volume_test + +.segment "INESHDR" + .byt "NES", $1a + .byt 1, 1, 0, 0 + .res 8 + +.segment "ZEROPAGE" + +cur_keys: .res 2 +new_keys: .res 2 +retraces: .res 1 +psg_sfx_state: .res 16 + + +.segment "CODE" +nmi: + inc retraces +irq: + rti + +reset: + sei + ldx #0 + stx PPUCTRL + stx PPUMASK + dex + txs + lda #$40 + sta P2 + bit PPUSTATUS + cld ; no effect on NES; helps in generic 6502 debuggers + + jsr init_sound +@waitvbl1: + bit PPUSTATUS + bpl @waitvbl1 + lda #0 + tax +@clrram: + sta 0,x + sta $100,x + sta $300,x + sta $400,x + sta $500,x + sta $600,x + sta $700,x + inx + bne @clrram +@waitvbl2: + bit PPUSTATUS + bpl @waitvbl2 + + ; write palette + lda #$3F + sta PPUADDR + ldx #$00 + stx PPUADDR + lda #$0D + sta PPUDATA + lda #$1A + sta PPUDATA + lda #$2A + sta PPUDATA + lda #$3A + sta PPUDATA + stx PPUADDR + stx PPUADDR + + lda #%10000000 + sta PPUCTRL + +forever: + lda retraces +: + cmp retraces + beq :- + jsr read_pads + + lda new_keys + bpl @not_p1A + jsr volume_test +@not_p1A: + + jmp forever + + + + +.segment "VECTORS" + .addr nmi, reset, irq \ No newline at end of file diff --git a/volume_tests/src/pads.s b/volume_tests/src/pads.s new file mode 100644 index 0000000..d3ee979 --- /dev/null +++ b/volume_tests/src/pads.s @@ -0,0 +1,81 @@ +; Copyright (c) 2009 Damian Yerrick +; +; This work is provided 'as-is', without any express or implied +; warranty. In no event will the authors be held liable for any +; damages arising from the use of this work. +; +; Permission is granted to anyone to use this work for any +; purpose, including commercial applications, and to alter it and +; redistribute it freely, subject to the following restrictions: +; +; 1. The origin of this work must not be misrepresented; you +; must not claim that you wrote the original work. If you use +; this work in a product, an acknowledgment in the product +; documentation would be appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, +; and must not be misrepresented as being the original work. +; 3. This notice may not be removed or altered from any +; source distribution. +; +; The term "source" refers to the preferred form of a work for making +; changes to it. + + +JOY1 = $4016 +JOY2 = $4017 + + +.export read_pads +.importzp cur_keys, new_keys +read_pads: + + ; store the current keypress state to detect key-down later + lda cur_keys + sta 4 + lda cur_keys+1 + sta 5 + + ; read the joypads twice + jsr read_pads_once + lda 0 + sta 2 + lda 1 + sta 3 + jsr read_pads_once + + ldx #1 +@fixupKeys: + + ; if the player's keys read out the same ways both times, update + lda 0,x + cmp 2,x + bne @dontUpdateGlitch + sta cur_keys,x +@dontUpdateGlitch: + + lda 4,x ; A = keys that were down last frame + eor #$FF ; A = keys that were up last frame + and cur_keys,x ; A = keys down now and up last frame + sta new_keys,x + dex + bpl @fixupKeys + rts + +read_pads_once: + lda #1 + sta 0 + sta 1 + sta JOY1 + lda #0 + sta JOY1 + loop: + lda JOY1 + and #$03 + cmp #1 + rol 0 + lda JOY2 + and #$03 + cmp #1 + rol 1 + bcc loop + rts diff --git a/volume_tests/src/sound.s b/volume_tests/src/sound.s new file mode 100644 index 0000000..a52509d --- /dev/null +++ b/volume_tests/src/sound.s @@ -0,0 +1,285 @@ +; Copyright (c) 2009 Damian Yerrick +; +; This work is provided 'as-is', without any express or implied +; warranty. In no event will the authors be held liable for any +; damages arising from the use of this work. +; +; Permission is granted to anyone to use this work for any +; purpose, including commercial applications, and to alter it and +; redistribute it freely, subject to the following restrictions: +; +; 1. The origin of this work must not be misrepresented; you +; must not claim that you wrote the original work. If you use +; this work in a product, an acknowledgment in the product +; documentation would be appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, +; and must not be misrepresented as being the original work. +; 3. This notice may not be removed or altered from any +; source distribution. +; +; The term "source" refers to the preferred form of a work for making +; changes to it. + + +.export init_sound, volume_test +.importzp retraces + +SNDCHN = $4015 + +.segment "ZEROPAGE" +level4011: .res 1 + +.segment "CODE" + +;; +; Initializes all sound channels. +; +.proc init_sound + ldx #$00 + stx SNDCHN + lda #$0F + sta SNDCHN + lda #$30 + sta $4000 + sta $4004 + sta $400C + lda #8 + sta $4001 + sta $4005 + stx $4003 + stx $4007 + stx $400F + stx $4011 + rts +.endproc + +;; +.proc volume_test + ; 1. square wave 1 + ; 2. square wave 1 + 2 + ; 3. triangle + ; 4. noise + ; 5. raw dac + + lda #0 + sta level4011 + sta $4011 + ldy #4 + jsr wait_frames + + loop4011: + lda level4011 + sta $4011 + + ldy #0 + jsr test_square_waves + ldy #1 + jsr test_square_waves + jsr test_triangle_wave + ldy #2 + jsr test_square_waves + jsr test_raw_4011 + + lda level4011 + clc + adc #$30 + bmi done + tax + jsr ramp_4011_to_x + jmp loop4011 + done: + + rts +.endproc + +.proc ramp_4011_to_x + cpx level4011 + beq done + bcc done + inc level4011 + lda level4011 + sta $4011 + ldy #200 + : + dey + bne :- + jmp ramp_4011_to_x +done: + rts +.endproc + + +;; +; y: nonzero if using $4004; zero if only using $4000 +.proc test_square_waves + +mask4000 = 0 +mask4004 = 1 +mask400C = 2 +volumeCountdown = 3 +duty = 4 + + cpy #1 + beq mode1 + cpy #2 + beq mode2 + + ; mode 0: one square wave, four duty cycles + ldy #$FF + sty mask4000 + iny + sty mask4004 + sty mask400C + jmp begin_test + +mode1: + ; two unison square waves, four duty cycles + ldy #$FF + sty mask4000 + sty mask4004 + iny + sty mask400C + jmp begin_test + +mode2: + ; one noise wave, two duty cycles + ldy #$FF + sty mask400C + iny + sty mask4000 + sty mask4004 + +begin_test: + lda #$30 + sta duty + doOneDuty: + lda #15 + sta volumeCountdown + lda #$30 + sta $4000 + sta $4004 + sta $400C + lda #111 + sta $4002 + sta $4006 + lda duty + ora #$02 + sta $400E + lda #0 + sta $4003 + sta $4007 + sta $400F + + ldy #8 + jsr wait_frames + + doOneVolume: + lda volumeCountdown + ora duty + and mask4000 + sta $4000 + lda volumeCountdown + ora duty + and mask4004 + sta $4004 + lda volumeCountdown + ora #$30 + and mask400C + sta $400C + ldy #4 + jsr wait_frames + dec volumeCountdown + bpl doOneVolume + + ; go to next duty + ; in mode 0, 1: $30, $70, $B0, $F0 + ; in mode 2: $30, $F0 + lda mask400C + and #$80 + ora duty + clc + adc #$40 + sta duty + bcc doOneDuty + rts +.endproc + +.proc test_triangle_wave + lda #$00 + sta $4008 + ldy #8 + jsr wait_frames + lda #$81 + sta $4008 + lda #55 + sta $400A + lda #0 + sta $400B + ldy #60 + jsr wait_frames + lda #0 + sta $4008 + ldy #4 + jsr wait_frames + rts +.endproc + +.proc test_raw_4011 + lda #<(65536-997) + sta 0 + lda #>(65536-997) + sta 1 + lda level4011 + sta $4011 + + clc + adc #30 + sta 2 + ldy #8 + jsr wait_frames + loop: + + ; The top and bottom halves of this wave are 896 cycles each. + ; TOP HALF: 7 to move speaker, 889 to waste + ldx 2 + stx $4011 + ldy #890/5 + : + dey + bne :- + + ; BOTTOM HALF: 7 to move speaker, 868 to waste, 21 to loop + lda level4011 + sta $4011 + ldy #865/5 + : + dey + bne :- + lsr a + lsr a + sec + lda #0 + adc 0 + sta 0 + lda #0 + adc 1 + sta 1 + bcc loop + + ldy #20 + jsr wait_frames + +waste12: + rts +.endproc + + +.proc wait_frames + lda retraces +: + cmp retraces + beq :- + dey + bne wait_frames + rts +.endproc diff --git a/volume_tests/volumes.nes b/volume_tests/volumes.nes new file mode 100644 index 0000000000000000000000000000000000000000..774061d017f3b9d6e7d6800413131287bd644e04 GIT binary patch literal 24592 zcmeI)y=xRf7zXfnX7)bf*X@NfIU>k3D~VWK;|C%-jfLT`@gLYGgsW`DD#8tm z0t;(k0~5GLNWUv6m)Kk*2wF-|P&iPqFmle`Vz9Roo-N*ec4udH-rx57@cyF}#_04o zZmB1`6p@UWJle6!EURl=zLSTUJNZ8??GGs?7L$m{i>VS*HKy99$>(zTo~cSVy(;Z_ zQ0zFf__vn>1= zOq+woaZpYeZ%=-8SMxAqQ$OR=b~5YJxX=2$yO|fc&&Gc;9~YOlqdnWu;_tmZHe8vi zO1%YcE)<;!WopVaR8lW?CMsS)u9JCSuAfvabOP?Wn(zFz@IRz{ZL8w7drEtQ=dLeP zFX!54F4>#rOtI=&mE3Xbm7_(^p}nNZo@h4jrQN%%`TUK0-037QTx(^MBbV0KZ&}(P z_dIPd%?9t2R= 45. +; Preserved: X, Y +.macro DELAY args Delay + lda #<((Delay) - 2 - 25 - 2 - 16) + jsr delay_a_25_cycles + lda #>((Delay) - 2 - 25 - 2 - 16) + jsr delay_256a_16_cycles +.endm + + +****** ROM aera begins here ******* + +.bank 0 SLOT 2 +.orga $c000 + +*********************** +*** Wait for a VBlank *** +*********************** + +.section "WaitNMI" FREE +WaitNMI + inc NMIFlag ;Typical wait for next frame +- lda NMIFlag + beq + + jmp - ++ rts +.ends + +.section "NMIRoutine" FREE + +NMI + pha + txa + pha + tya + pha ;13 + lda #$00 + sta SpriteDMAFlag ;17 ;Sprite buffer is read + sta $2003.w ;21 + jsr begin_nmi_sync + lda #$02 ;23 + sta $4014.w ;36 ;Do sprite DMA at $200 + lda ScrollH ;39 + sta $2005.w ;43 + lda ScrollV ;46 + sta $2005.w ;50 + lda M2000 ;53 + sta $2000.w ;57 + lda #$00 ;59 ;Clears the flag to stop waiting the frame + sta NMIFlag ;62 + + DELAY 1715 - 22 - 38 + +.ifdef PAL + ; Just delay the extra amount PAL needs in comparison to NTSC + DELAY 6900 - 1715 +.endif + + jsr end_nmi_sync + jsr Effect + jsr FillBlankSprites + + pla ;Restore registers + tay + pla + tax + pla +IRQ rti +.ends + +************** +* VRAM Stuff ** +************** + +.section "PPU" FREE +ClearVRAM + jsr ClrPalette ;This clears *everything* in the PPU + jsr ClrNamTbl ;This should be called only when rendering is off, of course + jmp Clr2ndNamTbl + +ClrPalette + lda #$3f + sta $2006 + ldy #$00 + sty $2006.w +- sta $2007 ;Clear both buffer and the actual palette + iny ;Shall be called when rendering is off + cpy #$20 + bne - + rts + +Clr2ndNamTbl + lda #$28 ;Clears the name tables + bne SetNamAdress +ClrNamTbl + lda #$20 +SetNamAdress + sta $2006 ;Begin at $2000/$2400 (vertical mirroring) + lda #$00 + sta $2006 + lda #$60 + ldx #$1e ;Clears 30 rows +_screenloop + ldy #$20 +_rowloop + sta $2007 + dey + bne _rowloop + dex + bne _screenloop + lda #$00 + ldx #$40 ;Clear attribute table +_attribloop + sta $2007 + dex + bne _attribloop + rts + +ClrSprRam ;Clears the Sprite buffer at $200 + ldx #$00 + beq _ClearRemainingSprites + +FillBlankSprites ;This does just clears the unused sprites in $200-$2ff + lda SpriteDMAFlag + bne _endClrSprRam +_ClearRemainingSprites + lda #$f0 +- sta $200,X + inx + bne - +_endClrSprRam + inc SpriteDMAFlag + rts +.ends + +.section "RESET" FREE + +RESET ;The programm will start here + sei + ldx #$ff + txs ;Init stack pointer + inx + stx $2000.w + stx $2001.w ;Turn off rendering and interrupts + txa +_initRAMloop + sta $0,X + sta $100.w,X + sta $200.w,X + sta $300.w,X + sta $400.w,X + sta $500.w,X + sta $600.w,X + sta $700.w,X + inx + bne _initRAMloop + lda #$40 + sta $4017.w ;Set sound clock + lda #$00 + sta $4015.w +- bit $2002.w + bpl - +- bit $2002.w ;Wait for several VBlanks + bpl - + jsr ClearVRAM ;Clear the whole PPU + jsr ClrSprRam + jsr LoadTextBox + jsr LoadDefaultPal + jsr init_nmi_sync ;intitial sync + lda #$1e + sta $2001 + ldx #38+5 +- lda VeryTimedCode.w,X + sta RAMTimedCode.w,X + dex ;Copy timed code to RAM + bpl - +- jmp - ;endless loop + +LoadDefaultPal + bit $2002 + lda #$3f + sta $2006 + lda #$00 + sta $2006 + ldx #$00 +- lda Pal.w,X + sta $2007 + inx + cpx #$20 + bne - + rts + +Pal + .db $0f, $09, $20, $30 + .db $0f, $0f, $0f, $0f + .db $0f, $0f, $0f, $0f + .db $0f, $0f, $0f, $0f + .db $0f, $0f, $0f, $0f + .db $0f, $0f, $0f, $0f + .db $0f, $0f, $0f, $0f + .db $0f, $0f, $0f, $0f + +LoadTextBox + lda #$22 + sta $2006 + lda #$00 + sta $2006 ;VRAM Adress + ldx #$00 +- lda TextData.w,X + sta $2007 + inx + cpx #$c0 + bne - + rts + +TextData + .db $06, $00 +.rept 28 + .db $01 +.endr + .db $02, $06 + .db $06, $03 + .asc " " + .db $03, $06 + .db $06, $03 + .asc " THIS IS A DUMMY TEXT BOX " + .db $03, $06 + .db $06, $03 + .asc " " + .db $03, $06 + .db $06, $03 + .asc " IS THAT BACKGROUND NICE? " + .db $03, $06 + + .db $06, $04 +.rept 28 + .db $01 +.endr + .db $05, $06 +.ends + +.include "win_timing.asm" + +*** Dirty *** +; Delays A cycles + overhead +; Preserved: X, Y +; Time: A+25 cycles (including JSR and RTS) + +.section "Delay" ALIGN $100 FREE +- sbc #7 ; carry set by CMP +delay_a_25_cycles: + cmp #7 + bcs - ; do multiples of 7 + lsr a ; bit 0 + bcs + ++ ; A=clocks/2, either 0,1,2,3 + beq + ; 0: 5 + lsr a + beq ++ ; 1: 7 + bcc ++ ; 2: 9 ++ bne ++ ; 3: 11 +++ rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 cycles + overhead +; Preserved: X, Y +; Time: A*256+16 cycles (including JSR and RTS) +delay_256a_16_cycles + cmp #0 + bne + + rts ++ +- pha + lda #256-19-22 + jsr delay_a_25_cycles + pla + sec + sbc #1 + bne - + rts + +begin_nmi_sync + lda nmi_sync_count + and #$02 + beq + ++ rts + +end_nmi_sync: + lda nmi_sync_count + inc nmi_sync_count + and #$02 + bne + ++ lda $2002 + bmi + ++ bmi + ++ rts +.ends + +.section "Init_Sync" ALIGN $100 FREE + +.ifndef PAL +; Initializes synchronization and enables NMI +; Preserved: X, Y +; Time: 15 frames average, 28 frames max + +init_nmi_sync + ; Disable interrupts and rendering + sei + lda #0 + sta $2000 + sta $2001 + + ; Coarse synchronize + bit $2002 +init_nmi_sync_1 + bit $2002 + bpl init_nmi_sync_1 + + ; Synchronize to odd CPU cycle + sta $4014 + + ; Fine synchronize + lda #3 +init_nmi_sync_2 + sta nmi_sync_count + bit $2002 + bit $2002 + php + eor #$02 + nop + nop + plp + bpl init_nmi_sync_2 + + ; Delay one frame +init_nmi_sync_3 + bit $2002 + bpl init_nmi_sync_3 + + ; Enable rendering long enough for frame to + ; be shortened if it's a short one, but not long + ; enough that background will get displayed. + lda #$08 + sta $2001 + + ; Can reduce delay by up to 5 and this still works, + ; so there's a good margin. + ; delay 2377 + lda #216 +init_nmi_sync_4 + nop + nop + sec + sbc #1 + bne init_nmi_sync_4 + + sta $2001 + + lda nmi_sync_count + + ; Wait for this and next frame to finish. + ; If this frame was short, loop ends. If it was + ; long, loop runs for a third frame. +init_nmi_sync_5 + bit $2002 + bit $2002 + php + eor #$02 + sta nmi_sync_count + nop + nop + plp + bpl init_nmi_sync_5 + + ; Enable NMI + lda #$80 + sta $2000 + sta M2000 + rts + +.else + +; Initializes synchronization and enables NMI on PAL NES +; Preserved: X, Y +; Time: about 20 frames +init_nmi_sync + ; NMI will first occur within frame 2 after + ; synchronization + lda #2 + sta nmi_sync_count + + ; Disable interrupts and rendering + sei + lda #0 + sta $2000 + sta $2001 + + ; Coarse synchronize + bit $2002 +init_nmi_sync_pal_1 + bit $2002 + bpl init_nmi_sync_pal_1 + + ; Synchronize to odd CPU cycle + sta $4014 + bit <0 + + ; Fine synchronize +init_nmi_sync_pal_2 + bit <0 + nop + bit $2002 + bit $2002 + bpl init_nmi_sync_pal_2 + + ; Enable NMI + lda #$80 + sta $2000 + sta M2000 + + rts +.endif +.ends + +************************* +**** INTERUPTS VECTORS **** +************************* + +.orga $fffa +.section "vectors" FORCE +.dw NMI +.dw RESET ;Thoose are the actual interupts vectors +.dw IRQ +.ends + +.bank 1 SLOT 3 +.orga $0000 +.section "graph" +.incbin "colorwin.chr" +.ends \ No newline at end of file diff --git a/window5/colorwin.chr b/window5/colorwin.chr new file mode 100644 index 0000000000000000000000000000000000000000..acdbf0a0f0131ea340aa8109cb7f87f79eb758b8 GIT binary patch literal 8192 zcmeH^v1%JZ5QYcExriW;Fex@59482z;=n?cVwM9P_TefqG8mUvZ6$|c=T4Or2<}|Wu;>{5J2U@$OV!%pm+Q+eQT1K(C=6*$ zIQXG;@mZDkezzW>ul`gX!mzuEa1-6ji|gZBmBR4&2p{S`?zeuFSIB=os1@2gvv{@T zM>S3xjYh0VwUttubi5qKb7x5>fle)Dqhb7MILassbP!}z|InRI-ED>HVXtQ^6m{+k zJ-W$t9nVJIqn}PQV>DSe+{XY#HmG0#`un)hjb8{Y7%c|Q+>DfTlk znCs4;MaBLnh0gV?qkj8+tut&G@5z1@?}LDUbT9mJ3O!F1CClZ)P1s*@W%~*Jgor1H zKdm(Sqn-)yeI@{Yw~h0hXGJx^b0^Y^k8fVTd_ite|s=Z9z1$loH6;8K{FjNQFYuTHMMWE_=~OAEb80hl@DYcG&ozn-pbp)8PsV z|KGdbp8V%O=Re=+9((lg@#j4r4{XFxsrK1Y9$4PP&VLL=@DxERf?Nb|5qw2Zir`dqR^~@SgjPyzLKOC;-AHG06kEJ~w3`Qdx53zUx(E<6i&in_n3X@Y-lI|CUMfyq9g8?*q9UP~XDOufk&U7tJsO zbFtQ(EYG|%ms91LuDP5~P7m~jW|x<5)SRbFfd%`w^uVRSr9j{I*^(bec=4qJd2#Wj zmMQUjfrrZb*#!?PH(%K$U!Lxo+v35`#EJ?l%Q+t_`*OexexL+XfaP@sw-AXqOtoP> zeuztOFHXmu(&y8kra6p4PG;zjFh^a_yq5vB9}+E)`v~6Nz2QfLC4MTCY;8(J40pj+P_=5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TOt^0$g6#E^$NK?V!m$obgBsw2-=J21IZfVQx^H3LSqa?KwEjkD zjp#pq?Bw2H3uxNj4tzoXtx)%mO%9HKzNtD-xaB9Xod3Qx)aapTG@8^w?NwD(2R%7G zoSd{w&{K+Tn2;SAPQEfcl7+0ID@qo2MEWNttTO@Fp$!h20f-;W*YokyZeCAb94QoV zJ>AG=GCG*na0oY0!Bhgc0j^(2*7F%%O2ZkHgTpiGrIS z8qA2iY2`;Q3NQ0?)<7@QnjE<}HfDfn;MfrL<9I?*e+o|s8FxF}&)p8UO`?wQ*HH)k z+uENSc756uMfhY26X$SCoIf~(TS6?2aTM2!iHJjrk6V12ryzC8JdsL4X8Z#SH^lkx znz*6s+wjJIb#cA|HfZ4aGT5M-w+e^j_4B`4&x?AI$NKy4*R(RCVZ2Y#uPV-if&Js^ z^?t<=^X^cE)bupB#zlXr6XvND{Deuoa_mo6bzC3og@BkZ1kmqHH0^o@)EIg`5XQ02 z)~9?j01GyGr3cdV0SP>gK&=svQ$uq}fCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ P1W14cNPqyMVBDKN(8ac!<>c`g0&vn z1eU=G23qT;Nuab-+z=L4d_r5H(2_%7H%UQ*hrvs)J(M&`4@0RKBX#?|*$ot}Rw+s; z-)K`uhL2$3QvMTo9? zD?C$pA;Y1tHKR+c^=|ON-m9{2tL*a%d#A$S2i{%?vC?bvXBV)1x%KwI+ZF7__Z1X| zg$gUd{D+l7l&${6yjy0=CYEY>MDWC4>b|MhRj^J0T>L{rQWQD(MPZ)aCe94{8% zzDL*l;=Reez44A+d*ktX{^0}E^H|#3$*_baUVWu|*Pfl*<2$<&$@ZW={LsZ=BBHR7 zD*LoL@JTg*nT2x-Lz62N=B=5$%ab_U*f%#z?Xx2Jk+;6=-QrNnU}M=^H%s7$%iuL} zAJ1ylTVDZlMJh|aJaDCIZk+4m-g#|Y#ouQBI+K?0W6RP2$YoV~cXC|43@goFH^V$E zreXzIo_~L_pvm*yi-m|h5L>u;^J>jkOX{-s#|8C*Ip#XZyeC=P(WhnX#9bxKwD%)Q1usg7Gjb@k3%$3T}$GiKjMvV)_z;1@?V)=;F|& zp^R?m#vT98JzY1tJ36}Y=lPB`f9)RL60t-qme{g=%WePmy|!>$Slnw;EYb6Cem4$= zH6qgpvk|8oG24iZ{!i(CBYHJ@dHv93@FR!(@TBB{c@?~n+0TDOv7x>jA@6syym^P@ z1Kw8f!Go_PmVy+RPiaZdbXYEpZyv!vP{8n2#g`AS*1PyNB_Rnn8|_>CH0H-6|BDSj zQ(c;j1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNb3@ddtHfJ$uvT3Xp#$BzyI zw8T@Lx(+qK3qPP%zxhq!-+HcN-d|I%>H1(J^hOLGJ#u_^YYXW5?oPbH;PqI~&rLqI zf4!#pkH4B{)iZkEL|XDdGMUU8p!I2*W`L2M8_mu*HW)d@Fm1?>jb`5%9m_*rF%%^a z+Y*D*)6OXsw&}yewhHO}6ZL%hWRN$q=f_+Z$1}{lWf@>QqcNO716xsX0vzAX*7KGj z^4NCw_Z;X0Y^Bw{`&ReQP1|wA1z_9adLWGK{6R^>`Hif!4Ya?>yRPH9mYCnREZnb) z>lgdAaQ%7Q-^}FX%>Fc_#s8Y#sn$BUzZPrITBAIqISgHvMv;Srn?QvDc* zalDj>H01b{!{>MoawqI#xg1ziA3Hc9_W!`f2?O7TH?G$Z`*U%DChpI|1qOM?J(#ZV z|IK<{)QddU-+#WgV~GXhd5ZOFVm}zTejL5NUeUyS(9|F|H^-eRvA*0f`$P_Y!6Y6z zuFud693Sh2faos-(C<{TKk!tw6nZ`o=8>+p=OQuyYi$Zk52Wb}5_l4US|gsMhWe5K q36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg015ne1^xtGj00c* literal 0 HcmV?d00001 diff --git a/window5/header b/window5/header new file mode 100644 index 0000000000000000000000000000000000000000..d5ba8218db5ba4df8527adf5eab9c586d76aaa76 GIT binary patch literal 16 QcmeZs4VGeLWMqH=01o&81ONa4 literal 0 HcmV?d00001 diff --git a/window5/linkfile b/window5/linkfile new file mode 100644 index 0000000..a7a8ffe --- /dev/null +++ b/window5/linkfile @@ -0,0 +1,5 @@ +[objects] +colorwin.o + +[header] +header diff --git a/window5/maping.asm b/window5/maping.asm new file mode 100644 index 0000000..5f6fb31 --- /dev/null +++ b/window5/maping.asm @@ -0,0 +1,25 @@ +;Defines NES's RAM for any games witout SRAM +;Stack isn't defined, it's use is reserved +;Also $200-$2ff is reserved for SpriteRam and isn't defined here + +.memorymap +defaultslot 0 +slotsize $100 +slot 0 $0 ;0 page RAM +slotsize $500 +slot 1 $300 ;BSS RAM +slotsize $4000 ;PRG ROM slot (32kb) +slot 2 $c000 +slotsize $2000 ;CHR ROM slot (8kb) +slot 3 $0 +.endme + +;Define a CNROM structure with 32kb PRG and 32kb CHR + +.rombankmap +bankstotal 2 +banksize $4000 ;1x 16kb PRG +banks 1 +banksize $2000 ;1x 8kb CHR +banks 1 +.endro \ No newline at end of file diff --git a/window5/win_timing.asm b/window5/win_timing.asm new file mode 100644 index 0000000..c58fb93 --- /dev/null +++ b/window5/win_timing.asm @@ -0,0 +1,169 @@ +.ramsection "TimingVars" SLOT 0 + +FractionTiming db +ScanlineCount db +Temp db +.ends + +;X = $f8 = 248 +;Y = $7f = 127 +;Pixel = 341*Y + X = 43555 +;N1 = (Pixel + 290) / 3 = 14615 (NTSC) +;N2 = (Pixel * 5 + 1444) / 16 = 13701.18 = 13701 (PAL) +.section "Win_Timing" ALIGN $100 FREE +Effect +.ifdef PAL + lda #255 ;8 cycles (6 for jsr) +.else + lda #85*2 ;8 cycles (6 for jsr) +.endif + sta FractionTiming ;11 + lda #$ff ;13 + sta ScanlineCount ;16 + +.ifdef PAL + DELAY 13666 +.else + DELAY 14580 + +.endif + +TimedCode + ; Best + jmp RAMTimedCode ; 337 +_timedLoop + lda FractionTiming ; 5 + clc ; 11 +.ifndef PAL + adc #$aa ; 15 +.else adc #$90 +.endif sta FractionTiming ; 24 + bcs + ; 33 ++ inc ScanlineCount ; 48 (add 3 cycles each 3 frames here, to compensate the effect) + ldx ScanlineCount.w ; 57 + lda ColorTable.w,X ; 69 + bmi _noColorWrite ; 75 + sta RAMTimedCode+3.w ; 87 Write color + lda PPUAdrLTable.w,X ; 99 + sta RAMTimedCode+24.w ; 111 + lda PPUAdrHTable.w,X ; 123 + sta RAMTimedCode+5.w ; 135 +.ifndef PAL + pha + pla +.endif + jmp TimedCode ; 186 (one less than previous frame) + +_noColorWrite ; 78 + nop + nop + cmp #$ff ; 84 + beq _windowColorEnd ; 90 + ;lda #$00 + ;sta $2005 + ;sta $2005 + + ldx #12 ; 132 +- dex ; (12*15=180 cycles -> 126+180=306) + bne - ; 303 (3 less because the branch didn't happen last time) +.ifndef PAL + pha + pla +.endif ldx FractionTiming + ldx FractionTiming + jmp _timedLoop ; 339 + +_windowColorEnd ; 93 + ldx #7 +- dex + bne - + bit $2002 + ldx #$3f + stx $2006.w + lda #$00 + ldx #$0f + ldy #$1e + sta $2001 + sta $2006 + stx $2007.w + sty $2001.w + lda ScanlineCount + tax + and #$03 + tay + lda PPUAdrHTable.w,Y + ora #$01 + sta $2006.w + lda PPUAdrLTable.w,X + sta $2006.w + lda ScrollH + sta $2005 + lda M2000 + sta $2000 + rts + + +;HBlank writes : + +;$2006:=$3f, $00 +;$2001:=$00 +;$2007:=$xx = 3 +;$2006:=$xx, $xx = 5, 27 +;$2001:=$1e Best Worst + +VeryTimedCode + lda #$3f ; 187 + ldx #$00 ; 193 + ldy #$00 ; 199 + bit $2002.w ; 205 + sta $2006.w ; 217 + lda #$00 ; 229 + sta $2001.w ; 235 214 + sta $2006.w ; 247 226 + ; *** Begining of actual HBlank (on best case) + sty $2006.w ; 259 238 + lda #$00 ; 271 250 ; rewritten + ; Begining of the actual HBlank in worst case (glitches !) + ldy #$1e ; 277 256 + stx $2007.w ; 283 262 + sta $2006.w ; 295 274 + sty $2001.w ; 307 286 +.ifdef PAL + lda #4 ; 319 298 +.else + lda #4 ; 319 298 +.endif + sta $2005.w ; 325 304 + jmp _timedLoop ; 337 316 +.ends + +.section "TuningTables" ALIGN $100 FREE +ColorTable + .db $2c, $3c, $2c, $3c, $f9, $f0, $f9, $fe + .db $2c, $2c, $3c, $31, $21, $21, $31, $21 + + .db $31, $21, $11, $21, $f8, $f0, $f8, $fe + .db $21, $11, $21, $22, $12, $22, $12, $12 + + .db $22, $13, $23, $13, $f7, $f0, $f7, $fe + .db $14, $04, $14, $04, $f7, $f0, $f7, $fe + .db $ff + +PPUAdrHTable + .db $02, $12, $22, $32, $02, $12, $22, $32 + .db $02, $12, $22, $32, $02, $12, $22, $32 + .db $02, $12, $22, $32, $02, $12, $22, $32 + .db $02, $12, $22, $32, $02, $12, $22, $32 + .db $02, $12, $22, $32, $02, $12, $22, $32 + .db $02, $12, $22, $32, $02, $12, $22, $32 + .db $02, $12, $22, $32, $02, $12, $22, $32 + .db $02, $12, $22, $32, $02, $12, $22, $32 + +PPUAdrLTable + .db $00, $00, $00, $00, $00, $00, $00, $00 + .db $20, $20, $20, $20, $20, $20, $20, $20 + .db $40, $40, $40, $40, $40, $40, $40, $40 + .db $60, $60, $60, $60, $60, $60, $60, $60 + .db $80, $80, $80, $80, $80, $80, $80, $80 + .db $a0, $a0, $a0, $a0, $a0, $a0, $a0, $a0 +.ends \ No newline at end of file

      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 dHyFIfSK+9`X_0o)VM@0K;7JPh9B004pXdS(Cs literal 0 HcmV?d00001 diff --git a/volume_tests/recordings/nestopia.ogg b/volume_tests/recordings/nestopia.ogg new file mode 100644 index 0000000000000000000000000000000000000000..da60997837bc34e1fbd7de910e8c8e66f22810ae GIT binary patch literal 611153 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�K$KG)+qiI7aLgiATkJ9f)6DO#A)u;Vj=B)vxOIUg^o5`tbUY z8P4LE^?OE2AKShDr%@o)2AF!RQ2@6g^z4J-I=z)K{g?Zb`nUEc_Q&_9_DkU3?fn~# zX}j1A8~Yf;ey__-8XGSgojiZuJ!Jcz?k)k8Gco!5HT_2Er?btg&EVgTsSoyLG=HAM zSmylqQrB^&vht|tlqGjOyRzE;zMEHRpy4*?(Db(VuO9zhzR#dDJ~(L0xn1DD!R9HsuMfUH za&&i{-;##jSI&d&yqEk4Kk#WBw{ymW!R7U?tHbAIE~sqpDBYUSA5(lg_w<(+@5@ef zAA7Q5Y`L0$UC4%G_vb#Ex8CQ#-SV5F-qd!I);+6Hyk6f=7W-%UC9ROY-e=l=AIs?I z?$4!l3Bj8gN>RU=KXb+Iz{eI8v#{J{g}OsW-QWMM4O}A+e@wj4INxeBlVaWtop}JP zwF!P-=;(=x6tvpghnu1YgD0eDl-}$oIO(Ep&KBN0xOQb>fhATUZJ~~Z( zU-Wyyl`#(cyqn9XH2>Q3G3>&Nl9DRO1l6*nDtLQQVd0KtyO>mq=jOSO>i#^e+Oo|5 zm_h!969s$}Ri#Wr>)N)LdhU;WJrRVj_ESf%UKoeO&iPt+1fTG*D;L(qn@UDMo7LZ> z*><}7Wp}~;2a56&kt`I~_YCusl$55(m~gD`4QyQ76{*%%!+Ck=rKhNV4^x^4u}yvz zpnI%MlPZB9vb13uksir#KMH9O#B}6ZCcQui898gF%0%$p9wO&9aDW?C+Nojk!x*+8 zkDNBHurGV%7l|S{NPe!m3-rYkuz!HuKt?_InD*8k#|VI28TIZkVFAxT13kp@i)u#n zQ5Mn+{0^9d)CybGD=OK#)MZb6jHs>Edo3!*Cp8YKUB-mH0$P+W?WW=f;x*m=Yy)}U zE5_aOAFq32Qt>wJ543cl<-L)f=MAwPJ6p`9SXU3V&EGXRUoh|tunMjnTb4uKutOGc zy*;0o7D+(S3)d(bkH)=FyjhDxO31SPsQ0Nag16-}pidYXZqjVe*B;b1fSh46dZdgZ zP>;~n5{P~*gzM!jG`SqY(DljQk$ZgMoZcU`xs%iz6nuOhL5`h$4u2UZx&vorjK70| zHQS*&o+4I~3bmedUA{pXJKjz6>r_H<4iXyp*?0LP7Z+L%j%s>OyP_5mSUs#X9CQXZo5F*8NrC8qIV33P?EtklpJ0IUHyofP^Z4YZseJ`~b0 z9Mo%{fH2;GCQ^2UM;P&TeDnUItSD4L^25fbgv%zAxpM#%;Ov{2r@U^#DRefG1$R)izN2 z{_quUfwY4UUyosuiN$I|V3~M;0h!%%4M4Yn2KBk1^fL8GGHA350x%==eK29B5;rj! zrNa$3AI{$pNiyEm#q1|zGqKMWG;P(BP}|s)=1|Q%dwOD4fcMBflTJ+fdBQDUPj^{# z$S%N80{Q~_-64{)lba(RHIm9C=isV2_d*M`2UZOhtyZ7Evz`gkTarcG%H>bueWC~j zZgZF!_rcC{QTcrJfIKCG?3{MT#bmi5n)E%@N((dVi zL4#yY7qYC;(+HTRWyIzX!#IE3O9&uwWN7=SS#y;DgU}t@%VS}3MuDoqW=k4g8We$e zsRFttq0sBH5IOC|GDN%V?-I8bDHJS`N`;IXHP<4gCy%ja8lng5+}kIzPLsQHf zGM(sDftLy_#OAkMoVn8@cFu4?yn2EUAAY96 z8?$WB-WZ$2+49k+7AN()0=U)Np938230p8Mf4?f9S>LEK&fDyTKD-kEv>$&G!};W! zu`ra`Og}JoDVpr5W(2s6T`;fLLRb%mWUBV>q;sfort9($g>Tt_RNNk(QgLOATQD!wEzD%#;O%OpIM>m%|R@ge-#IiAEq60RiOvGHku zKb_*6cZ!~d65C;(6m!MrH#C1<&qYzbK(Nz2G9BfT=q|@VF zKg)Yg{v>;p0#62zbgD|TUkRctj=b>Xr3_mDP9@V~ybKVv=xr21?-|wZBZE$on?UUj zy;--687`aE-2C?CzLt(}Z-qJM@etGr^w;VIybcP_fHRK^lKtwjwnK3jZL(xgxl2Kd zTmT&~*W_r$RY9&}+zPy7D*i;7*PS6@yJbdxtR?B&tDP>5Bb?p z^!2{EP84XT>8PfN`^!G;BLv%MsiD9p?O)YF4+{5MY>Y&}Mi4vH0a&0B^|q*ST|^;^7j*Jdw96|$ zNz(j}nfYX5>Z3Dn`(t6PaF_x|q+2uo;)Z@vHMZB`#wCM1LdK*c=HqKtGb5HzGzy<( zAs%mDS#z5TBH4_>oLMVJBi{!AB3Pj;q-|W2<5|U(rGo=DECoc6jGJH90Dcv`b>2%| zBq&<_Rc|CVZ`Veho)7TrU;-$H>8v`>H3GAmPk%oE#S7i8>8o3Z{ecwwFCa7cr@#gn zj7g9Vfxh^Sb($g+(8NF{P-RhxGPwC|+>I|Lh< z6nQiOk$I}pHx>91Gelow7&x7PNmWP0nji8x%I8Cr2(c65&6l6^p-upaaS|gL03I4) zz$rat9Irzvj;KW`n+*Orutv#?NG;HcTd9R8QG@a2AaduOtL{o(ru%PUw82D(F?4ef zyL=JsH&lKu-$4nL%k@rtptRL%MmDdjA~=MMfPBs1 za(zSSP&tV(Cm;ul@Oe~w*)S0xhoVtv*h^DASo}iH-tnuZ#=3CnB)-4_?7O{Si7Jgx z0+8a>QM#^W&a^SwlX96T@hSmx6*>R)5oH8^P1=C{@fTQZ>8ZsI&F8us`?)^{cu@nS z)~4_b{tx%9V407=HPHqT-wf4{V%Bp&<)u;zMm9r1;<&h$4dFCa@_cxIlp|$xF3f+a zl3%vGFyCC|Hh{yO(Ful|ic(BL)hyQv?>tzl%teU=8e?V`ipdkqQ+jPS_yPdX5w+AW z$$%b-hXc?${8}#xH99aL=K+QtIawUS4q+;pMTSBO0iYCmfu;*ju6MqeI^0kRFBL={ zJWAPdGXLh|B&N5bXCHZ(R{vq*r=Q}pqqb#PE{>k{`Hj!}W2pre{LK%SzxU|>n>CeQ zkkWdpv()|~ODPpeEcoyi3XN8Y2sNyy`3f^~S3fwrppcL9@$122pWgj_#c(ErIg#i8 zfe1exNYkE-0HZjOl0Uo)xZluGE~=$gci&u|vRW{}K{LS|KB%hxI^70%ZT?Mc$$~08 z<8YT@DKyPAi7S?<7rSq)y7VFNDR4xm@)rSLuJGf)rZ_t2?%vFm? zZbGHiAvJ*XQn*g4^0Wlm0kR))(p^qm`~-4e>BOhrZUFeD1a7m5O(~dUB8r~una{GU zzP7T;qmD1ys^KkX1$`7i0CD@LyY#|0hu>vjK)rC$F=P%y;8|6BTF;NRr_HT|3V)B47l z{BdVmSA6?@{_>rc%rk#0o~7V9!i?$nv@=Zj`M<0a(5(%?!Gc>8hGEZ={B6~%)Ugyd z%W8ucl$##RO3`>)a~~6}s7V0*uS`T5Ar5tLQ1cy?c1>6s?R(`osc};XmH3wnCC`mf zx)PG5+VOH%e&*27P)O$=+5>E?>>zvqHem>gZiKmeoQkp;|F&f5jYf#}cOR!tY4a4c zt(|<;m82|xLYur+LBUxbj#kEc6zw) zKMoe}3|%W-{~-1=(#r7u+Y;hzEMO>!|4T0*o9#_M*~SP6M%da>6a&JUh^0JOK;`oU zftXGh!$Jv~CLo}!K}-2#$NOeCE-&{}llqpnf_q{N1SH@dg8+x62N2+7Zo!%{{mni` zU=VB;fhSq#(>!G~T^Dcgx%=DMi24#O+|KgO5Z?D00NurDO9Sr^24B#DHun%J+xt*4PN^ z1q4nf%6I2OdUkvSg`ouey0=Ta6T+Jp3G-xQM-w|;c8^o}$HembZt|8Xt!A8DiHRVp zr!@vSN9%stLryS&eGJ;-xh^VXo?9NFd;7iZok?6`x{sE~f5c-&y%gI>a+CcYtE;T* zNe{1eA)#P|PumZ(V}(3uc#B51Vo`kHTO<_jZQSB}MWBTh@wg*G&I=38Wr-FVfJ*fE zolYap7^U0NDLO@6eW+xh=H#iWiP~GVIB+w-e?sNBM)|6taY?^L_dgy#8Q<1BeeZ+v z>BL^ucMz$=!fD(7qgLcNIs$6tOP8(P>;o%Gj0YZn=t~HsA*17^lIgb}!l{2aDy!#T z8+w0@6_p(Ne3rpX`tCPNmQ8g3k*6(%0&HR+NtRb97MbW*D7DjMFW#Ype+D1Xx`13Y}ddiN1B`T!4)Tu9$n#CCxw zi!#LG1w6sNoGGhRUaj#41W1@Fv2ylUU)JNB<7K>SVz>?r{VuYX*hcME_Y3j9XAMsz z{*}^&)4js}1bO;SAD|s@Tg>;LJyRKx5}LSf;on~we6|Akh(@6|jo%X1ARq1#QabnL z*J&zY2l;>&_|@s$y@Nt0C7bin?Q?oEIn_@G?Hw@tmhjIYI>o3QXR_Lpp6>VT?%Cw4xFSkjRwc?{Aj*Rfi^ft= z^dfioYdVrIeJ90Y1DVB!jGEptGXFpO{Jj&mq(1&rUC}rtGflP;sHVXgmRe*|$(T_C zysM#fC_w%g)OMZx-I@k;#Tcd|S?HS$ng-BVEFAu-5o9^pnJ63a?YuPPgrv7+L$P!r zgRa@<)4?PTokSpFhm&86Gz%)1ri_q|*KjV+g>cHa&$WoleH6mF3Ta z58+l{RU@b2i9%%dPA%tC1-8Mvo|+SU#A|)KT|;W|X4Q+w-A{cV{WlMc`gLy25nzlL zukJqSDh1vZKg&Yw2?bd{`)MQsje>l#=gU=eqhn{GV*@LU$EN71#}AHn2iJF5CS$%S zYQIkKP|mo8GI1HI4K)_FL6UK9VRUEPBV`K#(+4(L>D(tl|GPi~V9|BXTe z1at+~=M=V`fr6PDQVA*06`NA!!>L5d1Jof|PJiyFSj8E&lN@?aq|96GtK@E8o zLf75ETTLtG8o)BbP2?Mg>hq@*N~DW|+A3EGak>`$7nLFF<_0X+CI$13dbTX)On3hG z1%#INi>s85s3ZNMD{AXjloSkrp9eu!Gi^oYDfxf~s8ac6fcImz5M0+VBZoxvuc@D} z<)^GZhWNpQD%512a^P5e@uZV85Q!>Bn*8x#HVZC(x^(%@*}f}(4^wXz9cHju7Zjd> zIN!?uZo6HF0mvY%ZNNpXU<<7}wXJ&Xa4alfICAtAJkrArhlzs2T2Yg>(=WJrXoi?; z8aXkklkh#DXMl57aSrhHRZQ_~M^=OprG$zJ6lJb_lW!HT#v~^pD*f#lV3sOy7Xjp( z_pJbhQ)PiwB!dTMaQn5mmy`Ufm|Vr6@L`>7rj|1;UEqFmKz$U1Drt9XwI}SP^gVg_ z28cGH1p!BdTW^W4ZW!04^wO--XWszj#YIc!1#9Nim#Ux2NzAt5RM! zM}%zn??=S0mp}s%Pd=tNr+be67W-^ z{CDS7_1}1L`$Kqm#Os@5O6V&9=$7pbVC30AYaRlf62q}i4va4&soTn>Xq&U{ zPV5WbuWA5ZF1Chl@Nsa{BN<3MEZ~Y{+9Y36$)|%lphPq8gTv0q) zFnr(f#7c`7#w*{`;Z4v2COz0oDPSq}tQ9hJydTW`QZ>;6(njVNvQzeNP1y<=RFL16 zuMc9GW<`^eXsNPsPxdSxTHp#)1vei0(mm^p7YVy4|8%c<>?t8RppS;Z3%@3GoEb~; z>mgG@?nozwEMbifc#4dvw`)Gh&{Fb8o2UeE?WXc%vUDiJK&8Vg0sfYiBOAq)AfcVT zn0w=pL)GVLOap~@Ol^jGNWQ(?sUL=#*UaKyo*%DtaX| zG^IYgwnu3bF%E6+9r5c3f&kuuOeQF3Cj<(Dgs@`b>`%*GWK(Pb0N8u0EAPhZrF zcnBh*qFz4u3(1Cw81(8I+vpyzo<+jlG+8?5_ma0m2_Q)%a62bffu}N@ho)S1vJnw$ z^E@}3^6+tT(z78o{!%TO3HZj~6EumB%fm2hwO$wSh=s4g8&1-1(p(+h-(sGf`)JC+ z>xCMH=K9N?j*Lz9xm)Ku#rxHvEsGE5=jVgl`t4u8et%J-yjrK+&rCb~MlowJ3w&w! zjw*xtc#8jQZCBe!AI^aHG7LuG^5OaF*|r5N;Bio>#KUy+4DN3RWeffI89RdNE*HZ0 z31sj>HXnH;#X%hkt~&0MWi86FGWp}m_&^12>@)FPHoN!AM!qbv34anGo1O4b54OSo zECxjXuJB%gjYM4ptVWI!EqQzuDLr{r^A-!Yfz1?%m96kt+1D{h`3SNE3qSFuqhkxrz;8erW*|Bv93;|! z+CqDv{tPOQ$tT(e#nAxf1P}F%G+DQT*+P|eyXCz7apz?pzc8$+U~!oJLkK&>(csTu zxboltT|j?)2&5;1kTncg3P8j~o%@STQT7UC1R^44dB~}5e2&SHo~d-9U@#T^YpF-i z#-*cs`rS4}F1(~82Hg-ZF?RrWQx2w|ML6^sR7iRIDtUm?fHo}>Ov$4Z2rb7Gi-xP7aEM~6h zqpK-@7mYP#28e3i5B<@cDD zLdcS2uORpY3=wf+r6J1)s~nw0ko#xID5BCh&IYFCG5A3DS(#i6X3*ysuXAjU>1sJ> zrtg%a5U(K5pBQ5$2`dZl0U&m|H>5`bB7T9hvZ`alls+qA2}|cd6bs2BGLw>9+i$m2 z8Bxi_Gk}Kya=~cV2VSp}(KiL)pik0}OcKg+-50fnWKq7bVBEGm)q_YgNOXnml8o9} znh5>a5+Fwud;z{ppKw)Aj>hd}zF{E+(>O0rqSnfaG;js)3O)dOLfj?2(bikm>A0>^ zKptx8X}hS%7M^juZJ|8MxBSOD8~uoeso>+=y*T8NO;*0-bY*|(pA<$)nIS@reRB3vw2>xH4_Qy zNV&5db*>mam4-qg>={}iSakpMgP0HV2@U%}U=Cs3xt*Y(Slqu&p`ySFia79tSk@oi zzqQiJqEtK(FiT|G=sz&gq6zsO z*9l#MPHGbdsHgFb84EFp?yw&LqE-=NSne@okc;37pkI_FD$p>7z#=`9x#uOc{iW+n zkI#)?+jF?!&04%PAZjINnqsm1(?vKPN&wa@D8vo_Px54Y{3jWF!_A` z3CZ~e=gA|~GWIPyB=Ye|sk6$lDr8&GK9#tT{+FJ4*BdQS7jd0G+Q*--7Omufr4{49 zkn3}-?f#`v(xf}bQ=R(SLW0vMTT0O-B$sC0E~~ijE1M1u3$Mq#e0fZdlucgd0GmkUZA{KOi(QK&CJiaZ8!1<)!N!!L_2L?#k8cKY@l|6OA-p|G&BT&#>S4 zi2ka4Hv>nnAn7!8vyc`EU>c%xn@5m$S)Vv2@6x83kS69w0h=!%a&ECGL%A$V?n+w9 zrVYVHefJEYWXmuuL+fYPdnw&n=mbh1q_prfZOvzzCp$D6Z?R8cmczJ6Nco4Lt1^wZ;b{=JhKt@1@{6w6-BEP2SZ7 zrRGZ3@8pFM(|5nfI~(Rv9(bsmx7?wSqx8Je3Ic=jQ{J2hiR{4lf{{zK6vC6@;S(*R zp0F)jh1ECKTq!%7%12UsnvL?MP50l-E0Rd1Xz!pGe`0Uayi_O%n`86QeB$w)?kO`3 zL<;E)L``FKf7FR;_I$Afw5W-g1j+h+@oS_;V8d-vs@vEmS;i{r2<=#!8Tw|~tY>iw z3mP~_|Ic=Tv-rby;bfm?CC91Y&KF{4f7V7#lrtEUo5g+=bmV@JwHTy?wUrMDMn2OW zPr+ZnT-)|c0OC`X9m8PltS0d?n`pX0{dMs?24d3D^59oZpn#AL5%z^Y+{LAf;W|>2 zdS$!3TX_S9gxjPMc99U~r1*`BJuM^Ez8~Yfv8C|djOKC97#+D!Oh{bw7)TKqN)ylY zYk7-}xntJiLl~{UO*suZ0&V5>#e;kUe7Ohq9jZ;)zqmw}d?HC|36YBK2lpyg76mt@ z@UJ%A+~o%upgup}Qe`Fz`1fIi4!EaHK2AcywhhY`KL?@+I~Fu4ZLdS{K|+lOm^ID& zY~!mvRGO|41cPA^mV7vbsT9ZtVXAC$c{!8#cII2lpqW+KUFPBel%I#n ztj;sxl?wBj2{xY%Lgdq%aWj|%rC^VmdExasG_0_zNgj-3Ki^5o7>;BAQ-XWb2$Tv^ zT3m9i|HL(u?XJo+V%<7{V#l%SLGA(zP|VUzy8^;@IHC7@GopjDe!tk3v9GSod;J*D zag%f;h8YEXCY)+MfHeGT4fhBk!)IV_I0n2w%NUQ}k2sQmts~T5rVE3o{W6t4@^?%SbESceOCxv~6WebU<^c5LlS|N+v z!~yeVU*WiR=?ZPogOVexfN6QbceW^7e00f zI(T=Y)?k*`oaU^xDpI(E1!5{cKSgTydy)+V+?Q>R?(fm{#ap?e)t~x#QJ+Wf;(lh2 zs?;U^DVzzCY@L5YgGYmnw9_H-M#m6UA;_Zm2?NUaS^^*WP@7BHv<%nREYbAGxU-45q%5bhe_vZ`X7eS@y#HZv{$Bt8iG9qlzGB9JX<#Fg z4Om~s_;sc-s5{om!~;Q2LM%#brG^9P6~olY0Zt>@ulSlN5_q`}>0AnHe=f3z?`Ln7 z(RpN~o#3;g!w5(9m6`8!#QX~h8&RkpT@03GMdMr?AsC$UIf+^{phaWpcaIk@OH53h z0hv?aj=}W~3zpes)e;%nn3h7RhkaoK6N>8pzFlsH!>1x<{4w(LePEF?%WBmq!B*ak zd!OznC`(~s8=?TM&>v&w)J1sd8L?l17XsH~v|xx6%RVCO#`gQgTx6*E~9d zNhdGl1+9qRg8;brf*3M#-mpeeEAnwwPFQ|9i^9X=!Sb)@`C_zUDeo<$YFBoJbsWgh zMsl1%)&7!{_SnCpe0Nr{r2qm=6 z86ui7Fwu(Ee&s%g#wd1FJE@IeT`9aMLTVr*-S6Rw>n^f8{lzz0(g~NxfM?Lieip@$ zU0$xb*xv4gFm7l@`Kc41oYhBvO22-w&^@dmOE>fFDhs|vVVJAncJ-s*o~7qAboN*j zgaxk;HqDYcNLi_@RBGj)@mf}Oh1O|>DYi6o&Z2na!Q*hoV{`(Y zhndk7TMKQ6-+lxgnNgt6F&Mz7H0TYj@BQ6g!29%4kNzpm&mF5e{-hcG(+B~h6s*{9 zF84>pjVE#G) zbO08y^N*jFI5&mNL_Q0!Xpw^M45xjgUfKx%GAn@;DVkJLscf`Bp@M*8!u|YQjU_Zp z698__i{&`t0rq-IiFLpR(b~;aidFIE1=O&<#POFAkAh5k6dc}6KII)}r}|T?Y_Bpr z4UKC!g@$JlQE`9Wf)5{nz=d~5wL~iXjK$nTsfBr5zRp<>8w#$2C*8dJr_weJ{x`wU z=XX_q+aM8~blt)1Z?TL1arb<%6hE2P_F=Hpc7k1l*Vy3Zd}=d;QhWqOo$U-AQH;b< zGEaFjCWAgC465n<-M-n3@PeGCgoagr;%A@h^-6tj4_C46>gPecjrN@>qW!O{7E&En zd4U03O|C5rqi@6=gW^JENMj|Aw%P#NzC*?gpDjgWb4OE>akAlyq4R8b1z`1}rq~?{ zt`Z-`HLPaHSHK+nrD5nzCS2*2dd_{}kz)q{qEv5JJo*JYMvcOEb0~K0Lg0k<`NzmX zKZj3|^q7M*nO4p8I{9yiV#lYnp55M?iv+UGc8CXu+HXG(uQ`JL5)01`0Dv;mw`JlR z5qY_3>IZ(lZNZV5S2-{C*+!f!;sn**I%Dun^5T!9ViAI%i>a2FC2K*9(M6TER(-KUdxUWGfWs@Vf66gppksjYipMR3#BZZzq#4Y}Z zf&w%>C&A>bJj)K$75Eh3O>DlZG1ZtX7)rR{Gpw{{?aIAOiBuKq2w{?BEkPQZYw!8F zhF;((o*~%J^4PCw-RzL}sl$?YTdX@8tF`X)b=O<5gEyABl&tN@_!4tckRZk!444rD`KvFvdb%t>dDab%g(gyq?P&!@- z1L_8B*Lh-j&cL953HU&4fy$TL`*%TN$Q|(eh=&*H*>~)2&luJ2)-!GWch>*vTX#Nm z|My1lzwT}u#Kd7%W8eiFoJE^>Oohg%;o?^CF_}Mi_P~{>sjD?n_X34ce&uGO-Onu& z_8a^4On~P`nAqq9a-MLclu3CV)_DbhS)GVWw(s(sM zt>Dr99EThVVTr9VPU84OK+JPeX9B)+Kh z7j0rA#<6ljiMoGZHW}0Y`7Y@Qm7=C&cRgnci2S;y=5No}Rb?-$ayqPF^)WABbWacN zqyWm0$x-Ig3^V95R@R>m`3QQ}41o<{BaNJdWmz%CgBY4Z!#)DTmUV z(~A|*0M&1}g}beH@7|sbKX5xF+Hx}WVi3nM+%7BqZ%|hC?aF!Z7??)}R)M3TBbk}<)Cs31)DXJfBg{;Ww|l*-ECJ_<|>1)nNL{U55n1Q4n&Z1~*SjD768#x7)wQmL*Y5;bJcGHFu@ zElMRWEkui=EESVVLP(n^Mky_n7PQG!Dp9C}g!!L4dcW`c&-*s+xy!ldKIb{lex4&6 zj_#`phOCkw9gqP!2c{-(azG3$(?F{Nzq>)GPobVX zIs26@&I(KnoV%DN>G@i`O5lUH#oz5rtBcB5 zpLuk@zf_M!qMBP$g~eI7?#b!h+~{+^Irkof-Su->bk8aE+73zCP3B7-=vUv(>1cbQ zxLHogOVOj#(KM@mR(9w+E#H7AfgA@XIUGyKMN;fB(h-t8kmX58@iVCt5p#JM`wWJm zlSn&BYJ7%dcUr*M_^fvqmk2XshIEqCMQdol|42aR4z?mq4^ni7jGsr-ZTvy1RMACgz3==ko@FxwAd>v;~j6<2Fv8 z(Yy*5w`vj%P!{S*Kd?^D)aVNr5*TZ-TSDlxfP%#iJr(oaxwF7obNTDsm znCLzsI}9iJ3pCQOnB(HS$o#wDZOVrzgDCm&t&OLO+5B}|=R~d<2<{N-6>SqkT|}F^ z8>9u`8`3WAz|g59xvl{+-=xgLo-a zZ36g?roC(0)4#I{)EJ-R=5}kXzEr(n&r#*wmutP02BgtzB+%qr62lR1kUxBr4Gu5l z%Mh4)d}20reqsViJRks6FtCs#r+}{@YhdtMzX!BwqjVS(AX-3SqG+Z&I7h#MfF=}&kB-W+}@ zLpPguqon7Xk4<~C{{G)~gBx1W$cCuHVjE=_IHFS{dBGaEw-QSZ%ZlkAvQjuQtgccq z70!s}q#SzT?fuZXEyCN|-4WW2)%O~UP;g9B^&puHl%KC_oaZlMgZJeggJQmd*h?)z zgsD1U6QLixMrshe36|>%Jj_Gly@GY@C3j#0!!vUq6i|Fc<(0PON#kF#3K|}n22i7 z+r@tSb8IMFQI#niPiFro>Y|+XD>_JeiOo_riLo5H5svl`Sq{nt84OB*Ai>#6d7S4- znU|CRay41_Gp!c0k0lVIvF1G)Lx>G;_`AI9^98r3Ui1B1oD_?bK9yM5`0V;pXtHzE z`&2`fpp+=QThLp&F*{Jv!^4B)0cn)}{Yh1r_WZH?-n=7%8*ZjCR-YeSIqA6B1NTzI zo#;qO33rl?`fBlHk%ftjn}jU&gcGE3*kk|qB9*%GzMbF|B~lEPGW8MPRC}A3Fo^y; z>St!dlR(cgrHVHe>oO*i2tl$I*!T_l%a>MSoh7*j82+a-5U%rah|DD94E--nv+`?! zWn*ZVd)vSTv6jfF+uUyH^lBDIUJwTg66=J~m4HQgkEjtM%O?qqn(Rr~I{;R{457!S zA17xZw04Tg>bI3mUZ1c=REMAWKhkOJ|0<|;1|WGW2kIgyLOLfeSsS8!KiWnKBX44v zM;$$V0z*2Gyb$OFml7MV>m|=IO!aoN zH8pWzco`B&Ilq{`~p6S01nIWY;-VdRvNY;N@uxxvpxCis!Ds{|D4kGIR$HTS_8=3 z9KM;QSMMR3)#QDfo}LN{Y9SN8{D0+Yt}rkkSoOG2Sk|lkrKh*mEipSgIhpJ(%+|u9 z%*N6ab@gU!^Ia0i5ow^E`HR;Vuca5w(@e91lwz>$Dcm=@8Nqr@NT5%No9@+H&7(d1 z@b~=QyP2}rF6Zpo24c(#Pf89(Tq5=02!+HbNN7i48=6}FmK3RG(h#)+GuZBdY9S4D zV8Ly1tlz#O4IC@mr(-W*sS*sGK5RGA6>p=$q)`%ZUVtq52RCCTJ~03y4_s4_$Yx@x zJyTbOQX%+;Ec?g5`%Pvx8@zkQcQWBh@ktFv7srnSUW2xQfAt+gS2PlU^wR>0i`E&A zOp{X~2@P2;7S(SDsXtTiDTM(yL-XhWJ#Wk7^UK5kdYOmEjrKipBkWKKYc&) z8N7H@3jVHO z`#C{o%97iBJv@FX7Uuo&-gqfI|OcV(;^yk;N$a{y^ zN2{Z62Qj22bbcSWLiEle8Ea&O9XIS81b5ixb(vm1lXityEZhQsM$H2gD%41aE17M4 zKD8?(^7Q^)kSlxR5m?4}6J}JD_6}6O7`Y?L0gD_!Z>V3=jj_-doIF^~3DpNob95&{z;Tsf&Nd&Y@SYx8JBNu5NhyFuQCIHxb?pBHh-lxts1#yi1g(*ts>0Qo?*Cw6 z4(2B3?hwjYM{ivCYAHKZTQ11+b_HXW_+zJ0R&YYc>BB7>Q{|VUIJcC}bMIqgmThuF zjelH~6EtEZ^37L6vKqAwHWjBR5?=Uo!NLXk!;>DV@H{SdN~+x&dwhImdWhGG4JpYX z3Mor|Q8Vr0&dUDS!+KAthxc=sxun;iG`{y=4bGaz0)9tWj&t_3?{+2LVG5zH(9lbC{|4Q1D6_kJ#{4)7W z1r^0S%bQ}xk5{gkLiJeO!8AQ!uQvbXHC!%${b%}OJIRQZI&(i`6LtgsZ4uIn!W2jm z{EAOnl{!9WZD`w>8#k*O+WJk+@O4{+wUDu4KV)vW`A0(CblL*@^u7J9Qk>+%k8AC` zc~*iqca`^LHc3?xFFu5;Es}lv_pEGOFTXRNBDWY1^b7Bfxxe#)adQ5Av73KV#4H_O zub4lTn0#jP?C;sOh0?q-&2;|KiU#fyL=EoDKT?161HF>IWm>@BO15VKW!Sb|P~z_G zTrsHeVhlGh)pzaQv6ZORi@WBl^tWxzpRpMwx0hDW%{pHCFuGt-_kq@s?4zzPEqN!0 zmZW&N%Qg%)oZi$nH!IiRMX*;-@y0#r4f{W(_g#K;t$i$dNwE1=nd#YwERK8HESr1i zi&dCH=HL`V`ZukH_wy3P+j`LU!#%s+e5_K*Jb5Om&qr8UxHE9@O2hgSHoNA#3oe;W z?qBja_vdA&doMoTI)CTtnA4Nuye9pQ=?%JH_*QD!!juoE`kbxXex0n6TU-`9W9!}D z8JUMy&7q;HHKSi{JYJ&kcp&{ybTjap-d~NDQuA-;I7>%p{Cvy*Ei>arbRwZ}0KyHB z;PH+PQ-sn3L%r(t`)?&RJQ-hxzy3ZLQS#>2w@Dk_5?V}!K|Py))%C4+k8IlzTwDC- zY~Q^HTdYG$eBZRkU2ZQ~v+I4pmGs{`g6MfFsm_sVlj3je`KIljju&Hf;$JLO4U38S zf2Z4Dnm5*`9rWYThCgGgY|VG9zy!UMdTZl^TPD#zo%clC*lct6rRQrp*QitYf1ih} z9-2Y@ouvOJ9^$2n(}(h4tC=}#M&ox}(Ox5-CJ|wR{f-MT@U;+} z)w%Yiaq-m~djf|(MBP}RK*}bNC(;{MnR?SUc-a>dsPj|zn;u~?;?vK}eAS0+ghHvH z+DN&>-kS{1(D*-tdK;L)P>cyWg#xD|Ud@GZt@P-Ek<-!S+U8J0qs!BV|mwCz*3t2h;W)jUNna zIXL`dxz+R9xS-h}s`4;gjD7uWL7k!$8G04fIo9Wgu~i)uEq@IB?y6OIK5qt=kauTB zPGP|P8GHXrnd8-_?k4wZlG7uLuCV+Qb#?lWpCp9@j9kC@tgKAv{4opN+&RDFV&^5r zklBHWpKhtEtV%Zi82AtIR^)H__rgUuUcy6FyawgzTQ}$1z zUw)E|f}tMqnws6g^R}ablL1>TqNLFH0_b~T%c9ZBQx(r^1=rWEPylY&iIl7#h%pr; zbU>;CA^H`#c+*a3=jBRSQo5T<#)RiDtA%U69NGDP_}t&et?&D{&U99YmRz-1XTj8M z3f^+?Un+lB7}dlftPuiPc`{OJpF4lj_{E;e)@b6p-y7)VWIj67h z#81DmWLT~%&biilN|-L|Tsbm)XwHDz5x2l!Mn;D#bf=xPNc!wMeM_KFI8<6alYW>t z@283XvvsczrQbiEnLj*t$5Nd)rMq*L_M~1dlHOW-xVby}wDM%T*_jwtGi|iv$qo4r z=QZyvuB~<{t^lF&#GY7)5uU$|^LU|rgJ=K{e|3NSjyrVL#v1SOj!P5}u~0GoF|DTT z{$tyqh8qK~d^?P4S4}!;XUPBgZPP(RGW#<*801hm+UlA)dE~`_9NBDy*zO@cNg>AL z+ja^oOS-qq%z*4PJM!b=hep2Go!OkM*{Ngw=|35ckiw;UDLPj|Tt7$B%w}p8hMmG2H-8DZc#rv*}iQ-{CJG zf5g0vy#8o=NQ1?tY1Z>{FJA2&d^`(dqtk=e#@d%vB|Dey=7K(yKR9{!=952G*x53= z;vOj^g{+Vgi;hTFZ`Gb^;qKqrl{9;QRqwC1sb{P=opqU-adAVk^M*pbU%PCgACGpq zZqA%(y?3|xS?^yDuN^hkt;$~y^(638mDV;vGgR%<+l~7nKQ3nRS%A@2#hK zAE?t^-M!RwZ*ZY*fVX3Cw27PfSse+ub(+e(Rq>jSl=1rx?!1|S_Y6D37T9<=_S()) ze>!s@#AUD2nv#q++BPcn;=;s*vqdUtE9f!GF4-Ke2q_U=@rLUj05vNQ3^&%DDCATcbD{K{BCIp`+j-& ztBUMUOV}-~nZa|lM%F2o$*%q0o_A~Kz>YV}Y3ym+CdIq|6f8fz3D5phWa5%n>+xfT ze?a)XYh52x(;bY{^-j6nJaXp2&)Knq!iKhivkgXTcRpact-jzruXFaSs<5*$H#Z{m z5i){-VWefLtK!*DjEmd9?w#(I*8fZ+AZ*!#&{V%EqX)cW!sE`BwDtK$uH6-T%HC|1 z|HXhQo74I%&zK#~Ta#gYvD0%rE>h=e>L!~R<%&u@W=A5w&#cz&4!&<4uXjj-<3v@@ zZhDtXS&VjdFaD|`oaXK&uDZdPT>U@>4u-A-nVhIS8V1r64*BuJAv$(}oI4*}!FYTT z=pLL;SXwg;eeQU@r&a-#r!FiwjSXOp(JLX8oM}7;vn8C`|B~IhKSC%FaJgl|Cs|+_ zfJi!q@z$k1YZupUO#vJA)oX9s4^+b|)p_s)fn~jW+cj=RQ-qXAu50bxlAeTsDxdhI zSXRB~&YbDsxF-ug-*9B@T+`D=q-9Eyy-=*mU!X)V4cgL)fEqT3Z0Ofm^2 zm4&Q}Yp0KRdEbMz12?#GvHrHpTREo-P9M0t)WK5pRAPen(_F1Z{E>|{5v`a1tely> z7{rXO6EjcWwevS`t^U2bS~WH7!{@bMue0A|ES0gUXDwa4>XM(?@ytw>Kqp#dab?W? zyPG_(T;AN~GozEW`$TF=$~~{?V_(PP^CpcHxmkgAhg_11LoO7L;_os0-(>7wcJ1zM za86}-|8Ty4XGioQcNsYaB{Ebl>+H_04jhrL!Taq|j1fO;Z1}PjA%t4AR&2!r&>`4n=|LurQ-`at@r6O!J0! zJR$v;hNxNCkSI(8&{ebVLl_oeTaevbf>26*25H@a-a%mq0xdpI6Rd|bC<(^Bp!7xo=%?je~d+XpPOlr@U4HTqFEJIUt)io#llG2cb|7LniI2a0{ z5be?RDi|rD!+soJuSe6T$QZny!ki|hiG`8N_oSN@54=?3ZQ_$XhQiv1Cw7_=a!c2j z(zv316llc!)B*+`Bh=saRZ;HhH}xYkAK&bDR9DHCl-sYH|LEt{Zfk-Ye zewl3|hrmsLHz)6RlW+b+vjpU32xxn>B6l|jNvu4|e49F3?h5H-;UUEnr#WnR9?Gbr z7!5VoT}zC=zl=;ja_l8?$<30E^u?&pmOL3+UOW8hSMUR!g4ktnGr1<_iOM%PIvOI^ z1YdX`a?rR#K9nrcN=W*!2cY?|b_kUvtAJW-y9oMp^Aa$x&2q7p#>y9Pt5$<=lIt1| zkdZ{s%2wYnzE*x8UDF9sE=H>YTa#czLNM6IEG>`rg!Xgc zl>|jcFs=i4H&d=$b*TF#itPj`O8!Gu-LO7pMxqv`kIHoUZ~)VbHYv!R-AVcp%kf3D z+bWXhm52mzun~;r(6GH`#4bcYf|Y#Lx&sUiqqe{U_{3v?MBhfJKmNQ@)9v+`axQT2 zobAESm)Z(0zZ_iUp;naQqIq<*Ns;EIB=o1u;B=?1s`UR@`hrJ_66o3JOs!Lh+l77MI0W*CZbB#MDl}`f$aEs9fxcK zNS@4x4ZTd|8BDbb190<$Tjaii}GCE-VUK)8>WOM)<7n*W(w~umyFjcr+ zNWh|qUBZ13x3ELF6P8LackeS%C{fhV@;GQxbou91)2ReBD=PUZ<&&PxSZCeL2$aj7 z+B-PQTL&%?`F_HwJ73M4;DBHtw;}fQR>XWmcN`M%8^q=~d53N?aE^k*;-!^eLNK(E z9`MJ}NyiAW8Ws5+TD?p#sSB22PpE|JS)>_PC~e`3nQ}U+Ypee-<7SL=JeiX_fY~G7 zX$UNeAo)k5!BaQ*T3Ffi68Oi3f6>ylrl2Sk1yY!B68ZHz(ILUXrL%_5n^CK(n-UPu z1QQq$oXReEIl6F(f%xv0*vbC1S{QxMDc*{&%VNB=W>errvxcuq%(!q1akcNd^OuRK|jK;ANg(Hb>O(tBU{nP8DATJc`9*3i5 zws;I~AVJXPh-ld0>1$t_+Q*Y8*Z#aXTVp}?&uipU(ir-Z_ZomA(Ay83;lKIA>tWV( z7n8n*U;wq9(M<+&Lw-UzQB?J$mle{|+=KirI6^vd99O{eHzZgQ1C>VRuI~ql3j76% z3Y@^OJ%h45DL{5q1Eel01ls|JxY`T3r(O!(ln*|n?n<6X7~bs)>1-#mNg(l)r|vr% z=_zu^YfV!prWh~Esz_g<#ayQHKHFOvK7c3-2e;N+ee`y#M zM9GKfg~dP==6p6q@;QhQK1|$}2?#pL;n6f3BKMh_FB7rrNb#wB3NTY|oIE2wq`byf^inIYk!m4T&KM#lr?JB;hGn_0+Cgruw=;6Py_! z$3vmaQ7&Ibc^Pa`cS_mW>sq&5c%$d)`ZL4E`6+fTvuDg{or;SFl)QJ(pTR$U$D0iV zCNYxN8H8DygtsIeXLYcWurG*{5kZdyB<<5_5>Jdx7oqAq6D# z52ToBlz{Ex=M97WO128#^@vf`<5TCm*|_y1;ve z_%Dd`fvOm?it!`K6lN!0y;fX(JBW6$#qkkNt_}Z_B-NQDCa988h(5r1;2%F$#JMNz zH`|w=!iL3yaE;QPpuZ@&cRSNx@{zoKj-y542IGc;p3Q6Y4z{f>O?34e{q}ekEZ=Z& zdeM~6$j_=uE`HBUDSTMeTg;~Y>R+jKlt_G7e>n5eJVkG4&e3V$#Oid{AUK4ADL*qEdM=q&8&~68XvckTR_I z2gDjrY8tO$Rx-Z5=%@&JYO$!}y2F1QKnDqa-X)2KAlGp!Gy68MOM`wcm1H4DjO)ck>$y1ir?PC^$A zr$aN}F|xa1kZs?_7KbBC)}GxOzz*OLH~^Q@adPDuaX#4+lNc2j6E%sj7~Yqc+V~+k z#Dmj76$u71sb6gLY#|(~vYT~unh5XvyU(YP*PviVX2+AzoQ9=Q7II4WC+n=6v*1i@P<4smX>8#M*;w>?*pLqlf^5IbO)24tXXF7(-z zhQ!8`uFhSI&GMTuTX=X-a7-%F;O@VTzy6b#{_5xaue>B!50Hn~0TE#o;WuEE1jLo52<1 z1anoLJ8U?jum$a)l?fPd3=}7nuXVxx+Cq#F$;kW|IZq405Yb?>0 z{<)RQXU}8l0gvEgHj+~=CM1DkR*rNfPaDw=801`+qEQeRo?~(Jco&v;g;$GrKTvx6 z>1cnl-?8)N2Ro}u)5T4g>W98}4oUD3V#BTZ5(F=~^tG5%k|$wOq%qKXg+b0E^z`HB zNS`Y*Bq=5P#PX6mwJYR~^xbwm0k`IN^qpI<$CZqtqw~kF+pte%ifLq7UUGO^3=$)SNxm7W2QVCQRJRW(QYr zKf-k!bybP)DwwyUetY*xZc^oz#){k+m`2d8dk!$>;gwwy`NQCcq4sWP(3E*;afi(b1dl zGjHeE`W^&1RAF9oI)X1IR*?@Ne!MiiJ2B@OmTMdX8XP-LJSOWIB`r5eI{p-;^!>^w zF$a7Hdcxf_>eD79AClw%Bm_z#0z^iy0Q_qJ{vh>m3!(L4?NW@H1%X4N`&b53v-hDc zYF5D(knm}K@aQ`LcNifgEkMo4N!scNB?B3dorzfo9r{8ci35T14p@+wjxhJzKssW`=+ZUJ6N(j z4P||sf=4%nmaUw;lmr;LP?cLFPSW^FBU1XupF{ot3<=mD=Pp+wefdRjspE_cmqJ(^ zV)#X!c?RD+>~hpi0j+nN>irDNN|ruw%Q*^{tDJzDg-PG^9T25|1)(!athGt)&XDX` z65_}is7{tCne_k>gjr z$a}e;Nss}})}rTG^|~(4lJovVB((u z#R_lW6lCF`7x?_zs<=ahp+n+YojDfEo&ZB2D4-bv1~mOev7?K^4pVTff9Yw!IVr>) zhP{!I+gC)11FBO-@!`a_4NWWU%KS1W?^NON^4`k3Zt{%H1AwcR$WC}k90Gn+nqcV3 z)CSMT6)2GPHH@MS12DQ2zW;p6g!rj(S?~+`W+%5&U7fG~)J+d^_Mx4c!M#hgE9TzG zoD+0I*h}4v%71-uOp)d)={S6RC=ojwKzu+o=*`1Lo}<@XC?&d>1S?-kWUn21L!@t| zX_McJmZpgj0g2Yh83{DMwOJ~p?P*Wjk(NDbVmO2;;8X&Q*k63QpF-!s&B*Vz-3m6D z^~thJIm)@=@Cw?edov3||FzYu3vPSD3@+1}_v{sDQLGm~z9GSb?*rsU{&J7Dv)5T{ z;yCWr9h*`;&x!8nBsV=TrR;3$-OfA6JnZ6$FCP!2R2PEJI9bAK^qo(IiX((Gl31jO zbPE?7bu@T;*{4XTp}uQ<1r+s(c@mdT6}RMb&rnC1!3>xlvC3Jn-YR&T*62-%7?~gG z%X&YH)jl4SHE00d>*m9xNlJ=V)%2v2jJ99y|B60T2Z$5`B?&dtfe`Vi_sT&H<5HBk}Yb@_dDkY??X)}Iyh8>z4FAlpql7(%;dHFfpn@{Ea z8PyKpNlZb8$atEBKwLnDr8bu+E}C?l0>flqMp5RDz8G2_?^qlA?%2shwTKn-at^6~ zlZL(4M9GHGK9&D$tY1G0S71n1l;V;yx(%TJcz+wB!Mf+)Tlk44uCRx65DR7rKFQC` zSskMNm6Gn)23P&99*a+wHyE6Bn-5frhaQpuPe?mWXugtTlITf5tPPn4C+^yslPo0C zrKE_@{8tE&4@bL0H<76^eBaNIQe8a}kB#_Z?kY#Fu4}}B-fxP4cF||T7 z93ZZW)LE%0kxE@4LIy%2CsED>#-beUJMcn5qU2IT9mXOB1c0gZx8ua26(`z*9Cq2e zM{GuPZ*SjihkGHDX>#)ZWVUX(i}1{3&d7ijn|?4Q_eQRgk`6ov=ZD`KZWk|_;8;w^ z@)9k#WQ)rlmm^Y00eT4$G`{>D7*W^Pr&SC#&0vh5WgW-G(ue> zlSD_|@eN^UePig3E*eTfpE@obF1mG~I(||}-}mnk;q;niD1;YKwvU2g>p4>`B!^u{ z&?A9Qa^#M6e`lX#Lk0ig4|XR{zS2*|SUpK+;2V)*$|_s#BnpojM&1uWWLvJRbyx;c zEEH9c@b;I^yo$(i;PCt#?~|O7`M5|NK!O8J2D(XnZmu|Y1dxe|sEyOknjf)D%vx{6 zP$p5ApbRgeJy77RT#A$~e*g7%X(1G2LSkyv_-F}IY;pMYrA3Sn8ZVB`4PU${Po4c= z$h!mQ`CgSc>I*3xz_rJyO9&&$L5`ZneghtKGn7+v-kgNRI@@Q;x3S&=M&EOd9E0fRZm`m-08`+B|L2^qPU=P8JeNOG;x_J zrVMg4V0(&T3BSeI0bL?FbbQCF&mvLw16S|-_%2V80mzGUt0`rtzxo8BA%NL?dbga< zPFSbRLNRyr7w1Uuwm>W?j@h*e^?0jcK9l9i^nF4)dI1WXfC5~MrH_fZXqqBQ&9@om{gh?4Gg7Qoh`HA9-z@(71NI82Sqj_o0*W-&3Z=u)MUBUrjc4=H^_UDZuj_!7d@aWqB%fU_(+-+rYWhQrdKHqs0V2_0A6W0M(d-q{ zSti8A*4o4K92x;wfCJNz8X3`Sj(!vn)EG99%wS(q05#)3yHNYae|JdDYYQDmjfWe& zc7--2oCd)#M@HnZX?_4>4fZ$7TjP5W8c&Ad01>DdzOuOJ6vYi$z5=hoHhqZRUYJf2 z_pkyhd1OrJ1}>WVCh60>r?CTV!qHB#ESNJcf-;1=im#he?b0$n`TbOADFd^6qQm(* zk*5Gj#k#$mOm>%%!(T=!WJvscfLiNR#D_yZ#uwwrJa|4=jzeC7LL_-@KSr@=A%Ip{ z3e-3UCh_|%qonw-Cj&|o%r+^HfN9UA?Mv*`qOH|Px_nO{f(4Oq_T_K7<%VvQXnbMU zY?Y-P*qIgC%0`$-Buf|*gv77$s?A5^m8l9AI7G0pR?&{ZDlItib zk4#F(&!`qobc2G-^Iv+U{#A33=i&Fx*qt;bN<>Tr=?4nyBANIGs+X20Qo}oteHxZF z$G0gygl3=g`oWaLf8@pjw)P%7x$@zg!Vw!blKdaTr#%Vif1*E6FNY8l`O;8Fi!8Fl z@D?jfay$fRSAT-jI`A4ZmL|}Uyw}&WFD=9?nb;f?d&E+mE| znPivwYXElNCzb*+=2&gjCIQIe>5}_Ekg^C8pfqCm=&=v!6Q2RAqu3(iL|~TK<4cND z))RoDI66PiXhbYnh_pdALee~cxvb{*OCsjxsX&R5GX zl5!m1RJL<+-pv}}#)UIpT84|HNf7qqBLF%5OmaYE5efT$zQFPs_V6|ja+yXS9ki?B zS<+dEYYp4IuLTx%(g84?uYM`ZPzNJeg+~EkT13Fr?2_b}%8%DkYcfNd)1gCqm})80 z*UsLd3UdXNIe1&Y41a9-(abIYD@<5iEp{G$ADgYR=Hi6lf+5VQR-w+8fUIdGx;K2> z%zP@JMj|cXGzz8tj-Q1y*idBL@$`hC!MF3Sqi*ZBkfcShW=c`M|RCYN*oC^it z2aGGC8l4MMrdGY1w0_~<{a>tIO(askXRY#+@>z2J+?LA{+k6{!Tef{JGzm5A?p5WA zUk`R4%)27VEcE&F<%=gX8PXsV%;t94T_=zfuv%a!G`xlN;OJowZ|}>5Qq)O_vjHuETm&VkD>DMac z%DH;MiDM3Jfw@S*KA!oaW&)34uK*N2iFjYfI_Uyb6_6ji$<{e0Y`Brhl)FPZxwzQj zvmOE}u17wNT=2#K_`|{_9ZIzm9rm4ufnpNm2#5)k(OmkaR5(a}T_njZW$O`U7>Ak9)@iZ&0gmpe3b zk@=xyn4Uzw%jO{AFq77DKKTrCj1$ zLP9w*B{vyPM60WPWC9X@3>lH);|;UY9r4{O1XElD zito-$>3qkzo0(tgYLOvh>p2)vm{_DF`De_ZY!nI`dX;|n{RV9u$8tyS^ zwKPpW6}IE3@okC#orv9E`o+p8Zu>h^RWXe{B70>H7=?j~gpsQ+o`VJW7lbZ1|BH2q z2V}*4&v{S{QI;k_zrGNn;W$v~ zzli&8{fc={H7&&&ZBLZcyZTRyIkz(OT*-c0uI^4L3k&#?O7RWVPM?-R&%qD`)-T2Q zM}kclO*HwT3D=)xdzm8@2tJ?1+MIlcaitqsO#lG<;ZL=Jl$8Cb^p}31)q8(Aff<(z zH-e=w;e_WmA7uaextGTRQ?twfrFZx8pI<6vj95!QyY7=bOLyJxujQONZ>i`;n<|6- z9*Ko3@(=Ad(KX(6^*~Wc`tKR0=4bqj(i3@p8F@ngFQJZ394DIhySB-jvmceLs`EZN zdNp`!iXer=3K$>A$H5)xR#(W+F%vTkSzdyH5JC1M{E2^JID?}RNicY4b|Bf6uxHrx zrtw=6cKe1e)b@_1#O+^w-9d3$+8Yw9U@i6AjuzmY_=T@hCd?wDh^ z&kzmI0O@=$LV|@yUoguy70iN22t}S35E*Imom^NQ*0FWB@CI4A%@{QSy9omhMe_QP zIJu?|8So}Ktiqnsf7uY^r3nEBHp1dBBPRh1rE$s%1dlM79z=qw!;jgCAFPObK$Qq; zl+p(SjeELCY9;?gnhZZnyC))hA^Ek`_~r`9Da` zXCA4I(C&k_|Je^*VLn13?FS&Np;<9AJyn-OMuu=7eJ(&+hG$b%x#^n*qmpAyEhjI{} z+^>?)hX-(*C>nurb}I@ftVr}}Bf3e8n=T!<7`whax^FCAebVRJ-pif(8`z?J1j!3f z|Bntbw3)63i85?N!B|8XMFuGEcqWX&if9Q-j9-oU^(%uE=^=lXl;16bF3W@M7}A7- z4IfGlHLO(On$oZ-S-G7M{892Q>8X_FkaecrU8YEEL?!}Y-QY!pM5~#Yg-8qKVQfa< z*#rkU2@xAcs{A|UU%cP9iWY=XY_J70={1TB@W??SXntpx>%(|*usNm7$^wTk$?KOS z0^xPN1$MN*enh3<-k|sCn}y% zRzWIEKo3|6IcFz%9mx)C;2jp*PJu@)5$#Hw$(7HTJ$XTzHzS57IZp=kSk_;P>?d~j z?gdX(MVAO<`6d4%me!LMs#fF|@cx`)z@js=cOQ7|->232^F~~$QRX8Zp6)y4vfmxA zoxE6z4%l$R!c8-d>+_PIU7y=6j$uwBte~+Ro$RYyht8#h;fuxEV7*9MuW)Gd$f4vg zc?^dx5oz0~Ea*%#Y)Gw2Y|vtKO7QG`5G~HgTX>SvnwJ|}oN@T%i0|>>X>QM?CX#D_ zsl^aJMjp(GB%onSDx@ade+*P2M*~tF)xdzd7)->o=`mX&A}0%is30JSX9LJV(m7hC zC^Z95++&&aMUp-MGXOD2pjEDgTuQADi;xY7I@Z71bGh_{90LZ&m5Y>XRk`HdK-Q3K z-L+*5QNA#~h&c)%*@Z_5?YA;Qd{jAZXzR>9LA^L1F-TfQKvZF3PzYP*{Cb-o&!SYa zO$uEv<~ZapYFuZ>^RxRlR!NdhC^)pT{eG|lM&t4-Lg$#PQ%OFd=y>hw^n?zYWXd?)=tp{#740`p0URk7#vm;b+-0t45CDvjdbV2hTTZ6X%VD7A=6xq<$htHbVv@V!j{y#F&2R8Z+WAbuppcPUyxzjY3o?!%56D1^ zL7ovO$2|7hJMBe;8W$}eTIf43ja_6@fz(tKoKdF(%=6aMr@G|kA!f(W>yu$ z4FW;v<-oiJv;0crO5+OjB!LhCpx-izUo8qH$CxZlm`#_1hsJ0)S($gbR7|l0NO&(* zkZyKIf*MAig~Al90>=-r-fp`Yp9b`oEHSLzN_Mhr(J_#KP+De7PCT6lb+w7X2vZL5 z)abW{`hD}B`(d&hr6mXvzC(OoFn5M**ZaZ7)sAx8B)z2^yqf|Wy`A*f#MR_m=0#*9 zH_5lKlOw9%7L>3_7CvNixS6`PEgV7 zMG4u73|?f)K?X#wiZum7D7STAZeGNk#E{@T1EZ4@DHJB6ULawMNN^ynPAu~@ut>km57h1$o zTjbF`W6MqVavsT*ivk;P;;`cTM|k|JP{+(P%J%ScUnRab1mv9NX)mjK$nkdEv{CvI z2zp))j!>aR-*w~AS;zle-+c7?&OBL`+`-#Tzvd>A8wEL%b{ZC*d7^<8;A{y!A`5H& z)%$1M3YhBjgjMqUBDR}(@%2Qch7U<4lIJ=O?_+^ghI>K0kkY6hj^6PXP?*}oQiH{y zqz~m7j7ijtc!>LFnEkiD0mV+m6ly5w zenbA9V#^?K>U&|JtRSr1s7NEo>+a;vJKaBd%(oC@=2C8)d`fKPC3v<_P`zk|m;POz z2=;KTFzXM59H3)@PZ`ViriwhuNDN(PE&6tKkc$0dEK+H#^6O)`$|k8$7(C?iqjmdz zqgm2qBp3}g_L)2R<7^1%z5Plf!}f)T*HsNYK1qNPUVdI`YcyJ3_~zm4Rq26_Q@Zt| zeY-6q!;*6H%kDcVKEgt})&$yp$X{pvp#ZkdO6u!6Gm_k1%u;%r)<4xhB9OBbqK~+P zg4vZ{WOpB`94P*}q|4nY-#DM_KK$h8M=bU;f7kSslgggO&(_D@xqTiBo9VrA>cq}@ zc9X+4AZn$-zR=PW*PL92%|wP=_{aUhN7KP zz!v}d*DT1q4t8!=_r4D}at~NgW1C zR6DDiC?ok6Qp6|CFun$O`$m#Wi{*P_c5rgD*jsoHSp@0>$qN%~5nEKVBrgB8j?p7T z75Kq#n}pDgEjNbVQF8V?dnc_wTM9H;xYA7NkEgdDh9h-BcRC~qzULsVhb2r57G)oL zAg^m*^U6(b^YpJR^(_(&97R6tmvYSCLntGnT{K5$pO4!vQUHjAFJMg5^thE?*uQy) zv8n0s9+b3UKqm-qN@SYF-G(4rLG zbKe0o8de(dAhB^NDJ0OrDNJH7_+e0@Fx>zQM{@y={Dv2EF`jTWMcGRkz%Yr~%Jhvd zu%bZtvn#C09TK~|;K%hyTg&pe+DQf{PF!Ye`|ISQvAvAB1FU-l%1~3VWsuUuH5?Hg zvea47Ke7;eyj|TA#Q%XZYWLr}&;>SHeA{`=Zm}h7;N&z``s>vS&A;UM^F>n=r#bn^ zeA9tgp_~nelqTmGMU1VMi-A`F;f;9P15#c1>brLF>fbAYI3NGntnm+n=2)uA(vl|6xN2WT@cAWfiYbt~Cnj zQ#s=F;QdxasC^Tcht+3pF9sm&3(x=*wtZbE+)x)b6bZgE;x`N?aabz|15p9CKTknK z>Ou{5Lf&mD4W-Fvz?zSkl|R?rX*E)yU{DIJtSah~W5uF$Pkr4}vCpSZrFf9AGZgV!lQ+eD?GmUr-^K=s11VXs&A z6r4P#7&d3XyBB5#8$EfKJmV3~)!lW29!*5l33B0z2sx!1#m3B7#zyBdF7=D&HzRJTQz@g%aDyR3)(iyz16yJl9&<@ zk?4?M1Sm%(uGv zD7be+))MquH*lVtG1aw#Ke-tIDIlJ~7;J-ov^WzHl#-|7U&p-5DHHF9A6*K$z#E`*k$2ohp z4^>CI|Fc%$`zO?2(po_psge)YmFnPNtKbMDoSdBJy99^Xm268$N;`D+uKAQXYr};{ z!E8bBW;(37evUNsBP}-Nb>R4+ITHUVD}+R{?WMR<*p`dV*D%MBZQhyT`D~C%xtNfp zm!J;uT<5y7_tA?1o4|Otx9ef}`pn`-pEj+%c%i7Mx@~)OI780C5k|Uj^C8H8c`i9? z?_KlAk?jXO+P%G%yhVc}H^1Iw=XW0~XWxxuziJgIFqp)iRpZ?i`wf##39^H%De)4R z3n=*G?LJVgr>GM<7g23rk~v!oJGIXf(#?Ng3@YfC9qKQ1b@V!VQwwor>=x5hi2zu? zs(N1NEe@;m1S_of@9TP?kM38xfDI@EVB!6+1q^o;0#iVGG1&X!v2Z517ZK6ihZoIa z&o$deA@c&&) z$N+aDkANlY_hg%Sd;9j zvX!kQ6_ZMqlC&rlBSc9QQVG*asSuTH^FMF&`~Uy9&qwpN z`|dmU+;h%7>lJGxhZE&_7-oAH(zHO}cc^Ofy_4UbwSSTJ9M>IPVOfT*h&RzTh!{3x zZ16ha23eO*D~>w5U%fXKcs$Izaz1f!G;GHq0Eg${bTD-7mer6 z1UOkl8Yl}*4Pby7K|nHa4vAOpwD9@ZbC8W|$w-C;Yk|F_*#J^Yc3|_43!(|lH#FoR z(;)$t8}<_c^eS!ln7P~UY16Qx`x9-(p!YEeKb;u-!?kE{L< zD*=b`&?l9~IiCp7DSEnpEa0!)-}1;ngrLayt;}Ty;tBkjZ@civ%A8^A$8B% znc1Uk{i=sd&<*ehD0Mo$4xnqd^}@cRzY-GrxJm~rE0TDK=UnXdEj{EByX(&$uc~N^ zwF6_H4&3WkPH*}UQ~PaA)B3R}Go|#^I@uo{KURfyv!`)?V2DZ*WU@+1Y7WO7q}{e5 z`l7$PER+^qEZivlsV(BEVd=fncv!B8RVrjcv;I;4HfVf(bekqWzOt4NuP|6|Q-{WP zaPU3pm&j%x1%=nW%zad_t4z>Iz4cKDzSef34{cPvSd{6W8h24lw2Apyu)X)`*~jnC zVAdZoq%vg&y9I-8{dllf$;;u1)$rD&3>FgTAeC=H=DDSb{!x}!JA?zd?S(BC)zOslfIUP;&{aSqC(&)8v zv3HuAZH<_r{93`ryPTcl9&Tmt)6We~{;B=ml)P1TC{^ccy6!VMwu!eu?eh4?kiC^} zV&LJ4iX;a0Q$KrbHvy5GvA zuBqaoOWve;^S8GhC=p*wFQQy*_@VNjp6s}w@SlgaA9i+MV%0oOQ(tOKHa5yr@Y0JX zB}miAo*B~3vqx_n0CUIpQ#v)UqpdXgd~7-Yh@VdMWAQ>i0h?D*aO@w~5HGrns5L0wu|ClBi#ee-eNfs)AsZZ{#eM?_&0pThT3N0L?dE#QoG zjlH{KUJzSZ)1CacQg73Pg2IBpb&5@U9)?~nS!Vb2-QeAOw$I%TIV?-ja)PEOzn2Zd*l6U9{B7~O4T%|^j0+G7F2nSCm1^} zVBQ=mTWcn?kfj;EVB@8G7E4>tRpu|4&hkC0+0wP$yg>JMQ_rUu3%S@IhDiKC^K|U9 zKSo1VE7EQXHhhD`>idh12G}uC^Svib=`=4o$T+wVifZ<~lKmlO-*CC*l_`N(?#k0@ z-^2Ru?~gpyvHQT&?bV-OPphpqeWLu|vU8em-u9LKHQ4(h*xbAP_L=WL?)2<@nOYN} zJNbIDWvk<|er4Iz_V6nfvyX)=_h?HjIczcL`J;B@gJsFX>3r&V&WUM%x9Ue_7Jn8$ zU4%SmdyZ)zE1bK{bv1rr!f9c&MQWrm2CK_w)TO!sw@h<*>dTF zz^>EJzO$PY-h4FCT8LG*+_x7gRCXN>0P#Ef56#Xit>Xnk@Q20RYl7k&p1(rKsP?B^~qlR2$XL>I2mMMBcz_VE zpk?5e72A7$&$pJ1K2-e_EHp_I8eVIo9!D(Ne^gQAZ2W_}53bJcB*OL5xZJY4`Elz$ z4M_+pB)K341tS1uN_#G!@)NKF{h zY{>g=lv?2WHMq||_SebpV=e<7twU#eC!#`lxfp2|PTxx|gA77nl~YNy=?i(Odj(s~ zq#1HkH+o;qtKw#jT4tf=@ANWiujm|G)mfOxH~!`1?AfB*Top63d!pBIccDftd~Ak3Z%8->J~#O+{Rkb9_SLqKV;}?jaJC zWs8km}1PO1T zdQf!D>K^mTDk(G~H&K74BgjI%O$~=c?nkEww&~@56{tF=4epM}OSuP&K(f(obz4Or zK4k=hXbZA*-7>B~!G24L3ZV)kuL>j7x%}$v-|4P>v#)11x8*;rGop2US8{Uwhd>1S zsFp@z=v4R5V%r|M5%V;}Kx%7xZVx}-TwEyJIUMDu^DtwHB-&h1^!gT*p?CkLKU=qj zWVZS1r5Ehmzoy^3+2@ZY=C5BT?6$TYyS;Z>{?E_7jpIAF_l$u1II~5!et7Xswp=Ak ztnjU=CFAxJEyOwm`r7A@|GxfkMk%}P+Utnc+U!ly9ZS2nfBB&0*+2Do`oHJ9^78X_ zy&ug#73-VxW1whrfA^-|-!mruSoQKz6PK&}{v|m) zc<9o9W23p`{`X_CwPvb5D}8JZq$R06H&fFhaUR#F?^wBena>JMI(EXZWRdA-{s+&M zmzY1viz&$~F1VG|fbOSb>gc0Nzn)lj=ep{vS*?g!s7BsOIyX(q{?f8=o};ei-m02K z5jQz54d)tOsLQj+aQ6?flM%U^-(=W`Z)se`yLZy^Oc`%J1_>>#;5V zyGVIH`liAys5Sj4kyt|Roa#+BZHTvWp7(IQs^LhuPe+B@(^1B=oO>IpdavZPbg?J6 zCd!7Yk%yxbiblOkxPsVC2iZ$s>K9h4`7HFkHT^AS|M98l#_-xh>8l6K%xYh$uC@^U zI=!yE;y|=(%hE&r>Wk}#koDVJIZLmfz9)YzR$L+GtYha;OTSq03!$l9FKV9YuMK`s zEUk9#gNFUhg5|$Ul#W%?e?GV4KeTlxXYmOFy@Xm}rs0E+J`dYo9Tn!0ZTZ7jZ-}`^!fmq6kRtlJ^W#l9Z%b>9 zV>e`6N>-_JugYvyw_d;T)e3DFMLZ3?Dd{bDG!QL6^;>`0-2;4mHRsgSzbrr;Bas6W zGY28U1E~pk(z4w^EMAfn0^*E<gRo zLm<9!?6&*~g}5D}(W&M>D^J{0Qtsfh5#pV}UzTpY{X6WMxD_~9(Vm!$e9>;c#YM)U zU6d0WuTMNbPr^yTB74v1j?BDmEBh3zSd{(6;GE;apl}h8Z5Zw#iTRbRtU1D(^>}Nse`@ez z^wUjhaSitfAvG82OztAmh%lpgF*$03px|eNC#nFVIo*ft#auAv-!FJRBugt{YR+3w z{@a?RXCUtYEFPE&xH_Y=DBo#gwplm@G-Omx6$r*SdN?n08|cX4CPb=*yQo_D4Z(Nu zyj?CCQJy)_LH$Xi{fwG`k%QCBzRDvT5p0$mKOQjv!U*3vcH|a?;8ZyIgq^4PpLZ{5 zNf@!W30Df$g#TbOjuzanVpPZ?k(=zl5{)o_Pw<^_b?NvAu7AWStCbY-gtC;0_10<% z@dvD&7!>j0AQL~{PTpqwmAHAKa-Q zi&bcA<~%qUcZt`|d2kSlTy{M@Q*Jjmm>b631?4=qbGL9ef)B?=t}FZ%bxYczdm}Dp z+(7E)t-QFxyRo}>9gnA$Cb5KY+PwY`liFI)#fbjJg}BD4B#nb@KdVo0F%0!1TbL?iXnK{}Nf(;>hW z9G5UT6ZGx14_sszaOP20JhFki*;E5(u;$_=&ew?0cewbfmm&sTBd8wgtT`TCuf!F4 z2vKQp28pu2k6aAFys&0$GjUA9*%K=^PiF%H$7u_+G$PGmkBF*=D?NWJ?b>-?%eZJz zAtBew+S+o`{-5J4%Yham9D9KU51SNkFS_BOC-M)=v#=Z7Gs|4)^AQY!K@u4p*${Pk zditIfh)M!;uLq@(aa>;iA2s%Ju_#C)aUbLG(`Cwuku)J(dz4@4v~TQ17Po1*;C}SD z*=Hd&tiG4{BuB*I%oR(a6JDvIlx!e9Cf4)9K_}ZlM)+njjaUqu~uWwtw z7G6)Y5BO|lU}J4Kb?|BtL8%d=&il!`U#_6vC%pC=-Ng3OsD%Wi5v0pGs4aV8aVL}~ zBeXQt_^XF}5CuZ~1F*ZGW|ji?ny9@YYHLQ*$`E%Su7ipt7a{Xx-@Uq8>}~tq+4ya^suq5hx%llS# z156q62h>Kdf=-phAi3&I>k}m&1Wir|x{{fQc_RgkmFf(DG^_z+w|+ckcuf-2b2cDO zKvEW=$wc+8B{a%6{Kml-`$1nQ=Q-H;U6XF!=Jd{me!i(a}l`xSSAOi>DS1_$-Ap+gBJwh{n4iZgwK9u0N zfl%*M3u1+RYjOd(_x<5sZacpE?lFqwFhS;-q>90NWY`UZ7i8!%m{7G)g4FZ#l6!<& zkq`&Mx&_gY#d#Dgg8$L*zI`4mwoYOQxhAfMr+LdK9GL_~wcfNMy~Qv@$IA%(Ye$Ah z@4QWX4=FF8;fn~MI}7+tVt;~x=YhNR_==zrJ}Dpqd^voNl)==4_)U%Qg@_;doj+zp zCNLGfKAd?GkwI5(%oZ9gYuY9!Lk5Y9XbOxqtikM{0PrJb90`b7m9R=1VE;Cg-7GmW zJ+ruQ11oT=@M@dw3XQ(IcIkFDN=f|sT653mIPom5rg(Rcp=mt)81A3a)bEm+EP zaD=31*?)ritmEW(iBmjdln>H#q=Ck=i09x7ki6E4L1nguxF@KZmxAd<^AMC!wCBf_ z@4$67xwL^lKlhw@0-Y;eH2{EK`=;rw%VYH#g3z)l=#f|jOh_898s41rSfrPSgAq(q z454Z}@L6SIgIf^dTItS*q8!N#QAZw>55fWf-|?j4jIf{uTk$2t;ux5`dq? zAq{>*2K+#Jq<6%N$aEC;(EcFnGe&EdjCp1vCWK=K&ff303k?4Lll@lrpxEP8-%IUE z9U85*JB3}W6(z2v5B-hi@nEge`PEL(=MxCcBt0rPlzB^fE`r^ce@Gh|iHimGKA0eAguBZbc||-vk%{YWbp+ z&EXO|67oivp_*JL5B=thzaxJJF0?3}E4G&0@Rf(tC=gg5K95NE$KVNvbB^plHkfXo zo)ZNkhx&6tX6J0+rAl$DbCA%I60QCBW#_D{xE|>l zNFpo{0o3j8l=`fyPm=-6Mr@>rZwN5Xk}x-gl_SG$m9+7e2SKRaO?Yv@;M7#si}NoD4o^L0VJX7D zkzx6M`Hw>hl7%qGBo>49HY4$S9!dH!h>SR?-KYN~zW*Oz#>H2Gfa+lfQiMk`na(w* z1tENm@Q9cXEM%6$eJmz-fyE`}^jP;8w_~;c%9MILc1A=Md?FI))aQ|FIl?J~Dg@Np zfahinJD_&AyM*j9$PI!`1@6mB2o!0X!dT##2#cL|37)1RUrcrtXLWu%b^Kb{)p?Ov|B=}NeS zS*~!RY9VDtX`mMn2>4l@uwTn}4+;zp=PHN5OZbAPzia5Yf-RPKX*MU`Vs+8i+U-MDOcE!6GQK%iaW66@`)HY9YU<1=p;c zj}F|M;sG|MGLvET zXh?gDDviXG>*o9t=(s4>=6_syk>^Dq0p#f>-mutTXamA3vpg3W#JLCK1VFdM?-C|< zjn1T#X+;Wj@rqJPJMj&?MmyX@d@Fx=_Oz=hBzyfwEMg=d0+taL#L$W?^~}}aQbJR^ zGgA~%s|W#-yY(B}Pto?)YV08|iSRdedQts-L$~wo%yPj!?$(S;Uq3JWLOjfH6?_!! z5(~axuzIX>n(B4-l+!QvZ*87L8bAJPq^YuHiQVd3ha0h`tJd_gRvj`H3?Bh{}ao_d(ko z0fy_V9G_UCShxf+hN{Q28qNfZ&B1BidL5&>|Gfq!DQ+ph5AC z#K0GECgSWlwApQmzp2bUtWTMI2mhWzVMM1b2kOsyG z;VCjrr1xlc*IhTab))89~M2&hXcL*n7ONiL&b!$Kj0B0?U(NxoyEn)_+_@Ut# zE;icXP^kh+%`lPWu~ID9b6^dlM?M9jf)6Tp5?@|8?Vf`LI2*c%e%_c=N|OkTX;Zqa zMm$R`-kxEi!z)`$I}+*lRyY!(jsa%O*FuR8?w9FUsUSMsMn+l{q102slrDF0PJ|Qq zJ!?Gl?`9R?22o=_y%F0Y`5RDGaGc06IY ze>vl$NKn!e{bTYLDmMy(e&3MqUSJi1SHi%E1xr8l_tgZSGl8491^f{)W_wsLq_hC) zh&EABca@io-p=^FN!E{O30U@rEPixUoBu3%B=I zc0K{35gJ*WQg`b7r@bymXjx5XZ>(P9)P2c%l2kuZFZD-=jB#*m$&J~n&wSn9lByMtnrqh;5W7PylH|KTdy0pgIH-`qCC zl-OoKN*BwMJkYxR@?FLx;aod`W;s-=snXMqs;5onKvql$-L%CQSeLCqw?{6!j2vmVigv~Z@g)fG4xNl@tsGhdEqIF(0PG% z*cJs}?mDhF*PUwzDvh;VE3Pe}Nm5)_9kHzT2ZtC8GbQ{#7FXU_$3$Wpa?oGUSo?I?u7{fQS61sXMXk(g6Kfw=g64o3P{L+ z(L6lp&fB17&`nt;-4#(=lhkWs*rjJf`RdAwza^$ev3@G*=6ow;?4A!H^8>FOx6vA>JEnmadY@gbZD%{l1nR ziETlVfOO;7v@4Yl^qGhIJ9%tQ{W!$z?>Hv-EMWTc-*IpM2c#4SO`}g?_l4=ZeY^Mg zl0p1p(RuQj84zLG0@z<5r9#1|IacT94;Cym5oF4MP$+FGk#M>6xxJVaEyMCGeW)%k z@6*xR4|VnR{i`4+5me=>XTLFcvy7~<$Ls`YPX!4aNn&~E9_%$0p)>+pN5pS5VkCaW z669Az!JXoY0FXcj>_&gAfFDG&v)U%5I%7EZjc7j$yda=KuJe(Vc@MobX=Gl9#<&c* zR)+c!R7ecfJAYZ>kVt|~9oe(%Ho355J(T~+R8`vkl2>}Fv{XBu9vUE1RLd%bo~D=B zft!q!^z+fp7WR<|RDy@%S2?+}Pb6%DNDNq5tb0D&uqqf8(Y%cin`;emJI}Eg$rvb5 zXgU$`6}&%@_;xhAPq&pSWH35%X!4sW=qG@1EQO>WVF!D9lmNp%!iEhkBvhjUnm|0l zc{wL&W@yCsmMxIwS@l)K_QK8b$+CxC#})08pNxDQ`EYf)MfBwOYi?Wq%D;d5V{s#( zyk$>s?|R&<@N&Y9=00XEdU_7XHerf9^h{9l1Q7Cxt=M?1>78 zrEdq^XqQ9~3$9PrZnM0Yf|B4Th-~uAgZDAyveZ>0ZS@U2c8_w8ItawzP8UlX{4?os~M|dhWkjk!jFi^L}4$oiElqMJT9}I!b=6m;B;n?#13Y_z zua2=PbEqrAc8hxUlNCm2^-#^uk_t%Bg5#~TuXgYo%O6itGriVw`V{dboo;S4RWqzj zhu=xm^5O3Zx>m-7-VU|gY(LgwlNq-WLjDjRCpK~c{_K zBD48TzRfoJr3 zxswaggsLXa!DuIMZeK< zh}^xPX{=+Ds}FO7C1ZDquc7p61}u)*p~DoM;%a^C;IT_>62_1d1xL)q7rnmK+CYQ~ zgEyx7eRPV2r?B05LgodcV2k6+Frd<}WU7$X>KmjYF%d+I10}IGM4nnFfH{;CCz8K; zf&WF$q^yNS)9{L@7j|@$$Ny{<20wW`{wyz_hJdM)EI7@TodjM=M#}d(fN=Kl%>ymX zeSI$?H`O{Xdoc=q74XJCymg3*)i3VduA{*a=7-^%Yx1~9I610GwAupj0~RWn5Mj|_ z+G}z%_LGpi#)u9+x1@=|%iPa?5|xkr?}U^@r_$#0DvyZ84~@td+@kU=05OmTK4$S^ zAM9Nui%&L27}5$}o2H~uTpENWXr|J9f)c{VS%F$NOb(V21O%s+F8EzwJ z?#_O4p{OE)9f4FN&Qj37e8SR<#Nr)~2$GS4+wt%~3|$|gg0UcA7h>&PgH*#oraesN zko$l`NAW3zUgg^u@0Bt3+xye=AdLK8CjiX-0MYQ<@S>4ZI{00){) z&;4cpKyG%S=wV90e!N;QSl~+yCOWEkbl89RE%2 zG5BX74c7a(^Wyl>-`ovuw3aL9wVL)LHQWbhEGHGED(v0rxLxpPE0L`lFw+C^zSMZl0d|4bGWn{GdqMBy~K4e z#YkeT{jubXv>jN*RdO%|T$b*1)-4Ahei}u69=?06+K;BD*M6vS7^}&&vk~eekVMfr z8eahaD>Z9D)G1_h2dxThkmEsba0~1U9N!8N5IGNN=iW+0o<0DP_ z*Wkml;%!lbVbv?Y1+CXDw0DeplJ&-+$G)uh zrqBo4gJxAB=ik?A5AZBTwD6!ezqr&Cc+oUuA4VdpR=5rorSboO>40{)wm$*pkwLOJ z9B`6bN(q!8#7x9lvmVe!a7)dHMiMGy@}sQNA>?QC$&9W#GDmqN5%SpJKRvO&)xLda zne+2wpVfZ&<8ZhplM$Z9gP$W}e&tyl4Iz02-82`%J#ZyXZ4Pf0w^5!iWs>mH%NU{b zt79#tuuE+PDp{(GL?G6EO2oLJaxyk6pQ1sQN04@EBAqyOgsdY&n;?eAz)q4k8u9k| z2xBz-`7ID734r4@Sj@tMKQHU}k(hHQ5F?HK?gVFvGM&sj!-m|ulM2)e;%o_q1S@3C zyTh)a-f;f@aAKZu*ze~J-j;3;Uq~1?465QOdC8@C%CWM~eL%f{XcT(B5BK3F$HVUt zCzwDyE~33g+ptpvQ4ob)DJ`|*231~V1tL(0%~io=$$qOyBiIqBbDKiSF!3WPlBaj0 z6RVM*r_&8uFe~~k*GDDFU4!LV=?#zIShEv|p9DKrfzUa^*`44bN=JcRD*zK2Syy*u zDFsNLrI@9UHY+Q0_zU2fe=uo>l=~B(Fr4up z7B{y_6>#tKpVHj+QrH+fo;kjbttt(C#K6d;2YdCjN4s%-O2(QJtMW^NJLZQhdug*; zx$Mar(a)L8dWWhd60SDkOFN41eQEi%@xl0tq&-HMDre90`+Z}@frTlo6#VDfuE$;r zcZvB(cx~VOAvY`3T|!F2Rl@bT{oSV#=`Rm-WJD%4yb*Zfs$ZpGBLs>i`0_{7))->3 zA5KrNxWCxBl^+LiK+@FU(Ck07MuH3lt6hZqV39PV#~wkpcte;xeGy3E>yZUnN1Y#O zrHjn2?zJ$nRDKrQRx9s(*iCJbrTqbdv4%4~@o;f12t0C+fqcowo(IS(powxK`nyo&(6;pfpMz!2S$E00k=DD0dKjn@?)xI_YuSu3eipVaXs zueDGh`QrNdk7XiCjRiK$YhXAVp0JtlgYYM460S04!)3M%_{qr+fWNBrvK<|tZRzk6 z8Z}0;8tZr%d}E?S(wWLbKZYpqFuYDSA2V**iB8NH#J9?!Cm-ZFA-F>z!hc4Q`#b<# zb(3Rle|s=5hr?x=cHvpPC>O79IGedTnK`HK-Rx{zA4w5Yr&-fY^`Vd+6alMo1+fH@E+|F!jFzcTz?lMxSlKvh(+{((=MAV$KN#0@OW zm~WyqR03d1R+pfxQ@xW3y!~*MtHC6s&RTiX&+Dr6RpY)y%_^IY+rG~~KijxN%U+?; zY@mKNwp2BRC3n2!z@F>*=_^(rzxn%P(YkD_tIn(IU$t~NQ*25PEb&?6>P!JvXrr2G zM{!#1)SFoAw8EFK`y#mbL);NR=zCYXNXV26)*SDR6e`RDdJcn<$%4PE)3q63>jYp* zst7tK!%l_7NYGatzdy40Wk8i z4-g2uB49TkBpckin^@r8fUszAk*F7q6#;rC4ll5Xupwk9#uWfq5kt%MJ((d$ENr4- z+MM5W$N|57R<>|f&l!>6Qk2{`%S9V=U}4X-aB15$*p+<9=AJ9}s5R+S1Go^e)E4EW zq6PlL+lySR-PRX0x*oP!zRJdVi3^1$Ul!2Eljtp;KZG6_?2V-KY=X)$#^Ez4j_hyT z;iAP-Kwyae6Vt_r5shGuVK=;_DH<4yL>#6`?%F2GszVGoKxcizCxzKV%ZL(BTQe{{ z(UF~CYR1z;RRU4pDWCHDEIG~NW9MSr@}_LpYri5oP;?dm-8)L8xkA-EfEom{1;eC` zfC;te7+~N1HHl#Ez+=U4za(Tuv0zK=<5r+4>xs#tq{+7mRb+b@=fM%1OPrz#>^*Nr z@+P4%a1xK?{KAZhw?N}Sa7y68#SH@_1_KV+046D{@O4_aw^J^n!xlg{{w% zuA=}LqEKBUO%vUb-~+6a(=PT}g{~NqyxP^9yMQpJB+6{+4jJ=t_S)4WS_6TynJ2Ps zD{E!7KImfT0dxlK#C}K!z-##K>q^A9A!UfmwP&@GNpeEOf(6rsK-&OoFaUe|6$u?BA!{vgg_)RLr}LW=lkRX5g|rKex=Qr6wGAGh zZ$ghOt$5lp^|oP`rId?=4FiR?|J@nrSG%LEFxb`Eg;2AHa|U}3i;JL%rAoP!rJKZb z_?l1~V5o%d^nBQ=yp1V|pB?)!HB9-OTV2<0N4JU~*m66z6}HU`wF~g|MHp(HNQdc% zP2NCo;bJxg4Lbu|agVw{Lg#p$F09SC$%`&nL%@b9*r`uG#FOw@jP0fTBfcaAkxO6I z+QW#O{x$WHk0*6%{=pS?`BbWO(Zp2?)|~7eidc-dx7G9r6(Y0vi}TF@pe5wk2cSGB zA@VV^a50oy17Q@tR%vyPhpnYOmby81#S^7|{dOqd=#V0Y@!X2&-E#MnqL?r@;;n_m zA98REwC>bqOq5F=&JEbTy z4?pLllkfMFwvA6D+ma-Ncv7JZpnLarHWZ#InIlDVcMS3rAt>v1(c%g+=7^l()_c2O3p(O5I?Vg6OPFfzN{ITg6HB z75~X(ZSgv#ka+&Zt`)5TxyI{XdPzu_JzF={B*Q0R>1L^}+k5BN)=K{u{4&VR>v6fa zv?dEsn|Xc{o0U@0t3Om2X+t8hfHxaII!tCS6|b0$D5N|VLIfEZIYW>_;lBb6qzvmg z(j&3}Ybcy7LRLpL%|7#`r08#2Cnj|%Q__~fR{xi;B1;q4K5qdRJc=0)Wch-Ho5`Th zUNH~W=|rB+rSsTs4N0$dbQg#(>xom_rOoP5 z1?X$!`J9Ly@BQeA_{qONrnq8P3_rOPW+ti5X=Y3r+p6c#@G5|m!WBNrTdw`9b`v_8 zRtn7+6=sDHHEp&u$E#YFgXX$|;La#Ru5}Y$;D9E`XdK~#SW*j!a{p_NNglf&MM^N| zj=`pq_`qJ;iU}x8G*I(nH$yM#fvW*-AZPSca0Pgl-c09PBR4rVcBa*}HSnhM>Lnh6 zU$>H|NvtGo8Rg5pA%x76;o=OF$8bL9T&@&}@rD6r%++KW3~e}4_Sy9v4Jup0q!mk& z8SMEX{l4WQplcy8t&LPs@_W8GO<=e4e6|Rf2w|NV356l#*L-%qv=nO~tSvUC<+*U6 z#`@FN`+(zAogvK$aYx7~95@Q7`R8^Q+k%ZTc7Y)VWbBW|l5JGn?O39Y9iyBdig}*Q z%RBQ>?Z5DxUsE$27%8q0q zeR12l#mmO-BtP=9u1rNZIz-iOqAc75Y@Fk7bf*`E%iqphZ)fA;>Xzwf{JHvj)Aiw= z>NF*muimLO-OQq2PTN|)|NPtK*3G*0awEb`CpTX=G$f2I6CKYN3V+qFE*-u%73S<# zSq26aM1Rr5hY6&uH0w@DxV>WkP)Z2TzG{+Fx^q6QgofZb#6J9LI)n{BcCZ-zgUrEj zK~IF}La?8Y8GI`&Ek%FX6eIBH%IS@nryQIAL+p%^Aty~1rV0g zTZF(ZJ5RjHiAwF*uS%$lh=ym!n~#+E`+??{XkeUfIMwEbPXi*;%1Tcr;}Fpc^{`GF zKanVmGCM4=x-+oZ#;eQC_r#)EzMw#g@LijjL&b=M_Coi_}OR{BX)6quMS0L#hZ5))V{&) z7VRijuupQl!($A#j4;4hn(G_`ozprCA(qfxAaNM5QqFqX6%{nejtAG2;7|Ypk80t# z4YHUcXi*qG%nyr_Xj&}x>$$Ta?y^7TVvc&nLyZ0q1WgMHy>YdBFv0{Xjw| zrU1WaqIoOO-h;egwnSFg=dkxgke#Hpp|i^5RMgJf@F@EXtRBjh_fdEKtO@l)D9PG# z;8f4TV?r)GTM4d!TGXHZxV9yTR0keXu%wutUAnC2gw+E$s>(77D5wNvm`DJ1vQW({ zA6peIysE9QDSpO*vTGl#o$29ujHN39_4y#K<3u`$qw?$g1QAUUs&0iEW6TGaF<_GS zAVF$W*HPH51{Xt`5L=1CHt!~5tw76#2RZd%14QAQkBBNq=4`@l2FUF>=-%O(V}m^B z^Ye3bHcQ~k-ruy8L`j>x5G`%@QmGd^^BI6fAkE@@?ME^dU99OO25uA1O*A8f+Hs)} zFVW&R*N%f4==A`_yI@oT;)A&PqPV;n+sMkGpq`3C> z&TudFPmCsAy1n^Yj$ee)o8J1X7pl^4&T^0HT#~vT`S#IwhO+Dt?)27~NJ|nMkB$;n zkUYjG$2>&B6(}fX;_X5eYSN^f_qC`19hE2Q)j*^(?s)j3(k~G60ydnGRj(mkkKD(KJ;I>V`T4-R4OjYkTk1TCX-Pwz zF_#PAg8{fj*k65U6q;*C>@`)$5@tDK>1cAZB6}f-Ofb_ZE>i5yrey2{yeYg}jc)HU zduWxT3*&8|c3Jh8do@F4ic+bM$2?>IR#xjx1diVEG&!E$Kg;F%2j-Gdaq%aI7ay;0 zzo%1t=kEUSNEgcmL%&Ql&&aMjb!ye@tdVsvMrR zFEBXjw^Pvd5sjyAG>0H3VN`E7JiOxQsjV|HIh!Qt+UVvz?tm9=?bDV)tYu_lhi?kvgGmBru8hrz1}kcVnXmX* zZQwTI1qI4HFj|is{)>zk`*^G#>t5^F$#-JDh?4C1<#*zL(>c<{ea4@+x1t1@Ousu+ zv*!6ErSSyO>>tuv(bn`tUCQ8#d1&iJG~xvz@oAmei!FWlF6v?0E=Wq%W29rGX?k0x zpXCpmu%)d?%TU@KTaZAmxuC)+)z5nT!wXGuF?O;g8kyNjG6+DUnZop~7(-a|!Ks!i ze#KP*WGPkg$$?K>XI1aSZ;1)j89ak2=xPpsY$xj{6`reE%I9rn zm}}-O$XXf9@SjzqSN}vK>xAgX4biw7Y7Ktys=M%YvNoNep{Q58XF)@k;&AnLuZ8kZ z2&Zjei@X+m%VpwD4hD6>}@J#E}MMw?#!|~)r06yLD#3Z1?jc>`gR_!5%G*Pb31y& z=TW#tVVYRYqeoVsC)IwMG;EZ9UzDC+|IVYrUbQ-+bzfU@)3>Ta$2UrwX=Dy~Xe=w< zld2k1RzLLTtjy-S+oi47LNNcv&R)4kVg_%1iA70i6$^HLiTW`byQufE=KMo0ky~D# zX^gn*`MoW@X-w~mfiAy-{7me#-$pxqO~S#B!`YiJpGZXUQ+fFgStOJry!Pc|m)h8o zc1CIM;o8mXKHJ^%xVE$JTSQvZanWnTTg}IPEgUzubnU&-yFk3Dcdwy)xs63nd3h>l zEbw}`t=r0u-~(@J^L2$f3_tvhG40l;gc_0-WYbc+K6ak`_A|l%(a^I$81j>w;VNHx z(J=q)O%@2vX@>C-qE84*3W)u8tTp6o$cjW>1b8VC0ltt;ifY!l>dskK75r!-n|oL# z6CJznqj%`)V$qam>@GN;aPhcCV8lzqzUltQf_F=((2hd%!dEI(7?-E4Sd zFysd>T-sqJ$|;mH&LOv9!l?4^_(;Qx*~zM3KTjz?&@XfIf?Z3~^=zRYrG4L#`NT9a z)-IykMWDcHCXI(;C?4MqTXmoa6cqje9f}$2xfU{2J9)Y0$0FU^3^ zGNH38m$X&=S8wQMScT~0zh_q*sI5w0jwun{--7NZ&&fdO2`=#oInxO73=AC(qtUgs z`uzjZf7Ts$nwN8J-?9x=8Ie@Oyt}EzDezBE7|Hy{81Fdky*%F4{m-2=vWy)G323eV zy!WhRYpews%?|wQ{r%b&xlmBw2PMbZ{eN(li4aq&^3SV>CPq#udDoWh#DlJgl1>QxV`;v-<{EoDiSYIn-|>{EzA%Mr$d%c_z=#U?sSXU$!6i6O$PYC2><_Yer3cFX=pzi$Iw}u zov}67m+ux7Gx+%F3=uTn$R#nDd9JT^1Yqt>(-yakTd1$Tb2iO`vbWxe{T^~i{`&=X z?pi_ExV5i?ko4J))89rnLrD5gpRv){g^iP6Po|f@{^;y@T-n0BKwctKImUhJ+po)$ z{mDU*%U^eIdJPfj=k&XKK8zlS?ki~f^XrZ;_*pvrnOZlPTmW_EyclLaL zk+skB?&o!BY#R#-cM#L6;I?E;ttr^^BTrYak`F0zt_}S6qrUsQ|3I4pdb_k>Eo(^Q z_eB{tga1SU`%kRLWm@mk-lx9HrO%m9`PP0pv=Y2iVq}my-1>*{)TU_dE0P?GHBI@! zy=R&Lh+6md@bBE}FKhRi`ah&n9{2v2Dxf12z+dWqsqv6U?1D+{zMpbaJ0`Y&92ltY zns!&Z_EKff1M_ji-{)6v8@{r7+tHVOH_8<7QN>#Fh83W=5y$6w*Rl9g$=PQw}+IJyS=OQO4$~&2QPT} zwtK(YAK4{81V!s7O_gHOqAf%|n-rC9N`JCc_|f;P+M7Ba+F|O?UQ>?k+7p#mw%cKN zw%|vtX4>zH2yV#f6SHy`itk27J>R@e)@+;7oBHO!{cW8q6z^k#y55H!Pwm`fzYJR?$rl7@J z^nal=N5r6$?#?R-3sN~PWgrL31JR1x*GAtdRDG`nG_hyxn=j)Q^5(uxCE`cwc-=dr zl^Rw;tovu%ATf(r$Kyk{eXcI=Y2CZD;Fyzfl}~3&YGcRcb+I$89gPord)+$Untk+9 zij7AQwNAA2dT)N*`Fr}=OQ+Lc2`5_U6US3hyw`5Jb){&ae@C~>rie4k2YA(CpZ}`n z>SMphj-6lKEhmD{bQ5)fAw~F0(2p8uAhDW~##l`#YCH9_b&KEQVWIi9nR8y?VhHbRb!mDAjSSy8+2id3i`gp*lvKiqsmOstO zFP19itBQc;08aBcUzZc14RC88uH=M$HkJ58KOMYB${{n1;%eobdHe3kArg#+j{$Ng zxRtH_twqMb5Ye#RXI2&F5b`H~*YEAJmChpLa0D%ov1Qk50bHcLG02Vg0^($%$loJ` z({4pE{Y#{$JHyuvOtUP00}{vSBgr`rN#>Vm=$AQPYw8$t9LSuGAgU0|IeNE4?D+jP z|G~3|oOlt^0R7x&76J%Lc(w^6Cic|<0Op!Xgh?+^VAfIiFvPyD{@D7c$I6ZqClMq5 z`YZrbgBZm|M(*MAIQ2P?1=5vICMs2>pVri2d{PXerW0bWLB&>*h=4uuwPuvP{C2Ak zcMA|K7Mdz&<=S|uf4(50N&XAy_$S#BRlotz;NlF1=*9D2gpJ{VpR=3BMJKAMfkgQv zV?3npjG)|EM73idXe))pr3P8d5#k|;n_ei%;AhY5DYIT+HR68HcFM>&=im;79W4fS zUV%lWx!WK5AH*OYAuc##KGIT|_!&DRK@5OO^^5r?Wt$*3HyR4+w7g&Pq?ObVt`3tz zu^#QROREFp4Vv~KVuX}F3b75*2{AerbJ_-wdI*o5`D;IxIsKzI5xabmr?3d6pnh(h z7>ueZi^z3A$V44utH~%TW0cDWxj={4!2Fda(F34VYCF#jY&L=3(T=2c=Q_BP5cb3Y zbk9@7XCVrEX@OWe+n-P+;^doe*%rYj`|ISu!-c{EU_vx$(zq3C4$g?qSxS@Se5JAZ z=FZ^Tw8XLi%}t1&K#!}HfT7m`_u;FF&g3Y@vXi%7#);r$20xS6#oHqtiz&sRQosd9 zcBydAh+X8{?SesPK%wwBu8pxE`xjULZtB((w8$-2^VaC-j&F<->q2PDlPB1&(!z#{!gFkS?_c2x#ymH z?zv~teeIQ%6m=nHQhAQz>Do;vS@Y8iT5G^g4u2vb;^Bf>T5Jv+4w1=nqZccID2ugU zLL^0NWN|799CGc1F?P&u4Crvu%pB1ERARn{elAP8j&~V^T_S72Cbq;9;(;!=%HKe7 z`Kg~r+#4esG0RV*uwft+g{pNJl!Ai@d=kvcMEg=fm#JXTqYRW>1?<$Na3Og8)0>(p z?l1?KnNG825YEoXYC|*4Le8QiP{w4SXU=Uryvf01PE9?0?`>^0(76&?3LJcqqQr8W z1h)r3C>?mf2EAjwhMvP9iO_#h#6J$(r1*^DwlpZPVkc;w<^C7;$twG_)-=Eo0tu5{D#m#$+t-%pZif_>xbG(g=* zNzy~t{@rgP;UK^Rz<3?ce|u63kbxzrdgxNB$_gd}R)6H+M-K+2X+Mf>68EuZANT9( z_eb+jmq`Dfdm(zKeF?t|f;x>^&fBb6Iv_lQl|^$q?A)SiQK28lOb9=qPHJFt2Hvr znGg-6e=(F#vMD7W!%fHriJ=O>!)dk^q8-q8Tr&lvR(nOT|G6M5n-BpbWx4}#$~tsw zN+1A+36_nlDPHVsqr4fVL(6$;*|-Sk+`J?FiNgA-9-rSC$Fk;F75BejKcm?^;z%yb zm(PD(Ta`}WX%p(qLK6GNRP{4(_<8-86+;d281N2VIPD4lz#?jgv^mA2_taYD%i8E(t=p62jFn;c5`gmLMqs|Sy(9|Iy&|=q^b$G zINUsqK*d4{DF1r99DQ1G;SvFM#u%jIRfcecX$Yv0;EV!JR4L~=gmh4C4khCz8c+=3 zqHH=S3rq&Z%v<8>U;c=jd56|xPWfo7)OwuMp09}PD3uy*>-L?J*H^_t!~qsiu5@gP z$#1RL21?HLkR@@lp7T0TdU(33Ik=5sP#O7y4C0D^bXzXfT<_<5cI=VmdnPT^Q=W6l zU_!8{YGm|w*rfqnuirFfLX}DUaXE4NVcEQllK5z z&3<2HT@SAIB#}XZTkuW18_bpgrbF(B&@9pS6+0JMRaL&2mpfxDW25EFK_l~-jIwOT zkMc2aAeU5_w>xL!nA#=K&$S_L2u4V5wi%s1NE^EJ^|It@mOFZpgyeS zAA4Qe;k@Bt%wnC+511(Rg*Lh)-AXoW*_J*$3o`1qjmN?wTGL{Jkq;KP%2@=Bd5#O% zLwvI5>}18_%RrUl4>>n(GKUb|bJ`%x)Ic!Ft8w1FrbQQg)(#^TiA_<5ar!6I-V|X- z@kH76PA-+k`8wk8rfZoiBkh3pXn3zW>nb@|UHW&`WBr?H`j(TekIwn_d12N!;q)Di zW;0d1ZHlj^4hbZI4MNPNkY6s>-LX+U@(vt&#jb*HhG$z~nMlk}(lK3?cF@7Mme7|C z3eM6+L$9e1MN>A(fQ#+oB`VXWfPL7YLFlq?Na{q^)9S>(?P2$Kbk-NBZXbV?A!;yA z_zIndV_CB!|JN5*iHkhH#amYP<2rmPW5J2qj+r_di+k6z*J7^gIDDEW# zC`e41^KK0E$+F3Y5;^iIvDT=3R(1zYYN{Yx-hcT{#T~n!PT5T2t^~)GhNuiv$;Fld z7bd^6ZA>(oQdh*fqzl|Kx2O&9=sT*>iS&kC1AwLD{%M)w>N!gX(t z7wt25UK1XZd+!KAB7WKRde#WYXbp35r_U)6Uwm(7m&CSXo`IhAq#Z=0CV4J(o=5U@ zmQ;z#Qbno54x9ilchyb>X$?XB1jUVzxEvl*HJh+o_PTXDFc7Q!H<=no%J8I$Q?V_9 z|81iguS;Oo{%~f{19}ivC$uSf%SS96+FHYe=g`VR(r29AYE!{5BZ5Gdx!|XP&HRo$e$6V-M+I5LSLG!1RIyD!-?zC>fP_tnCv?6pvXF!am&dYOd)A z2>%kH-ta6qU|5?=UK~vh=UakeNLzMXnjb11u0Y{5vQk9SO@lICSRj@0X!5;fwnvU< z%)PJC#uUq;{dgB$(f2K$Zlf(Z3pbk-Ply?@^xK}Xr#A~(4&`rCAAJU_2_?l@{NnX| z$$E69;#GW<7C1&eIQp~eD>McIWSowxTjb-U5i)xr!3lO+_S|TXs8jCESne|fKC%VP%x9hF;+dN-De_D@&u1C0Udu@E z3GC7BsA)7jnDOqjU(;d59Lpy24MK)p@rB7_$^Gcn_k~;iW(xI=96tBx^(Hg_i~4y( z!}EfG<~!@T@neQY341ysmk9& zve2drRo6;9AVeN`4W$sM9JPhgX8_qIFdSH;TvSv1S)0ug|90kd@lzJewD3FpoFQ&! z7WHf5H>js>)X$a{-L;axmqj3L|4-EIJY+;J$+nXZPsxmxKL1VN&Ge zX!crEP>pEsm%NrC)_7W@*voWf3pdqvu$|$I;NTRR5F2W8FfeF2sN8fE66RZ^NeDjy zZzv`1^!#s;sV}L+b>q>T=l_CZ)3+*0kObM|=TMFGL=LAR4KhpI+U_|?IZl-h%AmM- zqzkD1Hajf@&F#M5BhkTgiFMSDt@pjhof7#399;czy9y-8z;I>jGrK$sEQ>e@-wao; zSLB4rC2oiVp!)6e&+{B-B?@A;h~KyH^P#(_>ec~m0$}LEPtkMJ06T2-gau(Sk_}-X z2rO-YPHoj+&25Z%%~k2xOXt}9(|5Lkvd7c^W5^wd=xke!f2vvlU%H!?i)@En_qbI_G z6j=Yv6Mu6%da9L3Fe4U2G4xIXe-2C()0Iez(UHBG5Rfl2^;@HYg!m;GKu?{9mvcnS z$rLUO7XX@w;Vi6EVq-5D5}7D=OH9Mqq{ubunGs!L@!}fmiBk*=SK=Djv$}W=6MHIA2o$aCvJ_<_o zT+}`6-uN>Vmug8WT+XdZz7#K*IhL`m!khv)EHxl&7LXfsRIPU^FdKz7Q)u;OE1X!( z6Q;yXGwF19wM)Rx?f6b0QqNw2XXZMRrIz>+fekpA;u1K@}iYj$&AP17}zArPoif@@C6 zcjOP*t)o1N(3g3gLmbie8YKB=z2mxh*u0?r&jN<7 zdNwTL_}A;xUe;wQ3>)SXRKMXIwwI!msG{|<64Rx#gVVE!Ijb?Rea4%R z%(KR4X`t~%3)IPu2p$QiNF?A4l6xt+Ac5$1w*GN^6@X5ErbM7J-RE-RVV8-#z56?N zrHw~O2n-SH2{Ke!@V~X zS)KFoy;Q6aU*qVkytU{3=cR}XKZ1ilR$8Zmd;wy&<*4W}yCvDo>%c&!PTuI zjAg=>_f9Bim*y>4P_rA_&lG#CnyVy5lIJ|}!z)0c7U;D1NM!w9hk8s*bvb+AkEUwf zK9oI^4!g?pC@9;suJlj+$`;s;0@c)ms;}^|gz+=988Kv!1K8vDxB=s618&y#`~Y~* zd9&?{BK=fB;hGM*694hw09Z?xm2_S0>bY@b?Ha>%J&o?0(!QZ^j@a_?i^YchmOUQH zO2wUsP~oZX)uYd4oaexzj$onWi4dby4r1C@LS%ph&7ATEHNt-*(&~Vz@uNruP0(T} z)dUNMBz|aDhp0<j>dn`2Hynl=&scZl7 zLpbPuR_;1NVq3jnMT$hJSOPB3ll&n5MDDRiRXzKM5@u{6CRzy+o?JilSKhn;=hbSi z&UJ5x+Vm20HXSW8-~zX7cy}jRQ3alT7M;;K5QZcPMp9u4%Q6^cV+5htin?UNw0|76ohpG z;0Uoc<`C@(^DuKmD8&&)5m9Q%3D&7+qYsq?q`m70N>Sy~ zep_G0tev{~>R2C&={<_t-m5OT3bPLYR+k9jKP?&1r5_8aU1u}tT^E9)B&ug#Pgu`X zP@PP5{zZll<#Np??7SRJ;AA!ZATCML!qk(8(qQCLb~nr8cRscDm6Jb0Pe{*2sbBja z%yQM_AjL{`WoVty>++a8JwRGW@#2_eYfuwPN^?S%mf)>|_7mWWqDk!W>)>$ zvlqK7fSq5QXZazgB5Hn{eiz+%pCVKMcZhAa=`>+-742v-B|| zn56h@U#C{mF+Ru@)K|pJ`n1n+i(PAvH`;vDB7&eC)r3|c7pVJW@@;IuN&<#4EOr3n z!1tf6cdEhnP>Gq;fawK{~SH zxngLugecF{P@?KtLYnn0X7d%(?!Aqt(r6g<0IZU+f)vzfOM0G4cz*o@CRz*xBFq0d z%ya_YJ6v|&-p~umftVXRf4v&0tz<%w_*5Guzd1G^BG3l?5*9QNF*j>vaYHGHV>GszgnEh zLYIN|#sl;4-AG-;_W{a@mo=Oj@?+rmCb&YdrlgZ>*&Z1{JOUE34AZ5jBe#yc-wQ%ow=+ zvV(Roa7{9J{LbMgj!6XGL;x-l1*rHYC8f;wsqvwT+b=3Gi!r!NrP7#e#Ell~Q}JVT zt8zYXwE=QhT)+Z0*(RZ;L%0Zgymag?RQc;5CY)zodYo)oRT(jK{G>R%Mi6X5(#{*0 zu}o!x!@$z9e+Re)q+bR;&TR{XkF=aJvV<+1F-?q~FT!JcT*k3|M zW4?0`sTR({Clnf)zChtvlf4EG+M`6{Yv9U})$H2>R7`dCe{|ITu9Ix1F(scRh;(iP zny0q%)ZWij;pv+(GwXCs@|tV+)V&G!R-Lc3{`lLqALJoXf@dH9S_;v-09zi5?-eQf z9ArKSpRAD7hc=%J_OJl02WlH;kHkwJ&tP#$ElKmLyb$5?tsIhrYLIjcC__mEDWNwj zKvK5q^H5UWu>CjgcJ1dFU9I`r-u%bnaA*DP(dHBU;2xOK^U>7k89?*BVG|!Sa)>d+ zI{?fO-M}SeQU4&~!8*`5_2>cqK$Uv*0P#C*mMhqAyYe%DyMyx@fCwp=IP9v9W=<&G zv;kXKmRzR#vVFkwzoB{vEe7-}2a_QJtoyWaPDu`jt0j%g^@dX9hD5FDuq9IF< zxlJIetk}rXe6pSXppSsF%foAwJhW_NYk4HCB zN7>e(cT+VWr%YD#l?Oqf+MWub9j}xt6-B6+{QwzI56q#l2HaGpRS#Jy1<{qQxd<{M06EV?f<2H`;s6M)sTS_o%g50=#re%q=92?;5ZP-BQ8 ztfJR!Uvq|WzotSrscsxY5-Rix$LYuHr>&G&h9 zy7i#l`{#FN#C+2a@~VkC-?2`+(ILdU);IU=`V-(a%%VJFPRzZS@j5{~WniIya9yl< zkvU6=Wes5x%FW-$Ri@bb@R4;<#e)R_8VL}v9M|!u`%N{q*kC`4)FF7jX>dzp3-nQ) zOjC%OqFAy{Y}oKl9dLHur~AB$`z%7acKDY8-|RX*-i@!Qp7awNj2$AuYb!YhlddK%^`1-@n8%j^L z>s_KJgtiSp%N}s-+s+6fBH=i^lxecr(0mx828j;RrpUt*5K*ki2 zN@k*3>+TIQJeS2kcuUzJC)O}feNmuVa>TeTx4^}n*0`J-{K?1qWXw~yeMA0zT>etX zT{94FkY0#PjRQ_>jU#>lXUExhg&%tMfLLvW*~aj-K**3`^YxU|u$=KtemQ){MoP-?+*LqKa z9!bFdJ-@VmI@x^uz()=Vcd$K5h4wubIpA@{X{X5tj_BDuofHvOm=-s`Vx-gIbLU{Y z%W3Byqd?3U&vds9=c17Khb@a9S|*JThJC{+YjRCL&3kC)%R$U+N(#pCPyEr+3(?}1 zN}7hIDiRFtse8MgtbvaSenzY0^Kg|Q#V1JwuNy|QEeMEYO2xi=3ysLzHLAR9s44fW z*P_<$FPM%CRW&E{G7T`$fkDi>WzDc?u%7~H&Iz;VvvB!SDBxNQW>X_HApo?{56g1R z&YPM!sF-0Ic-vPg#}v2NlbCoN!8#+C=Zl2<6pZC#P7PUZREovSSWZQ&ht0tcBjL0m zww`$)n!Gx z*S`Qh!VWrGrn+Mn;kZFF#x%g&yXMY`2`PfXUf{_ps9x^8a*)7bwSu)W^waA1ox5U6hkh9LVt87^^ zD}h7dO)XvOUqlApnh~WpkE$N7@X%ORcwN8{m$il3;48b*+Q00(Hw97`tvx6?ckrlz z^C$D#bAG`-ItM219VqWoc-uDpbZmaV?eKxm8%syc^MOkc+;YRXzfUxJ6MKRb9((*w zPrjAZ7P-=$E{I;W`8^}BS>+5{j4waq+`Nmj^Ym9_KzPo~+)RAGVwMf!xbHftY zfrz;&t}O@bBla>haBM{Cas!|NlJI~3N1|$>LkN+4cD%e{Yl4b|5c0yu@VoD2WCvYU zoGxb2ltUQkT~rh3-FOv{b86em;=OiXPS|~^9zFN->)L`G#m||iUmQ|S95Ur@U6$s^ zfkTvAKfl-aA2&(ECqVVujak;X3XitsRxbXmZt&D?)bfU@ySDEL3fxifO8r0xp{1?u zL6GnrQgA}~ahz_TkEn`p~s9!vTRxGP<8QqDGNsQ$8MI zkY+WfHZ=^x9AeIc1qEH}ZBpwiHd*GRpU2+?ae2S{b0}S!u@Q2>8iG2BhlFi$U|&fe zfgv<<$7qOHcLdCDfakZVm1gp46*A&r9X5#qHASzP6J(U1$M%uonF_Rw?4IoO>mVVE zSAs9smC)LS%w_0->N^37H+xSIYZdI`0jPT%-J79@-M564zE@&W`om$=Xt++p!g=R& zZU^)Wty&sE%kE|5+^W8+FG51ND-sPL8i@GlxABePS&rI~dyb9^9!PS3g!%;61vFPg zzX*Ycz@66a*U>Huxw?bGMFC)ShZ+1Ies)h`zX=dJbViR4gbodb=o!&H{yqJBf_kia z#<=_7Zb^n`MY;T@_$B|YPoj+x40nJ4g>`kEzecdfYbz?fe3$eoyZn9Z{H1XKn?$ z2eZD|*ar(Bpa~SyyX*#8qm4tSpBKVPX@c%tmUvUd_yu4?$(!>8`d~Qp9){BJZ7l3F zN1|-j#L9r={!mkvq~Z;zmwSQIoQiRINyA)0@i9X?m5SVuK$y_x)V-q3&3hqF48_eMP#vU`_fu+F@e zdxG0>1{K%;P0jNR_Nc85{q%|tAAkm4Gi+Q@l?4iP-~s0Fx_4lx|M7*+PdE%>Nd(3n zU%KNf*v@<`eTMB3z0Kmj*^yAhRJeN?pl7kpHziISn#i;&4E6HlHel#aUh-j>rCJX?Fa zzoM@k9k8F|mi4;SmkSDV%^iv)=}NnP9JsnsZ(i4x$hRLBFPgY?JZp22 z$;*Xgkb6MVr{=oIz=> zGKjmC(q`E+ffXt``?u>8EVsKZ-MswrVefr28;PD6m@ti*VN5%&J?s$tfv0KteaJbBcE*#lpt7>ojp zSrU8|L*~xh^+I@nIpNe6sR8A~Hr1uG{XEA8z(wU)CGADeq~Fb?c!q@S0I80xqdOZ` z*h`-YLO(h#oEx5~BIf}5&!>u;SkF@~zqtFx{<`pF^%N@!%fWMVruldNqOQ1pFx3FL z&Ro5Btr#-_fw3?A)yna2-0d%fBL;ZcKYuKE%+l0RbS=C0cBq|{xteeW{vB>#CmSY& zgLSIm)Dfx2-kNhmY4-jm%R#VB74Ygy)NReKpN%IotmR1_B-2nrH~3H>YyK62*`^Y} z@Ta8iSgUy%t`~{+An8s(;e>49NN8@xvHa#MW04SH20ReGFMIdr(BU;_44o?`r_}@U zi#%pH?Q^d?a&0!$K^097NXIh+qGxl;`oVt;;oRxQISn`S+qD!IX8pB%9>E1s+VtcV$cCHOz{bp-t|6aAVAkaGJ&g(g^{;eV=7iT zZ`?Rq#R%V~d=|ao!Zax)s`4v3CbJ$Uc)HyZ$>|&Yj%1%eMPa|f8?=35Y`4!XhMZ7p zj}PPoEWLE-c4I>7x_Q+R8Aa5xkk99gRCORgesHklcBAOoDL030=9>!dT-ZGCUBrz0 z5uAfmk#&(zVBJ&Qo}j>A=nV2NhmVWzr+WW6Q4RHKmua}c%8h2FNSADx=Z}aKNY>Mz zP%dq6C>gtA&6CtUkA2DAkIvynz|@4NDMN@MiY*iiFh=u%onjMQ`ocztEwh^yE?WRi zIE}rSbqXB8b_+!UJvG8>N>T`p=c;B8Gx4bYqC5nKL+mm0F=&% zhRybg6MvPkFrBbQ>a4#wCN@mIS*nKY$xQEZnA*5gdjzukqzs;(o>pIYJ1Si zmxH=xC)aMY!IC~B*IL3 z=^_a_4rS{I=Q>hn>}RJf+FAct3dZkHU0t!vf6YwjHt^O{QeDl=DR8VXsG$^FU@;&) zJ{dAVQ9Lx?@ig1x&j_{<<8zqG9nICorbH}F4MV_Y%4hFq0+>VSz7hm|hm6O}be>C#_kcTFmWJom-LKp-Ts?wvPJ z@YI*V4PZ|H-_xnr_aZ4A0`PC^*kp3h4dz6W)^7qFaHP`&#@Dl^$EtT)%)bV*7RYso z7UcQqPw#M$>Q{TTefVt zX1;g;{YH=R_c7h&wd>h03}=LfF>m(s8xIy7#42?m-E3m-{2M#}mn3F2>+$@OhOBYAed@2G z)aw2qKH{)j2Q{eFH=bTawy>3d8VgT=^ME*Kf=uc!zOoWgyJ8n-Cm$kEDKsRW!2qjP zVrr@d;R-O2uyVs z=*IHSVNK!gpwp| z%3BYy>iIr*92%7J_e5P>|JF@O9K7wd8c6@YGmt79)j==^YNIs2n1fWgkQGF7U?glt zTEHfaasqIe((52!2BH2rVCWXRcv*FiA;qfYq0+a9|NO~opS$nc>*ybcCM-I`Wp4;S z|90TPma#%4+W2>I;5u5Qq5=UKB&t{Gy_Xj1xsYd?$K|panX+vYw%TLBd1%JkN}`XI z1q`3_m*IX-c^da)+Kyr_Kv0Ao=di&`z#fMp1b1(U+t?^uW6**Oy|_`kEGk{VQ6EDz zaPH%66YiYexPA>pu{O{8v}EtZe~+v}Hq~_W9O)`Q<~Mgsu`T(?xW#F77*}KPV6C(z z7o3|?+$Fz$hJ0xLAzl6#B{*qx__jT`w8|l^Ct=FdRHI$7_KDlBZuWbxwbpEe#^kHW zWd9&r_z&Q6RC z@qbruy4&~g_?lIOhs(MX2eX3_JVpum`oSR~%eOz+G4^O1$X;dVp#i{DYv zGf$mvzIZOH!DQjd)Qgcr2YIf&T+&nXSLI_@$3*jq0}~@>Y*=G$m*F$?*x9xp2c0(6 zbI*o8y?ArbD{#1iZzmv2EnikBpZm#S#^CPOVGpvq{8t4l=4|_oXA$vn6t?RjjE}Xg zRe=zX5dyYTv4@L6R2)QrvAQmzeNXmB67dyBKTyal&R(pJa@29m%hzo!4au1iZ_45x z7udO_s?h{lc;Q{*8*S}VFjvFqx+>asX@Sip%Y~~?88y&&UkbSlS@#;>!;rc4-1^n# zAc+Ey4YwK?vY}?$T#fKrwDaC0(X3v*YUb1(Bz!QS>CX1OK18ek_T(1)${~|4r@!Aw zbj7KryM8PimH*(=m&A)v_itRjzd3?$bHw>w-tFaghhNv9zH#`jnX6jc+v~!5{(X$@ zE}l-8=|aA%xY*AhS48cax%nY@IsyST0Q|AlQ4DCI7y&$~Em z#prA6t%XQBjQC7DSvp+XE;{|={IS^ST7Fk+RcdcFDe86kj3jwd1;H;O z!PR>)w{#ADdt{E4mHL(gh57-;3Bt7_B2d$y_mQh_s7NpW)BE==EmDDw&;~4Q-Lzs( z=PweM_vL8p-bX^grs==$JVXIfKKdiKPPi#nODQ$96GI@y^$I zze1N=l;Pv)+KNUFZQh=J`o{yu7}Yr*U*0X?k={Ys-Xpn(m7dFdV*GB|Z#c}6a+B>= zFS0>XCgcWnsiGTi1|>Rr@MrQW-zM0*&eJ*Aaosj<&U9xrBwG>oNj+eN((LgM!d$AC z9yJ@k!edgy=tcLvwq5k^=>CxOZSHkZqxe&g{+y)|NObq!QT-=jVI2p@d7a%oHRjvB z&jngLs~&t9u3i@)Lf)Y_l!Awt9^oEiZ+!M`o=W3_LWgG`%p!h$bFO)H=8fi;lo1L~ zc;jCNo#H!P&EIgcXo)mFqG-&?ZT@Rpw#&pTTRvQ0HSmqS>#wQg$oN0s;xE0rzp%cu z$~5)Y2lE+dg%w96xi#o{~?qZ680Te=Sa247Z_wmh&rR7@HZ|Gom{{<{o)k7YBXWv2#H)aM z9N93)CC=k92({K8SrXt_{|6-x@4fa3#y>4YH22j$fu>9ylJ`tF*?)fPxWW&%6~o7F zB}Osj;PyOD$L(?4tt})81j(aDj(QtkFyHKkAjWyout1$aoiwn$GT*;DW!2`)3Eu*E zO0tIO$_1Z~B{cu)&|Iam1w#0YL$aThZ)VOX&i(DI8W%S!h~~lWc>IN#ZL8K0((=(D z?jZDA3-aK&uS)*YR&b-?*Orp@wij0>g_R^PzE_}j?Q7eQ8#l&%KR#cx`{~qQ|B||& z{9Li%{0PMx751+#n-<>rxFmICbjyQJ|GF-lp1*Ty;GyR3tCIx62j53t%shO1$LBdq z{z|_ndSCwIxuC+nTsYWglj7H?kTi8v+8s9O@vD-2j|V*qucF@``3`i+&YX(ptc0tFc z?Spw2@-B>7=>k*1!S8$Rcc3* zoBYXWpC^&=Jj7p{{!^>zuIu3KKidBnlA*F`JS*Ysa@By5wv!>L>eXZ2154fy-15Wq zcdT*dmt`Ll%hcTVL@(dibzsbw>>JE^ltStZy_4Nl2IK!da-L&m*wyvMU{~XVD_2!g zDpMQ2Tqr4$Oj^A7FMIpj=rMyH2kFIcUDdK&`u2(c0M?8N{z3KnB+<>XRp)^Jy!cFy_ytnrievET383um=X?wa)2 z=A3lgsqeEVtbR8t?0d;S_Z_JLbxSTTd{Nf&_v6C&4S!}|a-S5B;^z!{s5Qbp+V<)_ z*+w?1EFNC9Z9f_|vQ9X*$m(2zR$TMmDACp#rS`)I2L`TeblY;uK|N@6SDVIxbECHG zdvLL7z~?SAgS~T?y6q1-zNj#+{DeM=R`!awV= zI5O5IsX{>rNW1-Rwv|{C0>a+#iaXdqyM}<9F!8mliS~kd1I8gCdwXWUjRM7Uuf8oA zmS4FNqD9eANb#N~6UoN{L5e*hk^a+{o0fjLU``BrrWy~cA_lCx-k#N^Lx{3Dy%)f6 zlyk{#lV49{NQjR78Y@S9^5c@yqqWW2FG4b5E#LYRM}1m0WC%cg>qv zaHe^NYu+>&fmT{X>2gd%w2ffCnBe(A-{8b-K+-z zdTU_mGiPdOd#D++27*6Ud(fV1Rb5&e8mDy^{`E>&R2_^#TZb#XG`tbCKd0ypHrb); zA7+oDTQ$+u)*DpDa$B!6r_&lFWcp^#s5s+P-7g7I-Ji$AuKN7!YuGwRn|LfzgJI}# z`EE(H5EQ_ea?%4X+ox=xwoR2hQlpcZl-qXcFL6<(HgIjqKh z6d3k)K10i3AqAZ6{1+8&L%n&d864va+AUf+Y5fV!Bz%HFND-pPI{5P#B%Juw*L$Pg zfdGq~3DpCjf061U!6)-`Jw3Og?!t_a2_X#T7dRZWh2Qm(NB&Q@oMgTxc-{8kqaIV1 zcxv~2uK*g36OaV@M8M5u%~&@Aftrmzs4Pk#vJVscL>bZXd_7dlegl3_kbq9q zU(1++EeWuEfJYc`xtuF4={-JaD**Kd1IbHl5xvBP7}$FYt(Zn~p75+w`pyx7E*pKd zxzcwoLM&acclo$Zy%3Bx(k@^#dKD3CM$UgbaiQL?T+fYWT;(=hqLxQxyy0dCEaReN1&ACk@HT z1O!dw<27vKKgQD4klzH++B;g<0e_~;WvwGy`%x~)TjaE2K`ERqr^g~KC% zff3VaD$S5&Q8ONL*v5BVkcr=ks?dL>8&>sP+VQlo%PP^%ra)T^s~l_vDfXWaLNWD9 z6I^^G2Z&{c1xXf|Y%UJ~wp2EHT$)MKsG&#*29IdFi@;V#e zoKEM-58W_h`L~x7gB8W_EG4|dM`ikveZ&ScFmWfv*F?VRg-sb$== z!IVyd=T-MBTzt~3C}A@11g2;P&a3dr z37qtGz2_uwT<_&q`*^rOW!qZayraF(0+ZloP5Z}2QcW^zsZ;qXci_Hm8Twu_{kw0* zM|p?fU+=o&dwvr!-2;KlHd=r65p(E@22T8RWRopkfyXG7gQ~VuSD-^WAtC4^>|K$f zaY-Ed7<1K20ci-1BV7czfk{a=K#rR~!)E(A9ig#i4ZDQ|>WqM+PA!IR2bw2GbGF+OXgIY=*Lc}YWCgo#qk5Z2KlG)T+yYQS*`qP&xttx)VXAy* zpxjs*sy%O*>%Bd|0ma;I2v8m(Dq1r6sZJN0SNaW_S!+ta12e)PiVxl3$kV9LMz-M zQ0$%=sxm`$X?3vBszSNVt<56LU;hY^=LF+4V zCBZ4Fc32!{G$mFX9k8`VixnTYLsWb{Cx>l#M8)yP;Q0wucxtE(yah}h zikX}Q_z~^eNXAGpmT)E^FCwMG(_dz}k#o5G))_dvIypY?997kt2U!i!(qnWh!m$xz${BlCSa;?bjdZzI|1jYR}Ix z`j-~0RQ&&_?Lo;Bcz0Q}XEt~=anKIYiDCs*x_YBKXy6I^gZ(%w#4E1j`9JO<;Y$KN zGbs(>6=c10y|iyET@w#PFjr!rJPxrG!Y}XeWLk)y%NGUk4Chuqleda_XvqfJ6mwYs zir|*=uYUIH<6x*(GvJC0UN$$=?wD$VeaSZz{>8z=#qhc3IFaWp7Zp$6RHHEmrL+S!6IP z@>%bD2&Akt^p7$B!_rtXRi)ms?=}YwXDAJ(LDIr{KY^YPCTjy^$(BnU{|aCYx2N22 zy(H%IED(lbzI}H$oz1+Mb>HUvjY|y2swHC2wENeur=Z$myjLf4r;U)*OMoPbtA6Z3 z8gZgpjxtK-h{IVa)|=cntZLhr@-x4-qpak`eNC?kY3Ff?c;gT{T3X2Jo$lx4-UqT) zFi7=h0e?F4aG6A*?Ih+-#x}0VKmrU0?+{uBbifgY#PUr{5ED3TdaRbli(OR{UMg>IOR(0v0#T4A{M1DNF(spB;& zOl8Ni;CEfIB)p>L)ku~D(~e==%9YDV-3_{ z&S^G1TaEsvzWb(O84}MhR0iydat|!)U4DS5gO)XmFR#aq!9bIOQq}4f8~GXh z6{>?VBJ>56!wghKwVE&6ypYB@IJ(6bw_0FlJg>bg_^0HIIV9M0AW%Z zDbe@&-))<0eJw!M+KmAj{Tu!bys)8MVUb>-4x|tB3BLBk2c+um^L0NMT!YbM(XO+& z3n0pk{ev@xSx^jLsT{s>5e5E;A$(cXzdtnvu7#@E;pe1g)huM1Nti**AN?V3H%xES zs%oD&XVuGR<@2qs?`44rhI|n^h#60B+4Aw^qBs82Fea+g8l0(b{d|?|#4!1qtL`9M zof%M-mv9{bvi;j>xlar19_ycH!h67F=`lb@+2!e3&@dW*hBJ%c(;rY#Oz#-P0`u&y zbu*aLaGgoGEIBwUNcEr3gds%;-d`Bm0RHwd5HHg|7y=Z4?kos?f23TxaJP_oT5PrU z*SiA@>S_D#l+%hu&_iNG!YGocB6mb@5n`<%DUwD5`5aQnmKq8D*xL+-8ZB0Mg``)7 z;ar4qb7pRva#ibqBcs|CF5chfId&_QQi=M)VmIn zQ3Yr$)e6%H*_s%-?g@&y_7k>K`TSqQQ61Art)_(HrJ2)7sbLe!J*s>LNR{0?Xx?ljAj4?nb;+?^eJ> zV}^<{;zEoWqFE2FR<-^1gdtLW?-mF@FW{cOxay~JV6xbm5z>XS9cC0+At*P=b6m@;VFpKrVRGh`%uQ(1Xq zED1C#P{7vPs(21h@q{sVOSOn?iF|q1wH^v6Ok2eX=3eVMjG(o9d)z%gPpZ0}WHI9B8H3v?&=1p@^4J+GpD7y^oqjQ^VmD;?DS(;V+QTB#yvTn2$CTYnX@Y%0_cxDYzHE&q zeN%7TM?q0olL4f{prjLsnh#g{lc<8|r%8?e*uh{Trtj0H1D zpg9rnXa)ivD*iW<5BST4U2zOQx^`28m5b(8HIrKkd z)S@5!O;fSd%>c!Y)gU*LNdyvEP}K6}dpGZrIvku|V4Dv4+ltLUAtyPJIcAV>LtI7QsnM-fOmPKyF4qF&%Ljz#I`YOiuu3V`{ zBb2k~ZR#R1a~mjL#d`5ll@C^`z2}In)O4}7P6Kxq1C%a}$_9h=Rc3#0J89Bo&QgsK ztq|bMWJnGCc!$({SrwK1jCnTecwEY-9Txbwmf$Za*?k}juvMfi1+LVlODUsH4NpED z$EJmc)J09J!w|ic;^@bwsiCa&YE2Pjk*&)=^QmgWpB~c#AtizPtk&kpXRJM7_keNJ z(<}cqv6zviXb_E6rL(+#4Iv~7n{9!X#D`$%?u5rOHk{)Bw`4y)r3XFl9V1`!keaN1 zB8#zm!Ik~0SWTZ$H~~Xf4q_p7#C>zg+P-rkshC(OYg*iUPN6bRx+8cVOI46X=#kv7 zgKo)pzC1w7qcg?d$U`F{^zTey`F#-kGj102K!9=hv-}gxTu#-j{IyLHvp8WfsC588 ztQyb^A~2CW1@g(FVVHn82EG%t?6sSaI53-pe$?Axy8W3<*R9ne=ku{kHMyGa2f`N^ zwGS9B0{^o!D+0|1A)O*R(GTn*vVXXHASt3=)K*SJO=+`1XAg=WSvJgCDnJ($)*CW# zVT5A0d~JiWUa0UG(Gu>L00Bx9Hl$g>bBv^XVIxYIllf>+?`xDE>o7jdA-MCqN-su1 z7xjYRH}_QWf&ZNYtxl7DhvZD=8C=VS;#8&Y{b9+FUVMPRS)#v{nr>bF_QvF2%*z4x zi;Tn6L+~*;rmsp4etHx;l?nk>BnK*$%6_j<3ZAwZJ__Pmg~FN0k5ld8+JvO*(%CPF zdc7Sjx8}BO`nlKP-sjn_mpBGmjeSUJy@-*NGL8|HQLU9+t6Jy>TGjCR{11@4*X3;; zIO!>%y{AE~%2EQkv2U#@`>s=6#ncaxiKU<#lOI!wzUe%MtVkh;xHnXw$ygr2O>2sD zJ{B%Xls|`%KHoFBIibU%59QDjmULRyFj&p22o~p<&zo3{bv+@Fw1cA)v`a7!qPPcV zn%$R|#|cYW)M3t)<#e*}Mu3eNj%`_OYDKpnTN0dJ%5CdMsiAHqnBdFM>pZ=OB3`y7 zn^vch2}=bf5own7dOD`tAEfsGcwy3<7ZYE6x4NDq>SI5@{l7t(vgLUB3A6igP{a>l z6!AK$z@mpZzXcY(zlA_e(1NAR>;?GwAB!f(QTe@s&$8$gj(l$dqR;i$MAFCmGt7G@ zbAj`8in^;3*+)W1iPT8sop=Ui^#WV+Nk24-5d;`q%^`$vN0kmi>XP5EBIZgIUAIbJ z!zyAO~G06`cKnwPL3|@$APDg zA&%E)npl9v1lDR;f?mUrv7YD$8V^(ENZ5lEWWZ=U)hU?yH24IN-0$~8RD}`oF4iIt zIL)T%p!xwirf2^4EWSPcg7X>Er*7l;HfDV*`@llBh`|kPKhS%wH zkly4@D6ay1N>fx;Uqd{^&|S+r*N=hQMz>bXuroWH@t;un<|dX|qvfNLC*CApUkpa~ zW*@4ufwiyjTBHb^>(fyln32n@v_SPp0blPk{6|#c7v2$hkE5~~t5n+LWLEnnm4if` zUTN4#gn_ob2hf#!(pOh|&q>7q@uzjkXBf7|T%&70=||=>awMEn&>6st5fvchx7tEu zM~h;-cr73Mmt#u_B_$-Z?!PrX>i~bURcbKvevaxAgBswfz$$m{{NrZ~mXH6BswqyfNV1OHWbg znCkyW*-scA4YO*G`YS8&Mt>&*WLPAt#owSHrl8PI8{!bLTNPx;f5B36kH%T>o9iB* z34DIFVpt+@A47(qeI^_Xq%u8ZWGf58=!m@hPi6pa2L$nEer273tmtuo2oH+F;2;6( zoH)F&_xz8rflV_)e!glF1;6~s-}nj)DQ1H12TyUHp?7|D8&v=P$PN`mF@;{FX3hpQ zA%w1rU%012Rs+yAt9$#0z$XNiHZ5I|UL+9D{m1}DFfb0(2#{F&@uB~2$adkH$3s!$ z$l^&r_E$#~JcvRj#MK!OGJPK!nX59!n&Z%wh5u&)d6W+F|Lrdir15KLh+^UkF8-oJ zL4^7x;IXp(1|;wx4>li#l7s_!@M8%y$YYS8f%@!M$PvhK+$^4TfO)Hs(c%;dCIPi~ zKj{|Wg^oI8M!Q02=zkCd1pS2V{YJpJ-KXK_2R9Pwmml|!(t+G-4T=PEYXwg5i$6#< z?c_(E4g50T(1itMs28eG&(MX$bm-OyWI(c?Jh|Vd37HIJ^4sn4i@$h0CN#VKs0Hza zbU^u8f-evs;0GCCFgk39l@x1N{4VtlPU%-8W4)yiZ2G|g*gR28w1TackugALsRSrvRN^;(b$8IZ%WK7kC>GRhF(HewZS|FHtF zQt&gC!>k4!2(~;9Ke&+LtiSUAcMgmg0$4B>&;SWz#|V5?)L38vQjth|eD;4UfDnn+ zW(D7;;fu&voJT(41k7cas^hDogLBXo!S;rrr5^YLcDBqWfsphLZ_hvB8ZB_3Jvs^+ zweLG9cO`=6Se)F$*f+c5|g@}+w6LXW(bxdSUy z!s9JdB7!pIC^|^VJ^cQuw(lUq0i42D5I#_TFz*sc{H-5<8Hms`wtl|<=(g509q?G5 z4&K<14=5deFaI(myS@8&8{B8F z9*uB74T7H$Bj}QuAqo2UNr=RV^WDU>o4oDgyzk@~AC{hE%MEF_K1?uG04%)*Oo7ZU z8#sanq%cLH?5?5kqB5aCLl!gE zMl0~P&w}f$6uo>@N?v3g(z1FVd#nV=TcX zK@jX-RzAdncfmtI$M<^Rr4R^qK~=EnHV9XQ4tU@%9_$N1unJ0lsf8rGjq`(Fi1l|N zKN_F{0l@*p8k56ckUdqUV>vl&Z40U-=(aLykmW#A(Y2WicyM{~NO+(-#u>#xxs|uq zjer(pSB&_b@SwEBj|wvRicyFeZGn&MkrwDf!gHA0^Sc9&6Tyt0OIM=*^(AW9Nmr({@Pz3)jpa`zB z0s0kN(8w}y6j0P0_;ATYNC3M3GvN*h;+TLt$`>1?H`KH8+hs46r9wC;k-^V_h4}^5 zS|QRlDi)-3<11*;6TOoG190|UGEe}hfQF5EA4rZ9hafuJiaaIv-zX?Tcw}rCz|@~j zBaArl-!1}Btqm1Gw0T*&)33oM5L{6#6a&-rhs0SM14{LVp))`iB+@+SyvKnl%`?SFvK0st@xyzeD=aF z*dZxK>bz@FTaxDW4}1&=21Cqfs)LYs`iL_KAVb%B50VHHNB~d>p!KB6a;riE%y2-e zmJ`6-q0^y{f(m3dZrH!Lj^9}Hi3Q3Lw_8(=%3ebAnQxMwkM*y=zCg^PytiT1*sZ7d$U9^idI>!_dr>p#8qWm9dG9LyYpvQ`XAWbr0 zH&g-2AYiWnB3eKc$oXU^1ImIH|I=clpvpwxo`bp-U_b%;&l3pv?e3ypeta)vX~2{H73AUfV6H7_M8l>4jFAEASIPFEDCh*yVew!9`bQm>h#amH z{6t6XG|bWyRs(>CFy1X2C;x#n76->)Hbk(D3pDb7n+cLD4KT%` zAAnT;-|!Q9&XlV6M5-PyWkQ=H9}$BaDc~h5W(*{FwkBh_?hX@jQ;^B*_2BdWF?1wU zEzssB-R?UID+=Bg#e!t|-lBBi16!gbs9^Fa*r0e3fLR43nZb=k(IMmqt>A1oi1dUy zzNqVUqJ2J6u5lDf!YzsrNl6g22tveUmGVdV1|3l8tO0}OK`o+O60G}(Yl+|sHtS4m zg9lasKL#3zX`0vp)Jzam6dHG|U~EAgdiEC-avlfqOVSR8r^7@{1%DVXLt-}&GUkv= zp=e+9JC*{bz#sZFV59uY#R}N8|HCCPBzo_2*5r4{T?l)}M0o%B>Vu#{6x(4TQFbD} z{iN6%VE@>$A-#P2|L7d}8^%k@@&JT%n(@8x$F&JFQ=Rx}x;r4E7R;mm2_HfX%sfDw zKU=AJ-Fngo#0UijLxbLoXNW=nwiU?5$8@PD(d11f$-sSu1wl|&l&3Pb5B`~tvLC3~ zLu5Zh&_M{cmjjU5SaU%AbF0k?;x5b=gMWrMQa>gLe$bDxDg^8>0{|~ClQ6(@aFh`E z0+$f-0*)0XL}27p-2Xq-9^fT==4XK@b@Ox^+;LEUAwN$68d*i2Y>M)~%YuH;6k$TH z=>N|BprZg3@_z8q44%P6u1B+lkW-tMFJFKn{C`7GJ2jyUqy)A8hZoftk9fo_I9n6G zW~>iR0WGp1HiOk$j-WKGfxjDK)-nJ^ub@NnN~R|@@RyX47V7!qz8bw~7i)A<*E*HE zcxfUN!U3vvPhmmL```g19jOEuk@?Cm-(V*NtawVgx=RA?Tu?Sv26vUr^5moX!1$zt z61_pj1_a4hl7EV=I6{C74w6`xKnP8SjLcAw3{?_rFsRV*UEK-b(+SL;LYQ6}7g5>3~58f9uLiL4=gdT(ExKY|xDf z@)Lb-63^Wye0&t+x?8@UM}GzhG+3qzG#vhm@eq8HA|De;UW2O(95va$ev0o<=HcVx z*U*!2W?*BWV_*uRX14kOR`Fzf;C$eCpnk}NX1r%%h3=>u@jG7uOB7#1Cj#bf8ldk8 zOyh=oM84SzU+(ofimyZR+bWWrAismWCx{^M@B!o+e!kKWp9l(+J{BV%Cp(ErK@dXN4=od?9L zvbX%yWZ;cQ8cZe#d_vW){Xgu1M&KT>+k<4;K8_9mVJ*;n(gJewBz4u``jL~o1%(|b zsSxQZg!FEe7rbeXw|tME$h1yuhv#^tVn}|-!{Z#N&>$ZG0-zxc&M$yVG~hBk01lAb z1qSNj@m~OvV3;8QqajfNbOe)DBP26np!!GQ_N))X+-CJ=KYGA=SZiuFGt1+dn_{{8Rw zx*?%KprQ|e;d7|K1Qq-ryLS#QdXIDulnp!=hM%+kL-Ck~)i3kd#5ZXTV0E&{}2K|mEvk69hfCzLb0U}U8%5PA26`aO+ zWO`Dd+fkyUwAb5JRBut)W>74<{=t)Wf$-toU6^lzrIjT%(LHE*b%O@L2RHB9T0EyV zz}AEYpam6-)P`?1Qh(c&UZi{|GI(NrqC@HgInOXLXOF-KcpQF!U`M~{mxM6dezK=4 z2na?63a^aV-#72)OTsEQ$dmk|ZP8dL+q2(elr(L7Y}*QYNa ziD_GN!(Q`KCPPe3&COt{vo{d&&}~#Uf0dma{L|VzIZ6q^)Rc^j1iIq{7X~cS2%`e@ z4i~I~ArFYavuRg9cnWB18bESQ3A^t*bPczNHQo=lFb_kMQyPQ(^sXX}2TTR?KAgl9 zk(Xw#P*n2lEfu>xc(zJkizT7~e`|q|FPrb9g_3>6nKqDK!q;$xd7=+~Cr7fq90UTt z20+6*#-#pe%lu>)7od9MpGju(X9c^jBN?hCRoKeqPsxi5W*{-cobOz>gNg79SHFBC z?#2BZ)qr_?c9@!cG1g#eiI>>e6J`a$5rIp8OkiZ+^;SWr4FV&6-$}UOY{jN^FN=!4 zmTgHxed7uf|I@|d`}ujub_!JL%V_#EykC-0e;2}dP;9cpTKb~8FQBY?4xR%M+%0y) z#V3A7YA~GT=90%S9dWP=lB#mOL&H4zYL=^DDzxYYzP}VMQI~7%&@@>mulC~?sHwx^ z#i_0tHf4Kx)vg7eCu6RKzH8U}Yg>AA(3CP;7{1i?nteZd+N%Jls6+I!Y`>uYlM1U0 zk4yN@geg73ihH2d1M2k%MTNPGM^gRfL&pA^sNwy_99CX4iL=Ef#3|xwae;K_758759`9(9O$lRulp@!Hp03Me}5@Dv&8c6 z6jt^<(lqeUD(ROkFj^tdE4=e_RZ>M}rD3WFij7EnZ=AE#s3{+kZ@3cspnz}_K4N?}U(;}bo7g)0*9 zIN2(<7?RC44gi9X$&f^}hNrce{y*((3H-peE^d!&tK0rd^m-(heE?9L0ZH@1HbVHn zY_UzCrF(?{h}XFDEy_)m1>nJY7ZvOAzb~-h{C+6{E8x#221dM`9DM#Sg=?!lHn&Xg zWHg+P53_nTQl5z6YUie@WWFt9C}DU1-m6Vu`S9?@0nPw9${) z@z86}^OdprpG{+lq$Q%QZ_7Aqs`r7kZ$XQ1$N^fd42F*KI7Vx*9Y-du|J8D#92lkM z$$0TF{;=)Do#r!Wf&q0Y4;X7b_)caMy<>Ft8!h9AI?1F|kf#c)U9R1pG^o-U+&Gyv z^z>RNn~tqnG3gHs)f>%k{%8DIL)MtwG44pv@z zac46^14qyOz}Ib;OaR&AZ;44#UgW2)aq+=sBb%GDLepV(+l^`wNoB0vV5OafsZ+NoT|%CX zV)UTWaao#Ms+_nBCEtg7O~bU(kR=i2j|*QgMq3&%Hea%xUbd$-uS4&u!+J`6IxZ@# zZd$7EDsw#&SbjL&9!-%_rSw$b`{`+cWO=Z?{JJezv1Y-mwY0i!8tO!4{yM-2%>x&H zx4eNq?nCyzGWF2Vn1A)$^PCZz%7{gz`Ff;9n?hpq#!5-tpYezB$?rqCaAA_FdtI!L zW3IoC&YbygAn3$taWqXoi^P8@IF>KkLqIGmqQG9G%kfT)?XM^BvbV9|e)TT1>d1kB zU^A5HPnA}a@D=~B7b^cu%{MYmaQ)3xwBNq+SDR&WQhs9 z=rf5nj;c#)@Rq}5d#mR*2-#<#PH%^S>!zUki)&spS&F*hCFmuIJij}6dr~buk>({f zq3%n3wl%oj%sSEhGe#xhX0WOj)A7rkXtYCgTA_MnRvoj!1V*Jpf!t9`OfCC)GJEje za397x)SuFq4sh;&nX#=IKJb(|XA&IGa>)sN;Z!mjXwZv#eckvG&!BDg@`Rn8zdUr) zvJGbLJBQ7?658Id5gkj~#KupALy*{Jq4zeiHFOU5J{*uvOK$whg`UHOm(Ibe9emLoe*qqbn3WUU>ER2H&DcXAN=q?)m~PAj>$9b zNYTZEP2|1~AvB4qh2(0KbkLF=Kta(l@BCMSUzrZ`0S-TvPo1|j&yU^m!n_&U9hXw) zhSuudE*j6=@Vv%KLz!J&zWp1rvCExGwE6uHRasd*!k$McTI)R-$(u=aByDWzQE42X zvvQRZz2FUQy_m|fza+}x3Fs?~YdfP!$I46}7xirxX}Ia;_Zx(2n{Sv-WQuULxHwDa z-7#HF=kz{fl<@Xci2h9G$mjoxQZxp`u&&tcTZ?xaQrQI?vw(Xf$IHOyiN$4^7w0^* z)i>-P;{Em?SX`=}l(k_0r2MS}n(olC3ZkZ=Pky z+Ub-o?oSia){3yT2gZk`-83`iEIpqZr=m|wE1*Brt!qpF*a!bnZ8FN1C7ii(vZwp5 zBa>{tLXh0|jLy->>FPuGk)wxt;9E_(^Ayh#zA_bRFkHxx)^J>-}J0ntD3rCVz@ zWo4k!-5xbpkX@M*MS@W*p7eGxE3eZl!E%gFJn3eKH-pAv)rw_OWq+IHem1Z1>n2r0 zcc!^2<|moT+E^^DS0S-YaA7i`NSbnSkV&xIDYDNKY+JoZTIGc2x~Eb$Rd_ygZKu4* z)f!q>+0uond}^Z5aNx>*wf0GKR3j2wB&|bKVmMOG;Nv8f^^on~--W@tRL*aYuH_n( z4op{wXnt!&o-syb47`MA`ZZ))%jUX~Yp+=vSoIg%D}~QfoTHma`nEAf_pG{*l%vMDcX_5jUPYdyC>p`h8YMP)p{Zq6#7xR;|w4UBMdJ z+oWns;A=5wMH)Js94i`3I0q)?E9i}rAjNsNn=_rV*~P!@(hkIQmwFUU_cgvh1K$O{ ziK>0OdKPD^E&B_4P#x*n zSx$_iv^cJw;%=VXPKcOg8fNxjJp~J?Jqqj2(Npc~;uPQfU7NU;Z1k9zm7V)w zI!62gIo%*5?>;oB=lE9G>2GV26fu1fetvb9>*bbLWuxj!JkuM6-@MA~!*pV&%v;@Q z+;LAM;~jhU<`8$>vjpALY7X&Z7!I_g=tv=f(O0EkoKLADf}9AD9rkEOfLL|*&~A(f zm>-xQ7#`>zXu%{AO3-5P2DBZ}fmfIw_#RSJR*Nq9`oHb6cCfiHZ&((pyZuoq%A7=` zWZ+NLIUsf+oA|_(f}t>P*O$-!B3Hc;kzZpF8jui#N>r_xtQNO|8F&s>UP1cU>lnlG z(eUTn!}mq>RNI~A*8_Czzg$chJXZ=ejO91)h4v4p(-Ldy(vOATG+pP=%zL5Tw6>pJ zw(G&2e2lc_R{fEAm(F)j$!uNU6CH@yWp-U&7qn5azq)owbF#)N?aVSRX)t4%!-o-p zcoTpzO@*@C@|?z*D(GOQDOy3RLcz|URQqf}q9$Ogd^C4u(hSgICt|in?Rph_FJzRa z<=ZE+%b7L6Td*iUd4dt@HRJpx_AJ8@&wEy8UDk-R*I5Xq$$Xz;^%9VA2p+tbStzl!xPS5BFadpRiB>Z7ueRfXPzrdNN;>o;W=KM7{L@hT z`7Q^+A1Il#+v8vF<~^_}4|8MF^STHSayT3b?J~snaFTC8W3iqHjK$E-vmPQBtznL8 zshO8*u4(i)7PP2R5Eo6(v#R)Qr?rDU`DddImw^p|2;d&7y`RUeVtmEFR&n6KTbHq%+or&&!m*P5bF zSL3c~FDzzqkPs*28r?}#Rec%9VH1*LptOWbPu|1-<*ELyFQ$E#9xR!>sYAC|KOKRn z$&X+rge2B#FHQy1W?qZ;3^NMgUr9;{^+HF62eVV(bPvS`(G&&@68EO-So|n={aIYk zR}e2@(;{nT=mTMZ~zdDx+dH#^w`5n?;VO|3f9HhHP}MMt$7D zR*4QfW59S<%EnB0xrX1<(3xFrw7+=X^3%kicygOARW|P7)D1#IsWxS75&iG!WaqD^ zc<(oc`k1TL4XLx(hNPv#8bV$gz13Sc3hr5*fb%_Rw;`KJ1H;F!qv9g ztCD-sDb+a@oPqZemIAh7=Jr$9hDGcWT;}lP8@-l_S!}zkW`47|pbMSXf<39CTb~`8DLSYi608u*gteFqNpyQWH zg!?vHw9o_we`Jlpe2wg$*KKU8%!{3A8^mtWSbDMt&o;?XzA$PFk|UH$bzeu}-yMj~ z9rSYS8mO6NU)O%2{9)OED>3QNNH=}s6^Y5TtnZ~b`0+iV_U4ZGV*18rT#?PI0W5)D zUcC#UJhKt5jE&X7<310Cj9YrSka?!#>lKC16rDQG=3ex)%NmMZaNE|Qi}znrAMiUu zSUuG(jtIMJzh)aqzjGBLU+~6O@)%f#_H#z6F_ijtU@7uaP+eIaCEdIhBC$10R`FT* zi6Hwm=s38nu#&2LuX9^VmQ719o%3C$r}yGWL22JFz8P-IYp$tf_xFy-Ml{QAAR%Vl(zO(6DH3*woCHZfrh`_b>+ z1jeP~;aXdxdee=zTwydqMQ6VJugbH=GFg8Td46qfyGd{^kA>gWJaqWo6njX&NVd90 z=~_fiJk4~%x?}(0P8nsJ%8)f5Q)}ikaj>vcTNF6L_2q}ur@PQq14^cu+Y&(;uWaY# zR9bcx*Bi&LF~vWr_LxrTf20(i29*4AA6-FR*w~_fmX4vdliSw)ytFZT@O684i@u7K z^>%|-gpx4&C~9r<#?SNaZEHj#^G6MU@onHUs1xQ>7S_z7ROunjA_cZed{!is2M_(L z;HB2SqE5=;SYj5NYw0?|-o7PoKEn2N&k}^|6?W+YGkJ=s)*>!i-Wdb#^sc{nkww!? z(FBzi5B}=3@m9nH>O<;^JbX2G8@#gv@DoUbh`OZW8NrfPzTLFQiLyQMYD{Tr#@}pS zwJ})B5-VUX@79Es8-{v&*OU~eDQ4$+gkC}2cxcZXdbvx7eLfxwNKThAQ(;ME->4ID zFq^BJ_o>e9VVPb$u-b>W&|y@v$i?(UC7V2d9K%)ef6@L<)c6h_VABf z`C#$IG#-bRM0!mYd`C+ADkX-G1>5nwvZmb)pNLpL}w$iB=m9X-ef3J3g1t;(ffpIm~?-?C;NNe|~1vsqgn; zM>~JT$iU8mk&;C@bx3vXGBkjHqhB?lpi&OEBmq;p1s92ZLnz>+bl_2On{>)Lp?F?& zci32yit)^QvZ6@Jn%QDInsT&5$b@|LlHp`mZD_)sLF+q_#y?zwA;rn2ar%|%U)0c< z&O)b}NI*rSa!)8B?+XTtRVFVy@ZWi54YRmbd7qdz2AAWHrTuKmdcK=3i{hTjBYi%~ zvnw>lJ7m{*IbP=!>TsR0IzmCPR{eWKfiTEfNexEXQJI42DcR5ViGu`d_ZPl0 zsaGzl>4&B|tai>?E@-n-k=HP5^o7>RPB^5SFzB}ur!)~?HJ*9nC8`hRF8zYHM@uik zWJKIOvz&AHY#9o+NvVn>T~*34m1}9wz2D!q=N-#=|Lna=))$@aQ?Nsn(BHrA38f5k z2?%xE1)n)wafhiR_!e8_(exx9sZt^auAzyrgc_T^zOZWCCa+o28&U?3tjH_L_r|l& zi?Np@4@JtZuP*Pum+nokA=LMLj(u;o59V{z|FFPT3;fG;4Hlv!I0`0%Sqfdq=PbuM z+zk{7v+U+1x$Rs&FD9nW^sYWO^l8Sk!AU?FeEl}4rZA)7asxjBTcTb)xI0Oi5qe$U zARIF|=OB4v;$rqWj9t+b-!zIb>LT7zLqJm7TcwPj_FP=_Xjn^>zYThM5HUBS&kmA? zF1l{)*w%i;C2d9(34XWc<%`;r44(hqVWKS&;c1_H?qI=^XXP0Fqhu5@T`5;yUQju@ zciNc&!+?v-u#7Svou{y!^;aBs3A1^urdHCO6)uZ>C}J*>qQehOXrXVKD6fXyRq9`> z-M#t9b%II($1nLB67+i6&^K&2Olq3jLG6berPMuC7_o^G;K}d9f9MK3R!Z#Dcp~*D zdG%^_JW}A$QH^DuLE4DesYAD7#*BgB94R&^$<@|0FN4#0J4>Pg@8aZ7&6jSgBbohk z2Iikz@H1{bJVeR1fh=nl$#pam!8|7q7hdW77A2gzqv$Bm+-^0DGIm#|*L~_b3HEYG z<2o%@6;$*h$Sb0*o@a3HyJo)b|H&TIVU^B~*Zir8zSUf$AN^ZXSL#MYG5qpKWm!FZ zB6qG|RfDR?0#D1Ql#1@tKF7HF$pMbKW(^EMG;ywWp|EIg<{IWYL3m(nwdU`LZ-1b# z_Y?6e4mV(iu|ANe#Y)t5CrdvYGmaSk99ww@;M5x-R;J*}=mBU4o-sE;ZOubEQ2Y{) zvO%Kihir1_7a#mk;RN9diby1fCenr~8NJEaiZEa6lHoVQVQpH;yDaTZIeed%ddSfv z<#Us6%7dY5thQNZ_oN!d7ygQ-gBgf(r%d=;U$5n~yH=yl_QkdNMNY@ja-9)hXtT4` zQd3sq4}=>lVo9q2Y_?8gxn_ljZG_R8 zNrQ(ED!jS;{iG`=+pQyFm|>2Q6BA;(Q|r}=Kk?$r`nz(D8Id>=@@~ts{gmF%{AM%H z&5gJX5)_{0i*SgUs8~xH1YksQePqYvK~U7GEYf}}?pk&b=9cRUHkt(y3u6CL=-^)k zRDV}U`#Z+`!iYlxX6!RQX3$^o{pE~0Z^T;0Pby_Dr^z51lX z_GI1%>4Nxy$}c3$K0mwCa$NhRiZPf}{?)4?OAQ|g#_FFm z1Gx!WC-Fl~xow^_9tzgkF(>N`*&Qat*rtGE(f30gc-LYw6Tqw5ajHHUzy{H?+2Uan@kn4)aveaB z(QuB<#%3g)iDq4yP;OF&C44tJSc`j5kGPRbPO>4ew&?3?u);3g%8fYqQV;D)vYizI z4{t~+Aj3_=a#eMp8_4iySV7g9PMzy=S^5lN$?Fzj^lz=E!) zMn;(bF2QKX_^+yJ>djtBj_7`QVKD-U1 z!DA-YVG%Yjol=sB!kBEiVetvs#Q8j76|IR0x^AZLMARFEI{1H7ZTirk2yXI8dTrz- zmQgS`PHGJ5ysfO)O!!IFsO-3O+W{voizub z6jW9HtDRL@xN7gF%bG4MlkZ(iYO6fI@}G~x$1!-`{<^(TbWAr9wJnvtH%0F=iN`$u zVxs-W|Sv>229(6!O6-g40XIGc#F5x!$gc z0+D@S!e;EMjJT{K-I%t8==6i^-bF;R`OJ~C#m$L$qW_|}I4TX4H<1D(es|0e&e#Ua z#o}k=l#K=EmQq%QR3ykC=*oHOlCsIKnkHM5<=)%ptRU)%B+ ztozJ|#;osOIKY$st_%X1fR!TuO;N2KaDCUo~NEe8Fd<+(5{c#kusX z;0Z^Lu$>=@hnHqz9FJlSX<)!noaI%cbbsBqQa+)Y8+}e9c$y%`BSNE-)to|neVY6b zid+lL9Q{6&HtKaeFgzhqHP4^Ys?u2@Dck@WEY%ycKRdLI9i0|G^&Zvy;hR$X$3FbI z^ako8hSi5ZTeHQ(w(C5R0aiWN^s6gm)FmH2xfHo1KeHFH4o&AML?>PhyXY>E^e5!l zb>Xw#Yb2esZx{AyZlnK5c?SpGx{#V($gYT3-Q76wiAAidE^OZVXJ9UwZ3pp7+Mm^< z90=4^fzR<)))m~syHEpLy5Yk}liws}Es$@?ct*^357vAMOC8qo{LP=P;9+hn*L?NO zBKDQ(n4%{(Rj{o7D5RYxQXTE%rL8 ztfZehOka$O3snqHG!4(~_VS|P&v;lUTGMUCM_mkK&aM1JA~vUyY8rwZ-P?+9HDPmJ zb0OAIDihl=o2)w8y*nfFJG?Z^CH}SskttfICW%)b`GQL56>dVS6;lUjht>GSX>PFI z!EK*EFzj?VH*wW`M|Ce$_+A)(u#Aw@8|$6hqyE6B9Blle6v>j03-;OFAIF{@Vq0ZF zcV+%`4A|PHCaHt{RlDsH|5-^((agR4HixS*{EnI7`&Xa##pCe^bc<#(T$t7JL}0SZ z?rB~eWjot$o2#jzz_SFTd+4P1CIr4g9n)w+yrNryiK_pVGfOy4SSulDy-lCo2S-F* z3t_V$xX`&(RJ-Zz~WaoB+=FQYH8O(2|7uiD?E^%?J8o^6swZdb)hPnR@4DZscE1DGys}v{;7uhs(y9Ioe~O6>jNzJwNMWZ~_I#I9z}a&LCtTg7RC%KJKE5YNg{)QZl-*YCjZ!o%W|e ze(Wmgq5SxFU4J=)dwvqO$v1g>Qw3OF&r+?QG-T|p=L{|7Yw5qz7c(qe-Mnz+La~Id z3&w9ZU)F2D*^9+CSk)+@JDwnkVZE^MgyRv2f1jEmy{PnpUbIJrs-ODnLS5ylz|v@) zB3Ex;A*`?VQqw~Brgpi`N^LtMyd=l6RHZrG(IUUfx+159-Su8 z`!g?hpPv@ms=uOK73#Djx1u$gy+sbZ58L;e@OxvV!?@h0NmQFKB1TT}$ zNReP&koQgTmWj?HXFQMCZj4_wgc2KA?4B(xKSx@1sqjoF!*<8?S*?z9%;A;U+V4`q zy@gK4`HxmLpr)dBe0vl3e17Pw%J)iUpo2W=g6ii`z04oIUnWv68-(#uX?q?C6z3t* z_%$(Vc#MQ`RuXZ;&Z^%+dKAoPq;yGTkn$_dNzYp+gM>|`82Gz`&eey|WhT=V(@ZEn zZ`P_ke;qdNk|_GY3hPtykvuTRRv<|8`MLQmEz)m8|*HUZXHl zkg3FO&5s4o*n<@VnN751-wbDQa|~(6vv7{L zJT4~IjBzQF8-hGgbqS|1?Y@_FqbQ15$JVDQB~1leT=X;{30@rikyL{?By|u+(jR%&pd(_K8IyC}z6;#D? zOF!X~W`>;x;~AaaUx}X^ZEyTsJo>Hgs*W0&6*F9CHO_OXJ;jN}8>PxXtI|W~yM~DJXH3J|G>PK&gjQQ9 zizPG%YJIiL3G;a)?rX5d^;<02`()|1j<06jnDIFY}(S}O=;P!uU*i~)BOW1 zjE*xfRCZxOt9s{U8Q*`#Pn{ymXZ8 zmvw#cVBKd@6Z|l)yl66Mo}fD1Qh&_7Wh4UJ`kT<=8_E8D#i~E^g&yMTM;G5F#Ff?C z6pl=qA}2Q-Wa?%gs?LcRZ0v2`+k^+^?N^Mxds|lhyena|$0qZb;G9k%U4cu$OignM zEx7~P-n>ZK@-p(I-$k_f^x_lNj0oVIl(KhEc<_{!1B#UF~+NhGG^19rF zMw$U5Xr_c?3%rTeZqBox=-8c@AC7#bUlp4Ny@w6Q+s!T3T;qHNQ$c5zOOhqCMTLSL zS?&K@DO30Sr0DD#7$mQPE0V2A4p%FK`q7i zP$Af-kiTM?U{nmwd=7aSU#R-a8X@vwh84Q(- zQpADj-z)Uc^@sWitkIC+=x;85N%L?WP-}+G&QUT zi^rde_+7jM*)-NkOxSE13FCw0{;q~^ZMm1nmw4&z9HN4sTIq$vXNd%scH3Dmx5^YM z&5I9WOW3X`=y~6eqpKp_R2gx3^hnK>*~K(PHuLmG2*ScG?xuDVP=A?X>(&fj<&!`q zX`y$`?Rgfg=DH(#ci|y}L~=HVUu{V7PON)Mt5T@i8*u=*zfhrpWMImI@v*aCU?zY9 zm0w)SY_O}Zz#8iF%Fb7k!&r@7POIZ*chlb!c(BAC>?%kN1+Y`UtlZYzmv&AnChoC+ zz^j5QZbi~%dDbVSEE91>$zHHjTF5*c@i9_E@sMCj{4NRREELPy`mcM9m%QlFk5{=y zZ5ovi$!oJ2+4sLZwzds_*vvVRkMY>V=Qv;41lj7@}B;QPAWP9u8@?lX!fn`)lV zwFu5Ac&WF)GulEW}nA$PNj zp{KaWRG`bea(wC~fvgpqugaLqODhj2^ns3+tIjHA$r;nQZxbnI=5xZUlM&AQ)3|@x zK34v6rv6|{jm(}eb;88H>u~VfCCgl_81LF*>wZ%O650+DHvLZ8@*?4;SPIF>pfRv$ z@tnwVm^3j_M!Js}*JTvO&~@iy%BG} zmOf}^)JRW6*~K012$%IMPJ^xnHiOm~TbXyNZZt!Y1zBg}`3pyeA?wjZu%f&1x69@& zlN!13m#bGzDKtH;c1u_jC0};kjnE1Wm3$()xY1KHI0Rtmcvq%~#6qE?A~XCFg&EvS z@-lji?eksBR*SjX0-Sj6la-gq`HZp_c;b-gZ(jJ`Uk$HCqUU-@{V|sHz-Z!lM*;TV zdiy*9QK-r_F!dhCPr9tOr(sru?re0uwU9rYL;#rQMCxEGOii$_{Dye&EB7zlO}k>cKOHp zXL)ROr{%lfg8b6zApt&6_DlPnIA;@F&8|7VDqBCurGI?#kv935cp;IRr_TM2z{a6# zBel4eHu;p(0;=>9HV!oLR_QP|h40*5uD0RX($2x?l=hBawA+^Z21#|j)L(X)y2bs# z3`I0ULEt~oG2%}KBG#p#kSbh(%8+E9ys|1-dbPb?u3N0s_<_VzuM#?KI4O}J1){*w?}z8S*A*j zfad>MG^oKnMu{=)Le39{TM&cx40`Z?>W7yPa-6IjEbLb1qRD#Jc8;Hdf6&p2?^%hv z(XNy*N-2~j+de!0Q@bk6&cCbD_YyL4^u#8DT(OPOLw=x1*B`?q+qFK4+yS@>7R_;E$wi_)XEN??~EGr|2 z)%8ivCV%z5f?*+tyuYYBr7ar$+jcRo5!PGg_}Ej9V3VcJ?%XzOvH&XLQC{hxaCjhXukA=cCw+&WX+fo!FgHtde7*4fBN z3b>yxj$SrLeB@@Dl@Vf5Re8l4_%?i|Tp@uHUuijF$*#?+^|d|T>F4%B%M_c~bi)|j zIjxVq1cm|^7dxE@R#0{SSju)Uoohs}bSszj zVVw5jL{soLQ2K@cLu|%T$UD${$k%B_vE!lSV%9?D^4TXJdPKOkX$XUb&^^ZelOI5V z1O4of1@9`C8XVZ~D*sJFcha8jvZMFLcqPtEKR&thTRD@DixofFu_Me!CPbg})8`_; zip7k-2HWO2_T48~wAUQL_jB5Z%87F*Y2m^O&zLnSjnSW4^4m#~9Ut$G?yJ2GCxOE& zFW>l>s5pF3#OYwu*0K2eXxhg7hChbA)tk6lM-d9ARNd`pao<;Jy1F)EoRgQeHct~O zX27x4vMZIARY|{J<)+py=#O%0Pm=bPR+jVoYJ@2JhhWA`eqy`HS3eXRc44ku{{-rG zH@Ui$`zR>3Oc`5b2ekavwAdgZBGOWRMbS8B&$TF=C1m3y=BVf zJrz~z-d;|R9fc9pQaz*wCImX>Y=N&tV2b*9_BetS=t}my8y5Lg_opWCmoF|n zZI?H3tC8?!MK6Sn1WMSPOcV{}M&<&|<#BO#zSh~Oor#R%Eh21V5)19gj<#7?eA=x4 zc4&#Q1y{mUGf1aQ*vlCi7@V3{P@DH~+APPqEV~0|k335aH!22o zdFC|VKW^65MYZR0$w2j*cO{*?xH9L>OqA8>$Bkfpw}GjX&AV$%8MRVsreT@g7YI4Mt_=q~-22PIL=R0rOvNzp<5n(tfs>suYY|a{78Oo+*g( zC^d0|9%Vh_E9~tqkqyI1Y)RAyp%i=8QWc_ZU5A)ZLK+cw^g>mquqkY_V~Q7@(CohP zVi&fmeGE$p6nvnu3=_>@Y25}n^2=RqbZzQk19Mb)tN^#fsH6JacnRA2G0{O zSGBT!Y@|nMZ+t~w(s_RTde(>ErAF-cHgrs=;dHNEfi+_Ew6YL)7Z|S4sp= zvS0_bLk{f>6GMRHppr-$gT?0qHAMw?=c5YEvgf48k;*I>_zh$8x6m)7v|7jX*?wXt+&;PObddk((U|fMC*_Y$$|i2Vj+Shi2Zyxs(VO_u z$&)(N`{U8TojVEg$hWv>UPomDM{5Cb^@B0oK3CG(;-^`ay|k^=DP>xzYu3MuC|Qyl ztdjHC$?>6XO3GW!w|Wi-#V%&`WP-h|g~Vc5F5+#u^Y&~BOsgqvipEP$i&adVf0z#Xielhu8~DWiGqir zS&-T7$uilJo(AF1&kTh=Q!+=59lgmF=SsPDmpq_Dn*G!AbHi>w+gdl-d_LWQMqE7( z~vPaB;V)omQt9BOZ#o+1zh5oMj=VtgNk!uw? zK3$*tnjKH0dYtG7u~h6lgvKSWnKdZ_VB!~JnCVbvr1e^k8*Ae3ADH-2W! z*!Mk2lN2E&q9Ttb53h7BesS!{wnI~{cwc(q@VLUVIXs}^?*^mSam7tbPM>YEy7Y5ReM?SG`J4%= zLz?2h>B#96EI2f9UajX}=b>srH_EE43mdx?t~^koCr3RO3*Tzn%@!0R< z;q%x{zw49!teW>`x_;X?6`a~oGI9Sn@x{Qm!_V^T1Vw|{Hgo~_$STh{4;*}jr%Jfzbrj7e#?{lg~n@L)#e8MUM~}tW4bbVcFvCV`s)_yg(qAq z<7peul88uo1V?#WyJGvZm!;v{>RGbO>9qo6!jB1+a%*O1F zTRiEOmf|};&s+nah1PJ>)a}@3pA1g_93uQ|^?mx-n6q1JuB`kdEnYUPap|zwlq~zl zq1G`g*YEuttvq~I#L*&|2u@Ln;)}13JjQK(GR@s)hqcmd#Wh3S$oD1N*4D4Om|WR+ zL&Mi#;xES;zvmrD7-VR0D*EUfi{du&zBJ2sPiesKKlM-a(wF{uIq#PF*Ui(eZu>Jz z?Yr*h1=T|L1zu&!$E6;bDeN*dH z^W(E)SC{3lTYo0TGV0|HS=;z6i|P}vxugxAa4YFi$ME)2o3gcw67P4_3I?w}^!4iP z?{X^Jzx5pHbNIIBc2T0>8FSq}VKis`9gljobn%FQTczeial6Ox3@y*$(jKXtX zmqq)UpBG;}{1C6Z%qjNeOwXHf7qcHNI@S4oO%s>uzCB$P6E+5^-|^bP9BAoD zd{iG7F?;O2fi7za``78&O&feNK3`TSV8-B^H9m3rFud;ms{GfLO9fj0b9Y?Zii(5{ zQTxK2ezkmmxpA~K(Ug8ay{@-7e^OKD&1l=;qB*Y{5=xtv>xF%s+i|{a<(x3vU`ySj z>-`L^&;2&?{8RG9+G^>rrQPFKXX)r~Tc|d}%W2w^VKtnNx6%it@9&RVljzr1-yhvzu)7w<#p(Op`1pkP zj`$|pWcxcqO}24@RpQQHnIEp)5)kjuGhkMdGK+5-Rd7fQFN5@2Y; zVe(VFH_D*b288L2{eM4elz&CUMt&zXJTV(};U=_v7sw99I9MDEE_KNb504 z^77d?9JN^u_Pcugj?Q=b!LiHEO_U+gxUKDw{-K6TJXKOr+LQRpEGxg_-r845Jldv8 z?9#*uhVzr$6}XCo!9m#%voAIFjp;qp7aY!hTKo9_g>LQ4UL~@mLH{P#-C|-)xYx;Q z**`9Ybxw?XgIY(YwU6{*o<+i&=YP%`-2EWH#WT{xMz_1WB7U^0&1E!B9T?r)b!q-L z&XE&6(wyU>lY`6Ke15Cs;p6)S+jgm`4`Kxp`A9)q{ls`*_JY#am0je{M!58y0P)uvlAise60GC^6}d*sz=m@ z%L{OB#J1<1f7V~fF?oCohoa31>U(mwdQz^+e(tZ$J&ESW4-FBFzw{66pZ_k`lVP3b zEZkkXU&A+hqY&T!VeS6FZ`0;QJ6FbeOsG8j@x9dZTyap;`#XD$(qDdmZ<@3B%B;KU z#`_lip0_A*Wn^9R-BY^r_f`J-SlQN4eXZ;BS*zBHZzq0!jJxV`{C@rC z#ok#*FV?*ZwR<@?Eal75xUg4k$H#f5EWG*Bd%@6kpA_5ONkQ_7(CcIQX4Z+TG|cRN z2RM)3_%i6ntGX#Hx%@8OeekKXzGg1u)`*yS(2fU?;P;oq2o{_FQbjppZj zRi~dGe##K)>CKNGu7n4UBWoV9tE zS?77Px9g&!`yC8K{NE8`{oi(sfavfwU8bbFXnB*1O9`B_5ohocR9JkjG)aM~_YD%(r&A<~!lLVd0VU z5mS`+tUmv2*WN=uQMK3~RTOIb^GxF0F8RHkNdl4S7@vyhH!^6>8=Qfu#WM!qN#(!VnRN}t(%VU?@<{9H^^Cqq3 z8{KW_JTdFfiqDJJZ;{SV$kTGR2+g;;w`~m)Uuo9#@zL+BYZKzKM}M9-VB}#= zddkCr*)FfEs=gelT6)oPZF=R;@tewX ztgFTpSq)s1urIt=c5{B=JM%Y%y|!nLFIDl~Z$hkWbPf7cG2R*dhs zGxQi~5KqZZrdu`AlJkUzBY}CE5*MFQDKjA~Fd<}9H{r&gERwlk8K>y6NRC%h$ZL7a z;0SiDc17`n5u9!!9-ZXN6~9#^W()RgC1i(DUHw*-&hDNKZy!GnaS1P6@~+TA9@mvu zJaW}s?CYzgonC1q&*LVEug)XxBXkmW{bTSQ+xx`)@3UoCKdlQ-uh%xND1F^#RIS4k zb0u0uA01zRo=aE*rOV0;PQKpdx3_NY(oGC+vxg3cW!4nR6UJHYHf@2K?eNwwl=#l< zRB9|8a#lDXLY@d;w}wOVMOK;cL1)$+B67vWZX5Rn;ubo&63^^Z}(+FEw*fw{J2~^H^O~Sf=o454z#X2J&oCQ=p5yvi_!TC0I-@E^O)q7Sv zI6w2xvMX~}{yN{gqB3A@fJy#2TeT;jUd@k^WpJsVx`MgllE!7t1*q4xbKJpokx{c( z{ZyYFaPj7qfj`zaU361@GT+CiYhSe$JCDZ(SuoeGz2>+(y=cO9;X`mrq+C9~uf^F# zp<}hvqlyb+>r1_}x!*6)F})yKoC-pOlZG)|!t(9Jdh_@q86Z!T1T4m0pJ>nWOEe{g zawVEIr8P2K|2agi-9r8FzKCaBZw2uk9uE6XG{i++`dNf0b`S#w=6cu~E?Os+c|)!( zG^a4a$smz%fa1zG14QK|=EzWd5P%?(0l3_j3Rh+t4t0f-Wf%^*`8O1A0x1w9ypm9C z!UCYUYb3Hc%fb$mrwe>X-8>$sJI5WZ&cvxxxC)(~d_*Ef{Qmtnlb#Lry!x1vR30Dv zvm*cUdxjk1eQa#ARu&2po3N97)JFuXHaNziODwM0nCoc)fC?5imB-O6;gY$10{j*G ziIqO&U=Wk=z%JuOlZvjug=9q2_6rfC|L})+nYd4$M_=);aaM39_>wV4IM6lX;W%V~ zk26J_sB48>zhMGAknWra=uSqhoOI`t4cC>thv6jcyS%iM9KS5$q2)h}EQ=gOq66~! zFf27)M)~T|tMlkWqlVqfz&nW$Vkd zlgsArp1)*PiqnaLf*B)r?+r-*aPEnDMD(axz9#n)n_m&G{FlD&kUZLQBqir*Td$a* zA`j<{wTZwKE86t!2;~~q_~Hc@mrX+vUDA3IS;(5kVq-;?2&K6w%N2ksr0TeGiJ(rB z&=P1wR-Fxe4nPg$ETKA=Dzo%D+Iigy@R9 zO~NcVty5}b)M_$`s#;x=f+yi5DTrrt+wG~SyR`{$?<^pjuoE&mBWC6r8Vj0DrU@)A#QhDT2f_Ioz6x&in6Wo~oS2W7?eBFLpGYQ8N10HXo5L zoCjr#^NSffLPCgGw#(6sBy=F_Em?$d)3u*L^Jv^u7w9puaFRsR)IK>Q%R*Q&| zx6J$>{d4n%2~qIpv{iDo>5c7Qu0qVZFdhP9MLTC5N44YoJlt{Z;v8F zE|7sB9|5|@%uG@#;dsl*qluep=+Y=eE;nNYtA_vu?aCw+_`~5o37j5x9L(Val(_Fw zK&BA}7~HR1yp-fQA_|C;MFvz#90vyomhJ%7NElwU+{fcu zG$W|L$00+@DFk+*KogmO7d|)*OneOnq5fPH1lyj-S*G+Cp{n9wxnzxiJao(AQC3-9?u!L zfzGr_*Z~r$gNEq;GD$#zYz+_+88%>^f`2gY2``9CIs|Xa`K&?(XWS4QzBooj+(dQC zc$~&twP0H}1}RaAtghW5GjyBHjRjf|6_MSZK+^n`50XC}SX!KpAytC934?3IiD-Q{ za7RK1Q$(~(BWd}7Ba7pi$$9|JWj_ZepzTGS?Wgfbra-6@yU`u`bSZd^7nsKe39~eC zUKn<`kY&43Hg6cMP}vyKI-F96Yo2&AM4cW5JGlis>Q`1VuEyJ+tHWz?@dBI8^ka7mb3c|`|q&viqMJkqCuPQciRKaPPD3GWwfGwxNV zNfDeuWWtNXiRy71qAqmQq*q&8N~cVw3^p$=yW>dqY#ApV5>0hX{3;dVVLN>U%P}Jr93mM#34OdL zi{7#?qNtvK>IcEWv;fYp06a0W6Ebu#B`bUI+N? zb|LkG`4Hq}5EE2`izw1CQnD0zjQ0PO2Cvqm_ntpl6T;K-MSL_x?qR;Gdw!!g5L~p=Ak8bWG%*RhL=?G(viCiJdYPT$5*BevbflD;AQk}f$GpD!8oHOv00fU<0I~gV9K$qzETV3~I zb;+ue%zuw2@jAxW%oZfsa~L%_zcnOV!t*Ej{1S8WV!zm&BZ*WY+7uI{g*4&{TsupQ zHL`682536q7~%!=B3Pyu5dTz(hA+c5qNljwpJX7pwQCr4heQrw6+qH6Zvwh)(~+U; zAOga;BG?s46#}xgheG}_b&HYq2880j3t7Y)awu3%00+)go2MxO`lP@Z!Ol+lo=U3S3mHn88(sCu2<+<{hV#dH{MI8YMUP|WjaRdTbY@`8@Mk0@M2$Kk-PW)#K@H(1L7^ycZ73n`i<8}CTO+&T@ z)l7uy6uyo?J^5~qTFeolsyRHQ`?s;&eckDWwlP6>ZRS3U(~EK)Kwsqlg&5?xYN(f& z?K!M%hHCQ_NwLd2RQu1dGbf2o0 zy-Abh+%vL6e(4glQk^NZEd z|CMseL`-kbOc;!(_!-cwFLm)+StYIpv*vBfY2&h)@|JBoEDD-56AC9lZ?)A(!eLXr@d1)+Xo zXkLKOCIs@{4Vi+eCx9G4Fp-XIkrL1pk3!;UNNPWV>vI3I!kW<cI+J*rej~0>wy)&K3m^Lj4x+c9t zNn{6p?1vCz{Nb(h6aLzQHbs73bMD$B1>~h$We;RTa!8^aQ1S-T!_hp#=7=ap#wV4( zF$}FUa7p+x;yi9FVf#wW&x*B0)5YB<$g(005GXr{h-A&MZ;*_mE*m9XbE3=0bnLSo z&S`b-5c5l{$c7}IFPG7Z^k5F^itlnIWA}2#sgj5V+u)mBEjpL|Fw*tZpp)|f51Y;* z-W-{^jes#R{kua#1QGTJ084c8@igug^*q_e8 zo3hQ6t*GuMgRM{@sL%zI4>1(DNbMs9_g)H_cJL_UhO9Nh6rc;*61$-o>ob#b#GoB=H4Dd@6P6WLM@!#eXfRUd2He^RG_)&`@`31} zP>Oq`GN9agC|?pgqDg}4m*=>ba9$b?JN?gh+pbN=f^IK{!XqUdRpN_NOP}Zv6x7Wi z(n>`}4&sfG1BXQV7w|Gz*~m$1Dkh?pN9A}TMfT=(BVa>;J!BwpB9X(}O^64C8}-0w z6I1bFsQJBAfd9%M{_OJ2=#>bT1xcVHh=kD#9KLw2N3`a_P=w-ekeCy|X+~VQFl|M# zh>O0`Q86|M9A6-i9L$AenGVWR7vgdBQB>-r3y4_I5d=^vO1yyoYncFO@EYU`L{e7{ z#1l#P>oP|3<9@+4_e4#Imc$O}&)WF{woXosBcm!er)`{!o@Ru3->wqOH6cceJ z`fu`!gR6OvPC{WD2i2b*opj~i&LIa+|GEF#!S;WxGKF^4e$#j-tpO8!RaW+YB~|48 ziG0F(vI^lITpyh{hBSMT4H9vo0o05ln=)=VSu~71;~n9#*2RRKHih=33zXGlEi2TB z=)Q(ws9TRei4HZH;8iR-#a01E?1>1d=R+|_Bkg;L`o503|SB z0_bCxjz_kX+mbs_Dx&tisQ)`WUE*EtNDh6B>O>zw@y-;}dvvL=o`4?{ycnVTYFWap zM2SdhBS}u_=l~NF(Vs-xpAD)Z2m>+hj&dGhDvv`*PDX>1@Eg1T<*Hf7wUr--zpmS5 z^|{73$-jQh03D^b(Yx5PtA)nNhCO3v0}Iw_i{GNB1R5M7?=ls{%&U*QW7pOUN5>94 zsO+<&uNm`Ct&2<%F(d-bk%Td>!X)Jgh|%3nzM%Bw5Sw}5^XgZc*e&z%|M}2H z`4a}Eq)lqc4$NDMAzvwS?y#PivalM|J$8TMFh(Yt>+@13gIzPUB}q?Qv4uFxJDPIE zycm|Rn9mnYCl!=azQ9cci}`Zg#n_eBgE#b^KK?QJ$54VE7A}}6&yCOt$h(dDGiUh& zEj8P+5dRK;hXnLViskqKooJ{m;_+P8Q46TDAvzKdNH5jybPR2|1`uqwbEtIb4aVUByK7lv)@kEWtNhm5Djc&{R2u~mLYeZ^9dO?9%bno(M z>O?*3%%M|PuOOEQy(PORQbw}-J<>hqUq0i;_kK1_qm?Rk5!d;ybmutK$|S?9)F(r< z{VmPNgiAW6*UJr5!|nHE1)IfWDUbWl_abr-gCujW$N>pT?yO50SCBM~+p|bdv=JI5 z*1rHVJq7R6asp1TigP<@okE<;*(gnNXlCxDo7&`*CObOGlp}dd7XUc=kbvq0#M|O% ziQaWCwUEe)?Uf0;4wf06SCY+C#rv32(V_p6LUi3GB%gZ=7&2VM6U5hqTF#W|ZZUH!K z4wy!C223n^hGwGQFhETP+IT@lWT2uDVFr?7_rmsq045huw*<7{?RyXT<&BBQK8x8p z93o%a+XSH~60SLrjz8uN*Shm)2g$;am%1P)X!?y0Ljg=`7ZdjBDvLf!D*cntT#koY z-=#Gg!XL{_*M7Zo>iQW@>h|?q6!#YreNMbN8Cb~8013!Ju1=@Cp$fS#2|23C5ED_; z0uOGT3iV5t5@)B9LK$Y#MlHrerF|QxYo0h0vQ(l-^o{fGC7i>_s}1E%ES72|@|vxV3=lyjV~*5gb^K z_db)6n@|}>LboA0VZF^1fJfNxfqsbOkYjk2ElbU~STSTA;3p`dYKFmy-XwN{175J# zmjg9SdG|05VbEj7k|OxkAmk^nD1)|tK+tm!IftVVz1b+vWN_Gy8P6N=uQu@QRsW|V z!hYG|VoMoOeKZ2WDvD6j`)lxp!Fs69*n4qs(R6PlZStG*aWTP5BO)+2AnG*__)Ic< z8dRgV$JB6)?j81%4_K?Edv$>H_Gcrl8y7}-GHR1x)Fg2wDiUuU@tt+ldk7bck4}ju z#FUWES6CrN#qx@NJKJRtU%2vlJ_;wG@=er_NK#`7Gy5_oLW)5}3&QnAeib_#aggw^5bOP|WEgpy_q4=?K&^fHq zI#3F12O+ibf(OWo(%HoJxQ(E_56NHZe)gx5Qeg!IOI?zRS5n*Gf zoZ_%v>}Vud*rO{xBIIeYMKT%c0=oAPbDV91%*Vr#5)UZoe?+9+ZY;tcR2)f7UiF8R zMky_jv%3(mvq8-wD@3fplL9L`rPYr^ou8a&me*7pMI-mUHHcK83U0U7UY8ufYm_VzK&;G4sOARr>bc{QJ6!!7T*e4V#U5!9|h61h`d4N~K zkWfDU08`o^>GF%nNwV>iP_l)COFTgUHkyKzw0U|UYIY$iWG5^|!uIJ1#HSFf1pA1S z0PY$P3XA##yZy^jrUmkDhDGx=&QC~87*@b#U;MaQS?x9%`A6}|zO7KZ1xs8%Yf=U@ zo;za61%-j7zr9#Pa%sBwjsfQ(#w~~YcKql( zzUKOHIEK!7D+oAB;>iPAdD-&Lk!*rY%UgCjiQsyYvBSiLTz0#HlL8qeNBzbaAe@hm z6V%k@c^u(V$OICakMm`SU^PY1m!SaN3AEWxXUyab9*KA#hs5p&Nk`(cG9i+`cmfw0 znkdxIA>=|c5}9hPAn+scmxn?jFauhGK$7I$S&AY^Em0-#M1DG(BV2}`xN0(hAvTxC zRhe|fW(2bANBTX=H=|nbB3cenmN67ka4@*fhVpO+D(e~=Rc<)b>B9&A;#W5Yd@dfD zn_p(WvGBI~74KV;Y#Uj_~!?Q9I3G8k`#{3l{`;@dlMUj_Q!P;A6RuT2^=k}c-4i@9D{i?k;; z_qjGph^B-e3y`&O(I27h40LLnu`8g&m>Zza5{$V2vY`t(cq1ACHAC9DWYAI&lnOCt z@MwpH6;|H_nS~E9;F=&R@(Wbr+wj27quv@JmY!>bNX?iLO5cHKY^=daUpF9Y2ax&d zt`Z?Zd*?2|Tk$hD3M&-z07Wp$t`PmAfk^*``adi(+xFXC9AfBMA3;4^ zxt|wzmC2aNCy%dmp$m1nRrf>a%_%!SjdBs7Zg)Qf-ofBjBDnpXZ#+;Bv3pTov+)NW zF~J&gkq?%9c{e=kGw;OC=}EQOc~xd+=*(S(-L=_6Weg3X zj=^7m@lU2UR?eH}kT+~-zsD<1lXT>QY{lG2jtKBt5eT95Jv$i~Dg~TbD=N^1kM9Gq zxp*x7f(k@^s}Ws^AKmCjuG4ifVhW=of+FyW7oJ!kkm;F&c2;bVP~%wa(1e%zmUy)c zqpdMR8WAEX1-o7RDc%6cc2uEAv4 zbYN1j`>&C^7XKe1p2-bnk=G>p;}LvA$fZ^xaA8#&YQYd=AFOZ$7vYpGjk7&GGhRkgE&Gp z_xp;=Z6Rt_z+EMpO=ZTA*BH3>yqTbKB9&#pKv$e41~P;>v;_b|3Z3#r>@`d{GWKo0zxLMQ6HZ;bH+PTjYQgZGx0@;+7@HS} z*zV>RPlgiq$SL1ad(;t$o)PzOHH70Dn^5PT9^I?1=nC#;Uyl3p_&IkEQuAPJ1aU2bE$07uH;mtMh2(L z4}ic8OYoYYdyjNLu+v)YyRkzJfHLTuV)3IQ=nM=ORteXfaR~P>J~b`nusm{a z3L``MQrm{6YD=|H>bT}1NyKZuO{D$eevvQKDoEJ7INw*Z4`BOo~g&EA0cyk1V zThj!tXjP13NUMC!O-?OGn5@N23{_;$^F#+h$Epq-aoV<7e3FuoV7_(j!F!V1Zi98y z7pi={m~nfMl6k-n|B-@+pX+AHLDCHWq+#n{?Hl41MN(SPdC3G@PAGRRs90=I#Mi+& ztSa2TbWwgI1LEkTuoF}vCn-h;Tbi}!`XJt(xC)^Splk;1z^V|Y|3zeiO94VU zFCi{13V^oU2Xs`8Ksp4PI6Pp`U-J)7 z6-PuB6ofrl{B6=4&jIOW4sIzmE@uws3e1Qw7v%&M3TQxJw}F!qh?1i0Y2&4Xd2lCb z>`{N0+BT8r20t2;00%j+ zNEcSV36*29aIF*f*xiUqg6Q(FEM5qfBJWwcEs(SzI5Gp}7vT2*5BD%n)HkCRR}eOG z(4F`?tL$^#BOV)V3|A>0p3aZ8_C>GP)LO2*47^>ftgt{{mgTaW*HKk&y!0>a9U1xO zi`s13Dwk9k6H!T(3Ipt`jw3;-gMw2;GTW|>Don~L@7}}4{--OvIgxUgPxF=)nRCz$ zK>YcrvzWec4uW(2v*qcs)QYc1U1bVX;ka^E5Xo_%p%r4u2Og6}oU~%GElG~p1sqp~ zqrM%`8bR$6@3_0@%jt=9rYkaVLw}f?=-WN!KO!_i@iqbwdaC(t*R&l4x=%lOfS zL2YV4?X&d3{g|ZiH!%?Us`T&P62HB!CjNJetjaU4e->FrnE(z`58El>gx#5G7Lk`W zbI6W>Oyh{~ciqp<4)D;ub=GuMb!bY!46LRT8`X4Q*Qo6_gN7E5t)S3&u8kqKC$`zu zLo_681Sll3Bo2y&=*W9>RG~~f=tRSvLZ4kR8bxAlH=^9Jn;2fg7L+wXwIoJriBST- z>dnRg%)sR%kex1YygP?!NB1Rv(kZX=_1~wA@)@gFkoIlA^o#Fg4Q-D1 zIWv)e1z*OSr!#Bf#XsYVk;rKHO#b^o&w8p4-;HRSW;~I@vJAbbN}X>;j>H63D7f

    @ZX`d@O=G|?55jcLiTI!+Xy^x23~8d*c3 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%0ATXCTN^iX8h%53ClGuIj_|6`!{<1>S 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 z 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

    ?FhZ*YX1|Lgf=z7OVuV?ZHM*2XC?wO#kKt& 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 X0U|&IhyW2F0z`la5CJ0ae@5Ux4L4RL literal 0 HcmV?d00001 diff --git a/apu_reset/4017_written.nes b/apu_reset/4017_written.nes new file mode 100644 index 0000000000000000000000000000000000000000..816a821836096ef6109460ab79fbdc0c3c95638d GIT binary patch literal 40976 zcmeI1e{56N702&;2`0F%^8->`nmQ*GNI?}MdXrYhwyHujc3xacO*L2+QhVn< zzh{2zA0+xmE1k!~-*?YF_uO+o_s5Iujq5ir5e0!+SD7v%Km>>Y5g-CYfCvx)B0vO) z01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO) z01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO) z01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oQmrA~3d09DhWs9a}ESDw9FT z+3ipE2K)Npsr8%JZ(+dB7VT(-&SyKr-OQ+G@Zee4G%aJDD=Z9)YB{l7R3Aw!6V;dC zSV0bKKC23eW}nIu%%}b&A^6Zk^r`KM8eg4X)#2$$^)Ng#skDzZ`x1AH{BwnfH4k77 z44L+J!@g1s6bjgpc8^~bp^#H=O|*&XXNjevGIqDP^5OA^i#37P{MZU{rC>aP^Q`Ji zEcRg%ezk_T@Kjrji^W#nO3?nl&7Mk|vG!{9N-Jcbn7b*&-{{7LLSV_%O=LJde|-Lt z*~gEt;=IR;wZo#upJG?Ito_@vOrS+A<0KpAFXX~Cmt5zEqmwGYrv;@Q z3qyg#WSxJ+_^eY589J)t1tXJ((F2BZ{>Slxlaq>nWjz;p+&(OZZDA?!X@Q%Da;CLd z!@YTAOw8y3)ozsIjY{09#Ot9w2a9s4#)y;oNBpC#XoJZ~G`{E5E-8nUyt63C`FhzO zZ^TeT{!}COb?123up{|heY)$&9UsIO zr51MlEWR++)BzLP$ML3jZc}7` z#t%VGfQX&K;1u7)Pj>e81-qEa0w?mn1rawyF{f*dX6<7=-N9;|uGQ-MK|CW2H;*k9 ziw*GK$$0%(n;3T@FDzi2F${eo?}xwUw0ZDi4%0&OpK`b{qot9dt};jjjYP72te6uwUnSZJHhzjtH{mKn@!^ z!;xT@-8lFv&u|w5i4V&-3p={|gT39I5eWA7_VhBfjKfsfC?tiw&VBWxXOiVtoX54x z`FdTuG|G~qVO^D+y<$E58q>AQNA-!fn4rz#89TblY<%hJ#ewb-O?B@}*pVaTVueC4PqzZ}F$@@aOMb-R$%EU2sA7 ztQ!6bx9$bquFYaPb@1Gzx|ZkLW@O0sKYusjO9|gb;Szr@)i03nMTO4ybH5J^KhN~q z2F|{j+iQ7{AMwf`nn7^ew&HBLaf$*3V~W&zSZkav611U?+l!5R;eb2sE-rsv5RdP5 z9{|G{h6?b}G;ho2H&Ec^bJL1^0LG#C37$Og#xx!`fgendx>XpIPW(d?TdHZd)?^kD#ZB*w&8KmXHc6p76Pt?#5^!O zupS@fIH+|tScNy%rC@=8B9H5MlGcaoDkHS>MTi3ooSXJvSyRS}QZRPqmQ$_cW$k-v z1NQvT^avib7|7^zv}mMI^&HeL;70IOvQiG=mJEQ7Db*DA0uE~a?~NfI|In>nL~Kbs ziW0RlF1up|^^=4kt49*}*GgxiMo!B6ma4V!HaUT7=jB#$RKOGAm9|0Um9~7FCgzvE z+bYU%qJTJY>*316aRi>p%NPkx=z*W><$I;I_dm0%H{9PJ>}C)5!}gwC!QR!djN744 z>DdwKf~`R?Jz!V3Ux8(k#9i^vq+tJbu2)+02Cr!o>BQB)voo@z8jIb;TbG&=0U|&I zhyW2F0z`la5CI}U1c(3;AOb{y2oQlABd|pY;&-u;NYAct_p`9Arz^<6quqf&4#3vk z&=uUdt+Tg(4Rjb^-F63e274hG4Q|`fUvV(L)O~8x6Kj}Smk{vn53br8d~Mr9LmQ??pYYuB(Xoq-D_?%m?f7Wh zo3Fl*)9?D-iX}gNwS4I5RiCvVxg`~R$^V_t-`|?=I^JFgZhPVF8|}Q~#?!pfkl!M| zgZlT+{y}HgUEiVsP^w=8f$OH9x%kEKpQ({Z#Bi~cMM@F8nWe6EveyN^*oXq6AJj_y;hYx&!SsKeYz0orzX6b;#<+WvE%+eNb zBwNBUSvr@Vv+;UMy>fakgJnxg8SEc_Kd?0V;be5*z8JGKmdOm*98v7AqBu@I*6aVv zrVUj>R5(0K`LKamZZh0NE)Dy{MN|_9^6qDySv(y_( zr_&)X`d4%&o5^IdGtAObIz5+8m)NzMHp^+YPEMc9gw|CRTVr<_W~rCscVT=}-8RID z{4C96PZv*T(ce_rxCU^F`8B{Y=S!tiJf5ZbOQlavV%b#WidT&DHI$DFM`DbRE4TkM zyR)jip7&>IER&A$`L%QoCzH>orAAn+ze>-?JPo{T>ZwxcJm!-z6|FH|HZ>Fq@u4$I zOU@S0c3gj!x(zOFW~mQn-(eG(rC!`v4hQlxwE-uRFMdla8=+JYR$^&cGM+7EEb55i z_$^JRXR=wGUrW)RO=qLL-cSd6XR|S8DYwt1EA?DkBq_@ISjrgs$8dq0T8W!A<7aU% z<8DU(s#cDo?dFlRJ)Jft9{nrIo$)dnab@gW>C~xHSLx|`xd^>VaWwiL%VgA8N7{%ce>(?6w8-HI-p+A4jnMDvk2Iuxu!1$Ink@DO#gE zzp9#i(BI%RhdX-?>nrNS)6wN}GE0r+fa}H5?Rc8HT-%wY@|VBDvEUJCDu2HE`Wjv# t6oLp40U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5%`7?_#eHGHGcpA literal 0 HcmV?d00001 diff --git a/apu_reset/irq_flag_cleared.nes b/apu_reset/irq_flag_cleared.nes new file mode 100644 index 0000000000000000000000000000000000000000..e624a259dc262c7e280b112a9a6ed6b38cb5e019 GIT binary patch literal 40976 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 P0U|&IhyW4zKO^vO!@QS) literal 0 HcmV?d00001 diff --git a/apu_reset/len_ctrs_enabled.nes b/apu_reset/len_ctrs_enabled.nes new file mode 100644 index 0000000000000000000000000000000000000000..df7a005661baacb6cb16ea70971a5108118ce06a GIT binary patch literal 40976 zcmeI1e{37&8OL8=Qa2dm{Afc>3GSOxXsEi*pp9AJ6_3%%L8e8t+Soti(&XF=7^g~7 zaEFz_R##DkOAtZ}3`XQ(+Up1^(vTR_G*4otNv-N8jjr1es!Hr!Oero}yO0KZ-}meb zEq_%ie+=olT>QQFeV_MvpZD{=@8jsQWz)8mlFi1ft3nqMAOb{y2oM1xKm>>Y5g-CY zfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CY zfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CY zfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c<;D5tvvbP2R27PuwKQ8k4y# z?{M7TuM7ex9@iU?BxGcd||tmx!WW6qkx8hj_X=fF4fq;S$BhKtoV7 z_=D5haenu-+A+}@NZu@kibV{m-x1U#Ud(IF$#zNmIJsIO(!=xj9%iK__m=8M zC7sEWOt;BF?H^+4+`Se3KUU2YYP1TL)vW$hE?#oU4MG0Sw8r^IMYRKkkx+8FAvk7! zHmIhIykp?vW7CIV!AJ7JdvWn&(`xXRMj`T~V^r$3_j*Gg6-CuZzE)eR6V}2r0y9T| zI?QsSSxvaqL?iFW^X2(;bHv4hW5ID&vh(R_RKDrb&#MR3f~#bc3ypFx(F|83!E`gm zx?!?s)S3FWG23(aLT?Z6$@@gXfr0~ttGw`_9>S0#;z7=?kP9nHOT2X;E{C4TYb>!s zt0YXxpqpwsAByG?d)=EZ-<}qxHw-tOQxD=;dmYEAXqk~F+v@61u{{Fsxrd1G@#>RQdw%4_t05b^Gl+#l%Mm)rpS-=J~_->&u!@Ihr@kV79;x}t+T+}F>yY~S`nzGc%k-WQGR+2Fu3$T0-V zc&U6zWHM5JCw?ii#rRKf-RZqrKy6FX*bY!pRRc;#d zks^P8R`eC?8!C$O=~-2Nl~3~0hsZqq#aX1A(2r-wJsKbO9{s0H(&u29Ud8K*`#dT3 zC!2(YG=`h7<4V_PV$D%yh*3^@^iN;&?DfFbT}+4%^bvkwGpx^>8v%PExrCb*Xvd?R z;97&7ufvVDG{4FQktYpg(#GC~>I@xX6Jmm))3d=Z_msJ#RQRsma(dNdMgOkWgpu!> z9YdmpBXi90k{QCH<*FoWW9`S z_g+!^Flm#u!%6(L(v_@}Q}VvmT79BjPGavoy-FIlAtOB7KCC|5UTD{)!s^#oNisiL z1Wp`1>@3V9^iV;DCw|ljJ!4cNO7x-b!Ty1VlxWuu6?~Znb!%Fuc2D^eUUg}B&hyW2F z0z`la5CI}U1c(3;AOb{y2oM1xKm;y>z;;!^yVyvi@A2N~PQ2^tQN%mi-T3DK-?4}H zD35h_^$%{~o#w0CsPdT7&y|?cy&G?@gn{`|_kpeVZD3kM()MJMjXOr?Lr<13W8|vI z`0HctJ%9h=g?rc${l6h*yViGLZ0)a}9$vRYdA|Fuk+Lga}u5$3fbsu*ezB;Wu75vsGZ|x}b9O)=3-H*OS*EeVa6zbPN;490|+~Q*Rsc9q2#X@EVVl^kkigAmAxo?Wo9W0`z!u1x>)LV4`wmI{f0uIU!7VQ`5nYgb>lxuptTt0(%vNc6*T$F1X4u{3mnWbe{ zn{OBPpQRp?i-%bn!0J2g60_8ggXMIBUrn2^kYe*&T0IEms<1N4$X@f=QpRG=IOcC@ zCNr1IVSOz{eJ+!WiFQ++u+HV;%u-Rmkg2u{ZS#6#f{&$)!9I=+Uel`IT+M$DXBnp% z_KR9gMZ0P#X;&s=Ep>i&-jv_8ZIvDX^yE`Qqzq_zEExM1Tko o0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>@u{~3Y*0R<9CZU6uP literal 0 HcmV?d00001 diff --git a/apu_reset/readme.txt b/apu_reset/readme.txt new file mode 100644 index 0000000..b201fa3 --- /dev/null +++ b/apu_reset/readme.txt @@ -0,0 +1,129 @@ +NES APU Reset Tests +-------------------- +These tests verify initial APU state at power, and the effect of reset. + + +4015_cleared +------------ +At power and reset, $4015 is cleared. + +2) At power, $4015 should be cleared +3) At reset, $4015 should be cleared + + +4017_timing +----------- +At power, it is as if $00 were written to $4017, +then a 9-12 clock delay, then execution from address +in reset vector. + +At reset, same as above, except last value written +to $4017 is written again, rather than $00. + +The delay from when $00 was written to $4017 is +printed. Delay after NES being powered off for a +minute is usually 9. + +2) Frame IRQ flag should be set later after power/reset +3) Frame IRQ flag should be set sooner after power/reset + + +4017_written +------------ +At power, $4017 = $00. +At reset, $4017 mode is unchanged, but IRQ inhibit +flag is sometimes cleared. + +2) At power, $4017 should be written with $00 +3) At reset, $4017 should should be rewritten with last value written + + +irq_flag_cleared +---------------- +At power and reset, IRQ flag is clear. + +2) At power, flag should be clear +3) At reset, flag should be clear + + +len_ctrs_enabled +---------------- +At power and reset, length counters are enabled. + +2) At power, length counters should be enabled +3) At reset, length counters should be enabled, triangle unaffected + + +works_immediately +----------------- +At power and reset, $4017, $4015, and length counters work +immediately. + +2) At power, writes should work immediately +3) At reset, writes should work immediately + +Flashes, clicks, other glitches +------------------------------- +If a test prints "passed", it passed, even if there were some flashes or +odd sounds. Only a test which prints "done" at the end requires that you +watch/listen while it runs in order to determine whether it passed. Such +tests involve things which the CPU cannot directly test. + + +Alternate output +---------------- +Tests generally print information on screen, but also report the final +result audibly, and output text to memory, in case the PPU doesn't work +or there isn't one, as in an NSF or a NES emulator early in development. + +After the tests are done, the final result is reported as a series of +beeps (see below). For NSF builds, any important diagnostic bytes are +also reported as beeps, before the final result. + + +Output at $6000 +--------------- +All text output is written starting at $6004, with a zero-byte +terminator at the end. As more text is written, the terminator is moved +forward, so an emulator can print the current text at any time. + +The test status is written to $6000. $80 means the test is running, $81 +means the test needs the reset button pressed, but delayed by at least +100 msec from now. $00-$7F means the test has completed and given that +result code. + +To allow an emulator to know when one of these tests is running and the +data at $6000+ is valid, as opposed to some other NES program, $DE $B0 +$G1 is written to $6001-$6003. + + +Audible output +-------------- +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason. See the source +code of the test for more information about the meaning of a test code. +They are found after the set_test macro. For example, the cause of test +code 3 would be found in a line containing set_test 3. Examples: + + Tones Binary Decimal Meaning + - - - - - - - - - - - - - - - - - - - - + low 0 0 passed + low high 01 1 failed + low high low 010 2 error 2 + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to prevent the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +-- +Shay Green diff --git a/apu_reset/source/4015_cleared.s b/apu_reset/source/4015_cleared.s new file mode 100644 index 0000000..67e24e2 --- /dev/null +++ b/apu_reset/source/4015_cleared.s @@ -0,0 +1,60 @@ +; At power and reset, $4015 is cleared. + +CUSTOM_RESET=1 +.include "shell.inc" +.include "run_at_reset.s" + +nv_res log + +reset: + ; Begin mode 0 + setb $4017,$00 + + ; Start channels with zero volume + + setb $4000,$00 + setb $4001,$7F + setb $4002,$FF + setb $4003,$28 + + setb $4004,$00 + setb $4005,$7F + setb $4006,$FF + setb $4007,$28 + + setb $4008,$7F + setb $400A,$FF + setb $400B,$28 + + setb $400C,$00 + setb $400E,$00 + setb $400F,$28 + + ; If any of the low 4 bits of $4015 were set, then + ; length counter of that channel would be non-zero, + ; and that bit would read back as non-zero here: + + lda $4015 + sta log + + jmp std_reset + +main: jsr num_resets + bne first_reset + +power: set_test 2,"At power, $4015 should be cleared" + lda log + and #$0F + jne test_failed + + jsr prompt_to_reset + setb $4015,$0F + jmp wait_reset + +first_reset: + set_test 3,"At reset, $4015 should be cleared" + lda log + and #$0F + jne test_failed + + jmp tests_passed diff --git a/apu_reset/source/4017_timing.s b/apu_reset/source/4017_timing.s new file mode 100644 index 0000000..5d59f78 --- /dev/null +++ b/apu_reset/source/4017_timing.s @@ -0,0 +1,49 @@ +; At power, it is as if $00 were written to $4017, +; then a 9-12 clock delay, then execution from address +; in reset vector. +; +; At reset, same as above, except last value written +; to $4017 is written again, rather than $00. +; +; The delay from when $00 was written to $4017 is +; printed. Delay after NES being powered off for a +; minute is usually 9. + +CUSTOM_RESET=1 +.include "shell.inc" +.include "run_at_reset.s" + +nv_res count + +reset: delay 29814-2 + ldx #14 +: lda $4015 + and #$40 + bne :+ + delay 29831-4-2-2-4-2-3 + lda $4015 + dex + bne :- +: stx count + jmp std_reset + +main: print_str "Delay after effective $4017 write: " + lda count + jsr print_dec + jsr print_newline + + set_test 2,"Frame IRQ flag should be set later after power/reset" + lda count + cmp #13 + jge test_failed + + set_test 3,"Frame IRQ flag should be set sooner after power/reset" + lda count + cmp #6 + jlt test_failed + + jsr num_resets + jne tests_passed + + jsr prompt_to_reset + jmp wait_reset diff --git a/apu_reset/source/4017_written.s b/apu_reset/source/4017_written.s new file mode 100644 index 0000000..fc4fbec --- /dev/null +++ b/apu_reset/source/4017_written.s @@ -0,0 +1,73 @@ +; At power, $4017 = $00. +; At reset, $4017 mode is unchanged, but IRQ inhibit +; flag is sometimes cleared. + +CUSTOM_RESET=1 +.include "shell.inc" +.include "run_at_reset.s" + +nv_res log,4 + +reset: + setb $4015,$01 + setb $4000,0 + setb $4001,$7F + setb $4002,$FF + setb $4003,$28 + + delay 29831*2-5*6-9-7 + lda $4015 + sta log+0 + lda $4015 + sta log+1 + + delay 14887 + lda $4015 + sta log+2 + lda $4015 + sta log+3 + + jmp std_reset + +main: jsr num_resets + bne first_reset + +power: + set_test 2,"At power, $4017 should be written with $00" + lda log+0 + and #$41 + cmp #$41 + jne test_failed + lda log+1 + and #$01 + jne test_failed + + jsr prompt_to_reset + setb $4017,$40 + jmp wait_reset + +first_reset: + set_test 3,"At reset, $4017 should should be rewritten with last value written" + cmp #2 + beq second_reset + + lda log+0 + and #$01 + jeq test_failed + lda log+1 + and #$01 + jne test_failed + + jsr prompt_to_reset + setb $4017,$80 ; put in other mode this time + jmp wait_reset + +second_reset: + lda log+2 + and #$01 + jeq test_failed + lda log+3 + and #$01 + jne test_failed + + jmp tests_passed diff --git a/apu_reset/source/common/ascii.chr b/apu_reset/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/apu_reset/source/common/build_rom.s b/apu_reset/source/common/build_rom.s new file mode 100644 index 0000000..38eab29 --- /dev/null +++ b/apu_reset/source/common/build_rom.s @@ -0,0 +1,92 @@ +; Builds program as iNES ROM + +; Default is 32K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +.segment "CODE" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_chr_ram + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/apu_reset/source/common/console.s b/apu_reset/source/common/console.s new file mode 100644 index 0000000..508898b --- /dev/null +++ b/apu_reset/source/common/console.s @@ -0,0 +1,328 @@ +; Scrolling text console with word wrapping, 30x29 characters. +; +; * Defers PPU initialization until first flush/ newline. +; * Works even if PPU doesn't support scrolling. +; * Keeps border around edge of screen for TV overscan. +; * Requires vertical or single-screen mirroring. +; * Requires ASCII font in CHR. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: A, X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/apu_reset/source/common/crc.s b/apu_reset/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/apu_reset/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/apu_reset/source/common/delay.s b/apu_reset/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/apu_reset/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/apu_reset/source/common/devcart.bin b/apu_reset/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..7180661c2aac6357745f288c286041c66e8bf4f1 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1Wo+nWSim*mmrujL|HOg?Yi3APUimxIh2g}7?>-ES zViwD1s88?d&`L_3nrz?Y_Hu!*1^3nCUj;RLs^xgDCeN9i`}BqK7Imqn$^TbGXua0h dz`ZoJ(L?v`)}&`CCp2EACg;v4)^1OrGXY=%o8ABb literal 0 HcmV?d00001 diff --git a/apu_reset/source/common/macros.inc b/apu_reset/source/common/macros.inc new file mode 100644 index 0000000..4307c66 --- /dev/null +++ b/apu_reset/source/common/macros.inc @@ -0,0 +1,188 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro + +; Negates A and adds it to operand +.macro subaf Operand + eor #$FF + sec + adc Operand +.endmacro + +; Initializes CPU registers to reasonable values +.macro init_cpu_regs + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + .ifndef BUILD_NSF + inx + stx PPUCTRL + .endif +.endmacro diff --git a/apu_reset/source/common/neshw.inc b/apu_reset/source/common/neshw.inc new file mode 100644 index 0000000..d636a97 --- /dev/null +++ b/apu_reset/source/common/neshw.inc @@ -0,0 +1,56 @@ +; NES I/O locations and masks + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.ifndef REGION_FREE + .ifndef PAL_ONLY + .ifndef NTSC_ONLY + NTSC_ONLY = 1 + .endif + .endif +.else + .ifdef NTSC_ONLY + .error "NTSC_ONLY and REGION_FREE defined" + .endif + .ifdef PAL_ONLY + .error "PAL_ONLY and REGION_FREE defined" + .endif +.endif + +.ifdef NTSC_ONLY + CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.endif + +.ifdef PAL_ONLY + CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/apu_reset/source/common/ppu.s b/apu_reset/source/common/ppu.s new file mode 100644 index 0000000..4827b3e --- /dev/null +++ b/apu_reset/source/common/ppu.s @@ -0,0 +1,203 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts + + +.macro check_ppu_region_ Len + ; Delays since VBL began + jsr wait_vbl_optional ; 10 average + delay Len - 18 - 200 + lda PPUSTATUS ; 4 + bmi @ok ; 2 + delay 200 + ; Next VBL should roughly begin here if it's the + ; one we are detecting + delay 200 + lda PPUSTATUS ; 2 + bpl @ok +.endmacro + +check_ppu_region: + +.ifndef REGION_FREE +.ifdef PAL_ONLY + check_ppu_region_ 29781 + print_str {newline,"Note: This test is meant for PAL NES only.",newline,newline} +.endif + +.ifdef NTSC_ONLY + check_ppu_region_ 33248 + print_str {newline,"Note: This test is meant for NTSC NES only.",newline,newline} +.endif +.endif +@ok: rts + + +; Loads ASCII font into CHR RAM and fills rest with $FF +.macro load_chr_ram + bit PPUSTATUS + setb PPUADDR,0 + setb PPUADDR,0 + + ; Copy ascii_chr to 0 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page + + ; Fill rest + lda #$FF +: sta PPUDATA + iny + bne :- + inx + cpx #$20 + bne :- +.endmacro diff --git a/apu_reset/source/common/print.s b/apu_reset/source/common/print.s new file mode 100644 index 0000000..ab8a308 --- /dev/null +++ b/apu_reset/source/common/print.s @@ -0,0 +1,247 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr print_nibble_ + pla + + pha + and #$0F + jsr print_nibble_ + pla + rts + +print_nibble_: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints low 4 bits of A as single hex character +; Preserved: A, X, Y +print_nibble: + pha + and #$0F + jsr update_crc + jsr print_nibble_ + pla + rts + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: A, X, Y +print_dec: + pha + sta print_temp_ + jsr update_crc + txa + pha + lda print_temp_ + + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jsr print_char + pla + tax + pla + rts + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/apu_reset/source/common/run_at_reset.s b/apu_reset/source/common/run_at_reset.s new file mode 100644 index 0000000..17425b2 --- /dev/null +++ b/apu_reset/source/common/run_at_reset.s @@ -0,0 +1,64 @@ +; Keeps track of number of times reset, and prompts user. + +power_flag_value = $42 + +nv_res power_flag_ +nv_res num_resets_ + +; Out: A = number of times NES has been reset since turned on +; Preserved: X, Y +num_resets: + lda power_flag_ + cmp #power_flag_value + bne :+ + lda num_resets_ + rts +: lda #0 + rts + + +; Prompts user to press reset after message disappears, +; then hides message, increments reset count, and asks +; emulator to reset NES. +; Preserved: X, Y +prompt_to_reset: + print_str {newline,newline,"Press RESET"} + + ; Add "again" if this isn't first requested reset + jsr num_resets + beq :+ + print_str " again" +: + print_str newline,newline + + jsr inc_reset_count + + ; Show message + jsr console_show + + rts + + +; Increments reset count and marks it as valid +; Preserved: X, Y +inc_reset_count: + jsr num_resets + clc + adc #1 + bcc :+ + lda #$FF ; don't wrap around +: sta num_resets_ + + setb power_flag_,power_flag_value + + ; Tell emulator that NES should be reset now + lda #$81 + jsr set_final_result + + rts + + +; Waits in infinite loop for reset +; Preserved: A, X, Y, flags +wait_reset: + jmp wait_reset diff --git a/apu_reset/source/common/shell.inc b/apu_reset/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/apu_reset/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/apu_reset/source/common/shell.s b/apu_reset/source/common/shell.s new file mode 100644 index 0000000..d458c9b --- /dev/null +++ b/apu_reset/source/common/shell.s @@ -0,0 +1,180 @@ +; Shell that sets up testing framework and calls main + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +; Move code from $C000 to $E200, to accommodate my devcarts +.segment "CODE" + .res $2200 + +; Put shell code after user code, so user code is in more +; consistent environment +.segment "CODE2" + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + init_cpu_regs + + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell without affecting current set_test values +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + ; Clear APU registers + lda #0 + sta $4015 + ldx #$13 +: sta $4000,x + dex + bpl :- + + ; CPU registers + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sta temp + init_cpu_regs + setb SNDCHN,0 + lda temp + + jsr report_result + pha + jsr check_ppu_region + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +.include "shell_misc.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts +.endif diff --git a/apu_reset/source/common/shell_misc.s b/apu_reset/source/common/shell_misc.s new file mode 100644 index 0000000..7e7d4e9 --- /dev/null +++ b/apu_reset/source/common/shell_misc.s @@ -0,0 +1,211 @@ +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +.macro fill_ram_ Begin, End + ; Simpler to count from negative size up to 0, + ; and adjust address downward to compensate + ; for initial low byte in Y index + .local Neg_size + Neg_size = (Begin) - (End) + ldxy #(Begin) - = 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/apu_reset/source/common/text_out.s b/apu_reset/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/apu_reset/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/apu_reset/source/works_immediately.s b/apu_reset/source/works_immediately.s new file mode 100644 index 0000000..edb0c93 --- /dev/null +++ b/apu_reset/source/works_immediately.s @@ -0,0 +1,90 @@ +; At power and reset, $4017, $4015, and length counters work +; immediately. + +CUSTOM_RESET=1 +.include "shell.inc" +.include "run_at_reset.s" + +nv_res log,4 + +reset: + ; Triangle linear counter + setb $4008,$FF + setb $4017,$80 + + setb $4015,$0F + + ; Setup channels + setb $4000,$00 + setb $4001,$7F + setb $4002,$FF + setb $4003,$28 + + setb $4004,$00 + setb $4005,$7F + setb $4006,$FF + setb $4007,$28 + + setb $4008,$7F + setb $400A,$FF + setb $400B,$28 + + setb $400C,$00 + setb $400E,$00 + setb $400F,$28 + + setb $4010,$8F + setb $4013,1 + setb $4015,$1F + + delay 6000 + lda $4015 + sta log+0 + delay 2000 + lda $4015 + sta log+1 + + delay 29831*2 - 18*6 - 8016 + 14907 - 180 + lda $4015 + sta log+2 + delay 200 + lda $4015 + sta log+3 + + jmp std_reset + +main: jsr num_resets + bne first_reset + +power: set_test 2,"At power, writes should work immediately" + jsr test + + jsr prompt_to_reset + setb $4013,2 + setb $4015,$00 + setb $4017,$00 + jmp wait_reset + +first_reset: + set_test 3,"At reset, writes should work immediately" + jsr test + + jmp tests_passed + +test: + lda log+0 + and #$DF + cmp #$1F + jne test_failed + lda log+1 + and #$DF + cmp #$8F + jne test_failed + lda log+2 + and #$4F + cmp #$0F + jne test_failed + lda log+3 + and #$0F + jne test_failed + rts diff --git a/apu_reset/works_immediately.nes b/apu_reset/works_immediately.nes new file mode 100644 index 0000000000000000000000000000000000000000..2fd3f39a9545189e50ef44e595d36f76ec2537ff GIT binary patch literal 40976 zcmeI1ZERcB8OP7PN!?(K^U{Wx5}cD#Xi{~ZK^wCmDjuVigG`IsYGYra(mLz6gCAx?J5g-CYfCvx)B0vO)01+Sp zM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+Sp zM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+Sp zM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm@Ldz~m}<>OQ@8@-|t~n8Kxu z)%wtYe{hg**|2rPHpbcMf)!TY^Jq_~j~Vrh-*cL8o>Nfg2uWkIR#I=1wfodnvi3B8 zFR%Evo`$K;qwQ5&JX*cl?9rIYJlc;`$%6{nqjjh?!d5G6ON7lLY)eHE%}T0O6t5R9 zHt}H>#d?qStlHqwBz2ibYeT1XUaf^cJfq#s@0$sBOg4Me+hy363foIn+iGEx_+vAg zEGm9lt>_RHuU3nlvM--UMtY|gp81T{q_)f2N9syB$hVx~_S2dy24>}KT0BV7tJMg{ zdoFkM6*7~z%bow6YAe+E+Om_Y#q+b}=MK4Z^HhELxl`^eKPlHVd)MALpZBepy@qb) zmQF1_vhctWR#@^tp>|BxnKH$6N%3lb6>J@$lKwB#G7XDX!ZaA>Pn7%@E~U=P-ujl4^k6a4%^4^SF6s#y%QMk^99)gE4(?X?O2wVtU<3 z!-e1>Y-@Z-ippgS%136!CVr@AaM0h&H0C>&{WX{M8Z6wL-dL%C%)_z=9z9-(7xf-*x^Iyq5~(560=rEGu#qZo__!W+4`J*ae~EV!@4HE@VWKy3oNH!dM7vi3X}8&1&!BK8ehD;vEs#$SP*vY zBP>OOE7lD%LnaarDsisM@l_h*f1Hhb)TLMe3l-Y|3y(ALQGmI6PwVHEwKCW4RV^G{ zpqk?(Hri<=_}6f?*63uy5trbI+hv*7=dohOZ;-jlcdC>ugj1kpFJJEf^Z)L;k@b4&CYR=^NsK{sF#e+t%;!O&hlI z{=V>@byiG+5<#$x7m8mv8BhquZVJX$coR2yvkp(f@h3-NQ3=Lw4#rx&iJQIITh=yv zJYEMspL4Gn`wUz6e9o#bAe=gJ^4}riZ8zc-`(MHm!m9}Hpioh~jq0y+;q?UPZwbG* z4L|qX9SwrL@tUa>o%}#le!tQQwrv|`%ZVxS<&7!Q>iHeU>Ehz;&?#%7aUXxpnRFIz zdr^{)?sLAz4QD=@=kL#nwqkyLc~L$)7gS#3Q@rpYP9FZ!9F7~`_vR*?8Xs{T`X5obYwzW8wpCL_hEu(HD$` zfVH45;f4q5@uSLN@f<>`$?xMxYUyu{6py~^ z)Gq*A97mB_t6DEso3M^8`1TgBI;M#?#vOb9^4W{`v!nXI zeN4L1eQ1sv)%u~j(bNp&P_b%zW)99E;M#N^OV!}{*ITQ-Ns+J!vD1QYahS0J==Szy!-0IyxK0mLVgEx-#z`i9J}KB3MD|H zehCDwn11FE7sF3Q!{M;uVk!$4!?>BLj`d2HB?|wFZV%WTuE0iSYU^FC?#Bc7FjH+d zo6(=C78?e#S(vGc3uTwWOl5(tQda;?Om#Sh5gNRQ$^ZF<`o58 zn^9lZXv)&+VlMPw)~-O`V|~hcW~w`!N)=NnW-5XgH#4;>kW3~6UGOjKd^(j%rRSNc z#bk0ZnJls|YO+#Jvh_;xcq*{Is%VYjQq0sYf!~4tE9$fWC-|9~N}nv8OvAsTig68N zip4d|Qs;`r6QVy;vlojW9!I&N;EF3M_!=tmLMBFjLWTYB=_jiy>cx1bMpMbCm|s&D zF_~gMO*Ohj{bhPC>TVF_ik>JI&mo>vMPZGKazz7yfJmL0TC}&icVYdR>NL1GnW-Mk zzRe;tQ@gOSY&P(#XagovEPhkV8=+VhR%A)VWjve8Si}}Z{-!3A^XW9^*HqZk$#g{2 z8)}1hIvr)E3j1QRTrafM<%$SCrZNWqC>D4{%l)P+{im^)v76yv)$&oat8ygmN+yko zhksdxGcKc%P{z&{PneLpUhNPBO<=4R`|f*;IxRHy@>j<+HpEM z9Cl`^u^g~oOx=ak)Zy60OjSPp1#-a=SW)qO`Sm5dLZ}NOKm>>Y5g-CYfCvx)B0vO) b01+SpM1Tko0U|&IhyW2F0z}~djKF^Z7%vel literal 0 HcmV?d00001 diff --git a/apu_test/apu_test.nes b/apu_test/apu_test.nes new file mode 100644 index 0000000000000000000000000000000000000000..257f2278fb359409b8c47cb3767d55930f8d3c12 GIT binary patch literal 131088 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 diff --git a/apu_test/rom_singles/1-len_ctr.nes b/apu_test/rom_singles/1-len_ctr.nes new file mode 100644 index 0000000000000000000000000000000000000000..8f82d13e9707785eed90be5e39f9a5da17128528 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/apu_test/rom_singles/2-len_table.nes b/apu_test/rom_singles/2-len_table.nes new file mode 100644 index 0000000000000000000000000000000000000000..9dfd09bed3b08131803b6d6518a72281d13f6471 GIT binary patch literal 40976 zcmeI1acmpa9mn5YQr8&cIBC+F65Q9O6`?BZKpR-hD&C;gr86B{(Zv24FHP)Sz&KSJ ziYu&$ZM`UpY81q(g=q}Ss=HoBp-8I)m8P9EFimEan>4y^L##_2$4*NzXzjW**!#Wn zT`2vlX#6qQ@9O&N_j|wh-tYH$zxOOT+qdjkEeZm$pBg?$00|%gB!C2v01`j~NB{{S z0VIF~kN^@u0!RP}AOR$R1dsp{Kmter2_OL^fCP{L5bjRb7*gceF zJE&Bk|DFl2nN5>@9pf(7#PE8p`2`Ysy>nXKkZKFj;pu}NC-g?+AK^+tBQiZOt@!$c zNoxF)9X7*(L9RpVUuX!uer$ST%3N;BxJ2)sX0B?h*xC4?Bkc^jJnq#Vx7XJqwX&7E zPhRb9r~c1CWPU#EFMbC9t6j^>Czl^x*mjgumTjvvj)?|glf)31to@l&^!3#sAImZY z7Oe(^P4fqA{!CQY!Zzz1-JJdkX>Ha6!Wb zjq4AkM;1!KSOLw3^zYu25UmHnx71B+0`ox3pxOTic?o z(G`!5`P7zdTi5$)Teh|9HMKRnqU$H>ifl_4oig54TMn&M7=5geX*kx>RReTW-izUQ z0b*}>)f3p;LJa4K_kseo#NbU}DJsIEbbpZw1=oY!yLU%=iAKV2&%R7WDC$a~WHej7 z_xHymOMNAyvGfcT&j@2}N7jiIFI2VKbY!ildVm)+V9XJi`t4bn{;^;zqfZqeEHMAB z0L7mOyXF(8GqsVtC?wR(cXGJf`v)WU(1(=1-E=Ur zdys-Y9_fw`(rEtx-Tu&y`{?#9J7|AAw)b`yY!OR9B7|0|pSn4qp{O@1>S{TAqg?cb zvc5Ncl|`ngHz{hnoV`gd-V9fHNcPd@QeflQ$8fZpODZBB{1!1N@QAhs)1$L z@H(wgUCUBXJNws&X#sAFXV;D>&#o=5HN@h&m)3}ko-G4TIF?XZkVm*@mcdN)>|FSj zxq6X*iQn(MEf$GCGT6N{79n5aG%++gR1f!m4ZObJh?NZK{F5PrIP%{0?5jr;cg>Eq|`Cnt=5g^92-@T>7#ezt#P zXJw99N_{}Y=fBanS@WUI=b{@Sx8~KrZ z+xy3M7JE;0&PRG4fALxu@4EIduXV~Vkl$N#kIepUj$HM8ffB$_KL-L=Z9nnxhrmBe zW3ia&Vk?PNWAGxj`ZlwmBMJVN?u@#9Qgkb^wf(O4z+=&`6Ih7!4mT|1b`V>c z1Z{~CTS+un3r1mxtv=rn1V|vjy7Jj181RV>nV$)LyST7Lr(KNdw`NxnggC z*y;=L#D|Ej$($#cI8!CI4!M0nM=nWhZ4busRmjQKMSao1`)v&}eK7}ZTdO%(Uy_Ke zi8l&~;o&5)HJQr|Iot_Yuda|M&-Lp6%(8(>fC|#Hm8WfHZYjWZoBef7<{a%3kzoG1 z2BYyu<7_jrH4w|?s<|Ao6@uq4Vrwv}>v}W@{&l^S&*gIYOT^Zyt}p6(m3&%ttF4pG zOh1{6ZeCIt4a?<-twE082lHF%cK}Y{XKOBhx^g-X{+2TH8G=+Li)Wc#@p2sXQ;p#LSN?xBoT2XGwWKU(eQLPEYdvwRI6Tlkcak=Csg%g`Q6a zyu5AcscQ8+#FMiWtV!OsG#ZWa)QPQCPkUe&)Ss<>lZ&6&8iL(-J49k@5Du2x4g4(i z!bbAqx3zu{s&ye%qBF_-Y%3uNcM|fqRo5@&^RU0Rf<3S26TIJ4H+bjsNn$IvFY5Jv zuI-YP;CyT)1pJdw;Fi|s&0F*5;Vi>x2LC0kUq!pDD`}Umn;Q@Qb>+_Rn1i?ya;|#n z)Tt}<^f?F++O`HcT4>t}`CWpIhYGH%86R9yww^x6>w=H3YeG-BFG1To{vmBsaY~2O7 zsn55I*vdZoCFBBEpr!otmCxt!6@pVB0VIF~kN^@u0!RP}AOR$R1dsp{Kmter2_OL^ PfCP{L5XXie@ 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 Fe*;oO<39iZ literal 0 HcmV?d00001 diff --git a/apu_test/rom_singles/4-jitter.nes b/apu_test/rom_singles/4-jitter.nes new file mode 100644 index 0000000000000000000000000000000000000000..93f219dac2bf9ee850df78e7b4d4365a1218f6ae GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/apu_test/rom_singles/5-len_timing.nes b/apu_test/rom_singles/5-len_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..e6c3c334b39c3e0a0cd196331de3b7e195aaaf69 GIT binary patch literal 40976 zcmeI0e{5UT700h%Qr9(Zezj>01ox(C)le1omos4)obO(c z^NyOcUbBrkhc4%QY1*%|nV+pW>oYH9&Ocj_^K&(4J~JGi&+(JbdmNLWBEQMSI-d0T1rD-C|7k#=V3@@%3x&_JXyDMpHB`fdg~Uue)S_z(Fr4MmfjX_O_U z8A6RniDsDVhVkA}Tl_1z$=+iZ`+8|_*2x-HXjq}KM1%?Qc1^-&l|a;RDfMx%;vOaee|wS&|4kLY4y3ssBp$K+InQQ zP;7!*U1>bhE+`Ga3mV{a1VX=&ljxtb+9LXB7Se+5KW5?b4|}ZB;nVT*FLRF(N(XZi ztUsJ2!Y&Ta&vW#)NlNq7ou_{)&~TQvPSfvC$@J+Q-F}wmMq`s;46gs2q|Z*$=O^g} z*3s&YFN2>Y6HT+~*Cdr3J_I2;;nI>7Yjrkmmax(SB(^p0_pF$vALKko^DMW})VS%G zN!Dz@Vsm$2z}ssja`iLqAeEn9tjpRJ9PsuBy93nQ-yiBHY8gsZNsPu#`x=HCV`t*! z0}Us%ilPZ5(gD}(bI-Ffa(XIX;OU{f@x=U_W> zwy<}gGN{Bv{c@aYLVS%%=&O@)cXTmqf?2)qF*A)5_Ev=M>T5!KU)~^4^^T~SLI@b9 zYGcJuErWd>jn?xZS33SNd)x#;;3b+Tv>Dh@V@m}ZC4zpfZ6JbZsTed}lp$I8C1NkT zL$%5^2!37A^)zo)KO7Ng(^nbXt)T($?et!M-)=hK-911-cY3>n1JoDlr(5scb|>As zX&Vg%1AA_^!V<}0D1^{r=_5A>H2li7e&sqTajlfGyA$?T?Zr9SuUzj}+N8wwQsxHu zRmLsZY4enG{pg2qw40}_+AO4Fp*u3_EiB)5o*}y*Ot8J8CU>;X-B*eVZnbfV7$xkN zqpvf&m$;pC@|Gsp1z-vN^(@E_+29ZKAaJZ#!Ad${`2q#Ld}<^8Zh=J?={G^gt;Obj z^q?c@D6W0dB%IjiI7qoMJzSvYrXH{1lfvA9%a`vJOgY?d<)?Y(Cl`y62FEGX;^d{`W? z8P;a`CV_ntT|~JBjKfD+p{m79*TW0O5_E|PL>|wuoLDtp)^1gsVCMU$#^54`Kzz zGB5GOD-P{EV2i_56|I+H+hq&t+fkFO9*YXH+8wQv@29m)02}S5}nF>p3h(DXnZNgZoMhs4cuo3|$v?7ecBtJv^3a4Ym* zCCrsgc$CZ5bj#Iis+wG(rm77`bNQO8HlJKm)r5z+Y)w@Y9_351^RNgcfCP{L5DE^MS&THO$?R@i%`yX}K-t77H<2(PA>-gQe>wf%r z`Otmqr#g>alkomXx@r2w?U~*aoq2E1&ZieTdDp_zTxiHIklkzf`*Z)ulX=e64a-zdAx5wO>FyU%79eVd7)ZMU^KAM|~L7;3ZG zcsxVRHkim}CWgu)v_+X1N_?)e%Lguo+UeD_=F0u^8) zQFd3=={cFo^g4;5b|))*kQf?CHMqiOO2p7Xo84tjMTntou0Xm3H5odWoHMg=LtS!m zE(L8vODULN6p5kXSKbW|4Mm8dkyL8XYzxDD6@@xkt@HoOdLO6=sGvMUS=qdDT>-9* zk5@F3GPj9Dg!mP8`GPxw@d{VkXZ-ljV_4$0PbYf_!q0PAq_Mf2+&c#6tb;Ii0 z%mOjg1qaJ!1Ae+T!9udlZ)oKplqy0>Bq@vhv!R59Z4s#7&}4EZord)_6#CQ2beN5E zwSjdy9U+FY{<&mjoN1dVh8Z722?6^EY;avGanpMIG@NBP&0t^E%2l*Wzmj$(lYHU9 zzM{++9`3}HkV5IysZ*Ee=>jAOZ9`oQEwl}V`etC^VFy=~=LeURp{EOMUoiiQhLd62 z477C>BQR|n6S$GK)<2*D6Y00|%gB!C2v01`j~NB{{S b0VIF~kN^@u0!RP}AOR$R1dzbzjKKc@V`B^l literal 0 HcmV?d00001 diff --git a/apu_test/rom_singles/6-irq_flag_timing.nes b/apu_test/rom_singles/6-irq_flag_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..c705de4b70a3928ead6317c119f4e7d1f473df94 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/apu_test/rom_singles/8-dmc_rates.nes b/apu_test/rom_singles/8-dmc_rates.nes new file mode 100644 index 0000000000000000000000000000000000000000..0e72d6d761791abf62d9e7fd584d36a6d085e0fb GIT binary patch literal 40976 zcmeI5e{5UT700h%Qa5#7$4Q&kl;GU7MYJ6-m+`|JS@8y~oXT_zs)=dRcxhtefSW{V zD6VQ{u+>$R)u@QEg>9^ng;`%mp-e-tZqqCcOw&c>O@gjth;@i%iSx^4v}9>;cFwim z^P_g6itz`a^DzGU-E+_R-ut=t-5CGF)=hV>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1TnVUj)1gi!Jpil`*>~R^w6X z;4O_G>{r)#)C)nGvv<7dbXvJdm6V&^BPR8N=#z_&2W2H5tM)*R8V~eTOjwISEyWHk z6<+0^{O%FutNiOD!L`qdh7IELGc_KsB5|l|jnzxa+1M&6*t^cImig*Ny-FDd*6D%1 zb@mJfbOV#Y;5Zn-_|hfnmt&btdYMA~1sK?_2a4)ThWfw83A|By0%ok!t=B0SEX2Ui z^gxk8nZe)?8Z?$RsK7ce>U9bRi!kuI9w;&>HyHdF4Zc&_z=Cx$dYyv7Vhk+7zY%x^dg2TVR^zfHs9kGxX8LYrS%iIQw4FVYDIB?f~ppursHL@n0&K(A9UxB>$; z7s+VTDHzmY;0`@dGy^>LwWGQg4a!OzaICXKuTwCn$G{Ku zfM(#!q%ZNWlJ@^0no}>a&d2SRPWzl=A2%8DMive%JUYGQD9bF^k|{qRsZ1VVs!8@L ze?^pz)>-v^t>px?D6@cBG*8O-cdKy86<&U9MB%(F6I=^7y}sB;g||< z_l+Ee9=td0-2xXsITG})t3;6pEC-}kbF0f&mcgdpbiOrHhP|;e3`{tHTEu;{Dj2l| zqm_JZnlDQyszNsA?eq4tjG4bX0*%kx)bqhZ!6945Bo9@}-e?t+>h&h7!0U>EmIK!K z7l%h$j$UYO;Vo%5-dNzq0ym3XP$762EPL^ToLV6dt;j5Jl>u?twvS{+>) zT^6m8*Q{{4y!)1Ks*YD|t_ds)EWPi5BU+uPX&jH%B$hS46kV2B+W3R$(nNJ5KcT)A zt$unrd_B289WQ&Kx^WiJov@$xwWVR~WzXB(yQ`U6(PKXsJftug-b`|gOJK_Pk8xAl za!1q7o&FZ4FyCvV&vFUAcx2MUYE?dZTYH;dj}5Ek!;f(3jOjqlkyTR0&i^|StvpgM zMQy+fZXo9flzwg0%m0#A7w|o47#1}DF%92Y!ahqTd^$e+)8R)L=iTt-W)`0qhL5}N zN2C14G0w-iXPp0Ol84j0Cd0oqA@hTy-1CkY8}A>3&XD?#G5)JD{@fTpj}0}R_|hkt z=Y)M)xgNg39XSpbl4xBMpDwf>ew+=f7mf{|c#@gaX&I8&=$GhEPUyG2v1T~ zoTNt}uMwIKiaY%SG~2I3xLe!1{9obQf~`Awmw#s$2i@UsYU|>G_D;Ta+g-Qvt()%R z?QNmm*IHnS@a9A$0FawBHzvzfycTIR?-Q}7n&5yr&RK9PGWTz{~G9kB~!JR zKjln1Ggm%gl8*0nKE*|6et43fo4{OL`_LrbTOr{oKEN|?!^y;tO~7&FdvK!Psqh}x zpZ{i()G6qgsN<_A_c`P24<-o~dAP?8yD_sw!TkVD!{~CxsZKua-0OtC?#U>=K@Qe| zK0WHR*d(w|VhgzF0de>!N4ZjA=Ih}Fu>@aa0+9!X;iRo>t;o&Lf*TYj=(A3G3;Rv% zwjk8bz2rpQz^rtYhC;%#KO=^q_v}&6!b9T8jVgEu9#@}d9EP-daxaHT zE&Q#R;_;WA>N&s`hodT1F2lC__oVW6%p@yEW0I^i#meNkyl<6K9<7&Suy^*?N&O}` zEgr4!2|ijsRIf@ytDdQoWIj3xIN`B`odxsoHIK?riI0x^o*SR<(fC}%+}E`1XuhYj z37$T7C%kjlRXcfyzq7Ty1s}$)_IAEA*xuPSS1{Dxc5g1WVZOxTU?K6k`4WqRg~Tt- zmslJuBwjyXVsWsLc*A^&#lb@2jq@cI2MdWe&6ijlEF`+;ODql+62ClOVsWsLxMAL{ zQzB|eE#4o7UALh)YDg{KA;#3=s3Em@j~G*nqlVPtU1Cfvjv7*n_lYsJI4V*<7l#c^ zf(Q@+B0vO)01+Spp8^8gf`0g|ArxwVu(j=8-rU~e$N%hk0Dc_f+jsL8|E}hy&aP{D zqxfl}&A-dv$^Bt}^8;PE4&q0PJHK)JwM?mqnI4L~7heU9C)fB3|0 z?6~@YkC~Rcf7y4{Pxkk$-|m0B`Ig?zBmK9#7r*i9xvF*h_c*O@H2?gu9se3${hO;+ ze*dxALwBzqU3+wK!vC=Mn(-I5549X$oAx*FIC!b%jh8;mOD*{s>i6pSJ)?ggzxa3e z&(H*DsGk6Vi`UGfi2bVYVRvDVjPQ-7r7~1I#H_b3sBuyTxb5G-dGH zSFQcR>BTI?aF+_-UFNJe@f` z2>tUai>n)!7_V-Yn#g8PVLeTU&S&2~3HNygu5d+=uTY#9%tXu&72Dq&+@&kV(NEJz zDjC7`)pQ0H6W3EyQ5NC`ort*Yc%Ro(+3W<2CzV%djo^J=1AzceooSl2)w(-i|7q$J zT%1f(53Ih`EHORWD^z;}E5biZ?K(uhLDa>yQ79MtRPR01(kka(@ z814(q&uKUrwobu)UR@Eet%dRCm4Vw^A&46^jN^iPp)fi;KbfY`8piSIn&$)k1*aK! zvS%QkQyZL)4u_3tDz*dc7fn0hG<7&Sn5Oc3zks>G5tvu}Y`i{!KOt0t2oM1xKm>>Y j5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW4zlo9wJ%tqB3 literal 0 HcmV?d00001 diff --git a/apu_test/source/1-len_ctr.s b/apu_test/source/1-len_ctr.s new file mode 100644 index 0000000..c1018d5 --- /dev/null +++ b/apu_test/source/1-len_ctr.s @@ -0,0 +1,52 @@ +; Tests length counter operation for the four main channels + +.include "apu_shell.inc" + +main: test_main_chans test + jmp tests_passed + +test: + set_test 2,"Problem with length counter load or $4015" + mov $4015,chan_bit ; enable channel + setb {$4003,x},len_2 ; load length + jsr should_be_playing + + set_test 3,"Problem with length table, timing, or $4015" + delay_msec 30 + jsr should_be_silent ; length should have reached 0 by now + + set_test 4,"Writing $80 to $4017 should clock length immediately" + setb $4017,0 + setb {$4003,x},len_2 + setb $4017,$80 ; should clock length immediately + setb $4017,$80 ; should clock length immediately + jsr should_be_silent + + set_test 5,"Writing 0 to $4017 shouldn't clock length immediately" + setb {$4003,x},len_2 + setb $4017,0 ; shouldn't clock length + setb $4017,0 ; shouldn't clock length + jsr should_be_playing + + set_test 6,"Disabling via $4015 should clear length counter" + setb {$4003,x},len_2 + setb $4015,0 ; should clear length immediately + jsr should_be_silent + mov $4015,chan_bit + jsr should_be_silent ; length should still be clear + + set_test 7,"When disabled via $4015, length shouldn't allow reloading" + setb $4015,0 + setb {$4003,x},len_2 ; shouldn't reload length + jsr should_be_silent + mov $4015,chan_bit + jsr should_be_silent ; length should still be clear + + set_test 8,"Halt bit should suspend length clocking" + setb {$4000,x},halt ; halt length + setb {$4003,x},len_2 + setb $4017,$80 ; attempt to clock length twice + setb $4017,$80 + jsr should_be_playing + + rts diff --git a/apu_test/source/2-len_table.s b/apu_test/source/2-len_table.s new file mode 100644 index 0000000..a5bde05 --- /dev/null +++ b/apu_test/source/2-len_table.s @@ -0,0 +1,36 @@ +; Verifies all length table entries + +.include "apu_shell.inc" + +main: test_main_chans test + jmp tests_passed + +test: loop_n_times test_entry,32 + rts + +test_entry: + tay + setb SNDMODE,0 + + ; Load + tya + asl a + asl a + asl a + ldx chan_off + sta $4003,x + + ; Verify + lda table,y + tax + dex +: setb SNDMODE,$C0 ; clock length counter + dex + bne :- + jsr len_should_be_1 + rts + +table: .byte 10, 254, 20, 2, 40, 4, 80, 6 + .byte 160, 8, 60, 10, 14, 12, 26, 14 + .byte 12, 16, 24, 18, 48, 20, 96, 22 + .byte 192, 24, 72, 26, 16, 28, 32, 30 diff --git a/apu_test/source/3-irq_flag.s b/apu_test/source/3-irq_flag.s new file mode 100644 index 0000000..be6b96e --- /dev/null +++ b/apu_test/source/3-irq_flag.s @@ -0,0 +1,53 @@ +; Verifies basic operation of frame irq flag + +.include "shell.inc" + +should_be_clear: + lda $4015 + and #$40 + jne test_failed + rts + +should_be_set: + lda $4015 + and #$40 + jeq test_failed + rts + +main: + set_test 2,"Flag shouldn't be set in $4017 mode $40" + setb $4017,$40 + delay_msec 20 + jsr should_be_clear + + set_test 3,"Flag shouldn't be set in $4017 mode $80" + setb $4017,$80 + delay_msec 20 + jsr should_be_clear + + set_test 4,"Flag should be set in $4017 mode $00" + setb $4017,0 + delay_msec 20 + jsr should_be_set + + set_test 5,"Reading flag should clear it" + setb $4017,0 + delay_msec 20 + jsr should_be_set + jsr should_be_clear + + set_test 6,"Writing $00 or $80 to $4017 shouldn't affect flag" + setb $4017,0 + delay_msec 20 + setb $4017,0 + setb $4017,$80 + jsr should_be_set + + set_test 7,"Writing $40 or $C0 to $4017 should clear flag" + setb $4017,0 + delay_msec 20 + setb $4017,$40 + setb $4017,0 + jsr should_be_clear + + jmp tests_passed diff --git a/apu_test/source/4-jitter.s b/apu_test/source/4-jitter.s new file mode 100644 index 0000000..111ee53 --- /dev/null +++ b/apu_test/source/4-jitter.s @@ -0,0 +1,47 @@ +; Tests for APU clock jitter. Also tests basic timing of frame irq flag +; since it's needed to determine jitter. + +.include "shell.inc" + +; Returns current jitter in A. Takes an even number of clocks. +get_jitter: + delay 3 ; make routine an even number of clocks + setb SNDMODE,$40 ; clear frame irq flag + setb SNDMODE,$00 ; begin mode 0, frame irq enabled + delay 29827 + lda SNDCHN ; read at 29831 + and #$40 + rts + +main: set_test 2,"Frame irq is set too soon" + setb SNDMODE,$40 ; clear frame irq flag + setb SNDMODE,$00 ; begin mode 0, frame irq enabled + delay 29826 + lda SNDCHN ; read at 29830 + and #$40 + jne test_failed + + set_test 3,"Frame irq is set too late" + setb SNDMODE,$40 ; clear frame irq flag + setb SNDMODE,$00 ; begin mode 0, frame irq enabled + delay 29828 + lda SNDCHN ; read at 29832 + and #$40 + jeq test_failed + + set_test 4,"Even jitter not handled properly" + jsr get_jitter + sta Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/apu_test/source/common/build_rom.s b/apu_test/source/common/build_rom.s new file mode 100644 index 0000000..38eab29 --- /dev/null +++ b/apu_test/source/common/build_rom.s @@ -0,0 +1,92 @@ +; Builds program as iNES ROM + +; Default is 32K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +.segment "CODE" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_chr_ram + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/apu_test/source/common/console.s b/apu_test/source/common/console.s new file mode 100644 index 0000000..508898b --- /dev/null +++ b/apu_test/source/common/console.s @@ -0,0 +1,328 @@ +; Scrolling text console with word wrapping, 30x29 characters. +; +; * Defers PPU initialization until first flush/ newline. +; * Works even if PPU doesn't support scrolling. +; * Keeps border around edge of screen for TV overscan. +; * Requires vertical or single-screen mirroring. +; * Requires ASCII font in CHR. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: A, X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/apu_test/source/common/crc.s b/apu_test/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/apu_test/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/apu_test/source/common/delay.s b/apu_test/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/apu_test/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/apu_test/source/common/devcart.bin b/apu_test/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..7180661c2aac6357745f288c286041c66e8bf4f1 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1Wo+nWSim*mmrujL|HOg?Yi3APUimxIh2g}7?>-ES zViwD1s88?d&`L_3nrz?Y_Hu!*1^3nCUj;RLs^xgDCeN9i`}BqK7Imqn$^TbGXua0h dz`ZoJ(L?v`)}&`CCp2EACg;v4)^1OrGXY=%o8ABb literal 0 HcmV?d00001 diff --git a/apu_test/source/common/macros.inc b/apu_test/source/common/macros.inc new file mode 100644 index 0000000..4307c66 --- /dev/null +++ b/apu_test/source/common/macros.inc @@ -0,0 +1,188 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro + +; Negates A and adds it to operand +.macro subaf Operand + eor #$FF + sec + adc Operand +.endmacro + +; Initializes CPU registers to reasonable values +.macro init_cpu_regs + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + .ifndef BUILD_NSF + inx + stx PPUCTRL + .endif +.endmacro diff --git a/apu_test/source/common/neshw.inc b/apu_test/source/common/neshw.inc new file mode 100644 index 0000000..d636a97 --- /dev/null +++ b/apu_test/source/common/neshw.inc @@ -0,0 +1,56 @@ +; NES I/O locations and masks + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.ifndef REGION_FREE + .ifndef PAL_ONLY + .ifndef NTSC_ONLY + NTSC_ONLY = 1 + .endif + .endif +.else + .ifdef NTSC_ONLY + .error "NTSC_ONLY and REGION_FREE defined" + .endif + .ifdef PAL_ONLY + .error "PAL_ONLY and REGION_FREE defined" + .endif +.endif + +.ifdef NTSC_ONLY + CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.endif + +.ifdef PAL_ONLY + CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/apu_test/source/common/ppu.s b/apu_test/source/common/ppu.s new file mode 100644 index 0000000..4827b3e --- /dev/null +++ b/apu_test/source/common/ppu.s @@ -0,0 +1,203 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts + + +.macro check_ppu_region_ Len + ; Delays since VBL began + jsr wait_vbl_optional ; 10 average + delay Len - 18 - 200 + lda PPUSTATUS ; 4 + bmi @ok ; 2 + delay 200 + ; Next VBL should roughly begin here if it's the + ; one we are detecting + delay 200 + lda PPUSTATUS ; 2 + bpl @ok +.endmacro + +check_ppu_region: + +.ifndef REGION_FREE +.ifdef PAL_ONLY + check_ppu_region_ 29781 + print_str {newline,"Note: This test is meant for PAL NES only.",newline,newline} +.endif + +.ifdef NTSC_ONLY + check_ppu_region_ 33248 + print_str {newline,"Note: This test is meant for NTSC NES only.",newline,newline} +.endif +.endif +@ok: rts + + +; Loads ASCII font into CHR RAM and fills rest with $FF +.macro load_chr_ram + bit PPUSTATUS + setb PPUADDR,0 + setb PPUADDR,0 + + ; Copy ascii_chr to 0 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page + + ; Fill rest + lda #$FF +: sta PPUDATA + iny + bne :- + inx + cpx #$20 + bne :- +.endmacro diff --git a/apu_test/source/common/print.s b/apu_test/source/common/print.s new file mode 100644 index 0000000..ab8a308 --- /dev/null +++ b/apu_test/source/common/print.s @@ -0,0 +1,247 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr print_nibble_ + pla + + pha + and #$0F + jsr print_nibble_ + pla + rts + +print_nibble_: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints low 4 bits of A as single hex character +; Preserved: A, X, Y +print_nibble: + pha + and #$0F + jsr update_crc + jsr print_nibble_ + pla + rts + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: A, X, Y +print_dec: + pha + sta print_temp_ + jsr update_crc + txa + pha + lda print_temp_ + + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jsr print_char + pla + tax + pla + rts + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/apu_test/source/common/shell.inc b/apu_test/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/apu_test/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/apu_test/source/common/shell.s b/apu_test/source/common/shell.s new file mode 100644 index 0000000..d458c9b --- /dev/null +++ b/apu_test/source/common/shell.s @@ -0,0 +1,180 @@ +; Shell that sets up testing framework and calls main + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +; Move code from $C000 to $E200, to accommodate my devcarts +.segment "CODE" + .res $2200 + +; Put shell code after user code, so user code is in more +; consistent environment +.segment "CODE2" + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + init_cpu_regs + + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell without affecting current set_test values +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + ; Clear APU registers + lda #0 + sta $4015 + ldx #$13 +: sta $4000,x + dex + bpl :- + + ; CPU registers + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sta temp + init_cpu_regs + setb SNDCHN,0 + lda temp + + jsr report_result + pha + jsr check_ppu_region + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +.include "shell_misc.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts +.endif diff --git a/apu_test/source/common/shell_misc.s b/apu_test/source/common/shell_misc.s new file mode 100644 index 0000000..7e7d4e9 --- /dev/null +++ b/apu_test/source/common/shell_misc.s @@ -0,0 +1,211 @@ +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +.macro fill_ram_ Begin, End + ; Simpler to count from negative size up to 0, + ; and adjust address downward to compensate + ; for initial low byte in Y index + .local Neg_size + Neg_size = (Begin) - (End) + ldxy #(Begin) - = 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/apu_test/source/common/text_out.s b/apu_test/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/apu_test/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/blargg_apu_2005.07.30/01.len_ctr.nes b/blargg_apu_2005.07.30/01.len_ctr.nes new file mode 100644 index 0000000000000000000000000000000000000000..60de6d946f26aead6574d49d29aed9a90eea9f70 GIT binary patch literal 16400 zcmeI2L2DCH5XWcNcC$!m_tLtkhbMT5;31&sf{VUGg&;u$`vLYKAq5XT23ew)Krb6a zJQPp0Aov6iUd6-W;h_@4o}_}5t&t)g!uC=_8@J9RO{E_}n8~p7-pst&e}3%dl-oD& zo;Kj09k4M0Ccp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP@WJ%NUj(J85nXih380;wKGhExZUDFbmXt?u@)G%wXjk)|&)@vc{W(z`e(rGQkK ztxUPm2`Q3Poxt@T_K1yCP2n17C>7NsT%l88`dEQlsDP)f!%27yWsnwXFO1qTF`6^U z+L$eq&|}kah|$WbXVTYm@`91=2BVntgNpj&{aVVC{kpq!kn9BF%~nN;$P)dm@H#8t zq8=3l-gsJ|2kLp06|e^rAR>cu=#;pDt(e8j?0R|4#zXCiuOvIvVIFn7ZGqZq8Ec@f zwaj%Jj}^qHWN+Pm10P1q->ZqaZD=$3P6tWOcr>h0>yaN0J`|^H6ck)E1-i2zO#Z{+ zl7S1QQfZVbm2&))zzLIZe&_%!*p65LC|B-?#mZ%HFh%AFG6x)+4CA8bEmF;K!by+o zmZ{aJ%h>G60=#NhZ{PF4^+-SyLOtUz$2l~Mu5alO&ieN|d9et?cxci7dJqpa##|TO za=DECnw(YuStChF0hjco9(3&F^mp!<3L z1^e{&Zob*oq!+g#-B06S+Uw2E1KM}#T%!|*7S_jeUAhk%&eggfdJe`fdEUo)xC=4X zYBe7PKt6NUTTXL$*;t3RA={?>*#_C3lWly9=-paLw()U3FMjk^MYmUd-y3i072GL- z>3UGPg(klC>KA4|o_uUBSxe>W5A1vKd8d$B(N00kZq=(<+890G)nV_y|NY`Gzyz28 z6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF3xRPE?FQtD0M*LL* literal 0 HcmV?d00001 diff --git a/blargg_apu_2005.07.30/02.len_table.nes b/blargg_apu_2005.07.30/02.len_table.nes new file mode 100644 index 0000000000000000000000000000000000000000..a084a14ffdb2ebc1b5a3cd5fce286a830c0e891f GIT binary patch literal 16400 zcmeI2!E4lb6vyAhnh9|ne~4{Ex2(Uz9%jMA9C`@5p_@a6AVCZE56D5rDR}U-3`-bK zvv|qq!WN6Cah4W;f`SJRJqWq@qpsr+FXCa9=qzQ~LrD*-MaR_lo3Y)qN8!EsO>Y5g-CYfCvx)B0vO) z01+SpM1Tko0U|&Ih`?7*pds97+7*Rp(iJQMS6qn-uGot-H|W5rNjE#%joZ`iW>&-? z`ENB4djbC;^`8u|XUY{Oe~_+a{I`LBaex&rhg6(wnF4U?nu!)2!s+~*blrTpk|sx_ z$*{AP`E#i^+Q-&9e%H;1D=B)R`9G&-enP8EEb1M@G0UZya*0{Tt0#h~*z#uBEdSOM zAMJma^W;O_THZ@`0{-i3Pw+_R+gb5$R>YHfROG1PFvk^$TTxcT8cYC>3Mz+7C4RzE z%;Mo#x7snVslC6hCOfJ^JE*wU0`a<4=z#dKrF9K#EAl^+_g&*YY>rOfttQ%5L2Ahx z)u`l*M?*)I9<0xUKZ_Fv3JOkX92ff#?Ef*tQU(@ODwR>HQpxdC0Tw3V)Q|xz7>q9f zRJ}#MtAr1lsK_iHSxs!APo7@M(w0=D0mTNiAwY$c!xp)5O> z;~bhL%h6>Bv(BYnUMj&b9_lKd58|OjpUaX}tyZyKs-=8WFEs$vU067N1j+=k7bZ|Gx|?@?cO9@VNtsItI9x4oYH=Lb9N6tiDSNw+$MG;mUFdglNA34z zZ60tJ+axrVeAHjoQ6}n>Y5g-CYfCzjcfph6%>ZhLo?^R;= literal 0 HcmV?d00001 diff --git a/blargg_apu_2005.07.30/03.irq_flag.nes b/blargg_apu_2005.07.30/03.irq_flag.nes new file mode 100644 index 0000000000000000000000000000000000000000..3d5cb4ed9c90dd8ecabd9861acead11c5ed138c5 GIT binary patch literal 16400 zcmeI2&ubGw6vtn-?Ix7a?!nYWdl*1mnc=ESzZmP6t04@_lmDc8Le)6cm8eC9 z>miPq;=zH_^HImiixX?F90$iGvwRxtJM8stUNBE*ohZ2(CGn=@B^e$v!f-j_jTa@c z1_Qvngo@!(f%{mBQM`<==2lYJR3EIRU|&^e=N0QU5WBU+3W$3(Z8e2$N%kc;T1~x! zPrcjU%YoKTNGXjoCD=j&|nnK+R`LC&V&GtgsY>b~Q z7;fNBbPa&nl)+{Ja{0$>E`J*g3@J01G6Rg1GW2tnHK%fh;SOp{Gp9;zb?IAba06DM zDcesiFfApZ3a%Wp7yKBiY17uF3zPPIBTlEG>vwgvpK<)IL?6qvnaky{UaF;hRZmv{ z)Ki!^zUT2=gK?CHX7>dcsbQ1}V9gGrT6C{AUUD0(c`0Kl0f(yvcG36!q78=)DP`jj zV&Cujs0;leW>mf@i!*>(Y?Dw`@=^bojxte?YN+wh!W+rc`=y z>#Fl44pw`)(|D%#P1RRv_^yum{#;X?gNAdZ?6{VJemjmkI1hI&`eLzYqX3A|?7m zHU4?@g;v(fxxyCKt$p23M!L73WG7*%uoG5#?{{IZb?JYt=mCfT5g-CYfCvx)B0vO) p01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;_&{3+RXklrXi+=VlT8!DNR&lm9HpDrD zNa(e=yBTo8LS8&#&1iXukMi)g==rA>bZhYy(OZkzi>Rj6G;|-e@SNy7&UE6qS7^1k zcrjXpzs9e2M>qxX%i5kw!o#vTbrkM8jZ=HQy|fbknhSqA?Ac~PFfYY+;`DNy#+$O2 zW&*rEhRYEzy*Q0Mm;mN!Du+uYZec5C@iN%RFJy32{bbFByQ)J!?P%0MY}T{|5I1Xj zBZJ%0Y$ZHsWZuH3&h6fOsBdXf55KC7N=|n)EU4Dgbv*c3oXDUcXG~|fj6>(-zZ#}8 zFd>)AbyB%pf}b21Zs-oT4Sa19JhDKnTd1B{F^^pln~scMGdp7fYz zUbWil(zVRV4Oqpd+O_U_IXd(gdetRggPL zvW9(f>qoNDlu9p#t~yWRU=_=aU{=LVwXYKRZVKz&xu!Y?4d+U^<5~v#wItcWc^J9q zOQn*H0w5U}v1XzK-c%Y;*LYp$-|N8ZL%iO@#Q}cL=E5y}#V@m>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW4zAA#%9jp%Ch8=;10 AYXATM literal 0 HcmV?d00001 diff --git a/blargg_apu_2005.07.30/05.len_timing_mode0.nes b/blargg_apu_2005.07.30/05.len_timing_mode0.nes new file mode 100644 index 0000000000000000000000000000000000000000..1b878e672d1e4332f2525ad6f2cce9c229677789 GIT binary patch literal 16400 zcmeI2zl+mg7{{OF&a_B5vz!KXcoByjC=^i)8oYNnwVY8zPbY^UQhFfbA`}gED%_Id z;Gj-tLGcwF{0}m{sML~497Ni)9O7`~K(uPj`Ml}%RM1`FdHRwk@AK>Z_CwOCr;eW8 zuE9@RBO?MtfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1x zKm`7K0#(7oZCq&KBo}4~T-*#bF4jVw`|Byd{9;kuU?;jyCixVPA#3p&?|2t_*twO9 z&1_%yLBe+Ry#BjAlbkc?2)&-L9UWnXV_Zb)jBL;Wagcdx5VN~t?5`!+S!{1tjQ>)S z4Y(o>u#=+!oBos?j>leOn6-aba7f%`$43Kle=RwdmEaVuo_L2kQ(E%HpVH!weo1_H zKFp`_w~95t7O(ov4SV?E@r(HTLj1*N+m=d#g$7$ma!-;R-c-UILjs!^E??XalN{Dy z09dH07%ml<#!`&pWlOWTn8&8ZXf4F6szTqWV092nb!`#E;kw?;V_S~Bh`%=TPvKd1 z`}t0+FKbedmsF#YGaLYGkKHE02E87*<5Kqm>5!KGG!*1d1dJ59A{4DOfwkOSXNP$y6Q5t{OAT8uPv7^ zIbbNkOAy;FSpV{0S3{)Q2Qf(G?3_1S+I)5BGyZ_l&=|uDuDVH z7LLz6o@+9W^3dF&05d<1G69^Kaa4=$-s9Wc1?RGqsg!`j)dII1MN!#>eoIQ(>O&eu zg9vq@?_);g+p>HFFpF&xYDzxppD<7+>XEJ2N&ih7{LE?~SJLzq*2(2h>D#tcdT|@5 z^CS*dd-=9?UG3YduiAgWjdzGmz z&o|%F=Z*QIH;Z)-Uasa6BV5g~Yu$=>zFWP$Y=x6fZ&!QaT*y&7z@tDeRKs z!Gn031;ux;ga1KJFDkXp1jYm_uCIiPd$J3 z(q0Yz*ajI9AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la z5CI~v?Fm!_5B6}O1>;V4wx3V*_q*ho&PNvoPkq}ze>^p*ThZ6hXXSI%AQQK*sIlI_jr3si@$qQTJ*&$ zieL8Uxg`2ow&pgXHLtN{&pt1`j(#mf-#xZ#r6^cnuwI;5jx%^u4l+zYu#@5P#FHS- zU=0R<1)7TCQh}3Lic!4mZWI=?*i;{`g=kGx=vx&NH4rN`Z4tzYn%>A_TZX-kel)T# z;AMLI?NOw!YEq9@RHKqJ7!8Z6bZc!6-V`UYD9AgkGhF6RZ}|TZOBq;@&*#%nKA+$x z52hda6MYk4CTp@8fI{&Cn=Kvz6GO^OrpyF0s|@|DZO^KlY5Kz&%POc+M_mS%9o~TL zw&dz{8!TH1sDdxYoLgZ6)tu!R(uYZBzM155&=32D+E067U!qTB&MFiNSTEI5zG~zu z0P0&gNZ>+f6OrB(&mOOm%(Cs)5FA6ioB z#jUT-lQ>xI<%i}SwQs4uN;C8g%n#;T>KrtjD`n5OP4sV*q=)lx=c6x`N)8HuWNgyD z)lT4fr2%z~*LD7>4!l0j>-d8Gz?XL+TE$2FAmiOf>`>R;-yLkqMcfI7;j&jehsKU} z%Tv2wjXu!ljJbl#vF_=cwM=XTYZ-QC4Ii#tKDt?+elx42oM1xKm>>Y5g-CY qfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`laY##!b+gI8b+rI%lJr;KW literal 0 HcmV?d00001 diff --git a/blargg_apu_2005.07.30/07.irq_flag_timing.nes b/blargg_apu_2005.07.30/07.irq_flag_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..1ec9b88196d6a1f0b4720b7fa799dd83bb024dbf GIT binary patch literal 16400 zcmeI2ziSg=7{{Nx#w19nH<)^;;5#@(=x~F>p@+Uhg&;wsR_7Zeq~PEf^oUcS%LNBP zajJoeZ^6OE)pL3MK@2BCagcH~Qf!5A8PwXwtIwOHk^Twd^W^28d!JwL_dZ-Q<Y6syJSRw2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c<;tPoOHee}oIo&vRk;z{MS3<6_s>xjRY$<`*q-n{7r<^ZXPKVbJ0-9+h@F*g3_; zLH0gcirLFf>3(NA&pCrg=uAdp-283SJS!&l#YaQqGa|JwzM<*|=fx+)fqkj3<5ZXu zT0JhEiRv*s77b+;#cz9aJ_&a!=KOBhbDLv(yt(`~{JjwVa@q5>qF{cSb>qy_IDGq zTB_7hm!W0%Zon?J<@$9SOj`-4fhQ-On?VA#oav;c2gjWott6L&e$Y>={W&-2OZ17% znU-Z?y;Mv2S~^z+P)}jv_<_fB4aQL(nllt&WK$>;z@AB=T67PW?{Nq08&W1x0uEOT zoN^EZWe2ueQp(mABtg&*P#5|w%&2@@md^oZu}wlv$w&Q@X_Se2Wb0$R^{EZ+z-l17 zNwR`$>a9TD1j%{CNwnO(D~N}@J60DCb-zfZ`ne)?iR&Kw$XXOK6Fa2I>Sw+ zh&#bBTycvR(b#IIa_Z2VgLn1$^t@Htz`CV(y-b|;dl`0kty20PRR`~PN&E88|A^58 z5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tkof&ZSs)#zF@8~p(& CFIPbT literal 0 HcmV?d00001 diff --git a/blargg_apu_2005.07.30/08.irq_timing.nes b/blargg_apu_2005.07.30/08.irq_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..56f18877e6b44debe3dcfd892b0a7d9cdcc59dd8 GIT binary patch literal 16400 zcmeI2KZw&%9LIl&XB(v4W$78z;SCNwxS@kX(4cQPrAQIMQyeo$>A`_F77cYOc1dv% z{IggqCqBi jP^l##910@QLXksCZqceW_4nHAxw;C!UmyA9{r>Y5g-CYfCvx) zBJkf6s0i-w=R)(dT$ny^an0Ab82LJPcT#})W?o!nFQTVezQ98mx44W)#kXDToabU6 z6VZCi?sSWnyNg-Q8AL*>X%#V3i`l_wa)y4f1r3}vYMpu={%+0J!@)x>ge?JLPjlG1 zJ`GmZQ>-7S zpT=ptDf?+Az~9Sox#GSbr?CbDz{Q*GhF5` zclrknOBq;@%jL$QTrR;+4oolf=7%Q0l3}tXfPCRBTP_>{6GO^OrpyG>P=;?`5=NgS;9@?-mo+ILi6r5$)F%unW8>KrtjD`nraP4t^d z(#LtY^U#+{B?kpSGJD8gixPNL!FNF84V`~!0B>Y@V-FWU@$IRHJ+~kZvyJX;_M}_9 z*PU$21>6aS;j&vejmDmL%L{X__TA7|QY-o52G*^=*-pnPe>=^-M&;t0s51V37vFdP z`yVHI03tvHhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vQGk-+)r ILi8Z|0~FM8#{d8T literal 0 HcmV?d00001 diff --git a/blargg_apu_2005.07.30/09.reset_timing.nes b/blargg_apu_2005.07.30/09.reset_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..0ea3fc6170513b9adc78637b737dff0bc8b50c61 GIT binary patch literal 16400 zcmeI2L2DCH5XUEJO_mbcy`-*E@EsIV=phHeMVI;x6@ms4><8F`#1wico`Nnph=E=b zJ$NYf5(6#1(hB+s_Ts~q81_^=NZGm&Bw*NHw6^Kic}ZKpfS1BdhMk>x^XC2c$0n!T zzw_{N4F1_M84(}?M1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CY zfCvx)B5>{rlmxF{nC*p*Lg6yd{L)Q=O(|=wV%D{k3CetrvG7)|< zpgW#3-qQhQG@Z==WOEPLZ01lWjg4ZGK{mPIjh!m-8tWrg2G;1J0*M?ChfH^aaYB4OYz2+8}^HN4q0uEOWR>5`Mf(83cDP?mX zBG>J?s0-shuBi2vEKCEg;x-9oB_H*VCQv5okfEyrt2hdeK6Nh=b+(SDZ7rTW899SF3!Wu!B{91EEE9I=!Ci8 zNARxHfLe^#;`~PqcrDFqLtGr-H)hdm+c|NSEeA{NMUXEAgQS?lOfW1L?c7~7_A)3= zj%|*-iq9qHviW7~Tlun=3=`G8B>UtS^Q(TT|9>Y5g-CYfCvx)B0vO)01+SpM1Tkof&WY3rhm`B;r|7zs)EM= literal 0 HcmV?d00001 diff --git a/blargg_apu_2005.07.30/10.len_halt_timing.nes b/blargg_apu_2005.07.30/10.len_halt_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..d64a74b2dca74f657235a7276911d6f9c468c363 GIT binary patch literal 16400 zcmeI2&uiOe7{?!}sU(U?#2~F`OL-4FIIIT^b`Yy*-$M$fm@(RHXB~!dSPng!O}HmR zE;2pzP#V0@+Xu&k6-lYeSW=P ze~^6g54Z1K*5H$!kP!hQKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la z5CI}U1c(3;AOfE~frjAGB`&mRl?yupE*?Z07blU z^CZ~|x~KMh_r;s!csuzoU~dN%!6JiAGV^6-;!Qm=nSkg#!xf09QD$Nd27pDHis4d$ zTUd%wysUKHj)hI_#oA8xRE2(8@u3A`(9${}ZnX5Sg>5E#lN@%fKjC$8`|smKA8S%i zKB`6~XEqu-s`PZt2hYU`3k3z&b%x763KswJaFl@q<#M?QmCHGP%3y~{cyVe2tXno) z2XHGtvW?1jU}H#`&6L?-TguRHc;1G}*>YjFc!wJ*oNc;I+SKodf_ z?B9=bXqFt`kRe?4w|aT01k-qGsQt|#o=Wt&EIF?0V!c#L`KD270H|-_;P}Ghxi;e{ z56zzmu&pJO3E-_Sp;~lLUOeJHcw18DQUVTF3;bFf$2A`gdQ!^X0pxK!jZqi+1I(y= zU)F8{X0c5|Q^`mD%Ld9sJ+k*cJNVFtps*&$NuIyMIyv6YcluK4#cin0lQ>xIKrtjE9E5gZ1nH)e1h|E7oxA#YCZ~peEF((Kh5EfMi<%|Z|nS@ zHt_Z;Z{vG*h_B#wGR8;zYi5idvus!$4QHEr1$TmBxE@sQps}N2eQo8h3lH^8W7Dk~ zql$R;_nw&<(Voe^9n`B|4I0JsUA;E??0@0t3lIS!Km>>Y5g-CYfCvx)B0vO)01+Sp fM1Tko0U|&IhyW2F0z`la5P>g&z)$I~>D}~yLef40 literal 0 HcmV?d00001 diff --git a/blargg_apu_2005.07.30/11.len_reload_timing.nes b/blargg_apu_2005.07.30/11.len_reload_timing.nes new file mode 100644 index 0000000000000000000000000000000000000000..8030fc915aa830599ee30c4a949109d742e40db3 GIT binary patch literal 16400 zcmeI2&ubGw6vyAL=_Y8bdud(N!+;*rBASDTMHihzl^{U`>!G(jNJz1$$6%Lu3iPtU zgNNcN1}aX$ga5&vhE`(OlXwu>)KJ7j*@8c+ja%Pr+N$6`Pa7zR{D~b3B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y z5g-CY;J_283GN@~Li5MCFn!?Sk*{&F@Nh6~#O|-+MX6CwK_y7Pkdw$9R0S z9W;;gl{kx&@av*0c3d_Sm3bdqj&pICjrW#fX7tPNKca#&h=ksV*~v)Q{vn=rYJCw$ z*kn&ws-Urp(W(~Ci$niY75-M~;cbx_szBLK&!A3|Hk|lZIw?l}*YF?JNSF~?BQD>H zO5&IOc{T~RtJdsJxaqd{NdpBU0 zyK?=G4VJA8)WMUZ&VwLA@*yu9M{RFbD>QnqPK+VK_qrW-fy^0qm&^y2bQ#`3ZNxo|7_>60o@%;8cPjs5r3Iky3WH zAPIs&fW9zq;fh-C%F1QHRoo__uI!`#Q3GwFAK7^qZ@uq=n?@bvMv}Zmom~HxeCSH$ z7pI1vsR_I}#+&$p{lqtNAzXJ$;tV_2Uu0IlobL}O)e_DG!*bOvUB_Uj z`_+kKtA`)!v&L+(d=7O>Z#J{B;csTyOs`tL*sG=A@A9?&f&V3>0}ufsKm>>Y5g-CY rfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5P^eC;9hh;x*PolXDB5+ literal 0 HcmV?d00001 diff --git a/blargg_apu_2005.07.30/readme.txt b/blargg_apu_2005.07.30/readme.txt new file mode 100644 index 0000000..47887c8 --- /dev/null +++ b/blargg_apu_2005.07.30/readme.txt @@ -0,0 +1,187 @@ +NES APU Frame Counter Update +---------------------------- + +I have run more tests on the NES APU and come up with new information +about the exact timing of the frame counter and length counter, and some +subtle behavior. The information here either extends or contradicts what +is stated in the NES APU reference and on the nesdev wiki. + +Not documented here is a delay when changing modes by writing to $4017. +This is quite complex and I haven't fully worked out its exact +operation. Once determined, documented, and tested, the information here +should still be valid. This delay when changing modes involves the +current mode running a few clocks before switching to the new mode, so +it only affects the rare case where $4017 is written within a few clocks +of a frame counter step. This delay does not cause the steps to occur +any later than shown below; it only causes the first few clocks of the +new mode to be transparent, allowing the previous mode to "show +through". + +Also not documented is the exact operation of the envelope, sweep, and +triangle's linear counter when register writes occur close to clocking. + +Refer to tests.txt for a description of the test ROMs included. + +I have not yet fully updated my APU emulator and tested it with this +information, so report any problems you have with implementation. + +Shay (swap to e-mail) + + +Clock Jitter +------------ +Changes to the mode by writing to $4017 only occur on *even* internal +APU clocks; if written on an odd clock, the first step of the mode is +delayed by one clock. At power-up and reset, the APU is randomly in an +odd or even cycle with respect to the first clock of the first +instruction executed by the CPU. + + ; assume even APU and CPU clocks occur together + lda #$00 + sta $4017 ; mode begins in one clock + sta <0 ; delay 3 clocks + sta $4017 ; mode begins immediately + + +Mode 0 Timing +------------- +-5 lda #$00 +-3 sta $4017 +0 (write occurs here) +1 +2 +3 +... + Step 1 +7459 Clock linear +... + Step 2 +14915 Clock linear & length +... + Step 3 +22373 Clock linear +... + Step 4 +29830 Set frame irq +29831 Clock linear & length and set frame irq +29832 Set frame irq +... + Step 1 +37289 Clock linear +... +etc. + + +Mode 1 Timing +------------- +-5 lda #$80 +-3 sta $4017 +0 (write occurs here) + Step 0 +1 Clock linear & length +2 +... + Step 1 +7459 Clock linear +... + Step 2 +14915 Clock linear & length +... + Step 3 +22373 Clock linear +... + Step 4 +29829 (do nothing) +... + Step 0 +37283 Clock linear & length +... +etc. + + +Length Halt +----------- +Write to halt flag is delayed by one clock: + + $10->$4000 clear halt flag +0 $00->$4017 begin mode 0 +14914 $30->$4000 set halt flag +14915 Length not clocked + + $10->$4000 clear halt flag +0 $00->$4017 begin mode 0 +14915 $30->$4000 set halt flag + Length clocked + + $30->$4000 set halt flag +0 $00->$4017 begin mode 0 +14914 $10->$4000 clear halt flag +14915 Length clocked + + $30->$4000 set halt flag +0 $00->$4017 begin mode 0 +14915 $10->$4000 clear halt flag + Length not clocked + + + +Length Reload +------------- +Length reload is completely ignored if written during length clocking +and length counter is non-zero before clocking: + + $38->$4003 make length non-zero +0 $00->$4017 +14914 Write to $4003 + Length reloaded +14915 Length clocked + + $38->$4003 make length non-zero +0 $00->$4017 +14915 Write to $4003 + Length not reloaded + Length clocked + + $00->$4015 clear length counter + $01->$4015 +0 $00->$4017 +14915 Write to $4003 + Length reloaded + Length not clocked + +Misc +---- +- The frame IRQ flag is cleared only when $4015 is read or $4017 is +written with bit 6 set ($40 or $c0). + +- The IRQ handler is invoked at minimum 29833 clocks after writing $00 +to $4017 (assuming the frame IRQ flag isn't already set, and nothing +else generates an IRQ during that time). + +- After reset or power-up, APU acts as if $4017 were written with $00 +from 9 to 12 clocks before first instruction begins. It is as if this +occurs (this generates a 10 clock delay): + + lda #$00 + sta $4017 ; 1 + lda <0 ; 9 delay + nop + nop + nop +reset: + ... + +- As shown, the frame irq flag is set three times in a row. Thus when +polling it, always read $4015 an extra time after the flag is found to +be set, to be sure it's clear afterwards, + +wait: bit $4015 ; V flag reflects frame IRQ flag + bvc wait + bit $4015 ; be sure irq flag is clear + +or better yet, clear it before polling it: + + bit $4015 ; clear flag first +wait: bit $4015 ; V flag reflects frame IRQ flag + bvc wait + diff --git a/blargg_apu_2005.07.30/source/01.len_ctr.asm b/blargg_apu_2005.07.30/source/01.len_ctr.asm new file mode 100644 index 0000000..e241e27 --- /dev/null +++ b/blargg_apu_2005.07.30/source/01.len_ctr.asm @@ -0,0 +1,90 @@ +; Tests basic length counter operation + + .include "prefix_apu.a" + +; to do: test triangle channel's differing halt bit position + +reset: + jsr setup_apu + + lda #2;) Problem with length counter load or $4015 + sta result + lda #$18 ; length = 2 + sta $4003 + jsr should_be_playing + + lda #3;) Problem with length table, timing, or $4015 + sta result + lda #250 ; delay 250 msec + jsr delay_msec + jsr should_be_silent + + lda #4;) Writing $80 to $4017 should clock length immediately + sta result + lda #$00 ; mode 0 + sta $4017 + lda #$18 ; length = 2 + sta $4003 + lda #$80 ; clock length twice + sta $4017 + sta $4017 + jsr should_be_silent + + lda #5;) Writing $00 to $4017 shouldn't clock length immediately + sta result + lda #$00 ; mode 0 + sta $4017 + lda #$18 ; length = 2 + sta $4003 + lda #$00 ; write mode twice + sta $4017 + sta $4017 + jsr should_be_playing + + lda #6;) Clearing enable bit in $4015 should clear length counter + sta result + lda #$18 ; length = 2 + sta $4003 + lda #$00 + sta $4015 + lda #$01 + sta $4015 + jsr should_be_silent + + lda #7;) When disabled via $4015, length shouldn't allow reloading + sta result + lda #$00 + sta $4015 + lda #$18 ; attempt to reload + sta $4003 + lda #$01 + sta $4015 + jsr should_be_silent + + lda #8;) Halt bit should suspend length clocking + sta result + lda #$30 ; halt length + sta $4000 + lda #$18 ; length = 2 + sta $4003 + lda #$80 ; attempt to clock length twice + sta $4017 + sta $4017 + jsr should_be_playing + + lda #1;) Passed tests + sta result +error: + jmp report_final_result + +should_be_playing: + lda $4015 + and #$01 + beq error + rts + +should_be_silent: + lda $4015 + and #$01 + bne error + rts diff --git a/blargg_apu_2005.07.30/source/02.len_table.asm b/blargg_apu_2005.07.30/source/02.len_table.asm new file mode 100644 index 0000000..4080688 --- /dev/null +++ b/blargg_apu_2005.07.30/source/02.len_table.asm @@ -0,0 +1,57 @@ +; Tests all length table entries. +; +; 1) Passed +; 2) Failed. Prints four bytes $II $ee $cc $02 that indicate the length +; load value written (ll), the value that the emulator uses ($ee), and the +; correct value ($cc). + + .include "prefix_apu.a" + +; Zero-page +entry = 10 + +reset: + jsr setup_apu + + lda #31 + sta entry +loop: lda #$00 ; sync apu + sta $4017 + lda entry + asl a + asl a + asl a + sta $4003 ; load length + lda #$01 ; check resulting length + jsr count_length + ldx entry + cmp table,x + bne error + dec entry + bpl loop + + lda #1;) Passed +report: + sta result + jmp report_final_result + +error: + pha + lda entry + asl a + asl a + asl a + jsr debug_byte ; entry + pla + jsr debug_byte ; value detected + ldx entry + lda table,x + jsr debug_byte ; correct value + lda #2 + jmp report + +table: + .byte 10, 254, 20, 2, 40, 4, 80, 6 + .byte 160, 8, 60, 10, 14, 12, 26, 14 + .byte 12, 16, 24, 18, 48, 20, 96, 22 + .byte 192, 24, 72, 26, 16, 28, 32, 30 diff --git a/blargg_apu_2005.07.30/source/03.irq_flag.asm b/blargg_apu_2005.07.30/source/03.irq_flag.asm new file mode 100644 index 0000000..dce4e3e --- /dev/null +++ b/blargg_apu_2005.07.30/source/03.irq_flag.asm @@ -0,0 +1,82 @@ +; Tests basic operation of frame irq flag. + + .include "prefix_apu.a" + +reset: + jsr setup_apu + + lda #2;) Flag shouldn't be set in $4017 mode $40 + sta result + lda #$40 + sta $4017 + lda #20 + jsr delay_msec + jsr should_be_clear + + lda #3;) Flag shouldn't be set in $4017 mode $80 + sta result + lda #$80 + sta $4017 + lda #20 + jsr delay_msec + jsr should_be_clear + + lda #4;) Flag should be set in $4017 mode $00 + sta result + lda #$00 + sta $4017 + lda #20 + jsr delay_msec + jsr should_be_set + + lda #5;) Reading flag clears it + sta result + lda #$00 + sta $4017 + lda #20 + jsr delay_msec + lda $4015 + jsr should_be_clear + + lda #6;) Writing $00 or $80 to $4017 doesn't affect flag + sta result + lda #$00 + sta $4017 + lda #20 + jsr delay_msec + lda #$00 + sta $4017 + lda #$80 + sta $4017 + jsr should_be_set + + lda #7;) Writing $40 or $c0 to $4017 clears flag + sta result + lda #$00 + sta $4017 + lda #20 + jsr delay_msec + lda #$40 + sta $4017 + lda #$00 + sta $4017 + jsr should_be_clear + + lda #1;) Tests passed + sta result +error: + jmp report_final_result + +; Report error if flag isn't clear +should_be_clear: + lda $4015 + and #$40 + bne error + rts + +; Report error if flag isn't set +should_be_set: + lda $4015 + and #$40 + beq error + rts diff --git a/blargg_apu_2005.07.30/source/04.clock_jitter.asm b/blargg_apu_2005.07.30/source/04.clock_jitter.asm new file mode 100644 index 0000000..d364596 --- /dev/null +++ b/blargg_apu_2005.07.30/source/04.clock_jitter.asm @@ -0,0 +1,71 @@ +; Tests for APU clock jitter. Also tests basic timing of frame irq flag +; since it's needed to determine jitter. + + .include "prefix_apu.a" + +jitter = 1 + +reset: + jsr setup_apu + + lda #2;) Frame irq is set too soon + sta result + lda #$40 ; clear frame irq flag + sta $4017 + lda #$00 ; begin mode 0, frame irq enabled + sta $4017 + ldy #48 ; 29826 delay + lda #123 + jsr delay_ya1 + lda $4015 ; read at 29830 + and #$40 + bne error + + lda #3;) Frame irq is set too late + sta result + lda #$40 ; clear frame irq flag + sta $4017 + lda #$00 ; begin mode 0, frame irq enabled + sta $4017 + ldy #48 ; 29828 delay + lda #123 + jsr delay_ya3 + lda $4015 ; read at 29832 + and #$40 + beq error + + lda #4;) Even jitter not handled properly + sta result + jsr get_jitter + sta 0 should be ignored + sta result + jsr sync_apu + lda #$38 ; length = 6 + sta reload + lda #$40 ; begin mode 0 + sta $4017 + ldy #244 ; 14909 delay + lda #11 + jsr delay_ya8 + lda #$18 ; try to reload counter with 2 + sta reload ; write at 14915 + lda #mask + jsr count_length + cmp #5 ; should have ignored reload + bne error + + lda #1;) Passed tests + sta result +error: + jmp report_final_result diff --git a/blargg_apu_2005.07.30/source/apu_util.asm b/blargg_apu_2005.07.30/source/apu_util.asm new file mode 100644 index 0000000..5748f53 --- /dev/null +++ b/blargg_apu_2005.07.30/source/apu_util.asm @@ -0,0 +1,57 @@ +; Set up APU with square 1 enabled and unhalted + .code +setup_apu: + sei + lda #$40 ; mode 0, interrupt disabled + sta $4017 + lda #$01 ; enable square 1 + sta $4015 + lda #$10 ; unhalt length + sta $4000 + lda #$7f ; sweep off + sta $4001 + lda #$ff ; period + sta $4002 + rts + +; Synchronize APU divide-by-two so that an sta $4017 will +; start the frame counter without an extra clock delay. +; Takes 16 msec to execute. + .code +sync_apu: + sei + lda #$40 ; clear irq flag + sta $4017 + lda #$00 ; mode 0, frame irq enabled + sta $4017 + ldy #48 ; 29827 delay + lda #123 + jsr delay_ya2 + lda $4015 + and #$40 + bne + ; delay extra clock if odd jitter +: lda #$40 ; clear irq flag + sta $4017 + rts + + .code + +; Count number of length clocks required until $4015 AND A becomes 0 +; then return result in A. + .code +count_length: + ldy #0 + bit $4015 + beq count_length_end + ldx #$c0 +: stx $4017 + iny + beq count_length_overflow + bit $4015 + bne - +count_length_end: + tya + rts +count_length_overflow: + lda #$ff + rts diff --git a/blargg_apu_2005.07.30/source/prefix_apu.asm b/blargg_apu_2005.07.30/source/prefix_apu.asm new file mode 100644 index 0000000..a6f3a4e --- /dev/null +++ b/blargg_apu_2005.07.30/source/prefix_apu.asm @@ -0,0 +1,40 @@ +; Prefix included at the beginning of each test. Defines vectors +; and other things for custom devcart loader. +; +; Refer to apu_util.asm for APU test-specific routines: + + .include "apu_util.asm" + +; Reset vector points to "reset". +; NMI points to "nmi" if defined, otherwise default_nmi. +; IRQ points to "irq" if defined, otherwise default_irq. + +default_nmi: + rti + +default_irq: + bit $4015 + rti + +; Delays for almost A milliseconds (A * 0.999009524 msec) +; Preserved: X, Y +delay_msec: + +; Delays for almost 'A / 10' milliseconds (A * 0.099453968 msec) +; Preserved: X, Y +delay_01_msec: + +; Variable delay. All calls include comment stating number of clocks +; used, including the setup code in the caller. +delay_yaNN: + +; Print byte A to console as $hh +; Preserved: A, X, Y +debug_byte: + +; Report "result" as number of beeps and code printed to console, +; then jump to forever. +report_final_result: + +; Disable IRQ and NMI then loop endlessly. +forever: diff --git a/blargg_apu_2005.07.30/tests.txt b/blargg_apu_2005.07.30/tests.txt new file mode 100644 index 0000000..7616131 --- /dev/null +++ b/blargg_apu_2005.07.30/tests.txt @@ -0,0 +1,160 @@ +NES APU Frame Counter Test ROMs +------------------------------- + +These ROMs test the APU frame counter operation and length counter +clocking. They have been tested on an actual NES and all give a passing +result. They can't catch every possible bug in an emulator, but they +check for likely problems like one-off errors. + +The tests do not test clocking of the envelope, sweep, or triangle's +linear counter. Also, only the length counter on the first square wave +($4000-$4003) is tested. + +The main source code for each test is included. In the tests, remember +that the actual read/write of sta/lda $xxxx occurs on the fourth (last) +clock if the instruction. Some of the common support code is included, +but not all, since it runs on a custom setup. Contact me if you want to +assemble the tests yourself. + +Each ROM only gives meaningful results if all previous test ROMs have +passed without error. + +Each ROM runs several tests and reports a result code on screen and by +beeping a number of times. A result code of 1 always indicates that all +tests were passed. Other result codes indicate a problem or behavior +that isn't implemented as stated: + +Shay (swap to e-mail) + + +01.len_ctr +---------- +Tests basic length counter operation + +1) Passed tests +2) Problem with length counter load or $4015 +3) Problem with length table, timing, or $4015 +4) Writing $80 to $4017 should clock length immediately +5) Writing $00 to $4017 shouldn't clock length immediately +6) Clearing enable bit in $4015 should clear length counter +7) When disabled via $4015, length shouldn't allow reloading +8) Halt bit should suspend length clocking + + +02.len_table +------------ +Tests all length table entries. + +1) Passed +2) Failed. Prints four bytes $II $ee $cc $02 that indicate the length +load value written (ll), the value that the emulator uses ($ee), and the +correct value ($cc). + + +03.irq_flag +----------- +Tests basic operation of frame irq flag. + +1) Tests passed +2) Flag shouldn't be set in $4017 mode $40 +3) Flag shouldn't be set in $4017 mode $80 +4) Flag should be set in $4017 mode $00 +5) Reading flag clears it +6) Writing $00 or $80 to $4017 doesn't affect flag +7) Writing $40 or $c0 to $4017 clears flag + + +04.clock_jitter +--------------- +Tests for APU clock jitter. Also tests basic timing of frame irq flag +since it's needed to determine jitter. + +1) Passed tests +2) Frame irq is set too soon +3) Frame irq is set too late +4) Even jitter not handled properly +5) Odd jitter not handled properly + + +05.len_timing_mode0 +------------------- +Return current jitter in A. Takes an even number of clocks. Tests length +counter timing in mode 0. + +1) Passed tests +2) First length is clocked too soon +3) First length is clocked too late +4) Second length is clocked too soon +5) Second length is clocked too late +6) Third length is clocked too soon +7) Third length is clocked too late + + +06.len_timing_mode1 +------------------- +Tests length counter timing in mode 1. + +1) Passed tests +2) First length is clocked too soon +3) First length is clocked too late +4) Second length is clocked too soon +5) Second length is clocked too late +6) Third length is clocked too soon +7) Third length is clocked too late + + +07.irq_flag_timing +------------------ +Frame interrupt flag is set three times in a row 29831 clocks after +writing $4017 with $00. + +1) Success +2) Flag first set too soon +3) Flag first set too late +4) Flag last set too soon +5) Flag last set too late + + +08.irq_timing +------------- +IRQ handler is invoked at minimum 29833 clocks after writing $00 to +$4017. + +1) Passed tests +2) Too soon +3) Too late +4) Never occurred + + +09.reset_timing +--------------- +After reset or power-up, APU acts as if $4017 were written with $00 from +9 to 12 clocks before first instruction begins. + +1) Success +2) $4015 didn't read back as $00 at power-up +3) Fourth step occurs too soon +4) Fourth step occurs too late + + +10.len_halt_timing +------------------ +Changes to length counter halt occur after clocking length, not before. + +1) Passed tests +2) Length shouldn't be clocked when halted at 14914 +3) Length should be clocked when halted at 14915 +4) Length should be clocked when unhalted at 14914 +5) Length shouldn't be clocked when unhalted at 14915 + + +11.len_reload_timing +-------------------- +Write to length counter reload should be ignored when made during length +counter clocking and the length counter is not zero. + +1) Passed tests +2) Reload just before length clock should work normally +3) Reload just after length clock should work normally +4) Reload during length clock when ctr = 0 should work normally +5) Reload during length clock when ctr > 0 should be ignored diff --git a/blargg_nes_cpu_test5/cpu.nes b/blargg_nes_cpu_test5/cpu.nes new file mode 100644 index 0000000000000000000000000000000000000000..63cb98ddff38249fb076fee168e17e7329564693 GIT binary patch literal 270352 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 literal 0 HcmV?d00001 diff --git a/blargg_nes_cpu_test5/official.nes b/blargg_nes_cpu_test5/official.nes new file mode 100644 index 0000000000000000000000000000000000000000..5103f0fbc3c4a943acea6b0a5f92e04659f19f52 GIT binary patch literal 270352 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 literal 0 HcmV?d00001 diff --git a/blargg_nes_cpu_test5/readme.txt b/blargg_nes_cpu_test5/readme.txt new file mode 100644 index 0000000..85e3e06 --- /dev/null +++ b/blargg_nes_cpu_test5/readme.txt @@ -0,0 +1,278 @@ +NES CPU Tests +------------- +These test most of the instruction behavior fairly thoroughly, including unofficial instructions. Failing instructions are listed by their opcode and name. Serious errors in basic opcodes might cause massive erroneous errors. + +cpu.nes Tests all instructions +official.nes Tests official only + +Most instructions are tested by setting many combinations of input values for registers, flags, and memory, running the instruction under test, then updating a running checksum with the resulting values. After trying all interesting input combinations, the checksum is compared with the correct one (what a NES gives) to find if the instruction passed. + +This approach makes it very easy to write the tests, since the instructions don't have to be each coded for separately; instead, only the different addressing modes need separate tests. + + +Instructions +------------ +U = Unofficial +- = Not tested yet +X = Freezes CPU +? = Unreliable + +00 - BRK #n +01 ORA (z,X) +02 X KIL +03 U SLO (z,X) +04 U DOP z +05 ORA z +06 ASL z +07 U SLO z +08 PHP +09 ORA #n +0A ASL A +0B U AAC #n +0C U TOP abs +0D ORA a +0E ASL a +0F U SLO abs +10 BPL r +11 ORA (z),Y +12 X KIL +13 U SLO (z),Y +14 U DOP z,X +15 ORA z,X +16 ASL z,X +17 U SLO z,X +18 CLC +19 ORA a,Y +1A U NOP +1B U SLO abs,Y +1C U TOP abs,X +1D ORA a,X +1E ASL a,X +1F U SLO abs,X +20 - JSR a +21 AND (z,X) +22 X KIL +23 U RLA (z,X) +24 BIT z +25 AND z +26 ROL z +27 U RLA z +28 PLP +29 AND #n +2A ROL A +2B U AAC #n +2C BIT a +2D AND a +2E ROL a +2F U RLA abs +30 BMI r +31 AND (z),Y +32 X KIL +33 U RLA (z),Y +34 U DOP z,X +35 AND z,X +36 ROL z,X +37 U RLA z,X +38 SEC +39 AND a,Y +3A U NOP +3B U RLA abs,Y +3C U TOP abs,X +3D AND a,X +3E ROL a,X +3F U RLA abs,X +40 - RTI +41 EOR (z,X) +42 X KIL +43 U SRE (z,X) +44 U DOP z +45 EOR z +46 LSR z +47 U SRE z +48 PHA +49 EOR #n +4A LSR A +4B U ASR #n +4C - JMP a +4D EOR a +4E LSR a +4F U SRE abs +50 BVC r +51 EOR (z),Y +52 X KIL +53 U SRE (z),Y +54 U DOP z,X +55 EOR z,X +56 LSR z,X +57 U SRE z,X +58 CLI +59 EOR a,Y +5A U NOP +5B U SRE abs,Y +5C U TOP abs,X +5D EOR a,X +5E LSR a,X +5F U SRE abs,X +60 - RTS +61 ADC (z,X) +62 X KIL +63 U RRA (z,X) +64 U DOP z +65 ADC z +66 ROR z +67 U RRA z +68 PLA +69 ADC #n +6A ROR A +6B U ARR #n +6C - JMP (a) +6D ADC a +6E ROR a +6F U RRA abs +70 BVS r +71 ADC (z),Y +72 X KIL +73 U RRA (z),Y +74 U DOP z,X +75 ADC z,X +76 ROR z,X +77 U RRA z,X +78 SEI +79 ADC a,Y +7A U NOP +7B U RRA abs,Y +7C U TOP abs,X +7D ADC a,X +7E ROR a,X +7F U RRA abs,X +80 U DOP #n +81 STA (z,X) +82 U DOP #n +83 U AAX (z,X) +84 STY z +85 STA z +86 STX z +87 U AAX z +88 DEY +89 U DOP #n +8A TXA +8B ? XAA #n +8C STY a +8D STA a +8E STX a +8F U AAX abs +90 BCC r +91 STA (z),Y +92 X KIL +93 ? AXA (z),Y +94 STY z,X +95 STA z,X +96 STX z,Y +97 U AAX z,Y +98 TYA +99 STA a,Y +9A TXS +9B ? XAS abs,Y +9C U SYA abs,X +9D STA a,X +9E U SXA abs,Y +9F ? AXA abs,Y +A0 LDY #n +A1 LDA (z,X) +A2 LDX #n +A3 U LAX (z,X) +A4 LDY z +A5 LDA z +A6 LDX z +A7 U LAX z +A8 TAY +A9 LDA #n +AA TAX +AB U ATX #n +AC LDY a +AD LDA a +AE LDX a +AF U LAX abs +B0 BCS r +B1 LDA (z),Y +B2 X KIL +B3 U LAX (z),Y +B4 LDY z,X +B5 LDA z,X +B6 LDX z,Y +B7 U LAX z,Y +B8 CLV +B9 LDA a,Y +BA TSX +BB ? LAR abs,Y +BC LDY a,X +BD LDA a,X +BE LDX a,Y +BF U LAX abs,Y +C0 CPY #n +C1 CMP (z,X) +C2 U DOP #n +C3 U DCP (z,X) +C4 CPY z +C5 CMP z +C6 DEC z +C7 U DCP z +C8 INY +C9 CMP #n +CA DEX +CB U AXS #n +CC CPY a +CD CMP a +CE DEC a +CF U DCP abs +D0 BNE r +D1 CMP (z),Y +D2 X KIL +D3 U DCP (z),Y +D4 U DOP z,X +D5 CMP z,X +D6 DEC z,X +D7 U DCP z,X +D8 CLD +D9 CMP a,Y +DA U NOP +DB U DCP abs,Y +DC U TOP abs,X +DD CMP a,X +DE DEC a,X +DF U DCP abs,X +E0 CPX #n +E1 SBC (z,X) +E2 U DOP #n +E3 U ISC (z,X) +E4 CPX z +E5 SBC z +E6 INC z +E7 U ISC z +E8 INX +E9 SBC #n +EA NOP +EB U SBC #n +EC CPX a +ED SBC a +EE INC a +EF U ISC abs +F0 BEQ r +F1 SBC (z),Y +F2 X KIL +F3 U ISC (z),Y +F4 U DOP z,X +F5 SBC z,X +F6 INC z,X +F7 U ISC z,X +F8 SED +F9 SBC a,Y +FA U NOP +FB U ISC abs,Y +FC U TOP abs,X +FD SBC a,X +FE INC a,X +FF U ISC abs,X + +-- +Shay Green diff --git a/blargg_nes_cpu_test5/source/01-implied.a b/blargg_nes_cpu_test5/source/01-implied.a new file mode 100644 index 0000000..f57eb10 --- /dev/null +++ b/blargg_nes_cpu_test5/source/01-implied.a @@ -0,0 +1,81 @@ +;CALIBRATE=1 +.include "instr_test.a" +instrs: + entry $2A,"ROL A" ; A = op A + entry $0A,"ASL A" + entry $6A,"ROR A" + entry $4A,"LSR A" + + entry $8A,"TXA" ; AXY = AXY + entry $98,"TYA" + entry $AA,"TAX" + entry $A8,"TAY" + + entry $E8,"INX" ; XY = op XY + entry $C8,"INY" + entry $CA,"DEX" + entry $88,"DEY" + + entry $38,"SEC" ; flags = op flags + entry $18,"CLC" + entry $F8,"SED" + entry $D8,"CLD" + entry $78,"SEI" + entry $58,"CLI" + entry $B8,"CLV" + + entry $EA,"NOP" + +.ifndef OFFICIAL_ONLY + entry $1A,"NOP" + entry $3A,"NOP" + entry $5A,"NOP" + entry $7A,"NOP" + entry $DA,"NOP" + entry $FA,"NOP" +.endif +instrs_size = * - instrs + +instr_template: + nop + jmp instr_done +instr_template_size = * - instr_template + +operand = in_a + +.define set_in set_paxyso +.define check_out check_paxyso + +.include "instr_test_end.a" + +test_values: + test_normal + rts + +correct_checksums: +.dword $013A2933 +.dword $A38733B0 +.dword $6EC2BCA6 +.dword $763FEBC5 +.dword $0FF1C1E6 +.dword $5B2EB5B7 +.dword $1D8ACEF5 +.dword $83DC03F9 +.dword $8EBDF63B +.dword $F34CAA18 +.dword $9123FF08 +.dword $48897445 +.dword $4BE14840 +.dword $E7C7ECC0 +.dword $408EF097 +.dword $A6AEF749 +.dword $8F06AD7B +.dword $FC96AE14 +.dword $28F10ADA +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 +.dword $CA7E6620 diff --git a/blargg_nes_cpu_test5/source/02-immediate.a b/blargg_nes_cpu_test5/source/02-immediate.a new file mode 100644 index 0000000..b687934 --- /dev/null +++ b/blargg_nes_cpu_test5/source/02-immediate.a @@ -0,0 +1,75 @@ +;CALIBRATE=1 +.include "instr_test.a" + +instrs: + entry $A9,"LDA #n" ; AXY = #n + entry $A2,"LDX #n" + entry $A0,"LDY #n" + + entry $69,"ADC #n" ; A = A op #n + entry $E9,"SBC #n" + entry $09,"ORA #n" + entry $29,"AND #n" + entry $49,"EOR #n" + + entry $C9,"CMP #n" ; AXY op #n + entry $E0,"CPX #n" + entry $C0,"CPY #n" +.ifndef OFFICIAL_ONLY + entry $EB,"SBC #n" + + entry $80,"DOP #n" + entry $82,"DOP #n" + entry $89,"DOP #n" + entry $C2,"DOP #n" + entry $E2,"DOP #n" + + entry $0B,"AAC #n" + entry $2B,"AAC #n" + entry $4B,"ASR #n" + entry $6B,"ARR #n" + entry $AB,"ATX #n" + entry $CB,"AXS #n" +.endif +instrs_size = * - instrs + +operand = instr+1 + +instr_template: + lda #0 + jmp instr_done +instr_template_size = * - instr_template + +.define set_in set_paxyso +.define check_out check_paxyso + +.include "instr_test_end.a" + +test_values: + test_normal + rts + +correct_checksums: +.dword $AB3E4F82 +.dword $7B121231 +.dword $E544DF3D +.dword $86046BF5 +.dword $999E9E48 +.dword $DC562F7E +.dword $6BF08A00 +.dword $D2A32FD6 +.dword $7DF1D50B +.dword $751D8339 +.dword $A451BD7A +.dword $999E9E48 +.dword $ACE6BAE4 +.dword $ACE6BAE4 +.dword $ACE6BAE4 +.dword $ACE6BAE4 +.dword $ACE6BAE4 +.dword $DC37BE89 +.dword $DC37BE89 +.dword $C07C3593 +.dword $49618FA8 +.dword $1D8ACEF5 +.dword $1240499F diff --git a/blargg_nes_cpu_test5/source/03-zero_page.a b/blargg_nes_cpu_test5/source/03-zero_page.a new file mode 100644 index 0000000..e591500 --- /dev/null +++ b/blargg_nes_cpu_test5/source/03-zero_page.a @@ -0,0 +1,94 @@ +;CALIBRATE=1 +.include "instr_test.a" + +instrs: + entry $A5,"LDA z" ; AXY = z + entry $A6,"LDX z" + entry $A4,"LDY z" + + entry $85,"STA z" ; z = AXY + entry $86,"STX z" + entry $84,"STY z" + + entry $E6,"INC z" ; z = op z + entry $C6,"DEC z" + entry $06,"ASL z" + entry $46,"LSR z" + entry $26,"ROL z" + entry $66,"ROR z" + + entry $65,"ADC z" ; A = A op z + entry $E5,"SBC z" + entry $05,"ORA z" + entry $25,"AND z" + entry $45,"EOR z" + + entry $24,"BIT z" ; AXY op z + entry $C5,"CMP z" + entry $E4,"CPX z" + entry $C4,"CPY z" +.ifndef OFFICIAL_ONLY + entry $04,"DOP z" + entry $44,"DOP z" + entry $64,"DOP z" + + entry $07,"SLO z" + entry $27,"RLA z" + entry $47,"SRE z" + entry $67,"RRA z" + entry $87,"AAX z" + entry $A7,"LAX z" + entry $C7,"DCP z" + entry $E7,"ISC z" +.endif +instrs_size = * - instrs + +operand = $FE + +instr_template: + lda operand + sta <(address+1) + + lda #<(operand+1) + sta <(address+2) + lda #>(operand+1) + sta <(address+3) + + lda #0 + jsr :+ + lda #2 +: sta in_x + test_normal + rts + +correct_checksums: +.dword $B9D16BC6 +.dword $DBC21F73 +.dword $84827E50 +.dword $FE9A8B04 +.dword $9EEFAAD8 +.dword $65F6C5BB +.dword $82C41B16 +.dword $DC68A9E8 +.dword $04A09668 +.dword $417BDD05 +.dword $9A40C4E4 +.dword $0CB8C16E +.dword $EC8492F8 +.dword $AFC77201 +.dword $5BFDAB74 +.dword $C62D3147 diff --git a/blargg_nes_cpu_test5/source/08-ind_y.a b/blargg_nes_cpu_test5/source/08-ind_y.a new file mode 100644 index 0000000..0f8c833 --- /dev/null +++ b/blargg_nes_cpu_test5/source/08-ind_y.a @@ -0,0 +1,88 @@ +;CALIBRATE=1 +.include "instr_test.a" + +instrs: + entry $B1,"LDA (z),Y" ; A = (z),Y + + entry $91,"STA (z),Y" ; (z),Y = A + + entry $D1,"CMP (z),Y" ; A op (z),Y + + entry $11,"ORA (z),Y" ; A = A op (z),Y + entry $F1,"SBC (z),Y" + entry $71,"ADC (z),Y" + entry $31,"AND (z),Y" + entry $51,"EOR (z),Y" +.ifndef OFFICIAL_ONLY + entry $13,"SLO (z),Y" + entry $33,"RLA (z),Y" + entry $53,"SRE (z),Y" + entry $73,"RRA (z),Y" + entry $B3,"LAX (z),Y" + entry $D3,"DCP (z),Y" + entry $F3,"ISC (z),Y" +.endif +instrs_size = * - instrs + +address = $FF +operand = $2FF + +instr_template: + lda (address),y + jmp instr_done +instr_template_size = * - instr_template + +.macro set_in + lda values+1,y + sta operand+1 + + lda values+2,y + sta operand+2 + + set_paxyso +.endmacro + +.macro check_out + check_paxyso + + lda operand+1 + jsr update_crc_fast + + lda operand+2 + jsr update_crc_fast + + lda address + jsr update_crc_fast +.endmacro + +.include "instr_test_end.a" + +test_values: + lda #operand + sta <(address+1) + + lda #0 + jsr :+ + lda #1 +: sta in_y + test_normal + rts + +correct_checksums: +.dword $A70CC617 +.dword $C51FB2A2 +.dword $9A5FD381 +.dword $7B2B686A +.dword $80320709 +.dword $E04726D5 +.dword $9C19B6C7 +.dword $C2B50439 +.dword $1A7D3BB9 +.dword $5FA670D4 +.dword $849D6935 +.dword $12656CBF +.dword $964F3A4A +.dword $452006A5 +.dword $D8F09C96 diff --git a/blargg_nes_cpu_test5/source/09-branches.a b/blargg_nes_cpu_test5/source/09-branches.a new file mode 100644 index 0000000..05ff36f --- /dev/null +++ b/blargg_nes_cpu_test5/source/09-branches.a @@ -0,0 +1,48 @@ +;CALIBRATE=1 +.include "instr_test.a" + +instrs: + entry $90,"BCC r" ; PC = PC op flags + entry $50,"BVC r" + entry $D0,"BNE r" + entry $30,"BMI r" + entry $10,"BPL r" + entry $F0,"BEQ r" + entry $B0,"BCS r" + entry $70,"BVS r" +instrs_size = * - instrs + +zp_byte operand + +instr_template: + bne :+ + sta operand +: jmp instr_done +instr_template_size = * - instr_template + +values2: + .byte 0,$FF,$01,$02,$04,$08,$10,$20,$40,$80 +values2_size = * - values2 + +.macro set_in + sta in_p + set_paxyso +.endmacro + +.define check_out check_paxyso + +.include "instr_test_end.a" + +test_values: + test_normal + rts + +correct_checksums: +.dword $D5B22EE0 +.dword $9CEB0A7E +.dword $DE8DEFE5 +.dword $D704F89C +.dword $AD3F7EB0 +.dword $A4B669C9 +.dword $AF89A8CC +.dword $E6D08C52 diff --git a/blargg_nes_cpu_test5/source/10-stack.a b/blargg_nes_cpu_test5/source/10-stack.a new file mode 100644 index 0000000..60f97ab --- /dev/null +++ b/blargg_nes_cpu_test5/source/10-stack.a @@ -0,0 +1,118 @@ +;CALIBRATE=1 +.include "instr_test.a" + +instrs: + entry $48,"PHA" + entry $08,"PHP" + + entry $68,"PLA" + entry $28,"PLP" + + entry $9A,"TXS" + entry $BA,"TSX" +instrs_size = * - instrs + +instr_template: + pha + jmp instr_done +instr_template_size = * - instr_template + +values2: + .byte 0,$FF,$01,$02,$04,$08,$10,$20,$40,$80 +values2_size = * - values2 + +zp_byte operand + +.macro set_in + sta in_p + set_paxyso + + ; Clear bytes on stack + stx $17F + sty $180 + stx $181 + + sty $1FE + stx $1FF + sty $100 + stx $101 + sty $102 +.endmacro + +zp_byte save +zp_byte save2 +zp_byte save3 +zp_byte save4 +zp_byte save5 + +.macro check_out + php + sta save ; A + pla + sta save2 ; P + pla + sta save3 ; PLA + stx save4 ; X + tsx + stx save5 ; S + + ldx saved_s + txs + + ; Output + tya + jsr update_crc_fast + + lda save + jsr update_crc_fast + + lda save2 + jsr update_crc_fast + + lda save3 + jsr update_crc_fast + + lda save4 + jsr update_crc_fast + + lda save5 + jsr update_crc_fast + + ldx in_s + dex + lda $100,x + jsr update_crc_fast + + inx + lda $100,x + jsr update_crc_fast + + inx + lda $100,x + jsr update_crc_fast +.endmacro + +.include "instr_test_end.a" + +test_values: + ; Values for SP + lda #$80 + jsr :+ + lda #$00 + jsr :+ + lda #$01 + jsr :+ + lda #$FF + jsr :+ + lda #$FE +: sta in_s + test_normal + rts + +correct_checksums: +.dword $AA53E72F +.dword $F46D6C3F +.dword $4B0D5E27 +.dword $A1AB7B53 +.dword $8A5B86A7 +.dword $6157E3AF diff --git a/blargg_nes_cpu_test5/source/11-special.a b/blargg_nes_cpu_test5/source/11-special.a new file mode 100644 index 0000000..271a856 --- /dev/null +++ b/blargg_nes_cpu_test5/source/11-special.a @@ -0,0 +1,68 @@ +.include "common.a" +.include "testing.a" + +jmp_6ff: + .byte $6C ; JMP ($6FF) (to avoid warning) + .word $6FF + +main: + set_test 3,"JMP ($6FF) should get high byte from $600" + lda #$F0 + sta $6FF + lda #$07 + sta $600 + lda #$06 + sta $700 + lda #$E8 ; INX + sta $7F0 + lda #$60 ; RTS + sta $7F1 + sta $6F0 + ldx #0 + jsr jmp_6ff + cpx #1 + jne test_failed + + set_test 4,"RTS should return to addr+1" + lda #>:+ + pha + lda #<:+ + pha + ldx #0 + rts + inx +: inx + inx + cpx #1 + jne test_failed + + set_test 5,"RTI should return to addr" + lda #>:+ + pha + lda #<:+ + pha + ldx #0 + php + rti + inx +: inx + inx + cpx #2 + jne test_failed + + set_test 6,"JSR should push addr of next instr - 1" + lda #$20 ; JSR + sta $6FE + lda #<:+ + sta $6FF + lda #>:+ + sta $700 + jmp $6FE +: pla + cmp #$00 + jne test_failed + pla + cmp #$07 + jne test_failed + + jmp tests_passed diff --git a/blargg_nes_cpu_test5/source/common/ascii.chr b/blargg_nes_cpu_test5/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..6cbf587c8ffceb20d4f55815bdfa6093dff74c3a GIT binary patch literal 8192 zcmeH{ziJ#Y5XJ`=TZzNv7K@)jRal5PT&2oGEFo->Eas}Ph1k-Mk!Mj6R0)^I5kg22 zTpcE)2v;mhzL7NNOCBLeKJ(kr=+DeIl89=n3Op;&awGf|PScc}LYm@)9|_y-U>b|@ zg>OdH>hTo`yBA&metbznrBqr^*eGnI8WIi~wjM}Gqxo${OcA#2f&d8tX7Xwp6P~%G zZz3VlkloBHY@~F@s@<0nLFGdkx+gYlWC;Jptg5=Q4%=OX=0S8PYy!9DnKdnRUM zJ5NHx^0!#O@TP&B&`;>Y;m09heBqGVg3@wZ$Unun=k`zn}9fBnx_pdJdnVr@%>mww>c#8vGnAZ(u{eZiS+l=vN=BH>^o}`^~sqh$|$%E0- zBqq@@?)Uo(9*zhQw$QM&u!YF)gu>$lXQue@NC^)|J{LScb9S>j!7kJm+jfYzkg(gA z3H}St92e|FM91$Z3DG-qd}kJYFh1$D;%2Y#XKwI1w(W+5={VrL2zPi*+jd97;pa!> zf+w($ziX=sR0XO6Re`ENRiG+R6{reS1*!s7fvP}Npej%ms0vgCssdGksz6oX|5o4+ DUbq>B literal 0 HcmV?d00001 diff --git a/blargg_nes_cpu_test5/source/common/common.a b/blargg_nes_cpu_test5/source/common/common.a new file mode 100644 index 0000000..4118bfb --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/common.a @@ -0,0 +1,205 @@ +; Most programs include this file first + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef COMMON_A + .error "common.a included twice" + .end +.endif +COMMON_A = 1 + +.include "macros.a" + +SET_DEFAULT BUILD_NSF,0 +SET_DEFAULT BUILD_MULTI,0 +SET_DEFAULT BUILD_DEVCART,0 +SET_DEFAULT CUSTOM_HEADER,0 +SET_FLAG BUILD_ROM,(!BUILD_NSF) && (!BUILD_MULTI) + +.include "nes.a" + + +;**** Header and reset handler +.if (!CUSTOM_HEADER) && (!BUILD_MULTI) + +; iNES ROM +.if BUILD_ROM +.segment "HEADER" + .byte "NES",26 + .byte 2,1 ; 32K PRG, 8K CHR + .byte 1 ; vertical mirroring +.segment "VECTORS" + .word 0,0,0,nmi,reset,irq +.segment "CHARS" + .incbin "ascii.chr" + + +; NSF +.elseif BUILD_NSF +.segment "HEADER" + .byte "NESM",26,1,1,1 + .word $E000,reset,nsf_play +.segment "VECTORS" + .word 0,0,0,0,0,irq +.endif + + +; Reset handler +.segment "CODE" +; At beginning so devcart program can patch this to +; re-run bootloader instead. + nop +forever: + jmp forever +reset: init_nes + jmp startup + +.endif + +.if !CUSTOM_HEADER + .define BEGIN_NMI nmi: + .define BEGIN_IRQ irq: +.endif + + +;**** Common modules + +.include "delay.a" ; keep first since it can't cross page +.include "crc.a" +.include "print.a" +.include "shell.a" + +.if !BUILD_MULTI + .include "serial.a" +.endif + +.if !BUILD_NSF + .include "ppu.a" +.endif + + +;**** Building normal ROM or NSF +.if BUILD_NSF || (BUILD_ROM && (!BUILD_DEVCART)) + +.if !BUILD_NSF + .include "console.a" +.else + NO_CONSOLE = 1 + +wait_vbl: +nsf_play: + rts +.endif + +startup: + jsr console_init + jsr serial_init + jmp run_main + +print_char_: + jsr console_print + jmp serial_write + +exit_: tax + + ; Be sure output is visible + print_str {newline,newline,newline} + jsr console_show ; in case it was hidden + + ; Report audibly as well + txa + jsr beep_bits + + jmp forever + +; Reports byte A to user by printing it in hex and +; reporting its bits via sound. +; Preserved: X, Y +report_value: + jsr print_a + jmp beep_bits + + +;**** Building devcart +.elseif BUILD_DEVCART +NO_CONSOLE = 1 +print_char_ = serial_write +report_value = print_a +startup: + jsr serial_init + delay_msec 45 + jmp run_main + +exit_: ; Tell host to stop capturing serial + lda #$1A + jsr serial_write + + ; Run bootloader + delay_msec 400 + jsr wait_vbl + jmp $FF04 + + +;**** Building multi ROM +.elseif BUILD_MULTI + +.segment "VECTORS" + .word 0,0,0,nmi,reset,irq +.segment "HOOKS" +SET_DEFAULT MULTI_TYPE,$56 + .byte MULTI_TYPE,0 + .word filename,run_main,0 +reset: + ; Reset MMC1, map shell to $8000, then run it + + ; write $80 to reset shift register, + ; then write $08 to reg 0 + lda #$90 +: sta $8000 + lsr a + cmp #$02 + bne :- + + jmp $8000 +.code + +; Entry points +exit_ = $BFD2 +print_char_ = $BFD5 + + +.endif + +;**** NO_CONSOLE + +.ifdef NO_CONSOLE +console_init: +console_hide: +console_show: +console_print: + rts +.endif + + +;**** print_filename + +.if .defined(FILENAME_KNOWN) && (!BUILD_DEVCART) +print_filename: + print_str {newline,"Test:"} + lda #filename + sta addr+1 + jsr print_str_addr + jsr print_newline + rts + +filename: + .incbin "ram:rom.nes" + .byte 0 +.else +print_filename: + rts + +filename: + .byte 0 +.endif diff --git a/blargg_nes_cpu_test5/source/common/console.a b/blargg_nes_cpu_test5/source/common/console.a new file mode 100644 index 0000000..333acaf --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/console.a @@ -0,0 +1 @@ +; Scrolling text console with line wrapping, 30x30 characters. ; Buffers lines for speed. Will work even if PPU doesn't ; support scrolling. ; ** ASCII font must already be in CHR, and mirroring ; must be vertical or single-screen. ; Number of characters of margin on left and right, to avoid ; text getting cut off by common TVs console_margin = 1 console_buf_size = 32 console_width = console_buf_size - (console_margin*2) zp_byte console_pos ram_res console_scroll,1 ram_res console_temp,1 bss_res console_buf,console_buf_size ; Clears then waits for VBL ; Preserved: A, X, Y console_wait_vbl: bit PPUSTATUS : bit PPUSTATUS bpl :- rts ; Initializes console console_init: jsr console_hide sta PPUCTRL ; Load palette ldx #$3F stx PPUADDR sta PPUADDR ldx #$0F ; black background stx PPUDATA ldx #$30 ; white text stx PPUDATA stx PPUDATA stx PPUDATA ; Fill nametable with spaces ldx #$20 stx PPUADDR sta PPUADDR txa ldx #240 : sta PPUDATA sta PPUDATA sta PPUDATA sta PPUDATA dex bne :- ; Clear attributes txa ldx #$40 : sta PPUDATA dex bne :- ; In case PPU doesn't support scrolling, start a ; couple of lines down lda #16 sta console_scroll ; FALL THROUGH ; Shows console display ; Preserved: X, Y console_show: pha stx console_temp jsr console_wait_vbl lda #$0A sta PPUMASK jmp console_apply_scroll_ ; Hides console display ; Preserved: X, Y console_hide: jsr console_wait_vbl lda #0 sta PPUMASK rts ; Prints char A to console. Will not appear until a ; newline is printed. ; Preserved: A, X, Y console_print: cmp #10 beq console_newline ; Write to buffer stx console_temp ldx console_pos sta console_buf+console_margin,x dec console_pos bmi :+ ; reached end of line ldx console_temp rts ; Prints new line ; Preserved: A, X, Y console_newline: stx console_temp : pha jsr console_wait_vbl ; Address line in nametable lda console_scroll sta console_pos lda #$08 asl console_pos rol a asl console_pos rol a sta PPUADDR lda console_pos sta PPUADDR ; Copy line ldx #console_buf_size-1 : lda console_buf,x sta PPUDATA dex bpl :- ; Scroll up 8 pixels lda console_scroll cmp #240-8 bcc :+ adc #16-1;+1 for set carry : adc #8 sta console_scroll ; Apply new scroll console_apply_scroll_: lda #0 sta PPUADDR sta PPUADDR sta PPUSCROLL lda console_scroll sta PPUSCROLL ; Start new clear line lda #' ' ldx #console_buf_size-1 : sta console_buf,x dex bpl :- ldx #console_width-1 stx console_pos ldx console_temp pla rts \ No newline at end of file diff --git a/blargg_nes_cpu_test5/source/common/crc.a b/blargg_nes_cpu_test5/source/common/crc.a new file mode 100644 index 0000000..c57c044 --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/crc.a @@ -0,0 +1 @@ +; CRC-32 checksum calculation zp_res checksum,4 zp_byte checksum_temp zp_byte checksum_off_ ; Turns CRC updating on/off. Allows nesting. ; Preserved: X, Y .macro crc_off inc checksum_off_ .endmacro .macro crc_on jsr crc_on_ .endmacro crc_on_: dec checksum_off_ jmi internal_error ; catch unbalanced crc calls rts ; Initializes checksum module init_crc: ; FALL THROUGH ; Clears checksum and turns it on ; Preserved: X, Y reset_crc: lda #0 sta checksum_off_ lda #$FF sta checksum sta checksum + 1 sta checksum + 2 sta checksum + 3 rts ; If enabled, updates checksum with byte in A ; Preserved: X, Y ; Time: 350 clocks average update_crc_: stx checksum_temp jmp :+ update_crc: stx checksum_temp ldx checksum_off_ bne @off : eor checksum ldx #8 @bit: lsr checksum+3 ror checksum+2 ror checksum+1 ror a bcc :+ sta checksum lda checksum+3 eor #$ED sta checksum+3 lda checksum+2 eor #$B8 sta checksum+2 lda checksum+1 eor #$83 sta checksum+1 lda checksum eor #$20 : dex bne @bit sta checksum @off: ldx checksum_temp rts ; Prints CRC-32 checksum as 8-character hex value print_crc: crc_off ; Print complement ldx #3 : lda checksum,x eor #$FF jsr print_hex dex bpl :- crc_on rts \ No newline at end of file diff --git a/blargg_nes_cpu_test5/source/common/crc_fast.a b/blargg_nes_cpu_test5/source/common/crc_fast.a new file mode 100644 index 0000000..0f9751a --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/crc_fast.a @@ -0,0 +1,64 @@ +; Fast table-based CRC-32 + +; Uses 1K of RAM +checksum_t0 = $400 +checksum_t1 = $500 +checksum_t2 = $600 +checksum_t3 = $700 + +; Initializes fast CRC tables and resets checksum. +; Preserved: Y +; Time: 57 msec +init_crc_fast: + ldx #0 +@byte: ; Calculate CRC for this byte + lda #0 + sta checksum+3 + sta checksum+2 + sta checksum+1 + stx checksum + jsr update_crc_ + + ; Write in table + sta checksum_t0,x + lda checksum+1 + sta checksum_t1,x + lda checksum+2 + sta checksum_t2,x + lda checksum+3 + sta checksum_t3,x + + inx + bne @byte + + jmp reset_crc + + +; Updates checksum with byte from A +; Preserved: X, Y +; Time: 54 clocks +update_crc_fast: + stx checksum_temp + +; Updates checksum with byte from A +; Preserved: Y +; Time: 42 clocks +.macro update_crc_fast + eor checksum + tax + lda checksum+1 + eor checksum_t0,x + sta checksum + lda checksum+2 + eor checksum_t1,x + sta checksum+1 + lda checksum+3 + eor checksum_t2,x + sta checksum+2 + lda checksum_t3,x + sta checksum+3 +.endmacro + + update_crc_fast + ldx checksum_temp + rts diff --git a/blargg_nes_cpu_test5/source/common/delay.a b/blargg_nes_cpu_test5/source/common/delay.a new file mode 100644 index 0000000..e0add47 --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/delay.a @@ -0,0 +1 @@ +; Delays in clocks and milliseconds. All routines re-entrant ; (no global data). ; Delays n milliseconds (1/1000 second) ; n can range from 0 to 1100. ; Preserved: X, Y .macro delay_msec n .if (n) < 0 .or (n) > 1100 .error "time out of range" .endif delay ((n)*1789773+500)/1000 .endmacro ; Delays n microseconds (1/1000000 second). ; n can range from 0 to 100000. ; Preserved: X, Y .macro delay_usec n .if (n) < 0 .or (n) > 100000 .error "time out of range" .endif delay ((n)*17898+5000)/10000 .endmacro ; Delays n clocks, from 2 to 16777215 ; Preserved: X, Y .macro delay n .if (n) < 0 .or (n) = 1 .or (n) > 16777215 .error "Delay out of range" .endif .if (n) < 14 .and (n) <> 12 delay_inline (n) .elseif (n) < 27 delay_unrolled (n) .elseif <(n) = 0 delay_256 (n) .else lda #<((n)-27) jsr delay_a19_clocks delay_256 ((n)-27) .endif .endmacro ; Delays A+19 clocks (excluding JSR) ; Preserved: X, Y : sbc #7 ; carry set by CMP delay_a19_clocks: cmp #7 bcs :- ; do multiples of 7 lsr a ; bit 0 bcs :+ : ; A=clocks/2, either 0,1,2,3 beq @zero ; 0: 5 lsr a beq :+ ; 1: 7 bcc :+ ; 2: 9 @zero: bne :+ ; 3: 11 : rts ; (thanks to dclxvi for the algorithm) ; Delays A*256+10 clocks (excluding JSR) ; Preserved: X, Y delay_256a_clocks: cmp #0 bne :+ rts delay_256a_clocks_: pha lda #256-19-22-16 bne @first ; always branches : pha lda #256-19-22 @first: jsr delay_a19_clocks pla clc adc #-1 bne :- rts ; Delays A*65536+10 clocks (excluding JSR) ; Preserved: X, Y delay_65536a_clocks: cmp #0 bne :+ rts delay_65536a_clocks_: pha lda #256-19-22-16 bne @first : pha lda #256-19-22 @first: jsr delay_a19_clocks lda #255 jsr delay_256a_clocks_ pla clc adc #-1 bne :- rts .macro delay_inline n .if n = 7 .or n >= 9 pha pla delay_inline (n-7) .elseif n >= 3 .and n & 1 lda <0 delay_inline (n-3) .elseif n >= 2 nop delay_inline (n-2) .elseif n > 0 .error "delay_short internal error" .endif .endmacro .macro delay_unrolled n .if n & 1 lda <0 jsr delay_unrolled_-((n-15)/2) .else jsr delay_unrolled_-((n-12)/2) .endif .endmacro .res 7,$EA ; NOP delay_unrolled_: rts .macro delay_256 n .if >n lda #>n jsr delay_256a_clocks_ .endif .if ^n lda #^n jsr delay_65536a_clocks_ .endif .endmacro \ No newline at end of file diff --git a/blargg_nes_cpu_test5/source/common/instr_test.a b/blargg_nes_cpu_test5/source/common/instr_test.a new file mode 100644 index 0000000..e85daab --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/instr_test.a @@ -0,0 +1,50 @@ +.include "common.a" +.include "testing.a" +.include "crc_fast.a" + +; Instructions to test +.macro entry op,name + .byte op,0 + str_addr name +.endmacro + +zp_byte in_p +zp_byte in_a +zp_byte in_x +zp_byte in_y +zp_byte in_s + +values: + .byte 0,1,2,$40,$7F,$80,$81,$FF +values_size = * - values + .byte 0,1,2,$40,$7F,$80,$81,$FF + +.macro set_paxyso + ldx in_s + txs + lda values,y + sta operand + lda in_p + pha + lda in_a + ldx in_x + ldy in_y + plp +.endmacro + +.macro check_paxyso + php + cld ; limits effect of buggy emulator + jsr update_crc_fast + pla + jsr update_crc_fast + txa + jsr update_crc_fast + tya + jsr update_crc_fast + tsx + txa + jsr update_crc_fast + lda operand + jsr update_crc_fast +.endmacro diff --git a/blargg_nes_cpu_test5/source/common/instr_test_end.a b/blargg_nes_cpu_test5/source/common/instr_test_end.a new file mode 100644 index 0000000..85c17d5 --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/instr_test_end.a @@ -0,0 +1,178 @@ +zp_byte instrs_idx +zp_byte failed_count + +main: ldx #$A2 + txs + + jsr init_crc_fast + + ; Test each instruction + lda #0 +@loop: sta instrs_idx + tay + + jsr reset_crc + lda instrs,y + jsr test_instr + jsr check_result + + lda instrs_idx + clc + adc #4 + cmp #instrs_size + bne @loop + + lda failed_count + jne test_failed + jmp tests_passed + +; Check result of test +check_result: +.ifdef CALIBRATE + ; Print correct CRC + crc_off + print_str ".dword $" + ldx #0 +: lda checksum,x + jsr print_hex + inx + cpx #4 + bne :- + jsr print_newline + crc_on +.else + ; Verify CRC + ldx #3 + ldy instrs_idx +: lda checksum,x + cmp correct_checksums,y + bne @wrong + iny + dex + bpl :- +.endif + rts + +; Print failed opcode and name +@wrong: + ldy instrs_idx + lda instrs,y + jsr print_a + lda instrs+2,y + sta addr + lda instrs+3,y + sta addr+1 + jsr print_str_addr + jsr print_newline + inc failed_count + rts + +bss_res instr,instr_template_size + +; Tests instr A +test_instr: + sta instr + + ; Copy rest of template + ldx #instr_template_size - 1 +: lda instr_template,x + sta instr,x + dex + bne :- + + ; Disable and clear frame IRQ + lda #$40 + sta SNDMODE + + ; Default stack + lda #$90 + sta in_s + + ; Test with different flags + lda #$00 + jsr test_flags + lda #$FF + jsr test_flags + + rts + +zp_byte operand_idx + +test_flags: + sta in_p + + ldy #values_size-1 +: sty operand_idx + + lda values,y + sta in_a + + lda values+1,y + sta in_x + + lda values+2,y + sta in_y + + jsr test_values + + ldy operand_idx + dey + bpl :- + + rts + +.ifndef values2 + values2 = values + values2_size = values_size +.endif + +.macro test_normal +zp_byte a_idx +zp_byte saved_s + + tsx + stx saved_s + + ldy #values2_size-1 +inner: sty a_idx + + lda values2,y + sta operand + + set_in + +.if 0 + ; P A X Y S O (z,x) (z),y + jsr print_p + jsr print_a + jsr print_x + jsr print_y + jsr print_s + lda operand + jsr print_a +.ifdef address + lda (address,x) + jsr print_a + lda (address),y + jsr print_a +.else + lda operand,x + jsr print_a + lda operand,y + jsr print_a +.endif + jsr print_newline +.endif + + jmp instr +instr_done: + + check_out + + ldy a_idx + dey + bpl inner + + ldx saved_s + txs +.endmacro diff --git a/blargg_nes_cpu_test5/source/common/macros.a b/blargg_nes_cpu_test5/source/common/macros.a new file mode 100644 index 0000000..089739c --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/macros.a @@ -0,0 +1 @@ +; If name isn't yet defined, defines it with value .macro SET_DEFAULT name,value .ifndef name name=value .endif .endmacro ; Sets name to 1 if value is non-zero, 0 otherwise .macro SET_FLAG name,value .if value name=1 .else name=0 .endif .endmacro .macro PRINT_FLAG flag .if flag .error "true" .else .error "false" .endif .end .endmacro ; jxx equivalents to bxx .macpack longbranch ; blt, bge equivalents to bcc, bcs .macro blt Target bcc Target .endmacro .macro bge Target bcs Target .endmacro .macro jge Target jcs Target .endmacro .macro jlt Target jcc Target .endmacro ; Generates string in RODATA and inserts address in code .macro str_addr text .local Addr .rodata Addr: .ifnblank text .byte text .endif .byte 0 .code .word Addr .endmacro ; Simplified declaration of variable in RAM ; Reserves size bytes in zeropage for name .macro zp_res name,size .zeropage name: .res size .code .endmacro ; Reserves size bytes in bss for name .macro bss_res name,size .bss name: .res size .code .endmacro ; Reserves size bytes in zeropage or bss .macro ram_res name,size .zeropage name: .res size .code .endmacro ; Reserves byte in zeropage for name .macro zp_byte name zp_res name,1 .endmacro \ No newline at end of file diff --git a/blargg_nes_cpu_test5/source/common/nes.a b/blargg_nes_cpu_test5/source/common/nes.a new file mode 100644 index 0000000..e0481e8 --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/nes.a @@ -0,0 +1 @@ +.if !BUILD_NSF ; PPU PPUCTRL = $2000 PPUMASK = $2001 PPUSTATUS = $2002 SPRADDR = $2003 SPRDATA = $2004 PPUSCROLL = $2005 PPUADDR = $2006 PPUDATA = $2007 SPRDMA = $4014 PPUCTRL_NMI = $80 PPUMASK_BG0 = $0A PPUCTRL_8X8 = $00 PPUCTRL_8X16 = $20 PPUMASK_SPR = $14 PPUMASK_BG0CLIP = $08 .endif ; APU SNDCHN = $4015 JOY1 = $4016 JOY2 = $4017 SNDMODE = $4017 SNDMODE_NOIRQ = $40 ; Temporaries temp = $A temp2 = $B temp3 = $C addr = $E .macro init_nes ; Init NES sei cld ldx #$FF txs lda #0 .if !BUILD_NSF ; Init PPU sta PPUCTRL sta PPUMASK .endif ; Clear RAM ldx #7 ; last page tay ; offset in last page+1 sta <0 @clear_page: stx <1 : dey sta (0),y bne :- dex bpl @clear_page .if !BUILD_NSF ; Let PPU initialize : bit PPUSTATUS bpl :- : bit PPUSTATUS bpl :- .endif .endmacro \ No newline at end of file diff --git a/blargg_nes_cpu_test5/source/common/ppu.a b/blargg_nes_cpu_test5/source/common/ppu.a new file mode 100644 index 0000000..08f2b7a --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/ppu.a @@ -0,0 +1 @@ +; PPU utilities ; Clears VBL flag then waits for it to be set ; Preserved: A, X, Y wait_vbl: bit PPUSTATUS : bit PPUSTATUS bpl :- rts ; Turns NMI on ; Preserved: X, Y nmi_on: lda #PPUCTRL_NMI sta PPUCTRL rts ; Turns NMI off ; Preserved: X, Y nmi_off: lda #0 sta PPUCTRL rts ; Sets VRAM address to A * $100 ; Preserved: X, Y set_vpage: bit PPUSTATUS sta PPUADDR lda #0 sta PPUADDR rts ; Sets VRAM address to A * $100 + X ; Preserved: A, X, Y set_vaddr: bit PPUSTATUS sta PPUADDR stx PPUADDR rts ; Sets X and Y scroll ; Preserved: A, X, Y set_vscroll: bit PPUSTATUS stx PPUSCROLL sty PPUSCROLL rts ; Turns off NMI and disables BG and sprites ; Preserved: A, X, Y disable_ppu: pha lda #0 sta PPUCTRL sta PPUMASK bit PPUSTATUS sta PPUADDR sta PPUADDR pla rts ; Sets sprite memory to $FF ; Preserved: Y clear_sprites: lda #$ff ldx #0 : sta SPRDATA dex bne :- rts ; Clears/fills nametable with 0/A and clear attributes to 0 clear_nametable: lda #0 fill_nametable: pha lda #$20 jsr set_vpage pla ldx #240 : sta PPUDATA sta PPUDATA sta PPUDATA sta PPUDATA dex bne :- lda #0 ldx #64 : sta PPUDATA dex bne :- rts ; Clears/fills VRAM with 0/A clear_vram: lda #0 fill_vram: ldx #0 ldy #$24 bne fill_vram_ ; Clears/fills CHR with 0/A fill_chr1: ldx #$10 ldy #$10 bne fill_vram_ fill_chr0: ldx #0 ldy #$10 bne fill_vram_ clear_chr: lda #0 fill_chr: ldx #0 ldy #$20 ; Fill Y*$100 bytes of VRAM with A, starting at X*$100 fill_vram_: bit PPUSTATUS stx PPUADDR ldx #0 stx PPUADDR : sta PPUDATA dex bne :- dey bne :- rts \ No newline at end of file diff --git a/blargg_nes_cpu_test5/source/common/print.a b/blargg_nes_cpu_test5/source/common/print.a new file mode 100644 index 0000000..741c19e --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/print.a @@ -0,0 +1 @@ +; Prints values in various ways to output, including numbers and strings. newline = 10 ; Prints indicated register to console as two hex chars and space ; Preserved: A, X, Y, P print_a: php pha print_reg_: jsr print_hex lda #' ' jsr print_char_ pla plp rts print_x: php pha txa jmp print_reg_ print_y: php pha tya jmp print_reg_ print_p: php pha php pla jmp print_reg_ print_s: php pha txa tsx pha inx inx inx inx jsr print_x pla tax pla plp rts ; Prints A as two hex characters, NO space after ; Preserved: X, Y print_hex: ; Update checksum pha jsr update_crc pla ; Print high nibble pha lsr a lsr a lsr a lsr a jsr @nibble jsr print_char_ pla ; Print low nibble and #$0F jsr @nibble jmp print_char_ @nibble: cmp #10 blt @digit adc #6;+1 since carry is set @digit: adc #$30 rts ; Prints character and updates checksum UNLESS it's a newline. ; Preserved: X, Y print_char: cmp #newline beq :+ pha jsr update_crc pla : jmp print_char_ ; Prints space. Doesn't affect checksum. ; Preserved: A, X, Y print_space: pha lda #' ' bne print_char_pla_rts ; always branches ; Advances to next line. Doesn't affect checksum. ; Preserved: A, X, Y print_newline: pha lda #newline print_char_pla_rts: jsr print_char_ pla rts ; Prints zero-terminated string after JSR that called this routine. ; Preserved: A, X, X print_str: sta temp ; Get addr of string pla sta addr pla sta addr+1 jsr inc_addr lda temp jsr print_str_addr jmp (addr) ; Prints string ; Preserved: A, X, Y .macro print_str str jsr print_str .byte str,0 .endmacro ; Prints string at addr and leaves addr pointing to ; byte AFTER zero terminator. ; Preserved: A, X, Y print_str_addr: pha tya pha ldy #0 beq :+ ; always taken @loop: jsr print_char jsr inc_addr : lda (addr),y bne @loop pla tay pla ; FALL THROUGH ; Increments 16-bit value in addr. ; Preserved: A, X, Y inc_addr: inc addr beq :+ rts : inc addr+1 rts ; Prints A as 1-3 digit decimal value, NO space after. ; Preserved: Y print_dec: cmp #100 blt @tens ldx #'0' : sbc #100 inx cmp #100 bge :- jsr @digit @tens: cmp #10 blt @ones ldx #'0' : sbc #10 inx cmp #10 bge :- jsr @digit @ones: clc adc #'0' jmp print_char @digit: pha txa jsr print_char pla rts ; Reports value of A via low/high beeps. ; Preserved: X, Y beep_bits: ; Make reference low beep clc jsr @beep ; End marker sec ; Remove high zero bits : rol a beq @zero bcc :- ; Play remaining bits @loop: php jsr @beep plp asl a bne @loop @zero: rts @beep: pha ; Set LSB of pitch based on carry lda #0 adc #$FF sta $4002 ; Set up square lda #1 sta SNDCHN sta $4003 sta $4001 ; Fade volume lda #15 : pha eor #$30 sta $4000 delay_msec 8 pla clc adc #-1 bne :- ; Silence sta SNDCHN delay_msec 120 pla rts ; Reports internal error and exits program internal_error: print_str "Internal error" lda #1 jmp exit \ No newline at end of file diff --git a/blargg_nes_cpu_test5/source/common/serial.a b/blargg_nes_cpu_test5/source/common/serial.a new file mode 100644 index 0000000..e96d5de --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/serial.a @@ -0,0 +1 @@ +; Serial I/O at 57600 bits/sec on controller port 2 ; ; Uses stack and register A only, and doesn't mind page crossing ; (uses subroutines instead of loops). ; Initialize serial and wait so PC won't receive junk for the first byte. ; Preserved: A, X, Y serial_init: pha lda #1 sta JOY1 delay_msec 10 pla rts ; Write byte A to serial ; Preserved: X, Y serial_write: clc jsr serial_write_bit ; start nop ; TODO: why this extra delay of 6? jsr serial_write_bit2 ; bit 0 jsr serial_write_bit ; bit 1 jsr serial_write_bit ; bit 2 jsr serial_write_bit ; bit 3 jsr serial_write_bit ; bit 4 jsr serial_write_bit ; bit 5 jsr serial_write_bit ; bit 6 jsr serial_write_bit ; bit 7 sec ; 2 stop bit serial_write_bit2: nop ; 2 nop ; 2 serial_write_bit: ; 6 jsr pha ; 3 rol a ; 2 and #1 ; 2 sta JOY1 ; 4 pla ; 4 ror a ; 2 nop ; 2 rts ; 6 ; Wait for and read byte from serial into A ; Preserved: X, Y serial_read: lda #1 ; 2 wait_start_bit: bit JOY2 ; 4 beq wait_start_bit ; 3 ; 4-10 latency (average 7) jsr serial_start_bit ; 38 delay jsr serial_read_bit ; bit 0 jsr serial_read_bit ; bit 1 jsr serial_read_bit ; bit 2 jsr serial_read_bit ; bit 3 jsr serial_read_bit ; bit 4 jsr serial_read_bit ; bit 5 jsr serial_read_bit ; bit 6 nop ; bit 7 serial_start_bit: nop nop serial_read_bit: ; 6 jsr pha ; 3 sec ; 2 rol a ; 2 eor JOY2 ; 4 lsr a ; 2 pla ; 4 ror a ; 2 rts ; 6 \ No newline at end of file diff --git a/blargg_nes_cpu_test5/source/common/shell.a b/blargg_nes_cpu_test5/source/common/shell.a new file mode 100644 index 0000000..f8a7102 --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/shell.a @@ -0,0 +1,82 @@ +; Shell that sets up common services, calls main, +; and handles exit result + +; Sets up environment, calls main, then exit 0 +run_main: + ; Initialize libraries + jsr init_crc + + ; Establish consistent environment before + ; running main + jsr wait_vbl + lda #0 + sta SNDMODE + tax + tay + clc + clv + + jsr main + + ; Default to silent exit if main returns + lda #0 + +; Exits program and prints result code if non-zero +exit: + ; Disable IRQ and NMI + sei +.if !BUILD_NSF + ldx #0 + stx PPUCTRL +.endif + + ; Reset stack + dex + txs + +.if !BUILD_MULTI + ; 0: "" + cmp #1 + jlt exit_ + + ; 1: "Failed" + bne :+ + print_str {newline,"Failed"} + jmp exit_ + + ; n: "Error n" +: pha + print_str {newline,"Error "} + jsr print_dec + pla +.endif + jmp exit_ + + +;;;; Default NMI/IRQ + +; Default NMI and IRQ handlers + +.ifndef CUSTOM_NMI +zp_byte nmi_count + +BEGIN_NMI + inc nmi_count + rti +.code + +; Waits for NMI +; Preserved: X, Y +wait_nmi: + lda nmi_count +: cmp nmi_count + beq :- + rts +.endif + +.ifndef CUSTOM_IRQ +BEGIN_IRQ + bit SNDCHN ; clear APU IRQ flag + rti +.code +.endif diff --git a/blargg_nes_cpu_test5/source/common/testing.a b/blargg_nes_cpu_test5/source/common/testing.a new file mode 100644 index 0000000..308e3ec --- /dev/null +++ b/blargg_nes_cpu_test5/source/common/testing.a @@ -0,0 +1,158 @@ +; Utilities for writing test ROMs + +ram_res test_code,1 ; code of current test +ram_res test_name,2 ; address of name of current test, or 0 of none + + +; Reports that all tests passed +tests_passed: +.if !BUILD_MULTI + jsr print_filename + print_str "Passed" +.endif + lda #0 + jmp exit + + +; Reports test failure +test_failed: + lda test_code + + ; Treat 0 as 1, in case it wasn't ever set + bne :+ + lda #1 + sta test_code +: + ; If code >= 2, print name + cmp #2 + blt :+ + lda test_name+1 + beq :+ + sta addr+1 + lda test_name + sta addr + jsr print_newline + jsr print_str_addr + jsr print_newline +: +.if !BUILD_MULTI + jsr print_filename +.endif + + ; End program + lda test_code + jmp exit + + +; Sets current test code and optionally name. Also resets +; checksum. +.macro set_test code,name + jsr set_test_ + .byte code +.if (!BUILD_DEVCART) || .blank(name) + .addr 0 +.else + str_addr name +.endif +.endmacro + +set_test_: + ; Get return addr + sta test_code + pla + sta addr + pla + sta addr+1 + lda test_code + + pha + tya + pha + + jsr reset_crc + + ldy #1 + + ; Copy code + lda (addr),y + sta test_code + iny + + ; Get addr of string + lda (addr),y + sta test_name + iny + lda (addr),y + sta test_name+1 + + lda #3 + ; FALL THROUGH + + ; Restore Y and A, then jump to addr+A+1 +jmp_adj_addr: + ; Increment return addr + sec + adc addr + sta addr + bcc :+ + inc addr+1 +: + pla + tya + pla + jmp (addr) + + +; If checksum doesn't match expected, reports failed test +; Preserved: A, X, Y +.macro check_crc expected +.if expected + jsr check_crc_ + .dword expected +.else + ; print checksum if you pass 0 + jsr print_newline + jsr print_crc + jsr print_newline +.endif +.endmacro + + +; Compares CRC at addr to current CRC. +; A and Z reflect comparison. +; Preserved: X +cmp_crc_addr: + ; Compare with checksum + ldy #0 +: lda checksum,y + eor #$FF + eor (addr),y + bne @wrong + iny + cpy #4 + bne :- +@wrong: rts + +check_crc_: + ; Get return addr + sta temp + pla + sta addr + pla + sta addr+1 + jsr inc_addr + lda temp + + pha + tya + pha + + jsr cmp_crc_addr + bne :+ + lda #3 + jmp jmp_adj_addr + +: jsr print_newline + jsr print_crc + jsr print_newline + jmp test_failed diff --git a/blargg_nes_cpu_test5/source/nes.cfg b/blargg_nes_cpu_test5/source/nes.cfg new file mode 100644 index 0000000..6661c9d --- /dev/null +++ b/blargg_nes_cpu_test5/source/nes.cfg @@ -0,0 +1,28 @@ +# ca65 configuration for NROM with first $6000 bytes empty + +# fill=yes forces area to be padded to specified size in output +MEMORY { + ZP: start = $10, size = $F0, type = rw; + HEADER: start = 0, size = 16, type = ro, fill = yes; + + # my devcart only has memory from $E000-$FFFF + ROMX: start = $8000, size = $6000, type = ro, fill = yes; + ROM0: start = $E000, size = $1FF4, type = ro, fill = yes; + ROMV: start = $FFF4, size = $C, type = ro, fill = yes; + + ROM2: start = 0, size = $2000, type = ro, fill = yes; + + SRAM: start = $0200, size = $0600, type = rw; +} + +# align=$100 allows use of .align directive with a value up to $100 +SEGMENTS { + HEADER: load = HEADER, type = ro; + #STARTUP: load = ROMX, type = ro; + CODE: load = ROM0, type = ro, align = $100; + RODATA: load = ROM0, type = ro; + VECTORS: load = ROMV, type = ro; + CHARS: load = ROM2, type = ro; + BSS: load = SRAM, type = bss; + ZEROPAGE: load = ZP, type = zp; +} diff --git a/blargg_nes_cpu_test5/source/readme.txt b/blargg_nes_cpu_test5/source/readme.txt new file mode 100644 index 0000000..b9be231 --- /dev/null +++ b/blargg_nes_cpu_test5/source/readme.txt @@ -0,0 +1,60 @@ +NES Tests Source Code +--------------------- + +Building with ca65 +------------------ +To assemble a test with ca65, use the following commands: + + ca65 -I common -o rom.o source_filename_here.a + ld65 -C nes.cfg rom.o -o rom.nes + your_favorite_nes_emulator rom.nes + +Don't bother trying to build a multi-test ROM, since it's not worth the complexity. Also, tests you build won't print their name if they fail, since that requires special arrangements. + + +Framework +--------- +Each test is in a single source file, and makes use of several library source files from common/. This framework provides common services and reduces code to only that which performs the actual test. Virtually all tests include "common.a" at the beginning, which sets things up and includes all the appropriate library files. + +The reset handler does minimal NES hardware initialization, clears RAM, sets up the text console, then runs main. Main can exit by returning or jumping to "exit" with a code in A. Exit reports the code then goes into an infinite loop. If the code is 0, it doesn't do anything, otherwise it reports the code. Code 1 is reported as "Failed", and the rest as "Error ". + +Several routines are available to print values and text to the console. Most update a running CRC-32 checksum which can be checked with check_crc, allowing ALL the output to be checked very easily. If the checksum doesn't match, it is printed, so you can run the code on a NES and paste the correct checksum into your code. + +The default is to build a normal iNES ROM, with other options build types not documented well. My nes.cfg file puts the code at $E000 since my devcart requires it, and I don't want the normal ROM to differ in any way from what I've tested. + +I use symbolic constants for NES registers. Use of these raises the level of the code, reduces room for error, and makes it easier for less-experienced NES programmers to understand. I recently switched to using them and have no regrets. + +Library routines are organized by function into several files, each with short documentation. Each routine may also optionally list registers which are preserved, rather than those which are modified (trashed) as is more commonly done. This is because it's best for the caller to assume that ALL registers are NOT preserved unless noted. Also, preserving registers is part of the interface, and making that guarantee requires extra effort that isn't warranted except for often-used small routines that would be tedious to use if they didn't preserve registers. Also, it's easier for the caller to save and restore A, so it's best if a routine only modifies A, if possible. + +I couldn't help using some macros for common operations. The left is equivalent to the right: + + Macro Equivalent + ------------------------------------- + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + zp_byte name .zeropage + name: .res 1 + .code + + zp_res name,n .zeropage + name: .res n + .code + + bss_res name,n .bss + name: .res n + .code + + ram_res name,n .zeropage or .bss (unspecified) + name: .res n + .code + + +-- +Shay Green diff --git a/blargg_ppu_tests_2005.09.15b/palette_ram.nes b/blargg_ppu_tests_2005.09.15b/palette_ram.nes new file mode 100644 index 0000000000000000000000000000000000000000..878b32175a9f243ea84416e215132bc67f750f4e GIT binary patch literal 16400 zcmeI2&ubGw6vtoEx``6vQfOJEg*k|%QXyy$3oh*<6{0L6+CN|q5>oKsG02izK!gMj zg2ht}6da)k{{r_kSc!2jiU*OcDM3WS=3NfC(@GCcp%k025#WOn?b6 z0VeRz6OhmVA&&2geCXtMlUY@!8Z)*$A^PEFB;ItLjqbvnA|Bh)G)02&Gzobq-s!P=)k}iLmU)JK_N5xn>2nH_7 zEJ=aK=tr5YC`0E#g{b_Pz~Ra#jVSZSQAW$OK*z^4yqs(mH?mmN9FKd!fHKlY887M} zcj~DPkQeLeRu;=L;#Kgym3Arj!R^^Ak#t5lA&KU%~gu&x;M@- zj3T94bQxK8d;_M_QN3Fx7$ym*fv57;9Y2Oz&agD)!K`(=9p`c|^oJVFmt23S(8nrg z6pKa7S2W1iv|JT{PGMmC#N)oYuu&eGH4>m_Cs8JVxiX1r(LH|l(6+$5tyHWOU~?K^ zm3`kYTd?0&O11YP_Whxcy3p@qgyJ1lUIL6_nSvV0NBwyXWuhL{ejn|B=zyD84OBml z-(jBWeTzSK6zRpONBb#kOmp?IeV67Ps;jnrPs8}AuR;5uVPB>Co~fgM7sq|nT0L1xO^G+B8zG67^AMVo@G(lAHnzEZ|`*RcQ=Cs|Mu;q7r&F%#~w4jdw^PN( z4umtc`_KQX@d20s6JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1en18 MMqoa?5uOQu0g5s~X#fBK literal 0 HcmV?d00001 diff --git a/blargg_ppu_tests_2005.09.15b/power_up_palette.nes b/blargg_ppu_tests_2005.09.15b/power_up_palette.nes new file mode 100644 index 0000000000000000000000000000000000000000..8964506243984a50501b4a6a11228c6abbddb80a GIT binary patch literal 16400 zcmeI2v1=1i9LIlmjhAbQ?G3gZ(%}t7Qt1%2!%>fVLxmuR2zGJ1K|%rrI|eJED;-KX;P>MsjI%sI))!$2+>ObI6`2F&@-}}Aa@BQBQeYj-G z?VEQmD)85i$%p_EAOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F z0z`la5P>sKfI|%!d(md2k^8dUi^^Q7O*njntwb9!E4AIZ_RP5BgefmpJQpH<6*KHg zzqqC_u2y4yqoy(3t+57drrDQb#4bmB5et8Cr5fX=VFeUW)$_WcPXVN6hLzbNNWlet z4pd+>dY=EbzL%2lsA!gs!vhcd=Q+cE`*C_RPUEClOUo0^F&rL$UW?QJXy`A?g;ODX ztdU#SaZ`OTR>A{Wp$??-dsX0HtI9g?>s7U(WA`-s5FR%4xA3kv{k0aVyNXc5Z*rrQ z)4L;Q>$3E8oHRZW$906_4gO+bN&^$J*=%nqn@#YO1;Y>hiLL>#pc`xfAeXdcdJ1I% zSPLmsi|*O$r;ZKQk`RdyfX(FqyAT9H!G=y#2+{075(M1g?6Q zsgFDLA%`F0_hTj8_40g*t+vPLI7Gd7_rIQqEn) zx{Z$q=~$~Bq}f(fbk`zxD=On_2h4rbKJ&jfbO9nj1c(3;AOb{y2oM1xKm>>Y5g-CY hfCvx)B0vO)01+SpM1Tko0U|&I{s)2S=vs6s`U6^dZ*Bkp literal 0 HcmV?d00001 diff --git a/blargg_ppu_tests_2005.09.15b/readme.txt b/blargg_ppu_tests_2005.09.15b/readme.txt new file mode 100644 index 0000000..82f2dd5 --- /dev/null +++ b/blargg_ppu_tests_2005.09.15b/readme.txt @@ -0,0 +1,74 @@ +NTSC NES PPU Tests +------------------ +These ROMs test a few aspects of the NTSC NES PPU operation. They have been +tested on an actual NES and all give a passing result. I wrote them to verify +that my NES emulator's PPU was working properly. + +Each ROM runs several tests and reports a result code on screen and by beeping +a number of times. A result code of 1 always indicates that all tests were +passed; see below for the meaning of other codes for each test. + +The main source code for each test is included, and most tests are clearly +divided into sections. Some of the common support code is included, but not +all, since it runs on a custom setup. Contact me if you want to assemble the +tests yourself. + +Shay Green (swap to e-mail) + + +palette_ram +----------- +PPU palette RAM read/write and mirroring test + +1) Tests passed +2) Palette read shouldn't be buffered like other VRAM +3) Palette write/read doesn't work +4) Palette should be mirrored within $3f00-$3fff +5) Write to $10 should be mirrored at $00 +6) Write to $00 should be mirrored at $10 + + +power_up_palette +---------------- +Reports whether initial values in palette at power-up match those +that my NES has. These values are probably unique to my NES. + +1) Palette matches +2) Palette differs from table + + +sprite_ram +---------- +Tests sprite RAM access via $2003, $2004, and $4014 + +1) Tests passed +2) Basic read/write doesn't work +3) Address should increment on $2004 write +4) Address should not increment on $2004 read +5) Third sprite bytes should be masked with $e3 on read +6) $4014 DMA copy doesn't work at all +7) $4014 DMA copy should start at value in $2003 and wrap +8) $4014 DMA copy should leave value in $2003 intact + + +vbl_clear_time +-------------- +The VBL flag ($2002.7) is cleared by the PPU around 2270 CPU clocks +after NMI occurs. + +1) Tests passed +2) VBL flag cleared too soon +3) VBL flag cleared too late + + +vram_access +----------- +Tests PPU VRAM read/write and internal read buffer operation + +1) Tests passed +2) VRAM reads should be delayed in a buffer +3) Basic Write/read doesn't work +4) Read buffer shouldn't be affected by VRAM write +5) Read buffer shouldn't be affected by palette write +6) Palette read should also read VRAM into read buffer +7) "Shadow" VRAM read unaffected by palette transparent color mirroring diff --git a/blargg_ppu_tests_2005.09.15b/source/palette_ram.asm b/blargg_ppu_tests_2005.09.15b/source/palette_ram.asm new file mode 100644 index 0000000..d65e956 --- /dev/null +++ b/blargg_ppu_tests_2005.09.15b/source/palette_ram.asm @@ -0,0 +1,106 @@ +; PPU palette RAM read/write and mirroring test +; to do: check that upper two bits aren't stored + + .include "prefix_ppu.a" + +; Set VRAM address to $3f00 + X +; Preserved: A, X, Y +set_pal_addr: + pha + bit $2002 + lda #$3f + sta $2006 + txa + sta $2006 + pla + rts + +; Set palette entry X to A +; Preserved: A, X, Y +set_pal_entry: + jsr set_pal_addr + sta $2007 + rts + +; Read palette entry X into A +; Preserved: X, Y +get_pal_entry: + jsr set_pal_addr + lda $2007 + and #$3f + rts + +reset: + lda #50 + jsr delay_msec + + jsr wait_vbl + lda #0 + sta $2000 + sta $2001 + + lda #2;) Palette read shouldn't be buffered like other VRAM + sta result + ldx #$00 + lda #$12 + jsr set_pal_entry + lda #$34 + sta $2007 + jsr get_pal_entry + lda $2007 + cmp #$12 + jsr error_if_eq + + lda #3;) Palette write/read doesn't work + sta result + ldx #$00 + lda #$34 + jsr set_pal_entry + jsr get_pal_entry + lda $2007 + cmp #$34 + jsr error_if_ne + + lda #4;) Palette should be mirrored within $3f00-$3fff + sta result + ldx #$00 + lda #$12 + jsr set_pal_entry + ldx #$e0 + lda #$34 + jsr set_pal_entry + ldx #$00 + jsr get_pal_entry + cmp #$34 + jsr error_if_ne + + lda #5;) Write to $10 should be mirrored at $00 + sta result + ldx #$00 + lda #$12 + jsr set_pal_entry + ldx #$10 + lda #$34 + jsr set_pal_entry + ldx #$00 + jsr get_pal_entry + cmp #$34 + jsr error_if_ne + + lda #6;) Write to $00 should be mirrored at $10 + sta result + ldx #$10 + lda #$12 + jsr set_pal_entry + ldx #$00 + lda #$34 + jsr set_pal_entry + ldx #$10 + jsr get_pal_entry + cmp #$34 + jsr error_if_ne + + lda #1;) Tests passed + sta result + jmp report_final_result + diff --git a/blargg_ppu_tests_2005.09.15b/source/power_up_palette.asm b/blargg_ppu_tests_2005.09.15b/source/power_up_palette.asm new file mode 100644 index 0000000..1fe0307 --- /dev/null +++ b/blargg_ppu_tests_2005.09.15b/source/power_up_palette.asm @@ -0,0 +1,35 @@ +; Reports whether initial values in palette at power-up match those +; that my NES has. These values are probably unique to my NES. + + .include "prefix_ppu.a" + +reset: + lda #50 + jsr delay_msec + + jsr wait_vbl + lda #0 + sta $2000 + sta $2001 + + lda #2;) Palette differs from table + sta result + lda #$3f + sta $2006 + lda #$00 + sta $2006 + ldx #0 +: lda $2007 + cmp table,x + jsr error_if_ne + inx + cpx #$20 + bne - + + lda #1;) Palette matches + sta result + jmp report_final_result + +table: + .db $09,$01,$00,$01,$00,$02,$02,$0D,$08,$10,$08,$24,$00,$00,$04,$2C + .db $09,$01,$34,$03,$00,$04,$00,$14,$08,$3A,$00,$02,$00,$20,$2C,$08 diff --git a/blargg_ppu_tests_2005.09.15b/source/prefix_ppu.asm b/blargg_ppu_tests_2005.09.15b/source/prefix_ppu.asm new file mode 100644 index 0000000..a93e211 --- /dev/null +++ b/blargg_ppu_tests_2005.09.15b/source/prefix_ppu.asm @@ -0,0 +1,48 @@ +; Prefix included at the beginning of each test. Defines vectors +; and other things for custom devcart loader. +; +; Reset vector points to "reset". +; NMI points to "nmi" if defined, otherwise default_nmi. +; IRQ points to "irq" if defined, otherwise default_irq. + +default_nmi: + rti + +default_irq: + bit $4015 + rti + +; Delays for almost A milliseconds (A * 0.999009524 msec) +; Preserved: X, Y +delay_msec: + +; Delays for almost 'A / 10' milliseconds (A * 0.099453968 msec) +; Preserved: X, Y +delay_01_msec: + +; Variable delay. All calls include comment stating number of clocks +; used, including the setup code in the caller. +delay_yaNN: + +; Report value in low-mem variable 'result' as number of beeps and +; code printed to console, then jump to forever. +report_final_result: + +; Disable IRQ and NMI then loop endlessly. +forever: + + +; Report error if last result was non-zero +error_if_ne: + bne error_if_ + rts + +; Report error if last result was zero +error_if_eq: + beq error_if_ + rts + +; Report error +error_if_: + jmp report_final_result + diff --git a/blargg_ppu_tests_2005.09.15b/source/sprite_ram.asm b/blargg_ppu_tests_2005.09.15b/source/sprite_ram.asm new file mode 100644 index 0000000..b6685ee --- /dev/null +++ b/blargg_ppu_tests_2005.09.15b/source/sprite_ram.asm @@ -0,0 +1,131 @@ +; Tests sprite RAM access via $2003, $2004, and $4014 + + .include "prefix_ppu.a" + +sprites = $200 + +reset: + lda #50 + jsr delay_msec + + jsr wait_vbl + lda #0 + sta $2000 + sta $2001 + + lda #2;) Basic read/write doesn't work + sta result + lda #0 + sta $2003 + lda #$12 + sta $2004 + lda #0 + sta $2003 + lda $2004 + cmp #$12 + jsr error_if_ne + + lda #3;) Address should increment on $2004 write + sta result + lda #0 + sta $2003 + lda #$12 + sta $2004 + lda #$34 + sta $2004 + lda #1 + sta $2003 + lda $2004 + cmp #$34 + jsr error_if_ne + + lda #4;) Address should not increment on $2004 read + sta result + lda #0 + sta $2003 + lda #$12 + sta $2004 + lda #$34 + sta $2004 + lda #0 + sta $2003 + lda $2004 + lda $2004 + cmp #$34 + jsr error_if_eq + + lda #5;) Third sprite bytes should be masked with $e3 on read + sta result + lda #3 + sta $2003 + lda #$ff + sta $2004 + lda #3 + sta $2003 + lda $2004 + cmp #$e3 + jsr error_if_eq + + lda #6;) $4014 DMA copy doesn't work at all + sta result + ldx #0 ; set up data to copy from +: lda test_data,x + sta sprites,x + inx + cpx #4 + bne - + lda #0 ; dma copy + sta $2003 + lda #$02 + sta $4014 + ldx #0 ; set up data to copy from +: stx $2003 + lda $2004 + cmp test_data,x + jsr error_if_ne + inx + cpx #4 + bne - + + lda #7;) $4014 DMA copy should start at value in $2003 and wrap + sta result + ldx #0 ; set up data to copy from +: lda test_data,x + sta sprites,x + inx + cpx #4 + bne - + lda #1 ; dma copy + sta $2003 + lda #$02 + sta $4014 + ldx #1 ; set up data to copy from +: stx $2003 + lda $2004 + cmp sprites - 1,x + jsr error_if_ne + inx + cpx #5 + bne - + + lda #8;) $4014 DMA copy should leave value in $2003 intact + sta result + lda #1 ; dma copy + sta $2003 + lda #$02 + sta $4014 + lda #$ff + sta $2004 + lda #1 + sta $2003 + lda $2004 + cmp #$ff + jsr error_if_ne + + lda #1;) Tests passed + sta result + jmp report_final_result + +test_data: + .db $12,$82,$e3,$78 + \ No newline at end of file diff --git a/blargg_ppu_tests_2005.09.15b/source/vbl_clear_time.asm b/blargg_ppu_tests_2005.09.15b/source/vbl_clear_time.asm new file mode 100644 index 0000000..dc3b22e --- /dev/null +++ b/blargg_ppu_tests_2005.09.15b/source/vbl_clear_time.asm @@ -0,0 +1,48 @@ +; The VBL flag ($2002.7) is cleared by the PPU around 2270 CPU clocks +; after NMI occurs. + + .include "prefix_ppu.a" + +phase = 10 + +reset: + lda #100 + jsr delay_msec + + lda #1 + sta phase + + jsr wait_vbl + lda #$80 + sta $2000 + lda #$00 + sta $2001 + +wait: jmp wait + +nmi: ; 7 clocks for NMI vectoring + ldy #203 ; 2251 delay + lda #1 + jsr delay_ya1 + + dec phase ; 5 + bne + ; 3 + ; -1 + + lda $2002 ; read at 2268 + ldx #2;) VBL flag cleared too soon + stx result + and #$80 + jsr error_if_eq + jmp wait + +: bit <0 + lda $2002 ; read at 2272 + ldx #3;) VBL flag cleared too late + stx result + and #$80 + jsr error_if_ne + + lda #1;) Tests passed + sta result + jmp report_final_result diff --git a/blargg_ppu_tests_2005.09.15b/source/vram_access.asm b/blargg_ppu_tests_2005.09.15b/source/vram_access.asm new file mode 100644 index 0000000..a7c9a50 --- /dev/null +++ b/blargg_ppu_tests_2005.09.15b/source/vram_access.asm @@ -0,0 +1,143 @@ +; Tests PPU VRAM read/write and internal read buffer operation + + .include "prefix_ppu.a" + +; Set VRAM addr to $2f00 + A +; Preserved: A, X, Y +set_vram_pos: + pha + lda #$2f + sta $2006 + pla + sta $2006 + rts + +reset: + lda #50 + jsr delay_msec + + jsr wait_vbl + lda #0 + sta $2000 + sta $2001 + + lda #2;) VRAM reads should be delayed in a buffer + sta result + lda #$00 + jsr set_vram_pos + lda #$12 + sta $2007 + lda #$34 + sta $2007 + lda #$00 + jsr set_vram_pos + lda $2007 + lda $2007 + cmp #$34 + jsr error_if_eq + + lda #3;) Basic Write/read doesn't work + sta result + lda #$00 + jsr set_vram_pos + lda #$56 + sta $2007 + lda #$00 + jsr set_vram_pos + lda $2007 + lda $2007 + cmp #$56 + jsr error_if_ne + + lda #4;) Read buffer shouldn't be affected by VRAM write + sta result + lda #$00 + jsr set_vram_pos + lda #$78 + sta $2007 + lda #$00 + jsr set_vram_pos + lda #$00 + lda $2007 ; buffer now contains $78 + lda #$12 + sta $2007 ; shouldn't affect buffer + lda $2007 + cmp #$78 + jsr error_if_ne + + lda #5;) Read buffer shouldn't be affected by palette write + sta result + lda #$00 + jsr set_vram_pos + lda #$9a + sta $2007 + lda #$00 + jsr set_vram_pos + lda $2007 ; buffer now contains $9a + lda #$3f + sta $2006 + lda #$00 + sta $2006 + lda #$34 + sta $2007 ; shouldn't affect buffer + lda #$01 ; change back to non-palette addr to enable buffer + jsr set_vram_pos + lda $2007 + cmp #$9a + jsr error_if_ne + + lda #6;) Palette read should also read VRAM into read buffer + sta result + lda #$12 + jsr set_vram_pos + lda #$9a + sta $2007 + lda $2007 + lda #$3f + sta $2006 + lda #$12 + sta $2006 + lda $2007 ; fills buffer with VRAM hidden by palette + lda #$13 ; change back to non-palette addr to enable buffer + jsr set_vram_pos + lda $2007 + cmp #$9a + jsr error_if_ne + + lda #7;) "Shadow" VRAM read unaffected by palette mirroring + sta result + lda #$04 + jsr set_vram_pos + lda #$12 + sta $2007 + lda #$14 + jsr set_vram_pos + lda #$34 + sta $2007 + lda #$3f + sta $2006 + lda #$04 + sta $2006 + lda $2007 ; fills buffer with VRAM hidden by palette + lda #$13 ; change back to non-palette addr to enable buffer + jsr set_vram_pos + lda $2007 + cmp #$12 + jsr error_if_ne + lda #$34 + sta $2007 + lda #$3f + sta $2006 + lda #$14 + sta $2006 + lda $2007 ; fills buffer with VRAM hidden by palette + lda #$13 ; change back to non-palette addr to enable buffer + jsr set_vram_pos + lda $2007 + cmp #$34 + jsr error_if_ne + + lda #1;) Tests passed + sta result + jmp report_final_result + diff --git a/blargg_ppu_tests_2005.09.15b/sprite_ram.nes b/blargg_ppu_tests_2005.09.15b/sprite_ram.nes new file mode 100644 index 0000000000000000000000000000000000000000..dfbb613d77ee30d94234abef197caf7bce3d11e6 GIT binary patch literal 16400 zcmeI2L2DaF6vyAL<<$~|vzRz6C5JhLq67y-Ysx~GcuO1*WhsUDT((eD8FC0YiLmHU z5ahC=haN&9;0OYlKo0o;fjtdLP{p1?4{cb*!h}-X^&zcElvUr`wcIBC0yVs+Vc*QW z|GfF@C(9>&arw#z8vGM84ko|^m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>N zfC(@GCcp%k025#WOyJlPkPv|oUroeP>VG{cRvoEDr#*Q>TpHia#Mz1eYG-xD^O8!C zX@L)^{0J-J_nkra? zE~Ii1B@5JjMyF{;r5%AKqn8cf(far{=r7Ys@~U*9N2k02^b6gu>tnozihs!J`)YC` z3$=Ero@s@85!EJMdn73Do;#nBbFG&li{nx+(yA@;KB zgRF{^c2p%UivmX=??hSkU--&x+E_;^%J6Y=(AYNdP=7vdCi|q&j})hRAYb&fZIGY# z^nr=Ts^V$#dSE_;$HnxoTZz7_DLr{X2gy#^T5OZ_XdE^^G$&2`JcIeKLu?ALpM*a>U>Z*iT3-y}sluGAn%!tLP_JlE z?i#fY0KE$v+ZP${wSm*>w=r*{9$ zpN|yz#brqMDQrw@^?Z1P)+0LC8OEW3^|G%`_h4XOrS?L{!u%}H_pl$XLd>mJ%S8i_ zFP(9&r8%tX0*Cb`xQAa45FLDKUSIcK_QC6~c>M)WzQ(Wi&15%d%Co|s+!CKm{PUA? z(Qe{O3fyi7&CfB!XOs51lTS{3uWuP!4c|xI-JkZWnGx+*#r1L9zcTi(k30Bh2g3h$ za_s+A@*7|ROn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz286JP@WV*=;W JkJAs+zX7^Q2(bVF literal 0 HcmV?d00001 diff --git a/blargg_ppu_tests_2005.09.15b/vbl_clear_time.nes b/blargg_ppu_tests_2005.09.15b/vbl_clear_time.nes new file mode 100644 index 0000000000000000000000000000000000000000..41c2450a73ef66302e58f62b8b41cf77b95ea758 GIT binary patch literal 16400 zcmeI2L2DCH5XWb?HCak%_tLUR5ARSUl?nkpEV$GaDnwaCupeL#C8W?pPZD$qMTqp0 z;6b5yu?8w`p$G9^_Vmyi!=8!NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5 zU;<2l30!yrKGZ>o^;ir?&PLpeD!x)5v;86QBw9dxQf-2LivF>=H=l+_ zWn=y%JaC)m_I7W5D?DBf|G0QX(HHfM*iW(>NfsC7dX_G{ByhO?n|hKZ8T1q=qQ6ZW zw=flVaT;kBRy8bYoQ>u1fHKtc47UdU_nNW_{>_@&)UYfow!*`v_8va=mcLg*bytyU z_=5^bPQSHSrPT9r+W1tQuc09K?4K3}85oey=X+cEe2Sku=w9fJb#;IlO&2o&h2jG- zTf6}}ZjtGNOb1;fLqBVpvvj8G-dT=e6e!iAsc+iZ0!*hZcjrtnOcGE9PYzp)K?>EJ zVP&KTAotUB8}sDuuXLv^NiT*T-6ydz#d4?hnBq3oRa$|U z!SjA!gYH4YzEbXcrjC9)P4}@MMjrZ7sbrx5NQcMG#VCa-Rp8K%+;>fAfT-ZC*bUYG z*#NsSYBvUK{}8_>%i*qD^e4nhyds{)&Le!ADJT~)@&&Ej;ypA`kIR!IpN5{R^O^aA zvx0eRUkN ifC(@GCcp%k025#WOn?b60Vco%n81G};6&G>E74yH!hBx< literal 0 HcmV?d00001 diff --git a/blargg_ppu_tests_2005.09.15b/vram_access.nes b/blargg_ppu_tests_2005.09.15b/vram_access.nes new file mode 100644 index 0000000000000000000000000000000000000000..301518b6c17029c32da30a480a57a26197d71fbc GIT binary patch literal 16400 zcmeI2&ubG=5XWa@+zk@y5`VC05APrnMKNd(i!OB!6+&4=uz2#Y2Z;%I5KmE-oD6zN z@Zh2JR11Pn@Zf*2r-zjo_EbDb*-9wlp=>W&G_KBUTr2$tM40KzzBg~aGjHA}+n##$ z%JpL!?AlK@Ccp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz28 z6JP>N;J+szp$9@d9Eqvedo;?tw$yq@U3oyXHl8P9e&ih=ojKyVQPEE{--Ea=&-HZC z#E&n}qexUHc|A?YLN}2hF2u6ZGlZO>2f42dfn#+>oQ>taTykSi^oBSc%VHjF=TQlm zn$@EcZ4&LzMN7GeB$u%xyZ}D3bG6C2t4oxjV@8GgqKrS{3W~`&^taSNX_2Ja6%NxX ztCy88?#ZZ7@!jy@J>eM&YuzNH_QU?%N~7;htMxP5_K{j$3e;~U#;e4@MH5@Y{`U(U zzI@h8jK9cEwrOMcng>^E%OyOo{~@u+z=CSEnr&69DgIQ!45HxZ z*aVm>nPLv0R=*||>N8;C7MUr?OfXAiI4{`t0>w--$TgN#BdJ4=iIwsN*xpcW-m<~6 zseujzYRb7ArqC%{j;;cjcJ2()av8?qSSNqh5624URF$n-t%iCsB*d~BISHx~{T6+1^b-=!(RH_tUaT?$>!Z2(&urp9f4R#<6!*Pgx z;k<(piVsy|7BGrw3Odw2_CKX#o7j&UyiayM48hN=18OTx*HEW6zohF!Mg5{1(0K|A zldskX56B-sk;EjkAc>ngPs*e1?vX}X2=&G`;&9-r`0ZUpo+9Z}i{)LFEfD0Vco% xm;e)C0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>NfC(^xe?s6?JR6^ke*xc#1C6vt1d(jVW0ypgi^@HOFP8yHWr~WybK|fF2-aA>Z8rP@!X^{T?pc~a83?6 z_r7!Px!?PFm#k9Al}?A?nH`c50U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y z5g-CYfCvx)B0vO)01+Sp&piQfPxJ9BJoOUSPVwsre)C1X66LEWxd=7=H31GVwmsZ< z;EhkQTf=tfHjX0f{_ugF^4Ragj_=0WUh6y7^6cU8ZfN`#&c4A}$G;o99@A@&Eb%Uu zSM^#7L&s-@Ar@lMWwqpUZzWSI<+AWmCU57m@3S``Unu8_g^bN|#p0($_zJ!bu`9zC zY{DIEunDfu&n=tgC}z&pIU$C5ba5HA@}@5io3USG<0X=1T*HzC82S1`M6y*}=x|Tb_8>WP&%(iUsC+^MoqJ1@jgM z9z(zHiJP;!*To{%>Hk$2#)6jKetXM3xavN}rS_|yB@T>-wZMIXxDMS3$5UAw`w=J1 zcK0G1duo7hV>hQl)A2HMi)|01Ue?N1qv>8%jU}>N1gD?FP_@>*=tp!#0-<>!orP8{zmGfI5Ya?Pn49)tHI$(9&}OT67U*0vOpv zREyz<8{eC0FfK_MND0_nIixGyZnu&KzbB>a`4Duw(=O`5=wn9Z`?7K#FpJA1G?aYQ zp9rH&)FXR;jQv0Rz-QI~xf=xcuuhI11>1e8^rF?(ei9qc=G(n5)x59Pt@XO~Fy`ld zb+r!~_LXwCZfF?q1;H-%!&x0;rBX?w00Y-}A=6nf#gdgzIbez? za|Y^8Yk%QgSvJMm)4AK{=N1^c_CyWl_dCqEz)lQrTD3jK`*iGEcmbhp&TkvHMCZ3j zWSnp&k!#kv#bBrUQ}ssG{&B!=4{Y?-0C$^2`0>w}JszSz_rKY603tvHhyW2F0z`la r5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)BJghlzj$vBe)j$WLeRi$ literal 0 HcmV?d00001 diff --git a/branch_timing_tests/2.Backward_Branch.nes b/branch_timing_tests/2.Backward_Branch.nes new file mode 100644 index 0000000000000000000000000000000000000000..6e02064a513ed50ec841815c692ae6014110e760 GIT binary patch literal 16400 zcmeI2!D|~w6o;Q&M=Mn0Y#?s7A%`iYpg;~=$U(FsT_sYxqN-|SLvLjYMMw~ePsJ1= z5~$h`*pfmIrY9i~bOMGNdMJc~E*%o1ioG-xQq0>Y5g-CYfCvzQ|2zS3&-36MH_vkY48JqWe|(wGC-~ASE@I7aS%3qKZTPF( zUT}up^V_jsu%)p_{&vyy*zbNPbdznb^(||8Mc;oA3*Nxq*VyZX50ZD1M(v3$-o)uu zqh@00gskM_M4WU(E&0rw&n_(FbMS7qP|WAvVy{D?w3siKvPG6Jmp?4Sm+)1L-Sk_q z2KTYR8n_|9G-p|Zq%~3J#2Dt$#SPTTo1r*pCVx!^Bi>1}m^TP9Ondxl_S*X&Wy?8s zwVW+ov)N+dgF@*&0Cvw4Q_S^R=h^`q`M2Ds?2#v?)yUcQMYjLf;Yj>w}i@Sz+e$W+1kj!xo6Q zo4f4~wJ$0szDfdQ#hYJAjGD#A|+ z^txMrWuyb-5<1HPnD#tdv@e5>L&|ifOb0!o4C7)ty{K}!UO$>+7^a$HnY@?pfO`);<64GGS_?2%nXdWqqyo{;oXtM7|9vKG)rzHi0v1;enM$|Ytz;nV zNhy0FMBVPFi@Gp|m{Iw@tXu)i;xY*hB_H+A#!)8fk-a~H@XtQ*u{A*MMA1W>CkIcW zjlNWR(dueHiG|1gjoufk-&gCFd);~*^OL%U+6N8mO1V={>lhzK(GJ$bUL9klQpunI zh-NROm%IpU5p(7&=OxRDS?7Mw_X^Nri&s1ab zdc+wQSc&0HtF{BYPshHF7ZBRk>Y5g-CYfCvx)B0vO)!2g)Q&mL_4>Y5g-CYfCvx)B0vO)01+SpM1Tko z0U|&IhyW2F0z`la5CI}E^8~=Y!22)r*o#~{&u>NekI(a^AYVDhg|FtW3b25&?e4~& z(?8GdbQ`{3uoYkrx_jA}!~Wff@ulkIlz`TDP8?`!Ne-Fu;1A-(+A6mMdB zNiWARG+mbKVj?E3sY^a{mXgcM=@eW^X0qwj+w3*S!T4yyl8gE%a-sKjh62^Eo{i!@R?Os`_&D3w$17w9WpV#_g zw>GGQc&B#Q2;yY{wq-wQ1ULJ4$IXA%?YZ7S9@@KtvGwuYIoY%bVg1wn>B>NdXf!(B zXf*2KFA7@4uDmqV08&AXr2t~)5-XT*frdlMG^R`gEvO7*As#QNIZdlfb96nXQWNTL zV!>$x;@OVueHsTnt^`z}A|r{FmIu|ap76^GTufYRd*Lt)TSLFJP61s9oq-ejIUKjTtBpEin}_|X(u-D6>q#s;?r*ohQ2ma&ZnfR2_;G$xS6AzxVO=Q?Dsc_tea}0VQ#syYlc+yIZKAxvj-@*e34P$cJxG9>y4+8y&H3-}^*G&eyr5{SSOIg0d z)^@V!pX}gjg8)B$jb-~?^qGHWpVbCzAK%IjAD&gY*{d@KaNL_c;b*0I48VJIR^?`| z&KSUGZ}x>Y5g-EpP2gt-c7AgH E1%&md#{d8T literal 0 HcmV?d00001 diff --git a/branch_timing_tests/readme.txt b/branch_timing_tests/readme.txt new file mode 100644 index 0000000..1f05e8e --- /dev/null +++ b/branch_timing_tests/readme.txt @@ -0,0 +1,74 @@ +NES 6502 Branch Timing Test ROMs +-------------------------------- +These ROMs test timing of the branch instruction, including edge cases +which an emulator might get wrong. When run on a NES they all give a +passing result. Each ROM runs several tests and reports the result on +screen and by beeping a number of times. See below for the meaning of +failure codes for each test. THE TESTS MUST BE RUN (*AND* *PASS*) IN +ORDER, because some earlier ROMs test things that later ones assume will +work properly. + +Source code for each test is included, and most tests are clearly +divided into sections. Support code is also included, but it runs on a +custom devcart and assembler so it will require some effort to assemble. +Contact me if you'd like assistance porting them to your setup. + + +Branch Timing Summary +--------------------- +An untaken branch takes 2 clocks. A taken branch takes 3 clocks. A taken +branch that crosses a page takes 4 clocks. Page crossing occurs when the +high byte of the branch target address is different than the high byte +of address of the next instruction: + +branch_target: + ... + bne branch_target +next_instruction: + nop + ... +branch_target: + + +1.Branch_Basics +--------------- +Tests branch timing basics and PPU NMI timing, which is needed for the +tests + +2) NMI period is too short +3) NMI period is too too long +4) Branch not taken is too long +5) Branch not taken is too short +6) Branch taken is too long +7) Branch taken is too short + + +2.Backward_Branch +----------------- +Tests backward (negative) branch timing. + +2) Branch from $E4FD to $E4FC is too long +3) Branch from $E4FD to $E4FC is too short +4) Branch from $E5FE to $E5FD is too long +5) Branch from $E5FE to $E5FD is too short +6) Branch from $E700 to $E6FF is too long +7) Branch from $E700 to $E6FF is too short +8) Branch from $E801 to $E800 is too long +9) Branch from $E801 to $E800 is too short + + +3.Forward_Branch +---------------- +Tests forward (positive) branch timing. + +2) Branch from $E5FC to $E5FF is too long +3) Branch from $E5FC to $E5FF is too short +4) Branch from $E6FD to $E700 is too long +5) Branch from $E6FD to $E700 is too short +6) Branch from $E7FE to $E801 is too long +7) Branch from $E7FE to $E801 is too short +8) Branch from $E8FF to $E902 is too long +9) Branch from $E8FF to $E902 is too short + +-- +Shay Green diff --git a/branch_timing_tests/source/1.Branch_Basics.a b/branch_timing_tests/source/1.Branch_Basics.a new file mode 100644 index 0000000..dc0a778 --- /dev/null +++ b/branch_timing_tests/source/1.Branch_Basics.a @@ -0,0 +1,78 @@ +; Tests branch timing basics + + .include "prefix.a" + +test_name: + .db "BRANCH TIMING BASICS",0 + .code + +delay7 = $20 + +delay1: + jsr delay2 + jsr delay2 +delay2: + jsr delay3 + jsr delay3 +delay3: + jsr delay4 + jsr delay4 +delay4: + jsr delay5 + jsr delay5 +delay5: + jsr delay6 + jsr delay6 +delay6: + jsr delay7 + jsr delay7 + jmp delay7 + .code + +reset: + jsr init_tests + + lda #$EA ; nop + sta delay7 + lda #$60 ; rts + sta delay7 + 1 + lda #2;) NMI period is too short/3)too long + jsr begin_test + jsr delay7 + jsr delay7 + jsr delay5 + jsr delay4 + jsr delay2 + jsr delay2 + jsr delay1 + jsr delay1 + jsr end_test + + lda #$B0 ; bcs + sta delay7 + lda #$60 ; rts + sta delay7 + 2 + lda #4;) Branch not taken is too long/5)too short + jsr begin_test + clc + jsr delay7 + jsr delay7 + jsr delay5 + jsr delay4 + jsr delay2 + jsr delay2 + jsr delay1 + jsr delay1 + jsr end_test + + lda #6;) Branch taken is too long/7)too short + jsr begin_test + ldy #24 + ldx #39 +: dex + bne - + dey + bne - + jsr end_test + + jmp tests_passed diff --git a/branch_timing_tests/source/2.Backward_Branch.a b/branch_timing_tests/source/2.Backward_Branch.a new file mode 100644 index 0000000..3b84995 --- /dev/null +++ b/branch_timing_tests/source/2.Backward_Branch.a @@ -0,0 +1,76 @@ +; Tests backward (negative) branch timing. +; "Branch from $XX to $YY" means that the low byte of the +; address of the branch opcode is $XX and the low byte of +; the address of the branch destination is $YY. + + .include "prefix.a" + +test_name: + .db "BACKWARD BRANCH TIMING",0 + .code + +reset: + jsr init_tests + + lda #2;) Branch from $E4FD to $E4FC is too long/3)short + jsr begin_test + ldy #23 + ldx #240 +: jsr loop_fc + dey + bne - + jsr end_test + + lda #4;) Branch from $E5FE to $E5FD is too long/5)short + jsr begin_test + ldy #20 + ldx #41 +: jsr loop_fd + dey + bne - + jsr end_test + + lda #6;) Branch from $E700 to $E6FF is too long/7)short + jsr begin_test + ldy #20 + ldx #41 +: jsr loop_ff + dey + bne - + jsr end_test + + lda #8;) Branch from $E801 to $E800 is too long/9)short + jsr begin_test + ldy #23 + ldx #240 +: jsr loop_00 + dey + bne - + jsr end_test + + jmp tests_passed + + .org $E4FC +loop_fc: +: dex + bne - + rts + + .org $E5FD +loop_fd: +: dex + bne - + rts + + .org $E6FF +loop_ff: +: dex + bne - + rts + + .org $E800 +loop_00: +: dex + bne - + rts + diff --git a/branch_timing_tests/source/3.Forward_Branch.a b/branch_timing_tests/source/3.Forward_Branch.a new file mode 100644 index 0000000..e04cf86 --- /dev/null +++ b/branch_timing_tests/source/3.Forward_Branch.a @@ -0,0 +1,82 @@ +; Tests forward (positive) branch timing. +; "Branch from $XX to $YY" means that the low byte of the +; address of the branch opcode is $XX and the low byte of +; the address of the branch destination is $YY. + + .include "prefix.a" + +test_name: + .db "FORWARD BRANCH TIMING",0 + .code + +reset: + jsr init_tests + + lda #2;) Branch from $E5FC to $E5FF is too long/3)short + jsr begin_test + ldy #15 + ldx #97 +: jsr loop_fc + dey + bne - + jsr end_test + + lda #4;) Branch from $E6FD to $E700 is too long/5)short + jsr begin_test + ldy #13 + ldx #203 +: jsr loop_fd + dey + bne - + nop + nop + jsr end_test + + lda #6;) Branch from $E7FE to $E801 is too long/7)short + jsr begin_test + ldy #15 + ldx #97 +: jsr loop_fe + dey + bne - + jsr end_test + + lda #8;) Branch from $E8FF to $E902 is too long/9)short + jsr begin_test + ldy #15 + ldx #97 +: jsr loop_ff + dey + bne - + jsr end_test + + jmp tests_passed + + .org $E5FC +loop_fc: + bne + + rts +: dex + jmp loop_fc + + .org $E6FD +loop_fd: + bne + + rts +: dex + jmp loop_fd + + .org $E7FE +loop_fe: + bne + + rts +: dex + jmp loop_fe + + .org $E8FF +loop_ff: + bne + + rts +: dex + jmp loop_ff + diff --git a/branch_timing_tests/source/console.a b/branch_timing_tests/source/console.a new file mode 100644 index 0000000..946b07f --- /dev/null +++ b/branch_timing_tests/source/console.a @@ -0,0 +1,107 @@ + +console_pos = $7f2 +console_pos_h = $7f3 + +; Print char A to console +; Preserved: A, X, Y +print_char: + jsr wait_vbl ; wait for safe access +print_char_no_wait: + pha + lda console_pos_h + sta $2006 + inc console_pos + lda console_pos + sta $2006 + lda #0 ; restore scroll + sta $2005 + sta $2005 + pla + sta $2007 + rts + .code + +; Go to next line +; Preserved: A, X, Y +console_newline: + pha + lda console_pos + and #$e0 + clc + adc #$21 + sta console_pos + lda console_pos_h + adc #0 + sta console_pos_h + pla + rts + .code + +; Initialize console +init_console: + lda #$81 + sta console_pos + lda #$20 + sta console_pos_h + + jsr wait_vbl ; init ppu + lda #0 + sta $2000 + sta $2001 + + lda #$3f ; load palette + jsr set_vpage + lda #15 ; bg + ldx #48 ; fg + ldy #8 +pal: sta $2007 + stx $2007 + stx $2007 + stx $2007 + dey + bne pal + + lda #$02 ; load tiles + jsr set_vpage + lda #chr_data.lsb + sta <$f0 + lda #chr_data.msb + sta <$f1 + ldy #0 + lda #59 ; 59 chars in data + sta <$f2 +chr_loop: + ldx #8 + lda #0 +: sta $2007 + dex + bne - + + ldx #8 +: lda ($f0),y + iny + sta $2007 + dex + bne - + + tya + bne + + inc <$f1 +: dec <$f2 + bne chr_loop + + lda #32 + jsr fill_nametable + + jsr wait_vbl ; enable ppu + lda #0 + sta $2005 + sta $2005 + lda #$0a + sta $2001 + rts + .code + +chr_data: + .incbin "chr.bin" + diff --git a/branch_timing_tests/source/debug.a b/branch_timing_tests/source/debug.a new file mode 100644 index 0000000..fff98dc --- /dev/null +++ b/branch_timing_tests/source/debug.a @@ -0,0 +1,154 @@ + +; Beep A times. Made to require minimal features from APU. +debug_beeps: +beep_loop: + pha + + lda #1 ; set up square 1 + sta $4015 + sta $4003 + sta $4001 + sta $4002 + + lda #$0f ; fade volume +: pha + eor #$30 + sta $4000 + lda #8 + jsr delay_msec + pla + clc + adc #-1 + bpl - + + lda #0 + sta $4015 ; silence square for a bit + lda #120 + jsr delay_msec + + pla + clc + adc #-1 + bne beep_loop + rts + .code + +; Print indicated register to console as $hh +; Preserved: A, X, Y, P +print_a: + php + jsr debug_byte + plp + rts + .code + +print_x: + php + pha + txa + jsr debug_byte + pla + plp + rts + .code + +print_y: + php + pha + tya + jsr debug_byte + pla + plp + rts + .code + +print_s: + php + pha + txa + pha + tsx + txa + jsr debug_byte + pla + tax + pla + plp + rts + .code + +print_p: + php + pha + php + pla + jsr debug_byte + pla + plp + rts + .code + +print_ay: + php + pha + lda #36 + jsr debug_char + pla + pha + jsr hex_byte + tya + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + plp + rts + .code + +print_newline: + jmp debug_newline + .code + +; Print address YA to console as $hhhh +; Preserved: A, X, Y +debug_addr: + pha + lda #36 ; '$' + jsr debug_char + tya + jsr hex_byte + jmp debug_byte_impl + .code + +; Print byte A to console as $hh +; Preserved: A, X, Y +debug_byte: + pha + lda #36 ; '$' + jsr debug_char +debug_byte_impl: + pla + pha + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + rts + +hex_byte: + pha + lsr a + lsr a + lsr a + lsr a + jsr nybble + pla + and #$0f +nybble: + cmp #10 + bcc not_letter + adc #6 ; relies on carry being set +not_letter: + adc #$30 + jmp debug_char_no_wait + .code diff --git a/branch_timing_tests/source/delays.a b/branch_timing_tests/source/delays.a new file mode 100644 index 0000000..72d62c8 --- /dev/null +++ b/branch_timing_tests/source/delays.a @@ -0,0 +1,118 @@ +; to do: delay loops that take only a single count + +; Delay for almost A milliseconds (A * 0.999009524 msec) +; Preserved: X, Y +delay_msec: + pha ; 3 + lda #253 ; 2 + sec ; 2 +delay_msec_: + nop ; 2 + adc #-2 ; 2 + bne delay_msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_msec ; 3 + rts + .code + +; Delay for almost 'A / 10' milliseconds (A * 0.099453968 msec) +; Preserved: X, Y +delay_01msec: + pha ; 3 + lda #18 ; 2 + sec ; 2 +delay_01msec_: + nop ; 2 + nop ; 2 + adc #-2 ; 2 + bne delay_01msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_01msec ; 3 + rts + .code + +; Delay for almost A*10 milliseconds +; Preserved: X, Y +delay_10msec: + pha + lda #10 + jsr delay_msec + pla + clc + adc #-1 + bne delay_10msec + rts + .code + +; Delay n clocks +; Preserved: P, A, X, Y +delay_32: nop +delay_30: nop +delay_28: nop +delay_26: nop +delay_24: nop +delay_22: nop +delay_20: nop +delay_18: nop +delay_16: nop +delay_14: nop +delay_12: rts + +delay_33: nop +delay_31: nop +delay_29: nop +delay_27: nop +delay_25: nop +delay_23: nop +delay_21: nop +delay_19: nop +delay_17: beq + ; 5 +: bne + +: rts ; 6 + .code + +; Delay (5 * A + 6) * Y + 7 + n clocks +delay_ya11: + .db $a2 ; 1 ldx #imm +delay_ya10: + .db $a2 ; 1 ldx #imm +delay_ya9: + .db $a2 ; 1 ldx #imm +delay_ya8: + .db $a2 ; 1 ldx #imm +delay_ya7: + .db $a2 ; 1 ldx #imm +delay_ya6: + .db $a2 ; 1 ldx #imm +delay_ya5: + .db $a2 ; 1 ldx #imm +delay_ya4: + .db $a2 ; 1 ldx #imm +delay_ya3: + .db $a2 ; 1 ldx #imm +delay_ya2: + .db $a2 ; 1 ldx #imm +delay_ya1: + .db $a6 ; 1 ldx zp +delay_ya0: + nop ; 2 +delay_ya: + ; 2 lda # + ; 2 ldy # + ; 6 jsr + tax ; *2 +delay_yax: + dex ; **2 + bne delay_yax ; **3 + ; *-1 + dey ; *2 + bne delay_ya ; *3 + ; -1 + rts ; 6 + .code diff --git a/branch_timing_tests/source/ppu_util.a b/branch_timing_tests/source/ppu_util.a new file mode 100644 index 0000000..f004227 --- /dev/null +++ b/branch_timing_tests/source/ppu_util.a @@ -0,0 +1,123 @@ + +; Clear VBL flag then wait for it to be set +; Preserved: A, X, Y +wait_vbl: + bit $2002 +: bit $2002 + bpl - + rts + .code + +; Set VRAM address to A * $100 +; Preserved: X, Y +set_vpage: + bit $2002 + sta $2006 + lda #0 + sta $2006 + rts + .code + +; Set VRAM address to A * $100 + X +; Preserved: A, X, Y +set_vaddr: + bit $2002 + sta $2006 + stx $2006 + rts + .code + +; Set X and Y scroll +; Preserved: A, X, Y +set_vscroll: + bit $2002 + stx $2005 + sty $2005 + rts + .code + +; Turn off NMI and disable BG and sprites +; Preserved: A, X, Y +disable_ppu: + pha + lda #0 + sta $2000 + sta $2001 + bit $2002 + sta $2006 + sta $2006 + pla + rts + .code + +; Set sprite memory to $ff +; Preserved: Y +clear_sprites: + lda #$ff + ldx #0 +: sta $2004 + dex + bne - + rts + .code + +; Clear/fill nametable with 0/A and clear attributes to 0 +clear_nametable: + lda #0 +fill_nametable: + pha + lda #$20 + jsr set_vpage + pla + ldx #240 +: sta $2007 + sta $2007 + sta $2007 + sta $2007 + dex + bne - + lda #0 + ldx #64 +: sta $2007 + dex + bne - + rts + .code + +; Clear/fill VRAM with 0/A +clear_vram: + lda #0 +fill_vram: + ldx #0 + ldy #$24 + bne fill_vram_ + +; Clear/fill CHR with 0/A +fill_chr1: + ldx #$10 + ldy #$10 + bne fill_vram_ + +fill_chr0: + ldx #0 + ldy #$10 + bne fill_vram_ + +clear_chr: + lda #0 +fill_chr: + ldx #0 + ldy #$20 +; Fill VRAM Y*$100 bytes of VRAM with A, starting at X*$100 +fill_vram_: + bit $2002 + stx $2006 + ldx #0 + stx $2006 +: sta $2007 + dex + bne - + dey + bne - + rts + .code diff --git a/branch_timing_tests/source/prefix.a b/branch_timing_tests/source/prefix.a new file mode 100644 index 0000000..724fdd5 --- /dev/null +++ b/branch_timing_tests/source/prefix.a @@ -0,0 +1,40 @@ + .include "validation.a" + +nmi_count = 10 + +nmi: inc fDDiUGC&5%02v?yWPl8i0Wv@a$N(8217v^< zkO4A42FL&zAOmE843GgbKnBPF86X2>fDDiUGC&5%02v?yWPl8i0Wv@a$N(8217v^< zkO4A42FL&zAOmE843GgbKnBPF86X2>fDHWS3~V!~o8M&KsyWA$s;-${_KOX3#yDZt z4JFMy>u>B1s~yRi4P=B%Q^xMFk7%vksI1M}3oyHr7I;#xZBG?TYmgAav zj3>UepE&P59K8H#8JCY_TwXtrv6E+fb3fzCX%mc)$&B!w(9sp+*t#4OyO0aRh2mIM zjvZLPJ7t)slhK;#<2QY0|E4nS%IViaM-$7meC$ACF$L4Q-C~wzcJajT?k6sQ>2+51 zYiBo_>E|JT`m~Ur?&VK@Z)5-beArd$y1jepHZ(dfHI6NLE1;L4;=_aR$4ZB0{uxh3 zTA6BB{_%-!vyBHvjQv&Lc8c!T*pI6wWAmHov)H(ve7@?}ZiuTtEpYvJTUgk4tG6&h zW6DNayM%@1tLby$QeeqD<(pEI^P8nWqf-oHU2`(xngTqtuHDd9py6XTs_fnBolxab z`t@`@)bQx_uwI&23KrB4C$>rxxBtaHu3}2w4s4YIqTQ_~Z&bDGI5(}^eR{pG(TNA) zT204;(Py@eh;iKLF?#hged^~IpSTz)_(ytEJ*nfDmlPvX>>d5c=q>h)zGd_jkB|P$ zI9`m5vb&Z0M I%`%79lwo?w$Z`e$fIPt%05@u%oskRx)DyZH>)Njr)tIi$}!Vp z^q0I#y+x%FX1}Q#;o=D+gaKH`ImLbqGy0R=8+@l7cS5oG2voXWjeLw7)p^V}Ht@<{ zMuok%5j)=qEIsyP?QEd3gL+JuYUjNP)06K@*$IEWB<)q5aFO#=7h2qY=E-G`_vWB|QuW|be5J;|y@_-1ilN1U(iR@Z@RVO?%BC@}IB2rMlgr?}8`&*< zX7S|BK{-V%5|@ z^ddIQ^+BO)rD4FL=hfGs@)*yMa3U^jsm6M0$!BXN&+U%n{mn{5GoRa+h&`HSerLaf zRjO(1`Tl{P4{B-l&IaD3u?$^XmEB~x4zMR)EJDu;;7C21C`SJfZ8Y_vzC;2~n>p^J za!#rK{MhX5&Ar6Vd}(Cl8AyKp88$XP zJCubNz9nnC@9dAx4b6)_r{?qxWzV^Nyheo#kO4A42FL&zAOmE843GgbKnBPF86X2> zfDDiUGC&5%02v?y|6c}_`cF1buN{nxO0VH#FD4tz! zf#gC^iTmsvNJitCatrq)*|eHIJ}w#8t)`7_$(D`xS5=VA{=Sx7T+D%F&bAkP!7Sd- zA?}m!_2{4O_90bNg*%qy+ZH=_iE@Kt++oi4MO9ESzr%Ry>gB8Y1(1woY`bOKAc>3T zKah;4EXzv8G2Y=$*|zQS4oJ2vt7%y+I84iJTW~?Q?%Amed&JpzI~ye9T)%?(U7qrx zPV^^fm)9C=WsG;Ji?V=^mX`&vAGTVnJfCF!QR^@Fuw5*+S z8K18t_Lr@4mX8YtF}hsNfh6y5TFy9UR8_Owk0b!b=kS2Lbn=$n{AGNX@omQVJvyJF zY4?*fZCT>MW4uEij73c11bEO|U0prEwFkIBY)i(uT5L<={&w)e;|X>s)`uS{$+ZXk zT=4l0vsN~^gKd{;4sRR9^|}PS+x-lVA7GZR3)_OYI{y6xN$kz?_3hF1gYm*s6W{D6 zjynwD*HKYIASsRmo)^h!{F*AtG)U@y{}t{9KY=cJoeCKs17v^fDDiUGVs4`;NP0O_BsFn literal 0 HcmV?d00001 diff --git a/cpu_dummy_reads/source/common/ascii.chr b/cpu_dummy_reads/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..0687d4ecdfe9d8b2cec319f0a6c8296b181c4dd3 GIT binary patch literal 2048 zcmeIyy^7p05C`z#3Rhye(uLV)P!$Xj%T=lJ5F!K@i8;0kE`-Z_j692qph{f1EFpvx z;i_W^DZ&;;m;Xqby}f;dKy-WjtPe|?k!_-v<*AmJtwhp(>E*cp^?y49Ef>OHbsWbW zkVs=1@guR_SkpL+uf7{ptA{rvcCWhr=?QBG0CA!?Sa~CK8Ek>1MC6khV7``?vSu;eAhH+jHPEi7u?n^dpfttJXBZk=U6r zCd4EzerdR0G}bQxbuk63uQiF&m!H$!og>kOFgI$#dPT&^v0nb$+6FaJg@{ECJ4aqc za#ijxy3ll*H0Cdw;r7F=-H_OiA*2vU#OC=&q8YsRgTeUXF@_N0k;LTv;(el*`dat2 zvHm^`o0GU3%LNh*r@zJg)pdh(B7b6t`(OKr@l~74jHBf;Q#howQ&?w z#c_VK92X+V@v+?gHGVqD{k)#&f_Hqr;)28E^Az*6=s)w|`fILNcPSmPpHM}s<9c-% z1`eIXwCegToNO6M-v^PeiBbW2tMj!;G%1JpMemO> z;(SH4M;|Bd&nk?L(UHjQi!c3br}f175s5I~;Q_Cfd1IYF;$6nujPWPSr)XP0Nn7vp z!DD=p2czVhSfa 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: X, Y +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + + +; Delays n clocks, from 2 to 16777215 +; Preserved: X, Y +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + .if (n) < 14 .and (n) <> 12 + delay_inline (n) + .elseif (n) < 27 + delay_unrolled (n) + .elseif <(n) = 0 + delay_256 (n) + .else + lda #<((n)-27) + jsr delay_a_25_clocks + delay_256 ((n)-27) + .endif +.endmacro + + +; Delays A+25 clocks (including JSR) +; Preserved: X, Y +.align 64 +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256+16 clocks (including JSR) +; Preserved: X, Y +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_clocks_: + pha + lda #256-19-22-16 + bne @first ; always branches +: pha + lda #256-19-22 +@first: jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536+16 clocks (including JSR) +; Preserved: X, Y +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_clocks_: + pha + lda #256-19-22-16 + bne @first +: pha + lda #256-19-22 +@first: jsr delay_a_25_clocks + lda #255 + jsr delay_256a_clocks_ + pla + clc + adc #-1 + bne :- + rts + +.macro delay_inline n + .if n = 7 .or n >= 9 + pha + pla + delay_inline (n-7) + .elseif n >= 3 .and n & 1 + lda <0 + delay_inline (n-3) + .elseif n >= 2 + nop + delay_inline (n-2) + .elseif n > 0 + .error "delay_short internal error" + .endif +.endmacro + +.macro delay_unrolled n + .if n & 1 + lda <0 + jsr delay_unrolled_-((n-15)/2) + .else + jsr delay_unrolled_-((n-12)/2) + .endif +.endmacro + + .res 7,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_256 n + .if >n + lda #>n + jsr delay_256a_clocks_ + .endif + .if ^n + lda #^n + jsr delay_65536a_clocks_ + .endif +.endmacro + diff --git a/cpu_dummy_reads/source/common/macros.inc b/cpu_dummy_reads/source/common/macros.inc new file mode 100644 index 0000000..ea54ba6 --- /dev/null +++ b/cpu_dummy_reads/source/common/macros.inc @@ -0,0 +1,65 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name +.macro zp_res name,size + seg_data "ZEROPAGE",{name: .res size} +.endmacro + +.macro bss_res name,size + seg_data "BSS",{name: .res size} +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "STRINGS",{Addr: data} +.endmacro + +; If name isn't yet defined, defines it with value +.macro SET_DEFAULT name,value + .ifndef name + name=value + .endif +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro diff --git a/cpu_dummy_reads/source/common/nes.inc b/cpu_dummy_reads/source/common/nes.inc new file mode 100644 index 0000000..9959b3b --- /dev/null +++ b/cpu_dummy_reads/source/common/nes.inc @@ -0,0 +1,34 @@ +; NES I/O locations and masks + +; Clocks per second (NTSC) +CLOCK_RATE = 1789773 + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 diff --git a/cpu_dummy_reads/source/common/print.s b/cpu_dummy_reads/source/common/print.s new file mode 100644 index 0000000..60d1f8e --- /dev/null +++ b/cpu_dummy_reads/source/common/print.s @@ -0,0 +1,194 @@ +; Prints values in various ways to output, including numbers and strings. + +newline = 10 + +; Prints indicated register to console as two hex chars and space +; Preserved: A, X, Y, P +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: X, Y +print_hex: + ; Update checksum + pha + jsr update_crc + pla + + ; Print high nibble + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + ; Print low nibble + and #$0F +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS it's a newline. +; Preserved: X, Y +print_char: + cmp #newline + beq :+ + pha + jsr update_crc + pla +: jmp print_char_ + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str + jsr_with_addr print_str_addr,{.byte str,0} +.endmacro + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: Y +print_dec: + ; Hundreds + cmp #100 + blt @tens + ldx #'0' +: sbc #100 + inx + cmp #100 + bge :- + jsr @digit + + ; Tens +@tens: cmp #10 + blt @ones + ldx #'0' +: sbc #10 + inx + cmp #10 + bge :- + jsr @digit + + ; Ones +@ones: ora #'0' + jmp print_char + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y +.macro print_cc cond,yes,no + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla +.endmacro diff --git a/cpu_dummy_reads/source/common/serial.s b/cpu_dummy_reads/source/common/serial.s new file mode 100644 index 0000000..26b2897 --- /dev/null +++ b/cpu_dummy_reads/source/common/serial.s @@ -0,0 +1,41 @@ +; Serial output at 57600 bits/sec on controller port 2 +; +; Uses stack and register A only, and doesn't mind page crossing +; (uses subroutines instead of loops). + +; Initializes serial. If this isn't done, first byte sent to +; PC might be corrupt. +; Preserved: X, Y +serial_init: + sec + lda #$FF + bne serial_write_ ; always branches + + +; Writes byte A to serial +; Preserved: X, Y +serial_write: + clc +serial_write_: + jsr @bit ; start + nop ; TODO: why the extra delay? + jsr @first ; bit 0 + jsr @bit ; bit 1 + jsr @bit ; bit 2 + jsr @bit ; bit 3 + jsr @bit ; bit 4 + jsr @bit ; bit 5 + jsr @bit ; bit 6 + jsr @bit ; bit 7 + sec ; 2 stop bit +@first: nop ; 4 + nop +@bit: ; 6 jsr + pha ; 3 + rol a ; 2 + and #1 ; 2 + sta JOY1 ; 4 + pla ; 4 + ror a ; 2 + nop ; 2 + rts ; 6 diff --git a/cpu_dummy_reads/source/common/shell.inc b/cpu_dummy_reads/source/common/shell.inc new file mode 100644 index 0000000..61fe108 --- /dev/null +++ b/cpu_dummy_reads/source/common/shell.inc @@ -0,0 +1,434 @@ +; Program shell with text console. Included before user code. + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INC + .error "File included twice" + .end +.endif +SHELL_INC = 1 + + +; ******************************************* Prefix + +.segment "CODE2" + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E + +; RAM that isn't cleared by init routine +nv_ram = $7F0 + +; Macros and constants +.include "macros.inc" +.include "nes.inc" + +; Interrupt handlers are wrapped with these +.define BEGIN_NMI nmi: +.define END_NMI + +.define BEGIN_IRQ irq: +.define END_IRQ + +; Set undefined flags to 0, allowing simpler .if statements +SET_DEFAULT BUILD_NSF,0 +SET_DEFAULT BUILD_MULTI,0 +SET_DEFAULT BUILD_DEVCART,0 + +; Number of clocks devcart takes to jump to user reset +SET_DEFAULT DEVCART_DELAY,0 + + +; ******************************************* Libraries + +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +.if !BUILD_MULTI + .include "serial.s" +.endif + +; Sets up environment, calls main, then exits with code 0 +run_main: + ; Initialize libraries + jsr init_crc + + ; Establish consistent environment before + ; running main + jsr wait_vbl + lda #PPUMASK_BG0 + sta PPUMASK + delay 2370+24 + lda #$34 + pha + lda #0 + sta SNDMODE + tax + tay + clc + clv + plp + + jsr main + + ; Default to silent exit if main returns + lda #0 + ; FALL THROUGH + +; Exits program and prints result code if non-zero +exit: + ; Reset stack + ldx #$FF + txs + + ; Disable interrupts + sei + pha + jsr nmi_off + pla + + jmp exit_ + +; Reports internal error and exits program +internal_error: + print_str "Internal error" + lda #1 + jmp exit + + +.if BUILD_NSF || BUILD_MULTI || BUILD_DEVCART + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.else + .include "console.s" +.endif + + +; ******************************************* Single Test + +.if !BUILD_MULTI + +print_char_: + jsr console_print + jmp serial_write + +; Reset handler +.ifndef CUSTOM_RESET + reset = std_reset +.endif + +.macro init_nes + sei + cld + ldx #$FF + txs + + .if !BUILD_NSF + ; Init PPU + lda #0 + sta PPUCTRL + sta PPUMASK + .endif + + ; Clear RAM + lda #0 + ldx #7 ; last page + ldy #@ascii +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>@ascii_end + bne @page + +.pushseg +.rodata +@ascii: + .incbin "ascii.chr" +@ascii_end: +.popseg +.endif + + jsr console_init + jsr serial_init + jmp run_main + + +; Exit handler +exit_: + ; 0: "" + cmp #1 + jlt exit2 + + ; 1: "Failed" + bne :+ + print_str {newline,"Failed"} + jmp exit2 + + ; n: "Error n" +: pha + print_str {newline,"Error "} + jsr print_dec + pla + +exit2: +.if !BUILD_DEVCART + ; Be sure output is visible + pha + print_str {newline,newline,newline} + jsr console_show + pla + + ; Report audibly as well + jsr beep_bits +.else + ; Tell host to stop capturing serial + lda #$1A + jsr serial_write + delay_msec 400 +.endif + + ; Clear nv_ram + lda #0 + ldx #filename + sta addr+1 + jsr print_str_addr + jsr print_newline + rts + +.pushseg +.segment "STRINGS" +; Filename terminated with zero byte, or just zero byte +; if filename isn't available. +filename: + .incbin "ram:rom.nes" + .byte 0 +.popseg +.else +print_filename: + rts + +filename: + .byte 0 +.endif + + +; User code goes in main code segment +.segment "CODE" + nop diff --git a/cpu_dummy_reads/source/common/testing.s b/cpu_dummy_reads/source/common/testing.s new file mode 100644 index 0000000..8bb0741 --- /dev/null +++ b/cpu_dummy_reads/source/common/testing.s @@ -0,0 +1,162 @@ +; Utilities for writing test ROMs + +zp_res test_code,1 ; code of current test +zp_res test_name,2 ; address of name of current test, or 0 of none + + +; Reports that all tests passed +tests_passed: +.if !BUILD_MULTI + jsr print_filename + print_str "Passed" +.endif + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + lda test_code + + ; Treat 0 as 1, in case it wasn't ever set + bne :+ + lda #1 + sta test_code +: + ; If code >= 2, print name + cmp #2 + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: +.if !BUILD_MULTI + jsr print_filename +.endif + ; End program + lda test_code + jmp exit + + +; Sets current test code and optional name. Also resets +; checksum. +.macro set_test code,name + pha + lda #code + jsr set_test_ + .local Addr + lda #Addr + sta n + sta addr+1 +.endmacro + +begin: jsr wait_vbl + delay 29800 + rts + +main: set_test 2,"$2002 must be mirrored every 8 bytes to $3FFA" + jsr begin + lda $3FFA + jpl test_failed + lda $3FFA + jmi test_failed + + set_test 3,"LDA abs,x" + jsr begin + ldx #$22 + lda $2000,x ; no dummy read + jpl test_failed + lda $2002 + jmi test_failed + + jsr begin + ldx #$22 + lda $20E0,x ; dummy read from $2002 + jmi test_failed + lda $2002 + jmi test_failed + + jsr begin + ldx #$22 + lda $20E2,x ; dummy read from $2004 + lda $2002 + jpl test_failed + + jsr begin + ldx #$22 + lda $3FE0,x ; dummy read from $3F02 + lda $2002 + jmi test_failed + + set_test 4,"STA abs,x" + jsr begin + sta $2002 ; no dummy read + lda $2002 + jpl test_failed + + jsr begin + ldx #$22 + sta $20E0,x ; dummy read from $2002 + jmi test_failed + lda $2002 + jmi test_failed + + jsr begin + ldx #$22 + sta $20E2,x ; dummy read from $2004 + lda $2002 + jpl test_failed + + jsr begin + ldx #$22 + sta $3FE0,x ; dummy read from $3F02 + lda $2002 + jmi test_failed + + set_test 5,"LDA (z),y" + jsr begin + ldy #$22 + set_addr $2000 + lda (addr),y ; no dummy read + jpl test_failed + lda $2002 + jmi test_failed + + jsr begin + ldy #$22 + set_addr $20E0 + lda (addr),y ; dummy read from $2002 + jmi test_failed + lda $2002 + jmi test_failed + + jsr begin + ldy #$22 + set_addr $20E2 + lda (addr),y ; dummy read from $2004 + lda $2002 + jpl test_failed + + jsr begin + ldy #$22 + set_addr $3FE0 + lda (addr),y ; dummy read from $3F02 + lda $2002 + jmi test_failed + + set_test 6,"STA (z),y" + jsr begin + set_addr $20E0 + ldy #$22 + sta (addr),y ; dummy read from $2002 + jmi test_failed + lda $2002 + jmi test_failed + + jsr begin + set_addr $20E2 + ldy #$22 + sta (addr),y ; dummy read from $2004 + lda $2002 + jpl test_failed + + jsr begin + set_addr $3FE0 + ldy #$22 + sta (addr),y ; dummy read from $3F02 + lda $2002 + jmi test_failed + + set_test 7,"LDA (z,x)" + jsr begin + ldx #0 + set_addr $2002 + lda (addr,x) ; no dummy read + jpl test_failed + + set_test 8,"STA (z,x)" + jsr begin + ldx #0 + set_addr $2002 + sta (addr,x) ; no dummy read + lda $2002 + jpl test_failed + + jmp tests_passed diff --git a/cpu_dummy_reads/source/nes.cfg b/cpu_dummy_reads/source/nes.cfg new file mode 100644 index 0000000..1848af5 --- /dev/null +++ b/cpu_dummy_reads/source/nes.cfg @@ -0,0 +1,43 @@ +# ca65 configuration for CNROM with code at $E000 + +# fill=yes forces area to be padded to specified size in output +MEMORY +{ + ZP: start = $10, size = $F0, type = rw; + RAM: start = $0200, size = $0600, type = rw; + + # My devcart only has memory from $E000-$FFFF + HEADER: start = 0, size = $10, type = ro, fill=yes; + UNUSED: start = $8000, size = $6000, type = ro, fill=yes; + ROM: start = $E000, size = $1FF4, type = ro, fill=yes; + + # Extra 6 bytes in vectors because built-in NES configuration + # does the same. Stupid, but better to keep compatible with it + # so small examples can use the built-in configuration. + VECTORS:start = $FFF4, size = $C, type = ro, fill=yes; + + CHARS: start = 0, size = $2000, type = ro; +} + +# align=$100 allows use of .align directive with a value up to $100 +# optional=yes avoids warning if segment is never used +SEGMENTS +{ + ZEROPAGE: load = ZP, type = zp; + BSS: load = RAM, type = bss; + + HEADER: load = HEADER, type = ro; + CODE: load = ROM, type = ro, align=$100; + + # Library code goes into this segment, keeping user code same + # length regardless of runtime: devcart, ROM, NSF, etc. + CODE2: load = ROM, type = ro, align=$100, optional=yes; + RODATA: load = ROM, type = ro; + + # Separate segment for strings so RODATA can have pointers to + # strings + STRINGS: load = ROM, type = ro, optional=yes; + VECTORS: load = VECTORS,type = ro; + + CHARS: load = CHARS, type = ro, align=$2000, optional=yes; +} diff --git a/cpu_dummy_reads/source/readme.txt b/cpu_dummy_reads/source/readme.txt new file mode 100644 index 0000000..589ffb1 --- /dev/null +++ b/cpu_dummy_reads/source/readme.txt @@ -0,0 +1,100 @@ +NES Tests Source Code +--------------------- + +Building with ca65 +------------------ +To assemble a test with ca65, use the following commands: + + ca65 -I common -o rom.o source_filename_here.s + ld65 -C nes.cfg rom.o -o rom.nes + your_favorite_nes_emulator rom.nes + +Don't bother trying to build a multi-test ROM, since it's not worth the +complexity. Also, tests you build won't print their name if they fail, +since that requires special arrangements. + + +Framework +--------- +Each test is in a single source file, and makes use of several library +source files from common/. This framework provides common services and +reduces code to only that which performs the actual test. Virtually all +tests include "shell.inc" at the beginning, which sets things up and +includes all the appropriate library files. + +The reset handler does minimal NES hardware initialization, clears RAM, +sets up the text console, then runs main. Main can exit by returning or +jumping to "exit" with an error code in A. Exit reports the code then +goes into an infinite loop. If the code is 0, it doesn't do anything, +otherwise it reports the code. Code 1 is reported as "Failed", and the +rest as "Error ". + +Several routines are available to print values and text to the console. +Most update a running CRC-32 checksum which can be checked with +check_crc, allowing ALL the output to be checked very easily. If the +checksum doesn't match, it is printed, so you can run the code on a NES +and paste the correct checksum into your code. + +The default is to build an iNES ROM, with other build types that I +haven't documented (devcart, sub-test of a multi-test ROM, NSF music +file). My nes.cfg file puts the code at $E000 since my devcart requires +it, and I don't want the normal ROM to differ in any way from what I've +tested. + +Library routines are organized by function into several files, each with +short documentation. Each routine may also optionally list registers +which are preserved, rather than those which are modified (trashed) as +is more commonly done. This is because it's best for the caller to +assume that ALL registers are NOT preserved unless noted. + +Some macros are used to make common operations more convenient. The left +is equivalent to the right: + + Macro Equivalent + ------------------------------------- + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + zp_byte name .zeropage + name: .res 1 + .code + + zp_res name,n .zeropage + name: .res n + .code + + bss_res name,n .bss + name: .res n + .code + + for_loop r,b,e,s calls a routine with A set to successive values + +-- +Shay Green + +Some tests might turn the screen off and on, since that affects the +behavior being tested. This does not indicate failure, and should be +ignored. Only the test result reported at the end is important. + +The error code at the end is also reported audibly with a series of +tones, in case the picture isn't visible for some reason. The code is in +binary, with a low tone indicating 0 and a high tone 1. The first tone +is always a zero, so you can tell the difference. A code of 0 means +passed, 1 means failure, and 2 or higher indicates a specific reason as +listed in the source code by the corresponding set_code line. Examples: + +low = 0 = passed +low high = 1 = failed +low high low = 2 = error 2 +low high high = 3 = error 3 + +See the source code for more information about a particular test and why +it might be failing. Each test has comments and correct output at top. +-- +Shay Green diff --git a/cpu_interrupts_v2/cpu_interrupts.nes b/cpu_interrupts_v2/cpu_interrupts.nes new file mode 100644 index 0000000000000000000000000000000000000000..c157e563a6a72e3ac2689362bf4e4263389e0ef7 GIT binary patch literal 81936 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 literal 0 HcmV?d00001 diff --git a/cpu_interrupts_v2/readme.txt b/cpu_interrupts_v2/readme.txt new file mode 100644 index 0000000..5df7469 --- /dev/null +++ b/cpu_interrupts_v2/readme.txt @@ -0,0 +1,251 @@ +NES CPU Interrupt Tests +----------------------- +Tests behavior and timing of CPU in the presence of interrupts, both IRQ +and NMI. + + +CLI Latency Summary +------------------- +The RTI instruction affects IRQ inhibition immediately. If an IRQ is +pending and an RTI is executed that clears the I flag, the CPU will +invoke the IRQ handler immediately after RTI finishes executing. + +The CLI, SEI, and PLP instructions effectively delay changes to the I +flag until after the next instruction. For example, if an interrupt is +pending and the I flag is currently set, executing CLI will execute the +next instruction before the CPU invokes the IRQ handler. This delay only +affects inhibition, not the value of the I flag itself; CLI followed by +PHP will leave the I flag cleared in the saved status byte on the stack +(bit 2), as expected. + + +1-cli_latency +------------- +Tests the delay in CLI taking effect, and some basic aspects of IRQ +handling and the APU frame IRQ (needed by the tests). It uses the APU's +frame IRQ and first verifies that it works well enough for the tests. + +The later tests execute CLI followed by SEI and equivalent pairs of +instructions (CLI, PLP, where the PLP sets the I flag). These should +only allow at most one invocation of the IRQ handler, even if it doesn't +acknowledge the source of the IRQ. RTI is also tested, which behaves +differently. These tests also *don't* disable interrupts after the first +IRQ, in order to test whether a pair of instructions allows only one +interrupt or causes continuous interrupts that block the main code from +continuing. + +2) RTI should not adjust return address (as RTS does) +3) APU should generate IRQ when $4017 = $00 +4) Exactly one instruction after CLI should execute before IRQ is taken +5) CLI SEI should allow only one IRQ just after SEI +6) In IRQ allowed by CLI SEI, I flag should be set in saved status flags +7) CLI PLP should allow only one IRQ just after PLP +8) PLP SEI should allow only one IRQ just after SEI +9) PLP PLP should allow only one IRQ just after PLP +10) CLI RTI should not allow any IRQs +11) Unacknowledged IRQ shouldn't let any mainline code run +12) RTI RTI shouldn't let any mainline code run + + +2-nmi_and_brk +------------- +NMI behavior when it interrupts BRK. Occasionally fails on +NES due to PPU-CPU synchronization. + +Result when run: +NMI BRK -- +27 36 00 NMI before CLC +26 36 00 NMI after CLC +26 36 00 +36 00 00 NMI interrupting BRK, with B bit set on stack +36 00 00 +36 00 00 +36 00 00 +36 00 00 +27 36 00 NMI after SEC at beginning of IRQ handler +27 36 00 + + +3-nmi_and_irq +------------- +NMI behavior when it interrupts IRQ vectoring. + +Result when run: +NMI IRQ +23 00 NMI occurs before LDA #1 +21 00 NMI occurs after LDA #1 (Z flag clear) +21 00 +20 00 NMI occurs after CLC, interrupting IRQ +20 00 +20 00 +20 00 +20 00 +20 00 +20 00 Same result for 7 clocks before IRQ is vectored +25 20 IRQ occurs, then NMI occurs after SEC in IRQ handler +25 20 + + +4-irq_and_dma +------------- +Has IRQ occur at various times around sprite DMA. +First column refers to what instruction IRQ occurred +after. Second column is time of IRQ, in CPU clocks relative +to some arbitrary starting point. + +0 +0 +1 +1 +1 +2 +2 +3 +2 +4 +4 +5 +4 +6 +7 +7 +7 +8 +7 +9 +7 +10 +8 +11 +8 +12 +8 +13 +... +8 +524 +8 +525 +8 +526 +9 +527 + + +5-branch_delays_irq +------------------- +A taken non-page-crossing branch ignores IRQ during +its last clock, so that next instruction executes +before the IRQ. Other instructions would execute the +NMI before the next instruction. + +The same occurs for NMI, though that's not tested here. + +test_jmp +T+ CK PC +00 02 04 NOP +01 01 04 +02 03 07 JMP +03 02 07 +04 01 07 +05 02 08 NOP +06 01 08 +07 03 08 JMP +08 02 08 +09 01 08 + +test_branch_not_taken +T+ CK PC +00 02 04 CLC +01 01 04 +02 02 06 BCS +03 01 06 +04 02 07 NOP +05 01 07 +06 04 0A JMP +07 03 0A +08 02 0A +09 01 0A JMP + +test_branch_taken_pagecross +T+ CK PC +00 02 0D CLC +01 01 0D +02 04 00 BCC +03 03 00 +04 02 00 +05 01 00 +06 04 03 LDA $100 +07 03 03 +08 02 03 +09 01 03 + +test_branch_taken +T+ CK PC +00 02 04 CLC +01 01 04 +02 03 07 BCC +03 02 07 +04 05 0A LDA $100 *** This is the special case +05 04 0A +06 03 0A +07 02 0A +08 01 0A +09 03 0A JMP + +Multi-tests +----------- +The NES/NSF builds in the main directory consist of multiple sub-tests. +When run, they list the subtests as they are run. The final result code +refers to the first sub-test that failed. For more information about any +failed subtests, run them individually from rom_singles/ and +nsf_singles/. + + +Flashes, clicks, other glitches +------------------------------- +If a test prints "passed", it passed, even if there were some flashes or +odd sounds. Only a test which prints "done" at the end requires that you +watch/listen while it runs in order to determine whether it passed. Such +tests involve things which the CPU cannot directly test. + + +Alternate output +---------------- +Tests generally print information on screen, but also report the final +result audibly, and output text to memory, in case the PPU doesn't work +or there isn't one, as in an NSF or a NES emulator early in development. + +After the tests are done, the final result is reported as a series of +beeps (see below). For NSF builds, any important diagnostic bytes are +also reported as beeps, before the final result. + + +Output at $6000 +--------------- +All text output is written starting at $6004, with a zero-byte +terminator at the end. As more text is written, the terminator is moved +forward, so an emulator can print the current text at any time. + +The test status is written to $6000. $80 means the test is running, $81 +means the test needs the reset button pressed, but delayed by at least +100 msec from now. $00-$7F means the test has completed and given that +result code. + +To allow an emulator to know when one of these tests is running and the +data at $6000+ is valid, as opposed to some other NES program, $DE $B0 +$G1 is written to $6001-$6003. + + +Audible output +-------------- +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason. See the source +code of the test for more information about the meaning of a test code. +They are found after the set_test macro. For example, the cause of test +code 3 would be found in a line containing set_test 3. Examples: + + Tones Binary Decimal Meaning + - - - - - - - - - - - - - - - - - - - - + low 0 0 passed + low high 01 1 failed + low high low 010 2 error 2 + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to prevent the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +-- +Shay Green diff --git a/cpu_interrupts_v2/rom_singles/1-cli_latency.nes b/cpu_interrupts_v2/rom_singles/1-cli_latency.nes new file mode 100644 index 0000000000000000000000000000000000000000..534f1ac76c20e616135738fd44f8653dadd04466 GIT binary patch literal 40976 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 A;Q#;t literal 0 HcmV?d00001 diff --git a/cpu_interrupts_v2/rom_singles/4-irq_and_dma.nes b/cpu_interrupts_v2/rom_singles/4-irq_and_dma.nes new file mode 100644 index 0000000000000000000000000000000000000000..2dac7397d4dafab4e79279a546721e0b092eb429 GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/cpu_interrupts_v2/source/1-cli_latency.s b/cpu_interrupts_v2/source/1-cli_latency.s new file mode 100644 index 0000000..7c5732d --- /dev/null +++ b/cpu_interrupts_v2/source/1-cli_latency.s @@ -0,0 +1,214 @@ +; Tests the delay in CLI taking effect, and some basic aspects of IRQ +; handling and the APU frame IRQ (needed by the tests). It uses the APU's +; frame IRQ and first verifies that it works well enough for the tests. +; +; The later tests execute CLI followed by SEI and equivalent pairs of +; instructions (CLI, PLP, where the PLP sets the I flag). These should +; only allow at most one invocation of the IRQ handler, even if it doesn't +; acknowledge the source of the IRQ. RTI is also tested, which behaves +; differently. These tests also *don't* disable interrupts after the first +; IRQ, in order to test whether a pair of instructions allows only one +; interrupt or causes continuous interrupts that block the main code from +; continuing. + +CUSTOM_IRQ=1 +.include "shell.inc" + +zp_byte irq_count +zp_byte irq_flags +zp_res irq_addr,2 +zp_byte irq_data + +begin_test: + sei + lda #0 + sta irq_count + sta irq_flags + sta irq_addr + sta irq_addr + 1 + rts + +irq: sta irq_data + pla ; save status flags and return addr from stack + sta irq_flags + pla + sta irq_addr + pla + sta irq_addr + 1 + pha ; restore return addr and status flags on stack + lda irq_addr + pha + lda irq_flags + pha + inc irq_count + bpl :+ + pla + ora #$04 ; set I flag in saved status to disable IRQ + pha +: lda irq_data + rti + +; Reports error if none or more than one interrupt occurred, +; or if return address within handler doesn't match YX. +end_test: + sei + nop + cmp irq_count + jne test_failed + cpx irq_addr + jne test_failed + cpy irq_addr + 1 + jne test_failed + rts + + +.align 256 +main: + setb SNDMODE,0 + delay_msec 40 + ; APU frame IRQ should be active by now + + set_test 2,"RTI should not adjust return address (as RTS does)" + lda #>addr2 + pha + lda #irq3 + lda #$81 + jsr end_test + + set_test 5,"CLI SEI should allow only one IRQ just after SEI" + jsr begin_test + lda #$80 ; have IRQ handler set I flag after first invocation + sta irq_count + cli + sei +irq4: + ldx #irq4 + lda #$81 + jsr end_test + + set_test 6,"In IRQ allowed by CLI SEI, I flag should be set in saved status flags" + jsr begin_test + cli + sei + nop + nop + lda irq_flags + and #$04 + jeq test_failed + + set_test 7,"CLI PLP should allow only one IRQ just after PLP" + jsr begin_test + php + cli + plp +irq5: + ldx #irq5 + lda #1 + jsr end_test + + set_test 8,"PLP SEI should allow only one IRQ just after SEI" + jsr begin_test + lda #0 + pha + plp + sei +irq6: + ldx #irq6 + lda #1 + jsr end_test + + set_test 9,"PLP PLP should allow only one IRQ just after PLP" + jsr begin_test + php + lda #0 + pha + plp + plp +irq7: + ldx #irq7 + lda #1 + jsr end_test + + set_test 10,"CLI RTI should not allow any IRQs" + jsr begin_test + lda #>rti1 + pha + lda #rti3 + pha + lda #rti2 + pha + lda #Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/cpu_interrupts_v2/source/common/build_rom.s b/cpu_interrupts_v2/source/common/build_rom.s new file mode 100644 index 0000000..38eab29 --- /dev/null +++ b/cpu_interrupts_v2/source/common/build_rom.s @@ -0,0 +1,92 @@ +; Builds program as iNES ROM + +; Default is 32K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +.segment "CODE" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_chr_ram + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/cpu_interrupts_v2/source/common/console.s b/cpu_interrupts_v2/source/common/console.s new file mode 100644 index 0000000..508898b --- /dev/null +++ b/cpu_interrupts_v2/source/common/console.s @@ -0,0 +1,328 @@ +; Scrolling text console with word wrapping, 30x29 characters. +; +; * Defers PPU initialization until first flush/ newline. +; * Works even if PPU doesn't support scrolling. +; * Keeps border around edge of screen for TV overscan. +; * Requires vertical or single-screen mirroring. +; * Requires ASCII font in CHR. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: A, X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/cpu_interrupts_v2/source/common/crc.s b/cpu_interrupts_v2/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/cpu_interrupts_v2/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/cpu_interrupts_v2/source/common/delay.s b/cpu_interrupts_v2/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/cpu_interrupts_v2/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/cpu_interrupts_v2/source/common/devcart.bin b/cpu_interrupts_v2/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..faad421d45bf21d44e402f46fbaa20901d15f719 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wG3YQU0Fl6NFtM_+mr-FQM=xVTFT(<^3BPOc#a|7ry&2Fp60$pP@dzr$Z|#b!xJGm)pw)z82h9kAD@^?5URHxtcs@a_-X? t%3IW>nkN5W5ux>3V*~fn)J6~8w_B5*rJT@sm71J8AG=MMqMkrU0RZ(8j>rH2 literal 0 HcmV?d00001 diff --git a/cpu_interrupts_v2/source/common/macros.inc b/cpu_interrupts_v2/source/common/macros.inc new file mode 100644 index 0000000..4307c66 --- /dev/null +++ b/cpu_interrupts_v2/source/common/macros.inc @@ -0,0 +1,188 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro + +; Negates A and adds it to operand +.macro subaf Operand + eor #$FF + sec + adc Operand +.endmacro + +; Initializes CPU registers to reasonable values +.macro init_cpu_regs + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + .ifndef BUILD_NSF + inx + stx PPUCTRL + .endif +.endmacro diff --git a/cpu_interrupts_v2/source/common/neshw.inc b/cpu_interrupts_v2/source/common/neshw.inc new file mode 100644 index 0000000..d636a97 --- /dev/null +++ b/cpu_interrupts_v2/source/common/neshw.inc @@ -0,0 +1,56 @@ +; NES I/O locations and masks + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.ifndef REGION_FREE + .ifndef PAL_ONLY + .ifndef NTSC_ONLY + NTSC_ONLY = 1 + .endif + .endif +.else + .ifdef NTSC_ONLY + .error "NTSC_ONLY and REGION_FREE defined" + .endif + .ifdef PAL_ONLY + .error "PAL_ONLY and REGION_FREE defined" + .endif +.endif + +.ifdef NTSC_ONLY + CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.endif + +.ifdef PAL_ONLY + CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/cpu_interrupts_v2/source/common/ppu.s b/cpu_interrupts_v2/source/common/ppu.s new file mode 100644 index 0000000..4827b3e --- /dev/null +++ b/cpu_interrupts_v2/source/common/ppu.s @@ -0,0 +1,203 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts + + +.macro check_ppu_region_ Len + ; Delays since VBL began + jsr wait_vbl_optional ; 10 average + delay Len - 18 - 200 + lda PPUSTATUS ; 4 + bmi @ok ; 2 + delay 200 + ; Next VBL should roughly begin here if it's the + ; one we are detecting + delay 200 + lda PPUSTATUS ; 2 + bpl @ok +.endmacro + +check_ppu_region: + +.ifndef REGION_FREE +.ifdef PAL_ONLY + check_ppu_region_ 29781 + print_str {newline,"Note: This test is meant for PAL NES only.",newline,newline} +.endif + +.ifdef NTSC_ONLY + check_ppu_region_ 33248 + print_str {newline,"Note: This test is meant for NTSC NES only.",newline,newline} +.endif +.endif +@ok: rts + + +; Loads ASCII font into CHR RAM and fills rest with $FF +.macro load_chr_ram + bit PPUSTATUS + setb PPUADDR,0 + setb PPUADDR,0 + + ; Copy ascii_chr to 0 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page + + ; Fill rest + lda #$FF +: sta PPUDATA + iny + bne :- + inx + cpx #$20 + bne :- +.endmacro diff --git a/cpu_interrupts_v2/source/common/print.s b/cpu_interrupts_v2/source/common/print.s new file mode 100644 index 0000000..281491f --- /dev/null +++ b/cpu_interrupts_v2/source/common/print.s @@ -0,0 +1,277 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr print_nibble_ + pla + + pha + and #$0F + jsr print_nibble_ + pla + rts + +print_nibble_: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints low 4 bits of A as single hex character +; Preserved: A, X, Y +print_nibble: + pha + and #$0F + jsr update_crc + jsr print_nibble_ + pla + rts + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + bne :+ + inc addr+1 +: rts + + +; Prints A as 1-3 digit decimal. +; In: A = MSB +; Preserved: A, X, Y +print_dec: + sta print_temp_ + pha + txa + pha + tya + pha + ldy print_temp_ + lda #0 + sta print_temp_ + tya + jmp :+ + + +; Prints 16-bit AY as 1-5 digit decimal. +; Preserved: A, X, Y +print_ay_dec: + jsr update_crc + sta print_temp_ + pha + txa + pha + tya + pha +: jsr update_crc + + ; Strip leading zeroes + ldx #6 +: dex + cmp @lsb-1,x + lda print_temp_ + sbc @msb-1,x + tya + bcc :- + bcs @non_zero + + ; Print remaining digits + +@more: ; Commit subtraction + iny + sta print_temp_ + pla + + ; Subtract +@digit: sbc @lsb,x + pha + lda print_temp_ + sbc @msb,x + bcs @more + + ; Print digit and undo subtraction + tya + jsr print_char_ + pla + adc @lsb,x +@non_zero: + sec + ldy #'0' + dex + bne @digit + + ora #'0' + jsr print_char_ + + pla + tay + pla + tax + pla + rts + +@lsb: .byte 0,<10,<100,<1000,<10000 +@msb: .byte 0,>10,>100,>1000,>10000 + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/cpu_interrupts_v2/source/common/shell.inc b/cpu_interrupts_v2/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/cpu_interrupts_v2/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/cpu_interrupts_v2/source/common/shell.s b/cpu_interrupts_v2/source/common/shell.s new file mode 100644 index 0000000..0d4b396 --- /dev/null +++ b/cpu_interrupts_v2/source/common/shell.s @@ -0,0 +1,182 @@ +; Shell that sets up testing framework and calls main + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +; Move code from $C000 to $E200, to accommodate my devcarts +.ifndef LARGER_ROM_HACK +.segment "CODE" + .res $2200 +.endif + +; Put shell code after user code, so user code is in more +; consistent environment +.segment "CODE2" + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + init_cpu_regs + + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell without affecting current set_test values +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + ; Clear APU registers + lda #0 + sta $4015 + ldx #$13 +: sta $4000,x + dex + bpl :- + + ; CPU registers + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sta temp + init_cpu_regs + setb SNDCHN,0 + lda temp + + jsr report_result + pha + jsr check_ppu_region + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +.include "shell_misc.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts +.endif diff --git a/cpu_interrupts_v2/source/common/shell_misc.s b/cpu_interrupts_v2/source/common/shell_misc.s new file mode 100644 index 0000000..4b34de8 --- /dev/null +++ b/cpu_interrupts_v2/source/common/shell_misc.s @@ -0,0 +1,212 @@ +; Reports internal error and exits program +internal_error: + init_cpu_regs + print_str newline,"Internal error" + lda #255 + jmp exit + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +.macro fill_ram_ Begin, End + ; Simpler to count from negative size up to 0, + ; and adjust address downward to compensate + ; for initial low byte in Y index + .local Neg_size + Neg_size = (Begin) - (End) + ldxy #(Begin) - 4 + delay (n)/3-1 + .endif + delay 29781*4 + .elseif (n) .MOD 3 = 2 + delay (n)/3 + delay 29781*2 + .else + delay (n)/3 + .endif +.endmacro diff --git a/cpu_interrupts_v2/source/common/testing.s b/cpu_interrupts_v2/source/common/testing.s new file mode 100644 index 0000000..6bb852a --- /dev/null +++ b/cpu_interrupts_v2/source/common/testing.s @@ -0,0 +1,105 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "RODATA",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing = init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/cpu_interrupts_v2/source/common/text_out.s b/cpu_interrupts_v2/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/cpu_interrupts_v2/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/cpu_reset/ram_after_reset.nes b/cpu_reset/ram_after_reset.nes new file mode 100644 index 0000000000000000000000000000000000000000..cb223a0db5134a35af830f814fd60e77ebba3af8 GIT binary patch literal 40976 zcmeI1e{56N702&;3C6gt^8*5pB!o)~C5>3;N~6m*3tTjigWSC~-}g}XeoR3NPtt2F6V>%1hh*wZFax>glpw(}e)HQQiONbQ~b z>>FsiKhUVuRyr@w{=R$fx#ynqxj$Yce{1`98f8f$;ws^V1dsp{Kmter2_OL^fCP{L z5WK|9QwgIt zGdA0k{r-Ug3Sa&~`uL7L+jrB!U}%7LLv80izs(mK=7yj2<^^UJ!%u(pHX+wr!uOIZp#E)|3?-5$z}C9nw_Cf=NR}>Lehw=mf{;^bz6MB z%)BpNj$BNXevw!@Mv`ReokErOnc2ytH1(RkZc-&N0v}23R=!R2y0fHhQoos#rfaX$ zwT3sFJ^qkqYOoe>v5m2|Lc@YK>78|#6vRuX~v^g(RZ_IZG4@qUWq>-2fZtD z)NxrjPFTleaDI|Io(ISJ4fP!u^0k-*aorR1&r|2wS?{=U4*}(uPAxq%zw-1a}*?&t6`p4-7!zH4!p0K@{QON zUpDf-Gq*xM`rT|hFW8`9gTgW=bPt|}@s9BamRiMfs|rh;Rlt~eyR)#gR;i^}eQbGb zMXZ6XU*&Xqj;`EZpRn#|2&@P!-#?XQu}@5dUFD>}}_RwS2q{5ZBeS>HjY^><_S zFRu(T`gAr?^=f@b31Cgv-t@981YUL4(SE3&=+@!d8^Lkd$nYhxIF(^g@BS=Znde*c z$H`y!iE=!Jb6Sp)o2>i@frHB9PbOp(3zKQ(BV|$6fL|5Q$)|@U|zfja$_wj9d`ct zZ6fP)V3=G@*UcPN66E(pjxVLgaP3W)&HGgf1*kIkD3@CF4_;P|C}8{8OpJd)AMOWi zhV^*})I#~agqjx64v#F>s9G(JZE!ON!ln#ZXEh;fIYS#{7=#49wi%DQ71~W# zY7O`e!l!(*k)O_u!ip4zV+AvWMayCRx=O~}P==_2<8YdKwLFBhZstfM zB(?N+W{Q(2j|5H!U)w`5C~;%!3w=N)K#MI24I_9&R?MX3()b)$;U>8G1QOL$h=b zoYiiF*8Ia7NlpzxBE?{YxV0^9(w-Ryxn! z*%_wwS_W33L%jlLgt_4PdenHTFx4zUbvdzKC3IIl!RKije3k1?SSVx)Uxmf#G~2JU zO)|Z`HWIKS%Kg+5*jLebwdv%O2l1Gakf1BvPRq1D2m5>UewoJC%B*a=X|3$EmJMoe zF%~f=qfq?F$qI$s8h3KdAJ-HX*ro=z+oRB?+4i=P58=FPnziZk@NTy9*Y%_Pb-j)s z+^u}KO7RAFTyn>&+@WGzcB?hZoN?j?%KgLL<zwO;R()Q4@xBhga z?&0GwUqZfyL~^QG~p+OD*oxi9H|&hw@BU)`JYO}5VZySiVx>!C{> zcOT~6JN?2~&g5UZd_7M-c70*O$3Q<70w0@xqVS8rUq!>=uxTQcgo|OgiBM$=b6KKb zU(vk*yW$M&AVQlTYi|F3;2T7!-EKGi3ANZ^AiISKWlktN84*eXu97PNU4$yi5Cljd zz_N00PUvu3hs3eMOmh4Z#%iYlx(-6^j?RKcTss#rMubxuU=ot|;egD$fftG4tcf z>;IlUxTw6Hk0&&m(xQBRg)YEk^7#~Mx`p;T^jfsNmX|Afp;){I@uVsWwNYNKXdn>a zsS}|^M{|20tUsYGCYKf>)D5$5x5z}O3pSSB4*V)w3lqr~ztHkVD3*m3iN>7fvrs}J z_9)~pRMY0tX_#N3P@mS)5#Da99jw#oC=tr*7qoIa*Jh_P!ubd#1ni@*z$;qzo38jz z!(N8n4EBp!K8pG(M^c}rnG+B8W#z_jnVq;2aN7-813CKwBMl-9v75Nh3NSCNrXae zgvYn26+U2Za$10$y#VcHb-?MUC=MdjTn?~ag!aK{swjO#DEsHHAQw0SE6Shmygrqe u2s%LmNB{{S0VIF~kN^@u0!RP}AOR$R1dsp{Kmter2_OL^fCN5Q1pW){Y|lRc literal 0 HcmV?d00001 diff --git a/cpu_reset/readme.txt b/cpu_reset/readme.txt new file mode 100644 index 0000000..e8f9ebc --- /dev/null +++ b/cpu_reset/readme.txt @@ -0,0 +1,93 @@ +CPU Power/Reset Tests +--------------------- +Verifies CPU register values at power, and changes that occur during +reset. Also verifies that RAM isn't modified during reset. + + +Expected behavior +----------------- +At power: + A, X, Y = 0 + P = $34 + S = $FD + +After reset: + A, X, Y unchanged + I flag set (P ORed with $04) + S decremented by 3, but nothing written to stack + + +Multi-tests +----------- +The NES/NSF builds in the main directory consist of multiple sub-tests. +When run, they list the subtests as they are run. The final result code +refers to the first sub-test that failed. For more information about any +failed subtests, run them individually from rom_singles/ and +nsf_singles/. + + +Flashes, clicks, other glitches +------------------------------- +If a test prints "passed", it passed, even if there were some flashes or +odd sounds. Only a test which prints "done" at the end requires that you +watch/listen while it runs in order to determine whether it passed. Such +tests involve things which the CPU cannot directly test. + + +Alternate output +---------------- +Tests generally print information on screen, but also report the final +result audibly, and output text to memory, in case the PPU doesn't work +or there isn't one, as in an NSF or a NES emulator early in development. + +After the tests are done, the final result is reported as a series of +beeps (see below). For NSF builds, any important diagnostic bytes are +also reported as beeps, before the final result. + + +Output at $6000 +--------------- +All text output is written starting at $6004, with a zero-byte +terminator at the end. As more text is written, the terminator is moved +forward, so an emulator can print the current text at any time. + +The test status is written to $6000. $80 means the test is running, $81 +means the test needs the reset button pressed, but delayed by at least +100 msec from now. $00-$7F means the test has completed and given that +result code. + +To allow an emulator to know when one of these tests is running and the +data at $6000+ is valid, as opposed to some other NES program, $DE $B0 +$G1 is written to $6001-$6003. + + +Audible output +-------------- +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason. See the source +code of the test for more information about the meaning of a test code. +They are found after the set_test macro. For example, the cause of test +code 3 would be found in a line containing set_test 3. Examples: + + Tones Binary Decimal Meaning + - - - - - - - - - - - - - - - - - - - - + low 0 0 passed + low high 01 1 failed + low high low 010 2 error 2 + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to prevent the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +-- +Shay Green diff --git a/cpu_reset/registers.nes b/cpu_reset/registers.nes new file mode 100644 index 0000000000000000000000000000000000000000..5408f76ec9d3e9b674ead0848aad99a78a920e6e GIT binary patch literal 40976 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 literal 0 HcmV?d00001 diff --git a/cpu_reset/source/common/ascii.chr b/cpu_reset/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/cpu_reset/source/common/build_rom.s b/cpu_reset/source/common/build_rom.s new file mode 100644 index 0000000..f3d50cd --- /dev/null +++ b/cpu_reset/source/common/build_rom.s @@ -0,0 +1,93 @@ +; Builds program as iNES ROM + +; Default is 32K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +; Move code to $C000 +.segment "CODE" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_ascii_chr + .endif + rts + +post_exit: + jsr set_final_result + jsr play_hex + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/cpu_reset/source/common/console.s b/cpu_reset/source/common/console.s new file mode 100644 index 0000000..036553c --- /dev/null +++ b/cpu_reset/source/common/console.s @@ -0,0 +1,331 @@ +; Scrolling text console with line wrapping, 30x29 characters. +; Buffers lines for speed. Will work even if PPU doesn't +; support scrolling (until text reaches bottom). Keeps border +; along bottom in case TV cuts it off. +; +; Defers most initialization until first newline, at which +; point it clears nametable and makes palette non-black. +; +; ** ASCII font must already be in CHR, and mirroring +; must be vertical or single-screen. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/cpu_reset/source/common/crc.s b/cpu_reset/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/cpu_reset/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/cpu_reset/source/common/delay.s b/cpu_reset/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/cpu_reset/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/cpu_reset/source/common/devcart.bin b/cpu_reset/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..684fbb99be38d6e3c146eadd8f8dd005ffc5268f GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1Wo+nWSim*mmrujL|HOg?>t;w)Uiv%JiQ&YB?>-ES zViwD1s88?d&`L@>csa>_f|eTR_2XX!HG8V%xUMJ9nVkFdh4L14siw*QS43#N*4V(k eG_}z~_wClCXDKH%UZp1I&L`I9|NlLK&IACCCY;*< literal 0 HcmV?d00001 diff --git a/cpu_reset/source/common/macros.inc b/cpu_reset/source/common/macros.inc new file mode 100644 index 0000000..d4cb72e --- /dev/null +++ b/cpu_reset/source/common/macros.inc @@ -0,0 +1,169 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro diff --git a/cpu_reset/source/common/neshw.inc b/cpu_reset/source/common/neshw.inc new file mode 100644 index 0000000..814d772 --- /dev/null +++ b/cpu_reset/source/common/neshw.inc @@ -0,0 +1,43 @@ +; NES I/O locations and masks + +; Clocks per second +.ifndef CLOCK_RATE + CLOCK_RATE = 1789773 ; NTSC +; CLOCK_RATE = 1662607 ; PAL +.endif + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.if CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.elseif CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/cpu_reset/source/common/ppu.s b/cpu_reset/source/common/ppu.s new file mode 100644 index 0000000..21cad12 --- /dev/null +++ b/cpu_reset/source/common/ppu.s @@ -0,0 +1,142 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts diff --git a/cpu_reset/source/common/print.s b/cpu_reset/source/common/print.s new file mode 100644 index 0000000..29fbc23 --- /dev/null +++ b/cpu_reset/source/common/print.s @@ -0,0 +1,235 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + pha + and #$0F + jsr @nibble + pla + rts + +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: A, X, Y +print_dec: + pha + sta print_temp_ + txa + pha + lda print_temp_ + + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jsr print_char + pla + tax + pla + rts + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/cpu_reset/source/common/run_at_reset.s b/cpu_reset/source/common/run_at_reset.s new file mode 100644 index 0000000..aeb09f1 --- /dev/null +++ b/cpu_reset/source/common/run_at_reset.s @@ -0,0 +1,64 @@ +; Keeps track of number of times reset, and prompts user. + +power_flag_value = $42 + +nv_res power_flag_ +nv_res num_resets_ + +; Out: A = number of times NES has been reset since turned on +; Preserved: X, Y +num_resets: + lda power_flag_ + cmp #power_flag_value + bne :+ + lda num_resets_ + rts +: lda #0 + rts + + +; Prompts user to press reset after message disappears, +; then hides message, increments reset count, and asks +; emulator to reset NES. +; Preserved: X, Y +prompt_to_reset: + print_str {newline,newline,"Press reset AFTER this message",newline,"disappears"} + + ; Add "again" if this isn't first requested reset + jsr num_resets + beq :+ + print_str ", again" +: + ; Show for a few seconds + print_str {newline,newline,newline} + jsr console_show + delay_msec 1000 + delay_msec 1000 + + jsr inc_reset_count + + ; Tell emulator that NES should be reset now + lda #$81 + jsr set_final_result + + jsr console_hide + rts + + +; Increments reset count and marks it as valid +; Preserved: X, Y +inc_reset_count: + jsr num_resets + clc + adc #1 + bcc :+ + lda #$FF ; don't wrap around +: sta num_resets_ + setb power_flag_,power_flag_value + rts + + +; Waits in infinite loop for reset +; Preserved: A, X, Y, flags +wait_reset: + jmp wait_reset diff --git a/cpu_reset/source/common/shell.inc b/cpu_reset/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/cpu_reset/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/cpu_reset/source/common/shell.s b/cpu_reset/source/common/shell.s new file mode 100644 index 0000000..358cddf --- /dev/null +++ b/cpu_reset/source/common/shell.s @@ -0,0 +1,382 @@ +; Common routines and runtime + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +; Move code to $E200 ($200 bytes for text output in devcarts +; where WRAM is mirrored to $E000) +.segment "CODE" + .res $2200 + +; Put shell code after user code, so user code is in more +; consistent environment +.segment "CODE2" + + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts +.endif + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sei + cld + ldx #$FF + txs + + ldx #0 + stx SNDCHN + .ifndef BUILD_NSF + stx PPUCTRL + .endif + + jsr report_result + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +.macro fill_ram_ Begin, End + .local Neg_size + Neg_size = (Begin) - (End) + ldxy #(Begin) - ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page +.endmacro + +; Disables interrupts and loops forever +.ifndef CUSTOM_FOREVER +forever: + sei + lda #0 + sta PPUCTRL +: beq :- + .res $10,$EA ; room for code to run loader +.endif + + +; Default NMI +.ifndef CUSTOM_NMI + zp_byte nmi_count + + nmi: + inc nmi_count + rti + + ; Waits for NMI. Must be using NMI handler that increments + ; nmi_count, with NMI enabled. + ; Preserved: X, Y + wait_nmi: + lda nmi_count + : cmp nmi_count + beq :- + rts +.endif + + +; Default IRQ +.ifndef CUSTOM_IRQ + irq: + bit SNDCHN ; clear APU IRQ flag + rti +.endif + +.endif + + +; Reports A in binary as high and low tones, with +; leading low tone for reference. Omits leading +; zeroes. Doesn't hang if no APU is present. +; Preserved: A, X, Y +play_hex: + pha + + ; Make low reference beep + clc + jsr @beep + + ; Remove high zero bits + sec +: rol a + bcc :- + + ; Play remaining bits + beq @zero +: jsr @beep + asl a + bne :- +@zero: + + delay_msec 300 + pla + rts + +; Plays low/high beep based on carry +; Preserved: A, X, Y +@beep: + pha + + ; Set up square + lda #1 + sta SNDCHN + sta $4001 + sta $4003 + adc #$FE ; period=$100 if carry, $1FF if none + sta $4002 + + ; Fade volume + lda #$0F +: ora #$30 + sta $4000 + delay_msec 8 + sec + sbc #$31 + bpl :- + + ; Silence + sta SNDCHN + delay_msec 160 + + pla + rts diff --git a/cpu_reset/source/common/testing.s b/cpu_reset/source/common/testing.s new file mode 100644 index 0000000..ba41f03 --- /dev/null +++ b/cpu_reset/source/common/testing.s @@ -0,0 +1,106 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "RODATA",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing: + jmp init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/cpu_reset/source/common/text_out.s b/cpu_reset/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/cpu_reset/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/cpu_reset/source/registers.s b/cpu_reset/source/registers.s new file mode 100644 index 0000000..73f748e --- /dev/null +++ b/cpu_reset/source/registers.s @@ -0,0 +1,85 @@ +; At power, A,X,Y=0 P=$34 S=$FD +; At reset, I flag set, S decreased by 3, no other change + +CUSTOM_RESET=1 +.include "shell.inc" +.include "run_at_reset.s" + +nv_res log,8 + +reset: ; Save current registers and stack + php + sta log+0 + stx log+1 + sty log+2 + pla + sta log+3 + tsx + stx log+4 + lda $112 + sta log+5 + lda $111 + sta log+6 + lda $110 + sta log+7 + + jmp std_reset + +main: jsr num_resets + beq power + + set_test 3,"Reset should set I flag, subtract 3 from S, nothing more" + jsr print_log + check_crc $717C409F + + set_test 4,"Reset shouldn't write to stack" + lda log+5 + cmp #$FB + jne test_failed + lda log+6 + cmp #$9A + jne test_failed + lda log+7 + cmp #$BC + jne test_failed + + jmp tests_passed + +power: set_test 2,"At power A,X,Y=0 P=$34 S=$FD" + jsr print_log + check_crc $EAE4AAFA + + jsr prompt_to_reset + + ; Clear interrupt sources + setb SNDCHN,0 + setb SNDMODE,$C0 + setb PPUCTRL,0 + bit SNDCHN + + ; Set initial stack bytes and registers + setb $111,$9A + setb $110,$BC + ldx #$12 + txs + lda #$FB + pha + lda #$34 + ldx #$56 + ldy #$78 + plp + + jmp wait_reset + +print_log: + print_str "A X Y P S",newline + ldx #0 +: lda log,x + jsr print_a + inx + cpx #5 + bne :- + + jsr print_newline + + rts diff --git a/cpu_timing_test6/cpu_timing_test.nes b/cpu_timing_test6/cpu_timing_test.nes new file mode 100644 index 0000000000000000000000000000000000000000..e20bca49fe76263569ec2bfde14be5d4c681b25a GIT binary patch literal 16400 zcmeI2UuaWT9LIn6-27`T^|sb73>jx*Ldy1#$&}0mmo|;wY}ceDDKcS@htZ|rpkpw~ z2xWGr6WJYm7_9TDWJWv=L0^V~8}VTmm9D!m5Fe(dokmlnrgdnwZMxsNF>Pn7z72$P zdXjT~=X-v?^E;n&xVaCFgyJtsuv`{J5d;JQK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z z5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|ef#;q;KLZ`8E>T)4VZBUWxyf?+v@=^A0eZSf z8*XA{Tj;eSll0aA&Tb8yXbrSUpLAPC42%vhJYwobSQb@srZU z0(gHm%ea->X9DBppN?)g(vm0Ux+`$K96t-!wW0AVaHFiAg&P@iKwh!te!eqO=cTtF z9RTL>H6N3$G0dQbB#EPpRFT{=>vJt(DZ^=8`vv~qywSWpv;jM9&SPgjoyfqM&n7a` z2pswW$oW%{SIm0_TDBE5vz`&15GLyqLFmBbjKmf)3)rtiANYgNrp=-XG+)j5c|s%WLQ>{nygDe=Yu6`XCvs#vhbAYPz+aECqvd zFv$Csjrl#UbDPxsSLlO0-$(hc&T(WGp%eaWm=5T-=T)ZVV;M|ROfD4w96 zH@4AuC>V`&#@iseb7wdhZr5ly5>LdsgNbl75~tCK_WrW;8jVD|R+`y%WN*csOSyX&&1tmj z=^sVQ_$P_KZ|aG=PTfJLW}GKxcn6=Oc8WEnJ84qIv9^M{_hlXByUt$F?>bXSwjWJK zv5)@Na~FRt**kQm#MWoMBQEs(rdAJ{)A%$-WjIr2H#5^Cz~0WxWL@ayq!-PHS=XuZ zd8>PW*d)biW5%3dl#YJe85HAYlMFGXd3$_WLFTpiMN!RAM-CjP`&%dh0RqKFH8#9U@`oQhu2@F8m zX!Q5xD=^UD_B)I;Z1V3Ltu!>ie16`+?H$Sdyn$`SXmESIUYu|6%G&`)Lq7oDg&V_L zEv~E30H%k^=jCwLx8y+T~p-_-j$63)?d4}V@Vf1SMnrXDtnb~ zo=mCq&(bh{@Y;kXQy#qGOT*Qnr1~xvdbN~lTYsVcThi<3^=hHX*9pa{%q8)=dhs3n zmNCqT;*CvZ%XlxB>P5WBkPTFCEv}LKecD-W#P`BO>adFMh^b?#<0;L0J<%F&YIlm5 z^|UiteVe4}q_&sW=l<l6ha; literal 0 HcmV?d00001 diff --git a/cpu_timing_test6/readme.txt b/cpu_timing_test6/readme.txt new file mode 100644 index 0000000..e73de19 --- /dev/null +++ b/cpu_timing_test6/readme.txt @@ -0,0 +1,147 @@ +NES 6502 Timing Test +-------------------- +This program tests instruction timing for all official and unofficial +NES 6502 instructions except the 8 branch instructions (Bxx) and the 12 +halt instructions (HLT). It tests normal and page crossing cases of all +instructions (including instructions that should not take longer due to +a page crossing). It passes when run on an NTSC NES (it will not work on +a PAL NES due to the differing refresh rate). + +The test takes up to 16 seconds to complete. If everything passes, it +prints a message and beeps twice. If it fails, it prints an error +message and beeps once. + +The test can be restricted to only official instructions or test some or +all of the unofficial instructions, in case your emulator doesn't +emulate all the unofficial instructions. Select between these by holding +the following buttons on controller #1 when starting the test: + +(nothing) Official instructions only +B Official + all unofficial instructions +A Official + $EB (equivalent to $E9) + unofficial NOPs: + +1-byte NOPs: $1A $3A $5A $7A $DA $FA +2-byte NOPs: $04 $14 $34 $44 $54 $64 $74 $80 $82 $89 $C2 $D4 $E2 $F4 +3-byte NOPs: $0C $1C $3C $5C $7C $DC $FC + +The 12 halt instructions are never tested, as they freeze the NES and +require a reset: + +HLT: $02 $12 $22 $32 $42 $52 $62 $72 $92 $B2 $D2 $F2 + +The 8 branch instructions aren't tested since they have more subtle +page-crossing behavior. Use my branch_timing_tests for these. + +Source code is included. Support code is also included, but it runs on a +custom devcart and assembler so it will require some effort to assemble. +Contact me if you'd like assistance porting them to your setup. I really +do plan on making my source work with ca65 eventually. + + +Errors +------ +All instructions are first tested without a page crossing, then with a +page crossing, allowing you to more easily debug timing problems. + +FAIL OP: The indicated opcode failed. If it was being timed where a page +crossing should occur, that will be noted. The number of clocks will be +shown that the emulator used, and the correct number of clocks it should +have used. + +UNKNOWN ERROR: Occurs if the instruction timing fails or NMI +unexpectedly returns. Prints the opcode and a hex value. Post to the +Nesdev forum if you get this error. + +BASIC TIMING WRONG: If you get this error, then the loop that tests NMI +and basic instruction timing (below) ran too many/too few times. If this +occurs, verify the timing of the following instructions and your PPU's +NMI interrupt timing. + +loop: + cpx zero-page + bne stop + inc zero-page + bne loop + inc zero-page + jmp loop +stop: + + +How the tests work +------------------ +All instructions are tested using a common framework which runs the +instruction in an infinite loop. Once the loop is eventually interrupted +by NMI, the number of times the loop ran is cross-referenced with a +table to determine how many clocks the instruction used. For normal +timing, instructions which use some form of indexed addressing reference +address $0xFD and X and Y are set to 2, which is just shy of a page +cross ($FD+2=$FF). To test page crossing timing, X and Y are set to 3, +causing a page crossing for relevant instructions ($FD+3=$100). Not all +instructions add an extra clock when a page is crossed, so this test +reveals missing and extra page crossing penalties. + +Some instructions require special handling. JMP and JSR are tested by +jumping to the next instruction. RTS and RTI are handled by filling the +stack with the value $02 and having the next instruction of the loop be +at address $0202 (for RTI) or $0203 (for RTS, since it adds one to the +return address). BRK is handled by setting the IRQ vector to $0202, the +address of the next instruction in the loop after BRK. The trickiness of +these special cases might reveal non-timing problems in an emulator. + + +Instruction timing +------------------ +The following unofficial instructions have an extra clock added for page +crossing and use the indicated addressing mode: + +Absolute, X: $1C $3C $5C $7C $DC $FC +Absolute, Y: $BB $BF +Indirect, Y: $B3 + +These are the tables the test uses. Since it passes on a NES, the values +are pretty much guaranteed correct. + +No page crossing: + + 0 1 2 3 4 5 6 7 8 9 A B C D E F + -------------------------------- + 7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6 | 0 + 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 | 1 + 6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6 | 2 + 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 | 3 + 6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6 | 4 + 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 | 5 + 6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6 | 6 + 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 | 7 + 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 | 8 + 0,6,0,6,4,4,4,4,2,5,2,5,5,5,5,5 | 9 + 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 | A + 0,5,0,5,4,4,4,4,2,4,2,4,4,4,4,4 | B + 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 | C + 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 | D + 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 | E + 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 | F + +Page crossing: + + 0 1 2 3 4 5 6 7 8 9 A B C D E F + -------------------------------- + 7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6 | 0 + 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 | 1 + 6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6 | 2 + 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 | 3 + 6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6 | 4 + 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 | 5 + 6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6 | 6 + 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 | 7 + 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 | 8 + 0,6,0,6,4,4,4,4,2,5,2,5,5,5,5,5 | 9 + 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 | A + 0,6,0,6,4,4,4,4,2,5,2,5,5,5,5,5 | B + 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 | C + 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 | D + 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 | E + 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 | F + +-- +Shay Green diff --git a/cpu_timing_test6/source/console.a b/cpu_timing_test6/source/console.a new file mode 100644 index 0000000..38cdc5b --- /dev/null +++ b/cpu_timing_test6/source/console.a @@ -0,0 +1,108 @@ +; Simple text console using NES PPU. + +console_pos = $7f2 +console_pos_h = $7f3 + +; Print char A to console +; Preserved: A, X, Y +print_char: + jsr wait_vbl ; wait for safe access +print_char_no_wait: + pha + lda console_pos_h + sta $2006 + inc console_pos + lda console_pos + sta $2006 + lda #0 ; restore scroll + sta $2005 + sta $2005 + pla + sta $2007 + rts + .code + +; Go to next line +; Preserved: A, X, Y +console_newline: + pha + lda console_pos + and #$e0 + clc + adc #$21 + sta console_pos + lda console_pos_h + adc #0 + sta console_pos_h + pla + rts + .code + +; Initialize console +init_console: + lda #$81 + sta console_pos + lda #$20 + sta console_pos_h + + jsr wait_vbl ; init ppu + lda #0 + sta $2000 + sta $2001 + + lda #$3f ; load palette + jsr set_vpage + lda #15 ; bg + ldx #48 ; fg + ldy #8 +pal: sta $2007 + stx $2007 + stx $2007 + stx $2007 + dey + bne pal + + lda #$02 ; load tiles + jsr set_vpage + lda #chr_data.lsb + sta <$f0 + lda #chr_data.msb + sta <$f1 + ldy #0 + lda #59 ; 59 chars in data + sta <$f2 +chr_loop: + ldx #8 + lda #0 +: sta $2007 + dex + bne - + + ldx #8 +: lda ($f0),y + iny + sta $2007 + dex + bne - + + tya + bne + + inc <$f1 +: dec <$f2 + bne chr_loop + + lda #32 + jsr fill_nametable + + jsr wait_vbl ; enable ppu + lda #0 + sta $2005 + sta $2005 + lda #$0a + sta $2001 + rts + .code + +chr_data: + .incbin "chr.bin" + diff --git a/cpu_timing_test6/source/cpu_timing_test.asm b/cpu_timing_test6/source/cpu_timing_test.asm new file mode 100644 index 0000000..f5fd555 --- /dev/null +++ b/cpu_timing_test6/source/cpu_timing_test.asm @@ -0,0 +1,471 @@ +; Times all official and unofficial 6502 instructions except the +; 8 branch instructions (Bxx) and the 12 halt instructions (HLT). +; See readme.txt for operation and overview of algorithm used. + +counter = $10 ; number of iterations of test loop +nmi_flag = $12 ; tells NMI what to do +test_index = $13 ; opcode being tested +test_mode = $14 ; 0 = normal, $FE = page crossing +type_mask = $15 ; which subset of instructions to test +test_code = $200 ; test loop is copied here +test_code_page = $02 + +.org $202 + irq: + .code + +reset: + ; Standard NES init + sei + lda #0 + sta $2000 + sta $2001 + jsr wait_vbl + jsr wait_vbl + cld + + jsr init_console + lda #$A5 ; tell runtime that console is inited + sta $7F1 + + ; Print title + ldx #title_str.msb + ldy #title_str.lsb + jsr print_str + jsr console_newline + jsr console_newline + + ; Poll joypad to determine which tests to run + lda #1 + sta $4016 + lda #0 + sta $4016 + lda $4016 ; A button status + and #$01 + beq + + ldx #official_nop_str.msb + ldy #official_nop_str.lsb + lda #$70 + jmp set_type +: lda $4016 ; B button status + and #$01 + beq + + ldx #all_instrs_str.msb + ldy #all_instrs_str.lsb + lda #$30 + jmp set_type +: lda #$F0 + ldx #official_str.msb + ldy #official_str.lsb +set_type: + sta type_mask + jsr print_str + jsr console_newline + jsr console_newline + + ; Disable APU IRQ + lda #$C0 + sta $4017 + + ; Start NMI + lda #0 + sta nmi_flag + lda #$80 + sta $2000 + + ; Be sure basic NMI timing is correct + lda #$F7 + sta counter + 1 + lda #$18 + sta counter + ldx #255 + stx nmi_flag +: cpx nmi_flag + beq - + dex +: cpx nmi_flag + bne check_nmi_time + inc counter + bne - + inc counter + 1 + jmp - +check_nmi_time: + lda counter + 1 + bne nmi_time_wrong + lda counter + cmp #12 + bcs nmi_time_wrong + + ; Begin tests + lda #2 + sta test_mode + ldx #0 + jmp test_loop + +nmi_time_wrong: + lda #0 + sta $2000 + ldx #nmi_time_str.msb + ldy #nmi_time_str.lsb + jsr print_str +error_beep_exit: + lda #1 + jsr debug_beeps + jmp forever + .code + + ; Print current opcode +print_opcode: + ldx #error_str.msb + ldy #error_str.lsb + jsr print_str + lda test_index + jsr print_a + lda test_mode + cmp #2 + beq + + ldx #cross_str.msb + ldy #cross_str.lsb + jsr print_str +: jsr console_newline + jsr console_newline + rts + .code + + ; NMI handler +: rti +nmi: dec nmi_flag + bmi - + beq check_time + + ; Restore overwritten stack values to $02 + pla + pla + pla + lda #$02 + pha + pha + pha + + ; Run test loop until next NMI interrupts it + lda test_mode + tay + tax + jmp test_code + +error: + lda #0 + sta $2000 + jsr print_opcode + ldx #unknown_str.msb + ldy #unknown_str.lsb + jsr print_str + jsr console_newline + jsr console_newline + lda counter + 1 + ldy counter + jsr print_ay + jmp error_beep_exit + +clock_table: ; doubled entries are to subtract value greater than $FF + .db $A5, $A5, $87, $86, $E1, $BE, $A2, $8D, $7C, $6D, $08 +clock_times: + .db $01, $00, $02, $00, $03, $04, $05, $06, $07, $08, $09 + + ; Calculate number of clocks instruction took +check_time: + cld ; avoid buggy NES emulator breaking test + lda counter + ldx counter + 1 + ldy #11 +clock_loop: + dey + bmi error + sec + sbc clock_table,y + bcs no_carry + dex +no_carry: + cpx #0 + bmi error + bne clock_loop + cmp #12 + bcs clock_loop + + lda clock_times,y + beq error + + ; Compare result with correct timing + ldx test_index + ldy test_mode + cpy #2 + bne + + cmp instr_times,x + beq next_instr + ldy instr_times,x + jmp print_error +: cmp instr_times_cross,x + beq next_instr + ldy instr_times_cross,x + + ; Print measured and correct times +print_error: + sta <2 + sty <3 + lda #0 + sta $2000 + + jsr print_opcode + + ldx #time_str.msb + ldy #time_str.lsb + jsr print_str + lda <2 + ora #$30 + jsr print_char + jsr console_newline + jsr console_newline + + ldx #correct_str.msb + ldy #correct_str.lsb + jsr print_str + lda <3 + ora #$30 + jsr print_char + jmp error_beep_exit + + ; Report success +done: lda #0 + sta $2000 + ldx #passed_str.msb + ldy #passed_str.lsb + jsr print_str + lda #2 + jsr debug_beeps + jmp forever + +next_instr: + ; Next instruction +: inx + bne test_loop + + ; Toggle between normal and page crossing + lda test_mode + eor #1 + sta test_mode + cmp #2 + beq done +test_loop: + lda instr_types,x + and type_mask ; skip instructions not being tested + bne - + stx test_index + + ; Copy test_code to RAM + lda instr_types,x ; get instr length + and #$07 + tay + lda test_addrs_lsb - 1,y + sta <0 + lda test_addrs_msb - 1,y + sta <1 + ldy #0 + txa +: sta test_code,y + iny + lda (0),y + cpy #16 + bne - + + ; Special case for JSR and JMP + cpx #$20 + beq jsr_jmp + cpx #$4C + bne + +jsr_jmp: + lda #$02 ; change address to $0203 + sta test_code + 2 + lda #$03 + sta test_code + 1 +: + ; Set zero-page values so the addressing modes use the following + ; when X and Y = $02/$03 + ; zp $FD + ; zp,x $FF/$00 + ; abs $03FD + ; abs,x/y $03FF/$0400 + ; (ind,x) $02FD/$0302 + ; (ind),y $02FF/$0300 + ; JMP (ind) $0203 + lda #$02 + sta <$00 + lda #$03 + sta <$01 + lda #$FD + sta <$FD + lda #$02 + sta <$FE + lda #$FD + sta <$FF + lda test_mode ; $A3 LAX (ab,X) will load X from these two + sta $02FD + sta $0302 + lda #$03 ; JMP ($03FD) will use this address + sta $03FD + lda #$02 + sta $03FE + + ; Fill stack with the value $02 (for RTS/RTI test) + ldx #$FF + txs + inx + lda #$02 +: pha + inx + bne - + + ; Load timer with -$6C4 + lda #$F9 + sta counter + 1 + lda #$3C + sta counter + + ; Tell NMI to run test code + lda #2 + sta nmi_flag +: cmp nmi_flag + beq - + jmp error + .code + +test_1: +: nop + inc counter + bne - + inc counter + 1 + jmp test_code + +test_2: +: sta <$FD + inc counter + bne - + inc counter + 1 + jmp test_code + +test_3: +: sta $03FD + inc counter + bne - + inc counter + 1 + jmp test_code + +test_addrs_lsb: + .db test_1.lsb, test_2.lsb, test_3.lsb +test_addrs_msb: + .db test_1.msb, test_2.msb, test_3.msb + .code + +; $4n = unofficial NOPs and $EB equivalent of SBC #imm +; $4n = all other unofficial opcodes +; $0n = official opcodes +; -1 = not tested +; n = instruction length +instr_types: + ; 0 1 2 3 4 5 6 7 8 9 A B C D E F + .db 2, 2, -1,$42,$82, 2, 2,$42, 1, 2, 1,$42,$83, 3, 3,$43 ; 0 + .db -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; 1 + .db 3, 2, -1,$42, 2, 2, 2,$42, 1, 2, 1,$42, 3, 3, 3,$43 ; 2 + .db -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; 3 + .db 2, 2, -1,$42,$82, 2, 2,$42, 1, 2, 1,$42, 3, 3, 3,$43 ; 4 + .db -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; 5 + .db 3, 2, -1,$42,$82, 2, 2,$42, 1, 2, 1,$42, 3, 3, 3,$43 ; 6 + .db -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; 7 + .db $82, 2,$82,$42, 2, 2, 2,$42, 1,$82, 1,$42, 3, 3, 3,$43 ; 8 + .db -1, 2, -1,$42, 2, 2, 2,$42, 1, 3, 1,$43,$43, 3,$43,$43 ; 9 + .db 2, 2, 2,$42, 2, 2, 2,$42, 1, 2, 1,$42, 3, 3, 3,$43 ; A + .db -1, 2, -1,$42, 2, 2, 2,$42, 1, 3, 1,$43, 3, 3, 3,$43 ; B + .db 2, 2,$82,$42, 2, 2, 2,$42, 1, 2, 1,$42, 3, 3, 3,$43 ; C + .db -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; D + .db 2, 2,$82,$42, 2, 2, 2,$42, 1, 2, 1,$82, 3, 3, 3,$43 ; E + .db -1, 2, -1,$42,$82, 2, 2,$42, 1, 3,$81,$43,$83, 3, 3,$43 ; F + ; Bxx HLT + +; Clocks when no page crossing occurs +instr_times: + ; 0 1 2 3 4 5 6 7 8 9 A B C D E F + .db 7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6 ; 0 + .db 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; 1 + .db 6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6 ; 2 + .db 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; 3 + .db 6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6 ; 4 + .db 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; 5 + .db 6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6 ; 6 + .db 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; 7 + .db 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 ; 8 + .db 0,6,0,6,4,4,4,4,2,5,2,5,5,5,5,5 ; 9 + .db 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 ; A + .db 0,5,0,5,4,4,4,4,2,4,2,4,4,4,4,4 ; B + .db 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 ; C + .db 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; D + .db 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 ; E + .db 0,5,0,8,4,4,6,6,2,4,2,7,4,4,7,7 ; F + +; Clocks when page crossing occurs +instr_times_cross: + ; 0 1 2 3 4 5 6 7 8 9 A B C D E F + .db 7,6,0,8,3,3,5,5,3,2,2,2,4,4,6,6 ; 0 + .db 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; 1 + .db 6,6,0,8,3,3,5,5,4,2,2,2,4,4,6,6 ; 2 + .db 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; 3 + .db 6,6,0,8,3,3,5,5,3,2,2,2,3,4,6,6 ; 4 + .db 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; 5 + .db 6,6,0,8,3,3,5,5,4,2,2,2,5,4,6,6 ; 6 + .db 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; 7 + .db 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 ; 8 + .db 0,6,0,6,4,4,4,4,2,5,2,5,5,5,5,5 ; 9 + .db 2,6,2,6,3,3,3,3,2,2,2,2,4,4,4,4 ; A + .db 0,6,0,6,4,4,4,4,2,5,2,5,5,5,5,5 ; B + .db 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 ; C + .db 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; D + .db 2,6,2,8,3,3,5,5,2,2,2,2,4,4,6,6 ; E + .db 0,6,0,8,4,4,6,6,2,5,2,7,5,5,7,7 ; F + +title_str: + .db "6502 TIMING TEST (16 SECONDS)",0 +official_str: + .db "OFFICIAL INSTRUCTIONS ONLY",0 +official_nop_str: + .db "OFFICIAL + NOP",0 +all_instrs_str: + .db "OFFICIAL + UNDOCUMENTED",0 +passed_str: + .db "PASSED",0 +error_str: + .db "FAIL OP :",0 +cross_str: + .db "WITH PAGE CROSS",0 +time_str: + .db "EMULATOR: ",0 +correct_str: + .db "CORRECT : ",0 +unknown_str: + .db "UNKNOWN ERROR",0 +nmi_time_str: + .db "BASIC TIMING WRONG",0 + +; Prints string at address XY +print_str: + stx <1 + sty <0 + ldy #0 + lda (0),y + jsr print_char + iny + lda (0),y +: jsr print_char_no_wait + iny + lda (0),y + bne - + rts + .code + diff --git a/cpu_timing_test6/source/debug.a b/cpu_timing_test6/source/debug.a new file mode 100644 index 0000000..b53f49b --- /dev/null +++ b/cpu_timing_test6/source/debug.a @@ -0,0 +1,156 @@ +; Simple debugging utilities for reporting events and state. +; Text output is sent to debug_char and debug_char_nowait. + +; Beep A times. Made to require minimal features from APU. +debug_beeps: +beep_loop: + pha + + lda #1 ; set up square 1 + sta $4015 + sta $4003 + sta $4001 + sta $4002 + + lda #$0f ; fade volume +: pha + eor #$30 + sta $4000 + lda #8 + jsr delay_msec + pla + clc + adc #-1 + bpl - + + lda #0 + sta $4015 ; silence square for a bit + lda #120 + jsr delay_msec + + pla + clc + adc #-1 + bne beep_loop + rts + .code + +; Print indicated register to console as $hh +; Preserved: A, X, Y, P +print_a: + php + jsr debug_byte + plp + rts + .code + +print_x: + php + pha + txa + jsr debug_byte + pla + plp + rts + .code + +print_y: + php + pha + tya + jsr debug_byte + pla + plp + rts + .code + +print_s: + php + pha + txa + pha + tsx + txa + jsr debug_byte + pla + tax + pla + plp + rts + .code + +print_p: + php + pha + php + pla + jsr debug_byte + pla + plp + rts + .code + +print_ay: + php + pha + lda #36 + jsr debug_char + pla + pha + jsr hex_byte + tya + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + plp + rts + .code + +print_newline: + jmp debug_newline + .code + +; Print address YA to console as $hhhh +; Preserved: A, X, Y +debug_addr: + pha + lda #36 ; '$' + jsr debug_char + tya + jsr hex_byte + jmp debug_byte_impl + .code + +; Print byte A to console as $hh +; Preserved: A, X, Y +debug_byte: + pha + lda #36 ; '$' + jsr debug_char +debug_byte_impl: + pla + pha + jsr hex_byte + lda #32 ; ' ' + jsr debug_char_no_wait + pla + rts + +hex_byte: + pha + lsr a + lsr a + lsr a + lsr a + jsr nybble + pla + and #$0f +nybble: + cmp #10 + bcc not_letter + adc #6 ; relies on carry being set +not_letter: + adc #$30 + jmp debug_char_no_wait + .code diff --git a/cpu_timing_test6/source/delays.a b/cpu_timing_test6/source/delays.a new file mode 100644 index 0000000..0a5f2cb --- /dev/null +++ b/cpu_timing_test6/source/delays.a @@ -0,0 +1,122 @@ +; Delays specified in milliseconds, tenths of a millisecond, +; tens of milliseconds, and CPU clocks. + +; TODO: delay loops that take only a single count + +; Delay for almost A milliseconds (A * 0.999009524 msec) +; Preserved: X, Y +delay_msec: + pha ; 3 + lda #253 ; 2 + sec ; 2 +delay_msec_: + nop ; 2 + adc #-2 ; 2 + bne delay_msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_msec ; 3 + rts + .code + +; Delay for almost 'A / 10' milliseconds (A * 0.099453968 msec) +; Preserved: X, Y +delay_01msec: + pha ; 3 + lda #18 ; 2 + sec ; 2 +delay_01msec_: + nop ; 2 + nop ; 2 + adc #-2 ; 2 + bne delay_01msec_ ; 3 + ; -1 + pla ; 4 + clc ; 2 + adc #-1 ; 2 + bne delay_01msec ; 3 + rts + .code + +; Delay for almost A*10 milliseconds +; Preserved: X, Y +delay_10msec: + pha + lda #10 + jsr delay_msec + pla + clc + adc #-1 + bne delay_10msec + rts + .code + +; Delay n clocks +; Preserved: P, A, X, Y +delay_32: nop +delay_30: nop +delay_28: nop +delay_26: nop +delay_24: nop +delay_22: nop +delay_20: nop +delay_18: nop +delay_16: nop +delay_14: nop +delay_12: rts + +delay_33: nop +delay_31: nop +delay_29: nop +delay_27: nop +delay_25: nop +delay_23: nop +delay_21: nop +delay_19: nop +delay_17: beq + ; 5 +: bne + +: rts ; 6 + .code + +; Delay (5 * A + 6) * Y + 7 + n clocks. Use delay_ya +; command-line tool to generate proper code to call this. +delay_ya11: + .db $a2 ; 1 ldx #imm +delay_ya10: + .db $a2 ; 1 ldx #imm +delay_ya9: + .db $a2 ; 1 ldx #imm +delay_ya8: + .db $a2 ; 1 ldx #imm +delay_ya7: + .db $a2 ; 1 ldx #imm +delay_ya6: + .db $a2 ; 1 ldx #imm +delay_ya5: + .db $a2 ; 1 ldx #imm +delay_ya4: + .db $a2 ; 1 ldx #imm +delay_ya3: + .db $a2 ; 1 ldx #imm +delay_ya2: + .db $a2 ; 1 ldx #imm +delay_ya1: + .db $a6 ; 1 ldx zp +delay_ya0: + nop ; 2 +delay_ya: + ; 2 lda # + ; 2 ldy # + ; 6 jsr + tax ; *2 +delay_yax: + dex ; **2 + bne delay_yax ; **3 + ; *-1 + dey ; *2 + bne delay_ya ; *3 + ; -1 + rts ; 6 + .code diff --git a/cpu_timing_test6/source/ppu_util.a b/cpu_timing_test6/source/ppu_util.a new file mode 100644 index 0000000..9529a1e --- /dev/null +++ b/cpu_timing_test6/source/ppu_util.a @@ -0,0 +1,123 @@ + +; Clear VBL flag then wait for it to be set +; Preserved: A, X, Y +wait_vbl: + bit $2002 +: bit $2002 + bpl - + rts + .code + +; Set VRAM address to A * $100 +; Preserved: X, Y +set_vpage: + bit $2002 + sta $2006 + lda #0 + sta $2006 + rts + .code + +; Set VRAM address to A * $100 + X +; Preserved: A, X, Y +set_vaddr: + bit $2002 + sta $2006 + stx $2006 + rts + .code + +; Set X and Y scroll +; Preserved: A, X, Y +set_vscroll: + bit $2002 + stx $2005 + sty $2005 + rts + .code + +; Turn off NMI and disable BG and sprites +; Preserved: A, X, Y +disable_ppu: + pha + lda #0 + sta $2000 + sta $2001 + bit $2002 + sta $2006 + sta $2006 + pla + rts + .code + +; Set sprite memory to $ff +; Preserved: Y +clear_sprites: + lda #$ff + ldx #0 +: sta $2004 + dex + bne - + rts + .code + +; Clear/fill nametable with 0/A and clear attributes to 0 +clear_nametable: + lda #0 +fill_nametable: + pha + lda #$20 + jsr set_vpage + pla + ldx #240 +: sta $2007 + sta $2007 + sta $2007 + sta $2007 + dex + bne - + lda #0 + ldx #64 +: sta $2007 + dex + bne - + rts + .code + +; Clear/fill VRAM with 0/A +clear_vram: + lda #0 +fill_vram: + ldx #0 + ldy #$24 + bne fill_vram_ + +; Clear/fill CHR with 0/A +fill_chr1: + ldx #$10 + ldy #$10 + bne fill_vram_ + +fill_chr0: + ldx #0 + ldy #$10 + bne fill_vram_ + +clear_chr: + lda #0 +fill_chr: + ldx #0 + ldy #$20 +; Fill Y*$100 bytes of VRAM with A, starting at X*$100 +fill_vram_: + bit $2002 + stx $2006 + ldx #0 + stx $2006 +: sta $2007 + dex + bne - + dey + bne - + rts + .code diff --git a/cpu_timing_test6/source/runtime_rom.a b/cpu_timing_test6/source/runtime_rom.a new file mode 100644 index 0000000..9aa1ca8 --- /dev/null +++ b/cpu_timing_test6/source/runtime_rom.a @@ -0,0 +1,13 @@ +; Build as standalone NES ROM using console for output + + .include "runtime_rom_common.a" + +patch_reset_then_wait: +exit: jmp exit + + .default reset = main + + .org $fffa + .dw nmi + .dw reset + .dw irq diff --git a/cpu_timing_test6/source/runtime_rom_common.a b/cpu_timing_test6/source/runtime_rom_common.a new file mode 100644 index 0000000..321d462 --- /dev/null +++ b/cpu_timing_test6/source/runtime_rom_common.a @@ -0,0 +1,45 @@ + + .include "delays.a" + .include "console.a" + .include "debug.a" + .include "ppu_util.a" + +console_ready = $7f1 + +debug_char: + pha + lda #$a5 + cmp console_ready + beq + + sta console_ready + txa + pha + tya + pha + jsr init_console + pla + tay + pla + tax +: pla + jmp print_char + +debug_newline: + jsr console_newline + jmp console_newline + +debug_char_no_wait: + jmp print_char_no_wait + +init_runtime: +clear_console_ready: + lda #0 + sta console_ready + rts + +forever: + sei ; disable interrupts + lda #0 + sta $2000 + jsr clear_console_ready + jmp exit diff --git a/dmc_dma_during_read4/dma_2007_read.nes b/dmc_dma_during_read4/dma_2007_read.nes new file mode 100644 index 0000000000000000000000000000000000000000..845d36e2b6a0ab6755eab47cec1af5cb7691a5e4 GIT binary patch literal 32784 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 M8;EcIuytbd?@eX1+5i9m literal 0 HcmV?d00001 diff --git a/dmc_dma_during_read4/dma_4016_read.nes b/dmc_dma_during_read4/dma_4016_read.nes new file mode 100644 index 0000000000000000000000000000000000000000..e9cc2573afbe406ffe9f4e2c3745e2ed75712f21 GIT binary patch literal 32784 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 MAied|?wPHB16)&38~^|S literal 0 HcmV?d00001 diff --git a/dmc_dma_during_read4/source/common/ascii.chr b/dmc_dma_during_read4/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..0687d4ecdfe9d8b2cec319f0a6c8296b181c4dd3 GIT binary patch literal 2048 zcmeIyy^7p05C`z#3Rhye(uLV)P!$Xj%T=lJ5F!K@i8;0kE`-Z_j692qph{f1EFpvx z;i_W^DZ&;;m;Xqby}f;dKy-WjtPe|?k!_-v<*AmJtwhp(>E*cp^?y49Ef>OHbsWbW zkVs=1@guR_SkpL+uf7{ptA{rvcCWhr=?QBG0CA!?Sa~CK8Ek>1MC6khV7``?vSu;eAhH+jHPEi7u?n^dpfttJXBZk=U6r zCd4EzerdR0G}bQxbuk63uQiF&m!H$!og>kOFgI$#dPT&^v0nb$+6FaJg@{ECJ4aqc za#ijxy3ll*H0Cdw;r7F=-H_OiA*2vU#OC=&q8YsRgTeUXF@_N0k;LTv;(el*`dat2 zvHm^`o0GU3%LNh*r@zJg)pdh(B7b6t`(OKr@l~74jHBf;Q#howQ&?w z#c_VK92X+V@v+?gHGVqD{k)#&f_Hqr;)28E^Az*6=s)w|`fILNcPSmPpHM}s<9c-% z1`eIXwCegToNO6M-v^PeiBbW2tMj!;G%1JpMemO> z;(SH4M;|Bd&nk?L(UHjQi!c3br}f175s5I~;Q_Cfd1IYF;$6nujPWPSr)XP0Nn7vp z!DD=p2czVhSfa 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: X, Y +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + + +; Delays n clocks, from 2 to 16777215 +; Preserved: X, Y +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + .if (n) < 14 .and (n) <> 12 + delay_inline (n) + .elseif (n) < 27 + delay_unrolled (n) + .elseif <(n) = 0 + delay_256 (n) + .else + lda #<((n)-27) + jsr delay_a_25_clocks + delay_256 ((n)-27) + .endif +.endmacro + + +; Delays A+25 clocks (including JSR) +; Preserved: X, Y +.align 64 +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256+16 clocks (including JSR) +; Preserved: X, Y +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_clocks_: + pha + lda #256-19-22-16 + bne @first ; always branches +: pha + lda #256-19-22 +@first: jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536+16 clocks (including JSR) +; Preserved: X, Y +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_clocks_: + pha + lda #256-19-22-16 + bne @first +: pha + lda #256-19-22 +@first: jsr delay_a_25_clocks + lda #255 + jsr delay_256a_clocks_ + pla + clc + adc #-1 + bne :- + rts + +.macro delay_inline n + .if n = 7 .or n >= 9 + pha + pla + delay_inline (n-7) + .elseif n >= 3 .and n & 1 + lda <0 + delay_inline (n-3) + .elseif n >= 2 + nop + delay_inline (n-2) + .elseif n > 0 + .error "delay_short internal error" + .endif +.endmacro + +.macro delay_unrolled n + .if n & 1 + lda <0 + jsr delay_unrolled_-((n-15)/2) + .else + jsr delay_unrolled_-((n-12)/2) + .endif +.endmacro + + .res 7,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_256 n + .if >n + lda #>n + jsr delay_256a_clocks_ + .endif + .if ^n + lda #^n + jsr delay_65536a_clocks_ + .endif +.endmacro + diff --git a/dmc_dma_during_read4/source/common/macros.inc b/dmc_dma_during_read4/source/common/macros.inc new file mode 100644 index 0000000..ea54ba6 --- /dev/null +++ b/dmc_dma_during_read4/source/common/macros.inc @@ -0,0 +1,65 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name +.macro zp_res name,size + seg_data "ZEROPAGE",{name: .res size} +.endmacro + +.macro bss_res name,size + seg_data "BSS",{name: .res size} +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "STRINGS",{Addr: data} +.endmacro + +; If name isn't yet defined, defines it with value +.macro SET_DEFAULT name,value + .ifndef name + name=value + .endif +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro diff --git a/dmc_dma_during_read4/source/common/nes.inc b/dmc_dma_during_read4/source/common/nes.inc new file mode 100644 index 0000000..aff4389 --- /dev/null +++ b/dmc_dma_during_read4/source/common/nes.inc @@ -0,0 +1,35 @@ +; NES I/O locations and masks + +; Clocks per second +CLOCK_RATE = 1789773 +;CLOCK_RATE = 1662607 + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 diff --git a/dmc_dma_during_read4/source/common/print.s b/dmc_dma_during_read4/source/common/print.s new file mode 100644 index 0000000..60d1f8e --- /dev/null +++ b/dmc_dma_during_read4/source/common/print.s @@ -0,0 +1,194 @@ +; Prints values in various ways to output, including numbers and strings. + +newline = 10 + +; Prints indicated register to console as two hex chars and space +; Preserved: A, X, Y, P +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: X, Y +print_hex: + ; Update checksum + pha + jsr update_crc + pla + + ; Print high nibble + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + ; Print low nibble + and #$0F +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS it's a newline. +; Preserved: X, Y +print_char: + cmp #newline + beq :+ + pha + jsr update_crc + pla +: jmp print_char_ + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str + jsr_with_addr print_str_addr,{.byte str,0} +.endmacro + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: Y +print_dec: + ; Hundreds + cmp #100 + blt @tens + ldx #'0' +: sbc #100 + inx + cmp #100 + bge :- + jsr @digit + + ; Tens +@tens: cmp #10 + blt @ones + ldx #'0' +: sbc #10 + inx + cmp #10 + bge :- + jsr @digit + + ; Ones +@ones: ora #'0' + jmp print_char + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y +.macro print_cc cond,yes,no + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla +.endmacro diff --git a/dmc_dma_during_read4/source/common/serial.s b/dmc_dma_during_read4/source/common/serial.s new file mode 100644 index 0000000..59fbebd --- /dev/null +++ b/dmc_dma_during_read4/source/common/serial.s @@ -0,0 +1,43 @@ +; Serial output at 57600 bits/sec on controller port 2 +; +; Uses stack and register A only, and doesn't mind page crossing +; (uses subroutines instead of loops). + +; Initializes serial. If this isn't done, first byte sent to +; PC might be corrupt. +; Preserved: X, Y +serial_init: + sec + lda #$FF + bne serial_write_ ; always branches + + +; Writes byte A to serial +; Preserved: X, Y +serial_write: + clc +serial_write_: + jsr @bit ; start + nop ; TODO: why the extra delay? + jsr @first ; bit 0 + jsr @bit ; bit 1 + jsr @bit ; bit 2 + jsr @bit ; bit 3 + jsr @bit ; bit 4 + jsr @bit ; bit 5 + jsr @bit ; bit 6 + jsr @bit ; bit 7 + sec ; 2 stop bit +@first: nop ; 4 + nop +@bit: ; 6 jsr + pha ; 3 + rol a ; 2 + and #1 ; 2 + sta JOY1 ; 4 + pla ; 4 + ror a ; 2 +.if CLOCK_RATE = 1789773 + nop ; 2 +.endif + rts ; 6 diff --git a/dmc_dma_during_read4/source/common/shell.inc b/dmc_dma_during_read4/source/common/shell.inc new file mode 100644 index 0000000..61fe108 --- /dev/null +++ b/dmc_dma_during_read4/source/common/shell.inc @@ -0,0 +1,434 @@ +; Program shell with text console. Included before user code. + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INC + .error "File included twice" + .end +.endif +SHELL_INC = 1 + + +; ******************************************* Prefix + +.segment "CODE2" + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E + +; RAM that isn't cleared by init routine +nv_ram = $7F0 + +; Macros and constants +.include "macros.inc" +.include "nes.inc" + +; Interrupt handlers are wrapped with these +.define BEGIN_NMI nmi: +.define END_NMI + +.define BEGIN_IRQ irq: +.define END_IRQ + +; Set undefined flags to 0, allowing simpler .if statements +SET_DEFAULT BUILD_NSF,0 +SET_DEFAULT BUILD_MULTI,0 +SET_DEFAULT BUILD_DEVCART,0 + +; Number of clocks devcart takes to jump to user reset +SET_DEFAULT DEVCART_DELAY,0 + + +; ******************************************* Libraries + +.include "delay.s" +.include "print.s" +.include "crc.s" +.include "testing.s" + +.if !BUILD_MULTI + .include "serial.s" +.endif + +; Sets up environment, calls main, then exits with code 0 +run_main: + ; Initialize libraries + jsr init_crc + + ; Establish consistent environment before + ; running main + jsr wait_vbl + lda #PPUMASK_BG0 + sta PPUMASK + delay 2370+24 + lda #$34 + pha + lda #0 + sta SNDMODE + tax + tay + clc + clv + plp + + jsr main + + ; Default to silent exit if main returns + lda #0 + ; FALL THROUGH + +; Exits program and prints result code if non-zero +exit: + ; Reset stack + ldx #$FF + txs + + ; Disable interrupts + sei + pha + jsr nmi_off + pla + + jmp exit_ + +; Reports internal error and exits program +internal_error: + print_str "Internal error" + lda #1 + jmp exit + + +.if BUILD_NSF || BUILD_MULTI || BUILD_DEVCART + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.else + .include "console.s" +.endif + + +; ******************************************* Single Test + +.if !BUILD_MULTI + +print_char_: + jsr console_print + jmp serial_write + +; Reset handler +.ifndef CUSTOM_RESET + reset = std_reset +.endif + +.macro init_nes + sei + cld + ldx #$FF + txs + + .if !BUILD_NSF + ; Init PPU + lda #0 + sta PPUCTRL + sta PPUMASK + .endif + + ; Clear RAM + lda #0 + ldx #7 ; last page + ldy #@ascii +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>@ascii_end + bne @page + +.pushseg +.rodata +@ascii: + .incbin "ascii.chr" +@ascii_end: +.popseg +.endif + + jsr console_init + jsr serial_init + jmp run_main + + +; Exit handler +exit_: + ; 0: "" + cmp #1 + jlt exit2 + + ; 1: "Failed" + bne :+ + print_str {newline,"Failed"} + jmp exit2 + + ; n: "Error n" +: pha + print_str {newline,"Error "} + jsr print_dec + pla + +exit2: +.if !BUILD_DEVCART + ; Be sure output is visible + pha + print_str {newline,newline,newline} + jsr console_show + pla + + ; Report audibly as well + jsr beep_bits +.else + ; Tell host to stop capturing serial + lda #$1A + jsr serial_write + delay_msec 400 +.endif + + ; Clear nv_ram + lda #0 + ldx #filename + sta addr+1 + jsr print_str_addr + jsr print_newline + rts + +.pushseg +.segment "STRINGS" +; Filename terminated with zero byte, or just zero byte +; if filename isn't available. +filename: + .incbin "ram:rom.nes" + .byte 0 +.popseg +.else +print_filename: + rts + +filename: + .byte 0 +.endif + + +; User code goes in main code segment +.segment "CODE" + nop diff --git a/dmc_dma_during_read4/source/common/sync_dmc.s b/dmc_dma_during_read4/source/common/sync_dmc.s new file mode 100644 index 0000000..157bda7 --- /dev/null +++ b/dmc_dma_during_read4/source/common/sync_dmc.s @@ -0,0 +1,159 @@ +; Synchronizes to DMC and times a piece of code + +; Synchronizes precisely with DMC timer +; Preserved: X, Y +; Time: 8 msec avg, 17 msec max +.align 64 +sync_dmc: + ; Setup + lda #$80 + sta $4010 + lda #0 + sta $4013 + sta SNDCHN + + ; Start twice (first will clear immediately) + lda #$10 + sta SNDCHN + nop + sta SNDCHN + + ; Coarse synchronize +: bit SNDCHN + bne :- + + ; DO NOT write to memory. It affects timing. + + nop ; 2 fine-tune: 2=OK 3=OK 4=fail + + ; Fine synchronize. 3421+4 clocks per iter + nop ; 2 + nop ; 2 + lda #226 ; 3391 delay + bne @first ; 3 +@wait: + lda #227 ; 3406 delay +@first: +: nop + nop + nop + nop + sec + sbc #1 + bne :- + ; 4 DMC wait-states + lda #$10 ; 2 + sta SNDCHN ; 4 + nop ; 2 + bit SNDCHN ; 4 + bne @wait ; 3 + + rts + + +; Returns in XA number of clocks elapsed since call to +; time_code_begin, MOD 3424. Unreliable if result is +; 3387 or greater. +; Time: 33 msec max +.align 64 +time_code_end: + ; Restart + lda #$10 + sta SNDCHN + nop + sta SNDCHN + + ; Rough sync + ldy #-$2C +@coarse: + nop + nop + bne :+ +: dey + bit SNDCHN + bne @coarse + + ; DO NOT write to memory. It affects timing. + + ; Fine sync + ldx #-$2 +@wait: + lda #$10 ; 2 + sta SNDCHN ; 4 + + lda #179 ; delay 3402 +: nop + nop + nop + nop + nop + nop + sec + sbc #1 + bne :- + + inx ; 2 + lda #$10 ; 2 + bit SNDCHN ; 4 + beq @wait ; 3 + + ;jsr print_y + ;jsr print_x + + ; Calculate result + ; XA = Y << 4 | X + stx <0 + + tya + lsr a + lsr a + lsr a + lsr a + tax + + tya + asl a + asl a + asl a + asl a + + clc + adc <0 + bcc :+ + inx +: + rts + + +; Begins timing section of code +; Preserved: A, X, Y, flags +; Time: 9 msec avg, 17 msec max +.align 32 +time_code_begin: + php + pha + txa + pha + tya + pha + + jsr sync_dmc + + nop + + ldx #163 ; 3396 delay + lda #3 +: dex + bne :- + sec + sbc #1 + bne :- + + pla + tay + pla + tax + pla + plp + + rts diff --git a/dmc_dma_during_read4/source/common/testing.s b/dmc_dma_during_read4/source/common/testing.s new file mode 100644 index 0000000..8bb0741 --- /dev/null +++ b/dmc_dma_during_read4/source/common/testing.s @@ -0,0 +1,162 @@ +; Utilities for writing test ROMs + +zp_res test_code,1 ; code of current test +zp_res test_name,2 ; address of name of current test, or 0 of none + + +; Reports that all tests passed +tests_passed: +.if !BUILD_MULTI + jsr print_filename + print_str "Passed" +.endif + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + lda test_code + + ; Treat 0 as 1, in case it wasn't ever set + bne :+ + lda #1 + sta test_code +: + ; If code >= 2, print name + cmp #2 + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: +.if !BUILD_MULTI + jsr print_filename +.endif + ; End program + lda test_code + jmp exit + + +; Sets current test code and optional name. Also resets +; checksum. +.macro set_test code,name + pha + lda #code + jsr set_test_ + .local Addr + lda #Addr + sta ". + +Several routines are available to print values and text to the console. +Most update a running CRC-32 checksum which can be checked with +check_crc, allowing ALL the output to be checked very easily. If the +checksum doesn't match, it is printed, so you can run the code on a NES +and paste the correct checksum into your code. + +The default is to build an iNES ROM, with other build types that I +haven't documented (devcart, sub-test of a multi-test ROM, NSF music +file). My nes.cfg file puts the code at $E000 since my devcart requires +it, and I don't want the normal ROM to differ in any way from what I've +tested. + +Library routines are organized by function into several files, each with +short documentation. Each routine may also optionally list registers +which are preserved, rather than those which are modified (trashed) as +is more commonly done. This is because it's best for the caller to +assume that ALL registers are NOT preserved unless noted. + +Some macros are used to make common operations more convenient. The left +is equivalent to the right: + + Macro Equivalent + ------------------------------------- + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + zp_byte name .zeropage + name: .res 1 + .code + + zp_res name,n .zeropage + name: .res n + .code + + bss_res name,n .bss + name: .res n + .code + + for_loop routine,begin,end,step + calls a routine with A set to successive values diff --git a/dmc_tests/buffer_retained.nes b/dmc_tests/buffer_retained.nes new file mode 100644 index 0000000000000000000000000000000000000000..e205aea70912838b69c2b84e3cf66edf263012b5 GIT binary patch literal 16400 zcmeIuKMp}b5XbR-XmtKWh=L_rYUMN%648i6`ATk}rJoBZbz8hUID#XXR;8uz@DvUp zQGI{S?93)J$!9j2HzP+7KmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 z0D-T-;>V;vW)qw`e@OR1v@S_qUVTlHwrNQcZ(5P0V_KDE@LHB|_XYD^%jzZ@O$Rm( zmEq;Gew^;B#yUM+<3`WD+gmJd8->zqVYW4v&ozyF*r}5cX-?jsMa|1}VqXW zg$2RudmuOfmH#oj-)?4h^Lu%Iy-Nax00IagfB*srAb$~2_yG6Yg+sC@c z2S2X!_1Jap0UR=F7tIN zr*CKyZJ|Ld(JQI$8(Nde)X!Y(5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0 Q009IL_-BEhuYQOA2jT0T2mk;8 literal 0 HcmV?d00001 diff --git a/dmc_tests/status.nes b/dmc_tests/status.nes new file mode 100644 index 0000000000000000000000000000000000000000..541ce6f49d9548dba66a15cee1385e82fc72c1b9 GIT binary patch literal 16400 zcmeIuA#MUu5XSMhP*VpqWJv{mCCDl;$T1`p1k*G@t}Hje7C#q2;zsNpIKm!*v8YJ@+EBT9SOY-R2k^I&5Nfs8hEmp<{j|0Ed z)nzmr`@3}}hr{x(D8G8ks`$xz!*FhonS}4eTJ^%Wt`xuZ>b7KZJ*i2wwFa?78&dzU zM{UY%?l&4<2q1s}0tg_000IagfB*srAbcl(i_ E0Nu}(N&o-= literal 0 HcmV?d00001 diff --git a/dmc_tests/status_irq.nes b/dmc_tests/status_irq.nes new file mode 100644 index 0000000000000000000000000000000000000000..1a31ad510c3d1d2ba85021e75a23a89854970aae GIT binary patch literal 16400 zcmeIuA&vqu6vpw+g2Bx~2xP@>A!szXXGjnP!)`KiB-{WA_;&#$u43-M5jXR=c^;Pp-E7xUt zG#T1B)CZ^2;&!;s+l%~gPTM{A7%!=;)=?7TqOp9Dj*IqKilVtZKi0^HjXDXDe#qlm zO)E0_wHFXO1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**{#D@H_Q$^6 E0r*>(6951J literal 0 HcmV?d00001 diff --git a/dpcmletterbox/CHANGES.txt b/dpcmletterbox/CHANGES.txt new file mode 100644 index 0000000..e6ae9cb --- /dev/null +++ b/dpcmletterbox/CHANGES.txt @@ -0,0 +1,16 @@ +_____________________________________________________________________ +v2 (2010-08-16): + * NMI handler no longer uses the Y register without saving it. + * Lots more comments in the NMI handler. + * Vertical mirroring to illustrate how this effect would fit into a + real game. + * Reads the controllers during a period that is guaranteed + glitch-free, then lets the player move the camera. + * Actually sets the sample address so that the length-17 loop + isn't playing garbage. + * Priming playback no longer raises an IRQ. + +_____________________________________________________________________ +v1 (2010-08-12): + * initial release + diff --git a/dpcmletterbox/NROM.ini b/dpcmletterbox/NROM.ini new file mode 100644 index 0000000..0cee01a --- /dev/null +++ b/dpcmletterbox/NROM.ini @@ -0,0 +1,31 @@ +# +# Linker script for NROM games +# Copyright 2010 Damian Yerrick +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty +# provided the copyright notice and this notice are preserved. +# This file is offered as-is, without any warranty. +# +MEMORY { + ZP: start = $10, size = $f0, type = rw; + # use first $10 zeropage locations as locals + HEADER: start = 0, size = $0010, type = ro, file = %O, fill=yes, fillval=$00; + RAM: start = $0300, size = $0500, type = rw; + ROM7: start = $C000, size = $4000, type = ro, file = %O, fill=yes, fillval=$FF; +} + +SEGMENTS { + INESHDR: load = HEADER, type = ro, align = $10; + ZEROPAGE: load = ZP, type = zp; + BSS: load = RAM, type = bss, define = yes, align = $100; + DMC: load = ROM7, type = ro, align = 64, optional = yes; + CODE: load = ROM7, type = ro, align = $100; + RODATA: load = ROM7, type = ro, align = $100; + VECTORS: load = ROM7, type = ro, start = $FFFA; +} + +FILES { + %O: format = bin; +} + diff --git a/dpcmletterbox/README.txt b/dpcmletterbox/README.txt new file mode 100644 index 0000000..075c08f --- /dev/null +++ b/dpcmletterbox/README.txt @@ -0,0 +1,66 @@ +DPCM Letterbox + +This NES program demonstrates abusing the NTSC NES's sampled sound +playback hardware as a scanline timer to split the screen twice +without needing to use a mapper-generated IRQ. + +== How it works == + +The NES has sample playback hardware that can trigger when it +finishes playing a differential pulse code modulated (DPCM) waveform. +There are eight samples to a byte, and a waveform is 16n + 1 bytes +long. There are sixteen valid rates for sample playback, numbered 0 +to 15, and DPCM rate 15 has 54 CPU cycles per sample, or 54*3*8=1296 +PPU dots per byte, or 3.8 scanlines per byte. But the time between +NMI and the first sample data fetch drifts from frame to frame. +So at the start of the frame, the program has to measure exactly +how far apart the CPU and PPU are, and then the IRQ handler has to +waste a corresponding amount of time before doing raster effects. + +This version has a slight visual artifact in the top overscan region +because it uses sprite 0 as a timing reference so that it can be +used even with an NMI handler whose execution time in CPU cycles +varies. But a game with a cycle-timed NMI handler would not need +sprite 0; it could use the end of the NMI handler as a reference. + +Reset handler: +Set up screen data +Enable IRQ +Wait forever + +NMI handler: +Set up sprite 0 hit at top of screen +Disable sample playback +Turn on background rendering at a fixed scroll position +Wait for Sprite 0 off and on +Turn off background rendering +Clear number of elapsed IRQs +Enable playback and IRQ +Measure time until IRQ in 8-cycle units +Convert this to an amount of time to waste +Read the controllers +Compute next scroll value +Return + +IRQ handler: +Add 1 to elapsed IRQs +Restart sample playback +If elapsed IRQs is at first threshold: + Waste time in 8-cycle units + Turn on background rendering +If elapsed IRQs is at second threshold: + Switch next sample playback to 17-byte mode +If elapsed IRQs is at third threshold: + Waste time in 8-cycle units + Turn off background rendering + +== Legal == + +The following license applies to the source code, binary code, and +this manual: + +Copyright 2010 Damian Yerrick +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without any warranty. diff --git a/dpcmletterbox/dpcmletterbox.nes b/dpcmletterbox/dpcmletterbox.nes new file mode 100644 index 0000000000000000000000000000000000000000..b8945b1eec89a7185a510df98969072ad32a5f50 GIT binary patch literal 24592 zcmeHPZ)jWB6+eD{c~(5(z4~8XGm%`1@tk7HYcSqxCc0PU&2u|7^|~-zx2&=vYZ6r~ z;i#?XgqC@6HiG4a&<|y_Pyz~5ARqQEA69sg)aTeUZ7ACaWPePyI;Mo64{iyIQFhLK zPpzA}Y#;iewD%ytd)_(soOkc9WC`1d(4u$ z~gNB1nXDsLr7_!0WGva(d{Hp_d_40~qo;A89#_fp~9yi;rLl7sq1g6^*bkfmRe3r zWhME?sUB?a&h?Pfvn?mJgXZ$V+FifwG$-};sJ%j`{<2WeiC zE@S6;g zNpG>*9IVr`W&NbI6Y6cH)^jp@xLT66q&X*-T9Yu>T9TH!Prrx5D<3ZcE8X|@ef3Rz zi?}1jaJ>nCK+|^o)a5H5CbT3wpGbnM~`7Wj1i^$V@twV#zGLoXjRzHZjExrl+$gWMh-D zeeA_!Q^#OB&5llHGE+0`@uz?E5Mz%|AInZn#sa(v4`MrI?bY!F?7w2Oiq70 z%VKHvo&9=-9T9y!dH3n{72QXAMpPF@?_wv-^ zWaS^c1tp$3oywsk_Uh}eCA2-mJBQ;DfZqEb+1F1UK{aht%bRh`1`<^s)H z_4H$5P@o&&VoZ?~zmW+Q$WCQZ-U5srmY{nN>Ql1f4=C``5a}f)?Ab@+amQ%@m=;o@ zpeWcEK$hhWY5@w-$XM9KHe}{viUKh{zEAACV{ql>aexD1`(h0zVsZVf(;WY1V;*D# zpmBl#00VULs;PR8S{$k6SZa#TKV{$$Qttd6%Nw6+fg??m-kEhqdLcYURtJ>WMQUBz ziuqQ4dp-XECRDSh)Dg_^o{AR91!T_Z-t1iu&1eT9=%ETt5q2;$LAQ5AQ}!5)oA_Oi z$WwfLelI=&T(|u58h)R51Z|?^U;H~jFdn)#SL}XcjLZLWDB^uVAD8t!F0~wHd0#C5 zpT$KR4GSZocU}AXM#bJ-2DlxzM)HN|=(|UV# z)zzD>z5D%tdf#8z`|Ia0UpGQX1;<%)sD2>-FY*I`3mpj{fOW*@ zb9r7=0fP#HfNCfnFHBUg-Kdh?L@0E_wZD!dZoC7q7>&+6J+b`Gb;J_j z(8vhZRHCixdv^A->$|>T*D4sZ+u;!mT77kuPm z@7SN%udIC3h7-(~0vJ3=9+@{@0o+tA4Lcc~w=E-qfT`ttzqhDPGCK3yJ1UjT!K!TlgE)oYR5 zUc~RQ$DV!mmA%i;{G0Tz4EIN=MR~k{dmF{SFNkd+?$E4)eNB8xPitk7^xM?G&4wMI zlHE8l@6+^*72>~MbW?x_-QpnsYxIt9RDj3rqEGs2jTel#rCH~) za$^1^-gz|=iR23w*qFTIv1rsPY}%*@MPpaFo*r1DIbn&mASFFtf&Kge4hlgDwe5x@LVF?b`8j#}lo3>Yl7;(81R#)$Su?X}a42P<(ogZ`s@{o7`!x&EtY|MB|IP)1;WU>t~$y~jURjz)z{ z0B+*?uU7x`H)JO!Ca!TAKI}~#Khafp{KS4TeteF$_l0C+c=qit29wWMn z@f)XdMB;n#Q{)|O9KRhqB+_sFKG~A2X-m93l;Ud=f>uNe_&Bfon)@@(I8W;zBbH-q z$Z*e>gZ=%K=A8U1D=VB?v86vG7{XalFu7BPV-{GVNsD)dWp$?>Y+*QN6#bxx67TsFWcD-MI)UO3FzQf%CzmMWe zw7GKJZGWTbL1mM8wJ)0IGR-XjfX7TE%1_bs=-zj)6I$m?~-n>_Q)7%08cnn3N zW2ZlW_WX?_IsDTwH`?z7x#{7HX({ss2?PWJUsnX0cRq3d$I>hA|F}!hO2EC$a94!5 z|Ko1#oi*qvy_Ij)jIFZI{`-!&|KqV#-2d^&Ebjk!JkEW(zKHujo%zN6AG1Q-|Hb`Z L-2cDO`~QCd;y0 $@ + +dpcmletterbox.chr: $(objdir)/ac16.chr + cat $(objdir)/ac16.chr $(objdir)/ac16.chr > $@ + diff --git a/dpcmletterbox/obj/nes/index.txt b/dpcmletterbox/obj/nes/index.txt new file mode 100644 index 0000000..4ff5b7e --- /dev/null +++ b/dpcmletterbox/obj/nes/index.txt @@ -0,0 +1 @@ +Compiled files get put here. diff --git a/dpcmletterbox/src/nes.h b/dpcmletterbox/src/nes.h new file mode 100644 index 0000000..f4ee2d0 --- /dev/null +++ b/dpcmletterbox/src/nes.h @@ -0,0 +1,38 @@ +; Copyright 2010 Damian Yerrick +; +; Copying and distribution of this file, with or without +; modification, are permitted in any medium without royalty +; provided the copyright notice and this notice are preserved. +; This file is offered as-is, without any warranty. + +PPUCTRL = $2000 + VBLANK_NMI = $80 +PPUMASK = $2001 + TINT_B = $80 + TINT_G = $40 + TINT_R = $20 + OBJ_CLIP = $10 + OBJ_ON = $14 + BG_CLIP = $08 + BG_ON = $0A + LIGHTGRAY = $01 +PPUSTATUS = $2002 + ; N is NMI_occurred, used primarily for PPU warmup wait after reset + ; V is sprite 0 hit status, cleared at end of vblank +OAMADDR = $2003 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +DMCFREQ = $4010 + DMC_IRQMODE = $80 + DMC_LOOPMODE = $40 +DMCADDR = $4012 +DMCLEN = $4013 +OAM_DMA = $4014 +SNDCHN = $4015 + SNDCHN_PSGS = $0F + SNDCHN_DMC = $10 +P1 = $4016 +P2 = $4017 + + diff --git a/dpcmletterbox/src/reset.s b/dpcmletterbox/src/reset.s new file mode 100644 index 0000000..7bf591c --- /dev/null +++ b/dpcmletterbox/src/reset.s @@ -0,0 +1,539 @@ +; nes sample timer abuse +; +; Copyright 2010 Damian Yerrick +; +; Copying and distribution of this file, with or without +; modification, are permitted in any medium without royalty +; provided the copyright notice and this notice are preserved. +; This file is offered as-is, without any warranty. + +.p02 +.include "src/nes.h" + +WITH_CONTROLLERS = 1 + +; Possible playback rates are +; 428, 380, 340, 320, 286, 254, 226, 214, 190, 160, 142, 128, 106, 84, 72, 54 + + +OAM = $200 + +.segment "INESHDR" +.byt 'N','E','S',$1A +.byt 1 ; 1 prg page +.byt 1 ; 1 chr page +.byt $01 ; mirror type 1 (vertical mirroring), mapper low nibble = 0 +.byt $00 ; mapper high nibble = 0 + +.segment "VECTORS" +.addr nmi_handler, reset_handler, irq_handler + +.segment "ZEROPAGE" +irqs: .res 1 +nmis: .res 1 +camera_x: .res 1 +camera_y: .res 1 +lastPPUCTRL: .res 1 +irq_lag: .res 1 +val_4015: .res 1 +.ifdef WITH_CONTROLLERS + cur_keys: .res 2 +.endif + +.segment "CODE" +.proc irq_handler + bit $4015 + inc irqs + + ; restart IRQ + pha + lda val_4015 + sta $4015 + lda irqs + cmp #8 + beq irq_on + cmp #16 + beq irq_slowdown + cmp #19 + beq irq_off +irq_done: + pla + rti + +irq_on: + txa + pha + jsr compensate + jsr waste36dots + jsr waste36dots + jsr waste36dots + bit $00 + nop + + ; Based on an example by tokumaru + ; http://nesdev.parodius.com/bbs/viewtopic.php?p=64111#64111 + ; start setting the scroll before the horizontal blank + lda lastPPUCTRL + asl a + asl a + sta PPUADDR + lda camera_y + sta PPUSCROLL + asl a + asl a + and #%11100000 + ldx camera_x + sta camera_x + txa + lsr a + lsr a + lsr a + ora camera_x + + ;finish setting the scroll during HBlank (11 cycles) + stx PPUSCROLL + sta PPUADDR + stx camera_x + + lda #BG_ON|OBJ_ON + sta PPUMASK + pla + tax + jmp irq_done + +irq_slowdown: + lda #1 + sta DMCLEN + jmp irq_done + +irq_off: + txa + pha + jsr compensate + jsr waste36dots + jsr waste36dots + bit OAM + bit OAM + lda #OBJ_ON|LIGHTGRAY + sta PPUMASK + pla + tax + jmp irq_done + +compensate: + ldx irq_lag +: + lda $00 + inx + bne :- +waste36dots: + rts +.endproc + +.proc nmi_handler + bit PPUSTATUS + inc nmis + pha + txa + pha + + ; Set sample channel to high frequency and turn off playback. + ; This makes sure that 1. the sample buffer is empty, and 2. all + ; CPU cycles are available for VRAM transfer. + lda #$0F + sta DMCFREQ ; fastest pitch, no loop, no irq + sta SNDCHN ; tones on, sample off + lda #$00 + sta irqs ; init irq counter to distinguish single from double + sta DMCLEN ; sample length: 1 byte + + ; OMITTED: Write to VRAM and stuff here. + + ; After writing to VRAM, we need some sort of raster time + ; reference. If your VRAM update code executes in constant time, + ; you can use that. But instead, we're using sprite 0, so we + ; scroll the background to guarantee that a sprite 0 hit will + ; trigger. + + sta PPUSCROLL + sta PPUSCROLL + sta OAMADDR + lda #>OAM + sta OAM_DMA + lda #BG_ON|OBJ_ON|LIGHTGRAY + sta PPUMASK +wait_s0_off: + bit PPUSTATUS + bvs wait_s0_off +wait_s0_on: + bit PPUSTATUS + bvc wait_s0_on + lda #OBJ_ON|LIGHTGRAY + sta PPUMASK + + ; *** Start of timer setup code *** + + ; There are two buffers in the sample playback chain. One is an + ; 8-bit buffer that holds bytes fetched from memory; for reasons + ; related to audio hardware on another Nintendo platform, I call + ; this buffer the "FIFO". The other is an 8-bit shift register + ; from which delta values are shifted. Every 8 sample periods, the + ; data in the FIFO gets moved to the shift register, and the FIFO + ; becomes empty. Whenever the FIFO is empty, and at least one + ; byte remains in the wave data, one byte gets read into the FIFO. + ; If this is the last byte of the wave, the APU pulls /IRQ low. + ; + ; This first playback starts with an empty FIFO and a sample of + ; length 1. It will finish instantly and cause an IRQ, which we + ; ignore, but it + ; will also fill the sample buffer. + lda #SNDCHN_PSGS|SNDCHN_DMC + sta val_4015 + sta $4015 + nop + + ; By that time, 'irqs' should + ; have become 1. + + ; Now we start using IRQs on this one. + ldx #$0F | DMC_IRQMODE + stx DMCFREQ + sta $4015 + cli + ldx #0 + + ; The IRQ handler has started a second playback, and we + ; measure this one. + lda irqs +: + inx + cmp irqs + beq :- + stx irq_lag + + ; irq_lag measurements should ordinarily be in the range of 1 to 54 + ; or thereabouts. But occasionally, the second playback triggers + ; *during* the IRQ handler after the first, and 'irqs' will be 2 at + ; the start of the measurement loop. So at the end of the loop, + ; if the value of 'irqs' was 2 at the start, we were measuring the + ; *third* playback, so we have to compensate for time spent in the + ; second playback's IRQ handler by adding a few eight-cycle units + ; to the elapsed time. + + cmp #1 + bcc not_double_irq + lda #6 ; Increase this or decrease this based on the length of + ; the IRQ handler. +not_double_irq: + + ; Inside the IRQ handler, the compensate subroutine counts up from + ; irq_lag to 256. So we add about 180 or so to convert irq_lag to + ; work as an up-counter. (Other examples of up-counters include + ; the frequency timers on the Game Boy tone generators and the + ; Game Boy Advance PCM channels.) + adc #188 + adc irq_lag + + ; For robustness: counting once is better than counting 250 times. + bcc not_excessive_lag + lda #255 +not_excessive_lag: + sta irq_lag + + ; At this point, we're at a predictable position relative to the + ; phase of the sample clock. + lda #0 + sta irqs + + ; *** End of timer setup code *** + ; At this point, we have about 400 cycles until the next sample + ; fetch. Take advantage of this time to read the controllers + ; without any double clocking interference. +.if ::WITH_CONTROLLERS + ldx #1 + stx cur_keys+1 ; when this is shifted left 8 times, carry will be set + stx $4016 + dex + stx $4016 +padsloop: + ; bit 0: famicom hardwired controller or nes controller + ; bit 1: famicom expansion port controller + ; if either is set, consider the button pressed + lda $4016 + and #$03 + cmp #$01 + rol cur_keys + lda $4017 + and #$03 + cmp #$01 + rol cur_keys+1 + bcc padsloop + + ; Let player 1 control the camera position. The position will + ; actually get written to the PPU during the IRQ handler. + + lda cur_keys + and #$08 + beq not_up + lda camera_y + beq not_up + dec camera_y +not_up: + + lda cur_keys + and #$04 + beq not_down + lda camera_y + cmp #80 + beq not_down + inc camera_y +not_down: + + lda cur_keys + and #$02 + beq not_left + lda camera_x + beq not_left + dec camera_x +not_left: + + lda cur_keys + and #$01 + beq not_right + lda camera_x + cmp #216 + beq not_right + inc camera_x +not_right: +.else + + ; If we have the demo configured not to read the controllers, + ; move the camera in a diamond pattern instead. + lda #$80 ; nametable select bits go here + sta lastPPUCTRL + lda nmis + cmp #128 + bcc :+ + eor #$FF +: + lsr a + sta camera_y + + lda nmis + clc + adc #64 + cmp #128 + bcc :+ + eor #$FF +: + lsr a + sta camera_x +.endif + + pla + tax + pla + rti +.endproc + +.proc reset_handler + sei ; IRQs while initializing hardware: OFF! + ldx #$00 + stx PPUCTRL ; Vblank NMI: OFF! + stx PPUMASK ; Rendering: OFF! + stx $4015 ; DPCM and tone generators: OFF! + stx val_4015 ; ISR functionality: OFF! + lda #$40 + sta $4017 ; APU IRQ: OFF! + lda $4015 ; APU IRQ: ACK! + cld ; Decimal mode on famiclones: OFF! + lda PPUSTATUS ; Vblank NMI: ACK! + dex + txs ; Stack: TOP! + +vwait1: + lda PPUSTATUS + bpl vwait1 + + ; Clear zero page and sprite page + ; (the demo doesn't use anything else) + ldx #0 + ldy #$00 + lda #$f0 + tay +clear_zeropage: + sty $00,x + sta OAM,x + inx + bne clear_zeropage + + ; Set up those variables that are actually used + lda #0 + sta camera_x + lda #40 + sta camera_y + lda #<(sampledata >> 6) + sta DMCADDR +vwait2: + lda PPUSTATUS + bpl vwait2 + + ; Clear the nametables + lda #$24 + sta PPUADDR + stx PPUADDR + txa +clear_vram: + .repeat 8 + sta PPUDATA + .endrepeat + inx + bne clear_vram + + lda #$20 + ldy #$00 + sty OAM + sty OAM+2 + iny + sta PPUADDR + sty PPUADDR + iny + sty PPUDATA + sty OAM+1 + lda #8 + sta OAM+3 + sta OAM+2 + + ; Write a green-tinted palette to the PPU to show that the program + ; counter has reached this point + lda #$3F + sta PPUADDR + ldx #$00 + stx PPUADDR +set_initial_palette: + lda initial_palette,x + sta PPUDATA + inx + cpx #32 + bcc set_initial_palette + + jsr sayHello + cli +: + jmp :- + +.endproc + +.proc sayHello + lineIdx = 2 + vramDstHi = 3 + vramDstLo = 4 + + lda #0 + sta lineIdx + lda #$20 + sta vramDstHi + lda #$A2 + sta vramDstLo + +lineloop: + ldx lineIdx + lda helloLines,x + sta 0 + inx + lda helloLines,x + sta 1 + inx + stx lineIdx + ora #0 ; skip null pointers + beq skipLine + lda vramDstHi + ldx vramDstLo + jsr puts +skipLine: + + lda vramDstLo + clc + adc #64 + sta vramDstLo + lda vramDstHi + adc #0 + sta vramDstHi + lda lineIdx + cmp #20 + bcc lineloop + + lda PPUSTATUS + lda #$80 + sta PPUCTRL + lda nmis +: + cmp nmis + beq :- + lda PPUSTATUS + + rts +.endproc + +.proc puts + sta PPUADDR + stx PPUADDR + pha + txa + pha + ldy #0 +copyloop1: + lda (0),y + beq after_copyloop1 + asl a + sta PPUDATA + iny + bne copyloop1 +after_copyloop1: + + pla + clc + adc #32 + tax + pla + adc #0 + sta PPUADDR + stx PPUADDR + ldy #0 +copyloop2: + lda (0),y + beq after_copyloop2 + sec + rol a + sta PPUDATA + iny + bne copyloop2 +after_copyloop2: + rts +.endproc + +.segment "RODATA" +initial_palette: + .byt $0A,$1A,$2A,$3A,$0A,$1A,$2A,$3A,$0A,$1A,$2A,$3A,$0A,$1A,$2A,$3A + .byt $0A,$16,$26,$36,$0A,$1A,$2A,$3A,$0A,$1A,$2A,$3A,$0A,$1A,$2A,$3A +helloLines: + .addr hello1, hello2, 0, hello4, hello5, hello6, hello7 + .addr hello8, hello9, hello10 + +; [ ] +hello1: .byt "DPCM Letterbox Demo v2",0 +hello2: .byt "Copr. 2010 Damian Yerrick",0 +hello4: .byt "This 16:9 window (scroll it",0 +hello5: .byt "with the Control Pad) uses",0 +hello6: .byt "no mapper IRQ. Instead, it",0 +hello7: .byt "uses the DMC IRQ as a crude",0 +hello8: .byt "timer to hide the top and",0 +hello9: .byt "bottom of the background.",0 +hello10: .byt "Too bad it can't do 720p :(",0 + + +.segment "DMC" +.align 64 +sampledata: + .res 17,$00 + diff --git a/dpcmletterbox/tilesets/ac16.png b/dpcmletterbox/tilesets/ac16.png new file mode 100644 index 0000000000000000000000000000000000000000..05a32c47fc6054c1b53604674a1ab34f76ec162b GIT binary patch literal 1646 zcmV-!29f!RP)Px#3{Xr|MF0Q*W@cuxvaL;#2d9Y_EG010qNS#tmY3ljhU z3ljkVnw%H_000McNliru+6WL75DKm!c~k%Z1=~qPK~z}7?Uqew+(s0~pQLp~R=Zvw z9O~BE?!^a{Y`h^IcO~lWie7puY{9+x;J_YS$YE@>i3w|VZiSM-o=m_Es2|Wv3Ob}W zLk4n751EvPLR-W3o`Yxv*@BYo8)?7nd|g7@g9kJkNk3`c{NJ1R1OSQ)FK@2|PTEO3 zX(w$y>4iRh&%#4va%8YoV&F&>I#VV9Nq`)OISuxx&46o6<=OI0@G6h< z<{BeFl?#w24I;6swSy-q08ozr3Ss(k($4YF)c1nJbP9ks8vrwSB$_CR4v%hT@2ucNot($6INpvp zi~K85Vld6!XZwsmJvOcn`UW%DLI5Rn zDJ6cowhX|WT&HiLLrkzJ`GEb-z_$aDs?!FjNu_=^5wMhi5}QU8x(4&hDtbZ}g-{o; znE*RAdWl(aRbv0CyKHB6>JE6md#n8H+9U>je_XC-&0p+xAijU~-3N@ECE zzNNc?ojO42m!gUc7bnnMJGXKR2*Cwrfl!-D8{`r)7!fFx!Rv9MtHe^G3Lg7R+K}p? zu@{wV_6i56|3z-djL)aX_h!;~=vCN&8CRdWgLn`dSNqE-Zyc>Xg|HAUV{AAV7kMji zc3MGey|wP_cqZ;>lf)i)#U0ZLp!rs|OP8ASv`I5GgXa_=6n4(G&1Mt6`7Q5L%Li&v zMj4({Kv3A-y<%eUh-#5`LV*u1@k?AlYh40Wm%^1FF0W(o+<#Oiv?+lO@9_IiI=m#V(V7AOb?u0xy;#3Lh!2Sm2sIyFT6eI8eJ*WQ!sAy-%&$VMCKswSNdkMi5kk`NNg(f^ zIn4Sp9q6)@q<{w(zN2E^MxdPSF76gR&9%^EEJh>12`II2Va~xKFO~_Wq}F<3!B8kL z#DElfC2riSu=Ya#LxT@uU6vIw()A}OP6<7qN)1#S1A9<-j(3tu@Y$N|SD)*?B$W-~ z*ANJ@u0_M#toDXu>`UW%F|r5i?I}x+-@qJ4U|hLmCL96zO*uxHImwLyg_qnh5Wsv| z=LpepzYKTGO0O!6>m_Pnoh`MiqTpggqIaJ}k40LZ&ec2;v_gXa4Xv<-xm)2?SBEP% zYXOnJC>76M@Sz*{B#*sKBv40S`$*V!Ag|C7C>)XRSPHAIQhQ<>pD6F8HmyDC#e!F(~0Y&|DR zv*bJ;b9p&j!$@130CQ4_$D)Kv7J|A6!}uW7`vOV07*qoM6N<$f()eX(EtDd literal 0 HcmV?d00001 diff --git a/dpcmletterbox/tools/pilbmp2nes.py b/dpcmletterbox/tools/pilbmp2nes.py new file mode 100644 index 0000000..fd0ad32 --- /dev/null +++ b/dpcmletterbox/tools/pilbmp2nes.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python +from __future__ import with_statement +from PIL import Image +from time import sleep + +def formatTilePlanar(tile, nPlanes): + import array + if (tile.size != (8, 8)): + return None + pixels = iter(tile.getdata()) + outplanes = [array.array('B') + for i in range(nPlanes)] + for y in range(8): + slivers = [0 for i in range(nPlanes)] + for x in range(8): + px = pixels.next() + for i in range(nPlanes): + slivers[i] = slivers[i] << 1 + if px & 0x01: + slivers[i] = slivers[i] | 1 + px >>= 1 + for i in range(nPlanes): + outplanes[i].append(slivers[i]) + out = "".join(plane.tostring() for plane in outplanes) + return out + +def parse_argv(argv): + from optparse import OptionParser + parser = OptionParser(usage="usage: %prog [options] [-i] INFILE [-o] OUTFILE") + parser.add_option("-i", "--image", dest="infilename", + help="read image from INFILE", metavar="INFILE") + parser.add_option("-o", "--output", dest="outfilename", + help="write CHR data to OUTFILE", metavar="OUTFILE") + parser.add_option("-W", "--tile-width", dest="tileWidth", + help="set width of metatiles", metavar="HEIGHT", + type="int", default=8) + parser.add_option("-H", "--tile-height", dest="tileHeight", + help="set height of metatiles", metavar="HEIGHT", + type="int", default=8) + (options, args) = parser.parse_args(argv[1:]) + + tileWidth = int(options.tileWidth) + if tileWidth <= 0: + raise ValueError("tile width '%d' must be positive" % tileWidth) + + tileHeight = int(options.tileHeight) + if tileHeight <= 0: + raise ValueError("tile height '%d' must be positive" % tileHeight) + + # Fill unfilled roles with positional arguments + argsreader = iter(args) + try: + infilename = options.infilename + if infilename is None: + infilename = argsreader.next() + outfilename = options.infilename + if outfilename is None: + outfilename = argsreader.next() + except StopIteration: + raise ValueError("not enough filenames") + try: + argsreader.next() + raise ValueError("too many filenames") + except StopIteration: + pass + + return (infilename, outfilename, tileWidth, tileHeight) + +argvTestingMode = True + +def main(argv=None): + if argv is None: + import sys + import os + argv = sys.argv + print argv + if (argvTestingMode and len(argv) < 2 + and sys.stdin.isatty() and sys.stdout.isatty()): + argv.extend(raw_input('args:').split()) + try: + (infilename, outfilename, tileWidth, tileHeight) = parse_argv(argv) + except StandardError, e: + import sys + sys.stderr.write("%s: %s\n" % (argv[0], str(e))) + sys.exit(1) + + print "loading", infilename + im = Image.open(infilename) + im.load() + (w, h) = im.size + + out = [] + for mt_y in range(0, h, tileHeight): + for mt_x in range(0, w, tileWidth): + metatile = im.crop((mt_x, mt_y, + mt_x + tileWidth, mt_y + tileHeight)) + for tile_y in range(0, tileHeight, 8): + for tile_x in range(0, tileWidth, 8): + tile = metatile.crop((tile_x, tile_y, + tile_x + 8, tile_y + 8)) + data = formatTilePlanar(tile, 2) + out.append(data) + with open(outfilename, 'wb') as outfp: + outfp.writelines(out) + +if __name__=='__main__': + main() diff --git a/exram/mmc5exram.asm b/exram/mmc5exram.asm new file mode 100644 index 0000000..c9eb821 --- /dev/null +++ b/exram/mmc5exram.asm @@ -0,0 +1,379 @@ +;NES Copper Bars demo +;Run program for description +;Quietust, 2004/10/06 + +.org $0000 +ptr: .block 2 ;for initializing VRAM +vbflag: .block 1 ;signal when we've gotten an NMI +overflow: .block 1 ;1/3 cycle counter + +rbars: .block $06 ;this holds the position of each bar +ctabl: .block $02 ;(padding) + .block $C0 ;this stores the colour of each scanline + +.org $C000 +.fill $E000-*,$FF +text: +.db " " +.db " MMC5 Executable ExRAM Test " +.db "________________________________" +.db " " +.db " This is basically just my " +.db " 'copper bars' test program, " +.db " except I've modified it so " +.db " the code that determines " +.db " where each color bar should " +.db " be displayed during each " +.db " frame is not executed from " +.db " ROM, but is copied into the " +.db " MMC5's ExRAM during startup " +.db " and then executed from there " +.db " during each VBLANK. " +.db " " +.db " A proper emulator will be " +.db " able to handle this without " +.db " any problems, including both " +.db " Nintendulator and Nestopia. " +.db " In Nintendulator, though, " +.db " the debugger will display FF " +.db " even though it's executing " +.db " real code, since it thinks " +.db " the region contains I/O " +.db " registers rather than RAM. " +.db "________________________________" +.db " " +.db " Written by Quietust " +.db " " +.db $00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$00,$00,$00 + + +rast_start1: +.org $5C00 +rast_start2: + ;Raster bar table generator + ;written by Kevin Horton + +do_rast: LDX #$00 ;updates the raster buffer + TXA + +clrast: STA ctabl,x ;clear out all rasters + INX + CPX #$C2 + BNE clrast + + CLC ;only have to do this once here + LDX #$05 ;# of raster bars to do (minus 1) + +dr_loop: LDA rbars,x + INC rbars,x ;get & inc raster bar + TAY + LDA sinetab,y ;get position + TAY + LDA coltab,x ;get starting colour + ORA #$80 + STA ctabl+0,y ;store the 1s + STA ctabl+4,y + ORA #$40 + STA ctabl+1,y ;then the 2s + STA ctabl+3,y + ORA #$20 + STA ctabl+2,y ;then 3, for "12321" + DEX + BPL dr_loop + RTS + +rast_init: LDX #$05 ;initalizes the raster bar positions +ri1: TXA + ASL A + ASL A + ASL A + ASL A + STA rbars,x + DEX + BPL ri1 + + LDX #$00 + TXA + +ri2: STA ctabl,x ;clear out all raster bars + INX + BPL ri2 + RTS +rast_end2: +.org rast_start1 + (rast_end2 - rast_start2) +rast_end1: + +coltab: +.db $14,$10,$18,$08,$0C,$04 + +sinetab: +.db $5F,$61,$64,$66,$68,$6B,$6D,$6F,$72,$74,$76,$78,$7B,$7D,$7F,$81 +.db $83,$85,$88,$8A,$8C,$8E,$90,$92,$94,$96,$98,$99,$9B,$9D,$9F,$A1 +.db $A2,$A4,$A5,$A7,$A8,$AA,$AB,$AD,$AE,$AF,$B0,$B2,$B3,$B4,$B5,$B6 +.db $B7,$B8,$B8,$B9,$BA,$BB,$BB,$BC,$BC,$BD,$BD,$BD,$BE,$BE,$BE,$BE +.db $BE,$BE,$BE,$BE,$BE,$BD,$BD,$BD,$BC,$BC,$BB,$BB,$BA,$B9,$B8,$B8 +.db $B7,$B6,$B5,$B4,$B3,$B2,$B0,$AF,$AE,$AD,$AB,$AA,$A8,$A7,$A5,$A4 +.db $A2,$A1,$9F,$9D,$9B,$99,$98,$96,$94,$92,$90,$8E,$8C,$8A,$88,$85 +.db $83,$81,$7F,$7D,$7B,$78,$76,$74,$72,$6F,$6D,$6B,$68,$66,$64,$61 +.db $5F,$5D,$5A,$58,$56,$53,$51,$4F,$4C,$4A,$48,$46,$43,$41,$3F,$3D +.db $3B,$39,$36,$34,$32,$30,$2E,$2C,$2A,$28,$26,$25,$23,$21,$1F,$1D +.db $1C,$1A,$19,$17,$16,$14,$13,$11,$10,$0F,$0E,$0C,$0B,$0A,$09,$08 +.db $07,$06,$06,$05,$04,$03,$03,$02,$02,$01,$01,$01,$00,$00,$00,$00 +.db $00,$00,$00,$00,$00,$01,$01,$01,$02,$02,$03,$03,$04,$05,$06,$06 +.db $07,$08,$09,$0A,$0B,$0C,$0E,$0F,$10,$11,$13,$14,$16,$17,$19,$1A +.db $1C,$1D,$1F,$21,$23,$25,$26,$28,$2A,$2C,$2E,$30,$32,$34,$36,$39 +.db $3B,$3D,$3F,$41,$43,$46,$48,$4A,$4C,$4F,$51,$53,$56,$58,$5A,$5D + +nmi: PHA + TXA + PHA + TYA + PHA + LDA #$00 + STA $2003 + LDA #$02 + STA $4014 + LDA #$01 + STA vbflag + LDA #$98 + STA $2000 + LDA #$1E + STA $2001 + LDA #$00 + STA $2005 + STA $2005 + JSR do_rast + PLA + TAY + PLA + TAX + PLA +irq: RTI + +reset: SEI + CLD + LDA #$00 + STA $2000 + STA $2001 + LDX #$02 +waitframe: LDA $2002 + BPL waitframe + DEX + BPL waitframe + TXS + + LDA #$00 + TAX +clr_ram: STA $00,X + STA $0200,X + STA $0300,X + STA $0400,X + STA $0500,X + STA $0600,X + STA $0700,X + INX + BNE clr_ram + + LDA #$03 + STA $5100 + LDA #$00 + STA $5101 + LDA #$02 + STA $5104 + LDA #$44 + STA $5105 + LDA #$00 + STA $5127 + STA $512B + STA $5200 + STA $5204 + + LDX #0 +exram_init: LDA rast_start1,X + STA rast_start2,X + INX + CPX #rast_end2-rast_start2 + BNE exram_init + + LDX #$20 + STX $2006 + LDY #$00 + STY $2006 + + LDA #text & $FF + STA ptr + LDA #text >> 8 + STA ptr+1 + + LDX #$04 +init_vram1: LDA (ptr),Y ;load text for primary NT + STA $2007 + INY + BNE init_vram1 + INC ptr+1 + DEX + BNE init_vram1 + + LDX #$04 + LDA #$FF +init_vram2: STA $2007 ;load white for secondary NT + INY + BNE init_vram2 + DEX + BNE init_vram2 + + LDX #$00 + LDA #$F8 +spr_init: STA $0200,X ;move all sprites offscreen + INX + INX + INX + INX + BNE spr_init + + LDA #$0F ;except sprite 0, which we'll be using for hit + STA $0200 + LDA #'_' + STA $0201 ;$0202 and $0203 are already zero, which is just the way I want them + + LDX #$3F + LDY #$00 + STX $2006 + STY $2006 + + LDX #$08 +palloop: LDA #$1F + STA $2007 + LDA #$1F + STA $2007 + LDY #$00 + STY $2007 + LDY #$30 + STY $2007 + DEX + BNE palloop + + LDA #$3F + STA $2006 + LDA #$00 + STA $2006 + STA $2006 + STA $2006 + + STA $2005 + STA $2005 ;clear scroll regs + STA $4015 ;kill sound + STA vbflag + LDA #$C0 + STA $4017 ;disable frame IRQs + JSR rast_init + LDA #$98 + STA $2000 + CLI + +loop: LDA vbflag + BEQ loop + LDA #$00 + STA vbflag + +spr0off: BIT $2002 + BVS spr0off +spr0on: BIT $2002 + BVC spr0on + LDX #$FF + STX overflow + INX + LDY #$13 +sync: DEY + BNE sync +scanloop: LDA ctabl+2,x ;4 + ;cut 6 cycles + ASL A ;12 + BCC color0 ;14 + ASL A ;16 + BCC color1 ;18 + ASL A ;20 + BCC color2 ;22 + NOP ;24 + NOP ;26 + NOP ;28 + ORA #$01 ;30 + NOP ;32 + NOP ;34 + LDY #$0A ;36 +c3w: DEY ;56 + BNE c3w ;85 + LDY #$99 ;insert them + STY $2000 ;here + JMP endloop ;88 + +color2: ;23 + ORA #$01 ;25 + NOP ;27 + NOP ;29 + LDY #$0B ;31 +c2w: DEY ;53 + BNE c2w ;85 + LDY #$98 ;and + STY $2000 ;here + JMP endloop ;88 + +color1: ;19 + ASL A ;21 + NOP ;23 + NOP ;25 + NOP ;27 + NOP ;29 + LDY #$0B ;31 +c1w: DEY ;53 + BNE c1w ;85 + LDY #$80 ;and + STY $2000 ;here + JMP endloop ;88 + +color0: ;15 + LDA #$00 ;17 + LDY #$0E ;19 +c0w: DEY ;47 + BNE c0w ;88 + LDY #$98 ;and + STY $2000 ;here + +endloop: ;88 + ORA #$1E ;90 + STA $2001 ;94 + + CLC ;96 + LDA overflow ;99 + ADC #$55 ;101 + STA overflow ;104 + BCC skip ;106+2/3 +skip: + + INX ;108+2/3 + CPX #$BF ;110+2/3 + BNE scanloop ;113+2/3 + + LDY #$11 +endw: DEY + BNE endw + + LDX #$1E + LDY #$98 + STX $2001 + STY $2000 + JMP loop + +.fill $FFFA-*,$FF +.org $FFFA +.dw nmi +.dw reset +.dw irq +.end diff --git a/exram/mmc5exram.chr b/exram/mmc5exram.chr new file mode 100644 index 0000000000000000000000000000000000000000..9ee9ec61ab99791cb383a93bea6a5193c2c3be90 GIT binary patch literal 8192 zcmeI0!D=Hh42BJbp@*UD(TCD!m{ZBYWN-T%rUCDvq2$!&Fiajj`%CsOYnFY0h1w1L zRV>?*>@oQ!gxc<{H8TvmR^YqUBcg>6ZU0LtS^}PjQttRG)*p{KO>6gmD|1}RFY8Yw z9e$UeW=}JwN8^0(UY0nUjsItSXLcy*o)7~4LyVh5XtqoikqT4x=<1uhYBv>vFvxvAy5ETzn-(#N@|I3C!N~ zxc2-K9+ze5@dxbwJUy6yl6uXqKPC;4`>D@EKOT1s*ROhinvUgY^Mx$uckOmaD3_am zg1h$*I6%Jtd07##8!ztDYU}CzJ%1d{gWvx!g$XS=|Fho@@!t7|a>EI5>mhts-+=i1 z{)ZsxLFHY*q3bf4&C*A1nWxHvUI}r34sV`QNnhKPX+mS^Aa#O&k9QYUOK8q@2Ch zd2z?I_W(H72jO|s#{YZ|06*n_Q+TUCwef#2Mc8_WQInKbAE>(1QU_VKDfV4$)yn^T4}kBL|D7uTt3TcY;CWX5r;`7vl06!(1Z{!* dPbL3T5y)tx0;2+>0;2+>0;2-otODeI>K|Ir=2idz literal 0 HcmV?d00001 diff --git a/exram/mmc5exram.imk b/exram/mmc5exram.imk new file mode 100644 index 0000000..a7d2335 --- /dev/null +++ b/exram/mmc5exram.imk @@ -0,0 +1,6 @@ +MAKEINES +mmc5exram.nes +MAPR 5 +VMIR 1 +PROG mmc5exram.obj +CHAR mmc5exram.chr diff --git a/exram/mmc5exram.nes b/exram/mmc5exram.nes new file mode 100644 index 0000000000000000000000000000000000000000..5287c77d49904fbf97f7089ec5b8fb1268ed0f84 GIT binary patch literal 24592 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 literal 0 HcmV?d00001 diff --git a/full_palette/full_palette.s b/full_palette/full_palette.s new file mode 100644 index 0000000..e4a3e1a --- /dev/null +++ b/full_palette/full_palette.s @@ -0,0 +1 @@ +; Displays entire 400+ color NTSC NES palette on screen. ; Disables PPU rendering so that current scanline color can be ; set directly by VRAM address, then uses cycle-timed code to ; cycle through all colors in a clean grid. ; ; ca65 -o full_palette.o full_palette.s ; ld65 -t nes full_palette.o -o full_palette.nes ; ; Shay Green .segment "HEADER" .byte "NES",26, 2,1, 0,0 .segment "VECTORS" .word 0,0,0, nmi, reset, irq .segment "CHARS" .res 8192 .segment "STARTUP" ; avoids warning .segment "CODE" even_frame = $200 irq: nmi: rti wait_vbl: bit $2002 : bit $2002 bpl :- rts blacken_palette: ; Fill palette with black. Starts at $3FE0 so that VRAM ; address will wrap around to 0 afterwards, so that BG ; rendering will work correctly. lda #$3F sta $2006 lda #$E0 sta $2006 lda #$0F ldy #$20 : sta $2007 dey bne :- rts reset: sei ldx #$FF txs ; Init PPU jsr wait_vbl jsr wait_vbl lda #0 sta $2000 sta $2001 jsr blacken_palette ; Clear nametable lda #$20 sta $2006 lda #$00 sta $2006 ldx #4 ldy #0 : sta $2007 iny bne :- dex bne :- ; Synchronize precisely to VBL. VBL occurs every 29780.67 ; CPU clocks. Loop takes 27 clocks. Every 1103 iterations, ; the second LDA $2002 will read exactly 29781 clocks ; after a previous read. Thus, the loop will effectively ; read $2002 one PPU clock later each frame. It starts out ; with VBL beginning sometime after this read, so that ; eventually VBL will begin just before the $2002 read, ; and thus leave CPU exactly synchronized to VBL. jsr wait_vbl nop : nop lda $2002 lda $2002 pha pla pha pla bpl :- lda #0 sta even_frame begin_frame: jsr blacken_palette ; Enable BG so that PPU will make every other frame ; shorter by one PPU clock. This allows our code to ; synchronize better and reduce horizontal shaking. lda #$08 sta $2001 ; Delay 4739 cycles, well into frame ldx #4 ldy #176 : dey bne :- dex bne :- nop ; Disable BG. Now electron beam color can be set by ; VRAM address pointing into palette. lda #0 sta $2001 ; Draw palette ldy #0 ; Y = color triplet: ; Draws one scanline of palette. Takes 106 cycles. .macro draw_row nop nop nop tya and #$18 asl a ldx #$3F stx $2006 stx $2006 tax stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 .endmacro draw_row ; Palette writes are delayed a line, since VRAM address ; increments just after $2007 write. So we don't set ; color tint until after first row of triplet tya and #$E0 sta $2001 draw_row iny iny iny nop draw_row iny beq :+ ; loop is more than 128 bytes, argh jmp triplet : nop ; Delay 2869 cycles ldy #239 : pha pla dey bne :- ; Delay extra cycle every other frame inc even_frame lda even_frame lsr a bcs :+ : jmp begin_frame \ No newline at end of file diff --git a/full_palette/full_palette_smooth.nes b/full_palette/full_palette_smooth.nes new file mode 100644 index 0000000000000000000000000000000000000000..2b276e10b5931d8cf74701f52f73426f40a15df7 GIT binary patch literal 40976 zcmeIvF-ikL6b9hQDv8)=ZR50pg*QkVA&A&`f!L+C5^UBkO{~RgNtZyt3ka5yYLAdo zwot)BND!TEasUaW`G&W{u>3Rg_~zpD@*r!3)#w~&G1dOEH*OD`aXhc5y&?`2Oj*vM0j!!X2QBgWl)9P3a>(`dU0DfwD1X61JZRn;_$sk;4cfB&oAlGXX0v@b=U z2IbGJTvX|QBNi`J8V^S&qxO9>rkdQh;@dyIhqI&Bdx2E)$8Zh`E6bm zAKm_-T)u~F8nUyeaDJ7~Uy5GroAz~ literal 0 HcmV?d00001 diff --git a/full_palette/full_palette_smooth.s b/full_palette/full_palette_smooth.s new file mode 100644 index 0000000..a3d0173 --- /dev/null +++ b/full_palette/full_palette_smooth.s @@ -0,0 +1 @@ +; Displays entire 400+ color NTSC NES palette on screen. ; Disables PPU rendering so that current scanline color can be ; set directly by VRAM address, then uses cycle-timed code to ; cycle through all colors in a clean grid. ; ; ca65 -o full_palette_smooth.o full_palette_smooth.s ; ld65 -t nes full_palette_smooth.o -o full_palette_smooth.nes ; ; Shay Green .segment "HEADER" .byte "NES",26, 2,1, 0,0 .segment "VECTORS" .word 0,0,0, nmi, reset, irq .segment "CHARS" .res 8192 .segment "STARTUP" ; avoids warning .segment "CODE" even_frame = $200 irq: nmi: rti wait_vbl: bit $2002 : bit $2002 bpl :- rts blacken_palette: ; Fill palette with black. Starts at $3FE0 so that VRAM ; address will wrap around to 0 afterwards, so that BG ; rendering will work correctly. lda #$3F sta $2006 lda #$E0 sta $2006 lda #$0F ldy #$20 : sta $2007 dey bne :- rts reset: sei ldx #$FF txs ; Init PPU jsr wait_vbl jsr wait_vbl lda #0 sta $2000 sta $2001 jsr blacken_palette ; Clear nametable lda #$20 sta $2006 lda #$00 sta $2006 ldx #4 ldy #0 : sta $2007 iny bne :- dex bne :- ; Synchronize precisely to VBL. VBL occurs every 29780.67 ; CPU clocks. Loop takes 27 clocks. Every 1103 iterations, ; the second LDA $2002 will read exactly 29781 clocks ; after a previous read. Thus, the loop will effectively ; read $2002 one PPU clock later each frame. It starts out ; with VBL beginning sometime after this read, so that ; eventually VBL will begin just before the $2002 read, ; and thus leave CPU exactly synchronized to VBL. jsr wait_vbl nop : nop lda $2002 lda $2002 pha pla pha pla bpl :- lda #0 sta even_frame begin_frame: jsr blacken_palette ; Enable BG so that PPU will make every other frame ; shorter by one PPU clock. This allows our code to ; synchronize better and reduce horizontal shaking. lda #$08 sta $2001 ; Delay 4739 cycles, well into frame ldx #4 ldy #176 : dey bne :- dex bne :- nop ; Disable BG. Now electron beam color can be set by ; VRAM address pointing into palette. lda #0 sta $2001 ; Draw palette ldy #$C0 ; Y = color triplet: ; Draws one scanline of palette. Takes 98 cycles. .macro draw_row tya and #$30 ldx #$3F stx $2006 stx $2006 tax stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 inx stx $2007 .endmacro nop nop nop nop draw_row ; Palette writes are delayed a line, since VRAM address ; increments just after $2007 write. So we don't set ; color tint until after first row of triplet tya lsr a and #$07 tax lda tints,x sta $2001 draw_row pha pla pha pla nop draw_row iny beq :+ ; loop is more than 128 bytes, argh jmp triplet : nop ; Delay 2869 cycles ldy #239 : pha pla dey bne :- ; Delay extra cycle every other frame inc even_frame lda even_frame lsr a bcs :+ : jmp begin_frame ; Reorder color tints to be most gradual tints: .byte $E0,$C0,$A0,$60,$20,$40,$80,$00 \ No newline at end of file diff --git a/instr_misc/instr_misc.nes b/instr_misc/instr_misc.nes new file mode 100644 index 0000000000000000000000000000000000000000..5db3286ae3ae9fa9d65873735bba205bb1e8f449 GIT binary patch literal 65552 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 literal 0 HcmV?d00001 diff --git a/instr_misc/readme.txt b/instr_misc/readme.txt new file mode 100644 index 0000000..a3c0b84 --- /dev/null +++ b/instr_misc/readme.txt @@ -0,0 +1,107 @@ +NES CPU Instruction Behavior Misc Tests +---------------------------------------- +These tests verify miscellaneous instruction behavior. + + +01-abs_x_wrap +------------- +Verifies that $FFFF wraps around to 0 for STA abs,X and LDA abs,X. + + +02-branch_wrap +-------------- +Verifies that branching past end or before beginning of RAM wraps +around. + + +03-dummy_reads +-------------- +Tests some instructions that do dummy reads before the real read/write. +Doesn't test all instructions. + +Tests LDA and STA with modes (ZP,X), (ZP),Y and ABS,X +Dummy reads for the following cases are tested: + +LDA ABS,X or (ZP),Y when carry is generated from low byte +STA ABS,X or (ZP),Y +ROL ABS,X always + + +04-dummy_reads_apu +------------------ +Tests dummy reads for (hopefully) ALL instructions which do them, +including unofficial ones. Prints opcode(s) of failed instructions. +Requires that APU implement $4015 IRQ flag reading. + + +Multi-tests +----------- +The NES/NSF builds in the main directory consist of multiple sub-tests. +When run, they list the subtests as they are run. The final result code +refers to the first sub-test that failed. For more information about any +failed subtests, run them individually from rom_singles/ and +nsf_singles/. + + +Flashes, clicks, other glitches +------------------------------- +If a test prints "passed", it passed, even if there were some flashes or +odd sounds. Only a test which prints "done" at the end requires that you +watch/listen while it runs in order to determine whether it passed. Such +tests involve things which the CPU cannot directly test. + + +Text output +----------- +Tests generally print information on screen, but also output information +in other ways, in case the PPU doesn't work or there isn't one, as in an +NSF or a NES emulator early in development. + +When building as an NSF, the final result is reported as a series of +beeps (see below). Any important diagnostic bytes are also reported as +beeps, before the final result. + +All text output is written starting at $6004, with a zero-byte +terminator at the end. As more text is written, the terminator is moved +forward, so an emulator can print the current text at any time. + +The test status is written to $6000. $80 means the test is running, $81 +means the test needs the reset button pressed, but delayed by at least +100 msec from now. $00-$7F means the test has completed and given that +result code. + +To allow an emulator to know when one of these tests is running and the +data at $6000+ is valid, as opposed to some other NES program, $DE $B0 +$G1 is written to $6001-$6003. + +See the source code for more information about a particular test and why +it might be failing. Each test has comments anout its operation. + + +NSF versions +------------ +Many NSF-based tests require that the NSF player either not interrupt +the init routine with the play routine, or if it does, not interrupt the +play routine again if it hasn't returned yet. This is because many tests +need to run for a while without returning. + +NSF versions also make periodic clicks to prevent the NSF player from +thinking the track is silent and thus ending the track before it's done +testing. + +In addition to the other text output methods described above, NSF builds +report essential information bytes audibly, including the final result. +A byte is reported as a series of tones. The code is in binary, with a +low tone for 0 and a high tone for 1, and with leading zeroes skipped. +The first tone is always a zero. A final code of 0 means passed, 1 means +failure, and 2 or higher indicates a specific reason as listed in the +source code by the corresponding set_code line. Examples: + + Tones Binary Decimal Meaning + - - - - - - - - - - - - - - - - - - - - + low 0 0 passed + low high 01 1 failed + low high low 010 2 error 2 + +-- +Shay Green diff --git a/instr_misc/rom_singles/01-abs_x_wrap.nes b/instr_misc/rom_singles/01-abs_x_wrap.nes new file mode 100644 index 0000000000000000000000000000000000000000..2f4fb2ae47c7351e5f0b480d4580b9ea1fb87489 GIT binary patch literal 40976 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 KMBx90z<&U{2#cNo literal 0 HcmV?d00001 diff --git a/instr_misc/rom_singles/03-dummy_reads.nes b/instr_misc/rom_singles/03-dummy_reads.nes new file mode 100644 index 0000000000000000000000000000000000000000..e11faab965d1f9759ec535035d9a4ff38d6df66f GIT binary patch literal 40976 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 CaFrYY literal 0 HcmV?d00001 diff --git a/instr_misc/rom_singles/04-dummy_reads_apu.nes b/instr_misc/rom_singles/04-dummy_reads_apu.nes new file mode 100644 index 0000000000000000000000000000000000000000..5cbbecba5fde603159334451637026a152c7cbf8 GIT binary patch literal 40976 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 RC;>`<5}*VqfiHdn{{tVF-FW~2 literal 0 HcmV?d00001 diff --git a/instr_misc/source/01-abs_x_wrap.s b/instr_misc/source/01-abs_x_wrap.s new file mode 100644 index 0000000..2198050 --- /dev/null +++ b/instr_misc/source/01-abs_x_wrap.s @@ -0,0 +1,40 @@ +; Verifies that $FFFF wraps around to 0 for +; STA abs,X and LDA abs,X + +.include "shell.inc" + +main: + setb <0,0 + setb <1,0 + + ldx #1 + lda #$12 + sta $FFFF,x + + ldx #2 + lda #$34 + sta $FFFF,x + + set_test 2,"Write wrap-around failed" + + lda <$00 + cmp #$12 + jne test_failed + + lda <$01 + cmp #$34 + jne test_failed + + set_test 3,"Read wrap-around failed" + + ldx #1 + lda $FFFF,x + cmp #$12 + jne test_failed + + ldx #2 + lda $FFFF,x + cmp #$34 + jne test_failed + + jmp tests_passed diff --git a/instr_misc/source/02-branch_wrap.s b/instr_misc/source/02-branch_wrap.s new file mode 100644 index 0000000..a839cf2 --- /dev/null +++ b/instr_misc/source/02-branch_wrap.s @@ -0,0 +1,37 @@ +; Verifies that branching past end or before beginning +; of RAM wraps around + +.include "shell.inc" + +main: + set_test 2,"Branch from $FF8x to $000x" + setb <0,$E8 ; INX + setb <1,$E8 ; INX + setb <2,$60 ; RTS + ldx #0 + clc + jsr forward + cpx #1 + jne test_failed + + set_test 3,"Branch from $000x to $FFFx" + setb <0,$90 ; BCC + setb <1,-$3F + ldx #0 + clc + jsr <0 + cpx #1 + jne test_failed + + jmp tests_passed + + +.segment "FF80" + .res $40 +; $FFC0 +forward: + .byte $90,$3F ; BCC $3F + inx +return: + inx + rts diff --git a/instr_misc/source/03-dummy_reads.s b/instr_misc/source/03-dummy_reads.s new file mode 100644 index 0000000..4272ece --- /dev/null +++ b/instr_misc/source/03-dummy_reads.s @@ -0,0 +1,104 @@ +; Tests some instructions that do dummy reads before the real read/write. +; Doesn't test all instructions. +; +; Tests LDA and STA with modes (ZP,X), (ZP),Y and ABS,X +; Dummy reads for the following cases are tested: +; +; LDA ABS,X or (ZP),Y when carry is generated from low byte +; STA ABS,X or (ZP),Y +; ROL ABS,X always + +.include "shell.inc" + +no_read: + lda PPUSTATUS +single_read: + jpl test_failed +dummy_read: + lda PPUSTATUS +double_read: + jmi test_failed + lda PPUSTATUS + jmi test_failed +begin: jsr wait_vbl + delay PPU_FRAMELEN + 20 + ldx #$22 + ldy #$22 + rts + +main: jsr begin + + set_test 2,"Test requires $2002 mirroring every 8 bytes to $3FFA" + lda $3FFA + jsr single_read + + set_test 3,"LDA abs,x" + lda $2000,x ; $2022 + jsr single_read + lda $20E0,x ; $2002, $2102 + jsr double_read + lda $20E2,x ; $2004, $2104 + jsr no_read + lda $3FE0,x ; $3F02, $4002 + jsr dummy_read + + set_test 4,"STA abs,x" + sta $2002 + jsr no_read + sta $20E0,x ; $2002, $2102 (write) + jsr dummy_read + sta $20E2,x ; $2004, $2104 (write) + jsr no_read + sta $3FE0,x ; $3F02, $4002 (write) + jsr dummy_read + + set_test 5,"LDA (z),y" + setw addr,$2000 + lda (addr),y ; $2022 + jsr single_read + setw addr,$20E0 + lda (addr),y ; $2002, $2102 + jsr double_read + setw addr,$20E2 + lda (addr),y ; $2004, $2104 + jsr no_read + setw addr,$3FE0 + lda (addr),y ; $3F02, $4002 + jsr dummy_read + + set_test 6,"STA (z),y" + setw addr,$20E0 + sta (addr),y ; $2002, $2102 (write) + jsr dummy_read + setw addr,$20E2 + sta (addr),y ; $2004, $2104 (write) + jsr no_read + setw addr,$3FE0 + sta (addr),y ; $3F02, $4002 (write) + jsr dummy_read + + set_test 7,"LDA (z,x)" + ldx #0 + setw addr,$2002 + lda (addr,x) ; no dummy read + jsr single_read + + set_test 8,"STA (z,x)" + ldx #0 + setw addr,$2002 + sta (addr,x) ; no dummy read + jsr no_read + + set_test 9,"ROL abs" + rol $2022 ; $2022 + ror a + jsr single_read + + set_test 10,"ROL abs,x" + rol $2000,x ; $2022, $2022 + ror a + jsr double_read + rol $3FE0,x ; $3F02, $4002 + jsr dummy_read + + jmp tests_passed diff --git a/instr_misc/source/04-dummy_reads_apu.s b/instr_misc/source/04-dummy_reads_apu.s new file mode 100644 index 0000000..0b3ede0 --- /dev/null +++ b/instr_misc/source/04-dummy_reads_apu.s @@ -0,0 +1,124 @@ +; Tests dummy reads for (hopefully) ALL instructions which do them, +; including unofficial ones. Prints opcode(s) of failed +; instructions. Requires that APU implement $4015 IRQ flag reading. + +.include "shell.inc" + +zp_byte opcode +zp_byte errors + +begin: setb SNDMODE,0 + lda SNDCHN + delay 30000 + setw addr,SNDCHN+3 + rts + +failed: + inc errors + lda opcode + jsr print_a + jsr play_byte + rts + +.macro test_ x_, y_, instr + .local instr_ + lda instr_ + sta opcode + jsr begin + ldx #x_ + ldy #y_ +instr_: instr + lda SNDCHN + and #$40 +.endmacro + +.macro test_x opcode + test_ 0,-3,{.byte opcode,SNDCHN} + beq :+ + test_ -3,0,{.byte opcode,SNDCHN} + beq :++ +: jsr failed +: +.endmacro + +.macro test_y opcode + test_ -3,0,{.byte opcode,SNDCHN} + beq :+ + test_ 0,-3,{.byte opcode,SNDCHN} + beq :++ +: jsr failed +: +.endmacro + +.macro test_i opcode + test_ -3,0,{.byte opcode,addr} + beq :+ + test_ 0,-3,{.byte opcode,addr} + beq :++ +: jsr failed +: +.endmacro + +.macro test_xyi opcode + test_x opcode + test_y opcode-4 + test_i opcode-12 +.endmacro + +main: + set_test 2,"Official opcodes failed" + + test_xyi $1D ; ORA + test_xyi $3D ; AND + test_xyi $5D ; EOR + test_xyi $7D ; ADC + test_xyi $9D ; STA + test_xyi $BD ; LDA + test_xyi $DD ; CMP + test_xyi $FD ; SBC + + test_x $1E ; ASL + test_x $3E ; ROL + test_x $5E ; LSR + test_x $7E ; ROR + test_x $DE ; DEC + test_x $FE ; INC + + test_x $BC ; LDY + + test_y $BE ; LDX + + lda errors + jne test_failed + + set_test 2,"Unofficial opcodes failed" + + test_x $1C ; SKW + test_x $3C ; SKW + test_x $5C ; SKW + test_x $7C ; SKW + test_x $DC ; SKW + test_x $FC ; SKW + + test_xyi $1F ; ASO + test_xyi $3F ; RLA + test_xyi $5F ; LSE + test_xyi $7F ; RRA + test_xyi $DF ; DCM + test_xyi $FF ; INS + + test_x $9C ; SAY + + test_y $BF ; LAX + test_y $9B ; TAS + test_y $9E ; XAS + test_y $9F ; AXA + test_y $BB ; LAS + + test_i $93 ; AXA + test_i $B3 ; LAX + + lda errors + jne test_failed + + jmp tests_passed diff --git a/instr_misc/source/common/ascii.chr b/instr_misc/source/common/ascii.chr new file mode 100644 index 0000000000000000000000000000000000000000..2c5b26bdb43aac9cd7899428c45f832832c056c7 GIT binary patch literal 1536 zcmZA1F>Bl~6bJA}22bM1sKMN4&{PZ+N2X5w5TXtj#5g8 zk|~7Jq1<59{-30Gxm3CEvn*NCd$L9JvS==ZzveVerGrRQp70}4@0{&C`ZwQ=N}KTw ziT$g7_&B~MQ7Ki%6FY^8R7avSs2fKjjrOk{@rbDPf&~&5Smn_S9(Z;s*F++btIg~c zCNl2k?C|zJKD-}D)B^{;km%#a&Ob7Vi_*4>p2XfxDI+Fv4Qt2kqIF@7sEavbeq%_S zzxvkj# zQ;a!A60vyxk!Z&d!f4UIdP*_IbRsc_u!fN7rJ>aW?OeEzGlyPoUKaU3~x67!}X_IUrqZOO})#2f6s z>aIw%_^^~h{+id=Nd6u~z9z~Q7@R5BBGIfo;uk|WrG)(zaX*DLb9+&tcS@c_zQ2ar z&i2O4oF9=0{XJgrW*s-R@e{sfe9h>8wjM?Mb|mdXC>xLdRql*Z9%6|e^Wku~@c4)Y zqApraE$SlTJ7MGT23O1aa7c;AM}9B(`RW{Ibwa&qJf`ij-X>wTZxh-toOxZS7qL1% zKS{*hnb&u=qL>E843YoQ_&=NGz`d-WPF?(^Ts{iSGAj#DXKR$=8?VAHdBS Ag#Z8m literal 0 HcmV?d00001 diff --git a/instr_misc/source/common/build_rom.s b/instr_misc/source/common/build_rom.s new file mode 100644 index 0000000..dcb7df5 --- /dev/null +++ b/instr_misc/source/common/build_rom.s @@ -0,0 +1,92 @@ +; Builds program as iNES ROM + +; Default is 16K PRG and 8K CHR ROM, NROM (0) + +.if 0 ; Options to set before .include "shell.inc": +CHR_RAM=1 ; Use CHR-RAM instead of CHR-ROM +CART_WRAM=1 ; Use mapper that supports 8K WRAM in cart +CUSTOM_MAPPER=n ; Specify mapper number +.endif + +.ifndef CUSTOM_MAPPER + .ifdef CART_WRAM + CUSTOM_MAPPER = 2 ; UNROM + .else + CUSTOM_MAPPER = 0 ; NROM + .endif +.endif + +;;;; iNES header +.ifndef CUSTOM_HEADER + .segment "HEADER" + .byte $4E,$45,$53,26 ; "NES" EOF + + .ifdef CHR_RAM + .byte 2,0 ; 32K PRG, CHR RAM + .else + .byte 2,1 ; 32K PRG, 8K CHR + .endif + + .byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring +.endif + +.ifndef CUSTOM_VECTORS + .segment "VECTORS" + .word -1,-1,-1, nmi, reset, irq +.endif + +;;;; CHR-RAM/ROM +.ifdef CHR_RAM + .define CHARS "CHARS_PRG" + .segment CHARS + ascii_chr: + + .segment "CHARS_PRG_ASCII" + .align $200 + .incbin "ascii.chr" + ascii_chr_end: +.else + .define CHARS "CHARS" + .segment "CHARS_ASCII" + .align $200 + .incbin "ascii.chr" + .res $1800 +.endif + +.segment CHARS + .res $10,0 + +;;;; Shell +.ifndef NEED_CONSOLE + NEED_CONSOLE=1 +.endif + +; Move code to $C000 +.segment "DMC" + .res $4000 + +.include "shell.s" + +std_reset: + lda #0 + sta PPUCTRL + sta PPUMASK + jmp run_shell + +init_runtime: + .ifdef CHR_RAM + load_ascii_chr + .endif + rts + +post_exit: + jsr set_final_result + jmp forever + +; This helps devcart recover after running test. +; It is never executed by test ROM. +.segment "LOADER" + .incbin "devcart.bin" + +.code +.align 256 diff --git a/instr_misc/source/common/console.s b/instr_misc/source/common/console.s new file mode 100644 index 0000000..036553c --- /dev/null +++ b/instr_misc/source/common/console.s @@ -0,0 +1,331 @@ +; Scrolling text console with line wrapping, 30x29 characters. +; Buffers lines for speed. Will work even if PPU doesn't +; support scrolling (until text reaches bottom). Keeps border +; along bottom in case TV cuts it off. +; +; Defers most initialization until first newline, at which +; point it clears nametable and makes palette non-black. +; +; ** ASCII font must already be in CHR, and mirroring +; must be vertical or single-screen. + +.ifndef CONSOLE_COLOR + CONSOLE_COLOR = $30 ; white +.endif + +console_screen_width = 32 ; if lower than 32, left-justifies + +; Number of characters of margin on left and right, to avoid +; text getting cut off by common TVs. OK if either/both are 0. +console_left_margin = 1 +console_right_margin = 1 + +console_width = console_screen_width - console_left_margin - console_right_margin + +zp_byte console_pos ; 0 to console_width +zp_byte console_scroll +zp_byte console_temp +bss_res console_buf,console_width + + +; Initializes console +console_init: + ; Flag that console hasn't been initialized + setb console_scroll,-1 + + setb console_pos,0 + rts + + +; Hides console by disabling PPU rendering and blacking out +; first four entries of palette. +; Preserved: A, X, Y +console_hide: + pha + jsr console_wait_vbl_ + setb PPUMASK,0 + lda #$0F + jsr console_load_palette_ + pla + rts + + +; Shows console display +; Preserved: X, Y +console_show: + pha + lda #CONSOLE_COLOR + jsr console_show_custom_color_ + pla + rts + + +; Prints char A to console. Will not appear until +; a newline or flush occurs. +; Preserved: A, X, Y +console_print: + cmp #10 + beq console_newline + + sty console_temp + + ldy console_pos + cpy #console_width + beq console_full_ + sta console_buf,y + iny + sty console_pos + + ldy console_temp + rts + + +; Displays current line and starts new one +; Preserved: A, X, Y +console_newline: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_scroll_up_ + setb console_pos,0 + pla + rts + + +; Displays current line's contents without scrolling. +; Preserved: A, X, Y +console_flush: + pha + jsr console_wait_vbl_ + jsr console_flush_ + jsr console_apply_scroll_ + pla + rts + + +;**** Internal routines **** + +console_full_: + ldy console_temp + + ; Line is full + + ; If space, treat as newline + cmp #' ' + beq console_newline + + ; Wrap current line at appropriate point + pha + tya + pha + jsr console_wrap_ + pla + tay + pla + + jmp console_print + + +; Inserts newline into buffer at appropriate position, leaving +; next line ready in buffer +; Preserved: X, console_temp +console_wrap_: + ; Find beginning of last word + ldy #console_width + lda #' ' +: dey + bmi console_newline + cmp console_buf,y + bne :- + + ; y = 0 to console_width-1 + + ; Flush through current word and put remaining + ; in buffer for next line + jsr console_wait_vbl_ + + ; Time to last PPU write: 207 + 32*(26 + 10) + + lda console_scroll + jsr console_set_ppuaddr_ + + stx console_pos ; save X + + ldx #0 + + ; Print everything before last word +: lda console_buf,x + sta PPUDATA + inx + dey + bpl :- + + ; x = 1 to console_width + + ; Move last word to beginning of buffer, and + ; print spaces for rest of line + ldy #0 + beq :++ +: lda #' ' + sta PPUDATA + lda console_buf,x + inx + sta console_buf,y + iny +: cpx #console_width + bne :-- + + ldx console_pos ; restore X + + ; Append new text after that + sty console_pos + + ; FALL THROUGH + + +; Scrolls up 8 pixels and clears one line BELOW new line +; Preserved: X, console_temp +console_scroll_up_: + ; Scroll up 8 pixels + lda console_scroll + jsr console_add_8_to_scroll_ + sta console_scroll + + ; Clear line AFTER that on screen + jsr console_add_8_to_scroll_ + jsr console_set_ppuaddr_ + + ldy #console_width + lda #' ' +: sta PPUDATA + dey + bne :- + ; FALL THROUGH + + +; Applies current scrolling position to PPU +; Preserved: X, Y, console_temp +console_apply_scroll_: + lda #0 + sta PPUADDR + sta PPUADDR + + sta PPUSCROLL + lda console_scroll + jsr console_add_8_to_scroll_ + jsr console_add_8_to_scroll_ + sta PPUSCROLL + rts + + +; Sets PPU address for row +; In: A = scroll position +; Preserved: X, Y +console_set_ppuaddr_: + sta console_temp + lda #$08 + asl console_temp + rol a + asl console_temp + rol a + sta PPUADDR + lda console_temp + ora #console_left_margin + sta PPUADDR + rts + + +; A = (A + 8) % 240 +; Preserved: X, Y +console_add_8_to_scroll_: + cmp #240-8 + bcc :+ + adc #16-1;+1 for set carry +: adc #8 + rts + + +console_show_custom_color_: + pha + jsr console_wait_vbl_ + setb PPUMASK,PPUMASK_BG0 + pla + jsr console_load_palette_ + jmp console_apply_scroll_ + + +console_load_palette_: + pha + setb PPUADDR,$3F + setb PPUADDR,$00 + setb PPUDATA,$0F ; black + pla + sta PPUDATA + sta PPUDATA + sta PPUDATA + rts + + +; Initializes PPU if necessary, then waits for VBL +; Preserved: A, X, Y, console_temp +console_wait_vbl_: + lda console_scroll + cmp #-1 + bne @already_initialized + + ; Deferred initialization of PPU until first use of console + + ; In case PPU doesn't support scrolling, start a + ; couple of lines down + setb console_scroll,16 + + jsr console_hide + tya + pha + + ; Fill nametable with spaces + setb PPUADDR,$20 + setb PPUADDR,$00 + ldy #240 + lda #' ' +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dey + bne :- + + ; Clear attributes + lda #0 + ldy #$40 +: sta PPUDATA + dey + bne :- + + pla + tay + + jsr console_show +@already_initialized: + jmp wait_vbl_optional + + +; Flushes current line +; Preserved: X, Y +console_flush_: + lda console_scroll + jsr console_set_ppuaddr_ + + sty console_temp + + ; Copy line + ldy #0 + beq :++ +: lda console_buf,y + sta PPUDATA + iny +: cpy console_pos + bne :-- + + ldy console_temp + rts diff --git a/instr_misc/source/common/crc.s b/instr_misc/source/common/crc.s new file mode 100644 index 0000000..de96c2a --- /dev/null +++ b/instr_misc/source/common/crc.s @@ -0,0 +1,118 @@ +; CRC-32 checksum calculation + +zp_res checksum,4 +zp_byte checksum_temp +zp_byte checksum_off_ + +; Turns CRC updating on/off. Allows nesting. +; Preserved: A, X, Y +crc_off: + dec checksum_off_ + rts + +crc_on: inc checksum_off_ + beq :+ + jpl internal_error ; catch unbalanced crc calls +: rts + + +; Initializes checksum module. Might initialize tables +; in the future. +init_crc: + jmp reset_crc + + +; Clears checksum and turns it on +; Preserved: X, Y +reset_crc: + lda #0 + sta checksum_off_ + lda #$FF + sta checksum + sta checksum + 1 + sta checksum + 2 + sta checksum + 3 + rts + + +; Updates checksum with byte in A (unless disabled via crc_off) +; Preserved: A, X, Y +; Time: 357 clocks average +update_crc: + bit checksum_off_ + bmi update_crc_off +update_crc_: + pha + stx checksum_temp + eor checksum + ldx #8 +@bit: lsr checksum+3 + ror checksum+2 + ror checksum+1 + ror a + bcc :+ + sta checksum + lda checksum+3 + eor #$ED + sta checksum+3 + lda checksum+2 + eor #$B8 + sta checksum+2 + lda checksum+1 + eor #$83 + sta checksum+1 + lda checksum + eor #$20 +: dex + bne @bit + sta checksum + ldx checksum_temp + pla +update_crc_off: + rts + + +; Prints checksum as 8-character hex value +print_crc: + jsr crc_off + + ; Print complement + ldx #3 +: lda checksum,x + eor #$FF + jsr print_hex + dex + bpl :- + + jmp crc_on + + +; EQ if checksum matches CRC +; Out: A=0 and EQ if match, A>0 and NE if different +; Preserved: X, Y +.macro is_crc crc + jsr_with_addr is_crc_,{.dword crc} +.endmacro + +is_crc_: + tya + pha + + ; Compare with complemented checksum + ldy #3 +: lda (ptr),y + sec + adc checksum,y + bne @wrong + dey + bpl :- + pla + tay + lda #0 + rts + +@wrong: + pla + tay + lda #1 + rts diff --git a/instr_misc/source/common/delay.s b/instr_misc/source/common/delay.s new file mode 100644 index 0000000..2ff059a --- /dev/null +++ b/instr_misc/source/common/delay.s @@ -0,0 +1,190 @@ +; Delays in CPU clocks, milliseconds, etc. All routines are re-entrant +; (no global data). No routines touch X or Y during execution. +; Code generated by macros is relocatable; it contains no JMPs to itself. + +zp_byte delay_temp_ ; only written to + +; Delays n clocks, from 2 to 16777215 +; Preserved: A, X, Y, flags +.macro delay n + .if (n) < 0 .or (n) = 1 .or (n) > 16777215 + .error "Delay out of range" + .endif + delay_ (n) +.endmacro + + +; Delays n milliseconds (1/1000 second) +; n can range from 0 to 1100. +; Preserved: A, X, Y, flags +.macro delay_msec n + .if (n) < 0 .or (n) > 1100 + .error "time out of range" + .endif + delay ((n)*CLOCK_RATE+500)/1000 +.endmacro + + +; Delays n microseconds (1/1000000 second). +; n can range from 0 to 100000. +; Preserved: A, X, Y, flags +.macro delay_usec n + .if (n) < 0 .or (n) > 100000 + .error "time out of range" + .endif + delay ((n)*((CLOCK_RATE+50)/100)+5000)/10000 +.endmacro + +.align 64 + +; Delays A clocks + overhead +; Preserved: X, Y +; Time: A+25 clocks (including JSR) +: sbc #7 ; carry set by CMP +delay_a_25_clocks: + cmp #7 + bcs :- ; do multiples of 7 + lsr a ; bit 0 + bcs :+ +: ; A=clocks/2, either 0,1,2,3 + beq @zero ; 0: 5 + lsr a + beq :+ ; 1: 7 + bcc :+ ; 2: 9 +@zero: bne :+ ; 3: 11 +: rts ; (thanks to dclxvi for the algorithm) + + +; Delays A*256 clocks + overhead +; Preserved: X, Y +; Time: A*256+16 clocks (including JSR) +delay_256a_16_clocks: + cmp #0 + bne :+ + rts +delay_256a_11_clocks_: +: pha + lda #256-19-22 + jsr delay_a_25_clocks + pla + clc + adc #-1 + bne :- + rts + + +; Delays A*65536 clocks + overhead +; Preserved: X, Y +; Time: A*65536+16 clocks (including JSR) +delay_65536a_16_clocks: + cmp #0 + bne :+ + rts +delay_65536a_11_clocks_: +: pha + lda #256-19-22-13 + jsr delay_a_25_clocks + lda #255 + jsr delay_256a_11_clocks_ + pla + clc + adc #-1 + bne :- + rts + +max_short_delay = 41 + + ; delay_short_ macro jumps into these + .res (max_short_delay-12)/2,$EA ; NOP +delay_unrolled_: + rts + +.macro delay_short_ n + .if n < 0 .or n = 1 .or n > max_short_delay + .error "Internal delay error" + .endif + .if n = 0 + ; nothing + .elseif n = 2 + nop + .elseif n = 3 + sta 65536+17 + lda #^(n - 15) + jsr delay_65536a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (((n - 15) & $FFFF) + 2) + .elseif n > 255+27 + lda #>(n - 15) + jsr delay_256a_11_clocks_ + ; +2 ensures remaining clocks is never 1 + delay_nosave_ (<(n - 15) + 2) + .elseif n >= 27 + lda #<(n - 27) + jsr delay_a_25_clocks + .else + delay_short_ n + .endif +.endmacro + +.macro delay_ n + .if n > max_short_delay + php + pha + delay_nosave_ (n - 14) + pla + plp + .else + delay_short_ n + .endif +.endmacro + diff --git a/instr_misc/source/common/devcart.bin b/instr_misc/source/common/devcart.bin new file mode 100644 index 0000000000000000000000000000000000000000..6c515bed582fdf11468afe914012327fc05dd241 GIT binary patch literal 256 zcmWH^NL5J7&&kOz&&*3#NX}15Rmdz>C@oG+QAny(NJ%YAPAn?XQ}8SS3FoDjr4}iq zR-`7EmOvDgq!yPb1o`{wF|6e1Wo+nWSim*m*GlJJQHMo8=5pA-xbRD%>fgzI7k;)f z0vV}{Q<+{|__E@{s~iS~m5ej+CmVC%T>_tgUCSAOCSS`$7e{HGuA{P+Jq0QU>4 Ag#Z8m literal 0 HcmV?d00001 diff --git a/instr_misc/source/common/macros.inc b/instr_misc/source/common/macros.inc new file mode 100644 index 0000000..d4cb72e --- /dev/null +++ b/instr_misc/source/common/macros.inc @@ -0,0 +1,169 @@ +; jxx equivalents to bxx +.macpack longbranch + +; blt, bge equivalents to bcc, bcs +.define blt bcc +.define bge bcs +.define jge jcs +.define jlt jcc + +; Puts data in another segment +.macro seg_data seg,data + .pushseg + .segment seg + data + .popseg +.endmacro + +; Reserves size bytes in zeropage/bss for name. +; If size is omitted, reserves one byte. +.macro zp_res name,size + .ifblank size + zp_res name,1 + .else + seg_data "ZEROPAGE",{name: .res size} + .endif +.endmacro + +.macro bss_res name,size + .ifblank size + bss_res name,1 + .else + seg_data "BSS",{name: .res size} + .endif +.endmacro + +.macro nv_res name,size + .ifblank size + nv_res name,1 + .else + seg_data "NVRAM",{name: .res size} + .endif +.endmacro + +; Reserves one byte in zeropage for name (very common) +.macro zp_byte name + seg_data "ZEROPAGE",{name: .res 1} +.endmacro + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data "RODATA",{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + lda #start +: pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne :- +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + ldy #>(start) + lda #<(start) +: tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc :+ + iny +.else + bcs :+ + dey +.endif +: cmp #<((end)+(step)) + bne :-- + cpy #>((end)+(step)) + bne :-- +.endmacro + +; Copies byte from in to out +; Preserved: X, Y +.macro mov out, in + lda in + sta out +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments word at Addr and sets Z flag appropriately +; Preserved: A, X, Y +.macro incw Addr + .local @incw_skip ; doesn't work, so HOW THE HELL DO YOU MAKE A LOCAL LABEL IN A MACRO THAT DOESN"T DISTURB INVOKING CODE< HUH?????? POS + inc Addr + bne @incw_skip + inc Addr+1 +@incw_skip: +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro diff --git a/instr_misc/source/common/neshw.inc b/instr_misc/source/common/neshw.inc new file mode 100644 index 0000000..814d772 --- /dev/null +++ b/instr_misc/source/common/neshw.inc @@ -0,0 +1,43 @@ +; NES I/O locations and masks + +; Clocks per second +.ifndef CLOCK_RATE + CLOCK_RATE = 1789773 ; NTSC +; CLOCK_RATE = 1662607 ; PAL +.endif + +.ifndef BUILD_NSF + +; PPU +PPUCTRL = $2000 +PPUMASK = $2001 +PPUSTATUS = $2002 +SPRADDR = $2003 +SPRDATA = $2004 +PPUSCROLL = $2005 +PPUADDR = $2006 +PPUDATA = $2007 +SPRDMA = $4014 + +PPUCTRL_NMI = $80 +PPUMASK_BG0 = $0A +PPUCTRL_8X8 = $00 +PPUCTRL_8X16 = $20 +PPUMASK_SPR = $14 +PPUMASK_BG0CLIP = $08 + +.endif + +; APU +SNDCHN = $4015 +JOY1 = $4016 +JOY2 = $4017 +SNDMODE = $4017 + +SNDMODE_NOIRQ = $40 + +.if CLOCK_RATE = 1789773 + PPU_FRAMELEN = 29781 +.elseif CLOCK_RATE = 1662607 + PPU_FRAMELEN = 33248 +.endif diff --git a/instr_misc/source/common/ppu.s b/instr_misc/source/common/ppu.s new file mode 100644 index 0000000..21cad12 --- /dev/null +++ b/instr_misc/source/common/ppu.s @@ -0,0 +1,142 @@ +; PPU utilities + +bss_res ppu_not_present + +; Sets PPUADDR to w +; Preserved: X, Y +.macro set_ppuaddr w + bit PPUSTATUS + setb PPUADDR,>w + setb PPUADDR, 1789773 + .error "Currently only supports NTSC" + .endif + delay ((n)*341)/3 +.endmacro + + +; Waits for VBL then disables PPU rendering. +; Preserved: A, X, Y +disable_rendering: + pha + jsr wait_vbl_optional + setb PPUMASK,0 + pla + rts + + +; Fills first nametable with $00 +; Preserved: Y +clear_nametable: + ldx #$20 + bne clear_nametable_ + +clear_nametable2: + ldx #$24 +clear_nametable_: + lda #0 + jsr fill_screen_ + + ; Clear pattern table + ldx #64 +: sta PPUDATA + dex + bne :- + rts + + +; Fills screen with tile A +; Preserved: A, Y +fill_screen: + ldx #$20 + bne fill_screen_ + +; Same as fill_screen, but fills other nametable +fill_screen2: + ldx #$24 +fill_screen_: + stx PPUADDR + ldx #$00 + stx PPUADDR + ldx #240 +: sta PPUDATA + sta PPUDATA + sta PPUDATA + sta PPUDATA + dex + bne :- + rts + + +; Fills palette with $0F +; Preserved: Y +clear_palette: + set_ppuaddr $3F00 + ldx #$20 + lda #$0F +: sta PPUDATA + dex + bne :- + + +; Fills OAM with $FF +; Preserved: Y +clear_oam: + lda #$FF + +; Fills OAM with A +; Preserved: A, Y +fill_oam: + ldx #0 + stx SPRADDR +: sta SPRDATA + dex + bne :- + rts + + +; Initializes wait_vbl_optional. Must be called before +; using it. +.align 32 +init_wait_vbl: + ; Wait for VBL flag to be set, or ~60000 + ; clocks (2 frames) to pass + ldy #24 + ldx #1 + bit PPUSTATUS +: bit PPUSTATUS + bmi @set + dex + bne :- + dey + bpl :- +@set: + ; Be sure flag didn't stay set (in case + ; PPUSTATUS always has high bit set) + tya + ora PPUSTATUS + sta ppu_not_present + rts + + +; Same as wait_vbl, but returns immediately if PPU +; isn't working or doesn't support VBL flag +; Preserved: A, X, Y +.align 16 +wait_vbl_optional: + bit ppu_not_present + bmi :++ + ; FALL THROUGH + +; Clears VBL flag then waits for it to be set. +; Preserved: A, X, Y +wait_vbl: + bit PPUSTATUS +: bit PPUSTATUS + bpl :- +: rts diff --git a/instr_misc/source/common/print.s b/instr_misc/source/common/print.s new file mode 100644 index 0000000..29fbc23 --- /dev/null +++ b/instr_misc/source/common/print.s @@ -0,0 +1,235 @@ +; Prints values in various ways to output, +; including numbers and strings. + +newline = 10 + +zp_byte print_temp_ + +; Prints indicated register to console as two hex +; chars and space +; Preserved: A, X, Y, flags +print_a: + php + pha +print_reg_: + jsr print_hex + lda #' ' + jsr print_char_ + pla + plp + rts + +print_x: + php + pha + txa + jmp print_reg_ + +print_y: + php + pha + tya + jmp print_reg_ + +print_p: + php + pha + php + pla + jmp print_reg_ + +print_s: + php + pha + txa + tsx + inx + inx + inx + inx + jsr print_x + tax + pla + plp + rts + + +; Prints A as two hex characters, NO space after +; Preserved: A, X, Y +print_hex: + jsr update_crc + + pha + lsr a + lsr a + lsr a + lsr a + jsr @nibble + pla + + pha + and #$0F + jsr @nibble + pla + rts + +@nibble: + cmp #10 + blt @digit + adc #6;+1 since carry is set +@digit: adc #'0' + jmp print_char_ + + +; Prints character and updates checksum UNLESS +; it's a newline. +; Preserved: A, X, Y +print_char: + cmp #newline + beq :+ + jsr update_crc +: pha + jsr print_char_ + pla + rts + + +; Prints space. Does NOT update checksum. +; Preserved: A, X, Y +print_space: + pha + lda #' ' + jsr print_char_ + pla + rts + + +; Advances to next line. Does NOT update checksum. +; Preserved: A, X, Y +print_newline: + pha + lda #newline + jsr print_char_ + pla + rts + + +; Prints string +; Preserved: A, X, Y +.macro print_str str,str2 + jsr print_str_ + .byte str + .ifnblank str2 + .byte str2 + .endif + .byte 0 +.endmacro + + +print_str_: + sta print_temp_ + + pla + sta addr + pla + sta addr+1 + + jsr inc_addr + jsr print_str_addr + + lda print_temp_ + jmp (addr) + + +; Prints string at addr and leaves addr pointing to +; byte AFTER zero terminator. +; Preserved: A, X, Y +print_str_addr: + pha + tya + pha + + ldy #0 + beq :+ ; always taken +@loop: jsr print_char + jsr inc_addr +: lda (addr),y + bne @loop + + pla + tay + pla + ; FALL THROUGH + +; Increments 16-bit value in addr. +; Preserved: A, X, Y +inc_addr: + inc addr + beq :+ + rts +: inc addr+1 + rts + + +; Prints A as 1-3 digit decimal value, NO space after. +; Preserved: A, X, Y +print_dec: + pha + sta print_temp_ + txa + pha + lda print_temp_ + + ; Hundreds + cmp #10 + blt @ones + cmp #100 + blt @tens + ldx #'0'-1 +: inx + sbc #100 + bge :- + adc #100 + jsr @digit + + ; Tens +@tens: sec + ldx #'0'-1 +: inx + sbc #10 + bge :- + adc #10 + jsr @digit + + ; Ones +@ones: ora #'0' + jsr print_char + pla + tax + pla + rts + + ; Print a single digit +@digit: pha + txa + jsr print_char + pla + rts + + +; Prints one of two characters based on condition. +; SEC; print_cc bcs,'C','-' prints 'C'. +; Preserved: A, X, Y, flags +.macro print_cc cond,yes,no + ; Avoids labels since they're not local + ; to macros in ca65. + php + pha + cond *+6 + lda #no + bne *+4 + lda #yes + jsr print_char + pla + plp +.endmacro diff --git a/instr_misc/source/common/shell.inc b/instr_misc/source/common/shell.inc new file mode 100644 index 0000000..0f2557c --- /dev/null +++ b/instr_misc/source/common/shell.inc @@ -0,0 +1,32 @@ +; Included at beginning of program + +.ifdef CUSTOM_PREFIX + .include "custom_prefix.s" +.endif + +; Sub-test in a multi-test ROM +.ifdef BUILD_MULTI + .include "build_multi.s" +.else + +; NSF music file +.ifdef BUILD_NSF + .include "build_nsf.s" +.endif + +; Devcart +.ifdef BUILD_DEVCART + .include "build_devcart.s" +.endif + +; NES internal RAM +.ifdef BUILD_NOCART + .include "build_nocart.s" +.endif + +; NES ROM (default) +.ifndef SHELL_INCLUDED + .include "build_rom.s" +.endif + +.endif ; .ifdef BUILD_MULTI diff --git a/instr_misc/source/common/shell.s b/instr_misc/source/common/shell.s new file mode 100644 index 0000000..fcd49a9 --- /dev/null +++ b/instr_misc/source/common/shell.s @@ -0,0 +1,331 @@ +; Common routines and runtime + +; Detect inclusion loops (otherwise ca65 goes crazy) +.ifdef SHELL_INCLUDED + .error "shell.s included twice" + .end +.endif +SHELL_INCLUDED = 1 + +;**** Special globals **** + +; Temporary variables that ANY routine might modify, so +; only use them between routine calls. +temp = <$A +temp2 = <$B +temp3 = <$C +addr = <$E +ptr = addr + +.segment "NVRAM" + ; Beginning of variables not cleared at startup + nvram_begin: + +;**** Code segment setup **** + +.segment "RODATA" + ; Any user code which runs off end might end up here, + ; so catch that mistake. + nop ; in case there was three-byte opcode before this + nop + jmp internal_error + +; Move code to $E200 ($200 bytes for text output) +.segment "DMC" + .res $2200 + +; Devcart corrupts byte at $E000 when powering off +.segment "CODE" + nop + +;**** Common routines **** + +.include "macros.inc" +.include "neshw.inc" +.include "print.s" +.include "delay.s" +.include "crc.s" +.include "testing.s" + +.ifdef NEED_CONSOLE + .include "console.s" +.else + ; Stubs so code doesn't have to care whether + ; console exists + console_init: + console_show: + console_hide: + console_print: + console_flush: + rts +.endif + +.ifndef CUSTOM_PRINT + .include "text_out.s" + + print_char_: + jsr write_text_out + jmp console_print + + stop_capture: + rts + +.endif + +;**** Shell core **** + +.ifndef CUSTOM_RESET + reset: + sei + jmp std_reset +.endif + + +; Sets up hardware then runs main +run_shell: + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + jsr init_shell + set_test $FF + jmp run_main + + +; Initializes shell +init_shell: + jsr clear_ram + jsr init_wait_vbl ; waits for VBL once here, + jsr wait_vbl_optional ; so only need to wait once more + jsr init_text_out + jsr init_testing + jsr init_runtime + jsr console_init + rts + + +; Runs main in consistent PPU/APU environment, then exits +; with code 0 +run_main: + jsr pre_main + jsr main + lda #0 + jmp exit + + +; Sets up environment for main to run in +pre_main: + +.ifndef BUILD_NSF + jsr disable_rendering + setb PPUCTRL,0 + jsr clear_palette + jsr clear_nametable + jsr clear_nametable2 + jsr clear_oam +.endif + + lda #$34 + pha + lda #0 + tax + tay + jsr wait_vbl_optional + plp + sta SNDMODE + rts + + +.ifndef CUSTOM_EXIT + exit: +.endif + +; Reports result and ends program +std_exit: + sei + cld + ldx #$FF + txs + pha + + setb SNDCHN,0 + .ifndef BUILD_NSF + setb PPUCTRL,0 + .endif + + pla + pha + jsr report_result + ;jsr clear_nvram ; TODO: was this needed for anything? + pla + jmp post_exit + + +; Reports final result code in A +report_result: + jsr :+ + jmp play_byte + +: jsr print_newline + jsr console_show + + ; 0: "" + cmp #1 + bge :+ + rts +: + ; 1: "Failed" + bne :+ + print_str {"Failed",newline} + rts + + ; n: "Failed #n" +: print_str "Failed #" + jsr print_dec + jsr print_newline + rts + +;**** Other routines **** + +; Reports internal error and exits program +internal_error: + print_str newline,"Internal error" + lda #255 + jmp exit + + +.import __NVRAM_LOAD__, __NVRAM_SIZE__ + +; Clears $0-($100+S) and nv_ram_end-$7FF +clear_ram: + lda #0 + + ; Main pages + tax +: sta 0,x + sta $300,x + sta $400,x + sta $500,x + sta $600,x + sta $700,x + inx + bne :- + + ; Stack except that above stack pointer + tsx + inx +: dex + sta $100,x + bne :- + + ; BSS except nvram + ldx #<__NVRAM_SIZE__ +: sta __NVRAM_LOAD__,x + inx + bne :- + + rts + + +; Clears nvram +clear_nvram: + ldx #<__NVRAM_SIZE__ + beq @empty + lda #0 +: dex + sta __NVRAM_LOAD__,x + bne :- +@empty: + rts + + +; Prints filename and newline, if available, otherwise nothing. +; Preserved: A, X, Y +print_filename: + .ifdef FILENAME_KNOWN + pha + jsr print_newline + setw addr,filename + jsr print_str_addr + jsr print_newline + pla + .endif + rts + +.pushseg +.segment "RODATA" + ; Filename terminated with zero byte. + filename: + .ifdef FILENAME_KNOWN + .incbin "ram:nes_temp" + .endif + .byte 0 +.popseg + + +;**** ROM-specific **** +.ifndef BUILD_NSF + +.include "ppu.s" + +avoid_silent_nsf: +play_byte: + rts + +; Loads ASCII font into CHR RAM +.macro load_ascii_chr + bit PPUSTATUS + setb PPUADDR,$00 + setb PPUADDR,$00 + setb addr,ascii_chr + ldy #0 +@page: + stx addr+1 +: lda (addr),y + sta PPUDATA + iny + bne :- + inx + cpx #>ascii_chr_end + bne @page +.endmacro + +; Disables interrupts and loops forever +.ifndef CUSTOM_FOREVER +forever: + sei + lda #0 + sta PPUCTRL +: beq :- + .res $10,$EA ; room for code to run loader +.endif + + +; Default NMI +.ifndef CUSTOM_NMI + zp_byte nmi_count + + nmi: + inc nmi_count + rti + + ; Waits for NMI. Must be using NMI handler that increments + ; nmi_count, with NMI enabled. + ; Preserved: X, Y + wait_nmi: + lda nmi_count + : cmp nmi_count + beq :- + rts +.endif + + +; Default IRQ +.ifndef CUSTOM_IRQ + irq: + bit SNDCHN ; clear APU IRQ flag + rti +.endif + +.endif diff --git a/instr_misc/source/common/testing.s b/instr_misc/source/common/testing.s new file mode 100644 index 0000000..ba41f03 --- /dev/null +++ b/instr_misc/source/common/testing.s @@ -0,0 +1,106 @@ +; Utilities for writing test ROMs + +; In NVRAM so these can be used before initializing runtime, +; then runtime initialized without clearing them +nv_res test_code ; code of current test +nv_res test_name,2 ; address of name of current test, or 0 of none + + +; Sets current test code and optional name. Also resets +; checksum. +; Preserved: A, X, Y +.macro set_test code,name + pha + lda #code + jsr set_test_ + .ifblank name + setb test_name+1,0 + .else + .local Addr + setw test_name,Addr + seg_data "RODATA",{Addr: .byte name,0} + .endif + pla +.endmacro + +set_test_: + sta test_code + jmp reset_crc + + +; Initializes testing module +init_testing: + jmp init_crc + + +; Reports that all tests passed +tests_passed: + jsr print_filename + print_str newline,"Passed" + lda #0 + jmp exit + + +; Reports "Done" if set_test has never been used, +; "Passed" if set_test 0 was last used, or +; failure if set_test n was last used. +tests_done: + ldx test_code + jeq tests_passed + inx + bne test_failed + jsr print_filename + print_str newline,"Done" + lda #0 + jmp exit + + +; Reports that the current test failed. Prints code and +; name last set with set_test, or just "Failed" if none +; have been set yet. +test_failed: + ldx test_code + + ; Treat $FF as 1, in case it wasn't ever set + inx + bne :+ + inx + stx test_code +: + ; If code >= 2, print name + cpx #2-1 ; -1 due to inx above + blt :+ + lda test_name+1 + beq :+ + jsr print_newline + sta addr+1 + lda test_name + sta addr + jsr print_str_addr + jsr print_newline +: + jsr print_filename + + ; End program + lda test_code + jmp exit + + +; If checksum doesn't match expected, reports failed test. +; Clears checksum afterwards. +; Preserved: A, X, Y +.macro check_crc expected + jsr_with_addr check_crc_,{.dword expected} +.endmacro + +check_crc_: + pha + jsr is_crc_ + bne :+ + jsr reset_crc + pla + rts + +: jsr print_newline + jsr print_crc + jmp test_failed diff --git a/instr_misc/source/common/text_out.s b/instr_misc/source/common/text_out.s new file mode 100644 index 0000000..3a4137f --- /dev/null +++ b/instr_misc/source/common/text_out.s @@ -0,0 +1,61 @@ +; Text output as expanding zero-terminated string at text_out_base + +; The final exit result byte is written here +final_result = $6000 + +; Text output is written here as an expanding +; zero-terminated string +text_out_base = $6004 + +bss_res text_out_temp +zp_res text_out_addr,2 + +init_text_out: + ldx #0 + + ; Put valid data first + setb text_out_base,0 + + lda #$80 + jsr set_final_result + + ; Now fill in signature that tells emulator there's + ; useful data there + setb text_out_base-3,$DE + setb text_out_base-2,$B0 + setb text_out_base-1,$61 + + ldx #>text_out_base + stx text_out_addr+1 + setb text_out_addr,". + +Several routines are available to print values and text to the console. +The first time a line of text is completed, the console initializes the +PPU. Most print routines update a running CRC-32 checksum which can be +checked with check_crc. This allows ALL the output to be checked very +easily. If the checksum doesn't match, it is printed, so during +development the code can be run on a NES to get the correct checksum, +which is then typed into the test code. The checksum is also useful when +comparing different outputs; rather than having to examine all the +output, one need only compare checksums. + +The default is to build an iNES ROM. Defining BUILD_NSF will build as an +NSF. The other build types aren't supported by the included code, due to +their complexity. + + +Macros +------ +Some macros are used to make common operations more convenient, defined +in common/macros.inc. The left is equivalent to the right: + + Macro Equivalent + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + blt bcc + + bge bcs + + jne label beq skip + jmp label + skip: + etc. + + setb addr,byte lda #byte + sta addr + + setw addr,word lda #word + sta addr+1 + + ldxy #value ldx #>value + ldy # diff --git a/instr_test-v3/all_instrs.nes b/instr_test-v3/all_instrs.nes new file mode 100644 index 0000000000000000000000000000000000000000..ff39446538f9a798be90127e636a7a8f846db5ed GIT binary patch literal 262160 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