From 8a8b4773734e5e466297feace2c7531f3dcc998d Mon Sep 17 00:00:00 2001 From: Gyorgy Szombathelyi Date: Thu, 26 Dec 2019 14:08:03 +0100 Subject: [PATCH] Galaxian Hw: mass update - All variants in one source tree (except ZigZag) - King & Balloon speech works - Eliminated some gated clocks and generated clocks. Use T80se. - Use common CPU and MiST components --- .../Z80 Based/AzurianAttack_MiST/Azurian.qpf | 30 - .../Z80 Based/AzurianAttack_MiST/Azurian.qsf | 186 -- .../Z80 Based/AzurianAttack_MiST/Azurian.srf | 54 - .../Z80 Based/AzurianAttack_MiST/README.txt | 24 - .../AzurianAttack_MiST/Release/Azurian.rbf | Bin 306194 -> 0 bytes .../Z80 Based/AzurianAttack_MiST/clean.bat | 37 - .../AzurianAttack_MiST/rtl/Azurian.sv | 192 -- .../AzurianAttack_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../AzurianAttack_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../AzurianAttack_MiST/rtl/build_id.tcl | 35 - .../AzurianAttack_MiST/rtl/cpu/T80.vhd | 1093 --------- .../AzurianAttack_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../AzurianAttack_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../AzurianAttack_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../AzurianAttack_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../AzurianAttack_MiST/rtl/cpu/T80as.vhd | 283 --- .../AzurianAttack_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/AzurianAttack_MiST/rtl/dac.vhd | 71 - .../AzurianAttack_MiST/rtl/dpram.vhd | 75 - .../AzurianAttack_MiST/rtl/galaxian.vhd | 446 ---- .../Z80 Based/AzurianAttack_MiST/rtl/hq2x.sv | 454 ---- .../AzurianAttack_MiST/rtl/mc_adec.vhd | 251 -- .../AzurianAttack_MiST/rtl/mc_bram.vhd | 182 -- .../AzurianAttack_MiST/rtl/mc_clocks.vhd | 85 - .../AzurianAttack_MiST/rtl/mc_col_pal.vhd | 78 - .../AzurianAttack_MiST/rtl/mc_hv_count.vhd | 145 -- .../AzurianAttack_MiST/rtl/mc_inport.vhd | 74 - .../AzurianAttack_MiST/rtl/mc_ld_pls.vhd | 115 - .../AzurianAttack_MiST/rtl/mc_logic.vhd | 92 - .../AzurianAttack_MiST/rtl/mc_missile.vhd | 107 - .../AzurianAttack_MiST/rtl/mc_sound_a.vhd | 117 - .../AzurianAttack_MiST/rtl/mc_sound_b.vhd | 253 -- .../AzurianAttack_MiST/rtl/mc_sound_vco.vhd | 49 - .../AzurianAttack_MiST/rtl/mc_stars.vhd | 90 - .../AzurianAttack_MiST/rtl/mc_video.vhd | 433 ---- .../AzurianAttack_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/AzurianAttack_MiST/rtl/osd.v | 194 -- .../Z80 Based/AzurianAttack_MiST/rtl/pll.qip | 4 - .../Z80 Based/AzurianAttack_MiST/rtl/pll.vhd | 451 ---- .../AzurianAttack_MiST/rtl/scandoubler.v | 194 -- .../AzurianAttack_MiST/rtl/sine_package.vhd | 152 -- .../AzurianAttack_MiST/rtl/spram.vhd | 55 - .../AzurianAttack_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/BlackHole_MiST/BlackHole.qpf | 30 - .../Z80 Based/BlackHole_MiST/BlackHole.qsf | 190 -- .../Z80 Based/BlackHole_MiST/BlackHole.srf | 52 - .../Z80 Based/BlackHole_MiST/README.txt | 24 - .../BlackHole_MiST/Release/BlackHole.rbf | Bin 302464 -> 0 bytes .../Z80 Based/BlackHole_MiST/clean.bat | 37 - .../Z80 Based/BlackHole_MiST/rtl/BlackHole.sv | 192 -- .../BlackHole_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../BlackHole_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../Z80 Based/BlackHole_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/BlackHole_MiST/rtl/cpu/T80.vhd | 1093 --------- .../BlackHole_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../BlackHole_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../BlackHole_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../BlackHole_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../BlackHole_MiST/rtl/cpu/T80as.vhd | 283 --- .../BlackHole_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/BlackHole_MiST/rtl/dac.vhd | 71 - .../Z80 Based/BlackHole_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/BlackHole_MiST/rtl/galaxian.vhd | 446 ---- .../Z80 Based/BlackHole_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/BlackHole_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/BlackHole_MiST/rtl/mc_bram.vhd | 182 -- .../BlackHole_MiST/rtl/mc_clocks.vhd | 88 - .../BlackHole_MiST/rtl/mc_col_pal.vhd | 78 - .../BlackHole_MiST/rtl/mc_hv_count.vhd | 145 -- .../BlackHole_MiST/rtl/mc_inport.vhd | 72 - .../BlackHole_MiST/rtl/mc_ld_pls.vhd | 115 - .../Z80 Based/BlackHole_MiST/rtl/mc_logic.vhd | 92 - .../BlackHole_MiST/rtl/mc_missile.vhd | 107 - .../BlackHole_MiST/rtl/mc_sound_a.vhd | 117 - .../BlackHole_MiST/rtl/mc_sound_b.vhd | 253 -- .../BlackHole_MiST/rtl/mc_sound_vco.vhd | 49 - .../Z80 Based/BlackHole_MiST/rtl/mc_stars.vhd | 90 - .../Z80 Based/BlackHole_MiST/rtl/mc_video.vhd | 433 ---- .../Z80 Based/BlackHole_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/BlackHole_MiST/rtl/osd.v | 194 -- .../Z80 Based/BlackHole_MiST/rtl/pll.qip | 4 - .../Z80 Based/BlackHole_MiST/rtl/pll.vhd | 451 ---- .../BlackHole_MiST/rtl/scandoubler.v | 194 -- .../BlackHole_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/BlackHole_MiST/rtl/spram.vhd | 55 - .../BlackHole_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/Catacomb_MiST/Catacomb.qpf | 30 - .../Z80 Based/Catacomb_MiST/Catacomb.qsf | 190 -- .../Z80 Based/Catacomb_MiST/Catacomb.srf | 54 - .../Z80 Based/Catacomb_MiST/README.txt | 24 - .../Catacomb_MiST/Release/Catacomb.rbf | Bin 323153 -> 0 bytes .../Z80 Based/Catacomb_MiST/clean.bat | 37 - .../Z80 Based/Catacomb_MiST/rtl/Catacomb.sv | 192 -- .../Catacomb_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../Catacomb_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../Z80 Based/Catacomb_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/Catacomb_MiST/rtl/cpu/T80.vhd | 1093 --------- .../Catacomb_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../Catacomb_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../Catacomb_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../Catacomb_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../Z80 Based/Catacomb_MiST/rtl/cpu/T80as.vhd | 283 --- .../Catacomb_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/Catacomb_MiST/rtl/dac.vhd | 71 - .../Z80 Based/Catacomb_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/Catacomb_MiST/rtl/galaxian.vhd | 446 ---- .../Z80 Based/Catacomb_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/Catacomb_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/Catacomb_MiST/rtl/mc_bram.vhd | 182 -- .../Z80 Based/Catacomb_MiST/rtl/mc_clocks.vhd | 85 - .../Catacomb_MiST/rtl/mc_col_pal.vhd | 78 - .../Catacomb_MiST/rtl/mc_hv_count.vhd | 145 -- .../Z80 Based/Catacomb_MiST/rtl/mc_inport.vhd | 74 - .../Z80 Based/Catacomb_MiST/rtl/mc_ld_pls.vhd | 115 - .../Z80 Based/Catacomb_MiST/rtl/mc_logic.vhd | 92 - .../Catacomb_MiST/rtl/mc_missile.vhd | 107 - .../Catacomb_MiST/rtl/mc_sound_a.vhd | 117 - .../Catacomb_MiST/rtl/mc_sound_b.vhd | 253 -- .../Catacomb_MiST/rtl/mc_sound_vco.vhd | 49 - .../Z80 Based/Catacomb_MiST/rtl/mc_stars.vhd | 90 - .../Z80 Based/Catacomb_MiST/rtl/mc_video.vhd | 433 ---- .../Z80 Based/Catacomb_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/Catacomb_MiST/rtl/osd.v | 194 -- .../Z80 Based/Catacomb_MiST/rtl/pll.vhd | 451 ---- .../Z80 Based/Catacomb_MiST/rtl/scandoubler.v | 194 -- .../Catacomb_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/Catacomb_MiST/rtl/spram.vhd | 55 - .../Catacomb_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/ChewingGum_MiST/ChewingGum.qpf | 30 - .../Z80 Based/ChewingGum_MiST/ChewingGum.qsf | 187 -- .../Z80 Based/ChewingGum_MiST/ChewingGum.srf | 57 - .../Z80 Based/ChewingGum_MiST/README.txt | 24 - .../ChewingGum_MiST/Release/ChewingGum.rbf | Bin 271799 -> 0 bytes .../Z80 Based/ChewingGum_MiST/clean.bat | 37 - .../ChewingGum_MiST/rtl/ChewingGum_MiST.sv | 192 -- .../Z80 Based/ChewingGum_MiST/rtl/Pisces.sv | 193 -- .../rtl/TripleDrawPoker_MiST.sv | 192 -- .../ChewingGum_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/ChewingGum_MiST/rtl/cpu/T80.vhd | 1093 --------- .../ChewingGum_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../ChewingGum_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../ChewingGum_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../ChewingGum_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../ChewingGum_MiST/rtl/cpu/T80as.vhd | 283 --- .../ChewingGum_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/ChewingGum_MiST/rtl/dac.vhd | 71 - .../Z80 Based/ChewingGum_MiST/rtl/dpram.vhd | 75 - .../ChewingGum_MiST/rtl/galaxian.vhd | 442 ---- .../Z80 Based/ChewingGum_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/ChewingGum_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/ChewingGum_MiST/rtl/mc_bram.vhd | 182 -- .../ChewingGum_MiST/rtl/mc_clocks.vhd | 85 - .../ChewingGum_MiST/rtl/mc_col_pal.vhd | 75 - .../ChewingGum_MiST/rtl/mc_hv_count.vhd | 145 -- .../ChewingGum_MiST/rtl/mc_inport.vhd | 86 - .../ChewingGum_MiST/rtl/mc_ld_pls.vhd | 115 - .../ChewingGum_MiST/rtl/mc_logic.vhd | 92 - .../ChewingGum_MiST/rtl/mc_missile.vhd | 107 - .../ChewingGum_MiST/rtl/mc_sound_a.vhd | 117 - .../ChewingGum_MiST/rtl/mc_sound_b.vhd | 253 -- .../ChewingGum_MiST/rtl/mc_sound_vco.vhd | 49 - .../ChewingGum_MiST/rtl/mc_stars.vhd | 90 - .../ChewingGum_MiST/rtl/mc_video.vhd | 430 ---- .../Z80 Based/ChewingGum_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/ChewingGum_MiST/rtl/osd.v | 194 -- .../Z80 Based/ChewingGum_MiST/rtl/pll.vhd | 451 ---- .../ChewingGum_MiST/rtl/scandoubler.v | 194 -- .../ChewingGum_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/ChewingGum_MiST/rtl/spram.vhd | 55 - .../ChewingGum_MiST/rtl/tripledrawpoker.vhd | 443 ---- .../ChewingGum_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/DevilFish_MiST/DevilFish.qpf | 29 - .../Z80 Based/DevilFish_MiST/DevilFish.qsf | 185 -- .../Z80 Based/DevilFish_MiST/DevilFish.srf | 51 - .../Z80 Based/DevilFish_MiST/README.txt | 24 - .../DevilFish_MiST/Release/DevilFish.rbf | Bin 310161 -> 0 bytes .../Z80 Based/DevilFish_MiST/clean.bat | 37 - .../Z80 Based/DevilFish_MiST/rtl/DevilFish.sv | 187 -- .../DevilFish_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../DevilFish_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../Z80 Based/DevilFish_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/DevilFish_MiST/rtl/cpu/T80.vhd | 1093 --------- .../DevilFish_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../DevilFish_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../DevilFish_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../DevilFish_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../DevilFish_MiST/rtl/cpu/T80as.vhd | 283 --- .../DevilFish_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/DevilFish_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/DevilFish_MiST/rtl/galaxian.vhd | 452 ---- .../Z80 Based/DevilFish_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/DevilFish_MiST/rtl/mc_bram.vhd | 182 -- .../DevilFish_MiST/rtl/mc_clocks.vhd | 88 - .../DevilFish_MiST/rtl/mc_col_pal.vhd | 78 - .../DevilFish_MiST/rtl/mc_hv_count.vhd | 145 -- .../DevilFish_MiST/rtl/mc_inport.vhd | 78 - .../DevilFish_MiST/rtl/mc_ld_pls.vhd | 115 - .../Z80 Based/DevilFish_MiST/rtl/mc_logic.vhd | 92 - .../DevilFish_MiST/rtl/mc_missile.vhd | 107 - .../DevilFish_MiST/rtl/mc_sound_a.vhd | 117 - .../DevilFish_MiST/rtl/mc_sound_b.vhd | 253 -- .../DevilFish_MiST/rtl/mc_sound_vco.vhd | 49 - .../Z80 Based/DevilFish_MiST/rtl/mc_stars.vhd | 90 - .../Z80 Based/DevilFish_MiST/rtl/mc_video.vhd | 434 ---- .../Z80 Based/DevilFish_MiST/rtl/pll.qip | 4 - .../Z80 Based/DevilFish_MiST/rtl/pll.vhd | 451 ---- .../DevilFish_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/DevilFish_MiST/rtl/spram.vhd | 55 - .../Z80 Based/Galaxian_MiST/Galaxian.qsf | 141 +- .../Z80 Based/Galaxian_MiST/Galaxian.sdc | 126 + .../Z80 Based/Galaxian_MiST/Galaxian.srf | 54 - .../Galaxian_MiST/Release/Galaxian.rbf | Bin 298354 -> 0 bytes .../Z80 Based/Galaxian_MiST/buildall.sh | 25 + .../Galaxian_MiST/rtl/Galaxian_MiST.sv | 163 +- .../Z80 Based/Galaxian_MiST/rtl/ROM/ROMS.vhd | 292 +++ .../rtl/ROM/azurian/AZURIAN_1H.vhd} | 4 +- .../rtl/ROM/azurian/AZURIAN_1K.vhd} | 4 +- .../rtl/ROM/azurian/AZURIAN_6L.vhd} | 4 +- .../rtl/ROM/azurian}/ROM_PGM_0.vhd | 4 +- .../rtl/ROM/blackhole/BLACKHOLE_1H.vhd} | 4 +- .../rtl/ROM/blackhole/BLACKHOLE_1K.vhd} | 4 +- .../BLACKHOLE_6L.vhd} | 4 +- .../rtl/ROM/blackhole}/ROM_PGM_0.vhd | 4 +- .../rtl/ROM/catacomb/CATACOMB_1H.vhd} | 4 +- .../rtl/ROM/catacomb/CATACOMB_1K.vhd} | 4 +- .../rtl/ROM/catacomb/CATACOMB_6L.vhd} | 4 +- .../rtl/ROM/catacomb}/ROM_PGM_0.vhd | 4 +- .../rtl/ROM/chewinggum}/col.vhd | 4 +- .../rtl/ROM/chewinggum}/h.vhd | 4 +- .../rtl/ROM/chewinggum}/k.vhd | 4 +- .../rtl/ROM/chewinggum}/prog.vhd | 4 +- .../rtl/ROM/devilfish/DEVILFISH_1H.vhd} | 4 +- .../rtl/ROM/devilfish/DEVILFISH_1K.vhd} | 4 +- .../rtl/ROM/devilfish/DEVILFISH_6L.vhd} | 4 +- .../rtl/ROM/devilfish}/ROM_PGM_0.vhd | 4 +- .../rtl/ROM/{ => galaxian}/GALAXIAN_1H.vhd | 0 .../rtl/ROM/{ => galaxian}/GALAXIAN_1K.vhd | 0 .../rtl/ROM/galaxian}/GALAXIAN_6L.vhd | 0 .../rtl/ROM/{ => galaxian}/ROM_PGM_0.vhd | 4 +- .../rtl/ROM/kingbaloon}/col.vhd | 4 +- .../rtl/ROM/kingbaloon}/kbe1-4.vhd | 0 .../rtl/ROM/kingbaloon}/kbe2-5.vhd | 0 .../rtl/ROM/kingbaloon}/kbe3-6.vhd | 0 .../rtl/ROM/kingbaloon}/prog.vhd | 4 +- .../rtl/ROM/kingbaloon}/rom_h.vhd | 4 +- .../rtl/ROM/kingbaloon}/rom_k.vhd | 4 +- .../rtl/ROM/mooncresta/MOONCR_1H.vhd} | 4 +- .../rtl/ROM/mooncresta/MOONCR_1K.vhd} | 4 +- .../rtl/ROM/mooncresta/MOONCR_6L.vhd} | 4 +- .../rtl/ROM/mooncresta}/ROM_PGM_0.vhd | 4 +- .../ROM/mrdonightmare/MRDONIGHTMARE_1H.vhd} | 4 +- .../ROM/mrdonightmare/MRDONIGHTMARE_1K.vhd} | 4 +- .../ROM/mrdonightmare/MRDONIGHTMARE_6L.vhd} | 4 +- .../rtl/ROM/mrdonightmare}/ROM_PGM_0.vhd | 4 +- .../rtl/ROM/omega/OMEGA_1H.vhd} | 4 +- .../rtl/ROM/omega/OMEGA_1K.vhd} | 4 +- .../rtl/ROM/omega/OMEGA_6L.vhd} | 4 +- .../rtl/ROM/omega}/ROM_PGM_0.vhd | 4 +- .../rtl/ROM/orbitron/ORBITRON_1H.vhd} | 4 +- .../rtl/ROM/orbitron/ORBITRON_1K.vhd} | 4 +- .../rtl/ROM/orbitron/ORBITRON_6L.vhd} | 4 +- .../rtl/ROM/orbitron}/ROM_PGM_0.vhd | 4 +- .../rtl/ROM/pisces/PISCES_1H.vhd} | 4 +- .../rtl/ROM/pisces/PISCES_1K.vhd} | 4 +- .../rtl/ROM/pisces/PISCES_6L.vhd} | 4 +- .../rtl/ROM/pisces}/ROM_PGM_0.vhd | 4 +- .../tripledrawpoker/TRIPLEDRAWPOKER_1H.vhd | 150 ++ .../tripledrawpoker/TRIPLEDRAWPOKER_1K.vhd | 150 ++ .../tripledrawpoker/TRIPLEDRAWPOKER_6L.vhd | 24 + .../TRIPLEDRAWPOKER_ROM_PGM_0.vhd | 790 +++++++ .../rtl/ROM/uniwars}/ROM_PGM_0.vhd | 4 +- .../rtl/ROM/uniwars/UNIWARS_1H.vhd} | 4 +- .../rtl/ROM/uniwars/UNIWARS_1K.vhd} | 4 +- .../rtl/ROM/uniwars/UNIWARS_6L.vhd} | 4 +- .../rtl/ROM/victory}/col.vhd | 4 +- .../rtl/ROM/victory}/h_rom.vhd | 4 +- .../rtl/ROM/victory}/k_rom.vhd | 4 +- .../rtl/ROM/victory}/prog.vhd | 4 +- .../rtl/ROM/warofbugs}/ROM_PGM_0.vhd | 21 +- .../rtl/ROM/warofbugs/WAROFBUGS_1H.vhd} | 4 +- .../rtl/ROM/warofbugs/WAROFBUGS_1K.vhd} | 4 +- .../rtl/ROM/warofbugs/WAROFBUGS_6L.vhd} | 4 +- .../Galaxian_MiST/rtl/ROM/zigzag/col.vhd | 24 + .../Galaxian_MiST/rtl/ROM/zigzag/prog.vhd | 1046 +++++++++ .../Galaxian_MiST/rtl/ROM/zigzag/rom_h.vhd | 278 +++ .../Galaxian_MiST/rtl/ROM/zigzag/rom_k.vhd | 278 +++ .../Z80 Based/Galaxian_MiST/rtl/cpu/T80.vhd | 1093 --------- .../Galaxian_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../Galaxian_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../Galaxian_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../Galaxian_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../Z80 Based/Galaxian_MiST/rtl/cpu/T80as.vhd | 283 --- .../Galaxian_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/Galaxian_MiST/rtl/dac.vhd | 71 - .../Z80 Based/Galaxian_MiST/rtl/dpram.vhd | 2 +- .../Z80 Based/Galaxian_MiST/rtl/galaxian.vhd | 193 +- .../Z80 Based/Galaxian_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/Galaxian_MiST/rtl/kb_synth.vhd | 136 ++ .../Z80 Based/Galaxian_MiST/rtl/mc_adec.vhd | 14 +- .../Z80 Based/Galaxian_MiST/rtl/mc_bram.vhd | 20 +- .../Galaxian_MiST/rtl/mc_col_pal.vhd | 25 +- .../Galaxian_MiST/rtl/mc_hv_count.vhd | 61 +- .../Z80 Based/Galaxian_MiST/rtl/mc_inport.vhd | 35 +- .../Galaxian_MiST/rtl/mc_missile.vhd | 1 - .../Z80 Based/Galaxian_MiST/rtl/mc_stars.vhd | 4 +- .../Z80 Based/Galaxian_MiST/rtl/mc_video.vhd | 63 +- .../Z80 Based/Galaxian_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/Galaxian_MiST/rtl/osd.v | 194 -- .../Z80 Based/Galaxian_MiST/rtl/scandoubler.v | 194 -- .../Galaxian_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/Galaxian_MiST/rtl/ym2149.sv | 331 +++ .../Z80 Based/KingBaloon_MiST/KingBaloon.qpf | 31 - .../Z80 Based/KingBaloon_MiST/KingBaloon.qsf | 194 -- .../Z80 Based/KingBaloon_MiST/KingBaloon.srf | 56 - .../Z80 Based/KingBaloon_MiST/README.txt | 26 - .../KingBaloon_MiST/Release/KingBaloon.rbf | Bin 333436 -> 0 bytes .../Z80 Based/KingBaloon_MiST/clean.bat | 37 - .../KingBaloon_MiST/rtl/KingBalloon_MiST.sv | 194 -- .../KingBaloon_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../KingBaloon_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../KingBaloon_MiST/rtl/ROM/sound.vhd | 534 ----- .../KingBaloon_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/KingBaloon_MiST/rtl/cpu/T80.vhd | 1093 --------- .../KingBaloon_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../KingBaloon_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../KingBaloon_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../KingBaloon_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../KingBaloon_MiST/rtl/cpu/T80as.vhd | 283 --- .../KingBaloon_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/KingBaloon_MiST/rtl/dac.vhd | 71 - .../Z80 Based/KingBaloon_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/KingBaloon_MiST/rtl/hq2x.sv | 454 ---- .../KingBaloon_MiST/rtl/kb_synth.vhd | 160 -- .../KingBaloon_MiST/rtl/kingballon.vhd | 455 ---- .../Z80 Based/KingBaloon_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/KingBaloon_MiST/rtl/mc_bram.vhd | 182 -- .../KingBaloon_MiST/rtl/mc_clocks.vhd | 85 - .../KingBaloon_MiST/rtl/mc_col_pal.vhd | 78 - .../KingBaloon_MiST/rtl/mc_hv_count.vhd | 145 -- .../KingBaloon_MiST/rtl/mc_inport.vhd | 74 - .../KingBaloon_MiST/rtl/mc_ld_pls.vhd | 115 - .../KingBaloon_MiST/rtl/mc_logic.vhd | 92 - .../KingBaloon_MiST/rtl/mc_missile.vhd | 107 - .../KingBaloon_MiST/rtl/mc_sound_a.vhd | 117 - .../KingBaloon_MiST/rtl/mc_sound_b.vhd | 253 -- .../KingBaloon_MiST/rtl/mc_sound_vco.vhd | 49 - .../KingBaloon_MiST/rtl/mc_stars.vhd | 90 - .../KingBaloon_MiST/rtl/mc_video.vhd | 431 ---- .../Z80 Based/KingBaloon_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/KingBaloon_MiST/rtl/osd.v | 194 -- .../Z80 Based/KingBaloon_MiST/rtl/pll.vhd | 451 ---- .../KingBaloon_MiST/rtl/scandoubler.v | 194 -- .../KingBaloon_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/KingBaloon_MiST/rtl/spram.vhd | 55 - .../KingBaloon_MiST/rtl/ttl_74138.vhd | 48 - .../KingBaloon_MiST/rtl/ttl_74273.vhd | 136 -- .../KingBaloon_MiST/rtl/ttl_74367.vhd | 122 - .../KingBaloon_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/MoonCresta_MiST/MoonCresta.qpf | 31 - .../Z80 Based/MoonCresta_MiST/MoonCresta.qsf | 190 -- .../Z80 Based/MoonCresta_MiST/MoonCresta.srf | 51 - .../Z80 Based/MoonCresta_MiST/README.txt | 24 - .../MoonCresta_MiST/Release/MoonCresta.rbf | Bin 308269 -> 0 bytes .../Z80 Based/MoonCresta_MiST/clean.bat | 37 - .../MoonCresta_MiST/rtl/MoonCresta.sv | 193 -- .../MoonCresta_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../MoonCresta_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../MoonCresta_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/MoonCresta_MiST/rtl/cpu/T80.vhd | 1093 --------- .../MoonCresta_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../MoonCresta_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../MoonCresta_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../MoonCresta_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../MoonCresta_MiST/rtl/cpu/T80as.vhd | 283 --- .../MoonCresta_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/MoonCresta_MiST/rtl/dac.vhd | 71 - .../Z80 Based/MoonCresta_MiST/rtl/dpram.vhd | 75 - .../MoonCresta_MiST/rtl/galaxian.vhd | 446 ---- .../Z80 Based/MoonCresta_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/MoonCresta_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/MoonCresta_MiST/rtl/mc_bram.vhd | 182 -- .../MoonCresta_MiST/rtl/mc_clocks.vhd | 88 - .../MoonCresta_MiST/rtl/mc_col_pal.vhd | 78 - .../MoonCresta_MiST/rtl/mc_hv_count.vhd | 145 -- .../MoonCresta_MiST/rtl/mc_inport.vhd | 74 - .../MoonCresta_MiST/rtl/mc_ld_pls.vhd | 115 - .../MoonCresta_MiST/rtl/mc_logic.vhd | 92 - .../MoonCresta_MiST/rtl/mc_missile.vhd | 107 - .../MoonCresta_MiST/rtl/mc_sound_a.vhd | 117 - .../MoonCresta_MiST/rtl/mc_sound_b.vhd | 253 -- .../MoonCresta_MiST/rtl/mc_sound_vco.vhd | 49 - .../MoonCresta_MiST/rtl/mc_stars.vhd | 90 - .../MoonCresta_MiST/rtl/mc_video.vhd | 447 ---- .../Z80 Based/MoonCresta_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/MoonCresta_MiST/rtl/osd.v | 194 -- .../Z80 Based/MoonCresta_MiST/rtl/pll.vhd | 451 ---- .../MoonCresta_MiST/rtl/scandoubler.v | 195 -- .../MoonCresta_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/MoonCresta_MiST/rtl/spram.vhd | 55 - .../MoonCresta_MiST/rtl/video_mixer.sv | 243 -- .../MrDoNightmare_MiST/MrDoNightmare.qpf | 30 - .../MrDoNightmare_MiST/MrDoNightmare.qsf | 190 -- .../MrDoNightmare_MiST/MrDoNightmare.srf | 54 - .../Z80 Based/MrDoNightmare_MiST/README.txt | 24 - .../Release/MrDoNightmare.rbf | Bin 295678 -> 0 bytes .../Z80 Based/MrDoNightmare_MiST/clean.bat | 37 - .../MrDoNightmare_MiST/rtl/MrDoNightmare.sv | 192 -- .../MrDoNightmare_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../MrDoNightmare_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../MrDoNightmare_MiST/rtl/build_id.tcl | 35 - .../MrDoNightmare_MiST/rtl/cpu/T80.vhd | 1093 --------- .../MrDoNightmare_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../MrDoNightmare_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../MrDoNightmare_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../MrDoNightmare_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../MrDoNightmare_MiST/rtl/cpu/T80as.vhd | 283 --- .../MrDoNightmare_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/MrDoNightmare_MiST/rtl/dac.vhd | 71 - .../MrDoNightmare_MiST/rtl/dpram.vhd | 75 - .../MrDoNightmare_MiST/rtl/galaxian.vhd | 446 ---- .../Z80 Based/MrDoNightmare_MiST/rtl/hq2x.sv | 454 ---- .../MrDoNightmare_MiST/rtl/mc_adec.vhd | 251 -- .../MrDoNightmare_MiST/rtl/mc_bram.vhd | 182 -- .../MrDoNightmare_MiST/rtl/mc_clocks.vhd | 88 - .../MrDoNightmare_MiST/rtl/mc_col_pal.vhd | 78 - .../MrDoNightmare_MiST/rtl/mc_hv_count.vhd | 145 -- .../MrDoNightmare_MiST/rtl/mc_inport.vhd | 71 - .../MrDoNightmare_MiST/rtl/mc_ld_pls.vhd | 115 - .../MrDoNightmare_MiST/rtl/mc_logic.vhd | 92 - .../MrDoNightmare_MiST/rtl/mc_missile.vhd | 107 - .../MrDoNightmare_MiST/rtl/mc_sound_a.vhd | 117 - .../MrDoNightmare_MiST/rtl/mc_sound_b.vhd | 253 -- .../MrDoNightmare_MiST/rtl/mc_sound_vco.vhd | 49 - .../MrDoNightmare_MiST/rtl/mc_stars.vhd | 90 - .../MrDoNightmare_MiST/rtl/mc_video.vhd | 433 ---- .../MrDoNightmare_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/MrDoNightmare_MiST/rtl/osd.v | 194 -- .../Z80 Based/MrDoNightmare_MiST/rtl/pll.vhd | 451 ---- .../MrDoNightmare_MiST/rtl/scandoubler.v | 194 -- .../MrDoNightmare_MiST/rtl/sine_package.vhd | 152 -- .../MrDoNightmare_MiST/rtl/spram.vhd | 55 - .../MrDoNightmare_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/Omega_MiST/Omega.qpf | 30 - .../Z80 Based/Omega_MiST/Omega.qsf | 190 -- .../Z80 Based/Omega_MiST/Omega.srf | 54 - .../Z80 Based/Omega_MiST/README.txt | 24 - .../Z80 Based/Omega_MiST/Release/Omega.rbf | Bin 301983 -> 0 bytes .../Z80 Based/Omega_MiST/clean.bat | 37 - .../Z80 Based/Omega_MiST/rtl/Omega.sv | 192 -- .../Z80 Based/Omega_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../Z80 Based/Omega_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../Z80 Based/Omega_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/Omega_MiST/rtl/cpu/T80.vhd | 1093 --------- .../Z80 Based/Omega_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../Omega_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../Z80 Based/Omega_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../Z80 Based/Omega_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../Z80 Based/Omega_MiST/rtl/cpu/T80as.vhd | 283 --- .../Z80 Based/Omega_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/Omega_MiST/rtl/dac.vhd | 71 - .../Z80 Based/Omega_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/Omega_MiST/rtl/galaxian.vhd | 446 ---- .../Z80 Based/Omega_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/Omega_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/Omega_MiST/rtl/mc_bram.vhd | 182 -- .../Z80 Based/Omega_MiST/rtl/mc_clocks.vhd | 85 - .../Z80 Based/Omega_MiST/rtl/mc_col_pal.vhd | 78 - .../Z80 Based/Omega_MiST/rtl/mc_hv_count.vhd | 145 -- .../Z80 Based/Omega_MiST/rtl/mc_inport.vhd | 74 - .../Z80 Based/Omega_MiST/rtl/mc_ld_pls.vhd | 115 - .../Z80 Based/Omega_MiST/rtl/mc_logic.vhd | 92 - .../Z80 Based/Omega_MiST/rtl/mc_missile.vhd | 107 - .../Z80 Based/Omega_MiST/rtl/mc_sound_a.vhd | 117 - .../Z80 Based/Omega_MiST/rtl/mc_sound_b.vhd | 253 -- .../Z80 Based/Omega_MiST/rtl/mc_sound_vco.vhd | 49 - .../Z80 Based/Omega_MiST/rtl/mc_stars.vhd | 90 - .../Z80 Based/Omega_MiST/rtl/mc_video.vhd | 433 ---- .../Z80 Based/Omega_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/Omega_MiST/rtl/osd.v | 194 -- .../Z80 Based/Omega_MiST/rtl/pll.vhd | 451 ---- .../Z80 Based/Omega_MiST/rtl/scandoubler.v | 194 -- .../Z80 Based/Omega_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/Omega_MiST/rtl/spram.vhd | 55 - .../Z80 Based/Omega_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/Orbitron_MiST/Orbitron.qpf | 30 - .../Z80 Based/Orbitron_MiST/Orbitron.qsf | 190 -- .../Z80 Based/Orbitron_MiST/Orbitron.srf | 51 - .../Z80 Based/Orbitron_MiST/README.txt | 24 - .../Orbitron_MiST/Release/Orbitron.rbf | Bin 300739 -> 0 bytes .../Z80 Based/Orbitron_MiST/clean.bat | 37 - .../Z80 Based/Orbitron_MiST/rtl/Orbitron.sv | 193 -- .../Orbitron_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../Orbitron_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../Z80 Based/Orbitron_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/Orbitron_MiST/rtl/cpu/T80.vhd | 1093 --------- .../Orbitron_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../Orbitron_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../Orbitron_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../Orbitron_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../Z80 Based/Orbitron_MiST/rtl/cpu/T80as.vhd | 283 --- .../Orbitron_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/Orbitron_MiST/rtl/dac.vhd | 71 - .../Z80 Based/Orbitron_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/Orbitron_MiST/rtl/galaxian.vhd | 446 ---- .../Z80 Based/Orbitron_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/Orbitron_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/Orbitron_MiST/rtl/mc_bram.vhd | 182 -- .../Z80 Based/Orbitron_MiST/rtl/mc_clocks.vhd | 88 - .../Orbitron_MiST/rtl/mc_col_pal.vhd | 78 - .../Orbitron_MiST/rtl/mc_hv_count.vhd | 145 -- .../Z80 Based/Orbitron_MiST/rtl/mc_inport.vhd | 74 - .../Z80 Based/Orbitron_MiST/rtl/mc_ld_pls.vhd | 115 - .../Z80 Based/Orbitron_MiST/rtl/mc_logic.vhd | 92 - .../Orbitron_MiST/rtl/mc_missile.vhd | 107 - .../Orbitron_MiST/rtl/mc_sound_a.vhd | 117 - .../Orbitron_MiST/rtl/mc_sound_b.vhd | 253 -- .../Orbitron_MiST/rtl/mc_sound_vco.vhd | 49 - .../Z80 Based/Orbitron_MiST/rtl/mc_stars.vhd | 90 - .../Z80 Based/Orbitron_MiST/rtl/mc_video.vhd | 433 ---- .../Z80 Based/Orbitron_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/Orbitron_MiST/rtl/osd.v | 194 -- .../Z80 Based/Orbitron_MiST/rtl/pll.vhd | 451 ---- .../Z80 Based/Orbitron_MiST/rtl/scandoubler.v | 195 -- .../Orbitron_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/Orbitron_MiST/rtl/spram.vhd | 55 - .../Orbitron_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/Pisces_MiST/Pisces.qpf | 31 - .../Z80 Based/Pisces_MiST/Pisces.qsf | 190 -- .../Z80 Based/Pisces_MiST/Pisces.srf | 54 - .../Z80 Based/Pisces_MiST/README.txt | 24 - .../Z80 Based/Pisces_MiST/Release/Pisces.rbf | Bin 316148 -> 0 bytes .../Z80 Based/Pisces_MiST/clean.bat | 37 - .../Z80 Based/Pisces_MiST/rtl/Pisces.sv | 193 -- .../Z80 Based/Pisces_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../Z80 Based/Pisces_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../Z80 Based/Pisces_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/Pisces_MiST/rtl/cpu/T80.vhd | 1093 --------- .../Z80 Based/Pisces_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../Pisces_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../Pisces_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../Z80 Based/Pisces_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../Z80 Based/Pisces_MiST/rtl/cpu/T80as.vhd | 283 --- .../Z80 Based/Pisces_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/Pisces_MiST/rtl/dac.vhd | 71 - .../Z80 Based/Pisces_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/Pisces_MiST/rtl/galaxian.vhd | 448 ---- .../Z80 Based/Pisces_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/Pisces_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/Pisces_MiST/rtl/mc_bram.vhd | 182 -- .../Z80 Based/Pisces_MiST/rtl/mc_clocks.vhd | 85 - .../Z80 Based/Pisces_MiST/rtl/mc_col_pal.vhd | 78 - .../Z80 Based/Pisces_MiST/rtl/mc_hv_count.vhd | 145 -- .../Z80 Based/Pisces_MiST/rtl/mc_inport.vhd | 74 - .../Z80 Based/Pisces_MiST/rtl/mc_ld_pls.vhd | 115 - .../Z80 Based/Pisces_MiST/rtl/mc_logic.vhd | 92 - .../Z80 Based/Pisces_MiST/rtl/mc_missile.vhd | 107 - .../Z80 Based/Pisces_MiST/rtl/mc_sound_a.vhd | 117 - .../Z80 Based/Pisces_MiST/rtl/mc_sound_b.vhd | 253 -- .../Pisces_MiST/rtl/mc_sound_vco.vhd | 49 - .../Z80 Based/Pisces_MiST/rtl/mc_stars.vhd | 90 - .../Z80 Based/Pisces_MiST/rtl/mc_video.vhd | 433 ---- .../Z80 Based/Pisces_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/Pisces_MiST/rtl/osd.v | 194 -- .../Z80 Based/Pisces_MiST/rtl/pll.vhd | 451 ---- .../Z80 Based/Pisces_MiST/rtl/scandoubler.v | 194 -- .../Pisces_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/Pisces_MiST/rtl/spram.vhd | 55 - .../Z80 Based/Pisces_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/TripleDrawPoker_MiST/README.txt | 24 - .../Release/TripleDrawPoker.rbf | Bin 270641 -> 0 bytes .../TripleDrawPoker_MiST/TripleDrawPoker.qpf | 30 - .../TripleDrawPoker_MiST/TripleDrawPoker.qsf | 184 -- .../TripleDrawPoker_MiST/TripleDrawPoker.srf | 54 - .../Z80 Based/TripleDrawPoker_MiST/clean.bat | 37 - .../TripleDrawPoker_MiST/rtl/ROM/col.bin | Bin 32 -> 0 bytes .../TripleDrawPoker_MiST/rtl/ROM/col.hex | 3 - .../TripleDrawPoker_MiST/rtl/ROM/h.bin | Bin 2048 -> 0 bytes .../TripleDrawPoker_MiST/rtl/ROM/h.hex | 129 -- .../TripleDrawPoker_MiST/rtl/ROM/k.bin | Bin 2048 -> 0 bytes .../TripleDrawPoker_MiST/rtl/ROM/k.hex | 129 -- .../TripleDrawPoker_MiST/rtl/ROM/prog.bin | Bin 12288 -> 0 bytes .../TripleDrawPoker_MiST/rtl/ROM/prog.hex | 769 ------- .../TripleDrawPoker_MiST/rtl/ROM/swap.exe | Bin 57344 -> 0 bytes .../rtl/TripleDrawPoker_MiST.sv | 192 -- .../TripleDrawPoker_MiST/rtl/build_id.tcl | 35 - .../TripleDrawPoker_MiST/rtl/cpu/T80.vhd | 1093 --------- .../TripleDrawPoker_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../TripleDrawPoker_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../TripleDrawPoker_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../TripleDrawPoker_MiST/rtl/cpu/T80as.vhd | 283 --- .../TripleDrawPoker_MiST/rtl/cpu/T80sed.vhd | 179 -- .../TripleDrawPoker_MiST/rtl/dac.vhd | 71 - .../TripleDrawPoker_MiST/rtl/dpram.vhd | 75 - .../TripleDrawPoker_MiST/rtl/hq2x.sv | 454 ---- .../TripleDrawPoker_MiST/rtl/mc_adec.vhd | 251 -- .../TripleDrawPoker_MiST/rtl/mc_bram.vhd | 182 -- .../TripleDrawPoker_MiST/rtl/mc_clocks.vhd | 85 - .../TripleDrawPoker_MiST/rtl/mc_col_pal.vhd | 83 - .../TripleDrawPoker_MiST/rtl/mc_hv_count.vhd | 145 -- .../TripleDrawPoker_MiST/rtl/mc_inport.vhd | 86 - .../TripleDrawPoker_MiST/rtl/mc_ld_pls.vhd | 115 - .../TripleDrawPoker_MiST/rtl/mc_logic.vhd | 92 - .../TripleDrawPoker_MiST/rtl/mc_missile.vhd | 107 - .../TripleDrawPoker_MiST/rtl/mc_sound_a.vhd | 117 - .../TripleDrawPoker_MiST/rtl/mc_sound_b.vhd | 253 -- .../TripleDrawPoker_MiST/rtl/mc_sound_vco.vhd | 49 - .../TripleDrawPoker_MiST/rtl/mc_stars.vhd | 90 - .../TripleDrawPoker_MiST/rtl/mc_video.vhd | 440 ---- .../TripleDrawPoker_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/TripleDrawPoker_MiST/rtl/osd.v | 194 -- .../TripleDrawPoker_MiST/rtl/pll.vhd | 451 ---- .../TripleDrawPoker_MiST/rtl/scandoubler.v | 194 -- .../TripleDrawPoker_MiST/rtl/sine_package.vhd | 152 -- .../TripleDrawPoker_MiST/rtl/spram.vhd | 55 - .../TripleDrawPoker_MiST/rtl/sprom.vhd | 82 - .../rtl/tripledrawpoker.vhd | 447 ---- .../TripleDrawPoker_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/Uniwars_MiST/README.txt | 24 - .../Uniwars_MiST/Release/Uniwars.rbf | Bin 310852 -> 0 bytes .../Z80 Based/Uniwars_MiST/Uniwars.qpf | 30 - .../Z80 Based/Uniwars_MiST/Uniwars.qsf | 190 -- .../Z80 Based/Uniwars_MiST/Uniwars.srf | 54 - .../Z80 Based/Uniwars_MiST/clean.bat | 37 - .../Uniwars_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../Uniwars_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../Z80 Based/Uniwars_MiST/rtl/Uniwars.sv | 193 -- .../Z80 Based/Uniwars_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/Uniwars_MiST/rtl/cpu/T80.vhd | 1093 --------- .../Uniwars_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../Uniwars_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../Uniwars_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../Uniwars_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../Z80 Based/Uniwars_MiST/rtl/cpu/T80as.vhd | 283 --- .../Z80 Based/Uniwars_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/Uniwars_MiST/rtl/dac.vhd | 71 - .../Z80 Based/Uniwars_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/Uniwars_MiST/rtl/galaxian.vhd | 448 ---- .../Z80 Based/Uniwars_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/Uniwars_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/Uniwars_MiST/rtl/mc_bram.vhd | 182 -- .../Z80 Based/Uniwars_MiST/rtl/mc_clocks.vhd | 85 - .../Z80 Based/Uniwars_MiST/rtl/mc_col_pal.vhd | 78 - .../Uniwars_MiST/rtl/mc_hv_count.vhd | 145 -- .../Z80 Based/Uniwars_MiST/rtl/mc_inport.vhd | 74 - .../Z80 Based/Uniwars_MiST/rtl/mc_ld_pls.vhd | 115 - .../Z80 Based/Uniwars_MiST/rtl/mc_logic.vhd | 92 - .../Z80 Based/Uniwars_MiST/rtl/mc_missile.vhd | 107 - .../Z80 Based/Uniwars_MiST/rtl/mc_sound_a.vhd | 117 - .../Z80 Based/Uniwars_MiST/rtl/mc_sound_b.vhd | 253 -- .../Uniwars_MiST/rtl/mc_sound_vco.vhd | 49 - .../Z80 Based/Uniwars_MiST/rtl/mc_stars.vhd | 90 - .../Z80 Based/Uniwars_MiST/rtl/mc_video.vhd | 433 ---- .../Z80 Based/Uniwars_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/Uniwars_MiST/rtl/osd.v | 194 -- .../Z80 Based/Uniwars_MiST/rtl/pll.vhd | 451 ---- .../Z80 Based/Uniwars_MiST/rtl/scandoubler.v | 194 -- .../Uniwars_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/Uniwars_MiST/rtl/spram.vhd | 55 - .../Z80 Based/Uniwars_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/Victory_MiST/README.txt | 23 - .../Victory_MiST/Release/Victory.rbf | Bin 305269 -> 0 bytes .../Z80 Based/Victory_MiST/Victory.qpf | 30 - .../Z80 Based/Victory_MiST/Victory.qsf | 188 -- .../Z80 Based/Victory_MiST/Victory.srf | 54 - .../Z80 Based/Victory_MiST/clean.bat | 37 - .../Victory_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../Victory_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../Victory_MiST/rtl/Victory_MiST.sv | 189 -- .../Z80 Based/Victory_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/Victory_MiST/rtl/cpu/T80.vhd | 1093 --------- .../Victory_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../Victory_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../Victory_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../Victory_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../Z80 Based/Victory_MiST/rtl/cpu/T80as.vhd | 283 --- .../Z80 Based/Victory_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/Victory_MiST/rtl/dac.vhd | 71 - .../Z80 Based/Victory_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/Victory_MiST/rtl/galaxian.vhd | 411 ---- .../Z80 Based/Victory_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/Victory_MiST/rtl/mc_adec.vhd | 215 -- .../Z80 Based/Victory_MiST/rtl/mc_bram.vhd | 182 -- .../Z80 Based/Victory_MiST/rtl/mc_clocks.vhd | 85 - .../Z80 Based/Victory_MiST/rtl/mc_col_pal.vhd | 71 - .../Victory_MiST/rtl/mc_hv_count.vhd | 145 -- .../Z80 Based/Victory_MiST/rtl/mc_inport.vhd | 78 - .../Z80 Based/Victory_MiST/rtl/mc_ld_pls.vhd | 115 - .../Z80 Based/Victory_MiST/rtl/mc_logic.vhd | 92 - .../Z80 Based/Victory_MiST/rtl/mc_missile.vhd | 107 - .../Z80 Based/Victory_MiST/rtl/mc_sound_a.vhd | 117 - .../Z80 Based/Victory_MiST/rtl/mc_sound_b.vhd | 253 -- .../Victory_MiST/rtl/mc_sound_vco.vhd | 49 - .../Z80 Based/Victory_MiST/rtl/mc_video.vhd | 431 ---- .../Z80 Based/Victory_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/Victory_MiST/rtl/osd.v | 194 -- .../Z80 Based/Victory_MiST/rtl/pll.qip | 4 - .../Z80 Based/Victory_MiST/rtl/pll.vhd | 451 ---- .../Z80 Based/Victory_MiST/rtl/scandoubler.v | 194 -- .../Victory_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/Victory_MiST/rtl/spram.vhd | 55 - .../Z80 Based/Victory_MiST/rtl/sprom.vhd | 82 - .../Z80 Based/Victory_MiST/rtl/video_mixer.sv | 243 -- .../Z80 Based/WarOfBugs_MiST/README.txt | 26 - .../WarOfBugs_MiST/Release/WarOfTheBugs.rbf | Bin 346666 -> 0 bytes .../Z80 Based/WarOfBugs_MiST/WarOfTheBugs.qpf | 30 - .../Z80 Based/WarOfBugs_MiST/WarOfTheBugs.qsf | 190 -- .../Z80 Based/WarOfBugs_MiST/WarOfTheBugs.srf | 54 - .../Z80 Based/WarOfBugs_MiST/clean.bat | 37 - .../WarOfBugs_MiST/rtl/ROM/GAL_FIR.vhd | 534 ----- .../WarOfBugs_MiST/rtl/ROM/GAL_HIT.vhd | 534 ----- .../rtl/ROM/Neuer/build_roms_galaxian.bat | 20 - .../WarOfBugs_MiST/rtl/ROM/Neuer/gfx1.bin | Bin 4096 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/main.bin | Bin 10240 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/romgen.exe | Bin 578560 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.1j | Bin 2048 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.1k | Bin 2048 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.cla | Bin 32 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.u | Bin 2048 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.v | Bin 2048 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.w | Bin 2048 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.y | Bin 2048 -> 0 bytes .../WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.z | Bin 2048 -> 0 bytes .../Z80 Based/WarOfBugs_MiST/rtl/ROM/gfx1.vhd | 547 ----- .../WarOfBugs_MiST/rtl/WarOfTheBugs.sv | 192 -- .../Z80 Based/WarOfBugs_MiST/rtl/build_id.tcl | 35 - .../Z80 Based/WarOfBugs_MiST/rtl/cpu/T80.vhd | 1093 --------- .../WarOfBugs_MiST/rtl/cpu/T80_ALU.vhd | 371 --- .../WarOfBugs_MiST/rtl/cpu/T80_MCode.vhd | 2026 ----------------- .../WarOfBugs_MiST/rtl/cpu/T80_Pack.vhd | 220 -- .../WarOfBugs_MiST/rtl/cpu/T80_Reg.vhd | 105 - .../WarOfBugs_MiST/rtl/cpu/T80as.vhd | 283 --- .../WarOfBugs_MiST/rtl/cpu/T80sed.vhd | 179 -- .../Z80 Based/WarOfBugs_MiST/rtl/dac.vhd | 71 - .../Z80 Based/WarOfBugs_MiST/rtl/dpram.vhd | 75 - .../Z80 Based/WarOfBugs_MiST/rtl/galaxian.vhd | 450 ---- .../Z80 Based/WarOfBugs_MiST/rtl/hq2x.sv | 454 ---- .../Z80 Based/WarOfBugs_MiST/rtl/mc_adec.vhd | 251 -- .../Z80 Based/WarOfBugs_MiST/rtl/mc_bram.vhd | 182 -- .../WarOfBugs_MiST/rtl/mc_clocks.vhd | 85 - .../WarOfBugs_MiST/rtl/mc_col_pal.vhd | 78 - .../WarOfBugs_MiST/rtl/mc_hv_count.vhd | 145 -- .../WarOfBugs_MiST/rtl/mc_inport.vhd | 85 - .../WarOfBugs_MiST/rtl/mc_ld_pls.vhd | 115 - .../Z80 Based/WarOfBugs_MiST/rtl/mc_logic.vhd | 92 - .../WarOfBugs_MiST/rtl/mc_missile.vhd | 107 - .../WarOfBugs_MiST/rtl/mc_sound_a.vhd | 117 - .../WarOfBugs_MiST/rtl/mc_sound_b.vhd | 253 -- .../WarOfBugs_MiST/rtl/mc_sound_vco.vhd | 49 - .../Z80 Based/WarOfBugs_MiST/rtl/mc_stars.vhd | 90 - .../Z80 Based/WarOfBugs_MiST/rtl/mc_video.vhd | 436 ---- .../Z80 Based/WarOfBugs_MiST/rtl/mist_io.v | 530 ----- .../Z80 Based/WarOfBugs_MiST/rtl/osd.v | 194 -- .../Z80 Based/WarOfBugs_MiST/rtl/pll.vhd | 451 ---- .../WarOfBugs_MiST/rtl/scandoubler.v | 194 -- .../WarOfBugs_MiST/rtl/sine_package.vhd | 152 -- .../Z80 Based/WarOfBugs_MiST/rtl/spram.vhd | 55 - .../WarOfBugs_MiST/rtl/video_mixer.sv | 243 -- 758 files changed, 4303 insertions(+), 168667 deletions(-) delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Release/Azurian.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/Azurian.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/pll.qip delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/Release/BlackHole.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/BlackHole.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/pll.qip delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Release/Catacomb.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/Catacomb.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/ChewingGum.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/ChewingGum.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/ChewingGum.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/Release/ChewingGum.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/ChewingGum_MiST.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/Pisces.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/TripleDrawPoker_MiST.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/tripledrawpoker.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/ChewingGum_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/DevilFish.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/DevilFish.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/DevilFish.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/Release/DevilFish.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/DevilFish.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/pll.qip delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/DevilFish_MiST/rtl/spram.vhd create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/Galaxian.sdc delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/Galaxian.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/Release/Galaxian.rbf create mode 100755 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/buildall.sh create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/ROMS.vhd rename Arcade_MiST/Galaxian Hardware/Z80 Based/{AzurianAttack_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/azurian/AZURIAN_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{AzurianAttack_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/azurian/AZURIAN_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{AzurianAttack_MiST/rtl/ROM/GALAXIAN_6L.vhd => Galaxian_MiST/rtl/ROM/azurian/AZURIAN_6L.vhd} (92%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{AzurianAttack_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/azurian}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{BlackHole_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/blackhole/BLACKHOLE_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{BlackHole_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/blackhole/BLACKHOLE_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/{GALAXIAN_6L.vhd => blackhole/BLACKHOLE_6L.vhd} (91%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{BlackHole_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/blackhole}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Catacomb_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/catacomb/CATACOMB_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Catacomb_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/catacomb/CATACOMB_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Omega_MiST/rtl/ROM/GALAXIAN_6L.vhd => Galaxian_MiST/rtl/ROM/catacomb/CATACOMB_6L.vhd} (93%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Catacomb_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/catacomb}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{ChewingGum_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/chewinggum}/col.vhd (90%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{ChewingGum_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/chewinggum}/h.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{ChewingGum_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/chewinggum}/k.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{ChewingGum_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/chewinggum}/prog.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{DevilFish_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/devilfish/DEVILFISH_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{DevilFish_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/devilfish/DEVILFISH_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{DevilFish_MiST/rtl/ROM/GALAXIAN_6L.vhd => Galaxian_MiST/rtl/ROM/devilfish/DEVILFISH_6L.vhd} (91%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{DevilFish_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/devilfish}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/{ => galaxian}/GALAXIAN_1H.vhd (100%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/{ => galaxian}/GALAXIAN_1K.vhd (100%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{BlackHole_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/galaxian}/GALAXIAN_6L.vhd (100%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/{ => galaxian}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{KingBaloon_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/kingbaloon}/col.vhd (93%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{KingBaloon_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/kingbaloon}/kbe1-4.vhd (100%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{KingBaloon_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/kingbaloon}/kbe2-5.vhd (100%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{KingBaloon_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/kingbaloon}/kbe3-6.vhd (100%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{KingBaloon_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/kingbaloon}/prog.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{KingBaloon_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/kingbaloon}/rom_h.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{KingBaloon_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/kingbaloon}/rom_k.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{MoonCresta_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/mooncresta/MOONCR_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{MoonCresta_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/mooncresta/MOONCR_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{MoonCresta_MiST/rtl/ROM/GALAXIAN_6L.vhd => Galaxian_MiST/rtl/ROM/mooncresta/MOONCR_6L.vhd} (91%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{MoonCresta_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/mooncresta}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{MrDoNightmare_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/mrdonightmare/MRDONIGHTMARE_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{MrDoNightmare_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/mrdonightmare/MRDONIGHTMARE_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{MrDoNightmare_MiST/rtl/ROM/GALAXIAN_6L.vhd => Galaxian_MiST/rtl/ROM/mrdonightmare/MRDONIGHTMARE_6L.vhd} (90%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{MrDoNightmare_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/mrdonightmare}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Omega_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/omega/OMEGA_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Omega_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/omega/OMEGA_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Catacomb_MiST/rtl/ROM/GALAXIAN_6L.vhd => Galaxian_MiST/rtl/ROM/omega/OMEGA_6L.vhd} (93%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Omega_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/omega}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Orbitron_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/orbitron/ORBITRON_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Orbitron_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/orbitron/ORBITRON_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Orbitron_MiST/rtl/ROM/GALAXIAN_6L.vhd => Galaxian_MiST/rtl/ROM/orbitron/ORBITRON_6L.vhd} (91%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Orbitron_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/orbitron}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Pisces_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/pisces/PISCES_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Pisces_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/pisces/PISCES_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Pisces_MiST/rtl/ROM/GALAXIAN_6L.vhd => Galaxian_MiST/rtl/ROM/pisces/PISCES_6L.vhd} (93%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Pisces_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/pisces}/ROM_PGM_0.vhd (99%) create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/tripledrawpoker/TRIPLEDRAWPOKER_1H.vhd create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/tripledrawpoker/TRIPLEDRAWPOKER_1K.vhd create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/tripledrawpoker/TRIPLEDRAWPOKER_6L.vhd create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/tripledrawpoker/TRIPLEDRAWPOKER_ROM_PGM_0.vhd rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Uniwars_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/uniwars}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Uniwars_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/uniwars/UNIWARS_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Uniwars_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/uniwars/UNIWARS_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Uniwars_MiST/rtl/ROM/GALAXIAN_6L.vhd => Galaxian_MiST/rtl/ROM/uniwars/UNIWARS_6L.vhd} (91%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Victory_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/victory}/col.vhd (91%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Victory_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/victory}/h_rom.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Victory_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/victory}/k_rom.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{Victory_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/victory}/prog.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{WarOfBugs_MiST/rtl/ROM => Galaxian_MiST/rtl/ROM/warofbugs}/ROM_PGM_0.vhd (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{WarOfBugs_MiST/rtl/ROM/GALAXIAN_1H.vhd => Galaxian_MiST/rtl/ROM/warofbugs/WAROFBUGS_1H.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{WarOfBugs_MiST/rtl/ROM/GALAXIAN_1K.vhd => Galaxian_MiST/rtl/ROM/warofbugs/WAROFBUGS_1K.vhd} (99%) rename Arcade_MiST/Galaxian Hardware/Z80 Based/{WarOfBugs_MiST/rtl/ROM/galaxian_6l.vhd => Galaxian_MiST/rtl/ROM/warofbugs/WAROFBUGS_6L.vhd} (93%) create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/zigzag/col.vhd create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/zigzag/prog.vhd create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/zigzag/rom_h.vhd create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ROM/zigzag/rom_k.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/hq2x.sv create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/kb_synth.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/video_mixer.sv create mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Galaxian_MiST/rtl/ym2149.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/KingBaloon.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/KingBaloon.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/KingBaloon.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/Release/KingBaloon.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/KingBalloon_MiST.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/ROM/sound.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/kb_synth.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/kingballon.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/ttl_74138.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/ttl_74273.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/ttl_74367.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/KingBaloon_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/MoonCresta.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/MoonCresta.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/MoonCresta.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/Release/MoonCresta.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/MoonCresta.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MoonCresta_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/MrDoNightmare.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/MrDoNightmare.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/MrDoNightmare.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/Release/MrDoNightmare.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/MrDoNightmare.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/MrDoNightmare_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/Omega.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/Omega.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/Omega.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/Release/Omega.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/Omega.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Omega_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/Orbitron.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/Orbitron.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/Orbitron.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/Release/Orbitron.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/Orbitron.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Orbitron_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/Pisces.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/Pisces.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/Pisces.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/Release/Pisces.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/Pisces.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Pisces_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/Release/TripleDrawPoker.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/TripleDrawPoker.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/TripleDrawPoker.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/TripleDrawPoker.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/ROM/col.bin delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/ROM/col.hex delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/ROM/h.bin delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/ROM/h.hex delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/ROM/k.bin delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/ROM/k.hex delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/ROM/prog.bin delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/ROM/prog.hex delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/ROM/swap.exe delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/TripleDrawPoker_MiST.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/sprom.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/tripledrawpoker.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/TripleDrawPoker_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/Release/Uniwars.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/Uniwars.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/Uniwars.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/Uniwars.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/Uniwars.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Uniwars_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/Release/Victory.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/Victory.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/Victory.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/Victory.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/Victory_MiST.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/pll.qip delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/sprom.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/Victory_MiST/rtl/video_mixer.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/README.txt delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/Release/WarOfTheBugs.rbf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/WarOfTheBugs.qpf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/WarOfTheBugs.qsf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/WarOfTheBugs.srf delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/clean.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/GAL_FIR.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/GAL_HIT.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/build_roms_galaxian.bat delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/gfx1.bin delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/main.bin delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/romgen.exe delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.1j delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.1k delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.cla delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.u delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.w delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.y delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/Neuer/warofbug.z delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/ROM/gfx1.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/WarOfTheBugs.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/build_id.tcl delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/cpu/T80.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/cpu/T80_ALU.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/cpu/T80_MCode.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/cpu/T80_Pack.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/cpu/T80_Reg.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/cpu/T80as.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/cpu/T80sed.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/dac.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/dpram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/galaxian.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/hq2x.sv delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_adec.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_bram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_clocks.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_col_pal.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_hv_count.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_inport.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_ld_pls.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_logic.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_missile.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_sound_a.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_sound_b.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_sound_vco.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_stars.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mc_video.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/mist_io.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/osd.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/pll.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/scandoubler.v delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/sine_package.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/spram.vhd delete mode 100644 Arcade_MiST/Galaxian Hardware/Z80 Based/WarOfBugs_MiST/rtl/video_mixer.sv diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.qpf b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.qpf deleted file mode 100644 index 43a9e280..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.qpf +++ /dev/null @@ -1,30 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2013 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II 64-Bit -# Version 13.1.0 Build 162 10/23/2013 SJ Web Edition -# Date created = 14:59:16 November 16, 2017 -# -# -------------------------------------------------------------------------- # - -QUARTUS_VERSION = "13.1" -DATE = "14:59:16 November 16, 2017" - -# Revisions - -PROJECT_REVISION = "Azurian" \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.qsf b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.qsf deleted file mode 100644 index 3fc9a82a..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.qsf +++ /dev/null @@ -1,186 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2014 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II 64-Bit -# Version 13.1.4 Build 182 03/12/2014 SJ Web Edition -# Date created = 16:34:10 March 10, 2019 -# -# -------------------------------------------------------------------------- # -# -# Notes: -# -# 1) The default values for assignments are stored in the file: -# Azurian_assignment_defaults.qdf -# If this file doesn't exist, see file: -# assignment_defaults.qdf -# -# 2) Altera recommends that you do not modify this file. This -# file is updated automatically by the Quartus II software -# and any changes you make may be lost or overwritten. -# -# -------------------------------------------------------------------------- # - - - -# Project-Wide Assignments -# ======================== -set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.1.2 -set_global_assignment -name LAST_QUARTUS_VERSION 13.1 -set_global_assignment -name PROJECT_CREATION_TIME_DATE "01:53:30 APRIL 20, 2017" -set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files -set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL -set_global_assignment -name SMART_RECOMPILE ON -set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" -set_global_assignment -name SYSTEMVERILOG_FILE rtl/Azurian.sv -set_global_assignment -name VHDL_FILE rtl/galaxian.vhd -set_global_assignment -name VHDL_FILE rtl/mc_stars.vhd -set_global_assignment -name VHDL_FILE rtl/mc_sound_vco.vhd -set_global_assignment -name VHDL_FILE rtl/mc_sound_b.vhd -set_global_assignment -name VHDL_FILE rtl/mc_sound_a.vhd -set_global_assignment -name VHDL_FILE rtl/mc_missile.vhd -set_global_assignment -name VHDL_FILE rtl/mc_logic.vhd -set_global_assignment -name VHDL_FILE rtl/mc_ld_pls.vhd -set_global_assignment -name VHDL_FILE rtl/mc_inport.vhd -set_global_assignment -name VHDL_FILE rtl/mc_hv_count.vhd -set_global_assignment -name VHDL_FILE rtl/mc_col_pal.vhd -set_global_assignment -name VHDL_FILE rtl/mc_bram.vhd -set_global_assignment -name VHDL_FILE rtl/mc_adec.vhd -set_global_assignment -name VHDL_FILE rtl/mc_video.vhd -set_global_assignment -name SYSTEMVERILOG_FILE rtl/video_mixer.sv -set_global_assignment -name VERILOG_FILE rtl/scandoubler.v -set_global_assignment -name VERILOG_FILE rtl/osd.v -set_global_assignment -name VERILOG_FILE rtl/mist_io.v -set_global_assignment -name SYSTEMVERILOG_FILE rtl/hq2x.sv -set_global_assignment -name VHDL_FILE rtl/dac.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80sed.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80as.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_Reg.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_Pack.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_MCode.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_ALU.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/ROM_PGM_0.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GALAXIAN_6L.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GALAXIAN_1K.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GALAXIAN_1H.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GAL_HIT.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GAL_FIR.vhd -set_global_assignment -name VHDL_FILE rtl/spram.vhd -set_global_assignment -name VHDL_FILE rtl/sine_package.vhd -set_global_assignment -name VHDL_FILE rtl/dpram.vhd -set_global_assignment -name VHDL_FILE rtl/pll.vhd - -# Pin & Location Assignments -# ========================== -set_location_assignment PIN_7 -to LED -set_location_assignment PIN_54 -to CLOCK_27 -set_location_assignment PIN_144 -to VGA_R[5] -set_location_assignment PIN_143 -to VGA_R[4] -set_location_assignment PIN_142 -to VGA_R[3] -set_location_assignment PIN_141 -to VGA_R[2] -set_location_assignment PIN_137 -to VGA_R[1] -set_location_assignment PIN_135 -to VGA_R[0] -set_location_assignment PIN_133 -to VGA_B[5] -set_location_assignment PIN_132 -to VGA_B[4] -set_location_assignment PIN_125 -to VGA_B[3] -set_location_assignment PIN_121 -to VGA_B[2] -set_location_assignment PIN_120 -to VGA_B[1] -set_location_assignment PIN_115 -to VGA_B[0] -set_location_assignment PIN_114 -to VGA_G[5] -set_location_assignment PIN_113 -to VGA_G[4] -set_location_assignment PIN_112 -to VGA_G[3] -set_location_assignment PIN_111 -to VGA_G[2] -set_location_assignment PIN_110 -to VGA_G[1] -set_location_assignment PIN_106 -to VGA_G[0] -set_location_assignment PIN_136 -to VGA_VS -set_location_assignment PIN_119 -to VGA_HS -set_location_assignment PIN_65 -to AUDIO_L -set_location_assignment PIN_80 -to AUDIO_R -set_location_assignment PIN_105 -to SPI_DO -set_location_assignment PIN_88 -to SPI_DI -set_location_assignment PIN_126 -to SPI_SCK -set_location_assignment PIN_127 -to SPI_SS2 -set_location_assignment PIN_91 -to SPI_SS3 -set_location_assignment PIN_13 -to CONF_DATA0 -set_location_assignment PLL_1 -to "pll:pll|altpll:altpll_component" - -# Classic Timing Assignments -# ========================== -set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 -set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS OFF - -# Analysis & Synthesis Assignments -# ================================ -set_global_assignment -name FAMILY "Cyclone III" -set_global_assignment -name TOP_LEVEL_ENTITY Azurian -set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 -set_global_assignment -name SAVE_DISK_SPACE OFF - -# Fitter Assignments -# ================== -set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING OFF -set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION ALWAYS -set_global_assignment -name FITTER_EFFORT "STANDARD FIT" -set_global_assignment -name DEVICE EP3C25E144C8 -set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF -set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON -set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" -set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" - -# Assembler Assignments -# ===================== -set_global_assignment -name GENERATE_RBF_FILE ON -set_global_assignment -name USE_CONFIGURATION_DEVICE OFF - -# Power Estimation Assignments -# ============================ -set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" -set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" - -# Advanced I/O Timing Assignments -# =============================== -set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise -set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall -set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise -set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall - -# --------------------- -# start ENTITY(Azurian) - - # start DESIGN_PARTITION(Top) - # --------------------------- - - # Incremental Compilation Assignments - # =================================== - set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top - set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top - set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top - set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top - - # end DESIGN_PARTITION(Top) - # ------------------------- - -# end ENTITY(Azurian) -# ------------------- \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.srf b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.srf deleted file mode 100644 index 14cddd5e..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Azurian.srf +++ /dev/null @@ -1,54 +0,0 @@ -{ "" "" "" "Variable or input pin \"data_b\" is defined but never used." { } { } 0 287013 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Found combinational loop of 47 nodes" { } { } 0 332125 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "LOCKED port on the PLL is not properly connected on instance \"pll_hdmi:pll_hdmi\|pll_hdmi_0002:pll_hdmi_inst\|altera_pll:altera_pll_i\|general\[0\].gpll\". The LOCKED port on the PLL should be connected when the FBOUTCLK port is connected. Although it is unnecessary to connect the LOCKED signal, any logic driven off of an output clock of the PLL will not know when the PLL is locked and ready." { } { } 0 21300 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Net \"soc_system:soc_system\|soc_system_Video_Output:video_output\|alt_vip_cvo_core:cvo_core\|genlock_enable_sync1\[1\]\" is missing source, defaulting to GND" { } { } 0 12110 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"zxspectrum:emu\|mist_io:mist_io\|ps2_kbd_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"zxspectrum:emu\|mist_io:mist_io\|ps2_mouse_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "No destination clock period was found satisfying the set_net_delay assignment from \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|h_sync_polarity_reg\}\]\" to \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|vid_h_sync_polarity\}\]\". This assignment will be ignored." { } { } 0 17897 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "No destination clock period was found satisfying the set_net_delay assignment from \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|v_sync_polarity_reg\}\]\" to \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|vid_v_sync_polarity\}\]\". This assignment will be ignored." { } { } 0 17897 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "No destination clock period was found satisfying the set_net_delay assignment from \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|interlaced_field_reg\[*\]\}\]\" to \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|vid_interlaced_field\[*\]\}\]\". This assignment will be ignored." { } { } 0 17897 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Some pins have incomplete I/O assignments. Refer to the I/O Assignment Warnings report for details" { } { } 0 15714 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "55 hierarchies have connectivity warnings - see the Connectivity Checks report folder" { } { } 0 12241 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"emu:emu\|mister_io:mister_io\|ps2_kbd_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"emu:emu\|mister_io:mister_io\|ps2_mouse_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Verilog HDL or VHDL warning at de10_top.v(97): object \"io_win\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Verilog HDL or VHDL warning at de10_top.v(102): object \"io_sdd\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Overwriting existing clock: vip\|hps\|fpga_interfaces\|clocks_resets\|h2f_user0_clk" { } { } 0 332043 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Variable or input pin \"data_a\" is defined but never used." { } { } 0 287013 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Clock multiplexers are found and protected" { } { } 0 19016 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 169085 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 174073 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 332174 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 13009 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 21300 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 169177 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 169203 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_cvo_mode_banks" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_pll.sv" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_common_frame_counter.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0_acv_hard_memphy.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0_acv_ldc.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0_acv_hard_io_pads.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "altera_mem_if_hard_memory_controller_top_cyclonev.sv" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "genlock_enable_sync" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "u_calculate_mode" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "genlock_enable" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "reset_value" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_pll_video:pll_video\|altera_pll:altera_pll_i\|general\[0\].gpll" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_cvo_core.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_packet_transfer.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_common_dc_mixed_widths_fifo.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "altera_mem_if_hhp_qseq_synth_top" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_vip_vout:vip_vout\|alt_vip_cvo_core:cvo_core\|genlock_enable_sync1" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_vip_fb:vip_fb\|alt_vip_packet_transfer:pkt_trans_rd\|alt_vip_packet_transfer_read_proc:READ_BLOCK.read_proc_instance\|alt_vip_common_fifo2:output_msg_queue\|scfifo:scfifo_component\|scfifo_scd1:auto_generated\|a_dpfifo_e471:dpfifo\|altsyncram_ums1:FIFOram\|q_b" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_Video_Input:video_input\|alt_vip_cvi_core:cvi_core\|alt_vip_cvi_write_fifo_buffer:write_fifo_buffer" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_Frame_Buffer:frame_buffer\|alt_vip_packet_transfer:pkt_trans_rd" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system_hps_fpga_interfaces.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system_HPS_fpga_interfaces.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "RST" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_scaler_alg_core" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "cvo_core" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "vip_HPS_fpga_interfaces.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_dil_vof_scheduler.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_dil_scheduler.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/README.txt deleted file mode 100644 index 49293e17..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/README.txt +++ /dev/null @@ -1,24 +0,0 @@ ---------------------------------------------------------------------------------- --- --- Arcade: Azurian Attack port to MiST by Gehstock --- 18 December 2017 --- ---------------------------------------------------------------------------------- --- A simulation model of Galaxian hardware --- Copyright(c) 2004 Katsumi Degawa ---------------------------------------------------------------------------------- --- --- Only controls and OSD are rotated on Video output. --- --- --- Keyboard inputs : --- --- ESC : Coin --- F1 : Start 1 player --- F2 : Start 2 player --- SPACE : Fire --- ARROW KEYS : Movements --- --- Joystick support. --- ---------------------------------------------------------------------------------- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Release/Azurian.rbf b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/Release/Azurian.rbf deleted file mode 100644 index f46206f204722760454c12379a850d354224064b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306194 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�q!*yS-h*kO-2 z^Q!Yhjz5kF7W%6lr&OuMtuk!F871IGFt2;8E{lItPOqMFPU{)f`>az}>HSW9Z{4XM z(?J&#W$!Uv2@Ln|{}4mKb5R?^SG3##Ym%8xT4X!LQF!r6raey|dff8towiegQ}OcU zW_zT>*QML~)vbz^YgTEebj)@WjUQ}HtHdg6U3#E8rhCSi5VnnWRVt2B+noU~@U}WP zclE@v+^AHzuWv@_{R_AM5uGSrH*mi6hd9_ABuSj{{2#V09hEuXxf9+zcHnrs%^$q3 zj;^6E~A2x%uy?`q^(84Lq8*`&n4S8Qa#I?Q)A< zKCAAJ%-#vpc(>QKFyR!VDX)AWHHw)Be-qNto#}gQ$v5h{TMvkr=)JqczP&Y^(GTq+ z>vV~Z282J~-|yJEJ$0T{v%4~Herx2p!Jf|^kIu%wsEnOnI62$D*-=}&SV;SxD7B60 zTkM(sN>8=AS$z6vn{D0Kux{_Ox{v9HbfvphFoOSy0>cshu{d?*6nCu5R4(4GJ8g$% z*%X(o>71eOWo8oGdT!#;nr_u`+h+QUQwn#tRK>e_!A6>!w3OI0(^ZbrS&)JRPhZEw zI_Qhz6V+L#c*2>nD>v({+|$?rhDfo}TelSc=(HaCuCj1pij#?!$%P{@XObRZF@qh? zP6TSOWjMBpQ*Rs60#0avJ?c1R`@B-Pme@&ch^s1-k0wh;J+;+rsknfAz$cnN@TBW- z=apN!>+rSh7|1{{@2F{1ZmSlaxeruiEdKMKMT(!jnV#Syk5{9h!-Y$Wco zII?(J=w;^oi>h@w&!|}&{L5%NYtK|gz=1ADim9+onLAY#*rSVorLuj3fl=v7_c~Qt zzg_pXB=u3)>9dsZGprGlh{`>)`+E(9OMUy17vfil2&Y?+5hpZx*e)x8B4b4Of))CL zYa0R4-AKj;A5hU*XI2|qobeVT#KODWLKr0KV`*>tV1XVIcr={D-thB8#&xT!p^(q##fEi6=uRz)dU zLV~Zp?=4261apBESsZ1N@LZpD2iyeo3`k8D6l5ozmccV950GII8Q9Kg6nVOe;yp+6C0e@CAg?;2%SS5e#b4l}*)Cdl8Yp&|n+|eNio+hs~p^ z%JbxRT#**@c%r&ZF6< zW3wWfAHc2jywv<6?ss4z@lf_%U!os&c+#49=tAQ^(A(=n`Ty+Gw0f?!%*EM%lZ{#_ zXQ!QDca)awswMY45sNBw24!s!w+IIlbw|C~vLgx0xr&P>&dWA2#hP9T#fe4B6p2B4G709Q?nWG6uzsz%tC>iR8^n_ ziH18x2~Bmr zh6IzCiIQ4@IC|J!V#BKv{LHYFB>tD8Ogf9!O8;dQ0J<)nP?5+OP{)V$>`k0(F*|K144tS^QUw#r_%3%T=C<9?3)5;BX+}n z2DuxZ+L~vLcLMiTOjZ#N+MUU*LKRA?0%y_~3_j4cJK!rveS3HX^$hHAk^dHHKl<~(L9nV8V1&f6&_*2@H-mMIk(G>O0>(m)AC z5Ph&{i;U%gil24~uN7J+8Q*ah97+-r)S;c0uqO-{)hW}_P8>ptv!&MW-@|zqmyV`beRAnkiDuZ467w*}P4lS}BCAISY+ho_B zeRmNb?pxOXSs5UXS)JYb_lg|?pNMYmuxaxp-lS_Nw%sq`w3`O2y%Dj7 zJ@k#~PRW2UDl&HEgcOv1@lS7|)FqOUh3hU2ppPQyAor*%G4m=idJD`+XT*D~fwz4N!e=i|2B*>8hvz$FL;I0c>5OaL2p+A;m26rr)< zC->>abc##@5)s1UbkM8qq}ZPBYzaCR`a7(SSe@#peU?AwbYlJWEU0#s9WEXVtpS>?gHGLL>CLLg z49d<7tAVUT3HrRP4v(j_Q*nA`RkiC0HL$~(#;Ub-)HG0o&s~hG3O@-Js5fX?ViH{7>P z816HkI*_`a*Oq}C?WqJZ1cZJ(5JgkNhTnf2Bm|G7?W}WRz-sFtF5p&Np6ODbgQz2O zTYuDdEG7t3m7hI+z(yf0S9!W??m;K6F=j89i~;^ z1K=C26};rb@$hVKJ$CeY=K)+xpUFUW!;cGB}?=fpvLpJztMg`d>_LPin zqZ{pb24A_-eL`RO!#l;{1w5gDw}_7{&KXW6o@m`1YsQR@E$WUQn!Rw znC=#5c2{vmBW|K!WDb!j%v)4y&#dj1X8Vb^fDeUgm9YC)q&-907%%(Uy$MiekY~AH1`biuX(X^cBo- zA`2goN*0!5Gd5v`YOve|1tB_yu5F{McBnn(X}d1}uv>Vv53#htT^ro7j%b0m`et`+ zb}Gu4?hh^FG!rK9kKI&b$Es9R5YlI%bHVv4XhsHeNFW6RXlgI2K?sAx;?YhZ0$MCO zGhm=eZBu(Cbn5g04`ybVF#0SYF^Ry-Y)(QLBns#D0Dh)Ro3p5mO3>F*G4^8vA+z2& z9RfO?dJs@O1i`FyI~V?FAAp0bk}wTof*EkyDHyKf5nn;m8^B`B=Y;Ttsf8GN3pf}H zjRX~LBpB?n@xq=bxLI$39`b-X2E3#mwTeMg1fH9A5I}DM5#JuLW`}PEsx2-JP8YV(n`nNQd;TWvb1}D#hS#OYI>OB`=Wa&98;XnZ0w_3O2(0dGGrxU z=mqTeCW1?YcL+#=pC+SU+~rhTPEf|`NUWkx)s$1ss=|g-j2oll!aw|mIN1yaXo*8{ zDi{+&RE#a$JO@Kxswlffc92Y&ZW4kh#NzWALJE0tjkto{WLx~)?_~{;Co(?<(>lt$ zcEi~zMkVd@c{KZ>9^rsE2Ub!}gQSW(#e(dQo1Oz?;9=9z5T?R%UA0J=xY#lsDO&%? z(};(Srx1PFz%OGg)h&^yrFc3qXdI z6%1%*K97D%S}@nWc4@p*;urUIR{8Xw<=4A#97b%7`VlY>a%SNad(&}Z*0leVF<5e1 zFN^^~Pe(v$=ZZ`acZC#yKET;4#=9tI}Z&E}d z8Q@a9NUoeXtiOqtS%*NNr(K_sn!E|kHJm#yyi>8vNdp;KAtt|oJ`%OyvvlL-qBMlU zfUGgWvp}L^2ACI*;J-3-C>#h1?Ucbn0^`gg9;9Hza);Pesv_=~LKgRYIjK{&3^rDi z#H6Q_79Y-KKc4`8$^r<;97MY>qIMbqi;z!s90Eej8OW1yEBmAt4wk4KWm67*cql-g z@x>qiJJD$Ucu$0{TC`btAOf;mvy#!0o*Sp}x#8V6=>;5NghUCfHo!@gM?*af4JbGo z2+9YpSs3pR!m&nWTvZ0G9WgBnw#PhSfF3$nB7`AS!Nr<3! ze6g|{bR!Dk*nyYCti4C=Th)i0d4(b?Q!_5u4rbt5G&v12WyD2hi4FC8^?mxy6{ix` z@6scxuizhxM|7z7>E~j0>E|6U*k^9}sn#P->wM;zrj0PQLh6#MB;AYuLD!-w5A_8_PmZvgsu%1{PP=WVIGy}U;z(IU2GEmu`5jKwAJ~w)GYjHS^RZV;jT+M? z=tpS91Y{$(N~2&b9{IJcTc2q=ylBXDSH_RFtLd!7bW5bzNU4_M;e@LX0R1q!l2dO2;CINTyoP%LU z8ig4^PRvCmCS}|2S3m{YB?brK1DVC}F{2Kf{&TfyrxxnFRIN5YHV;E;M90oZPmOSh zO0iyu&wTaW?AKdvc%$n!0FsdrIGX{2j9g)hfm7A){Ab?_yp?9)NMG!7*5#?l(jcTI6FRW5VVUx8b%`}96*Gi(K*ls0Kbp`C7A(m8cs1$h1*w5QXPW77{ZKYJR~uqu&&JLrM`K z{8USi{e16{_{N9roABB_)_ZhjyWA;&XIFYe}8GT1OVgSx?tb>y#1)Q zT>qGIJH|)BP@b_**kh%jbHTPt3pSx79p@Z{L)E#U^oY|r>zuL2SS}WnSGJhrG!bKC z$AVyd%n5palgT)o95;=dE2rzK+SffWw6h$4IzDpzfgRq~(HLFaHW#bPzS&Awp|^V> zJ{oV1x2ZqValGBWJnB2Zr-yUy9il;;e9-Dp+ir==6X#V&!#WE#{saw<4- zEYLeqf`-1emDaSkru)Vk6JH9B)oyOg?W^50m;S=pxpV2)b>#+UzhL=;*4_H+>g&4u zxZWJM*ZYUJ!+5;q{97lFcZ}7UfqEXtpYHKm+4JnsG5eZ&zt@Cc>PvwppJ;}h2u#EK zE=!3-2MAWPEEwhGu#_w#leLt0(8E)ZC>8!`^O-;~i^2hw^4soxMOW@h)9qvTm}uhm zc*t_{AFW@|l{v@V9+&>?`wlSV9;pvc61Z|c2qq5NZ5$p8&e<@IorSOegK}h97$jSF)TYK$|f%(oET_1 zUeaVg4+?ug5Q}DTOvwx;?rFHag~wX&YaE>1GW?4~L$vOhu^V95PTCln8=N@!3m=Ye zalfAK{nrGJ?A3*>2f`Ea4R`k1=i)bSc5Ws-;~~A-xnrnzZr7Pg;oe8zx__#}IXG$G zWFH=$blduahA~k)VDFzK)MEc(-Pe+#B;dYTV2y;Bg#Gj)0iPP#|@VxXH51#i=PW%VG+X-g}hYBDZkEGG;Sh>Y0 zN7g-s%}&?JxZn+)1ls@viJj{3N4wuryk9*V@QR9X>Pinx+k{_ODG@E!V}IAi*FHla zf@k+&>PaxfCT$=>y9x?D#b^Tx(JTcx`v41acTbBTW?5W|^^BS+0UFtfb==)QiBp@> zTVI;ATleq+#6)YX(#lZ5Ta4qO7d@}B4^R#7H@@cv{Qa$CXVlrsN&TcQpRF|JO1o=| zJ>N2J@>s^;w9V8Fa1k>UWj5?R66^y?Hl>iL?Pe?(ZO_`-8&x1yf*tKgrVfEb3UCAj zM}(?Oup%vcG?XRp1+}T+$;Uji@z|v0G^R`R$i(xp@l0GON6v{D9?$3#EM8@EUsaz` zb~T=NwhnIX>9d9k!5MdV{K=bnf66{cm!rIN=0n0Ix=hc9=KfDeC=%~RdW?6VsA*lc z7Zfyx!W6q3G}~*Q`!v232ylay%}#F!)~l$x*{TLr(+7 zh;pV9OE`hqfPOk5_?;(uMTATCuF#?l^aywZ+Tvx7#ZHll8+%nia_q0g*z zz4-or#YB)AM}z&m2+lg#GowT1c!cTUgnEwXp$kYhty#EQ5>tRcz#FvHY@=$UZAKRf z7Gezp^=5B^(5rVL`hbD)BhLQGhTmdL9Gu)b*i=0Op5|`pA-|rFl>x3*QMF_tu7$(8 z_KlCesnKRf7!M)1QqUm4rUx#uyJeL@t`(pLxsj2 zaqJz9yI%bLUkPQ^##F}&w2I0)8goG~Oky1|`!xIQ)DFIAYK&frC`UFs!;NW$#z!9h zIy`zh1hNNVj*B%4(2SRTlJTfIZ>pcX;{WUVQ|t48UB4P@0_K{le09L88`yft6iYBgW$^l5 zMdIP+3I5Vqu{HGYpANHI2NEgDm`d^M39Jy0k#OnE?Pg+ej1-STwmp24 z$t>epLM{v+g|-3=Vd6bnvDh`6w!?lSZSiA^ys<%ra8%Yku*IrsPC%KHrzd=W|Vco3*zZ^FPWp| z(|euX7eDoTKJ52<4SC{`91?8h5&*@I+b^hF?&G@4Nd4hH~@?$Cv6LV zRQz~caNSvGBy&!jsC__C6{W439s=}1m4UGu<$Bss3)KX0E_qOYm)3WFx{$=JN6e#M zV>`Vcn5KcZz8`iq1D8#>bnqm0?DRSI~{%SL;N446@{Qm&BNg%?rnEF{ik z>`M;#m`brL&hsO}lpI~Zs*>`?hZJzM$A zuEb0mW$o0W)YJpc5p&!+tRKZ8@bo+`751l3BxikGcd3@6%JB#d@J8y%DfKY+R#2*^ z=?ut0-NK*2??fv0khN1@Avxp(o8sUwh^X_p>M$Es(7~ZDRUdZ)x<%`QN1Y()DmdQQ z^l;!*2|XIBTYKghKk?#`Urx-Cy2y80u|j&FHi_w5ghru;9&bJ)d^Fl9PAbqh=_^(R z3Pnw0^pu|A^8+Y-s0u;Z!rW&s-yE4>sQRL4hR2u_*vdEv)~3rR-uYI6RB%+st&w!3 z9=6&*Vp;!+LIP*?+&Hf!CdaS#J3XnBb}_(7w^8N5i1}-T>Oq!t26u5%{OKBhj0TFE z6k=E(FQBqxex(KO6A;0^M&Zt<5raLT(L7Wdj+raiJz?wteb(zT<;kof^}{zvp^ZlP zFdrip!$>NY6JiEo84VZ%JJ6wmkti4AAk!O}ApH6bqD7~F_Dyc1)9N(aTXCLK=kNl3 z8Vd}}v{9}*scm*TCfoSvH}I3M0DDSBvs0(qu~Pt&qZFH1rHT_p5;inw8bCQ{$7W>| z)eQ_Vqta(Kju4YlnygpQHyJh_?KhHG7iz=r7=CBeivC#>skNV(L6jbhkZ$BnDB@1^ zDWD3Z?W0A~37s^ukD9?Vc)#2P(5pYED9lO$!@lg@&*y$Z)-0cpwyuEN_p*QHUS^N>DQ9S6`K4Bq5O?(0L!UMi> zeZ`=a2qOdylJHrTVh0xiknnubD&r1b&>|4h2h*}^n_`=3Ddu$!uXEubC@zKax?X`z z1C9fJy`s~(7+@=v7X*9ig~jh5L&eyJW97itmrjK+YB!-R*h)buPERqP)2AUig$)~$ z1hdXouKKzDALEA@bya`dWQLy01KFh0NT@`9Osk~V%#ARNq#5+sp2pcqy&%C5Lv}rV@kK(XXs|5l{4ndw1_oQ5{TeKU zT?p1NEMtj#1Ak)hg4B^j_=V+H*w zA&w`=ClF_BsO){Tq<-PczdWs&dHc*1NiwY1Y!C+h6yX}|JW6;{kSr)aWj>LWGHGF{ zLeWGR$VP^3G4e*~PWMpSD7Ka>sQXyGLJ!yCN~01pzEoIWaKd^)zt5`p<~CJ$=-&c| zrjgysyYN9Vh}4*)0soLQjjpnWXc(mj%}|-4>8o)D5&)r(Wk3`ltv~}};ANNC%Hyf; z1}5{yJ<8fvxZ9ep82hA+1j1WA^+Bsrqw23$teRJRz`6gPw+8+~Fp_E`ZBWV~#+IjH zUfyq{ZXiwy2cEMA@Jel}npPeCG6XsbrA8qzYH<<7IzaNF*J^KKwjCyFEv(gA{mNju z6-!0Tn_8`0s2NVBX28uMXL0Nc?q-#`)sOKCl?O7GwhgGNGh&aQ3I=Xfd!s0g6(Cuu zA1nG%=82M7)gUlfLIby^EMQK%I@aGY>J0R$Q>uMb;5x4pyv$ipJ18@x z$vx-P$=Z1@KBFto#UB|6f-d)*deYt2{hw6j`0&=a68F@q$DH(IHip0U#z&|0MEZq(wqrWgXvyo~Wil6V?6Y>Yf3xa{W}FUvOlgOxJ=5zO zwM$PZuXGM@&#g{7G`c5!RJkRl6#EWk_w=iM&qk5bg?QhTDt-O<7(pMy>Ar>9ME{Rf zJ3n;OqZ5jFtkL?B_XItY@#MMsi#2`Z#Y4_RmGOQry#w3JtQ?A`-689TPsKmXnl#P1(1CpnWU_w#*PQ(3mB!Cy!;qziGl?uYHS4 zfHR4C5|C`xnU6MAwAXpOUniA<+tG8k6sj8!zl%8k(RAY3h_4?!UK=_Qs8nL)#}DWs za6CNsv2pp01XE+^oYs}bj19;}JPXMu`qc}1uF}Wv$paVm{tmcH&kK_a9uDZl^Z3q> zj1M2?ZLo(29(zjnjj5aP+_xS8^O&*s9wfR6-+qTm`DTlJD8#)<-c2Dogbu`!Y#VjT zU*iq3=-KMe1E48Y{;WhqO#~j1KF5OnDS<%Y`TIu!LS6*$bkrZYjhJk}I^~~gyiN7K zcXG?|lhK_0+Z}CxJp7BLGmXaFu5uKd2+qxzKmIR+Q(pJ6vBSeNcVCF3hl5Jo`$tMO zPUwBJgT1r6?hKxdzZ`EntL~4F#Sak+(x~lOaN@0lTgJd;UQ%kpt37KEPfoP9y)gM6 z;4A!lVn#d{49%3_DJ)LnN%*o1b~RiBxjYNL!Rt1pmiR!7P29?!mbNI>2Z)3*?qeP~ z&p0m4$!B8*LAmakvq9eU@MJvQPmQChytnnJS5^gH=F(g5?yDcrDs-x#FO$6$ZSo?_ z;MTZ2s$$+m`kGpZ&)BneO?&Mp;>w?W;z!w^IC5Z;UKx)M+U`Rv^tBtyEkFdth_E)d z4UmYp)=WoU+S2}DYTolC0;%2l$7ysz-^$BUy@iRfN^PQbYYz?dt;)U=W0mxL z9B;k5yx`md=+;$vCZ4m)qhL38e(Zbq+Z|XQFW9F7B+V2b9rXCVjC_%W_l}AnfNd%G z9`R{34ID~p!C)Gh&H5s z56;*_1<*uwPklJ3^bWS(ToEyEz59>@98>8%89!NVM=$ntrMu&@wLR`_oK>Ul;-~J< zLbVP9(L^=xS$niT(FzcvW_i6$gSSffRtt>s?h{fLB#X^YfISqTECEov0G!|z(3KU8 zZde>04ek@r5EHSjUjZ9Q%+eNjx1w1#py&A97-E>#o6BnJ-46#T`q`+Uz-i^4`W%Zx zW$3s*qm(G(Ztp>??d*!_~Z#V1?NR{2Hy#KsDGjru&BD9eg(u~nFUA^MUZ#Y zSW7!Ixt?+AW;o-7=y8~8;hxAQdbzMOqHQd%dg9<=BI|z2b<2Be>Fh4!p1NuD{IbV8 zeK)Ynv7Z&+*s5a|F9OBqfv^c-s%?eCg}AE`eM#?*xBSEJ68!I>YKoW|I5|dm@Nh}X zTX2jjraHRY27yFS0##!Q>=28JE~f7paxD7ObaflMyf}t8xrqdteK=xBiG#s-dum^K zT+Q9>5DJ(c&^5-r0wzRcVKpAQf%og;bCtQf_k6*L?|Bj*N|j@4>mYkL>JLAChA~Y% zB*0r}62XW^I>68Kpr=5>L0_-6V+xy>Tc$l}x*Zy)W$GMEPpnbCZgW=1m& z4`$Hb&<*aUyL9o{t{$t=F4qK?zsW$sL_2QZkS5HZw+H!%m>WV+T*d&S&)zHuz4LnUaK|cruE^LqhrRt@wgTg z!03+R``jKh(zK!@adX@YKZ0$6Lh$Y$7+p`RJHRdv3(jp164_N(3yo=cd1cvaZEnB@ zV^<`P+%^YfXU$Jw9P`bdR9l@VS%l^zV?G+Pjz(hw&=r3obSZ+>j-p3(H-$37U$@*3RbBC&wnE*FXQN+F;7HQqKm@{NJd(V)!@kT&=@ z-+Xs&c_H6g;-ncA_VC2(z{$xbCry~{Tc3%CgpmxUd*s2lV$2g^g3+8da5WgiuO+eM zm~Z6;b5*!G|s;Q+X4qYILNGOrj3hu?@UQssu5R7c_~(0LKGpz(CHvwm^Ipu8#z| z09_o8TOV~=tK&1^O*?Cb?wPF5Mg|+30e~PQg~kdZW#~<23&-#I7T!XpvM{MGIY|f9C5pX_Vkplrbe|L z$RsdsagXhTf&WPd*DZdG<^n5VWXf(Wrx5G;tX`_7-_^8fWg!4PF&75{N$uMYd z3A$QzGREeEqOhBJ$IxrXTIVwr-KO^I$J9hLHtxhc8e47k#!NJ=eAS+w@E&mbYr&>& zXEWx8($QpUsfvFr2xr}3EO90qR-!C@4`Qo%9|2@6&+&$~CRS$4_EylJL-negcE-0U zko55d7Na!P%5(@U+@yGOrldDHRg5RA{VAoPo~eG;SA~0_*#RU7z&?CRO{-06B;E(_ zX4UIU3x|AU<%~zwD5*a?mg;kQW^dor!JzX=rTtxCj6+EHhC}J0Gr*VtNQIy;t)vmI zt|l5vpNu12pH;!|Hf?=%&cv5*0ME@U-@I9%Bg5&K;o!IpOqR04x7O(3c_km(=v7vR zXlTM0{Tbdjr#1D$ArRa-)$j`=s_LHuY5|~OAPRtzRLuF9-b2G<85kA)q)IGC%QWFc zU;XHfi3rcNM^dH<<_{TcGiXM@*#Iwu>I|SyfDr3A^ZiF6rV?J3%H~GET%%it`Sk9i zH7#!bVIY&F&Q3Te2g8{KAJt-*8(ZDlbUfgjdhz%FJqSF}l#-de55p|4+`l8ectRiaW`C0Q6^~8)-$S+g^cF(q1 zi{JlqhTR~D!1#n9-u7{0lgeUFdBFo|j@0qM_k%L_^Vt(q_1N*0Gg5NPco|OFv9|Xo z$}x?3y~!tYGy;IGUN}kwU{|Bk znBv1J?H8i|&7UFYvLEb5rw^&dH~>y!F#}?(8D44DDMhWi6j5KlPmlp0;^NeV&?_4eoAj45_*{{g%{A6T8N@jJ6fp-;85x?gY~~ zsw;6UAGhJJyZC?o;yhnIWiQv8a#LnyyBtr}0RjQduqZnyhFy1rxm#;__fY%VuG^=W z_)$zh8aw88MyB0SIP6BFE~&LzX)q$b-Smc{1@$qzvsyFaA9jMDQ$~{R4i2F#XX;ac zI|fS+Z$(cJ_cgw28r;(CdU4BLZd)ygQj={=^SBcR(PY2fVU@?2vU%C`s6y9|*~~LZ zT|4YwAcByXGXCPd(KXMBQGPlmv_REdXFf2x3cju|gIk!} z6&3`4x3ldw1ndWxdYHvSl zgW(Tam9(;7&&PB`(QBLwt%Lzzfh~T5)Z_?78%nG69ZO>xAM*!LwAg()aSN54b z>0NFNaB0OOP7O@Ct6mtvT#N}^GKTedqmCBTcE&LwZjQ=ue%y>Pc9<2Dw=%q2e$(=q zZFHD_c79ub+eaUdQ_%`rNq zJ=)vSrlVQaqra|rP^q}PwbAIcd@Ds0=^0B{HTkiblH&&evrVpL+y(#pnfjPn%15%?x(|qto(H|my z%^$B~+`?N)PL;UTF&5{2&I>_39wUOdo33%Ed=;N_qEpefIO=<@99l!OF;kM*3TNu0 zjeQo}o0XW=)AnLDwyz#ppWOVtg3FJ;kiL+Xep5{>1O(4HM@G{lFQj93=LvPzIcwLy z=FF&_ikLdPI-pBm=r2w6&R2Kp(kb2`-mW@#If{1&^$C>pZ>wANiPD(8)#<&TZ#WGM zlx7^K=adT7@9FXL`aSOUv7rlk?`FLtj%&Sh6@aQ?=g0#C3!84z9S@A1Qrq9HZ#h}N zpob5210BwF4-pjhm{aTdh|_xWgI;fXeCY7~&Y^VMoST@#TPs`lmMc?ZTh+mX<*MGS zJyP6fVzc-BXMc2LQ{PnZ=>48O(5rQabyM9rY(L&{YsVozT-3Fz-`k}678IZuFK<@E zcP;b}c+9~!JLOrmjR~(?y~pXhUxT&G0F>@hfRpWNR&_iJ_IRu6@9n$aK36%WI_`2B zrP;V`toz`$!LL>Cs@O++8_vybx7h!3^lV%GxO(5f==*{mrK`1Vjj^8i;J#|@aCPj^ z*7l))>;#|t;d2k3XZ?1(ZL0gE^Bnft3AS6W!rB+s?bYr_fxYa-}=JjDG#&-95U7IQ^8~3M2RN$M4Pn0kULc0 z2{6SEJk>96Ts~AK9&4Mx3lEpUx|}xlvC6~!e_K0`q`;8re^Li_br!KQUN7pgtULkAk)fV|uHu?EAa+*84X*pFe&wp4;`s-WN{1 z_@TKyUz<5QcXI4WV8xr~hQ6MjotYUN?m76>zS+C>yytM&xwfgGaZAt12mZ5C1$h|2 zX>L~*`1dJ>)K)!yRz<%!2mk`)H}*S`;S!q#encD@Ej{cIayij4qbG2wLE$!Ofs|%; z0YN=sA17jscQtoe69;$QHrusd-u1hQz^I2k;+Y5!dxtYy+U!jHed`alf!VEtu(nWBKQPe#%W>to z;9;UMw~oPG?_68>Tk)Qsw~ak#1z$b`6NhL(ZEK}$b{~t&>TKm?^}^jhOUDI`36G|L z_Yu!F(Mmj*fU4(trPdsfFKd@=USHJmrE{C+dVlLemkRdp`aWLq>^_Em?)d*%d;j3L zuI#?EyVawTvlB1g!vhGAAc1#r`=J5ihk(H_G`*w2ySV)Tk|06!fYdmisUe;kO-Z9) z#9+AD+Kr8FwPZP?)Q~Xk#3}C%2{GD9vZ)~q0h=Uh;+W0#ZN)Pf{L5wG7n_uTXId(OE}^>Xb>{pI*h>)KeyFM`!xqJLL< z8n1=Qm>9m;@34Y z){F5AsXO#k>NIIySA6WBTCW_pZ|H9!DO;>I6TOH?Cy2wWDB8wE5L6cGp?7st060D%W}e4Th1Sx z1Di)zfH>oFD>Bw@q|ft_iTlR%=e2l|muzZI(1e_^htYau6URS~9Z zMqe+Mzu9}GdXQfBY1sw355Wo>S3*>;mnPBUrdQqc!y`0n`OP#3pque|ymUamPUJ7s zmmpGr!fT;F0mgcnW1Iw8&wl!I1S_8p{}wo>?qv_?5CjjGliR#rH8=K|Q29h>xL}#K-8zG*dBS9f^g*8Ki*|x57x5NCzTfHhb z)L?3$h!U*Cy=%T?6yrx8@qQ#fajo}?I^j%Ts`k z6Sa^$BAAv*jW2Z62y6WYvj$)?j};FR;!Wh9Wvckmj-gm(eyjMX+_Zts>_63g~&4HbeX+-+CVj4z_>3Lm^X6cj{d+TgPvdc}Le(zhS|Yg-oo z8UXTp6a#^GB}7Um5#X(|;6_E!gO|HHOLPDHz+e~M6;uZDc9 z@yBI=D+K>J&eF*BT|Pl41jlOhg|#q4BE+E)oc<>l|NAc=Jak2(Xf!%AAuyHuD@jg| z``6%CR1Zmy{3Bxg|KV!~CH+eu*#5O^mukh1md9$*bdgeR15~mIDwOFVMaf`YXv+DEda1BbvmGQc_rJE>v>9bzEaQq z^g?a=WwIG+nM|{%_0wv1o?QX&Ig>4sswv&sqrZQ+zoml#xE=0E2J9Ejo(bZcXdg^Y77x(r`%3rNR*|D`&VM zU1?+ou7q?0DLx0%kW&X&ZiPPRt;%lqeQ_lhP3PKkr|TWH8Xe@>Os)O!V?QlG77{^5 znVqoT9>~;c8PaEcAwxe?%ioYg%2o`}(~ap&X5y3NOT~`E^&sne)IfZ7_!GRShD3T= zO%x?%hm^yg=mGZhW1vqYuV?eOA0x?RX*}a`7`$@9*G0w`Cul~@G#cmIC7+WD4>cG6 zu@>M8^4uKT-10+o$OFh^ra27}3SrjDLd0Kk@d`O|J;-NT>Yfr7N+&kA>B()6kFV56 z0XfIOiXW$KkSISpxDcK{c)C`b_F(ZtDfvw z+)=m!`w`Mi_v9nU){4ou{6mCpB?cJF4s#rD2tr4PRxLL%u0pkv>zDoQ&>dIy>Gtf( z*w}eL3`W63hJw@Tblty6JLPG^OJ3r!X}!YH<^wf4oqBWO5uVY{DK_df|J(yN&UIRnH=MkLd&X zo-k(>{~l)cO@rdFuRUr*t>hJe24W9y_^h)&EO8A`CO2`BZgC0prD5* z76R1r$ta&`sIcXSw8*)vif_jtfiJ*Jphr#AnS%s7!G6k9Aiqbe+-Vi}@YBy2bX`E| zjGFNIDF?BzgcW&Y+>*P_)qdu3ZN)eClPu|J)tLC9%!H92*W^*C5VXODdJaYcv1NG9 zG`GpKHprX?o{3DJ2V|4U~SWI6M8?ID-25*Dx&pp=_q*L+U*{SEM|C@=tFy zCUO~hyxsoFr=j@cz09<1_-sLD>NURALS*CNUZRx`w+w0?3wN&XhbgjSa8$UF5s6)q zUHT9IwfhJErEmu3budE(j=CzJkt24sFn}H4DCWAK%bZpc?cdXnSZ7O>fw#VKy8ox)&w~>sC+gvac6Xm3(k|8%MBg78jTh#B*HMkiBW&$ zhgbNZ@Dk`jXavUKlhZSQ+Gy}FciX@6(~s{fi|GE{$AkeQAjlF&ALPj>5b%r(GkUTu zKEqJlH#A)F>s-l?gk6#f{3UkrukIeABP;ojS^K}SGWmk_V*cep?h7IL_>1NJ`InUW z|6^Y-9v~!m_(j!%LryT#8Nw8ZMObQn`Ki|$lYi&+Z#O0>uXz8WBkq_6$zJj<_cArO-~7n( zL$aFo+pi|~Z#8I~eCe;Ji|(BMirSxW$`w@oX>$$jT2Kaw5ZP%7h~96%rle%k8p1#? zLMCEeLntttfBr*6PG@$0_VRc`j4=B{MocA=kE#65kBrEY`~-80Z+!TJ@67zLPA;Uk z)wu1?$3yl;~$3MZ>i{2qb@$Y@>_kpnP-Aoj)iBI_P~OtS{e9`zgk!@lQ|pX4C7M3mFN~H2o_b8D$Sq44KUc>jr*;Rd|-0%tmSK7C+&9L+6>RleD+s(of8SiaM*c2 z42vyZe8($$4E0B6!+&kcaSWZMe0+jXptNPZAm7n-fdwPmM*3^JbwClnr-{OArAGs94XMDqgA_PZM)r zsiDNqs&lriOUVa%UTdDsrQ9*|hw`3LY#<0v&1--C_eC+hT=NLMFXJ^}5I3ac~f9du& z3d7+^;*2<+fce7Kc{>?~;Z3jG`x!*!;688IQ+vib4oah~7cG>dwnACf9#~$Lk{2;S z09f@(-K46})Tw^K99PdSRkrN9t!N}5ecteqOlgN=PP|k-o9ezY3F}K&RqrizBhsb$ zq!j#|8L}`Iae(C6TVikbhO~83{-V*m7%@W*XInQ41FPYbDZw+5LO8r-=WN_DahH=F zR43=TTpN9BwAp%rWe#k5OW|A`beoh9Ky#jD@*O|V24{-zse8(nRpGu$!~WdDndEu< zBAlBXx2J83Yzj2UyN{5Yr*Er`wAkNNZ&vLwJ7r51F1={Z=)x(Xc}E<+^c!Nm88i<= zkCy)R&|i?l8oJE2u<36GOM0B8BD@pm&b&RGJ$!-T!hK%n55jQISl7#Md7Iw)Xxh3r z6d4%~yZxrQU(iDR2|g9K2oq1h9(Z0ym(*&yAIH1D(z~8=c%(_E4DymLCHVg%7j2L1 z5%R+Ii2F)YZLl{ZdS3N$h~fSug8HPerMHshWIWl=Vud!*>8~4JbA;Q^4TlQ7+vOwO zT?Ww&h6`Qy5yU*)5eds2z8jAQ9Q?_}bY~AN_`}HAQ>|kRH5_XCO^RyKpRhI+K?m1c zku~||gdAm2{nzPg-LHDzHtTBBH2J=)0)NRYTdgZxiA7=os07MC4b_PLZk$Od)S_LnKfc4&JVQ#YQq^qSd8nkPMaf0?a zuj`ukKIM;r%dI`i(B%Eqa6F8}3}(a}z!AAChoAFq3Fswp=ABfzmnwQmv!qg44_cq4 zov`lC3aJ`O`yjFpQQxoo?_2$hziH;9Z#WZlmBH0fM(pur4u-0$ z^{^c8QJ$z6zj-u^@~yo6r)xp1+~nw}I%H~ZjgEy^!}V~f5G)#JT_*Ba5Cj$~2f(Rd z>^z(OF8nM*OLR*gv&U_v@|@jBCgtAH%r>kk6hWO&DS`~~ZGRL-kzF@}#fQA1uK=*}Mq^X#3{h7t-Ofg!X=RkHWze+p?d^*-luwhh0^i2pI|ZkrcV!m9Btj_XBH zNJA}>AyqSMhSiigrlL)~Y?Epwp1}{~MMMxJtoEjQpv-YISixZSZyA%Hsvb*@8-_9> zLLe5200`Z`@DtE|!s}|%=u!7CgbJ(Hx*E3L4|N;=mqERufH?h*9i_R&+v~M1g<=3# z!(ykpLy@v|jHPh-9`)lY5}6X4fB?W5*xr-Ffzwo|Ue#BU!S%|0t)dSq^WwfWwk_gX zM~DbYUDY>KU(~;*G2cydu43QSTai6y&Y2}+sxZRc8>;{3vyN(vxATS`2unm=ZdgzG zomgV`=$8EX;8<|fi#e>H@)s%H6JG26QH(`r>hsB6ev#k<0~l(B&lhzR+M!umP1VY3 z+8ZDz>GZSps+~0tw6(|K=&@v0S1L#>00RtUb=W?1_UF`oWx^wCsS-WVvvw=FXufRw zY>N|I=>5iLh&wWz-yvQS9$(@#CA72Hm6o6M4>KslhM;7(0yZ(=GD$Ky!3ITa<-}>U zZWHrO#4=l6Ef98yNx)!>fIzZ1$pJKR1g*q?p>xCf@VfR-sWX)`deL!E)LmqW;R3WF zYATzmB9>bBj_D!9;BeOOxH`JdAle>Ag~B&Jr5+DiX0dZD{M?upk;`ZJ1HBN;8-(!HeOQhWy`|0( zgJ5$<(tBn}EmcpY`1O&>a#B`_)5r{#gaxuK18YVdX<)9C;fg6;u_cY48<%_H+PN&# zo!}xTyqoZtQYABKX416uZe`vkfj#AR+!+x^vAi@)*0`J! zm5gY%s8UUa%)(RiNnt5DrNWrdO!hu=^<^RbW(bc5asgv*(S=Z4J>j4CMeV`97O3FP zhrN3-h&F^vpxupBLpbL%9|}W}0<%ySu_y`E;G3p5qY?Fiy|1FaXt9hiy@-DwGLu3FP8y>BFL@uQ$C2}$ zOCjb!wPm9_2&!rOP;0bG1j&|e1*Jv}5V?5F@R4|O?_oEF2iTk z$_a|)o|hmPa#C#Aup;uW9MiL@IaN7qw`_g}aT4R`!Vf3>vM1Gg6{-jC>5X()4@c3P zR)>ohlOa0^9Xp1!`;W3PIeQ~)L$1$b?-+0rpD`B~6&w?nkw;}oQFhk|CT{XNxx3z7 zZ>@KjWBK@MyHyz2aYkYSoL`346@~FyOP{@E^xy|*R#V-A*tA+YXP0cV64+&yMvN-k zoWT$0ZkTFaZz2>+X*pGkX@u{t61)L~il8~$`I-NLJL3*9T~yCknSA8%G@7}KyG&O( zp7dFN25;CxlCm6J4{BkJs&FUQTnP7gt?DgeY_DZ5E-mY2&85hJc!(Vu5Qj_rdcnY0 zT*M2edVn0HS$$xWN~vkbtxfW_3KS3eAVopfqS+ zdYm;P7qTha|KMvvJwt@U*bZWlfOFKc*xlifcO!*lO^7oWAN5M(yv_~Eclpr;$p`(A zq)`sT!Um4(lQ2!hf`!5r`4oPzj_$3RUXG={sKk>GS@mT#VjghKEjxuFkl@;h2GWe- z==Tw4A)7#aB;xNg2uSi`Wj@lCk`YJF?ZtY0=j0V8E3hSUzPz=o{OA?}#^pkO9#v|l zLR`0D&=6UjGvQ+4iW4f;MKgWm9Xo5uges+tM3>4qDDq*rMfCYC!Dq0+xC6qS1!>R> zg2%&d1Lqcvh>l#DffdUE=52Q^6w}8w`=kLqJWK2CiMZ{nx?)%fWQqtonIHhI%PHSu zio=;s!K_4;i3G_)O8gH^hwj+ixb)RxBW^Y(c&nGAUsf67+zG z$ZZPd&Bf+IMn-Y&@rD`3g*{MdA3IK1T%9bZQ))_=(#r9qv`Q8UEo@C5<4shg2GCHt z0(I2XA5{GZysGcInNJq4n_$C03wO0%*b9r&Ukr9% z3#d8o8Qq=h_J4ryAnb1qKlDZgb&y!Dt+rY6#c+QNH6Yv6xlpN=MlXPS z?DY=Nz>W}0R6*X28j46se%yn>SP}l(OUb3=v>n#dFWBUsC276loTLl=P(lek$x)7* z!u=Gpj5Tjox9t7Myjb0;E+?m=zRHj(oMV-uxmeN6_LtsxNI1k2SO`$lYAz7#tcMs7 zT(P%gZqYs^2Mc@ z|6@}~#*>gW5z_^V$}rtlD!Nz@bF^b=ktUxJmaEhf+HfDdm4!H)jSY&WlVAcO$|9V3 zvGSNMeh(O)obt-owWz3u_2jZ$wszcp*^bzX+X~qWDb+%#Pwa+K6I{dgY1|)K_jpx8 zxL_TpN+2LQa=R=MK8K<#z|$-k9QN*lV0WAZtXPZ$z(NL*GOq(B6jH(7(LKF;#)7sB z;o~lM)uZU1>=vGG2hxy0h*-0p8#Ehg5Dc`bHdJY=vJ{m84hyG9tkG*?3%3Kv1J*^W zl{celHB_z6t7A!DWpUhql@5^^$%cu{f9Y@k4d>`^%w0z8)oMuC=A(Q7Vev7txk>Z! zX2Cl@=FRg>bWLE7eS(^Cwd7KJ)Gq&V-RdI-7H87JD%ml?gMg64MX#!UNsUJAhCXA$ z#RrL9SPWK;sHwAW^xmn=d$dD`VDGDDB)z2z=Zu8^^U*9|=y8duv7GF3Ci9W_KBTsD z4TId3iy#S8HylRa!#~4-4A3Q8JQL?L?b*G8@HRaOH3!x(a>T`qo2(X`*@ju%k&lSu z-?0D~IH=uEF1Ma;8uIWVC?2sv`zbR`lqI%aSWFb1Dc)ALsYzAR+`v7vrZb1i;CTC_^4{Wv7pIvO#+?1^!LPLL&BokBH7v>@XM&b_1z?D9N06TT6|A2!HdAZ9=L_jhuST|Qh3 z=z~Bci@_JnNjM9!1ZwagE|KGf@ip%n_Sx$sSK2pv=o&AnfqL*>2aWw~A(AUI4?`CI zBEhk`0lXpsuO!vDuxM46=E><7x6DNo;j$pZ_B zyOjijH#&88Qv7TG3%Zx_ya7M<2#0(C#EDXkXbv)5%#26Nb95fYZt(#WomkvfFnpx=Ji&yJDuIrrG@m*;ks533yF z4x=3aAZaqYzLFCdR)iGitBj#0(O|m;AKZ@*S#T0131TKAq0oTTBm`F;(Qg{nr=NTD znQ?X8hKpM%>+Y?<1qPl))7mAT>x9@iG% z1>{&8^#>MOcfWzqVwHbf%?PB=4V~kMZIB^I)r#SKg?o|G_0+zgZO&y13k^1HnTQN$kEiZ$Y(J-vrsmjCYZ0A9w(nY>*_;3QNQ5EDEE;c&qX zuO5PJVBH#4OF&V5*OD~r19r$Riaj&%0*4AUnI5Hb1DFg6KERiiPS$m*&X_Zmsmgg1 z_JMTpB`p5dce1cJE1^Vjpy`hZ&JtWDE!kx{#|lEYSZ18bb`TsMpuHf%Q=3Y+IfLHt*s{u^L73z)Gjn z(?>81!}^5QQay94mQ4hi=qu}DQLIXZLx7-!oGMx}OQvf34CXMHuYfgULp}~K zuKqn?F{zL|8}ZEH`8v@+b2hwNF3+P;Y?~;D7_Up7&&aw&pg%L(dW{fcee?}~FZo^y zcFJHvhO)b{0GMg;vcM{^vDLp+Iq#_tjG9)6RcZ{Ji z>OhQOEUD|3u!K}ZBYhW=!J*$aeB2+sImgEo5Pz%*A!LzE3OkIL8a+Wu<-T6BZO;;?BZmVsCJ!K;0ZUQ>6q8}S8z&PxHNVTL!lT6Tm z*YmG=Z;gJJ**q$N2ls?{aF?KqOM$^+&$$$>QVP$qjZ~B857u)tYBd^Rw_miuY7%l< ziQF2#6-jDUak^JG)>N`#3Xe{y>ZvF(^`IiVClMmM@vVRKD0FuDXG7vRbWeg`GPh2` z$vs5%#GE`@%+`!lTTgSG&sewr$llSer|{PMJfQHU5V6OC6Uk{YpQ25&Jm--wDTOG% zMC5ZMYS6uKpt4X1+V2~@MFJim*UQqxB9hPMRDq&|#ip!Ok|FiHK~t|M2r|+vH$(vm z;)s9IK7rJVQlsRUMU0yt-HF$=Uoe6!Ot4*t=ZHJWnYt11;nA+Q!n32-Mt{cZBB~49 z?zmz@;Yq(0nG=eI8!iIIwPLm;#8=bPPa9R7DcfU}r~Gra!AU+5f+jf@Zf{$eVIx5i zc6g99Z&(kRC;{`1h7z&Igw(QInQz>KTy_nFvvW061fD?2H^aSJ?J_(P<(Ie~oPR-T zeu1}g&AULn(fX2^U0(*xcekst|z}$n(^2HLkp86(7h3pyuUOH0vf^}%G% zhnNO6_eBkZxFZ64LI$L2aTxa20Vcn+G8gK@twKV0xnL1r@Z@wxQZS!CDprX zs4}igoUWeT#M-=A*{aU#%4xhf-a?*_%_FI**K=k%9ROq2A4Fs+lS}#@QT*ZqYp3*) zolBj$+5Ycn7R=msCU{IT{WhXa!I5`Sac`RoVzEvrBXRncJsUj0*@4g#?d=_H6LY3o zX^fy(fFKCr;UgzG>s{ns43AJGF&11NP#cEm_ya|LIugyN@sLys=mV${t@jCI#7?0} zqyU8XD~}#o(`0(n>ZqDE6?>FlapnjzDP9*Yf9V&07`h!8gavjsSb_}IiU!WlJ+4I< z*=HVa58n*vKY!e7r3T5htD}@5x-kzEbdrn~CJl;{2Wj5%9%2{ZV2-%vc#4H8r=_jx z5*~y`q9nK_iiVJhKynek2X)d^AHe1%upjkoSuHLl=U8_Yd|YnqaE$G9U*-cRyy9NU z<#n-Os*SD2oCSeIUt9^#Ai4cwa5&6vd*SY}a17pF=9|1MvtBpxD!BIExcx}_#hRbDWqGV4aVx!;5+j8NGxl{0-sv!;rQKB^?hG|WL)T^RD;zRq>Q zZB#^{HHPU>Ea|qS=yGyS34bzf*#K-XisKc7fJ)hiqobXvG&gjS%y}or!zm-7Da(*e zcbY&QiRP9!lR>l_`l_i`)ELXu?W)fwX9(uUt=u@zisZ2AORE1}HO{$bQht{NMG=%$ zh%=sBwrS;I=qaq<{=2^?6id|$rFNCZVt~z!E~^`bwyfA7;c7m9T9@jjdf`@v; z-_zRpMk@f36Pe99^9hkVNmF2~M1ArC$DU2KWY8@L5ERplRNmHQvODmIr>@hZQs7$G zNah96awQ!@Lob1rJf9SZI+M5Ud@2Gg3w!C0gj~V12_0h^fQTXqAq9By+VWEd&hBv6=G*6O2OY!v z!UK2x?|L~JoW>3ji%AJuT^cMITF& zR3`@>ioED%&l)jgJvWW>1)xar&%>2%ogOnIv;#bMuR@FAIcOH%!RPPrYA)m$T!fM+ zVab+D*#{HH3kzgh3mW`|g?4NKXpaif0jf zyW$)`L3+wk)r&l<`zndHsvlK}3DsgbTD(t)B|wH;%<`}jnL&Le($SWlubjZxp0~*| z&&?AKa?#Z%K4x*3AT#F?!=PzsoPYv+d7`CUR} zK$TEG>9;upCY3rN6m3&vYy_~xevvDRR!!*?#jNOgGW)`2DvuYrdFU8=s5|Yq18b2K z^unX+jCtmwu_X3j-m=TW*6n}x8OK(E{fJNmkmT)LD1A;?R<@I4T9i!!0Wnmwad?e! zE{+Cl^)HVedTTW6x7H*!+#ANNz?-7%>;&itcg4G^VtUC=fUickEB7l2TGrIIte=yJ zRdyCi3D)RnaZ$OXr6c(3x6@Om*o(f+BO3)?2qSSQH_Xgllwx9yq|3h<0$ETlknk45 z?}r3da!W)&HrA!egpWNnSW7`;ColH8ZhFWKvF30g!rZ|xViqwGa(5|v)!$Bo`W1WC ztfy5oYtm$vdrsc7`O~7A5;?o@Jp;k_bVZVAP?l65PvRHVsVW^7W)t`!VI37M)ijA= zXyfnW?tz42Pz<;#|{5nLwom@*cZej zcJtD2!d>#Fu4Y-4MJ2f-pCB|9>mV}G(`YnlS0iatMmI>^NuAMK;g(1_;ZIH{lpNK- z6dAjs4Ua!x%jZ_S3rNjN}GjHX*q5c3JDZAe?TPIJsd%H+~i7;_SyJu?BzLl zfh&o;h{!oMtn;piH38`q?VR%4M1CHIlF-c~oD3tDQDMVS*J!3=n!aLer) zV4kS@$I=l~F<(|+PNYl_AGH(YG-4@*3X*tYO^%IyGvUJCd%Vc1TBz89&@0KXbFpmN z_E##x2$Z}Sfh2&g5=g*8fgu1 zFiYxI*ys+G$TJVF5Mv5brItyq+yUikt9uFb%7e%?)rw`b0=vK z6I4suuufomMS^!z_vGvy!ZRZH&R_T1M(OfKe9Cj(WwDDWk~3%`nT`&LWQI`t!7FIq zJKAnX3C3Yj+PwQTinQajq$Ecu52e+ppAbFLZ`$X^D=((27RdPBXe+|$XfA#j2Y3HK zK-HKEr)!$H>vJOaQb^DieJ>ygX3r*w6CvFvOb5{pP`kaO1U}haUdI?)L+u~qa=)Mv zA8DF^)eb?B0Ae5~0mRcqbwnS~Pbcrt)Os#CXDE8&W#NZxh65T{SpOB>ALRB|hZNHl zeKuU6ykUc7!!40?xpMn6Ul0a&*3Bp!78@)em-C6~RMe%aO5Uw(Mav0|ye21F zB$s0#B-30XxtLe`VWq&Y{QQhS56kABUbgSBAC6$I-u~vF>7N`l;>Im9RV-Xi8`RB>`?W1GDSf#dD9-LR3?Q8 zBB{(v-xrgXrDIgoUBCvKlR}IIz91fl448nGVDqqSE%=OJAMl=(paDucCojm6Sv1Ll z>l99w(0ZhT>oLYq(L;hx;GWX97Hwc6pqX;eY=U%6Ypum8^9eB$8Sr=tG2=!c)%Pk@ zJCZ&~l9<}=J!>V5V`ZWjnO{4I>zK&4u9C)yttj61=vkxp{ignLHEVLQ<$ji3Zrltw z_6#@``K6q=hjwHy1dQb;xDK|qZKc3 zpq%N0F!kr3EDs3CC@8eZ+c>#r4~kaoT!YCJKY6o6w>JjDDdap)7C4k`evV&M5 z0iSRP2{?nI^??FX)K?XJX++aCN^wulr#Ivb9~;&+ZHbNa}e$^bS+lUR%UHW{4PGrA#EI585z?;%5C zIZ@smspx0#sg(A-k96|ft%T^}0mz_5^4*3)^k+w!d^ zQD7&Y0NqD9^6nBm#?L`C2_0Y>B_zMwtDBmvCN-WDQ<18NIU5|u*hNjc!UjbZ3*;R~ zqaibumQu|cjI?}7YaHZ=Rip{Q?M||xbo6sN+QcL$rz*#if)agoy}IA|0>~;8V>BL| z4a53s$YH+ zX&S;Iv5f==V2>Mk;OCe%o<0)H6Dpw7(mIV0ahid@YLNOtTx3Fzw=U(MBTu5jZ60@f zAyj0xd;cZu4Z1+jBwUk{u@|(_zy??%toA?Q?5u2bY*+4BdX>nX+t2PK%iXQ(Nb`W8 zsvdgSECarj7yyy0CD?Nj8OpV?W8&EJD#f5?WlRs^M381F$0*TU7Y)%)DCop#x_#&b zV;hK`(ZoJg%`brVH#8Tz(45HaxU(B{yi>uT6)h*@AVU4b_vY8sq?mh&A8r1qHydYr zvfao6Z>K&4a_lJ_3o}KecYF2Bsz(1XMZ#xdC*<>z!Ug9F-1A4xo6iRV&ln=qAG2~l|V4UplO#;JA@5Y$$aVe`GnLy$v`<8 zjzgS#V6GVGJ16})woI5sjMKP)Ncg*JE?yH6uD$P#db_FGG+nY^27IBZpKt;Gipsi> z4Cpb}qt|rLnzr%e0}x(m&ZS=vE1MU2aQ@MFt10aY5_LAsMIA@w$~1F1c%VtPMRLKfe+_3XREs~@ z>18FB6a(k5>61?y2^Zw?$UQm8-B{Rtm)=HRE%UzjU7(eLm-#1zJHUD{Jpph8&Po)A zDHp?BC+O@UlRp4_7WS@zq>k(7h>PYc35nEkOoo^vS>6inl1rsEj{|WYj*F$kc13VZ zTDY5)ipw2E^uP6@Ou5yRWY4q+c2bn{vy7(cP5swehA^FX+Rol_B$@-m2mk&Qvf5++VyI z%oBXRzNzX61zkdxGSL#V2#=0fq`ERvv4%Ds*$%;-ul^e;F}KNNtVBjZTUODx7DVw^ zbs>j70|lW=r{fu{+iqTC@3r3ac2ne{0m$p3=WZg7zc)XoqdeDwW$(Zs;`MSpCKV-u zVIY*rh<#Ae)I0h>OIFQ79~8)Fx@6OrxR}0*2(NMEUbJRssE!{fh%X|~s1p)4k&inLdxUQtbdGlWb?VAvoj5x61b(Dj z0%d%9+x$Fn3#`Rh5T&}m5Oj)t!?p@!BE8VfhzgR5r)P}@RGm-4P-F-NhsUm1D@Yqj z;qi1tNB5Fb_PMbtM;6QkR&h@_A~gTuFFKk59t4&If0dzA`HP~TUj}Rh5_E8Co{0(G zUWkEP>vc_bt$X+}fM(aaM-omb6`PCFVj=+-IxAF5U< z#!GL|1)Vu9BJ5^+RfHDJd7boKoOGr~{O-<{^Kxg8e(hFV^c$Z#NN^Ff%gKM326c(`cA}Nc?a3^5f~bvG*5yd51tJ=tYD-G;RV_OaI}EnOOex(coNCt% z!2{PuuZ3Rif~Tn4g1b%pYdYhXGR^%uXR3mX!crcc{wt3sy@Js<(uUa~}z!A(W;GUp`LWIRf+L2NP)kFq#yuXR1# zwCf?w2JEhIf(T!@LgoUfyi4-ayMBltB$_77Q{|F!2);AhT(={@VzHQjT}AUGwxJgr z1U6zW-IOt~5AO{fm~E+&t*onHlNw$>mc$-jr5OeE7o+X+Y0-%7?~jN8lkN-dkUNi) z6Or^uLvhySACoB>iRUqICAzh5@yf#+93TLb?HtCgxdwLrTpReBH9-CC%h-Z;n73uAumnaCDXpt zA|+-E#X3n(5WZ3NO%OCC8Hlc1vq2U#Qd!dC27pXXB~v!Wk3xd@+#S}gnH#CMp-ilkSg{@$%CClCS9HrkPrI#eQC6-zw0UDS9p%Zot^7fmjO))M`ncgk>IL_$8Dw+RIl1^*H z|1KF)R%%$C07A4J7>|4|im!!Z1%|k}ozq|82C1Ewzd_(Y?-WN4kJ0oj0X;9ioLMhy zmdsAZ!3N83OoI@NJsrl~5`fX>iUroRX_Oe40Wk*ETn8g8h^0aSMs#gzC&&UB199#S)?{WkrE!Ka*P;q|;VJYN+s=m8j%%knBAhWLrO9m1 z&2V@94RxqquZ2YN?8Qbnv0NbLL~Ak#u#oJMe!%vtiuiY(xRM|&8KLI!<@Bjd1Jr)p z8m0nKd_IH-=dgUzLe+mUr6`&b`P^4}Hd&7XKdn4RABbt{yhJom`rf3-MG?_0if7JA z{*NLt55qL0Ys*3@aLH4Qt4(GJ);gH#9}QQ%1LPiVntN|J-{w}%)e;Mf9}>Al-zJ)h zYN#2kzgd0ycJg!5iWpCUU!~%^#Tm0k$EQIn*viu{m=WE6U+bBrO2tkw;zLQ#%t-j< z0{%bxJ{Pa7x&~1yu^@!hn%fYF)SUbcz&4SHyhOHF15ek&YhKgKVWuySJu$i)C1vW8 zT$|xmv%xm(xGbnZLnK5&^CTGVe-x0gn#vxlv^bQWsrFT4G_&l_sW~rcUt5I z8Scd~q|l(&^f@7hjI>n+bW4!Cw#|DpKF^jgNjN8)E!Jwy9c{2=_?2QXBwHh7v-bgy zMKs?513YdjxO_e%h?=-^QV(O0__x&<$@O$}#X>a%AGJwE1YS~)%pd%ygc7a=u#-7r zkN0IsD6}`6GIJ492``9cAfi1_LK@$t^I3cwbN&8VqU0w4wKhUzpmi*K(o7jl96_lh z(mP29Z}B73?8i`;sF~<7J*o4U+QZAHg2LfmoFG#yM^*PL_C(IrsB(aQa(J_HPm{y) z3fdu)ly|}uR<^zHe~Wn3&0U|W3uDBB9%C^u(DQZx8z9>!beHlS#~yZ>cXZqsJ-DZ} z+keCFtj&2o(J7~(6u+n^`3!dh1QOlPvDpw3_P%WtrJ6`=hKh;CqH?-u81NCh#oZ@R zRY{U^IGS-oba~wLrBmj4GgY-OCG!d8M`to20wvl0P)?Q-bdU<8YxF28Imdxn4Zy>4 zi7{7^P3{{rcEEuqhil|^yxY&~X#Lcv-+qnrOxkhK^xgbPAru|4E-Xj0omHlc*t3C5 z5=ltBR#u@MF=Zoi6Yel#$BBrwI4}K{w^9zONc-PSU)_w_8Sp7b%+IG9Mu-jC-uERT z7c>PgGI2KaV(+q2t+{T~H1rPBR_123CvFA%WbTVZ=`Kz1-hn%eXG;e(1LmXe(_YSL zA^3ITQGp6jDu@-C@r|%JA*W=}%TIk&YGTpJwn+x_$<;*AX70w<0tZ#xh1PbM zyz}b~Z#O`FJFTT>38C!gTpK?k?EH=>qKI;iNm(VcKC8&bI`L0G&CZ2W>EbCRl8n-E zoe;qZ6!Zb{d)e5FhH*#3Xa}0t7^gj3j0#}pr=^)yMgl$8?#$^F_*^NP>Mv?=LxOj{ zAosH8IJ^(Wx<-{9R`VV9W`m$@{$yJorV4|Fx!6Ud2s4jMYVrL#QehC;Q}l0Cw60*c z#heHQndu|9Fv1u4BN$>rpV&Qni;3LEJ=>^A@F%L7$^7w);^2@4g+1xXk;<9Sj2Arj zI5^M!Y=_9e$6~MxFa`Rq!Qexer60bP3bzd_iCSufP3*E^A<$n zgv=_Ju~l5{7?sJu$lh_2jPcl#WmpQlDDl^XJ)$mf{Ihr9<%HA|WsZk=9{-L<$kR3# z&!gTxrpSe8$7H_J?Y&4TlSkL!Aq0X|$>z7tc`eM5XJv<+a}jPr1v}5OIYL5Oy5v`s zo5?|K#ITt|A>h0tLs)v=tT6SNv{T)nv+=s!!kJ7bSQxBwp7q?Wx!F}_#Iwb=8ZU1q z)`?Hf)7FV_3Z5}f9J!BQJKVer;qeNvSnR6wvR-D($ zH)jfo3F|p(G3s&EOM8?*k6bR&)B`h3-pLg9lCPDE__x7Ze50VaWjBrce<~RjKqx#Y zj~6O`@L$Wdew=NK-9#|$^g)m*L8I`T8}h}9xTu9?(CkM_6ih%px-I+bYIZw;3_Ys3 zqMJXgqvmDPaw=I2PSN795Q@DQJI>b)!OFIcxoR$|Df^5Ym4c7SQzXfgJQStjY1_Zg zE4g^PH_yxnCe29CAEqh}$kk}TnV=P?aKW+l~1dH5^0GrTK zt(i-Ly~!~=V^n`nnT3S~(GG`YLD&jYTbV&BXr}*wDOBt;!BVo7N=0@Y)HLC-PU z_<7+nFh0eLf*6JQW@1a>r~Gov@#mC|#;NyM+DNccF0w)^kkGFH(oWD+ zDCg72bWPbi%{!tTgdgrLaN?hK8ssn|^y#R#4@jfu!su>Z@$_Af1ijmPix33qp}r|M zAk{dEph7fq;S8pO**J8uscbWPCw)P^peo1pv1qDVn5WGRqiD2P2nq%@^`w>R*lRQ>q~FrR(6bqrOJ6d0Fd<-v>ch3myjncypn;iaKn^DGTc2ue0T2a~DV#)_g%ucI zc7_M#p~6j?o;UPmfXSpI>RmzTQwgdIRUCd(iw-!V2@E6vzoeo~bE}(%c^#D%}1K%cJS#YC9{%4=p;c*AGwS;2=2VyCn-UT>++S{HdJ** zOFfC=t%9eJQrSV4_)@UU=JX&*MP4JQdY__b$lI2JUFOO17d49$&4S*%=ofkjy?EE? zh zdX#zTR|Ev}+CrZMoZcH%mx+HjxVAU6bl_kIU@~CchaA8X@P1etd>LHnCc1jUI}qMw zk|mPxA)qUQ2F{%cT-1PFls%LzO67)KfYqmutK%x#U|{!H+NT!VH_cW8?g2w2B$cEK zgEM3pFuOv-#-3NL>q5|XaU%PdeCW40X0_~ zE_jlxqEi8m0%jA(fQ2n!pznKlYb-X>!5;uD8NuJs7)mUqh=_DMz(T&H?DUZ`(*uo1 zpB}DEnSpnB@IwE^q@S8I7YU=0XE7Z|*n$xVuAqwGPzmQQzDWFa#!gu?xojSFII`IH z?O%2S4M62xSTAHFXyb^i3ryiq@DmA zDcqf4X%bF|3^^!FF-ebf?nfLrHzxf^>k;(O2AVU4bj4MBkR*)Ej&zWb?TE1H`?DQz7CfuPtNa7Rymzr9z7Zv?jt|1Rux! zF|`Z~)dd2>nvYPJ;2U=T#dJLyw*@I(PBw^LU7k%L@Peyc<~S8FHymb^oRB5%2I0PI zl#gF_Y%WO;%wd|>FO2TvAkUXyZZcXj#<2lRwJ2JgDYa@j)I>Zu-<{A&yjFDCEhjgn z`&H2%jgD!?A7_@6;DEK0B5ylf?vWJ}N1W z2Ovt30r1ZEP{gh}F6L~=yxrp({SblUKZmpJ7lWRgm^HD_@|^)Kfc3g$wm>wk{&*qE zbD;yd9RHl1Q$`@X>PD)}v$kTQ>qIbsq^eH~quD|ieC(j>m*DKC_{}Rx(nOjoGc>AF zlx2>6hDN`N&>@39+h1QtCO9<>ScS-gcj8J_kj9ekap z@R8dbPKUj@Gbf4%dhjrXaM2gLjclmFWP@!!ZU(NWYDwg--?XJP$&fMwN17}0}*kO5wIi6#hJ$88y^6M zkk_PzRlRsFI#pe4_kYgxVw#2I9V5pgd)AU61;#E%b4HU=8*Z1Pcaq;}+Jn2lGzqCv zRI5{ZXNs8I2Wt^{^W6f|fP>Nb!rrx1VqdzUcxf3gck6v3JoJV?5Kew57&MUkW^7!j z>#Q3@z%q$OomQ#3=KKVXINCHEuoh7j-bi8uS;W#IP-Mp<>y!d}@Ybp~H}iqrBy6^Y zdFmJoz|}i)!_5DWiwH9_CO(=setI|r2}Jp?riW4(Yvm7iyL1Hr+Ml5AC#_xaUH^?R zaL4=7jlzjfvrvr>hFhX^q9A-u%v+{-J`In&N-{ER2J^=v;!0BjHh+g3I~*0>y6AaL zDTayyWDh6mb;&80u)f%~TyVKFw-+&X3ImZrX zGsGDuhi}QSRBXkr;GYoWpL`Np1s)Zx+oN9M+{bKZ&ijI)ztGVtF`4^=zZ(uCPOIb1 zw(QAj*tMaV(UQ>%;1CyuNVMtLS`;6EC3rhMfDz{O7_$W^3I&8?FWP0ZWDW=)90ty3 zR<5VlWl)~(O0}MXh3Rce`|a~k{Guk(H8HU(IncpuDnTTw1uDI!9WJ?i@}UoB4wjRJ`zc}1o70_I~=|ga<&wR1Rd!pNAN|haIEZZ-Z6{!DC4s6V+@jU)iO}w#wqPgGhC(zs0sg3ZF$Ha+&Bix*ktn%JLQs{1@jc_JH&2K~7jdRf9>@jk zC27VtBv=qU8SY^KNJTk}H-L~P7;AWpxD3XN2NsJ2s|Yr!t#L6k^a>|^HgqSaksd9F z6&}Eqs0opCp3Q=tGNK0@PMriyd{xEIjH!hMNz$})9ym#;1m6ikfglvB(Dce;*^uT# zs9VLq`+Hn*9tOGw84@7zVj`bj^e18AFilXB!?7qhgxCkN5Q*}rzI&OrJ5>I2txE-D zf{kVsT*?OGhy)c8Tx?jKHsFdhG@VK;d6;GyayLhryrL!pcsn1J5_2kD2n$jskkw^= z?=DyHN?+-fA7-Nno^rT)D$^YD`MDf0m`l-I7$7)qokIs06Op-dsY5ZNyQ@4^<|=jz ztLd^zD8sxA1ahQ&CtFVIChis^3ATVk(DO_N3S+r9 zrj?sws6j^L@LzIAG3$!MUD9ZonY2ZIm!pLcwdZ1_g)ih&xA?h-l*Kf;5`yl49K_b2 z74Z{FkPj;6#ZAe=nuv2!p@ME0Y32RuNge2^aoF~bNp8jPY^n>-t-&qakFVD?@ z1Vf<^34eGjj+cCu9wWhx1|B_vV`7?|w06FVJ{07&7ow?RAOZ0*0~_gJkkgkS3sEiE zT+6&5k+L(~><>C%_yi5Ou8||xMsDl)M^*Eo$^C6PIvD9e!U+^cFSm8K*4o-C=4 ztmZu*<}?lz166ei5G?%3P#TcvofCUa4;`w)@sIRze9v1dXrE1HIY_18?{d}&RSd;@ zyop4ahq&B&=q}yZ=+}w(h88;6th^L)Sw9MmwJ8qBVLU2oL~GTVrgHt)A0>nw5y#;; zK*Na$E&5zOaK*kCHC2;Aq~pl|a&bSg7^aW#Jng~&kq=_#&wLV+C4P6U?zlsaFhq%R zfSprD!GGi(VyJLhdQL!Y1sRn-8j#U7fA{;m?XOO!@f;NfxGQ!|e3QtP0F1eTIt0*o zq^p`?@u3L!{%&=i*NLc$wioGyU>*RInd>1u3Z>WX0ky?+C>_@9$D6ovPJyBy`&Hx~ zQe;GZS9#8RB5W*sS#s`Q{3CtAF+_7{CXWLm>{d05(?~z`*Y$ti^cBnb3 z93DG|2ZzP3h(^mXLIY*B-yF#gF#n_6={*H$4`3gVXWiaEE<5RO&!ZqPBjIa$x zEqRj`P-4@6D>N6VB;Uou?+aP%otVV+O91tbT1l$l9Xm)?#UD-@Hd5!pY`v>ClH&iv z+Pg=`abNkJ)ulEUo^>`|g#uInDYEO=)y+ba1lcW!f$53eRVXwXe24@@$+X535ycin z(UK^_9F4P?#9fVsM2@J4peV;q=ENijb3AVo;%H_c*(G4u<77Pv$>Au@$({{~;b^n7 zNlZ~1WhN(kvY%TGO4Lct?jO5+fFN1j{d?TU_kQpF-5(Ll4R^UpX$1Wj*bQs}0uKzu zY`mz>1P-SV5M*}%+`1h4TjW5^lsJaASls;EZP)2ZRRJQI#TzE~O290R;n@*Mc|*Ef zNcZgSMZ@UnyhN9a?{RX@fZ%ruPeXz-GnQ3sN1~r-xiE8-+Cn3{!cpWFB9gXmQ`IBw zK&ke+P9#KPN3@x|4pZ9{Q75i8)r)g9y7-}6-<%$z?%k~}1?aKRSDN;fzs2%aIMfBX zCGFI84P58P(ubPO0<0lq!>wy!iYp8$QZ1vKIJ6Q4nCfAio5I$8nNuY^nsA?@aA0r= z`?yPDyK(|fe(zkOb~Y$8kE)9#B(@XJoZw~PvW}ujUUpoG{Fc>7_)M^|njfz}eYq-i zY%nBTWZekf{_V(#s54 z=FlF#%t>3EM6a~-!198iFBv&{cF5i=x(|xH z=euHfSYa?E%e>h3#$TRtE>jT7NO%r$z8cDbd~W|1Yb?)x9uOw0ExiI~9Ytm6LvCS~ zMdyuKbwp1b>1w>q@+>4}bsq{~C`WxOg*i0>&oOLD=Y6T>Y6k-3Qao?-eD!dxxZ>Vc z3(-sU4^((0J^YR<+%!ibhD4|nm-jpWASrskM%Nf58}W!0(V&te9g(>ky}{1PNT{xx zwYt;2DXKx&I>l?;=>lx!)Jg6-Nj8~FVKM*UxWHZPc)~6S_xp*_17iCYqLo5a;Otkl z7ovZ%UJrL44=;xyX#`PW@j|-bql2Vh+{i_P!y{4MKUjTsf3&gwOdT7oc$CqLR&M-n z+dI{dXbYy10ELmuH;51a#(g4=Q2mT4jT|66y~iv!=@f5u`95}!E|ZHS2q~BtHtGSA zf@xsPE8t-0f4@R_Q5bPY z!`A+=MnVtKLgr6@pHW-DAcB-c&J)BarKHqa%E0-?z3aG1?+avD91@-ps*yA+saDui z`N~z1j}J4Ygkxu=MP&Z7AtNYq3}sH`#;bW+5}CAfm30;b&Qc@i))}ZL_(gXze5oE> zXEP|)R0+Y@wo+ezNz613PPDD;&J?kuIDLquu!a`liIRtG}gK?ekmYueFUXl2FcSQ1c^Dlmjvioy5;QGL^a zB|@+XGZ{noWs9TQ6UMp}bw8XcrXTo&bcHeeVd~|P|3rBi!u_iYQy%uctrl3`P3~6c z@2LVulb#4@?i-S=WXr_Wt9$3P=c@8BbR@5;SC2-*-)wZBhwb1GmP8W%n)a)s2*#C< zw29v|1CsKZ+&nxsWTabn?@jgI!WR7uxbK0m)wK99fZy z7>6VTO^gYqB(Ww7l=rBu_?370y%N0*fv-l~5k3HV&PB9DBSj~hN|4CA%57P6N!(r7 zA5Ky^L~_>6TbPJ8nfh%H9#2a~i$sedZ=X^U-CULP4dZhP(=36VXv1lX9wkm{UHq2A zsgzQ2p+uiaX|RArPhQb}Av}^AXVQr;CV$UbVV-3Q{33j!ByS;lJHoc86`_*)3nL1D z#GyOsZk0Fz)N9U?0m428I66$t=>c7t7X7&M-Bc_)lJPX`KMs1ryf zLjv}HJP8h8Mc76WD9AAS1_cX+G8?fc+)ahXGC?)V-1Y@}TVa~eufzo_?tFbD*!&Li zL|YTiYPq}9yg8FVo_=Q(%_Z(H#Kd`o%Mk&U%trw1gBYd6 zax#Ghj>JAx+R^^2{BxcQh9sqz2Gff%`^5McpvXuBA>?oKRRGvsReh#TLB;g~{!%0f zn<`)iR4|8wIwH?YCdTC$iJIKwZgCI2R9&u)xWnHdSHNV$WSO)VS5nME%wt=mRtHqz zkb?Y!;D)ELTO?+fj6ei(=QcNCa&KWtt(z(dJRs;P^~MT51M{^fPeNDT9)sDI@kBOO z@AeSBfri>BtWf&go*9Nv&a&EVoSeu0w{ zZ}0^4Ou-!vbnG?8rafW>eNqUN{NT*pfbdJ)R+lWanBF^+Mb;W(Bmp&xAR2faJQsRQ zRv`iHiOWI+GPLsUjXHbO`^J5v<^HwnkE0^8QgWdR@+iXlk&qC}H^tnveDZFuF>y2K_ulrOyLDzOcfw1ATTT!ud(5eyjz0)IH1 zkc=2bktP{1yi?t+1+^>H;r#;5-kA))L0UBlO2t-b|0y}-0B3_WM;a)+7d(JWe0j>f z>?)}Z7i%t+ER--IG422LgkoXbyCZ4gjjI#QXHJPAwmnetH3=E0t3$qIU5020|ehSg3Z zuPhY1WZk9!xEDwW)4W*fY(DJpOqcM`g5Aq`oD`o*M2J$}!&zLj{$kg~;Zt}aM+EXK?uz?iAg#%~yA3Y*3ihB9uHo)x?zrT2ogq%gFH%xG7tC+37W@YX=lgff?qnkPk>SdI3` zWqASB?n>d^RlVbqlIX4*)Sp|XaIdgYjDWDftRs*`;b*vWJ2)45JLhTFQ9Y{Ycu@ca zb7b;1h8bmLc`(ewd6v9wm~nep<@WfA-ueEXsixToEhBNm;sDWwUW%PKgkOTKGCJRr zHiAaV?gX5N1l1z->=gJ>6zb#gw~Hnc`}Sc(mYVLYz?Bz*YG7Rs2NI9RsKie;q|^!L zqi9MpuZ|QhtNCbGVfSSKx{xk37^RQwh(x!-gK1y?oW#+b@58_)-hoc&5|)Xv2A#T$ zTO=V}p~DZwIOpU}QKBEZD3Jw75etFUC0oYgC0a!+!EW8>Pl#paU`W&p5i&E0)I^2r z?elZe=9E57qPnE2ctkrb(c5jcq*U>3_40W2`RemDjdX{nLXrgR5Hbeax`zv(6NH5l z68g$vH2#nXeh5)V#AWH&N-&~`IxVp?G3&h6pzgWCctb;ccpJh7oK#$(08uFV}iyya9rI zzm%v1YQZs|Iklb69^wN;Q$V?M3M?Q(k0d2^CvELbW>Q$9&I0LCMQ%mnz=%tk^jV;W z+z*W#Oh{UE1=FK81&Z3K<%qtY0g1V(XgM5B6Kh9643QtY0$pa(h!4O>!aC`_L@O5u zSSS(R2YFYup{jTvDaIfuT`L1G7yqPF##$qyudfAS`blk@L$#a-l z#{P>1F*;YOp=${Nod(;j|Yi0Oj1t5lIyB(0AwDn zxRB~>Snyor4*yWd04 zbvYb%-IfdNL2=|^f;^2QaPDn)33`l1FevP2QVlWUOrKoz`C~~Ff>ZEdKqW-Yj;+_%?;Bb;4 z>H1Ygj>I5ozxbDYf%Q+K1LP;Mp+e#CPb|74!2XK62!_6mmixs_v`wgo+Q~{o!}#Rt7J;Q z^CiX#{FA^%#+by?^6~Qf%V@7lC3AuiW#8o`#HMZQ1UE+Nis|)zeLDvnphDMt&H<&GA=H_3*?2|+*y%Z&8~>p zVw~@()<KINso{u5+lSI0peUIkc=5z`{#L46cIE`G)sXf-)Gee z!AjztWV}*~$oaPJaawC&*@HxIy>wZMB6+40E;qVwYW53UO z3m?83LCmQ`*C#Nr`AO0-E zMr_5}!I%SC=)dTw-DQW{L;zT*8tzxS{jBQ@CYZLf$cwi}?b* z@Q4a!z-_0QAgxue=@ldy)p6 z=cx#Bid+vhhWjC?Y)<9hbcjFM5n>G<7e)TaMlVp=E~nsFN7SfqPUm~5=$%S|&gTIaW zV{p*2j65n*%lm({_AAsAM-+w$<`yQJq-8_{vVit!*y+9m7$>5cYyp6gpJ$_Db3XE3 za0B}Dyu|Wf4qEg`=Q9vWjLw~bmA0gd*%Q|;7`IKq(Vn*-ia&YBc7z=Ibns@7Mnw)E za>yQU#$U&fC`6X`lzh4@;zvWis{$c2rBYEMdkEYqDygJ@A=h*bRQu$4h9W4SDbWxo zu_78SXoV$qX;-0tlBDx>f{FTG_qK~(h=oA+w42`&XbyQUP%5GN5nlwpb16R(cv3%# z5XhkI7v+*wvzzuuJ&x}iF)TU(k>n{@UZE4%MzJ~q**+Tfl<==x@q0|**j;RyWL%CE%of4}@oTf`7UHMHrw!X6gkDZpbj(V;6KF14hJT zDzx>@v(`iciFsk<0EI;G+ao8AqY<&fR-9_235TU#4Ve_~(WE%iYPMR( z!yENwI*aTHo^iK^)@{IwEQpLn``>yQx|GMZjiW4JdqnNfQiS5V5dF*{Np)cisI(U6 zMbIR$5$r%1fy9XK=Wx4>80D6wVan|3$AUuOaHcKoiM$JWNKSv^=>YG_#F zI6h8_eL0w13W7b=J%kOr&sGmfy$YHwhg68(HbXFKa93^2%`Qr!t33}{Ux}m{cOogW zP4XMh*9MIVV343sz7bX~$rcDGl1)mUTovUxR(VQ&G;D@X*rN`aoI-V+JT8xgY|9HP zt|fye#<}fsqZh@B9F(4P0RZ7`N zGM5$Z#i9uq<5er}?fODU`Ra!O%n)sKB{bbiNR)=-5Zn0bFEH|?^#Mjb0pZexJqZ9P zO>T+IuEHo@(TK^6BNK0-1kG{@jz}f~z@2i==9P#jb3|AZ>we$hi-ngjDvnD=fB>!| znN&2X`9MjVuwZ-jD`Ea}l~_l@Kt2g+ z`I01a<9ilaPz+I~WYAY3!3J8WfCRBbWEPXtX12{i#NI`&k3`6BQLeyL65J@suMZqo zjF3oT+t=K`1?}TzXlE3W`9V+RDAZ9kRj}R(IR8nzUnb9|h|eLRh*VO=o`p|s)T<+b z1arXR=fV{iV}v3x{5ya4hqC%@Sl$L;BK9a=5@9BG`zhILB{H07NN950R-@eMu0tOJ z>=Lo2%85+{_qv4}K5?cvv1AMW3wla9kzld@NQk=r>Z4V6n3RLVHUlF>L%`|)f(oEV zin-24xo-rJMOChXv65RShl2m?GirZ zx%CtQ$Y8mA3OWZkGH3I@{Fe-PgE?E;p72SDm5~#b1yBr@krk9(y3eRDDE0E(WbtBD zMEc!b(a?1_L=WYB#%5G}m6_yFC->R3TWTmN{*_v~k?Qj*|4v|C3~Rf>yo`h#44q*A z7x34;l&1)c$cZ2UaqQxH5-;h(l?n_`vr!Dn4!JW`vo#u19y3ztFaTK7MpzxDDOMev z!K&Q1eCPxqG@Akvsh3N2U*V~Pt zoDC)<7m$3ufb~01R2jJ7k;LD%EjdsiiAIxu;-+bnX$o6=H7r@XrKO)-vjbw38!@@i z^O8YAK&o^6$1UDiybx=W!~!3Wy~vUmSZ`vyy#WrDLutpucVyJT8blmnVbFpd#ZAi< ztAblZqY?J0h*QSp$)m1iei)E{fz)T4SV1xw>rzO1lIUL*g*K~*0(KG~j~9jBk=Y_P z(wdp!oAd(hb{H|7mJj|-x(G`X#V$WBz9qpUsN5%fsYFR6XEBt?&&eYw|K1?|eARhI zYSFM7SZ;ysKpoC51-Zi6fXv<5Xk+zJs)CPl-@@&%UKiV1m!XJ5(X=n@lF|EEiB;FQ z%BVjm$DL`h#(Sb2EPY7RaW_R|-R%<>b&{^Nx*Fg1*ZA}53!;3Gul6P7WecJ5*U z4Mku`-2-?FBWe#6?W5sNYkR)_CD)Jq+6X zzF49=|3>E0Hn>2mRr?U4>xfK|tD*Tnw>Wmrai$6) zkusQ7-p0+3nrR*fZ6xqI`G7VLO3;MuXlIa!Scz2k()t>+C@on=L!nIx zeK~+M#4FcvRH_Q?QQ-1|I=yBnFt4&v42pWA0jY5o0ZoF^HX$mp2SZ8*g&K>AUk#ol zC_;GrhL2YRIZEgOh~zT#@@g$)8)NQL5Heskc33PApCliVz~6#&kp56kv=+F3g>tD8 zH6o|Zsc?OXvtPV|7`Hu-_Dir++yfxp92?s zrP>ANFdINa>>@iN)rk+9L?4WWl}(V=UjG=Uc6*)pf+|8ve_rwcrM2bl2{p|Q;j-bS zcPSVTR*J>tWmqA0`yMInJ{lcCk2##%u2HxV9Ip-p6VFT(&w z4F$J5srD)0KV^Gkn* zEUo4vSH&j@kmUPBTpYP$xPXaBT(n%EZrd6-?coye@;!=6J2{eUt@|n%UvP5anx!Zo z5F3h|V=q?yKr#b$I+7R`+_@E|%*~Ald3s#zuMS~RQRu|FAa)7|CYKOXX3rst74^di zuC7{@>t>}vdp$9Uyzh&hl89`_+~TI%dJNV{w4kjGF1i3*OJIX+gE^GagpQ=$DBVdr zq0`9-aHjx->Jr5|k_#57BW8|p_aosct3W7qX0ZY8!hnT-@z13T6RRU2-MRKn4(fE4`Z| zozzS9=DzQ!!R@zd0JBV|B5Wq5q#FXDNHyqPM zXelO!yirMH@(k4rBjFH*fO`q{hR}|-Xf?$2dsjGrb-VDxNJY>6P)t*z7BpDSQB5M@ zoV@uR&lN#$1LMR3CMKhRO%#leBUo_cL~j!QVL4hcH(uJdCFlIa!f;pT_Vdn;7;G=5 z_KW5&NtRc!(3aBQIuD5StyO+IXjQ5~f8>-3Q@8$vXlDuZ+M{m(d9&APuQaa!X zC%l7o?-X=QLp*_;5{#p$c_pkwn)N4)VSVnCbf+&tFH;d}3IXQs!Y%9y?}TCP#Y85> z_5srr@Hkis+@13UioZkkL1B_!8PIK@Q6wy{kViNvS^KX_?ue^9SA*(AY!WGuOysx} zJIHew4PFw`dfBvJl(OIE99rR(&k+cSX%$=n!W3sC3=?nsk%QV4U|A%T4XELf-lIzH zOD4Fpt`}%|Q5Dd_u*K(qE_DxJvzd%<1h%h-d!oHuDOIJ&w7I-G26^!7uL>J13MvT$ zPn`zbCt0L2jhO^(rNxHQ^PGxla;B{A0!u4)aK$`NojtOKmULn~WB4T;Yg$Hq-=Im3 z(wYHWi9w%y7mpp(KsWyIq|4z3D*Y0tpx{Aq zcnpaYv<<&03=`q1ARIw70_azRw&meIi0_u^{0UwX9xfXFW#9E72oo_@!{A&NNvcMvst?Vqc-=cR6CV zm(>CqjUsP~4v{W{IOe!MqK>7N*!8D>OI+!q=pvp+^b&9;bpvfq67tqr5X;DbOtK^i z0ibBi+PtogD?$*#{nf3(T;X}eCBYc-r^h2Y!3o}BUC_@d5$uZacb#xAv=o>46Dm6o zwTXRg7juLhkJAo9RZHuB@QuMArbHoZT7tbXA!4OIp@iT-F@e|+GSKxY#aW_=R>#TZ z2hSx7EaqOz>RCN$PFdixK{D;t;P6OwPY8ROyA0&2W1nQS+MV9*j5L#gb;%y1SVBW4 zn2Uf@CCi!EKEDyCzGqNhl#wqMl0aiX7z|mzwPIthJ2$w+m0 znJ0&rAe`m1878S1iY*90g2NmY(K$Q0$E`h`6ax~~3H63Yq>`(e|z*0;(xS zPDl*;bwH_0Yym7n1V(+rBF*l;W(YJl-!F0FYw;}}rMs#;->$FXWL#b(f)5bC)E<3X zz!D^a(U@E%)fWom!J!*fdROgrSvg*nICdI^>Ykz^V+s0kiFKYlvJ`MaCw$ipDUA6F zWG@fnl9gl~`;C+#sB zE2*sAArS)Wh}rOc zdMqWCBFTcIuH_wb53AmV)q#V++&nsfmf+qcIBHAxy>TPgQox;*aVs>NlIQ)^XU}rC z#(n}9z>f@G!s%qWmow#dca0IX0*+0(?^CGN33 zcA@DCl78G;csmkD8LU*PwYVH|@+NTdSWJ;+Y$cI|4j2!eP3p+Ig>-*ZrP){&re;eu zFR9Ai3`llIyQ7k{DL^B^t(ZT=L^$fU03${8Qj(%Z(G%Gzn)i@2ZRDg9^DV;Dvbk1V zjp+6G9)}8L%pXn?jFjfrC&wLjC=kOBL5kAhjq<9h^xCD_F7wkUt@ zUUUGj+X);taI9;gbjtva010uhd)Ot6RpNq$`DJN7W?{s3P<2841NnuSDXvt{hLVV( z-OtuKFH5SMC3cW=+I^QJt1OBU1h6rR%cn6;oW0P7=fkWRP8s~2vBV~lg%L~0S1N_Y z;UG0G_%~Vb@JDOIn2MbQqo?vB(S z4T#)?_YnPqg86$w16WCYG1DdnO9})yN!L;k60(nM=TJ&qD$=o*qb|fb4?FxR3l8*x zpQinVz>LJ5$}8?$@F?O)91JN{{U1j4e)lWUE`U@JNQEW!`m*GSn}xQ}weKmKmVi-S zfNgvs0tYNdoG5oWQH(blqGF1nFlO!bg*JDwYM%gS6rSV4Dk6P3!AmHXPQduTvzP!inTaoIlRt=i z+}>>dIWMIFEFvQ!p1Bdm#$`*I6cY4s4+nA327(`?O-_eU0s~%vYihI9AeE2LU$);6 z(b-g$68Z?Ez7oAlz)S%>i%-JkxSanQ5xAUKr&VL)d1QS1)uT|58w-70VHK!%!pq@& zSRbamUT}b{(4FSzmPGWd>s43;> zN#=;FwXRr0F-&Ruc3$43H=xk+k9q=>yke?L~=ITcabQ;>-ijw}?m z7aTYj7&$kuK>w&1W6uiln`O7i00Yp8Hsl+6d;Kuzuev^`=w(qv-Vo8({!~WZuHr@7 zlQ>k6dLb5MaPRMYpB$q{!7zqI8m{4{fH}vES%cHlMi-mw-&%;+0`djW*Z9t%YV`)F_iPvjOc}AmU~#fYqeTH=PHrOL;_9u10l1@JYH}gC z5#5keYfoQ~>d9C{(_Y=cG=zFj=FnE&1qZ+T5sxM1V3>a4CU8Z=R4Jjzos9Mxb1-_0 z6lK-KpIraL0K_(A@Xrk8kt~(kX=g83T6B22FD8yCBqAJ1+4-ibu zDU3(ZAG}bdoC@;d5Egb5Vc=GgP?iYUyz|F$TBj}kXh7TQC#B%dh*ZfiTwpuf#T%Ps z2`tX+cKe(goG@g_g3}S(BvWuNm}^Tr=7Ts63s3U|q6@)o>X`x!&G#!AZ&jl0d(w`Z z+8jc1kankT*Y&rO0n0Chb>WC;pv9Anlll+Olx+n-W*8 z6R6(nGepbE5V&<&K5HW~9m;?ugLvP%AY8`la+a)W2R*E|%c-x=iYdcTc&c%RWR*SyH%Fl^= z*Y6FQKi!nAc{}FH#WvP`tHkkc!DMX|#2Kp^n@0Nti!5SGg)50N^2*7Rr$1I4r-VRC+@vfD*dp-V#7b^An~^e711e zy!gIZ0BVy`(z&YFUq8YbS$1F`i713f8DeO}q)dTB19Nyh2ag~JP^nLfur(`H{DRBn zU3B!QalI|ZtNr-@d`!5-qzYD$fn0%;uvQO_OHPb6ZFllbhYh(vo{7pGOmk|-TrOGL zWb!nXgjr(bEI$GyrbssU-ukPXQdG4Sic>hcNeNLg>Ce=key30m&xH&fdy1y;8saC? z7vg%gZ_$4;>qS{qBbf)_BS!#Nc z)0B)iF+v*1y+I3XE-BpnQj`Q&*VXlKX|g{lFQ}uWJhK>3C^j8Ja5OIF|6N7#& ziTTj`;JrDVuEXu# zcu_I16|g>oPwY*y-l{oY$NTpOI7KYYNW|$Wj;gAr@^ zT}AcL2N8yUBg`Y$t%e(`&swk={4#k{S?140jQ3-#0?q;fqK;z8WAGn+&P25u*FvM^ z$PFgRR3tV+ATA_DZRqbFMHvUMTacc<4+A%F{N3(+Si2ewBvV7hv^#gdD&rNyEkDJK0nX9GRbQV7id1^B z-BLc1meHGL7BeDsJnKuHZGFNlJ^Kgj#UQhSC*}zMa}}6St;4c zU63yi3kb)=U*}}^HJ`#TvDZn3>L=ECqe|8-0W1 zs;aFPm7#~|xGgC@v6o;iwut*k-VR(f9~J9zI~}II5Mo&_uZg5Z#%hT2MDFKM0{mH1YE%%LE z)jT0brR4<_-4rKUIb1PbczQd9tpuNmWnq@$ZuWsjjt9YtJ4uaHVY2G08Xv#k%`CNT@3h%dL@cMEUVMXF!oTD=?S*Jz7ZwSf^OT>wEKz+AmiSOCeoL*J;^ zIPDa|tw^y&G6aM}+xmZrcU%=^r1|4UG*YLY(1XAW?5o8^mgG-t0}xLAf61`BWr-Oy zh3SMhd^QskEoAifTRs}~C8UE&e7U+<*cEI=rn$4X8dhn_B_(6*wis`=R;|$Zj+_;` z_^3KUQO<|;DwN$akjv?F#VMe(+KUg4TvGw!p}E>_m>-CTY|vp>g6RuR!~Bew4{S5A z1Cx_w%di>eTZIm-mC>Ds{)5!MTBbYgv|`_JNY=HMTZ-)(SK6dLnkIRbk$2?>xp|~d z_jc;q!9Z)IGuKCkbVuXAvnjW7-qbv&w9e?zGSBABmNw72J5Fm~plS8*`{&Jqo${Rj zabk|Q)~(pD=#`qDS#zFu9B?xpqU1DMX-ZDX8n~2!%V#NmWmP)ow%n#(N%L3j&fl5N z209NoCOsVYIa<8U%LL7orJV}ufi^_ruQ<-=EgRv}D*K)IER%IHP`4^p$8d+1@2K%& ztx~h4_^r|$P@B_yQ>*Z~$qzoHre!$`g#!w-{M~=IYxO^_m{(+Zq@=i|#qEDI<-L{0 zM^wz3ydkej{*>g*xq!b)$SCnt`-jpBD(z^l$gn_!J4fpBAK4TOsAYqc9CBm9wXns% z#+eQ$>o@&W#>BA6bG&=|Lz3^4CF0@L9}OOH_=zEvf4lScm*hVhv7zE)raIOcnHyE% z4Z1OVpelVPs99fb#ly9Z#a648sU42Hb=%&;d7`g6OU}kJk3Xm~K@gY+iZkK5^zx$L zisM$sPS%Y!dQG(ukQI@{NV6@3i5SXfX7NLc%cZZY7MGBn4RXh^?`ezy|M#zI(hBVV zpC5O=IQIYgMp95Ba`ed`zQ)eAWo-37Z2r7+Vz}X_SO^ts6))v#J!Z%D=bD?Rtd2h4 zL&&;kmAxJzaJ*kLzv<8;+A+S_>zF6?+<5#-P&hFbdxg!xfpRPE?>$AoJ8ejrpNXgS zu#uilZ*hTQVM{Bfig9ZqJnh;;uCZ*YBdK%lX%!&PjqONGM!7+AIZ)b&+gLM-Yw>nY z{pDv)J6dluMnDjZ#!^ovttw_p^D<@giqWfATr(^?^OeI!JblKd$tMH`=(d!J6yIcB zlvK;61Gmu>Im%cmcA{557zA2?dTEV$mk%x)bEbw`FNO{RxihCenA*|s_1M+oMyg@d z^op-;HA~*rm!0^Sb-1a1jc$p#SIy13m(een9hpzZ=024zt#!Sw=azn~cYRY82E793 zIS$9`J@<<0w_kKU>of7IZe~q()?>laPQ~)p44yLsv*zudGk3W`XgftG?b#QWmB$`A zwhEX)S^G6*p`wjx z{fejTR!env>~Ebad9iZhN~=Wo#F=#Yd-fSy4Pqlt`Zc|3yJNMPI5^Ro4V5at=$T`Lprvpb42 zf7VRB>e#=Tn)Rm7c-qN1$0(KtFO&zhJC;}J7;MDNxM{SEWn0U|K({llKUhqe2Ti{* zYnQtRhEJ<7Yj$)xB}<(%uh@Ri!`9$Q9e$ z;CgT9SdH!WPu2sw)qP@dT`^tuUUh~Jb?!2s4br~3n{X{OgM)GH+=N#go}0*;XWfQ= z@&N`r-Ark=(Ua=&@c0&I##UO*Wd)hqc*mn0|kGe8w z(CjU)MAPjPg6pIGtr^2uv%>K{|%tp>S}sW3g!8jTn1Inz7&fC>@AQ;Swj z)q-C2o?>maD}$Z$X78M7_ni0Dk$5^)-o3H)mOGKN&7E=jU;dJ2duql^H?G%GgCfHX z#~3WhuCyA#py6tREp@PYuo)Lz^JFTM8b09fjn8 z7wdeE+nc@_uW2k6uv0|6u%5wTzZC}4DxGcVwq~Al8ct66PP*Tq0r8?cZtqkj(=%&# z{^?P)SX={^5F?|R@g_&J=);O9&pIiUi_M^>$8j#;eJUMx=!K)Ymc<&J<`Ip%el)Y8 zkEY_v8cdH_4CmeH)WO)xwDhb>WrB1+|J_JsI=qI1EiqE(ctN(AGH?EdUOC~UknPxO zWqsXt?9HUejcMIb%5FSROkroCAyPvnYo8bT>r!5&HCD4***Vk6q*|5v;3NxiMK#QH zro$a=nav#bt7SIkP0U)wonQys+zMwbEx<9kzb?e>w=2UUQyy@sJ25QLb zEKE3|T6R@!bNbFJf4kD*#c>%l;!HDvWa&t=Y*W*-y)D}{8-CLtr0e1d-Sq~TActhZ z7DbZiqLJFH7nX2-?!0dfX41RA*`=XUCqTFtj?s_B(xt86Dy?jgDj{jhz-t(|sv zrox`|?oR@Ko=S&<#%Lnx~bY*88y*zy${H9$sAF#Z2`bj%*X&CfR(9O|o|)F1&2?COo-3LAOdJzB^75yg zjYjtDK#oKxz^`xN2h|k1+h^!kie_wQ>@%jJIhESZKtFBckqUZ7kF|ViI!L)#hpeuY z(iE4)n1%F&+ugw!9&j^8IJBsGLcL<9O;trbB{IH=eS}IVRo9UXS)}?_AL69x` z>t3!?1)ysOvgz8lm;Y<0adD^ zXH!}xl^sfH))18)S=I=>hzUT#tzsz5bkR9$RMZVG@9UZGhYdG%&^=f%?Cerm(<&-m zX@)dY*Z!G13L!eWSlZ?oon@yt(4Dy3ne`e=PHS6U?v&|=rQMN18mX49bc7i_yc(o-`$1TCe^d9IR;9UUZX-C~ zobnHN=eoVd{%Gb|f;24h!K4ZWfq_1^#FHD*5>&;DwuZ2h%hoqu4i>wF_u zu)n4btHK}Jv;L3Okn{ag?|A&|V$R$g4Q+BN#qsW;B~{+yoO;7}W^RwOb?%XHTl=SiKL|z!PWsQ( zf9dw|v4K<9Jl78v%e9~VJwKxC@QLZ=$7=bB?*5^5Ho;H|IE6Co*%_7R+VCeqL1^Q@vpnTg@?x zZoxzQt@Y0jEsQ$1$F^Hv@Xwfy=_TvA3w}U9@}Q)Cj&qCl#Q~#dVE^WMe>z@NkByr{ zZJ9YgcEIlt4Xcdb8E-WU|?bML1W0uZ=4bIIrHmR)Q4Cwt4#T36Z653L>8ZvRBJ$Qb1=cAH$K!4v#f(YaQ> zERXZXD)RHcF8`t~k6jOG;mjprU$YOCwwepx`0YpTc9vdmKK5%Q4rT{u{)2LQFBsKZ z=7M?S#MtlW&p$lUH~-gXw%Kp~&0NW&z~`>#y%KjB*G^pj?wESyy}`k*vg&=$9vpt6 z+&6xL7tTfN&F}oJ-1*WUoS6BE@#{wK*zqrzdgYR%F3`HmFOL8C=c}JHUY{QO@ksFG z<0l@cQPZZ*?y2xbxKRF6XUsh`SNezM>A4-#W8d0oeb?x@99?{P{;v&u;lY>nFIbn$ z7mPQ#eBFp2Grq9BTwZT>T9?XIvT~aycf57hSp0$Mo|}AC?RAU=HTQ6@b6I_OcJZ9i zTB~LboOt9y?ltcRe?#rK)g1qBzHGK;{=Ng1#SJ+6%zN=0%#-w_92|6=t;Vf*>=*vJa%SvVr!xKCm*u>Y>+%vX6670BORH#@=oqO1{j;z^dzToV5?8Kvf=e%+^ zU-rLa>{FYJUM>Wkc=9_Kwc^l{FSk8grC!G<2d}F2-TB`S=8Rr{PCYcNbuBtG|61m` z-~~^XH|1U}&jbtR*om3nP`qg7J@SW5f2_0D-#Koo8G8)W&wa#MX?Awl ztv~+fIrI7ngMWYE&5k>^{pQ+c>hbOBrbBMVTyN&DnQHvUNB7sw*QX!*@rb+0n5lj7 znN6MM@POMp;kZXbremB*KJdTu)9cN?+uaw9`3J48I2boRYjo_qY{vfkk?Kuxk;>3i zaDI}pb$;OcrduVSL;{hXXuUpp?_U|!xT1`k$a2N&CrtZR=buam2UN~KP?9xx^Vi5s zjD7c&@}y;SUYt)Q~-A#9a)amxg<<*>9q6JBG%8!&9%sm-CK4 z{_wfZnHm>~d0wlFLv6$3Rg)=%5TN__xXj=s>Yhtl_C30le@DT&{;4_FIZXA-L~%Sk zTK|A+6YAln$9u=>Pd{8XeYztw$MA?-0#fI`@sIqAWg8`$xaiD$e#j{XPi)-UdBK>$ zpT9rhm>G@%KICtjEb1HF8?<_Jhc7F-=Qt^^7;r_`-6!AA8kd|Y4@G**kqKQi3LRPh zfYH-LiIld_-0{Hg?n-68WN43!n+RHFPQ_iFE7L|9D!3zpy(gcP|I?M%S9+D=EJiunC#6+L5yQCw4>=Prn~I#XoV5 z4UZYcV7yHI?>X)f-=cP=_sP+U&sr&WAeY`ZDRcGp-ju609RF`Ll)HPJ7Mk;UT6xxrD$LJ?z5c&1II7o}S657DSICz>9ZLMjoH2Yi z7N{w44_LbLy zD%LSHZ=cUM#n4O zihVU_*g)WOj`lq>wd_&iyH&NOQ;i2U+s)X}EA}tXnc1|h)p{w0+j-syM;FGM{^deC zGZ6Nw#g~WXoXW|U{R3Wc&2;Kq+0Cp>2Q}cTr}ee;;D~-T@R}D4vSW6$nL4Mw@ZHa} zxaP{Pyy2WO4wSuCoR1I1aUUdfUyFC~wBLHAM+G)3mp52coVL+Hygx7~jJ)yM*`wYEzV+brYj1wtd-sWBUCH~r(Dg-mqs{$Y55~VW z^mCi{n(rB>e!Anbf7dlO_pgidz>mCD@zx@*2Xow#_mO$M?*E62GO@p~TSxhb|EHPp>W^n8Z6W1N zf}JukR%70M>fOK65Nef-1>jnKG;~5f{s=l;LmN)H;UoIK17q>NuRY$eZ+y&Y{a`G{ zbHJhOKRerRhi8p$n@}{pujX?GWr%=ef32lKRaUqm>54lPq(goaoF#AW*;-bQ`9#}# z>W5?^NyiDX&u9LB`=Rdq+gsZlC@jyg{odMbGgTP0yKBW}>9gld>mN9;84u>nuEEdF zo|;gnR1?mzSyr0U7yOYIHD3wrZDtsH!|_|LV+=T7ZH}9{=JaFV@BaB{Z+UUxbf>fX zPs6C{E#EPza;*L&IA(scW*=?Emj>LjTQ0_D-Qs!kh@*Q4{3EyaPrqOGAqTC#2i)3W zv-hQPhv{}NIN#}}WWbTb1*Ta{^{%OTrnfl<*7d*r#%H!K8ks?RIu&OW6p4L)b8uop z*|8T-r?l6|uGMt)stGw3HMR2Zsfyn*(ky3!&^wd&%J#vM@tQI;x2M#VA9Ixp6S4c^ z5IK}wxn};_cPuQz5DBr~W^0WdXpI5u%CPE-l}}LT>|XOw&`3ig&z1?Fd(#%gnQ?A> zG)@nmsuK`DdH1vbl+bHXo6RrTLlb5kXJ>7-t>>KC{jHL<*6BOu{6v|bR;QYT;I7op zxrHS!<1N~mbk;}@LGEg~X712R9DdH(?L^K&zv3>rH-ib+UCjIwbM)o&e(|j9h1;y6 zbEZ`OUf6s9X0bG}Gi9qvobH`>whx-7YjzgqEpwZdomsLP@T0KO=gb4WXZQE&|8P3% zoTrf8{;qi{YMz{!osNt~D&80Gfv{`g-4u<9@vevR_;`k;E+(z8yC%; z(@wsi|0j(3XzEon?(R5c{Do)q_nb;)jlnK%>&pT-P z;NTWdUA1TJU1s^D@lR}farf-Np(VHc_ksqT-#DhGGvmWtd5F0&%_Q{F(A^Syp)(8h*vwGfh?4DcPV^!|# z>_`UA0SsFoJiqRGJZJXIdV{TzIJfBSa=O#~J?qpZ*U7zQs}&sPajzMppS=riYRIYn ze%Ne2ydTc4l`}ea1sl6SNVpIF4Up*LH8EEM7j9a!F!Qr^#=oxp` z-i8UaA)j~`7sGtEGSM_MCsL#5{p>9>wOiNDIj8(Ip1id?1t&0+R<(7yW}iZ}Bb9N( zlg(5^@d=t&*R(I~Z)Uz(J2{=&=9vzZb)yBBXgAaY0hvVY(O+t$T3Mq*X>e>qsmh7e zK3^j}G0RfKSvBqGcEMAr7KDP6u6)yS5O;F-Y8ZEs%`F(hk!AdjAH$4OzNNXbjJm;E zh$)lr9W9$e1NDO0!OArpooN02`UOd~t1POjwO~-YNn7(@!pmzh+560=jY_IBRhdbl zsWuo&k54Pl83g5IZkdbbLBDZGJ)|sqe`sw87DKz%mEKKyt!_>?_3E;J(5ejoDC|u; z-A>C09>@f?ZZ%p#toL2B&y=m)IJ;u^wZ=)Kk-HfFud<&uiAHSr-3k@&Sd4gjk(9|c zZzeqig8dQILyj7UTk|TT9hr{U#EeKP&aXhd71CK^2jh%c8|AuXlX=P29C_QM%c)_i zK(A$IRX(lu1cU2Vf;2hKnsQG&tk33F+N@>ggLAHiJzKZtpIu889DmT6HSs&PcG4FP z^V9>q`pIC>!76Dj#GVD84*ct0DtpM#va@7SbkerDRMv5hnPy9+9u8+~FwItIn$>u~ znx24@sA;xO&VT5f?Vl*R^WTkO!%4*IP) zkw%a-vZ*<)jb9GkhI_4MQO)sUs1^gQ&tLMjh-OO}=P~kY`jwhUF^@k%rOAq`BLz=3 zAx6!b^MzmRz-zR){7&bysdCXOC-jp@K^TXFvMXgYF3zN0H-ZlG-Z=_eOy3?#HJU~W z!dchOZws>NzA&X73^emJ??^4mG{qvrC#*G|l|567H>d5O#)m6&-MDuJB09IM$T2lq zEjPaV>%|Noma(0foOg#dtzvy9tx>#E>B!EKS3I%k(2~Ff$i3=G3>6}k#6D=K(eUbXc60~7mH{GH&iMZHcri;85I z1D8l(Nd+8>is|C8^537@su>lqoYBf0j5iPIZdB2w8UJ_7PQjOVH`+}d4!R|hB#(pq9MKh4$OXR(~JIq%d$0IYhMS0IQ z|Hy1UtS+2!`^~l1ru^s|hu1symO~E)yGN@3+&Vrn@Z9Jd1MA%@?#MLNhEE)t>z#8S ztoHkpQ}y@Eo$D^|oN^b#;pnY(Z>oQuEBw1-t%>u~$L-)`P%4+W3A1w9~o1@o2LJQ{h)g3J$LNk8(WS~{OH(KuikoX{EcN}fRidd>|!waH;-I0rlLP` zg7X7~xnL{lz|DE}zvt3h-3!4_cmLJi8duNQ)BYs`w3-^+ZXXEOO~f&DbsR%wciSiC z%n|wfF>Bq41<&zM2>0D!Q};uC+a2;SM0E08`%8zsR!DPaO!Wyx9XuH|ZMf;&V=&-V zXRI~~d!6v)TX2EqezhS~`p;hW%idLZY-RqWe0fZr5x(11G0}9(dMJu25~}<)nEfMq>B7OCxMRRPKXy{xu?J_q<~Vol-s)fG^P47S4t(=L zv-tiAyY} zu<8Hi?QOu@xb8FGnIWtqsoRTlFn|srO2RoDLPO{i5Un7}7tUZn4JleCASz*6XG_40 z!)UjuDLcL1Zg-0_7+7EhRU}0v(l)tE(6p-Urj4a2O`50omZYSOa_d}6ioMm|ZJt`P z()I4$-CDAeP50^U-WQV7Cf$!`?|trbA)5qA3@~%%eE$CL|2?G+WBjCb_X~{gbbfoc zd+HOUzD8po>IF24JyJJ5B;Q{zyZfp<_xfK>P7Yt8-@FXdPkKj9k9^79Tm8o`om->y zi~B!-?aFUlxMNz=?4Fc|mxbCqFp#CE(pA(TGI-(0(|kP?;9Dhq>`gG%{oNbfkCcCx zKxLhdzs2P@fXS`l1@V#h{S?jLW$c8K83N|Lh_h7^TV-#?+wE^wk0k(X{ zj8{Ig{5DR2?WB7W}T`?2O;f z+3_D1oUIj5-f4M(0_s|c=a_e$SiNw7qX`t<-Ad&Rerw=42|X+>54dorwEzt0&_Dgv zaO6A}t3Y9+%~(5{h#ZJ}YWb)^P&M&Ge>MOYQL zN~eEbTx*tG8#j<$3E^wPTFey7>&4rqDf?6j9_!J@xZD34)r&tE1nj-?A1jsg3k0b9 z1fO=S;5)W1*l`xS&>N`I?*7-Bb1btnZk5k%wk}p1dY_Lf1EO6o5y7xoecX~|`k_i% zKj3T?i{$0%3-$BPMdt_8|2kP=8^m$kDnw+;%~9mFHNx5^HcIx=4w_7NnXz_nT?djo z-h*4;c{6G#To821J3C+=lb9>7OXH||+p?Yk6CY#^hK<5wpBG7K>Z8x{M)%NuK1R=RV-}*B_jHi44EcIj1GMjl5H- zuodThbdmHfi{y1N;AEe1dhh?y^;(HM!)`VqUp{Xeu{J@43!_vNZo)BwyOm{)_oPp< zhTQ@2iygJcn%xMSqvxzGQQWLo7Rga{<=;@h)C`g@l4VHs;FRjPkkXYhP|Mti4uF~) zhdxiiOjA5jI*y7!#`cSBOMcB=rY-p<4ULpy>Cm=Sxz%0S6gwh#x%msG<;!1jjN^&m`Jv&5~c%#gR#ldC_VUS+;Qv+Mwqe}gf^%@N|{?c*QlhNkz0Bv~J z`M?omiBY=kIj2oF(GR$T3i8e+k+_9cz>?;@KRlzs+SJ#foq=^f35p?h>f;2(gG))5 zo2L+%7)4M^AWDGWPylSGielHB4{DX>PN?Gd%EsvB$5SGK&_Zyl6GZZlm>>Puy~aN2 z61Gon+}G=uCl7s1zLYJ(OoNZc7ORQU8B~dEWBfNiHP#7AoY_f(yFEQuw)=NYI*Dd* z*X(&LB(8j8U(k+PXt8*aJ`0aQ)ZA^Q-t|-)EP<13vC=|cbn{uK|GDq|bYL!mlwfKY z@s#Kk{wTqYDMsu)+QtUbK!_H^a936AJYT|fY!F(p&DraxEbYo2Ovj3!6Zsp}@aSa4 z9=$BhYi=nPL$oAzi@YRUv)edzot#bKyth`-TinGQ_h@_L(M9r2H5Ogoy>IoCTkbP< zsq|68uKaJ#MFY+5%d`vcmDji(IOCpVKkW$x;Dg);YlZmL0NS|I(9h3PQxzNkJ5>ONa>@^ep#$UGOmhH(lXro0hg$Nw6N&1AKe; zKdglFI#xDDpYf72E=D1nlcYqU62rf4smn+)CixuGf<`FM>^bwY(vVHiSs{hM3jgYX z<&oBN?-&1(rr|^X`hge!_aC(%fAvqk^zGJ$#d-qxrhc6P+}z}AEa9AH$qK2@*^8Z> zGq6Ec?LNj-^RRqPNXu>#Em~h1I>W=4~?1qI$g}yrk-7&!05y zY|(V|FitY`lSP z?~&LN&yM$0{Dfb1x7E9Lj3t)JN7lcvwO-?royJVwHnv@2EYjrDB;4wPrwbW^l6OXA zv4T1ZkswS9j&YI%2E|&uCE7F+PV4!A)U#xT1PDObJ!nr(t-j2c3)7B2Csm${HLJkq zCq(MA-)Q|=X`fSYF#fg zhrLw~ZLqwAvC#}#q>16JV#=t#K`xqkJs(<(yJ@}b*{#o6gVsfBVBnaQY+xXS{*vWi zgbDhx*-}OU^nO1?xA8=9JN46X9h7B}ZnTqK(8HYu`NROEt|=uXYbwx4FT6-sYzF!0 zB}*z=h`OOhh$QuyD$TYGNMUS*7wW1m9AZ}dVIxY(+!WdO(xlw9Q&eAqnSRlKVG%p7$W@Khvo(y5*gKt{i8^tABH63IZI2uDyvRr(bI_m{% z8T4i5Uva>EQq4ya)>-TAvmb$sw1c)jk&8_E>e3u*LCmi{FK6`ie*C6t(;WKe)>DqH zCVU*M@4{`rbbGZNsF}Gw`HC)EhE3HmF47W_hVKL!JE-@n^ANl}Mb@vG8>}jw>xuKv z@!^AU`R$TBHuR=+{?fE_BV5}0_{qom_qg_(>M|skTa=Mrb{_ZK@pRjqxxifB*QT}I zGU%^}MM?gaJ>Iirsj#2#@Dl5`%AE7|a8b){p*vU>ir#D9yp3o3RPl8839^ zIgQc{vM!b^&JZTB=q&f_oClTsi;#6H-qrid_l*^5H7yC2D#-Tjz&Oi=L zdvrEKa%Mb~G$1*~Btrvj+=Z`d7D13mxTen-(x!bOC<7qxzU}L7Eff!)^4*AUw7|Nw zmCO{~Wv4PM>gWQzr>~=f7G0i3Qnq6Y;|Rs%q&qHoQKYrNM90oh1fYW>D0i}Rp=A!BV6 z?g9D?cj&5!8J1<$qC%fVE8L$52tE+&Hj*y#22JPUkZU$Lo(xM8jB^q78Gq>L{CC`OPUJIIw2>Ya0( zJtBxDx&~u{T!4LM#w0;$u>2UH|Xjj#QcG|%W8uphhE&B_<@t&wrmlc(az6W`2 z!Q9KBoq@aF*Sa${L1bVRe2)rH=A;Z`WM?yafH*mn*dfgQR(c?_*k$J&r*@J@0!tyt zttGhwBAV8{QXH0zY?tgoo$FpBtY(0pU*K1eHW)7`T$YwJXk$rQZ(s1tdt`?NogS#AOx`_obi{g%6lXKmW{bn`0Gp(@e zgYRvHxKp$0#-eFQau}|CVJZ&rU9grYRMa&q6jzhT^u^1Q`X=c-OrzrI`_H})bQggc zTQecFms&xOkg$g2E{srd63SaX^>hspYSQ42I>L03S5J}b<%AInM*xajRMdkI;So6} zBf%cwK?JfbgwmiheL>*sHupGu*!ri-sT-EwYa(mze7T%>aRJGKhSobKoGHkX#dD5< zeq8&ALXR8-C@PmiG?4P_EYa#d(v9runjN4N(NL;G%SS6d?Uzny;d!0LtPj@Bk#fV zfojEY&6i^U#5I2F1wC?=*t6x2B3kA=sYe3ha>~b;wn&3Pw^M!4hB4`h=-L}3gh&gz zB+OCxiol7z{SSXJuY8{237_6%&|j4hJ6Pc>c5I3+(!8#AS$6k4Ur6eZj+rU7){jl; zaO2{VxXlXEpHyMSSm7+dTmbryn%+qXq+XB=@C^K1F)tfXcK8+zZIZT_z*}yTSs{?5 z!P=adc`k9>XGk(+M^qOQ&zuu~?&!+gXfsT0!pP!y6k!J@S2O5th_;9oG6M8d=tcu1 zav>fhBsewgL9#Xtq7G~Nc$HamrhMBYD~DAJa~5=#$z{2V;zPP$aAYv)I7ryz=#jl7 z!X5_VrGx%D^J!hx^xnXM{JwVmPk+`vNzQbCLGfsXwz6cSSy=4}TGy4suA5{o)?JOJ zY}hz2WKPaydP=fUQgHR^-oTHNg@up#3tzZRZm9EYt%rWRGS@gCb3RSKNk*QEZs1SM z&-I_0qzjwXJahN?j}tKiZYs#l#AUDd={-B(LNtf@0O&R5>n9Ge^4b_R@_` z^mETbB|caBLTGr64&P4Q>bt#MUn?ihT7SCL$etvhp4&5RR%og`>8K1!3?iE^ZtV*6I)QRn`T*kr|Mr)8OW%60+YT<<_WI! zy1B+m(PwkhWXj*PZKHXV>}j-V>)C3C9bhwAIrvn3d!lE${J+O`5_e#FJ2n+;^Zopd zl=}BB`#@n!?3w2;6z54|InI9W1{L2I)Yw_Mu#6FJ2<@l2i zzP@`5oNH*@eV|N-vbzK@e|I@^*kU+@RA^V-9&cVsF7a?dU`GH#pIEVFbhux&WBR z?QgCgnk1cKIy44>^g$&6rVpN3jGkyu%ew&a60gU5Esh^8dVvIXA*;eCb|Ko`Q*}}(f@Vxo{QBN$=e9D z+~RkoTpv%|;&bw`_U;qyyPmhxv?~0u^Mz$x%(6h>q3{0g48)_>02JagkDYgZfO>Ww z>u3tZn%P9j0SVkFmj=_fk>{|CaKJk(aljeAIK6I{notQHO8(IzfiMJ`_pz~rDxHqC z5$s@a!D^CJn~ow%YXElH`lE?G3Q9R_b;8b@zN?$)jSZAO5T`cyj zl;h`OZFg_!PT`{S5_$cP#9`wZuACdYUn4^AJ0kgw=JkJQDtX(Q1plVejKHStBSg0j zI4ob5L=b;$!ScM+-1A+^@@?>Y{>r;Qhq5p$PVIK#UFaFz3 zx`VP2=PGW4cvgEGyBI7u$8GC<1AxYe$Mi#o``O=mHa`~ItM_G7i7Z2dlIibEm9R_6 zGI7^i(2mEkxvFvK-yf_XD`YF7)^H~`1D}~qkat8SZDiJ)iLS`fZmZuCw?N;$ojpH; zlkbG2#Bn4M;y#WPLkPTqTL%qp#K#$;8%*Jfj6+CFi&fN&oa1($000*QG@fFcBhtb9 z^5Z={pqf!=i#u`YP9Uy#z&Yw)+kKxS=+l>K6YCd_AYmT`kYATZk_Pz*z;*oQz{P^4 z|B_|CD4uaH@+C1@I#AO3vXlwc%x9d0WvCF3|%H z-}&iB1I(XmQ4bfO%v?f(a%&ybPV9udDeWZ@TtQNTr$@rwm|d9@eqI@KGFc+qC+$&_ zq`OAKViRkO5f&gum5@g;zv{bz2yt=j(C}IEc1l#K{7?~D8c(}o<%LeyAs;Vl#qmKc z^0{7CG-06wzz!L^rOg)7PzhXf&bdMx4xA~=7Fg~7`SuVXRMw`YSv&5jH=*=K)E`=w z7CPgsR(p}W!XAM~bX5^?4E>T2!6Ik*b|xYFm$(YHyNNj#)Sgnu)sQ&PWO(lyI6OPa z7NO9X6>OAt*LC@GT<%0^n^5?iU@Ss z4Wegx{G2;1@P22b34Qop@$(Z+lQ69tK^VRV;(Uan(|TjBkRNB=enmZr2zh{^e?mnd z1vOEkc~bE~;lUoX#@wewey&f@5yr7#e<(B$?O?OcFhc0B4J=#v*Th+>^)FM(o&3$} zwg9?vEq)U+b9OCtQDTOkC0T&>QTBcVp#6dN+_+YLR0P`s0qukppc6FjW`7$(b71lR zVWBxFJLV@prs>9PH8{b7>rX7!BW{z<*=m&`hze$1%2B%)BGUp~Ag&Sy zDOnD1sxO=a=G@9vE1PQxCujF8aaJdGMeb8ifE6)!q!$a=^?p6Wwm`yQi^6xLGUDMq z-fxsYc;;)^?hI|lW3)i+zOR{nm#C{}$vG?$Dnq?LHS}0U?C0(gHggmk#Mq|S>MAEL zdORcmYhUET%O#dfugC9#cqy&!1YhxdC2rjRX|z2x1CvICU&E?%_OF!SEKlpm`ZBUL z-wAi(Qpe##z0iNzv4CD<9frLGM-u{)!%>B7uD)kX9RKQ@tm6Xu(v0t;NHO zCXk>T3FalZc6L~2=}<0Z3BwUX>t@=BN^SCRMLgNY9rDJhGlfD)`g&Ty`oj~izV==X zL`|i_IYyH@{9I_b+W^#G$hNpdgd1A6x}NNs>4HoPi*ck~uMX_7ZYjaBPmRbAFo15X zHlYMd#=T(P{3qr8fTly=QwyyB#_$DCPglU*M4eaEXPD?24E(vtsB#`1XFJskH-y`? ze14vWShCt1eZ&=ji=rF#!X{dE=7poqt)^}xnFYO0!ZUM3qtVs($EA%t13Sv8*W|l1rgn_B^Wm4-5-;eEpX|DHXDJm@DIfZA)h;%Z9t0WX7YzLWhXVNw1o;rmT9(K&88(xc;XD zKigq7JD81I)`Dy!sf;s<*pf{tpfgdQ=5~c>5&(OZEyTmMRU2oE@W6grKM3il(&9GJ zRZ>u$j(T1+M7)_o#npn#8(=3gA&>LA;p`$xK&d|OCehB4>sGv^zY0wsTbat*t<^q+ zI5p^LYa(b%L@AtIlV1A%H~toaC>0;Y)0+R_KA+Lni*zQ#=qvT7<{$~TXVzG~3jcHkB4MYy%>%R$7VJ^G?K9WSD5mzffhYUTI`!-~Dfji{z)=1@t&^Ey zr3YwjENR`whm~gx)pL>`jrG*e@=bhLho@&y^z3rmIM)L~;RWA~HLw2Z3 zvW*x>NE0Uflpvc9^rV8a&iJKo{4BJ}22sctSz(dzo+dp#U=rE`BAL={lT0X~(Ugrb z*+8?=^7@D>pgz)w9YyYiUYDKA5r`1v?Ril%q!}dVz%23RT?3s2gc;sJLL%1uoEOwA zLq&{DL$anjbZZ&C!&ud3X-jqOLXg7V`Om^>8D6nb%_y!x2g65$2<)VxYywfe4xElR zL!(t%BSiBax)DUy!8dDw=~`S@0gh@w@{QIM(&8bUOI)w{fj+d%ae*kaS=TA7dNal- zOLK@g<6%seae5)`&wn`R6Bk@KjHDO@4}pn0+a@TxWuU8L`6dUn#BkVgQ=0{{PlfDj z$^gG?Oe)O7B!PAle@^%$G#Dn1+|}dZC0ej(2HiS*hp?etu!bv128};c%Z`H~aE^Eq zrm&tfo(SNDq(bfpe2PTv-qLp=kPf3TMMs9J5OJvKY?epBb?Z{{r{-pi)+$G1kdX1| z_?rgS-;xrl;XI0u zR+FFx%{cEtCES7KJW^t~jykFkj?hvw8AwMkB~VFyBjUa&#FlItD1a$MZ?ql}(zG(E zJsn@j5l7pAs^Os!kkr6y2GDKIp9h!3CEB&neo7y^_wNeYwq8C@FvCDKh#-m!jj(Rd zDKZ0Rji7~^lObmSCba-gI>_s0-KZNPubd`vZwAh3o9wBOkNXQ|{#S`BugcEd*QiAN z7Vl^}FhDTv?(?AhDU@}{Yv{?#rJ8dm=ByGAc8~{%=OqwOkLp)4_A&jc&ol>PCr8J535Y2_l$u{I)*ldLB0=v|)f?st#&DH7{ zWc*4!$wOKrSl8`i@&vIvSo8#vNz0K?lB2uOq&r22-21~{Op=?np;XtHQ29Fn}OzK2%o0E(`Os6_hd}P+Wd={;pXS%dn28E2unY^wlzCgfgmA4QOMGLJNq)zlv zj5xdclc*h$3^BD6RECwv!wAa_Fn<|8V7ZtexK5|OXm)bRNT@tQr3b_*)v0eQ! zzt0Ls&u+%U6G#r%dJ0(2C54Z83#k=I(`iCdE8$C_Mx3k(1v+;CYYd zo$l_bL}Sm}narmCxs5D7ZQmvKrvCU<#1=5&RjZj)E<+Fiol8w&&e7e1v;&uT`u#me z*!6`=thGBAmCutW)%rR?a@dR1j@?oIn`*6llfC2P-Oj=X&54D)_ru4$`fZs43Ac8P z%iKZC9zQG(-X`}f+5OzWzoO*#V;A|D`SX>h$t!aBQYrmOq=uOX$a*J=g$(%tvCQbL zIR7*Ayj&{{-!I*zG60bNvUCc~>{FmiL-q&||?BqoPQ6XR8 z(P}yR%b8`lxp<*6m)Q{S7JXaJ%H-4kbnu^klpZjj=zo-c@;AZIrUx-9m3KMK{vanbBGuNp#SIyU>`<0@COU>Y1Y%afQ3!~ zS;7f5=R$mb+?2yl`Ewq`&CRL9ItEpBvA6`c44AA$(=lHhpfTH84l2|hzmm40- z){x|h4>^nkZ@!nWc5wNFui$GQROj&p7s$M0>+*9K{@J66QhYP)HQoWMTm}6OKs%4o zQ}%7xr<6~diG%i_eIXn7&WXKWX_aOkNY76VwFP^lV@(kdY(;AWKfSA2$Lqgnrpxxn z768=gXW97cMg7&8Qgd_pw;{eQeHVL`A<420;&Z)uom>Pp8!dv;U;T`0o=^v`j=bPj zFYmCnRsnJTU{ZW#0dh|FOS_+tcZ-jIMjq>ZLT2QK)ZR-y@RXSJi@)l=^s&7M8|gdb zrOct<=S!d3mT^0udzO66J$$xzf48~$qdVqIdHDD2+w!jKd63xN9mKvcBma}t_xDAI zl#@&bZVG$fR9!G&X+WT=H&!_$!i{O(j^gHa>jCcOvFxYZ=XB-eN?UQTh{Y5 z216R$%z-HoC`(XPz^b&G|fO6&d zD?LlS`y^^h{W_HDpF!Iw2gUD`5_Sqolv?}6XmeHCN)`~CU~fyAxPJBSP;rpoLg|?Z zI+*STM>U=+-k+8y>Lu@SH-W2r4SO#%fZrtQgk$Qq0_1E-NN>gHjERywoq_=cgyS8u1ptdtL z=&~rFI;CHjGmAvMWA;2@Es zYk5+{v(5%_!s?3CHz_b?>@Md){w~kV90cDFVsi*bmu3+8YMy$FLL?p=YVVE=aii00 z5Q@RQu_NSs?qE}6htLp5Pj{*u5)8&;a6tN3)cCgfdSfXwgloC2-b5%UO~d4E+rIL3 zH*{1jpc0I;{bG^y+@I`2^yp>jUobNx2jt#4bMP^__au{>X^MVOZjS#}cGVk?JkQ%O zzri`emB!go0bmBYC9JUgbozo>a)&Q6#C-<)|Ey|Q9D`N_IpZYpCfIj^j3ad*%@OX; zXE>!X!X4O!ApZeh_zda+5W8un4UM{oLRzO8K>_^;LnMGts2E-t52Y{IC)pG3vIvS} zW4MS$D>OPJJGJ#oxP()$Ozst>=6Z_i{~A!Wd#D6N{wH#b1Z*n zBd`G1MYT*Q80l?Ua^I-8$tN#X@9ng-7$yj2Ckdm~rQzfZ^kz_Boaa8OZqQ-qXE?;_ z8w3{5=lQ%Hk>_ng%YVYPBZtN!WNVx_T2DPD3_MlGY~U0)VsMGgx|cnF`i()q)a ze;|e74I6=HgS9VPk8ia8h9v!{{H4r)-??Nv&g*v${+0d7e;bwm_w7%9g17&Khssaz z_Ww`b{(;HN-+=ZonX&J<4@_q8{h`T>eP`@;RvOv^JPv%+tniZHgh>VV7zwSI zGO0+YrfW$h10C+p#>l;Ye)GZmTKKB?gQtJ>MgHj7yT6B(?8Dz+#e+u@OQ_Cz7yJls z`QWhv1R}JzfBnoNW$ZGfy$%c*$T>(n;RMlrQq;RzxBOK>E!852RmAoSc88S5!V9zP zTF^UfGVkBa!Qe;MCm9BOBcr`9X7J9*WK9 z3hqqtFFf;!pd$A>IhNZ5EETG4ae@KpwR9M#T#$P1agO9paElG`-gyX91JU~;xA#DW z^Y-E20zazmE=mP(4bAtCQ-iBg9A`70t3l_#m>ovxNWuJrrfv0hm_%fK6!Clgs>R% zlD7!uYdn36&Vkk>MY}H{mUvCvJ^bdb0f0Z7#=|)!a2iNxULk+*BCiwZ-})i=&T1+N zqv#bo5+->&v#oVKm}5ou9<#{FWr%ZTxbJvD1$F=(cV(rjuw<}BU&^XtS1QvDQeQOP z%27EgKOL&Ay5Eu}stETS&4H$KoDO%@Zi9vlEyoLwxycZCmN#o_d8=*O-+U?Qmu(vo zUFQ|{^0tnFLmvHgB+!#tmZSYq@6nnuM8dX^HC?%=F+hC=U^0hzAE9Smb8Bk|P8Q6z zgN$wP6^sfr5dFjqx@{+}mU#C%cFntVB-w@m zNk9YSpra20TtcZYd#Vcpw3n-~4WfC+?bYjau+Z4YIE ztTB*&A#lYj1K{^)?gEVx4dPm-GeS3QYErbKuGEWYMySbJkMH{!@HM;z5EN=3O0-~w zlARC&0tncg7f5`W)>Ju8I4<*{Gc+{ebx$0uIx1V!9aL18=O> zlDR^?+5+9>M8qkFS$W^|LdT(BNE)uky|_>P;B{}E{q_%kdjb%j6BZhxA;c|QlgJgW zQIj4mWzBp)34?)~;au=7fig-GBq5lX?L4SFD==D0ick&ZJ%oFaa_1z5)IiiM{FKza z*1B5EaTn;zX%6)(k5E5@9M=`r8?xA_*Vp9G)Cl-EnBEW1{zfuur@BMk&ZAMA=BI@RF&l zTMH#X|1~Jp15__f0g=G(Ll?^1;VCh!I~{UrDX;wHfB7?T$BwbUQ2EeI)?~A=)G}6a zYYj@Fw#tY1a|&uagm`rj37;{{gu{)_W-MqXNJVf&&6FEgF*V1B8J*6!)+HS{^*fQ~ zpa^+d4asba+|x$7;ElVLa$&PNwhC6Rksq_I6GtBT4XCeC#ag{a2Vc9X5UxvfK3LJz zwkjm9UO1>366ZkU7V2AGhseWC8W`~qp-AE*R6Z==uU*yh853ELm|TlNWJltQYdkF+ zqhTxqj4BKD)7l244)h(gd+EL3`cGPfsw|TP@97r92yy7^RZTx=e9?^P;N}6YM#l$h z+6b0!2|T7y^G3 zTA?gEntnW-S*R^)sFpUSOrqCFUnY2pV4pxwQD!rb)Y>vqcXt)u zVf+NeqGql%a$}*Y_Pj1v?RX3MJ%5LGf5)8Lew@5PGrTAB*l_~4t@U-xiK@z0bmrtX zl^WPK;ne3cc73&nKB1QA&?@U*;)0DBA78V3#G7*7dd5OJ_1c54*#?3&3_zYgohHc5i2|`9p_3{k#x&9m;lE z{NFo>ilyv(S+6&^U$(brTQ^?#s&h}!oKxOj9rjNhUOiz|gU$cQZPWO7?2O&rRw*yj ze>^j!r>^!;N%!1wROW;0)z4GAu*Bmq0%UvGE4fR(FbG?-XTD;u+Qo72QnjEq+Lx+I zV)=IqNAv~BlYJ^`OsM^Q!458qn)8->o4S*O9>R^?lfgzem>Oi*=mX^#+;QnuD;?ak z#)ofR5m$0$1Q5zQ*oU2M^QN5$dVA~tlzFZ1@xiISz2*-s_D%6baKv6HAIQ?yd8b_- zUfcW8r9w6J4SQ_I(A?qv@Bdxr4e9-6#{gwInB%E&@2}O_r}_|qAMePlJImM(gvT0C z*+9`9vW$=c^jl^Czwlb;*J-YI{vU!e58+EFy^;7NjG<*qxcHJK-k@GfA?}R)R4isQ zrq?ktnR7edB^{Iu>+YWuKE$j857gRJZHFs3Ic;^8or4|JJf0qg*7tWhQtgiB^?}R_ z#wz#z&popXv4iwD;ICXCJ>lPImB=Pgwr>?~lXj-TUW#s;_P$FlWVh&`mCv@uPj76% zt+#;zI(-jHA(jLq{WdF3;+QKb_j>c-%^iJ-r`ktf8{2wt^k%Uw_B9*-%CX59q}}uO z==CVXg8)~b+F^gY=VN1s|4fyx?i(Bq%HR5!Yi~*%ybVEAQrt6dVk_uSTm1efd>yqMh`e`4Ugqke-ecXY`>Ygck`bJ0`ac{7Wm z0o>kMNrA8*RT_?Iy+I`NmSIQH__t-Km!S?WHOHQSei4i!aq#M)?{lsl>gc4eSobRx zRlM)Io8y!P%Wh-bJRo6rAs2Tmu$-mrF*3aD>@B}CVp(lGorE98Cx6fRoP8W8-G4q; zIO1F=Lm}VDRS&nxtOaI%9smxN>fFx3B?^Owi`AvwxbD49;?^yFYw-^;5z&ujo>3h- z4jOwxAvXE8)tA;^H@Wc!UFz*{bVbLT*d!_oa}TU{T8AFXfbp{sD;>n;ls+z|5r23I zR|6}PCrfF+?8+1Z5F^9)Imnn>7$e7aOJ{hjS*)0c<17TC^n@GWP)JA<_j-EvyBIs^ z@q+`Uq-=wXo6n%f=CD)Gha#&Myb<=5Z7l`$GX&>Qmug8JMtk;X>(D7&!j+ytFa5mO z`;>Z}y|jDucq#3SpN1*K7a_-XO+8p|=Eqwbi_V90jX!a%(5YW7E)NEHiV|ceg6FKD z0Ie})4ag_G;j@|6^x*Pj%lX$Zroa(l80j?LN-f6|x=hF$zZ*&`@(uBVyyrN*%bi;w zE`xkp-V?{(3uI|GScaoAb?aApLZe?KS-P+h{w$rd`wAm^y3kQXb-bS=EOboBqJ`Sh z2#+>TeW`Q$F+g2PiXg2dNr1&iU0kiUd2Csv*jQ;op|IRhSzBZ7BE+ES7j7xNXKD8Y zyrVO)a#)IPqMiLT@A%G=o38j!T9>WTxdYCx{M3YlLVjtlNUYMAzJW#0@I`2B9q(AS zh#NGxGZvb!m795Z2DGspkPP+Ogfa6W%ZO!o8V!J$X~zw}A$7#c-|%Uurwv2)Wi%b*vFS;G~f<`vylx;3P{;hc3E~$csC5XC42;TZRiy4aduH%(;pq zp$M`;SpG>@jErx1_&MHV11HcFxuzldGm53P6hM#sN<2sHThj~8)@ zGa9ZyXl}>N=<@op(dL5;1td6lNN_j=IQ;r2#&UT2i9Xi2d1lN^-*}~TRYOrDnDa}M z*h<}oTll=w7(a&seGWk#T!5*$X+60_*rKSxjGtP(-yC0ty~}q$Jqja+U4T{ONtqUO z9Ae;*c5N_}ACuaXOn*Yk(CB4ch?`u>!ioi+#SNoaI3&AEpdU4P#>V1MzXW7 zkA%|(CSzfHZxu!$FiTEJjD4!Bh@2!Yzq%!)#!4N$%B8G1Jr<^hY2sSGVRq)`vkqpU zbR}5qrCP#iTA^9DCc`i(#A;$Zf7-D}*Bn}dmdZLTBxCbA)o=asr}RxNc$Cm0g0>~E zNO*MI%+awSRMt}vHDkc6swbJMsG46vCU_VvBog#?b;xlDyccH`7%Kq;Gz%PyfACyi zAF`}2Se$EKmCjZ>keJo}!1dAoF`m}&KT0AEFO%V}YuV)i*l~Ac)-TAbgHU1Lte&&P z>@a5B{TQP2#+OUsO+iOKz0?1ZPsszn?t%YbO+g^F{&BPK|0m8OFzJR}%74wB`+tBe ze+GK)zhQFn*TU(07A(GD3_g6}|9~a~i;T{rLw@at-yZzj`4#iPh$Hy&@E;Nz&AEji z{cDT`DmFfTXdD4WJbmz`H4nOT83Boh2jSS$_yzu9k=79{1)W8oE^GSEOOHJK6nx~n z5BEn;{)_Kej6HlLv3&T+NA2OsZ~oN~8_Js7Er{^cOtp}I9(!@>-vT>2>Wr+BOGa)7 zDG0I3f5)UVzHjW2He@$rER`FWQDU`cRl48?61gNPseIzCS$W%;EbTB0av^n`53OxW z-82DXCyPU_^;K(CLTy+po7odN0## zLIjrnPq->H{1=QxYjE8DNB=Nnk1SCw3oJ=n(Wc6{su+ zCs`hz(XpBw()UZJ#OH(CArdbbzd03*h{>IISFSFbLIL& zz_}E`s=8{MKx@e==)*P7kV?Gz)$p$?Xrpb(9~p7lq}3nKJ|;%g zsx?9{oBJqM{9uqrCDgyoBin94Cn<=1!J5lGV>_2Kt*pJNFZG;7Cd-eLzVX~^!QPc}qr`#lh5Ai9L3{1Ph=X1qy&>O-`#5eN7TH@(B_ROXCcH%1##X>Z%N4!9W zCr*+Hpno@M#2|m)ZSFF)U70+@hX@4gBBJ92ci9?TqeRvkg1R89wAMPUiK44-)65!hQ$%^?klK@81*T?@j~I5^NC@hG;fF z$Ag&ZGE>nx%nyhehm=04$2>4OS0h8ZhIR-wV~6e9N#InRI9|It*zIFWdg*z(Q#ZS! z23hg?Pui;6r(D;#H*VpkH+!>FkZI5MwB6&lvo`vk3Cp7SvN!HR8vjg>(f5NlUtc+g z+mK@Tw0t-+S+H9W84Ib6p(n9zQ@N0Og1tiHib`#0BYvCaEw#4I6`1fuNS~tM>JZCU8!|ZzoD37Lu-Z+yY_?X(H`{=c9W_T7ahgDkK*95i1ggofI6| z4cVf>s;OqpkrYI!O@*ShZaI2k&aC~i={xStcYelueQw~ms5V?woLP&IxE=}3@_2a8B?6?E z>=0lUi~tiXc=RaU9nsxczKhqXE(N5+CL%W76^CF?N@D6W4wl&vENjuijeePxh)t1Q zo@TX7SWAra^=%V7wrnf45$oDx1j7!nT3^`4$s`Tsc**Se0Xy#qH{}@HbW6+6TVHbD zt9|)vKTRZ*Z0Lwg&(>w0u_lJ=)*QwaZ5DwsdK5fO%bQ9^5CX-kq57jk*MkWMxk!jo z;CApC>Ql#<X|Cq$V>?7 zUSz@5R$`Hh9J3urd>rcYF#?AAtJjDMK5UNZYdmHdJuJg`!W(cdW<7_bp zLwE$!GS0yO8i3RXz>gqu63-b7D3GEo03u~ZtJ)+4DzanOCM73Mx7lC@1B#QRt0VT9^x9D?o$gWw;~9E+@_7DH_Ec|jcc6s^MDL>NGC zGT$SGIOguEh@``DDPKL7uSP`|dAl|7S!Q3z+rGT5jY}{&Ijjllj;@BS$)|@Ie`x78 z#|>U=!uCF;tc3RD`%vBQarvQ_k0{5G`}e7~+iJH{7#@WlYa5h5fn=(5OZEVr*6wKI zx0#RXOR2S~wjP>lYhu@^5}HoEI2C)1&=P0ClCt)IhFj;k_r{0JJ*BSoACf;nK2_O= ztg<$~X*zg37#l7>zW;P~i65bHm|SeTV}Fc(mlT`V(YxBB>#u`IC!SNEct-i+2x_M$ z+sFo8+n5hMSsD7mxz6tF73;Ka55f>=pZcM{S!vy}$-b^5H2Vy&^-&D7Qa7```7M!=dO2-oJ_cKuhP> z*J=mZ3;l<*bnS|J*{-V?4VaC$4x zL3KT>c)Z%gr)Q!Thx73Jv3bTb46^%fhiVd3AGk`J>n_<3B*=#yK`rpb()i(NQ1ynTo? zmyg<>&Nz7;YV=W3_oLDV#I1)@SF`3OMR|eT-F7B*Ak%M`u?JbNCHhX?237WyxsH7L z%#AF(!KX>=+TI_KqqC>Y`EvLQy=Hd9sC6BTtX*F{Jhu~XKbHNQ#ybBiHlI35X|ILK zkHyYMIyJm>Lw>{jmY4NwR(EnCGpWR2POJV@3Fkh}zO(KYHP*%71iJGSoBgo)r~}x! z$Nm({HU3XA&j%vc*Slp-hF1j;swWlK4=BBjw=<8`{(xLT-M*_dwI%BhU$#rfx%d0G zLKzD&sdVgS5W?dVQ1)Ju%{SFB?5y`*ah7qeH}(!5bsF+b&}?e$s{|WvOXREnK8Tmc zu1Dz>@N2EjRKvsOg6W+mOclr~se3|25j5OF=k(vlmckgrFM`yRPD_P{oknOQ4qS&7JVH?qlpV-2QC| zhzw5OT)vF6LIt{_o5LShkM;KwPuUCQ^<+>A1A1oQ8KU6iWLRe(wU>Cem3MALDb7iQ z*Tu6q=)O@!2Ab^7H(Tiz**hfww=cUmbo;V4ZxPh%(|})B&E7|cPV(_$rP*p849mS1 zQFAx;c~wB4WzOZnVw@$fp*rJ9D|v6W#Xi^vNiM_##eiTmCjB2}LSQ_)DWlx}!kS zpqrLoqprJ2o9~4<7D14(cu!|@Z^&<{WJp=lg0K>#nb&$u)PdP$&EVili5s8YXY}^A z59>d)IlZpyE6?IeS;Aqt@lE)P)I2$}K3?3Dn{7qWSO}cEipMt6f>l()I1_+exA9eZ zmbw=F$NlhOnVex{dK&$!xa5gVansVdDA}Mw_kfb87t;oo2XRto&{n)gC$DvX^c!x0<8{ zgV7=_*YakR*~QKoxV~%ji_ZzUT`1~k0NLBhIvLBq{>D4aIf&7{s*;V3XcT^$GOnnz zC=EXgQ8DHP;(uQ%plXyCy{L-fBgf_$3&{4YT*QS5!-pCJq;J7=%f_@q-o(WBx$U z>rv&qoxVpEOJX5~T)*w_j1s*Y#_@HC@RO!mgf0RX;h$n!wP?d_JNK$G*NUr}m_uac zRfyMxMtZGDMVCQQ+q@XwIc{MNz`(%h8tY{+0O|!dmsPm-TvE1Nhj%!p3;SBry7fx8 z)jxW*6|;s3;80B6rA3kGmNcI?(K|5MFT)h3e(A|JGeQx7z&x{H`ev*|adg6L=41Ry z{5jLdbMvg_vUY~~j4->P7voX5YiL!of8W)fD+RZ0E#@yV8MKh@4S;^xl#Hj%K>m|4 zc+9_m!XGl6Z&tG{4lN2d zu!NBOqMH-BB7|<$1HBg9FSm$R4k8ad0MmB}JQiKp@X6>7{jeCtdJWP|H)c!I31hO`26vGu=W* zcZ2n?S$6Bwos1mm%wp;BMX%=d(qEXmx&ji9RoGzX=`%Nd{9n6)|9_+Gs|$>E^KVzf z{GR~%FTDDd9shs$cmG?c{)%(sEx(k#wWAh@`M(?rGWPo4e7n3STvzJC zwtIy%S1J4RqF}jIY!9Kc#s)zUc-@C|Q3-oz!@};uUet2n5gw7?0{#aVQ!ICobIW_6 z^yYIfAc=X5%Ao11i4Axwe7Hi@hiv?Aallq1ke04Kx%x@@%%5P_h2O$Iw<`Vm2i_y^ zd0};@@~@t+zV)Vf?q9ut;t5;GU;V%STIfoXt#EuMQ?VKwMg==$&0eU(`EMAi2Dnl% z1KqIasTS5%<~>(Ras_!4N6dLAzM@!JX%Q|Ao3(f)7#NfE@G{KErnMlckRFGhYP0pu z3_XkOSINu|$hA^pe0nX^+iBKq0+v*5CoWE)YMwe@GHVi?p0ktc0Np1+lLV&@mGxKC za0VW9sa^%!wQEk%K6=b&w6r!=%eDBtz6crPgw8{!XbAOgP9tHx3VNj1oT$W`PB%Jm zj6m}Dapk4KER?rEyCgpe(Rc(ePJtFV!pLCdF&=r zAZo_W?~jkNL1t*8!D_GsNSuXhT-kwMG#@{s`>dJ`b@WgE*gp^z#-CECJieqfIg<)A zCKF0gc^XNwx-lm9$Ufdf%ckKwrkV55i{pyP;)IrzT`ExyYKx7nj-p+Q48pOHgET2Y zjbEB&2W5YRl~|ICk%l;fvk{x&VF?V94%%@Y+bf?NLBN3}bH4G@I$h3F;gnhxGx_)3 zwK((Gl*1L$TCh&KP z2x61Sf<Wwh*z1bk6$Rm%yVRQw>Qhl7YyumEJQCAjpThr{}wBv)mrcCo_ z@5oIY%dHBvdMY`hm+pUco8+q7!>S#yDt60cY5=Q@BWWxGnFF!#6tNLm2|e`Gdz)qj zn?i|N$_M-b5E&SbP(I52`e)~;8<)J|lOYvbv~*xp&M;d)@7R!sRnrQ@r-6BBuu!N; zXND^Q{?ppB6=ou817eRqK5s56?n{hoVpXbYooHLvx9NusL3@}yWK(yk%X|Zd>~X7=r5BCJ-I+FI;ojOUtTqHwVeA7Y)c0geDReQc!cbT3;YQ5w~5YMG^` zzA>M?DQg~YDOveyUE)1wEF>%Cw+)81CvKQOnxU+Fmg-~j9%r##u1>1wrqn~h9IC#^ zlB!QAMR>^=6@JL<7?qH$pYB=K<7ZR{vH()>N=c56I; z4iT7pM}X-rbzhcok0qHjk87=M=O*8c*+^ffrMt=$b!#(Y*G;9XY`Q{p(C+3w_qEwM zF0`r}adPF5+OJh?g#|I^Hm8g0{%d(cSRNR{}qFvPvy<#I=1~(8Nw#Pb9wMvqdIe1d+ z?9Hnh(gkqej)+kF<20R*D-bQ3V0qS0Dh<^J&?b?-wrtzBoR`Lp(FcI^+VZez~Tv* z75Os&^0pKq2rOXQD!h1e5_U%0YQB?6>3g26Ma z2e-NwNm-OJva58KqCpJ53qmZ5K~!F;i}e(fCkswaHe=>RY7P+^=qz$M6~L-Vx1!Q^ z#=Av5=UCV?XF44T?SiPu0GQwmeT@@y-h|p^mwh9dhut_?$B-rhh8=uC7ZzCrO5y+v zd1FA|daNIvFCgJ8se))H?CxIeSKAw}`7t z(d(-<5jTyvV-i<_s(lGa+Fm5gkbpLI7}!N5IY5cHR%C(|SW*OI$P8ct!%(t%s1%h= zDS{=#W+mUVWI;a9H){c0Tfb$*E2hdPaDjgIy&QA{Yp9;UY?;99A4r3oE)pAleovMN z8{^iK&LnOU0G+0Uv}5!~@XM-*V+e@4Aqr>%x=0IVz!cF2Xe?FmqSH}|zLZUwXrDoz zpCH7$vjQul!*`1d{IAj;CvgAgl}P86&}OR!9KagEV`$w3QT;05?U2Gj2FigyATwD8;G8oncbp0v_cd z7uKyVU~491=+)4-gsLpYW!O%P5*PQ_764l&XfHYqRmA;a%cX3lhR7iB7qO6X#DX&> zc`^z=f(8!SB4J9z21LH5*uc2jaQ3#3}M-$J`EV^b|E6fGvsD@H9h*1cU zy-b}|TO7o_l|wZ06&+R`(jv=%Asgn>>B7bN1L}p#P*@|o=%tJ9Qd8e<_gfT*Dwv&YOCK^@U}R0x zaWqK0=M@E8$Emg^)0t{JDvz*q;)`r!Xe%uw3sE%~9SkBDR}V1+h}X|mQ^^fvY!3BM zszuUrHd>ha8a?xLi6r=v@)Ef z-((JxGJjyfER}QQ74utKGa>7ic^;zhf5mVFB~cA8#Lwl_mZp8iX*V~MC=BpdIH-%wf3 zq`@DWmrt`)CW@MHG-qb7Yr(OX)5|PW(#cb`G}26LmKX__DOM+6WFeAC>9>=5k!T(E z#VNZ?5~Zn7nRN7Z^O&-vhf7*~l5VH*USd5gucPrv664cp6ayaQ?BO);SkT%>J`m6M zRLl{z!#zW8m|VNRNAp8=SYns3~voNdz}LNjY5@a zasq1!9y4EwL$r;(Z#U&P;!tf5qVisH*XS2Jx5bmu3y7H|_b%b5Fs=!`a`G+V_QUYl zzWc+st|RTwM*-DZiXXl!x=~lJrc%kBUyPlECi8{ZSJMa7kseUC<^$p4H$1E4&ldma zZt^(>xZ%~WysnVgfhff()7BIWpr30!p!d`00)g6h3{r2DyR7+|4-jpJZ9NscXnqc2 z=*z^Re1u(q5F$lTld;%(H*rcdDjm_!{Uc?~L2awmI9b+m{}9!-j7*bdw@}&44yU#b z=Kh4SD}yLySoS@1SvxaQC&T5Rm5Sk=+V6smw(yFXD4qJr8#ne<^sV}r-5cdMQ2Fdy zXXk?-mvbZL$IC}+*PFu76Yu+npU%jQKV`tNBWh{ACn>Mz7t$a)d$djPm?-|`aC58s z>fb^BE8pf+Cc996g_53qx>Oj7pC|Yu?&YWHYU5%wvEoA!UoK znFU^9XMnbIHyALtv=_Dz9PeKLMgE=#=c8A<^ADb6hc0ikni&exohe_0PkPhCrhYGb zjmih2qShBeB5M0r($6r9Q@iipm}eI9v<3e8cSG~7hwQK3V(j^gnW)uw2Kg6iQ!WRK z?NZzOQimKNfhK^@bNY}y!!ltRx^%aGi_nM*H%MdNl^a1G&0eRzJKAoWy%m%w{NLM} zTVbD|Ywd5ql-t-z)GqM0Ie9A$fKbm`&8BfhJ5xGAb3X%C>e&_-WE_vJK{os)wxw0&+r09T#p86#70ORDn7VMW%7fsDhTLDFn}U)-Bu|PT@NeNI zbg$Q`JjalB0FEzdv~>=F39x*j9V{GYB23?p9#)Whp<=(zw6IyCsYjJkCFx{=Q^SKi zHn*=}wX~6f_DID?wBOyQs;>b@*ZW_>Bm!`ZGbm}=gTAX4!Y9R-P-gYh2iD+Eu$tK$ zl2JSHD-7pS&!f4Z`fr99t8pVRvYdmT4H7-g{u~hJ2WD8Un4{w+nGFgtA_0I4Gf41m zW(Z_x%?#ulH8e`WP3Y)h{yI)1X5*+)33B_6^jxceztaYT%2<(r9(Oh~u+%v=p*)Mr zv|_^CWoS-TukPCiV{r5!4A~z(;tgL|+b2sET%WL5!Lk4N5o?-#<2EGZ6=+j6m6QlRa1N+`RSR_4IeZdnGLUP`==Rx|<;`(UyRl%-=_`T4_8T zk4uex7CT?`8@+wPOE8F$LcK7IF9c;FHk&HQaLIWV`Sh4t80@c^x1#Kq5kiQyMpaa4 zGHP&|&uwX#Fbz_|HF?Ot1%J-_lVN_tw5nnbSK7+WR*dJY`Fr6rVEECN8(hH}LQzx1 zz9h^sX5*#)z_wSW;Edannsmf^r(SM(&Rq^|SSkV>d>%JthV1~FE6?3rM3_Q=) z6dZW(UVxhe+#=x)vbq&OIXmoM#e#J(9RPRi?PTY{M=U|lg%zpdZ9xoMGJFCxZ6UJc zRIL?`?LxaavHVWo(hGt9Ut$L$v_P)KJ4 zdf)m;I4q92)QM$FVH%Zp_zjeB(F0vHv$M{`lG(9otrmP_7c=+iFKk zZ+fL8-?F2=61pbqZ~0OGFIS-i`u!i2)&CYbUadiS5@j*h*WM~-Ik@WCaWWKo%d!J7 z9roB*tiXe0gD3L-(oV$KVb_hXF_7cjn|QGnfAcMO?AL3r;e+)faTgwqaNa2^_QWV$>0L^neP_4R1q*9T|3s zpd|==_^?wd3sAiSP7Gei^Tkn4St+m(xxdlH12%t4~!91%N z$5kr}J+3evOeaxP72KOS)OJKQQAU>K%^1=c!Gxi;v5)I`L61l@!lfB%`0`YpZNg?> z!!SyU`VlT*JL^GPO=T4!N-OS6NPvli;-h1y;dzf%8?Z|gde@W{jQfQB$s5{}$ml1& zs${u(jY<)59*!VUaZ!eWuI4H=F(F3qtgzMTkqjFfVAYL?w!p`wXDP~bN{y1u;5?F$ zXux;Yk~ds-AWI_5j!@b_uxk`UzQftY&aJek%odqxl?G@_Tcs*hK?E|`J5N|tx3Ev@JLY$8!` zu$_bq?H0EwICeo7ZRps{w9O$RuQ-6UG$JLSE}OFK9>*zaAY7wmTUYH2Xqw#$zFu~8 z^cX&)DOne*q^fj}zSyKk%(12Z?J6_PxNnS%O62oT3tMXtsRfiC7n)|aS?!9lK?KSa zVbQB8$QCty6F2id11kKK7IM*3@)%SR+tlExP>wPUsxZMs?+zcEh!}-sT0-7wnl4g-*CA@6mD%ysYF0-muwvy8tt9BmO z^`*dZwNWp-NI;g7D=jR3e1E?D>_6Pf3jK-8&fo>tbJ z7?gKHbQrCf%i5yWBd0Z(6faWUMjb;`{v@O5PGOQ!VN_8@6Rzksn9>|%5c%VIHnCrL z0D{;-=P7d~lNGHRC$FF~D)Oi8>wqTlwl)|A?%tt9h>yE*^F36ZAt8`OKyWB>wHeLQFquq$D6GL!!O*3! z;}F#j7tF#i7ES8inKUhD zn?B`rcmr!>uwI2qZ4T&x|$&pju~Uq}L7HicT9)t$r8R*sYeW zEjMLcjkCbbLcmE86${6#Y)eQ)$>Q!P;Nn?^56z_ORG_r01S_ekZ90;HD=H{4=@3ID zMFT4WTqS|-k&=VU)-1Cvj3MZKt2Pb~Go&T#6BP^;TwFvLHGLwF$j8;Y|5!sJldvSK zK@?|&cOapp0S#Og!Yk2Lj z8I=feuoc5`iSmXeC498dog0-l08ql_B0y9JvRb}9vmU+@Q~AIC-Wmh0Luy1sL!nhj z6^LH+RL!}VXrN1qigA-3aT;*dxrwj_A_|SjBgQcdumD8FIGd%-dR_7wNHDC5Nh~|y z%Y&s;shdk<5LHB1i#6#b+i3R>KEkV3`@X)S`>Yz6OJOzimwEcaiFpzMWchHYUTjFPiR& zjY6$t=B+5^TZp6#rTaKxv640sq9lNak?SY#i}(XR1h(J;BLtox5`g&tWw06%MsJg9>pAIvB>WtcEfM8`yY zXk6mRrNML(}Y)i5qK({f#}+QKpfXLF|IdYG{_OEjjvmQkrXI zQ_=N|eVDOEvmrss3;H}0Hnh-~LdjIj$ncriH1V~XL@ZZeMif~tYeOjr-*wuTT(y3;78OVZD6$$iH*>*!`3_O zqse$HRR-n)X{M;t=MhDBjsDP3zN!16<@Hl5k5D+?%8xUi7eB*XsK#q)_B%;?eNEqY zQ@lMLZ;!utBb0yRsB&G)f7bk@_R>hplC{+t%4q9t7JFR35keTcX+$fV59<&2v+>^i zCiBL==U?Of`)0@?o|6Y1JBRHkGP*&GJzo!A2Qa3d%z1(i@ElT-ff_uQkKQzlJBG00 zJjk3`dOnWdsLqiB(^-LeKbfMekd8<(>{erhnFr&NUhj>o^We}d)c;_YD!f|Z%QxOBi}c1utVHq=YeyTE@(D>~B}-*FUR zHl^EYV}lLa69X#$r@rS1FXaMPsQfhz{e!gI&Qjh=nI;|AjPiMHV8H`NX zl%9*$I3Tc`2Rcud^jIqeBdmb76=ZtI!AUm5Xj*FzF6gC7E>s%ryX`Y_pa>i%_klYC zxr@NU=kWXB;Z%iMHNGadE9ITlhb$kSyT9{{d8k;=)nC?&U((NyUNcQ$>C5iCmBuA% zGvB8USjjVYy~EmyJtlTwfqq?v*9FqoU_SB>u_(00^)E2up4d(B%n7w&opRz&*<6$i zEzo6k-MaRdJu&(z`Mq>q<{W$q>Oa?FUMs>Eo%bJy#Ma#XNAJeT{Ln+PTC4%zr|({U z32lVl`=z0fbnc!La-kRMP8BdvK<&aop6dgyv~~tbu6NgaIovFMwzEhoJG6N@aE)8d zxlljf9wVXMFXenk!p&BsOh0cm@5_+f6KkM}-7)KjO~Yl>+7#?wgcgnduVWaQ{TAC| z-m(McFd=mzDsAPtHqg4>;P@bKU&c@>^fj~h={fXhQQJBK!*db78oSwgV)U~ORPe5e z){YY>k>s*&c;`?V@)dpz4w)M?5stV7-E#dD6u5g1g1i!xh#fd^(hum#loo8C>GL%QMh?YjX~0nvw$~6?l~eBbr_Kh>j1{U!9N~OO1#gP z%wEr#&2jhK&vH4)y@yU(h2Hzw0)x}gKce3sfk(^yzQU=xI>*3#lXF2e##}M?oVlwa zR3NZwLqG^{yg6!=n9z9Ndc9Wsz8AKs@9qrmJayua;5gI&%T{K~3+&=(c6SPv*Y(|f ztAc2M)Qg$4e}y0(@eyk896j;xgBbAj7b$Wkegrlw*7M<=p3h0+PAIQ`oWpti6Gn2O z5miia1wPe>N!2TYDwDo@gAn=4NElJI`w#X853}4abGbWV5?*?#^WBfMQ5;n60=vIZ^hEYR$?MdKHOh?sxv^6@3`UI5@<`~kjhR6osE0r2`MJn-IS{ZmKgAJNb7 z;nuh6HNFkDJBDS?=;I2(*VRIc*W__eOnsfncmAsODB{XP*CZC%t?eg9WI_59@L_e|WjQu6Alr(bD9)Yg;CzjvgSZQPV zU8S~YyTAFLx0ibR`!Vxv=aAq03ca&C>Dtry7ke6!hIUkw^Q^*u^*{6aoD%dIlN6A7 zf(vy(>bgz*aF27bvI$sli=D0{ zeS`Vl>7T(fLN%u{qs+?XGm)dXT!e^&fPmDwWx ztfEe-E!;(2E`Ju~6>g`Nj;d=wM2v&|=si+S?8P1q8+)Ig3ecq#xn2L)YDPFGGFY5|v9PiM31-M#m?KIxD|OM1o0Wf*KHx*1%1K&01|zcNg_8 z)&T^_thEr47i-6gg8`b_F6lVLKT+Shl3FIcJV*H~!1cf=MDsh~8^1s(dlT-N>Lx z$f2NYj}1d_7m|=XZ_Q#nbxTc5gr9`p=C?W6j;Jf#4U}C-nE5<;zw9}}l5T9gNyxFf zEuz_n#3l(G&4MrOA``|WoS#{Bh#y*FPV$C+F%P)zAuio$N$crFHEy-317_k{U$S5t z2T}RYO_Ve{?jW}EMdcYK2#MQ(8E?~UxY4xS zp+mRWt47S!yMuN~jbG;MWqwVUb*)P(N1=GyPDrA2?V3S&fI@m)bF`<=lt ziP81Z7GFl+r(3?7Gq_w6Bla`gwxKG3jxIkwr5%bUt#4~qX!PSf=8oy#W}&u3P1@?j z)m{0fi#nv7m8V6vHJD(nnTo8`hcgTEGScH)4(M$%QrkiAH|sB&8Y`(?vZ;#S3L3`& zzyeE6wF~NGDh?Bmgl8j?m3r7RRPB-;ZKx5yn#i7{HHT%T(D7uJ)c_k?Xc~$~=u|Yl zd#(+-6Ey4ygzO!&R*FV}pZ{>iPZXD5PF z=&m}U@J5Q*66x@DNhsJC&+B-e;TD#rnB@X_U++W`RD|14O#+<@V|GKpMdV4Zd2tWB zO0hoyvvpk-F>ir--H_rwH#w|Jc@8LoQj`NGNVg;)bv~B&TaZ555#PtYb`OTDn_dd# zt+uuHF#xvMFm;znM6y!G%`sWDo*C9L574S)sJ=AB876NMk1~;W90wVtwhiz~MdO$T z{v%Ww_Rr|dOhi=1L7fn+6;L0Lnxk`?38X$I4)B_lAALsI23C-GgR(V&TZozcGYBr- zvdQ@)zkn3B;OY>_0@ke9LZd6WU`KEmMlPHfC8pnoqlhi7-g!W#p&I0Q%ZW+^7!Wl| zA|lb07`))|i1MiEH$C+s76sYAXt0IH>Y&=iZzk28da$Ys28eI!DuSwm4M}l!k}yT>*^VFEQf;iu)Vu7FcUs7Cw<6?juu+4|;x*-p!l zX{*8*yk4<O9i0B1hv0ww;WKvXuqSLiWz#=|3;zN2Gaol1)?*_bhkjW56 zF#LIx82v#FYX+0&RzND)-l>D1w&BjFutgT&w{owOD0;{*D6pnsMCby>MX=I`+9>8N8&vd5vPZ8i#}Ry@ z<33w+wHIBvq%UcU7SzHBMcn;)fNRR;21v<$>o+H@G&Xi zE9^IX^*F$~z%hde1CwKePC!HAiy%xeEl%?JiabNO(5U)x7z4D*C8lxc#YNk!`Znf0 z9rbs0Q3GkmKmT{``FC+!e7_{f+#nVcjSED!Vqy^j@wkYayW!_Kzh$}VqZ-Jw-|*p0 z1;NM@gxa$y-LlqWlpvC0LOA^bP`fYCIOw==Z3*0>R~z(d&5^3^UJlv7gq}};@6tv; zZe#-Hy*zc@h;}2feV_|F7gg#(Sh~hVL16VZ)$k)V09Q?nU^-?Ky1l^@ha+B7H5F-4 z7dVmiK}(^*Nn~q8ITaD4fFR!R!CH{mo(s8`0|Jw9(+{H$V@=)14VU|>l3|VdF!3>W zu}zOv91JK^HLvYHB`D)XguQbfs^=k}VK2*;8zjC|K}DBa@ucVlZ8KTXY{Xz_A3?S{)#)Pe1bide$Ro6?!~SVeeg<0&xdJ0q`%5TL}{AV z_;$AR5}A(YuFRI)&q6tDYVz5QTEH*!)5!}L2N_vkBXoSK={9rlfsy!|O)!thIMQaS ze|E3^45g-MgF(dh3C3o7|M5UwGZ*nYN^i>d@?nX~*`nt??Jnb*dYb zEi3ocr}Fb#HJ1-?&EAmTKC;d%waEL+Ul>tOl4ysyy`;PBVSeX5ztuDxe7x}&s`edr zS|JaYzC~(#=hoUOg)|N8L*x@IcUm?xiO}Pz-&gmR6f9B)%kdYG`jOG?dPsw4JXxO2 zspgu$q^0Hchypf-d+qbDpVo_55KOkQqm2Jq==~Snl)gb3o7CcPT-#x@y>?Bc!LLB5 z8cjz(8O*G${Z!WfoTd{b#Wq8)=CIGommK*eQi_%BrOY9#2FZ^*YsQxIL&x)-&#UR) zLcY{>%-n}s1n#iD&~z~A9AmX9{ddEM;@kBvm)7jy{cSSD%}axjA0KJ@m3Ifsr{9lF zm0JH)3~1SVjDlk_TUnY=t)W{W5gx)Gc269B0{I~+TwMLubNo0F@;-&()7`rfI%wEv zz^?ib=h)ZsOb6;FBB%x>QGJp&LjnzN@zu}F>>tGvVP21`mzWQ*ddPu}I_7YEJEw#) zd3{T+Kbf5;p-V}34hIB3YC<-2caP{9xO&_k`%YclG01nzhoeU?%ViYJ-QBt=h%ESH z50=--;hldUuN_c-&w4Qiw+*m%cuWtEmrmW`CQDy9*D@E(`J&Ko+@l@P^Y`_^1)%uZ zc!}tJzaQ&h+V@uOHJf*?BaeM({d{n%-u`CPWjh9omi(+z{9e<=(b7w~52t6@_R!GZ zrzw)+ABP$rU=XGaAm%2B;@}~>{iD&?X}6eqZylTF;ty%^b9_*%-M89G=akmlw)7(}giuiB1uKn;2$PNT)qzM)dmkv+BVSJj64o^P}8 zP9(mS_76=lDCBp=o90sI_GoC>rVTV9DfqVVS53~&(KZaCT<-yd9MFh6Tj!$Zc1Kez z7rO1Io(lvG%X|T6^e7d>#oIncBx7d~PT4s?+^?X`5eE5=ecJRT&5M=!eWd=MJDaV- z4>xMN`$ku+BwBJCjMdennh*Uic9OluFTmL1HT$xqEG(@-xytrgSv6+iq%jx_i%1?Q z@Q;<|(zwdKy}J5?gW64Q<4!qQvg&_`Qs#7>KxUMmJ33qZ zcI-q-10LHkD5k=v74AEdId|VyW{_uE>weE}Mix|0=!`eN%_H@|rl=XnBXeo4CFU3p z%(2|XP9KWyebN*>ojFQTy3ix<9HsYIuhGl%${ah_`8mtj#gKhq{+{`9^PB(4mn-EU zip8n{{w9_s)ce|@flXnNu#Ds}R9}=%v`AWxnf^*tDhwlZh}mu|4vPC?+=nCiV%DoF z8I9su*XvW(5XRuS(4WD#qt|+0%D81l26ILG-(Qk&j&ftHbgKP=%y`Mvx1f31mTbwK zVUMB&Xu*nV;<@L|=LkAGeBKN3>g8FEgpZO%yM4JiD+#f64z?FJ-Z%&uZ=;0V0VtEn z^%ONQ;Edb8lHNJm`2OM|`RcW3ENPlSDYxrX6oCz|d2+i57+MD7Lps+GAgBJqxAu0(fldqj6eSuW1_e&YgpL zz4ZAgyQYMOkjdbUrZ{2>*OVr2W^#+#4r{&-rXYU=FZ4oX$G+!EjrkjzwnegHJ`57` zNvU2s`QVyd=SfS?{m0JG_4jTxc83H5Lh0Qg*VrK?r1?G%;w#7^Fc$#fFP78>?Zgyg z^E`%eKeL5O1jehlyV_>txr`U|#jxv-8lgK66T~Zotj>vP6 z=P|p7`ObUcl>Lb5Y4R~4&Tpt!`L50x`Hdljr1Cg;%O%@TKk+KW6X*T}176HccRncP zd|S%1K+%ObuF3b~^PL5h7j0($=V4>_emTi^;W5)Dm|@m1`HX1O%;gD98cNe76vkDv z*J1ifoxuTJPo|pWI5kVikk4IEAR$8K!QMDct9$m7bRl0wZnPfiUx_{8aES8ldbf;@ zI7d|L&hnbN+4x)Mvze&TyRmBC_fUjbQbw}`D`!jS#AspL>eQCiBiN+6Ie*yPlSiPW zOS^ta85mQH$5kITUv*2Ss1>1;x@?Q}$q&G*L-x6Qpqd3YSADKMB&pb^0E#BNlG$hTTxbT0C)*xLz%aC0EB;1O2$Dmk3^DgM!CURqGPN zPAcKOje5R(s}P&h;OgNr;#qrqy5p8#b8YbKvhy2d5m&kP5#ZldN%GHs!^^_{7cYyq zi1eFp5ou3Kyedh4+Y#gcMc4d)V_y9W?@iW&u&-k6j=y>fMX!J6twULFuY&0KTk_~l z3}5j+n-~Pr-cjJeTTpw`DvSo_hC|2O66qUx;OR5`a_vUG{;|Z#(7L?$UUMNJ_FqY@ z-#(<@@aXuJLVCgZZ3k>X2xL5xfV~SILLrA`I=0?;?1#J%J6I%BL#+cSBSWzYOug2W zVqi{f1%}+g7(8ALX#+tbAtM_I`65K0d6s9^-RFs$#qI_J`qn`_cdS6?9x+Z$EkU;k&fwx5^)+J%dY2 zD|Mbx;L%8C-RyANC`Y-fN0kH@$5PR0Ye@yh*0QEX0UVaJ&yzSGom7kUKhs@~WXP*b zonS9Yfo++z>YBTDEM{W3QXDyrJ+e83re#3qRE_n4;QPHXG= zpw%_x(5_CYbHBSG?sn=cX4TZCkQRsITHbc6;@C2(ZrPI$jj?mdzy5dwK|fd0;L5Kr z$wV#e&4RS37VNJ@=DypMH8H2pQmsp}lcF_FFM7BM9b@8jmvzz6EV=-7!Vr6MkNEWZyP!Q$xyk=G&4zz7`+QG(?>DXzsY_U)0Si zY93U@2OFYk`GHBLCinC=&09iT>BerFS}Jg2z=Q4)GRhCSqG05sRDgCTl%PuugwevzcR76k!ZwYH~tGtO5zy zqEb+*COj=X9W}SDDw34_pgAhHc$T~eDOefZ$^wJ}zevCchM%e53^jDoL7UbkL@*tdgckQ+E{}H9|DZ87MjuqD6CONe)L<3;xeUn;c*r2vjBY*DGc6i z$v~?WNKOLR?-J1>0#gwQ5M0PMg^pYB*#cGUhXD&Jyy-Z5;$o&)z35Qyk`lxyg!n1O z>Fj28b9giK%u#8UQUgk9t1jR8KRyk<47#|e;8X(sAU}?;*iDEEzUAg1u@oedsq{SL z*DBiXD|sG&I>4pfwsmmjl#Rt^HgFUx(XU6`$pP*MR4$5BW3ragPM6WVBJ0cf0m~ zC++>CVLX`$s!#wMKS<&|R5uy`Nf0eaVK`^(u7}r!1_Tm7t4Y%u+hR8h zkSyzm3B$BA=VXj-HY6&RjtLmDr8CZm0AY@2GqVwCSjlE)CnO9jo|)u?#K2nToZXEH z!^|I>Nl2L1W`1TruK?Q0&hDPwvjqr*(DmchefQ`0-gjTjtJEJqrVk|lbb0Gg=iG%GwJ(^1cy+Xj?ceW;T> zj)(}jp~4-{$Ls}07fY@n4kGfIr1oyjM@1sy=xW|2@uHFTf;TD-C+nh* zlBc29N<_-~DC*p45zGoz>E*7sssVP^2`!W#f8OWglkl+N6abyEPd(ExqiActqu*^{Qo6 zt7x9K*elh-jI7|RnU}55hpc+TuA>F=ZnPEk-nD7l{*Y`F(N|*^ZLgMgUtMd#gnlPV zmgk1^G3yza!rN^}tj74Lmt_i0uSl?SB^u+&zV?G|yB!l8V6=73Hhrh~o%LgND6))< zv=u7eQl0YAF_8$rXlQCA!eyCUe1=!A)NyNg>_C(ksW6H0O7_-gHQg8MtY1Q0B9VsL ztmRq+Xwjq_wS?8Mo76S4Mo(=1xg<e5L_8(hO9M=yn)2l?u#xb}GLj5_7A3-4U#_!rurk-6_7ma)Bw%6As+k5*sHWU|BZD_wPQ z+L)jBR%GK!Iu{$a^XgQ!{Z`sKRXu3`>#sB;0`7OLwU<0umU5u|ZrVO%r#mOz>g>Ly z)V)1VAGTf(1bfX}C%oKQ>*IZUv7fm)=il|V?kRZ0sCT7 zH|RpC|7?3PnfksviMz<^p%r_Ne5_>4hEtuXPl-L}ADgq>rn8ODk~{2=9UzN8*V_n& z?7o_5-zSIdvfOKrR#=VGoOv|UKUQVo9@XlHokXVYTzb*&I@=fPxN+SM62e{jXJcTl zzw1(#>b~~am+XPc%u1R&9?M*pFUyNZmR?<3T1($Jdi=;~Z@j)j)uR<19&?(6XTaW> zhM8z_ERk(^mFjYOa2C>Y^PE!;xCIIqQ3A{{gl7{9#qW0kn2h}j8-Sg(KVruk6i9Alf99HfTb#{(E;+Aep8V_2 z+ed%$^~9sMp7n^_ZX`G@B(pnd;7bdExBv@49mZ@YdgR z<=IzHeRKGm*35_6JT_UAFIQ$_>9;=eaFDdVL#ydW8@wOLiKemt4PE|E7w%<%!rW%zd zvwxUdY_Ht#?3WkDe=kMJzsUj?*h%9oziefOqQ8$M3T- z0{=Mllx^&`>O87!PbR@%C>hR~Js-iXiaC1vy5lDeMk~S!UAH;vnqNXR5d82XR8oG4 zX8N>gT^I{Q*BOz#59%}ay@ow(SJ>BM%~GyewzE$Z>`D%3k1B0cXtgWGYWs+ni**%T zx(U=SS))OcraeJ&Ib)y7A9CT-f1?wl-=w0k*_~dn1dx8>OP1TY_2JLobs8J2OyavI z{ocyxqumyJqhY4@X6(8#&mP@#w$1aRqyLM{#t(_CWAPgPN3AUQV5CLje{{u`zJH$< z#%$OZrA@)YrOdI$QbY9LTDd1|;J&^j{9u0-WcZ0jc3K1-TI}7|?0H%HoAPakVkFNK z=^UU?-6}Sf@_KhHS7^lRdvrm%Ng&f~EYcynAF)q-TQH~NluMUI zLp1%zrLo@-Hv^1Q$eY#N@Rk(kmHiS7SLnKI(VYV*3)q(m^BE?q*#cvZ-@E{xAxDAc z?Nfg~9bHPk^w7*RD)E}VWYAPAMlGq5X*XyuTv$r(`s+{s;%HzcmV^UujafErTCOJ= zPVAvyG7I!o#7@%K^EaAeL9P;W$LsNUk_#|-%mwA7=L9{5kBF?T7V2v=cC67x)}DD3 zs1n4pM7QP{3av)ROGjg`e_f<&!5M&MkAd#P|MS`k`H~oYCbw*Rr~a_bIyLNOYB$pM z=%LOkHQN+vjF`bXV}P?4%&+_JeCWVfXK!UDPruKZ=0}j8Cw+pRCz8}?JnZHQ{aM?J z<@|rpUQvyEqEMLn<}-Wjv@0T6N}k7bWZb!8QGV-1|M<3N#|BCzSo{$>BtQBQn_fAZ zbODXIZT4vdxI7B9Z#MSxPQ9w9O%~;v!yVY6aOTufFl`Ml+nigN05kvY$2C87ZV3)8 zgKTo^)$tV2)EGeJ%awimg1cY*!)&6(J9WVkwV5X$>*YtLQ{|iMV;32;y{mC;G7)nZ zdgW3iTWp;6^m(94mP&Qob+-oMqa!-DUq|({? z9N6}WzZaxObuNCrMv1!FsE}P2b>t7c99^c10Yx#*59Nv}>hU%8!J~dZtK5gVZD|@j zc^pyyV=sF5KmX_K$5roj+npYBH97%+IQJo3G8K8Wpf6c_Ss0lsnSk4472Csj+mQp+ zsCO{P+Rv#(VtDuU))_~R)n)=aolEQ?5#=Oj)0L^TEasxMhWV!xGipASU3pa)r*4?S z;Ruc3>WYo&$|{)ZK|)Gh^QaJxbX8R%O$s3&`{J9woQ)>v(ZSX)A_^Nin8Votn&i=t z*`fehu3|AUhzqs`pOD$}vATAU-gvFg%Kl(75hbEbni7*&t=;Jw$qyXUiwbXvx?rAD zszjvC=c6*hm7_A7c%vM_I^HZ_SY*8es|F;{iTL&3`e26%S}}YfvHqYY7?hEA4zKTE zr+@YTgq@nI-t9)f{F3^s|2Nnv+2*6m-w&&A0XX^hzwM4}KvYv$9G3Au_E)Bg_y3}^ z!~?i5B z{^oJ_(cfyj?G;k;$je^jaN}^aQQ@nL8rtNlG$Tr<`^z?A0GqHyjBB6Bc=e?l^EWFQ zDHD~1c!ln|U?8vA=cB@#$ zLX72{#G?`Vac1cGJbnJmN^RJ_x5v8Zq|UWURQpn-9XGr&9&v3}M<)o|2nA@XIY&&( zLi9-Faht`i^f%S>KnlIo;Wc}3`tD6yquL8u?c`6TBaJ2)YKyXNxijXujYn|gTz!e2 z<8(>|3~>p=D72$sP#;RHy2DadZn%}{txtY0LJ6qt)y4I6v@{*f#wuBROk~U?$%vCC zoIX&E8NwbZe!Nskk9JB~yGS|maFw}i^YSsXsa#`R*K9dm76t{-jB4hka(|s(bt#8+ z_?#^StI;&q5zW{)=Y1&ge|*LlL$(OW6I3f?c1YbSAMW>dQM`;=1*kYs(+5fSz%IW=36#B|&Gs40p}O zb3|p4$e?+d)Mnxr878f4B?VY%VYrfVBGA$7Zkru@q5x4B;#8ZNk?~oicBF;|qc=o^ z22}ikViX4~CE}Ucf#^1`S4pvX8jBt@O}?wv?(?b^qp68!v!5H!`rrSJfkINh0oIc| zm1HBwc^kY+5Hz{kKJ7*1`5VOP5wm2U-MEAu2Wp<)#s0OWdQGDEKY&&_?C1nm(4f#1efm8DTs!6Cd0< z_Mhmk=w56UmA0za*Lc`|)l;>#ny`uqm{LUShJ1ATd|AP>yDK6RVP}ccRK!P8U>R>W z#VGUb(}{>~!vW-lY4vzPR3rsm)uil}Fv1ImzQ4BXp1l>aJJ$1(yKqs^4pf>Q66nYKkNPWo3~ zH-BgBonYQ=NC@`?$_`%!Ow0@%IH1M~2f!`VkcK*vnV|qI3-*KfeTZ|iF*%I@u;mmS zJ5327+RWf5hKzTwt}|%E$sC*y0B2I}zzqCkeCffcr{Fspl+eS6y5FB`!fCnRhG&c|buZMcO2jiYaCs)5!2NZ60)M-Kjixo3Fn&~4}c46}UTXybVwINT5X{()ad`oo)ng7Ua1d*-zb7KwBK<_mF~OI=nVK3k}Z=OiKgB8$}{7zG*(=Z#7FsB3b5!4XSJW$qbS|(_CDo<`|%4rZS(??Z9eTyTV=+fuc?gS-f!1-N0j+AtX6FJrfld8FJ?sj`D?Xw zT=41lwm$`s7K%X`4&%y~c0-n#-I2CiZ~g*v?M+8VYeplWIUS&4bMT^?wZ-6l7eg~xPUfGo2=-Q8;+t2@OQPkY?PqP=D;k}dOs z@L2y})i}K_-x`m!EdahH?sZa0FfF_-k8-iN=< zMugeTL7N*?>ewg;lA4{;jk@9ft8MW}C6@rl{8t};FmEJIc^@-zk^bG`%=6lG=Z5st zhCXK69!xSBW=_t#iidyT&*9wv&6Dr`mnV(gjWnZ0vSt*KPHuI*#?+cAG7LAG_>zQ6 z-Zo>uZl1vm&@K?#Sg*t)Kl{7<*#$MM{m;&?z?-k7Q3#R$bvA1#dL3Ob?cE{(hd2j$ zWpmdNv$cgG>of$3I0TE_Is9-sI{Y7M>{DUXH^XU;MzXi8>Vr=|a4C(${?FHb;M2(6 zFPt@$)Xh<5{DEYI#4*bFZwN-@J7zGv`6Y86V#L5s3)RNDASA%(mhk+a$=A>Ba<@Fj zM;`x~V>-&Hw-5YV^9!~644h+{?%y(I68IrchNl5hKR681{qv(%`N+!O3E5hEjD%TF zSZ|A75uO37n&+8L?X?;f;;?Y8r#Z)cxGs(_#xoPUQ5$U{+7_*(T|ahEwc*KV%~gEV zrW1I{sK~i=q&xs)=O>ZgV;!vuT=@C^2g5pEd+r%`WcUZtjsI+1R5om1(z@|rU~kKLmAY20Z4Ybz zzK649*APh0$Z6%UQ(?wlkx>M-9$Bp`NrggJ=CeBT3^s1T&PVEp(p={L{IkOt?lyB7 zdO5u12R<`N3)vQabV#Zn{?^}e{n_%(RG;pQdk1xG_{ginyDNWqfnBa^ZMSD{h`otS zf~AT5w?w%SMwl(@gMRxIlg@9&j&PG2wgt#-!yf1rNpwc2;SS7YlWwtwL4S1W7mlwt1Oxh_*L zDLG%(J?7l||9uTMfl+D=W3vsjB2pi->TMdE9uf_Y3ayDwwAOIDeHgEPzcnXXBaAit1DMeey&DuD^>@ z>f+OtN`)2=3%$(?qDM^GTZM8reH6N7N9xdoH&Rw7Rg$ZpR~>GSu@tp8;I#=M?hXGL z(pRa?{9tzNjg7g<&a;lfgYV7(Qx^ayE3c*BoJ{{( z=WRQ-$F@@5Rgn=*_5yX8S{5|wCl?Z5WANLo8`hrsLsq86rqBW7wx_Y-tSFrK1c#Uk%hyRgI zWLhXNB=OYWwIH5dF5UM;i*C^$)x&ZbE{G4twKg!=0}eq)x}r`M)dA<^L~cE`&RScX zd%9qmR~NC2%?67-l$6_UPclGf|bw zdLqWNy)1K??PG%`!b%vr^_sZc-jcCfuZowx?Jbu!?ZseEsb_ z%(Ol9h}*7Xesx~mlLK4zTrLl&{> z;r8AZyJ^W8TJc(!Qc{lilcLW(riTLU_i5E{1{2v~k%LOKZ@TLeT|k*?()p@7rZ4)m z!5$^|9C%)Tg$nHEZB25y_h7k4{8Y(q(LK=}bo&RD?Cg`?i<*i2lw+%S$hA{!BG?vv z>yLJayFI*?PP2Jp#qMQ;Hp_5&cDx`B$q>O@+=I;rypZNsEn244H?>z5yl0c&^@hrg zUF+VuW3Os|N;@?-B%$_j5{wwuWzbx1q|I4Z&Xk_?Un-W#6eur}bB)@77BMN`mM3J7 zTavC6JsKMki1D&JzOL8ZqVypG57&+CIyxQwi|;>B9S!M~biGuwLZ)sARKZzs+b-M1 zY!SioJhWa;PdRKZ-4<=06J3?L-WJ(ZS+%ULrE-0BF*xQ9yGC2gRRwE6sE?=#(FotaE`xkqlMVk4@Mdfd;Q zWC@e+`ik5%!|4zCJQ9-L%X<^>dUS1`2W$beZvM8-eh8 zt*$w%{#)XXr)eP_YP{$XOHc`B#zTmpwqZKmXs3B5Gn{S8+b+w+0ECi4f_^)yX*W{ z#$Fg}aaeUc(W3Qn7m=hvdZ4j2c_Ve^IXl$P6Yr=4^SJ1KQH})jx-`D!>zk?%vef;| z+FZ8TrHStz`BPcw?mMvIZn$5S$IF9j6N~z=@17~9dfX{9t&UsT9?h3o8waLv(^8c+ zYfA|FVBZjFC*|=o#p9VNGz*M2=&fs0!&g6NS?Lx^N8}x6)jKXuH+D@1xg~$FsMX_o za25LG;-eT?b7bdKXHn*rIuL(uJrxAc-PcguO{S2ZV@_@rh;OaQj3KG(2m+!znWtp}so$^uSS*EO+-Bh^yw+H`(oZ+R?B;Q!nf zcSLQu+DAZ(`ZN>2%~&C!5i2E&GC8U2_0+ufl6`&;OrE4zox9IF%>o@L7GxUBBM!+! zg##s*QVh9PF6++C^0Gp!U}v9(&5T>*9dnMMBBt;CtIwG?sIYx?*?vWxpP+z?kw?6&nQ;Ig@k6_+a1@(fTK3$3GSNEa-7Af!&L;bU{4pBT_6J7T!Y72I zZmY%BP+VQq$3nsF*Ul=;!-Qy8M2TS97VDeE;^dPHxwfTLIX}Fi7JZ+4Ea{;da}jzO z8Vn)vk&P%~h$e~Rv{efh2BvjUraVMa?zgvuOC1LTHM3_f^Kt>^EHN#rRVh$b<-BTh z@2EREmecckFfeRPzK|<+5m=M?_JOy59t5lGI(|APW1I z{Cs(<3=6SE#X&W+mO@gyb^DY$r{4EfI|>K_w?)Al?8IN5pbjcKOSzDtZI`?zWGIGv z1%CG)g_B|!!%&2=4?bP|M*?_**K|hv=-iUep9qoSA?8iWAP}WwUXRl$hZS47Y8LXCfca$Xgypf+p6c6 z95r#@@!67SJ2 zlL*aG*UiSV8%L_Q`Lfu@cDR4mu_5oICgdU2U&d#c_YdkI=Whhzv_q3R68O!x|7T-w zcmX#3aA-+o+|@1_`=Ko%{YGJf@q3{#n(24&0^2Io#_u9 zmPnqs;g0xy#xu!Z}mSDp%E#}{K*CQ{X!SwnG))T zzyJ}XmF(11GF055=Z})X0mZ(ZW`URz(W4voL(e{(?wa%Jm*f+Tn^+NFFSDcvonowP zI1Q0bGjtfjO~M)d>p>9sfjj6d>5jlRQg5WG7KUk|`rdR`;r;iG3;upt9Z#iJCtmOe z^_(6FaBz5phqoMf9vt!8|I;rs2^jtC?~1i;v$Mx;wJ|wZ{{;fD6Jy3PgqCqwU&s3` z7pHbX)K|YF5?$5GhQrR`SAzWxb6~Wa7p_MdUgr&lri_wC8|`p5L+^0S*Kws>Z#QG+J9bqpF+zKQ-tqL z2xQ#&dz1gAF3(HUW(H5aIscUmTAKbXV-{1umds#yNcpy2Wc*Q^vfrjh*!K5w=IB!K z$=a1viyHFBom^jVQ`c5QDKNIy@OMamysgu2C+pefm0w#AbUEm7Uv%+eT*IF^XPcBZ zLx&%3k@=e(T6BkAdg+Qg?DLkvG3Ab{M)Qg$NVgBa1*TW4)s^ff;$ft=i=i@7qOlFN zl@$AFOG^NO@?Z!%Y~L6?vcG=KI&0nN&Aedk^Y%D-!yLFH2 zz&9xBnzQRg-i?qW1zVv(9*mt$Wty+q_igp$`vut}s~f2$xBsi|A)Q;*XEwFQmB(u` zafJPuzhoctFsh#!OS~rjk^G^3O`zs!;JR1TV@6$~BHOqh;2vi7@rck#V!{5fkj+=< z?{T&?TWVUjwu0nSD%Q_iqUiGj=*%L%gBf-tFR(6)`nvM{Vvx`C;q%%(0Ds5B(EI13 z?qyG$ExXVowleZi`A~UcL-qx!4Hf8Nr>OG&NuG~#3g!B2-@_F`pi_WF1vaTm;Y_7& zh*le$dWZ!O!i0qwB%?4;EyNRxvgup6 z3dbzSXbr6@w?F>09(UqroU&`Yw_KkyumeYg*vU1yENeBlhOzaDFp1L&NX;D=dqH=j zzHON0Uc<*oMxYO8Ze5rYGwDeYt*XuDD&cqs>^kJJd4~*hL{PiM9oKG-zzB z08^EYdoSpLf_wo}(?e}iQ z^;@pM=9Onu@pPh8edE>4u6z2cWg{590KyUEZQ zW*D&l+;t(UU&R+$m#B`UTU5`jyX!hW7{};F7)GNTDiC2phfLSy%%RB_3I{Vi?j5+&7+<`xYbUs`y z_l_>6hSvR}I!})c|F(~dVA!uTW4``F1H_P!71;pE?ak; zJB^Fwp%pz~AHp4x>c%IGsCi<}hT01p^%zY(s5erQ3N zIJ(e#^m6ZqW%G{(rXMKFSf0n^vs)?E{#8}_v@Q*~eId)hjb13o|KjrxT(HX5sxRCB z2w2dnX2kT0Aht*!a`zO5%ZkjqV_qGe*XA|GELwe_FV8~pX1CmM3GN+^pCGc$>Nc>=aQd6Y`GtC8H@{_XP1@b#*v)de zC&eptsK-+s)AiDX<2*Z=)JwiM?9^(;yEO`BoBh$|1vyldt~(s?S|i#-Xu*J+ zENl}7t@}58;O1ZGN&ZM~;DTX;Wv(wZ?m%`Q*mTug5JEXdUfvqPmYVU8zVVgG^c$V^ z*MOHTRQn;m8gAQbW0T1l6`pUBQ>R1q?lfAnR((axTGpw(o@yAghBkH4Ii|DohW{O- zHSyQBxrc0F@|v1b1=-<>cD<@t8lHS_!gZ#UjV?g68vlm--oCHg(QW{jYs5{mTebUr zsps`EKe?jYf)Ejg`gVx7ym%g!6Z-FoA0+0|U$dLgn0ssxFCxEKYuSDZ>l!0cM?nxM zOo8P=_+G1l1+zp8O|@QcddjnIX!Qv^z*Q_$f7}n1C5CUC?({=Vmfd7V;j}-k4>(`d z?M2yPSPSihCNaJrpze&5Y%wRhCwk;$`C2*Np*{_>jju_dvD4rXI8_P6 z_TE2vQ~>NvIv8=IW+QT!f`K%aBTV0!nC3;+WVd0OcPd>7k;*!*)= z%!<9qV=g?4c0$#75gV?wO$x8+vS|8|HP_p`YPEQ+C`kWCZa{lCQJ8SD;g)dV4;+|j zcUi?5yG|}Ehj>{W)T87P;$ChCHDi^IIZ`qej|kPjic{XBop)59>aPVM>@%6#Cs2rQttk1&W_S@Eqx8K@u?w3el zZF!<$+Nv~D+IC>kyjZfI zTzs0HDa+*nU#9wW|CBcNnj^0Dj#_zQ0idN;se6W1U7%~Yhy@d_T@`cUkUORa2v}fL zSi3G%M#dGml-VbmjB0G&Y+Sb9FNu89vUo>4=B7+6)Q@7Hr;DU^_%_CuV^nsyfK_WU z{zKQ*C*?7Jz(q)Va18p5s}UdY!WqZ?Yz7Bicx0ae6APIa)WNbmaK9YrL*?gv=us>m z)X%Gf;0;VWz%0_4IJ~xPnG&p1nelGhFi5X(8my{h|R9_$iy-&QYKRR$z)H()L*aan=baKm;d z21nsO;)#V4nlZ+eH|P=fCJWtb?wyr~DdM`hG!$h)FhXu*F)#1Jn8n z%|t41+GKj{SjuC;1-ZDruD91s;f1db{K)H{vumr4!yykNhd zNj~oTwfkBRFEbYm9-XwqI7ziZRM)NZL;9R9y7<3a_?*Sm8C(W#o?{Yrm^pLFw!1FZ z_sAc~+wM=wWtJ^$r0%#^31*Cy6WY zM0QA6!L_U|O6MuHDEkZA$SV?S)G-zZ-+>);>$^ndvgrD8!=}^cHT8kiyx^t>{9y-| z(FiOA=KYyNG8l{61$C60K_6N)C#RUH!6~H>#?ZwHv2J!7XHhwg!E+l@Z^%^{jOape zAaHf(I-+}Ag}OJ=Xd^gI*ZV}*ZIGGv%C{}o=t*Z$PJCBk$n4-P8MW);0`(KzL_7m zNY?@vZyr)?2Ord%Ua~J`5?wz6&HHItCb3J$)d9PfA?56^U=wcpt)d3)>@ecWx4PXO=c z`WS~B=STc!?pTDd^guk{i6ve2FX>=Fe_9X5`;AFQ-D1~l*2IfSNgOy^ARgUz_JuyE z$xXZ7fq5Ut(^vqbZJ)aLp$g>=r>q9+7EnMcnjU38hO~v-jv*?kZ4Cn#8e`rzD-51w zoZ#vem2XKslWu)iKkj})zrduQW{mvDTkTk&2$4Td3qIGnB+W9stgs}05Iha7jnaCc zI@_TCBuWU3odSSexRtqc{-iE|J`Z3sAAlQQ{M0TS_Dc3+Z=7FbgzPI2yGajNt98S! zUUS#9ien%=CL*V6w>@FO{p@vR?XM>fx0pHlBe*zIvRahMF*nQ$gYD{m0w1GEf2I+$ zWdsPpLmkwLdc1KJr8Zc@VL@YFbVeTBwu`OC7X&}|+56PcJLSppit5}*opYVXl$%@j zr&J$d5+q*N48?%$(J$_cSBySkA=cbv`U`1eH)Zy=U5$|oP=hfu#fTr8%~>@7ed|5T z+G7EMRc>34Sk};w8~%yt3hce!-f_~?1+4~%(&x1wH(~%bW~6W$oU}l%U01ccMP16P zBrZEt9pL6#>v`vK+6EZ1Y>)pC(Z#)j-61+npaK1lxg*3JKt+%F$NjezQv_*>dXP)F zY~c5J1bu;^cZLEAW08Pf+LUV&vc}(o{5T-|o23b%kQwT?>#Or#OD^BF=pJ{~Qwjm| z(15NPx4HQP^%3dTL+ilP=mMPd)RbORSkO7Y)0_Zdc3heyF8p!T4m)irN)|e&)cQnG zjf07qxH6<*clFb_gvksU88>d6Jk(Nj`s!E=d!O}wEnTu3yh@D1 z{0M^@GZ|t;H3Zf4F~E=r(rsVG;H`*L`@HM;G3Aztrs9cbjv1VSxTno74g1MJ9JrI(G&G(V@Sm2< zi2!*okx@4SHYlRgBKp*!C{=|syPem6Ej@UZU}ukgnjL!54bg`6v1%E-D{ibJR30pu zF*}&d6|4TNAd%R(FjapgVEK&Kv{}p~2^|;*DAsUj6O9;{gHZ?gR0lBkYD()V9cbU# z)q|-drsKBTJo$50{)dHq1%E>>PUHdMHvkxc^x_?Qa5FTb+L@ zPhBtxi?W?|vg|Q#)yIYlC+ejECPN{FhU?nA>#Q&~XRlR{yC|A|+|cJCgI)_Qt@a8a zxMTXb!QU=1Zu7kpt|jMC(#Z`{^R5s65Ugu6IsHqF3Rug#h$J?GAF{e}F|(~ny2qNA zT>4>&p*wyV8*5G-;VPFY3)LliP)8X4-QRJk_Zv;@?QHNYbR`f=s$@@Z6edN(=U{Fe z*$@&&Y^}H*Ia1FKClq$QR9ndTSH-5I&$>TNx_K~`Wo)$h*O2`IzfjSuKxbvL?5c62 zh2QlV1j2lv$ zby(;Yl}R#Bu}Inwl#ULl#7)*o3_ zUHNhSOUq)z2}tU1GT`HS(16W5!5T`!u*`HHL~lnj3DJ_f4*EhT8{fmRIB4W?R40x( zrZRb&O-Iw&NwoqF#&S$;^u4n_@xHIeixWaCVU!KePmKHzCL0HYPj{U|g8E`cj&R;` zwvsL$6S5l##n(I>cNU-NkZ8NCCjHxuON8X?xny-MKGD43Hf=WE_i#)11}*Yqc+Co0_l3Y(7|rdNjmS_R z?sa=@9nIlx;(kA^+2P!PL^-3OM!c&m6GpP8@e)Wlb$!cz)Mi`yGO@6`Tz=nmlk0dc z>v~g9DYTD4+NXD{`n~_{znJpg%1l%AYja<=Ly(!R8-$AP6)DfyB%@1^FY^M3WAhEG zHPhR0wRhI)x@N_Wk9~6Nlimv=-?ianGy;E2E57qXA@YMDgk;Yy>JEG%vbGrXcQHF7 z0UW!m9fgtwO2XqyP=yugB1Eg+PJPbaNU|@PdZGN>gdPBbBkSwuCjDBmOmKs2jd-^- z+oM*Z&!4B#IG?}Obgi>6+k`)YJUSG6P$N_rD4499IU-Og&P>plpmkA5Q~So=rS-S1 zP3If(cxfnhILIxj<2tuwywyDJRQ!RZoOWx}CdE2oYLkSbK9fY$h)dZAqHFl7twioy zM5VNCaH_Evi+rbQ&Ez_ZG2q!V)3( zj{UhN-zi@$TrFUGy36hFEC0CrV)>k$;AMxnoZxJi@t@3a@L&J*x3 zi_8IOLrM_MGHX@H8I6OVzwK;!xn-VpsrM*7n91(}^M9jZ^4VQon|`V`=`JG@o7$~S z!8A{BM%&-3B+F+C_M(Ywcg)hq#;`Nf*^n&{dv21z+@=3KuRk{o0hQ(NT=t;t>k9K+dHcdPe}iiN#dYeeFK3;N<=#^!nqPvJl?T7=)10 z2k=n{XSPF{=NvLstANF*Nc}XmX2zx-!)BaymK_`|Kw1M}3E&*t?&-LZp|oqm-Arwi zH!-U(_`_73l})e*3d(HOqAc{d`_>P5P{kr4WdDgNS!rR%-CGv!RysBBHn;^dlrR8^ zQ%DrCPE#{dwx<`>kPJ|fEvda;ZY+l+84cp25W=zVNNQHeB}#Gf6oKlxull*7EGgcz zKW@a?FrztK*VI%JE#W1IrPCbe6G@(84 zlzd_`2@^5Ha0mD-nK%(+I;!x^Ci;8Md)8g_TNm9=xZC2ML+_F9G~%|y&2C$bI?Xk? zO3jU%q$ux2w-}rWOw7d?ZG+dCqfN9gu%F~nccEXkhbfcXeOHbbQf6|-Po|P(7?ii- zyDb_S`D-%atSV@DLp1Eh2N#Uh)Y(uvPR`H*DS_*dM##I0{qal$feU_{`h%9qyPo%9 zRL_Pp?>#e8*mB)Eco|h47EQpK_VCckuJ<93MVF4>lQUeT$9Y<1!rM(fA zaSiT3mNPNn4U>w!ZZ(6>w$E8DjC0l-`mRV_^=dE0``^=d^gNtQkvraBsOKTJndgY> zlOlm3q4rI+sf&P4lx*%)s9+F6AJUx4QZ(tWC|42Pt!m^$<9?e`xc3O8cNyt7OB>rt zzs}-4b^=MzkoYx-OF=#(1}4K8PKt561zTwVw78*07 znXdEX!xu80_oUt3*Lh{4^Ga%XGFYED2XEoDpVMnHt!$}>^xUkVL>=FM;s8% zRp+oXUAbye3*sEIZ2XxQz+f9E7Igi6uk_Kv9yQ@QdKKM=f;9x)fvGMk!ehW2IA%)4 zkE#AC?HBxG{)?^|2f;BGEG*TxDesCNt=^J*w(QAnL6S}(iwRF?ex z&O4=R-d9UR6z)JVPc&gX6ypJ-)pqo@Faf3l>@G+Iw+Bz4Pv@p^#$f>1hO-GVABv>& zH{~7Ite&8BiRl4Q!?Pd4LL!%*J!~F-ckRE@R5G6*v)*F0ks?I`C1n!{aG=J78=gOHbx3=M*OU?_1$?c6(6@-$%%^;EKz<}}qDFZrJ zD4$tZ>ts2S8v!a6CK~WSQQB|@?KX1vN1j~jd(vGDj>`_Wd@N-`q;5TaUun_d8pCW9 z3Msw2|Kc@R&uOi$HI;37QP8=J7T2nz2JF4AQF?JB@MgS-X4azi1RQ=3#7Xh6#6e42uw_3Ak*QY)te7#nb@2?4tm24dQr!A=~p(rh?D7 z*o#m`B2AYgWRKE&P#UJ%n$bEADdGJr>niFoUItZwmS)KO zTW7MD_3(K;ZFa{QJI~0WRjS)JoXwN=Pm{q!+&K1>Az>oXvWDd5_zY+|#BXd$duY}@l{DB})x%VcPRon!d z#xsbFJWUZP9TneTVGf}n^FB((JjJ-zEHwsKn&~zMBZ7+4kJIL|wH>OrEn4XpEN6ei zxl*raDi`+@nx^!94NVUdR()`kAU41?hM=l34qTJ!2%h)P6iwEbaSkt7rgRD)pB^}( zy?QmX@Wg>1p;^}?23mT@U}-WML5I$P{P6C)zp46ezWOCtAkqp=TVtTr^~Ok`Zb!XO zB*`wC={JRjkx=71qa;0IRznovbeGk%?A>8CKyt6{j}1Uk64Ia94n}s$)GjKY_SdFr z*Y%Rc;6>1jj87p0Flz|0Z4*``rFkzmN#0H+@B5lFUJT*~eT5$tmK5Io;vz$Y{U!l# zDN$swDbF|&uly+ zp7A&s=>c0%=Yp($ldcU9;t9zYUhnnx}I6s=DdFr&o;@gvnmyCPueLSaf7^GWyPq8@-HOGRJj100k4R=sI%!J!-C%M852~g1+#A8oP-}}eE3zC=Eo&GX}PrrqQ zD`Dp{B4wRrq!}W=7Rl1k9erlpH$8aPsflP~)WPo5Q-o$89auQgc*B!JSAqfkQFYi< zGA`@dsu5EJ+sGHk0Ue{pWz&taidlVN@$Clp|5LC`(_f9BLy(i zBUiP&>zc9aI17=Ic1Vt#DaA^BdEu8MmC9)1%}MdAo%Pho8OEWO+nDTh!-8xmHsk`h z86$|ThC;)Ff+7m*%xUCgQnzjEcEdNuTgDHSRO>nMx#XBP;Ine55B>pTgiKI>M|ufX z-&VRhuiE>xiR>uM3Id!AnGcIKohjDAMcbmJ?2cY#wck$*<(~H16+byyR#T}BgqeGG z5X*MpIcMWuF5YiA`K|n}NG-dY&bni>&~h8x2p3)$=W=aq%O#UO>B2;`1jPJkU8_Xf zD)kid@RnBnY_DpWYJTaO_l~!k+kbKnKMs4Ioi|nzwt@4uDc>1)4_KOtiyy${phP*sTSYS8b`%2+Y20C|6-@y|lsUI9u3RAQhr-5m+z2a{WK7_ zS?e-KXtQ0qMr25Ab@$PKAE`xV@>tNZ#Mf-{TgV@tNLRrkXeq0Hn-Rmap@ZH=92C87 z*%vMAa4**3xVOLITCe-kI@MjlfDdFHP}&!0To8kj?C^OuqkL%`|FU~it!gNqH#sf> zY+g{azMlX!LR3rc?mOzqMZf$)`9L`(d(>kFehQv*-e-ZUi%^G=DJ3Os_x2^}DaDHO zAG}$3r6CQ>wcoDds-RU!{I;%*6;8BBrU(B6y5J7o_B>W1;|@`P)N9?eu3F#7?Q!xd zUtimVB&+~ff>Zeae&aDhc0+7HJp8M6r@0$AhfJz2r74yM75~V)4@Gn_XNu!(j^!~XOkphc^ zZ%ok{?_r8a){4}*GM;U3);J3=TQ4<_iG9Y`E!%s0S>ttFyJx$G-{tn$M>PC$^B!drz_%K`Xq~YW&jsv?XjlU4gAz1M=c9`%NqJmh^|T3 zaJ`uhUWV82H#Wj_F64ZJUK;$M&KOs{M&^--C~%Pmmv8Rs!jYjuHBxL z=^_XdFav2BSFh^ay18pCsdz-)D(#VHop4rq5#dGq=;cScKikv(?ZUV1&6JsyRrLZ{ zg?HQ~UT458jIH)DnI`Vs=L}MJz_ow<7rQC-A|qdUjdljFylmrOvI7r-+@y#z{=RIo zx8Da2$8OzooI!!nhOc0~+qNm729N&aSpAP1mjZxdx5XdPlgTCBzlsS6kyjVSG~*3r zx(?LGtr430rhJAsT63NEQh^Jr=$bItIgkluZwrrfE%veq;-lR;dNNErdu8GUtq!rg zVlx0};d($W1s9{C*&}YmGd>hAboEdEcGfIr``GMnb~dRSfM|3JFkKEL#a?Ts~kXxbQ)L}** zzCag#QSU=XTBk}^OXWs6yrxNjKMs*po)raX*6pE3#1BJ-WaEQ28vYueQ#uc%g22{p zlaHM>Qg?*3%rpt4PJFoEk-LWG$_KUAxodngh#$j8r0OPaln04b7eTuB#D3a1(S+ol z06@-k!X4y0$~I6+Q%pLCl6zD(9;U#Vv3(SSu&erlXp{0hUhmS$p*z+(5Muh{nV^3| znMkD{KiYSpxbdVzieFT$2Oo0mMX>O}Wq(~#v#5PXne`0JXjm?YX0_$fsL@d0@Vax| zXXq)>o$8*LSf_IM7~=dKIKc=GsPVmXC`s0TkmRxd^dR{)USqyRzEusO@M#Le%u;Wx z1Cgv*`D+FeMve*k4S-v-3*RN$OE&@8Z#MjybH(kdnWClQTrQtm*6yY@xBwJ_L&Ndk zWWXf0wO}FPW`Gz6_}J^gyf0ki)8mq{eMp-)A3Z8B*LRO~_xDg1#nNT^zjT*niXt8I ziFj}-6*qc?k$cU8TA)uvSsJ#x^6DI5%j;(40M(9dcofRJk!)~~y&Zj$qXNw)AYTs85@}4WMne zwH&9)whB%31*?TqrnX{2-;moLjJD0fO7xj4)wdXq`q7?E=XGzwSPi}ZppKTc3Z}RK<=aelz_#1K4i^SmBnXEU0P9!>@@#?u1cw#$o0s z@hF8Xd#TG1d+I^QkKVDCie;)y-|;5BKug+itO82*Y2Q%XSnrTeMkSdW0c25}pay6y zMd)fmCa_B#Aw(ggjh>^Fs+|mS=ICYX=ua}N5<4WHyvJ0CL6#H0{zo`JwV992lJPm4X8x;Hg&{H=&RhU7_ZOH@oek~qx~@dM=8AX2%8-9+ zJ!^r`CO%0i{=DbYk||W}SS)`DqXj-^C?5_#GF?NvtWpeurti~0g!D;?mt6c(qZUPP zXt64nXk09b>C^V3Kb4z!mp+`FLt*EqKh#nptu{N#_(KfX%@;E@2Yi z`eH0x;QK}c8!Xh@O+d4@2R7biSJuW>Toan$W@XVUrc!KJRK#r@8#{4{tMgC3?lmt_ zomltcxp|W|^Gsa|is%86H^>%u(k4iBXrBy78EsCDk2B$tL<4ndq=^a&wpm`5 z8I<88?Hj3Yu>86_r@B)I^^pA@VfdQrqkj#}j*uO1xa2j%S2!m2U;K}7xLFDQTKZ7> zE!GmItP&Y37MX^6dG3^+B_J`2 zP={Cb;3`EEC|(E1(;NphT5bbB`O7|fNG+>Aqc>P!P0J$=QC%SabN;sc zkz4sm89=f-m3|>L4Ak|s3kCWeH*O3-cGI(#9W$JJzkMN6tJEsuN%hXW(II%a_d@9A`&jEx@a|Cr8bLAq?a1(`dqKq;!NW{mmw(W>EYHCm=G7JBy|vL%Uvf z*Y%WMhw}HaV0fCjz%+6*KH=r|uFH?`eWZJ`yZD9f@-toU$vfru^oIJX|GXNWSEc8b zHt{fnsa$m!OrrVfzkJB7wx*%ln_HrDHU)-L52{wM+F}$S!bdbFzI)x$=3|a=POM{kE}oSh2xdni66}uyXHDdmpU3e#JiZ#&7-~ zti5k^RQH+Zd8=F@N+#2-dvzsB0z=)OZWSdV1S-=W4Lh6Ez53NvsSpCmf;i5OO_d9o z5E};LV$Z-XpR|9qe4amf4_NE+Xfs30K)BeF(BykiFt ze{k-YCgowAQQ7ReX)c+U#&uoa;oEO>pOo>83fV{mhb>1(ULz8LSz*1Q5Px{fY4h)19Qsg#l$X2PA-&ApS{ul=;84kCi@FN|Ydh zFcCFVqhVHL;PGJ7cI*QOs+N3x*`I+qpV7`2xf4p5-Ov?bIf~g`i;)Gw9O#Qw7q^2= zV5=1pU_|}6!-61LCF3DHM-aqH9{-7ip2E(`xn2orW6b(ciU{_vI0vB-)+*&y7y;xP zow|@X#g9Vdc(HbA&MQrtW8UP*q6GUecfrH(ddba1r`^gLDERith`T$hM1DyxDGj@lea6&3dg-ziN$5^j-GDRX4mg8miR7u2xB*vQchjHVJ%ti zoTA7Yp)~YfFyU`=%THD1=^ha-2Xx9zB(2-y{}!=m%)NZ`+(akoZV)x#gYl1Sd-R64 z>Q``bz+a1>Dz>JVifwWf_+j}?ntBB`8A>|^mE(_0y7fN|D=SFBCvm^MTMriJbeN#vh zo{G4j7VBxa%awGFv^bMY5Z#l4!5YEll{JJho;v;o&VWSiIZ!f^yo)ItV^LCio7Kc* zzl)$mc6(F|N}Ta^$D$tz!9Sd!wj~-pd&l1P#?qy8x*$Studc0eYT~RmkJbn<3=iOO zK5bJ6wX=$)O~5EKL$QM&$T~;N$hM(V?+5M?;E2!5|0z)4NYepdzc+<=Pse3Htb-2J zxBqafVbsCmWeGlRR-7u?JL!G|D3S!uJ}0x=mDh{Zq%LW-W4YWW z1qDM7yT^4fCy9?Cw+aOjMQtuw7E4VZGP_#D-atHYC zrpcyNGRr}EWW}F!z0z`Yy9F-GO2z){kL6jy?Fcwi3~x!)U3CPDI_$Th7&$2N&A6F- zy@2!Ym=1`8g(1qOJ^)e!u4B@t#pJTSt`mpZmX1`BkgZ!nRP6Ah)_NhgD-z{dy@sJB zY&R^7G1OdX4)p!yiA8{je(^eba78csPp(WQp2SC%t@Dep>eyz(2oEHQk4j+6gbEjw zjh8?#Oa9;yD;0`u3b+vup@JlinNamct61FpvbWI+t~z7o+YVp@I9{4dNk3NpTBk;% z&m}tN<6h#R_!6w0bVb~4t8xgEdZa%AnDkowx(e6a=lpo-M&*$H!kWIPgVJQ?NM^Dk zOyiA^vxz02IQTIRfoKEK66pajVbV!TnlZ#TPVDz@Xcd{+OJ-sxWFGhkcC@XEfu$hACj8$peyanzB_cK5j0CnnQ&(vl%&Z1McVcDs4WL%wjPY(GL&vBrqO4FfjveSbq4=5>LKdMP@fmst+!1pu>C7JW3gV)}gda{yNLu_gYf@xmP{m;~mP1 z(Dw~p@79+!(6JR9~p`CG1L?_s(z3z*!7n#jK}7j{#NS{@aPwNS+D_AWO}|*k@4IG4O!U z^j7Q3PW>U^#A?jTe)V}!#Evud%XIn?6-**zN8IITmx=q<4s9Nh1Yrme-7E6Ij$k`B zkJJIMIYLK3;*G&<7TxRn@oh?AqR8myg7~&-x}yVVTtZ9>TJqInTTgycCS}gnt(I92 z3n_2b0iKT^Y;TuWC73G0eQ&XoHL(yLKI>%WonE51-`{xjt9PmY?YLMuUO4UmqT>Mf z>x6V&;X2q}bh>A-aMs*4*rpMeK-5tNCUxjMWPE_%2vN&5pcr5j@;2! z-pvdZ^Wm$`r|D8izJPuS6sh`~GKYiDPCjxM?_&vhu&58~Kost}BFj^7I_LMe=wkoK zY8637xfnz`7Dyp5rZeVg)a70sP-p0(!62HFFJiW$Z{RhF?qF}iOh)a_Umj}KCd4xT zCEN2|Zky{xBQUv4dTM2U>8AH8%nwuo}Ztk|bVjq}4Gp`YKy5?*#w}3||KK7Lp zcbsx@tlVFItIP^QDFNuExG2AUniA7md|$p=2l%&PD9I*QJX;t1QWcStQ|>t zODZg)a-y!gs?tBPGks?QJ@_GIB9wzLKd$(21fcTfR@@I<8ymgiy1^t#hZVuiJXIxGvRm^c@r)+uzrKJ| zVs))L7p>A)rWahACv2lsp=Ubt-jp5R5j=?%B7)S7rco!8&we#tml8!gJNy1A!jb|9 z1QQ~CtSS@uA()#9WO78t7{{dY1gqPapyFavTjx3Nu^%9y!TSeSy~+I)$`{ci%X*il z)-O^g>#G-C_kk-4Px`WeXhO6BM|dtEXPIFAh#~qXP<~)Zt%%vR+I_3LUSC8ciW9S- zc2=f?Lzy0X27sOzzMRY`;b1W8uk@3ls@KEzWaq2MZ~T#1YaLW^d~)**FV2$~84yw^ zp|z-hsmm{0{U&bU=7rqj;~U#w_Z|lG-+9Ou5?W&MBTJm92u7}KopEUyR;yOM^o?Le z+Y0YwyNFqVVnqcv>m?#lp`x|jJ=%S_vgq!pW_Ht=H9(A`7wJvM>nP|MB_>FU%=!-( zBf6=#pK#v)&bb~lGp~UCw?iAGXYGTR9P;>>>4}JP&Pa(){i?aeA-Yq017X1>HoyckUb>xPXdc;0cLsn|9_-Iz3{E zd=n9lVblRD(DF5d2cLItqIKU!&c(HfS0SYUqDXfx^HK~MCauXbSVOk?SDTdY? zMv+b&xnwh>6pgt7Kv=qGm((I&)B=n354lJDw*#+$od5||VIPXno<0}RxZVDn*+Edb zyTI*PSWt1ueFDvj2OBLi&nM<=kSi2XbzH)P?Y)r8ZAAHxKTcH_Z8gq0M|-E!CtP<` zOFlAzLXFI!=7L*^IBNJ)pcMMZ#8mnal9OU6P!yUkxUSElCwcXGrwi;yeZkoSLfzTU zl!VJ_Hzc;R`nJ1GJsW^{Ipi0tIrx;Kw8(E4g5UbhPe!%SCAZm^JiQdKO^s#p!t9+6;XcQ zi6QudYw|FJp^vQT$%^!ysqkKUR!9VEy|QRP>gj%ASrgrBY9X`D4eqMU-i$k31wG{7 z)4|ir3@Z?=^}2o2qr{Au`rlAijIa@)eVqnSG@r$qp+QAlWkAXb!^%k#14&v}NPSxj z=4z`idynEI*jQ0laAmoDXd7#S0HwG`Mn3MeUh^FSmivOjdlkXXq$lveprV3~x->03n&Q-c6{E-`&Q19Uw0JU{p*f@_NL&bjm&dsl5CmQG@8Ytvwi5KU90m_25 z;TmB_5i6XtRPMBzSckVAv(>{r@J?Vq9|YPtqut$Hx~xF>tGQ64m4W4$+~86DZ5rcg z5=U_Z4|y^jiRoE2E8d#(TjPa}33cQ-Kk+615P<|}l6;c!ui8myh@jrs=*LcJcJemS z=&N|!c6*_U6TnxAk-+NitI7c?=Fl`9zzN8`6Ha1%2SKRv2!dUt7k`i+>d2^Dj{Z6j zP)(!DUO6p61JdON<)>B-#-S_E4#mvef$m4t4%M%m+Zp#M-z`jLS|M13Og?5GnVb7gkN~BeK(LF$cfeF?K!)k@d#O<1)}e)*+D)d21LRv zcpN`A7cJtCWBQSkgls!Oz4RP2r?cvo4(xbUqh|Z{ew7KV4s^UL+oip#U+Ko{p zjs-*_K&T7^=(B1Atj52A}27sQesAlYQ;TQEnqwwLXV{35t9 zjC~DvNt8{TgLTS~OsJ8+rVmsLRGRn`Rmd5I!ZD2NLeto!2eevf>uRjh@Y4dvwW_Y^ z+iqr9xiA7;$H}p70ZK?s>=Wwa$bkc92D^?rj;zVTFFPcO%zpO?`nkKqK3^`NJ1+@p zEe0&y%y!0l8)2-|uHW;#c5lU-W1W#8NbvG?d#DwiI)_aSHkOeW#Nc3|N|`f;jJzv= z=7>>bvp{2aR37b1WY6pLoa?30pU5g-cmj6;woKmsZN_|sh8<>c0NUr3)HZU*(C9&( zMX5>hN$y1J0&Po3Z?cbt9JLFLi`H2Ac$vItr5C7-ONrBpw89h=sh$x)+eeYvv?w*K z{}mN3Yu|CU@z6c3OUwQ?cSwjG)zPGPsYIo+N=dO~ho(9GjDAli+*I^Xf)0|gKl`U2 zm(tj9?xmhrthr9Y7kJ-Bw%t4Hkl&I99Zk%KMpt6V(n7$rItR?bJG3K>fmji~fSeDP<>bmyY4?u#$K5B&HQs}0vn zQ7&l3dI{3`pS6Y*YKJ>SN7&&Bu2ZUrJG;-Cd(_DbG&AlvJH9Es$=}$~R`s6%#HK@z zl2BJz)k6^}bC}T%00FvoV}|e$KktdmdLVh3189irH zIxubmxGVeZKX5EaL9)$S;s64-a%hS`+UCpVyL1TL^w6Hgp!Co{FRjxy-}4HOgjGDN zIi0e#ghk~Xn%kj?lr*<;wJ(tbN>qiJ(btV_6?TR!u0Vu2qUPn*oygr8i>rs6pfVq*h*N%wCn;VH=%cr8%rc z(tJV>`#|g?bND)XO;XTx#Lj~##0M!BA0W;@zR}#e@vi4=#udT?r*ph3BAlgn_@Q}UZ`y+5j9-I>Ab-9E9!+SW}4B1&^~wQ@JZ91@>B z;DSZXPb85L7@p%(cv2`T|`!ISbvkFit=kT*f@Gz9iPgCx6}+G;v7(vWfo;XQ2_a6 zNy#VnM>JKReKmV};?Z6DX!p|}WG2+`Japk%m(t2i+Vw9bS04pv+J z2j0?&j@U7hEl=31{uDPLzC417ZxWf*yoA&miFBU?23$>OciNxP8-UW~kl~XAfaD$= zR+MW(Po16JtKB!9FXyf)V1b!ceK(_?!hasFl2$!O3`PzYW(^%Sk+lB%UJwDvmbsU* zFA2;gn}wRrIGdT9(O^4ildq6qE7Zgn?f0kykj;0Fv;HjuZI@`Xin;Z!Szql~(CT;r zKlFJ>sj#RE5-yiGfJkM2cKE?681Jh4frc?90!Uzrjs(Ku5>y#7`N#d1Ns)-N*WQL+_KJ}^*jImo5But2C04Lau(*M&9Hc6mmT~CNfJp&Udm~< zk^&=rfDHyt0fbmp1S5gDfwo^b16Yg?4s2@M)b_a7c_AH?tube#JxR}1cTKNoaT){& zBjMoahai#Dw@4fFr)}FmMC?;qJWgh)b>*Ni!XYeSR|snlJ(MKHp4)=F`houoHnh{F zGvZXv?YWDSaVXQbQjt&3$QhG^ywB*D{>{hPlStq1QZ=#KAnYu;1|rT%@~O={j`W6* z)Lvv0LN0}nmdBu8A&4&z)PH7H+Iq>x{k(n6{^7tv#!nrhrQ$7`dI__9z=k}bv~`o1 z{V?H#bZP+fZbVO3X@0faFJjt+!Y55Etq9geQ1k~hH2+FJ9!FV`i34Th$_!n#0drY^ ztIB3_&s~Rhc|U8rG;quMr8&NFPgbJMvAuR57 zbkwgtB3#pT=gn>`k-EJZ6YrZiByun8La_2ed(u?-vU@o#A#2Vr5k-}Vcy2D6?NTV- z>kPp#Wpm8gYJW)Y);pfFQGd=_mT+o9P|oluwAS>aqKbO~k^p8R0{k>pWkeV0mm4fo zFNY*9Xh@W0{T&mV`GeMWbEmTiqV|^3Z|c=b1x-(jfyyw_5VeH5x~`>#*q!ay48Ws{pMiKGsAURLIc-mL=?bYPC3mRh&19m7{ zvYdeY?C@JJ3veQl&Jk0teqmDgCCY4DzFi*qua66z)QMX+Xu$p39B5M{38h4I!is71 z0|-=7a2}?$Y;w*XVjct{$;svb_^Y;?_75mV(?>V!nd-axqGm>sr-eWH8abBcn$s1x zJK@j(a7F1kp9VEkbP%gbsvC`hHp%l|yhc0$ncCnGES>kP5{+gnKoZ^VyHf$hJ3c|y z8=0zm{{uoI|MqXzS@_j#=KWVM_sBWZ2*a1c1GGyp5P|%k^ zR(Xdb$5)uPTbTAjTh|-84|5aSzd~1TiNE((dI19XZ@Tn`D^PzIWd_2se5%Q}{fpek zZ1Jj-c|X~t80jf~U5qDMq$88=x@jfmj~uF8q4X4_?L>vdDKLrdHo|0+k1driW-3Sf ztDo(7!q@JSFkyN%iK8zvS-*j$QreQ!zMv>t7}6M(d+Va0lD)t*x)l*8!da;~_ zU9gmp25}@|^h?8^0!`lfVy;J0sZFLOc@Eean6osoc?73I2uWC1_JJ*G*)rY*J9oe# z==_?y)qJx|5&;aOsD}MuP7?_p;=B`47@&FH zR4{^&SpS?-B*F z>jmTwzrO28XG2a{R^R3m=ZktU!N&YMzOxv3@;65w#`f7p-iw(A;fjF)dt-ZBuDnUN zz3I$2_Aj+&;Uppfx&8V}-rpT1EcB(cLU6M6l%@AYuqiILbSVbR-v;Iq{F6({qZ z9LNrMu_)g zRO`pvx}b3?SKSC1>65Y{zxZ5m%bnr4cZ-by%ThX*id$b&JY`*;uvcM#9ex%Qrf`ki zary=}43y>pB`{KVdhUqUf6#fwBAF4HEUfrCzKg_sA_AxVjw6JOs!wotL*p8yWOvYW z(oVf=#Auz??OEybfPmOK4lzs4@0!^VGTaeFDRiGAu=9-_qqqv zHpj{x&V0##&UL3N6H`wSAUcs$*Itv)S!x#{?<~>(IXvj7%%E(h9kP5zGRZ#wbt`ASG}} z=>Po_1{^o{T_^KXl%ohWfDBm`<%w1&E~k|b{fRV$on^o&eZ5eW9bWweQHB!`uT@Il zv?t9@l3X@{S$eZdy*6Hm(4=TsE>hMmBdow-CQ7cr80`?|-&WnLpK?oj3R%d@34`GZ zs0P}ePQMe|(p&t}LeMQ`K6*Ms??%i?By{(3000-8?5w~Uojbp5NV(E=QoDo#o3<@G z0Phlc9khmWHX`g;gvWYhA2ffVvSy*1|8M%2Od#$@It7r0klCo)?cdOa^~e=K2Xr7S zTi-w+83G0120*4Cpe4)Oh%jVCx!jL)URM+(`Kv_amXy0&4Xyb!tnsDBsj|k#-TTj4 zsXK$)NVkOH90kum2D>SINNw90LF$Ou>vzRy5nhSn)y?XzAAuayqf*8(;#MQ_g(2ie5c=Kx%@t(kL~H~zobja%+}m5c5OV}JaK%n{gEcL>M)Y8k)v4(DF4&z{Y`V95k7=$&<= z9ivceB=&MH?-$Ae44e28ElWj{Z8RwZ9WeJSbZ=~<`{iz2r3o`A+hghBj!|t_bpY5= zzDf+@=GoV5mGFyzVTdV!Ii|vZ;DCq~2%o5ei*DqnS<2BpGktl&?Yr~9$NGPWFQ~9s++^%@y_=p9W zQ)6!#_`q7A)k)hUX4lZA@mHKp)!75p>W{+BUh!UE%J-?^`(fE1hmb<8W7Av<^<{ABks(w9Hf6J6r2 zT2fo^@+PXz*}{)|UO9JK!U;0sRQVKn5E0=QS|_bU+zPvpt-NhhA@_k9YrEr^?RN$S zP^Ts(*DsgbVq;!!qdNKd3UrJ^hY7^Jv5WhAs4bx%{RN$FAd_}ziHmwWaYXzQ7l6%e zQ@@Hd8MLHCg#w9RR;;mH-)iP!wf8*?+#BNc%Sg)TGcGx<=3361*AGh686)@oS1S$b zJfb13O4abT*Cjgx3LK~)4*?0PHVRY_tJp#)M+W{}Fh4D5jfbejy<~o6oUDb!_J3mD z@FKN?dxEVcbaY=1<dKrBX#4CsBS6UCGYgS(s;1v8z-5}9!R%1d=<1l9fF_2aUEUu)5sbb)=kwi6!uXC&d%<8xrxVB?%1ljM{ek% zDsGz^uI|S&+o7+Jn@@P7WpXSM%%HB|_g0(xdDVI4TxUdLV%bOy4)-IT)&7a;G@_Lo zLex-Rx8^zW$rD(T(n1b8L+`GdKPqo+f6u&ECVWs%Khbg7K^%dr0_&!)nzltU6(j0pAmXtg_5PK^Os!C1=SC& zZM9&W&P(RWUz!8tPVLKOqS9L@m+0MpkIW0gRWDPIKg4IFelyKIE%^z*MAsEn)m}Fq zyw8)tv&d-KH&hpib+Cug&-Te3(_?B!WqY;fO@CFN%XHtPI7dfwaGD=jUlGgt`ai(X z2Yq_qLKYp;)-*Xp09%(`<;(HH*XY<~k@V5G4Q4YmFWlUq_v515Mgxjq6JEu18eRx@ zV@oUw?~Al-Udj%Cn;XPkW@n+gF+abkk2Kp{H7_p-fO1`dH2Arpo`c7H|5_9&OhB{L zB+dBmDd2KDtI>6T^ocwFW4Cl%Aptqvb2j^p$Z!^O6m`BHZ%g-Ljmq*9@>iq~Hd-AH z(NOEqiSaw*m{*%Jo2J@6JVGcX0@;+7bXAXpGore=hjr^&!k|UhIm{8#7k0S1O%q{K zfoo$JM_Ed&JTkr8y^huHYG%8?-Jh!Z+sF<)IfLo6-%V&A3xb@#Vf_B3c%4N*O1l*n z9cjK*bVV&%vqVbvDrrB#Tl0_+;yU7{vf#4pj+^@^Q{~Nft38x2KH2?T#o4xvwPto^++39@Ymk2d zmnFRvG(WLu4oiu#s3lY zVQn-v&@vHvO3ych>tU_*U$8xn|jLMp}Qd-jXaAtKPfAU z@@seg^}oMA{Oh~flQ$&5AeNEb1Pm=RhGaWXj|eC1xJ2uU9zfbktOpsj5q$erOjr?6 zmrUoigB|mF^BM_L8Ox(#fG`vzBw~bUM<2M7jUirz!-x+2!m{q8;!$Jj1&Cg}4&=Yh z;?Pc#En~nCo7(e6?uXMqcmBNlLq(wWuJZdcQ%jlWFcT+1LF>y}XHZU|s8EPRK6>Y$ z{dLnYd?}mx=_#Qm(dwc=#M==u)sM}IXOb`^?Sk|ejd%})Mg1l<99=i<*A60>ybrx{ zX~7+azUUiC(VZwnHiX2v&k_#J;uiF6-%rB{y4fl^jW6%AaUI@&anmY%E4O1}r~8%~ zQ~1JaXJvuN&o%kX47(@z7^$=*ox&qo_Uu=GE$Z9(YR|@V>>(1aT+8Mt1|fUu$B&1Z zBgw=*ekEtO3|u#VF(3_>ozCug%PLYGZhyOcbRVed%WlNk6j;%-0KSb5LGDHZ4o(p7 z7T7Lxi2Y^RDu#@Y^&>(r8QHfN=&uNgXF>kyqsJEElb+`)&tJ|=GIw;D$M^9T{C{th z%OHmzRRcb8>f`xnBJ``-7uZQpGeslrvJ$5bLoqGBXS5SE7#EW4Ag@6g=Oscwol?ZP z#UVd_@sUkOHg1ICI zm{`5oTBy5z=aD!Pr@8W>x~yE<3UuPxZBofie(xnOqzl}0uzJ)i_5(emcT+qUDHW(G zS~Oi8?Q0xf30(Rl==6J9Kbep)g(TI6oOJ`_q>{D2ky|{t(|Im;S2}ht`OI|H^cp9A zL=1QdEpgeOtne{_e(O7U_EiajVkCYSexPG|Gwv_(T-B6Uki~SG;}azpr6TrwF)4q3 z-F$#F*#Ny-{=}Srh*`yDJ5!%?+NS&w+H3EYy2z15k?0X6$wq34o<#AmtGzT}N?dOM z(jJDEAS%fZLD+-64Xnc6lW(YRP4s+U9i?XMxI1!Jx!rXBSP}hRl@I78yE#yN-u&kA zc(VYtM?Hv_hrK~h4dheXdR|OybYh6&F>r4Pkuy>9wQP1WQNnp}pytg_+nujzdU+w- zCf6p;xtL6111@t5>^f42tQ{~D#ctB0P*<6M;4?$#8Q+Z}1MYgQ`#h76qdVC4hINU_ ze;DYC)gj8jF_K4#;38z3kpyDUxcT)vfAJ^lqqs3=&pp`lJ!ETSmAA=ANXcmkBO{E2 z7+_+&eehyyQuzJ>sHOoV@L99#>Hy`~kB>h{EO&|+fuxYmItSN$B8qwqS}O9v=mile z0mOeDUxR@j)j~*%j43!-DkY=BCt@71W^@&U*~mceJ^B4ZgW2tszKd#%{y66t@$TQH_gl<)4*@ZVHc@{abD}1J`~W9(S|IL zRFalN?TK(?&VkU-h3RD9TdMDx>bq49{cFLI4y&Svma!VN$D*6%>~}uwS-%3>;AAu3 z$!4yK&8ld~idGQ)_E{e^5iv_i;~XHeC^(u(6TFKFF0GN~%|}rQ>3MCIc6;qts~(9A z7!)5*G=Us`bnr5|_H};=(K#&AFpwxtxLe{|8ogPsubYjLh1&DOiPv^_y;-?|LaXe^ z07K5KPOWheV~7$l8j-k?gOy|7`OqgK26*%=;gv?D#pKMTI!e53cCqT`+|Nx%h5=`v zr*g8(bm^#P*=8HQEFq@O-xz<;^UX2cK35pl1Qco56|M>2{)z#Jq2r=ra-zz5h|tXV z7Pi$8KI&mE=em9u*OAk>-$tSLt?B-W-`rl^QQ0Bw<15~dOwXKtdJWnkOzBpm&)n}R z@a#M5Uh1RY`JL&WcW722j6kS2av&rs?PlK91Up!dSp8BRMlJV!vq?-RT!yRWrtz`y zu8$GnHQybd@y>bz=@P{=BK9`K$`wX;!CvfD7gQJj?Fc$e?Com-m7uP?TcS08_cnGq ze+p!7dS~W_T2%{f?|YyqrbvV=1#D<0pqvJJzOGqKb3t8qJ~x8X&_XBea}t{rD$1-o zrxAxwr&o03qKb!_7tNCbc0`o=L38uFrdeOJ&yJ6IV_wnUIyqCA4WT9|25n1Jwdra^ zyC6L3OObFXT*KzaBE>CbO~GLVmqa9nVuqo52}skhlti|@P^B6Zpm3j_3%-CN6PiZF zlWg6;g_6L066gM!U{-|i`Av)n@!#Cc%NP?Jj2t2NrY%T1Y1%ZOq(#T(tJDd%U!uO5 z$to{jq_rG05cB0Zwk*k0Dc*# z1)vUH9624hk^G9-D0zGNzoBg*cfr+2+*g#WPC038svGPE`xoGV_N)Z7qXB`2<=P6A14xU*aH;CA`>AR$VLi{{29s|P-ZLcnub6CuzPMDV0@f}uj7CcX2j@(pFUS1 zNz6!+eUK7OCMyi@mI9kJb~BVI35_rPMN2(TBy9XFW`B=(G3(-`8B;~!(uQ2&LPp3F zDaj3;*mbiTd@epfzq2O}ZjqTew4z&`Jm>a8&r!~ZVZVrw=*-u(EXyyJq@8y+0VLAr z+M29B%{A=i-6AC&r_SH=YA~7YvKFk;Yt_<*%F!{mpvf*xR;vNsXM~?1DZ#S;kqH~t z=i1-NeoNq3A`w|Rarh`tCpsxTM~0W@aZ8ZHAs`cJV_1v#K13v!S4*)To5QD;;;LkXW*YoJU9Sv$9*HqCAiOt;MYGt$n=SOm;M0CAK93F$&tPhwTJOK2pJBX0LgX z)9{ick~&We5Z{KPa-Vj3pR$8XHOTmMN^qo*QTLzCbTD~7+&TSFtLRId35WK5_P&p zCX?^hr?ap2NUUAfjV&V^kYAOFeJ;`j_T)o}R*f-lk(cOZ_zOeXv&R-s96k1?_oj2t z(@gfj7{l*nP%A7dd@Z|-_!IZNfuDFlUBODrJiW{`AgadbmBB@(;Lm7$P`3b{-^y)c zX7tST4fP&OicvhNpTWPH^vi^iR{ZD#XQfS9^7b!&|Gw|u`A+tQ#wivqyooG~ToI0y z--ms=G!sh@5sNjs-y3K64Uq?_J)`qO?^^?wkozXuZXH`x8+{-%zEzc$g_O*r@%fY( zqtPxTM*uXe}tD{+<^}*gs2HGd+L)s}KwghIJ{LpDmn%ws#q$)K5VrfQO zmo?S{5|Fr1!PcMxNUqnN2NV@Q6GTwb(-XMq+zEcZ>YY|gQ!5!JXztYHuZ4;rO%~!f z&WU3Wumy2VX5W2rI{VXPQ__>fVdkscL}c4cJ1?hcXC=xkA@;#OK+7GH`C}w7Bt;r$ zaMO5KxR@DpN(P;`pjQpDUd=?BX`(W?xt&_F`?PeWAN z8>V`f;sxTP7rM{4?V(oejoebM{zLVqBJ(q~qk0^d9ZaS#sSs-SHpqwedl7IA!|2Xf zg9AHYO8#SA$%>OGzer$DyFa0fAxgO?*bIjkh2j8UrdBOd4!wYl6Zk`w?0$Qi@}<&> zCW9Fwg?JXLFuDzA7YVd@P^AiIGU#3k?#aa8C_%Aq_?!_CyXyvxDk2~_B7g$YticAM z9t4SDd~+vwDw(RRaA?J5Sy!(J&UNDNoOVSwp$Pe6^m`3MO~Kx#Rc|a-OPR~woYP-@ zBtS?up#dY%eB^*|MbRp0bmGqW4)I!0k`i`H9JvfgBq8R7JfLc^quVFZ0dsz_MoZmE zH;sCtHL$dXZ9Y~5AGZH<4`8&!qytFP-B`C6B}9uWN8J1;9&1H1N_Ha>d9)%LN3Ne6 zXloFetuSCWgKYee#_xsCc63frnLHv&l~av$!hKVqkwCgjiVx#SYIw;ShA=d@#M!#Q z$>KEhO75`we(uiZ{GM+UDp`?kbi@ZA#=R<1mW!z4jBByme_COOc|gwMX>h6$F0~0h z0=vmbLxEqgXt9krHH03YI=~pg+-(QDc*9ov766Q?oA#nRtozABis4dX@I&NTCYpp$ zTk;dBC4ZTyl0)5SH-5dt{L`X z+}`^YgKm%Z?EA^-o}Ydc25(A4F%E@5M4$`n@p8l$DG?|sKaYi@x=+60+_LVC(>SDb zQBU3MxU18JMgKOWGm=2Ti&M28J_gj#P1;ns^yT11E8>7uby<+Mk(o+DPLX@3g@D4~ z&3srvg!If*+(lnt(g}u3%;;-`m$+@vydI6ptUs+Ap+FO%W(mkh4tPDN6j6vZ?JTo$ zpiu}xBhRFj1k=>*L7Q4P;YoYVUbDhPzt^v)<_dcw0WL|=!+NMGHrA!MG(PzN{n;(a z6mN&7_HQ4*nAJ|?hnzq}^|g33!yecshA?)G4uT1H*sUI!P&|ahr|iY}vpHoXMC%8B$iFQt_;D-pw9W{?-5rrtK?A+-B-x6*0mJxk|Zi zqc*9ePt%M)4Ol$A>~BN0?%+wERtItmyFhQHVn&T(kO>?%U)(l6agLTK*thf<^tS=i zPOm?WX_~x!sDODD9xz2u-j~f0ENija(S{+`9izB5*`{cYEYgW1H^wy&~@e0;s{Er0R`2ZMluZ|e>OM8RStH;uTH&Jr(6#D#B$ zj3Gl)CsN)CO5{9G>~O5vFpR5XZlkI>cWjGr9;yJu|HfA;nFKO8OH7R2e~`jM8Y*m zSOf-oPbBjy1Uwu0ksJka0c>8{V4R`J5EZgNqaVVVGQ;%Bn~oHZd%aVW!-w{{R0XkE z@;4$iWPcwWF@d?DF$YzY62$^4;RX-5J}MR2Dddwn>z5V_V}3uxyXv}92r=clG*JwK zhKn^Mk6E{$xGd4o{O3AP=d$;qTI*OBQP}BY)0@~c^JC6SL|aemQtvKoW=1flDO!cGUOw*#LT`;lcaL7;eV z)U?I)q2Wk2%L8%^MVe>0D_}sMb+H3`imaFzwA7W zRjh@}#Lee)aH~3}3k?`m_zzmQQZYw2sq+#sK zaSHTTMNmXBpU6%H^x6C+A)nEY%n6SLH*HRWatyrbqTf#=3^yEWxRpR$$to*ly%FfS zxh*+k$u8lKUJu@tOyyn`S&Kyeh|;%+Km)7A*1BgZHUN9H^;0gTDZBl&999%U zz5Pf36urj;DLThRv4vhmJL#q;){hjHAe&I6+%d!v#`0H9mEswtDx0e3iO-@y7%}!X zbU-kqRS1~qiMXh;R>P%7dy)Pol>X2^Vp%^aok%3X%0rxKtQMp3OrI8*4p9>XV-92& zZthbEwe3hs8pe+6BrQh%*>6Dv2a@e|`ED^Z#eV^%zrNJ;Mr#D2ChEKy-t!QJwMLx( z-)^4u{1RYb|Gc};9bMEzEAZJ8zp6SAR+DRv7E3%PB(_irXM9&W|BmUtrC?1ISBLyV~_X)onA;#+c{+&{pzII_J()a%UpKu6YAuKF*vpVIsN#^e;yo+BOK29+p} zp)2ov>vwsbR0>0{1n?vug+^|whzUmZVDJb7;M}8UY{)ffGX*r;>)a(OOh4(H9aXD$ z%032|f7n+CIEa8nMeZwv6RkDxQvy{qMiXw~Lqr7)47Fc&gG8$+OxlVW%D6&%tO*XZ z@1n+%`x1Ry)?9tVT>`ct&qZHsbY1$(zejYY9@=v(7D|nBnRQWBXftQBz_n8XsCldO zVIn}zh@?iH!5)q0-TA4~hTgaJ=QEosGSqok53OkzN<_?YsvjvcH-&kV&_LR{6Qh$< zoTT6YiG-&Rvq_q^4`!47Id?3VE&6~e-gckK$b?uCwcxS72!}y<^6k=q?2k>tNy(N2 z_1UKJF2_qlZekR0+v-GRLN1ibV*V-m0g-4WAFf|BAHM2XgO7VhJLZEiZ}URM8+AK` z!|w6iXcQjcfbU0Se78^RTK>zeDruK^w>`m2IWmf}1;*KMmipax4?B1`q3z)nFO?EUt6{ksN`*noA}(hSlzts7IW{Eh~!@mBfrR zZs)aiV*QqpwTwN=x!@g}v$h{Owx$*|(q;$fJCGmg_bM~G;*POr5INFe*s`ww(FQ|0 zhN42_ zJ$B2jx-!@aXuBMQQ`y`%-k^uV-f3Fn(d>HsfWIiRJvLx%M#a{ZcbO)`^GHkl@RZ$aB z@{!OkYnIgY#))x}6EaYzzzIr@%5>|ouFJ&Ozh!n^8elk+IX}@h@06Cys=r*g=|4Zi zvhe|%A@oT8$x#<;#M^<&Yh5lNF*dlaIBA77&p8V=Fos{$tEeWO_x8NzY_A+6sEfW> z^Ur0Nw&-G{`FJF72OONef~A4q~c6SBsltyHOX;~afrBnAd80pqYtv`Rt6_vd68@(Agv() z?N3yO$z(`*MAT0VTO^x$V7o^}Xk{Civ}@{kFs$8e?o)0s?Y{@ONAoQ8f0FC6jKAFr zLDN@$?(EC&NUDP6wh-(^WB}_qRuWepDry{j!sqm zkvCmdOtDeZe~vg&N*?5-iIE`0uo3`%r-MZexMmI8-65c59FE9drL3HVUhAd{>pj0R zbfdC1RdoSjRjXC$UWm_=Feve5h|XVqRXPo~5QRH?hF%~9-`H=o+D+;akYkZ)=;iGd z%{@vr?G|8t-O1hy-Lz8bx;R`~JW|Tg;EO%&_ZPL0wpVhioG&&vN>zS}uJpZ4U-NhA zsQ*!-TDXR4f>Fs4dK>{~({;h5gGu>o{ub+NmE$;flohFmtK0lzE7&LQvV^OvyE!&K z#Hb?|2}UE6KjrOkr1@Qkf*U#NI8F$Akll#J^6U$@9t2ot5T`P)3e=@hEvtFl)j@ zF>>FyYz6A8(d0F?U;)G?EPJuzvBttwZ@5?)!bFN@`RwL!C^(bAMs%vs6TRalP{BX? zIPpM}zqbR7PB^nUYl3-Su~b7nkUOk`yL4GdV{wq3xK#l?xu$KwyUa0=E}auEMAne1 z$3D~e1c=CD@^hUsWfhM|`E{wlL?@zUJTwvy%PmP{Ax39E7Tncv;*Tw4ilvK{pc?E| zVk?cV&u(i{34|4KW0Ot@ZxTkPieyZ8+n7_hLQeEb2cf_aTYl@ksct$yn0Q!q6FgSi z{k(w`x~!j zG%KY=zxSFublLsTMPzY^UJ%98ggWK>jT#Ac9OFnLRCRUCCxEk76=lT(BVGs;0Knh_ zf;rAI9C2=9JMv>^My8+#YZX0#P96)25~ljq3hq4de_~FEliVJY{^CTY)=5-ovog_+ zK;Z3s144JSE(O~cR4*lk%!yNkgn6oC**R8W?!d^cU`^xE3z$p?3DgC5(6reiM?Dlj z2}yw92xiD3Ni$@YA{}^0#$&dn-UX2Fch?ieV=m9Z$OuKEg0Le}Ci;FF!QWhFq7MBQ zW=BZU05K-I$4LWUM_N_u_(TX8HU;FYcidS7dwCf@3e>8yv# zCd5EUPZo>hZK{eh_`a^F0KOcyTO8t*NOeqPs)8Ev?3D_nEP{?lpMjX2aycE@s+K+N2a>jFa?5cmHWb`C7Re-KX+!?Wx z<+vldHk@s=1XvZFL69{qCO?T9cLsqZm4Bj^`AJVJns=k%I@E4|WWs-)O)Y9^kmN^? zVbEXy`lsq)DD%?l?T?<4I2G=5B)+1&2dct77zNXSB(XmkL6L$Y8jT0KF0}n7wa`|! z&8_%B2my1RyLGU>%==k)5fH>xopi%q!6tZeDR8UREAst}T!YM*+o0wxmFrqC=}GB7 zUiq|2U#2DlX*={`2Gi#Y_92yiPfe^oMVmz@ONT^<3dYyUF1mHZ>640brE%vwnh)W11I??`P;WR0QJsX)k zQCd`5;U1(hINSlF+S)~lWIHX)_EjrZ{F?XZ^s$S6?=99CPGM{B*Ht}=s9>dh#eEO@ zfN~rsy^2VU?+f+`zy+jJW(n|U^v;BVC!gh(S*X7qg*;X%y3Fj2*3R5sIMttuo}^Kr z@tLu|hm@dy$;hLp2(RL9;6$Ghk`SvMJI(S$dqRUvKw($RIzJFut=)U-Zw!2YyzNq1 zJ%6#1xmR@w!dBooaY*O1B;mvlYD%^qd}rw@zU0Gq{s-EA(@(H6AAu3QS>WSfF)(_v zw8sGqj>Yqyy5kE#zrKN@ikQ5iohPl@Ja#=Xa zKd<|$RqBruy5vUaK!ZEcO{E8IsBzV|T#+2o(=MXKT}BG-CG&)QmPki;3wbtP-WF(n)Ov?X>-7&kasW|Sh zF~z}>AQ&YsQJAU*4LnuEg%H|$T;A|YE&;eIwOs!GDJn@<#Vc~tmFPP;7~?-(Gw_&0 zd-l;}7%h=9?g(eWA_Z+p2h51n36fkDC@MWe0hPDyX`H+;G*MdIR%%@Ik835J>gObY zg3lm4W@9)u`K$-Q(p@`r`VX!vf+NE&B03?aE8`pyGu)_v1LjqB`@nXuXWO>t zK^m)Jaf~vPm5AD>rOg4chD&tt1Z(Nk>sN~+8eaCy?})=GVIZ*^Az>FkA6r7~qKHpH zRudKLjT4wiEqI&P%&J|w==-}|2$+-Q=7-!hy_-Yh@pbVaJqLq$Z8@M?rFBKGY5I%! z&DTYGuoh!gKT&10N#80hEnKg-i+AY)ad(k38hjTQdh^gH4MwlECdXeSa*4qx?xv(L zsPjvYOY{UE2qKVd5f~Xr1TTo_cIDV>Wifg#R*${yj=qO97dJ?P=+Q7C;mszK9d-@6 zp`=;-ZNA*6cD34kU(`VX^Hy1wd)$A_?RL*0wuYA64S;yvHAv=}b(FEF8an9y)hn2_ zEv@FOBEv*C07ey~rx|kRI1{W==sKdU-iD&;azRm8aO9Y}SdknNCS>Membt_-ha_Mk zlyhH#)sO~+!_fCCapXo-zwK9_3C{SCJ`5`HRl~@ja)0h>IxxA5^vT>`)kFe8?GcG{ zp(kNvXF@~Tag}~iDPOyBjNGE0H>}n~uX(hQ&-yJ`-1)d)^WSm5 z;nMv(Xz{-}y*I9RB?)?jH6mcPVTYm7kC7IVMAM2Uh*xyT>S{4t)oJgWHHxh5s+JIP z7>*`JL)t0UVks3jl0J)eb6M3|WX-POq+-lbG_qmqi-}aisGrH|+J;efv_h^aelo`Y z7SH;W6Aul$qs6LuR~?fWU7bTVPVoVQ9G zxLZpYSBhoq=Y+iFKkv&lALdh;n6jgP$)n!6O}^IR6ChDSzLQhq?FL9%#rI|nL$$_@ zyh^m{7HB|Ly8h!B2rv2f+tdHuVK3~+UQM3HY;3UrxRu-5P#H3`T{e*%-TXfkL(jX4 zB+M7Hb%cvEV0JNrjgH2h*Bn%S(LXg;91i7?;rhtg&DJTWTz|MYC_IZyw2~@|yN69o z?k%W<>A{k>ygZxWdBkfyq_Gdrq`KouWx>Gv>1%%R`|eBrTa#g-W!clqJaoA6xBr3t z{r~iH`?KT!Z*NL**8ksru4jIIF})Rq`87s=e5v zI^Id@p;*uorsCPP(~7i0((PTz#s)iz)|^{-KQyy*ZusNIM7Xn|lb`HZ?t96FTr(|G zbICBQykymftndLZyR7Oz{_sEkBSVJ<>$FhhXKa`*Th}S;9XFdUnj6g4gspUjz|_fj z>x;27MV(JNF)!7Yop&=W-dOTVaU?dF^0Kf^wth0^xu+5*6GpF>abjV8v7TvJJ`Jb6 z9trLEge~}_zr_S!)(fH`M^HQpolZbk29SgG-9goo#dH8D|OY(K3Y4QOps+T#MRJ>p3i@%HVF1%wK*;IUA z_V@1nTC!C+_1I_}X_Z6-iNb099RQ`0hVvWoT+K|R;tHZr#u+!|w(&=hNO1HSCV0e7)nkgKF)c2R7(B-zAsFK!Fm5+{Ch1xAoQD;6QpK#!SY8x(60x4F z$UH8?w$>0f&?z%Pr?q6tY_SI2_XEGHzsxN}r0;ekME}s~7)c zC+)orH;*4;%*K;pSKK;0KkB`B!fI<#VgAK=s|H2EUNS|+dBA9uSSMH{hnouKTw`=1 zi%*LbuF0|0m_BS7gWa(#3a*|F>2>WJr(-1exzsGw)KENj+yAT!p({i^7wmewvexy6 z58WWJA!$xnS+%$_G!otTLqFLK&g_w@-b>&?vl+ug|-&B$SzKZ5i(xn1m<|Bz2;xRN-SBX7tKvLud}KWAQ)$1R2S+#Iuw!*x-eEUsQF`E>j>KtoDayM z?A5HLm3Jmdv<-6Rqq3sf5c-fmwiXlI1aIdKyy(sROY5in7alh<+|jOVJ1RF~ z8Psa$zj%N*u>v=2g(dl%%M+;>Z$HI%#$}F9D()${@e~<04&@VsVoX_W&Ef-?MR~`I zU9pXtY%ibSb4^=8_BDv1V5Dv)KdHKTb1go9G9F1&S$+-Bo|7F>@q8FZ9LQF(M*S2T z;;dj*8nN7Y>k5B5BU`|@iemzqtxg>37qgDP>KrHknXPEKSERVxdhd;=5N!O%NOCf2 zfk2*@NX1Xamu1Nf{tvH1^2GBAteMtW*xF*Qf84NZ67E*J_*g22$kcp|&|~XSkBo53 z=@{P%uf#P*)F1a_II)W9%V1M2$nX?h9+TfNjj-+|JCez; zT(6%u`S1J-xvmzqg=4|jYnj;j{lu{6q#Q42&A$JlcR8m_Z`zu7W{avk|3dh>Rh^&x z7pm(-_}K6Ehgm8`{-u-E%e{?>V(Mfgw&wwJ$e%Yo;Dghn|59!La+k+olHAZI`WL$% zIOtJjW}4r~>B)_zdTH}Pr`vQYW|u#1S{)Vpb;}($3yW%Rr`^AZ4&k-6Z&8TbILAL0 zl&Ln)JNZRtcDlHEt}^@RJEM*1(~rJ5nw@xOHmh(w)x&^>}MMr+O ztl7s@?qn=$z2LZo#kN_W@YdaAve2=hv{tjlPn}oB9#mHsj{Sl%_WKJDS$dz_^|QL9 znQ04~-C`I1q4Uj?PkNIzf0D9f%RJ2A_8#SN-3Jevy^Zl#1rn${kJ`Dt?4Lg=qu|zK z{cbLt{WmP`#o4EQ#b7Cp>YX2*zQ17g*QJl|vz_zUMYE4)on+GG@7b<%)~Q%+AbDgm zNY>M;F`X>h3%oM>Qg$}MY6k)Lr9A4DjM@ME|Fm~5U~*j5fvzf*<+jn<-KF+WmWAC_ zsu@~?Y)e8o`jjkG^;F9vd%!(nBn0u|86gn}aby#RWCICZts1!%BW9CPE<$_P&vG~jB4KF*CN%IP? zNvCUNkGP#*=?*-%ko64Nw6FM(=iZk&_U*#q#e-Y+bb<9j*FCo7(R`lF`Mu}a_kixQ zROe2;RE@pmkpPr;%F#VeH@<&*ej|dU&H- zr|b2>rcCr;wm0ZFwbt(H%|hxhcy$K7+UA3ZI|Goktx~we>8)O68U7JBABN?wFs>A` zF|}mbY=Hr)-A7h|DRbwlTK?FUDmtJbT8y4sw|~geIxFBAAHaV&p$^=?$_G^)-)ckfOs%PbK_PHd)A2Eifs zF8i{JPE>oVuW^=q&$cfE*G?+kKVEg5-ct2e;hspt)Fs#+yBR&;YqRBQ_WG&Aken))al@RZ~jOW0W?GL)AV9fUY7U1sZ z^pVV9%D&6~#&30)gIj*vDLr~@5&U$bx-o_~wLE?`8HHqGb^*@avL}R@L2lD!&i?GC zuUm(mV)m16XU1g8PWe7Q4AUtje1Yn=i^9?jPj3td7a?1MBko;mLqx(|YX^Izlz8}# zeZe~n_X7HG25zP9-29ufMH(*rpbpR7_j7d2>y`!9<5dL5D$8p>wCc{tYd@T6OD#W= z8GOgPnKgd@)vW2;5^5twlPMPPiRKpj`tm-wN4IWcjK?+tm>fvSZcxUg3wEm(rD%Q`ryY+0|k`i_5;kAVh1Dsu>=YH2^ z<)2%)IqXy*pIhK>>d>{iqTg@Z6o5hdL0JL084-QL?mBSh_+))cap;?n>nh4V5OZ!D^VD1r(DZ z6eARdh{_fhQdo?PkpAhOt!NAC9WPw%pcOIlnx%irkW4h?o|G8OqC(Kjtx^_!Qd@3n zq~U^JfA*=37qmTpP1hCPHTIpst(-ef+aBjN*FD*NdRO6!>~&9WIeq8WUwk@xEdGp*$c7LtosUrL`lH=CKZnjeCD)qk--E(Tr-Gc6-;%>tjF-)c*xx}m-nRMT-xW@$ zp1r%{BI+oEg9F_ecoNVjlR%B2zG|JrqI{R^58q+dU)0si`d$5`G)!Nqt`lEOy367H z(X^+2bK!>NK_OfDXlLHRGzhFcQLlH~5~Hi){IR>rI+SmJB>!5s*y?LpPa1b1Y-#k%hpm%Dn7kCxlo?gy4T54K0EmhLVL zv(DR2FFoP}T|0Gq=YCJygTE^Z`-3a<#cFT&HB84Fh%~gp)oz!OKH!z&eeGA@>W2lx z$=~NbUU2l?nGVO%{VJ--H5T^l)~LfeZVidm9q+TP-L8?hG4S%*3Zo~JiaSg?g$dlUuzDw3p`S$cC?(8HL)mM7fI7qS?%Tb7`UC7 zG9_aTr7SZqJz-oN3o3P;+wcO3eeZ)*8qa5LKL!lqW{>f+QXWUF!5r3mJ>-nFTtRnn zT_acICB_Mb(S1yCt1Xi?8OqL}hVh;s@S%O5VYjUF)*Y)RyV?>LnF@ zn|<98E1;RgLSQ@JwcyUe9)nHBH^x|-RvB+p9Ori%KkCToSqlNra=1(w%8V6Hd%8}5L=XooDIVm(`fPew5aO9@X^%S-`0RVXi z9=b*j1Xp~%(i+rF*?@$WDOx7uN%GY(T#X?h@W}CwL}uABAQtHbP>+GOriHr;;Zl=H z-Q6P~73Z@OiA20gWLFTo^&1kTC|A@+njT#b*0( z@8lMQ3_JiQF5(Hufv2A;Klix~$-PnH(Q}zrK{;?4+La!eB}{^jNWrBBs4f50o-9-9nK#C*3{E70cAPd`gsyA5uqU=TB3zZK-k^Ls zR4uu(R?i}BrPs9|1GNkP+@3=BhgO_= z)6aRqvb(L<1{+q9SqxHn#*JwE zmKo4#*u{IY!G_-W%YnV9TVY!KEhFtz1;y!ctb<(#>|*_5o+dJqxb1idWLf<6$Ts$&Xbm`gddF_J zjIQoSV!vSQE)+hEwRmuuR>p4>^10luuNNu>_aW~=*9>lCf6w@2;r`d-r^!avfet+= zZePsa0DXMP>2~kyeB-_tJ>%RSZt7cpL3YyxU0X8O9I^Q58U1|g zDrPzccY&|Deem7BkwX@RMRN&K3t^;rbZhbvTZq|ynAS+|TG>dh6#7Ot&la4nf$IrN z@AX&87rHUO`-&`L3Nmuov?fCxWJ&?cwl+QA?t$Sg8=+or#_fEZoftaZU%_KWBZVaE zz|u-%D=*Op*Lv%MEnyeFC#`ei9<78>!u#{$HsiKkmcbqWSR<~J92i2`pP-i)C2gI~ z9GfLUNY@k#Zfqp5xQ<)6X^rD&-{AOt!4=DpD0=S|Zi3koJ$s9F`1PesS-$aD{+}W2 zYrr}ncJTH19F_!liZX)?e^Y~R_VR=F{rD&zRhSg@XaD^IZ#xrJbS+@Z48#zal@ouy zg93o$qHgo~qIocb*=?Mpt~31w9L$GZ$^|JhI&KD2>!r%64*YUa=9Ew(Bc4dOg8G!t zM&~LB@=^$w*rd~nYrL9mufzp-znd4|V-cCYCG33s_Eg*EcMERRBOIn!%{MfUUZ`w% zv^5GRuW?8Tcjoh4&}u;^ILVsz9zEN+z(3?_d>4|8nZ{^aHLrc$f}@_WeuKa4>x1&) z3{}JG8l7lq2s-2~>8(N_Z7>Bk2l=u0P}uq0TTZ1-M4G0-SLL9<2Y>yIt|LFK-Es{F z_ZMiD4K^JrhB1B}=$?TVh?elO%k)z3VyO%H+-a~$=7sY)QrIzMNKR6!qwgzBTt4H z12#o#DeHlFg*b=H%~E%uQR+Y&335hITk(bd;Jf%pl=nw`CBJSzab4Y2vb^rLNn9l_ z;I_e4@(+o>rQs^U&mz8`QGW~08u1`C{4GazC?I<`zMx!46TCL!`*}z_N%(#q3OFBm z7Kc&Y_w$hQ{rsTr`}u+L{hZE^cOgx7+r0IP_Bt-@Gy8rLKhz5!n_QqDe5UUE=^W?# zx$^T6*GEos8Vl0A_$jrIz6Ebizr~_WzR&GougY@54r(vs=5faHPr#WN!9w*Q9Xl4E z*r$YR-*QQ%{zBDd#QL5h8ULVcQk7yv$=F_Ct^*h zUKJcDjICz_wTOkPP%qgc1#{0}B;xx6HgfEw?pt8GuCypy$!N%7%aXOI;-w z;jgK3qDk|(9Tead$D?CS3ZIkKOR1Uhg)L>JW8TxrnB*jIG%!?`VUP=$K$4+ z&wlX2cJagHbcZ`BzU}Q3utiXY?pzVyMWO-p3#ooxorq-1)1MYm&uNG2em!7cl{E{0Lb(lj# zeP}@((x`z4Fu5hDIC9HSCKAiL9636m>7vE8>PoWyU@g@qN#G0|K_NUrTD@%L4XMcd z$?tU+)LSBeh~`OFcrEQE^aYYiDjx_;uBiwk@l3KH2sY|0fRekkIVfT+QqObG|J9w? z=kR=*Nnz=@*Gp$fO^JOYT`=+vv6ycb*t8es?-0jT7BeiKG4Z)cL!_E*KlF4cC~Fy{ zal*Apb}$p5nUGDXp8wj2R^hQ~S7Jei1tQ~c!}~%-8KD#b{SH2+5JUiqjJ2iX3@uUC zukaRMBwZe?07^Yf9?~tkWIeP)$xt#6eEm(|yEM6x#v`j)Bo7U5nC&RK1iY11nt51- znlC%_;TTYWumk!{sU?A?iJnelVb3K1^B?9YEV5bo>}n(T%Z;BkAdO@z(gNhea>k1s z$c?hb8}gzhQ<+5Q(nW$vYywU!oUdclfXWn4i+L3(<6YB+?#IJ|4#gu+d4JQu0mq!K z^gK`syL4an2@`rt5ok}8z&8WP7l=zq(Gr{(pcb|!DdGwCbb85%T9<@D?L#+%htNos zf(*eLe7Hv{h^T}$Ongg0I@Wmy9HPrgXsTY&!y70(Ly5&FNZyj!&{DEjA<$~a-zFrd zrH7gWEJa@~fKEah7ob!SlvO}saik-lfD&7^{Wg{=fLLJCebHWJs$3{wg^1x*w_ebm zrImzQ2(d_14?qMP)nsvzO2Lez{R-mp6CgxFypcjknZvIw?pWdqbV?ty6#b@qE|fY* zFC>LRTi%M`X#_|sB0OTU0*);lZ2(11>fFI(JuK=hz~)vEAW;GwkAZZ{!f9zHgi0Y) zX=-o$Kc%hGHnQvj=>(YWMdn6WSr!#Qd#z}BnXS&sHOq7j-*lI|iViFjXS}Yv9v+6l>O^Z=Tcr#l;14A{h(ApGSJcyhq=rn*$tJuQ8a|(gwmGQU!c?rWLQJC z73*=FRqS2CC`&HjbJ;PUp+Zy@y^h(eVScA4D zW_!6|>ZRBXr|~ST{o${aw{!?{?pz=U~;ZX9}zeFlhJSia$RDT*fc+yxsZ`Xf* z!&y>4>ljQu5lFQLx?BSM<7C=Cy_Ph;MZk zTo%Qa3fhgAdsoLxo*wAkcGT|Lc!bqHnOs!S^ZAU6r)0sKz0OCh>%-zh?x!;TkyTw6 z^)L^hXzsi{8!nR7W<^i$3B*Uy{!Hf3DlES%twQ)Z?3~cP@p5b;d>p$EWr~Yz*+mw2 z=b_AHcX%TirmPGBHdy|BhWSJDOVy#cbi8Or{-Wp@-leNP`KoQ(7y295BL^AYZ_gUV zY@31onO=C($rxnZ=H*xjZ(xDCxallY%)0B@(BL7j{;aZ-{5Aw^V}j``?L<^s#HOPc zy+avMKbV=LS>lATb0ii`$F#tOSq)5xV6sNB?@{QuWhAVv{(w(w5;0I*ztAr%q@Td! zpfGtL+q?dCF2j;I4-UGn@3|ZCi0BHJuNRCZ0X7|O7pBo*mJ%6LmYEFVW`SmcwZ_i} zqmum1;H<{&vQRo#gUwG4k@ zr{U$WRK*r8qKO$ynbATFZXKt!G)PoXTr5N;fmUP2hIlrpErhVJ3&o+m=7eC_%2Id= z6o?Nc3XlGEDlE1cUb|HZaA=gawJ+pn(C2~+PmO>#233L+sI#)*AmgYeFrl*Rf1QI& zH*@d>t+KVFS$&ikFmE6(PIi~nL0O>z_exR0fIf#e=psvcj|UJT-B$(om^mvy{QXkw z;Z>y6mJx3MsO$H2IGF4{C^F-PHs&62AOwvFN0Wh1L+9>&TQ$5p7Oj_th5Mh5M&wbf z`-6t~VVI*)#EXH;$V35vN#TS{AJbcKR$BWCGLfcKy=xEWsusf&i)vq5OvI8)Z@yJ4 zt76FLA%k5&Vg(l8*%rjgB<%%0Tgujm3=*d?Kp=2T@)PgM3;=48`+`D=x zrhm=h8qBd|Sq6;!Lk^=4;``9F6Wu9d##GELZ@6gJ%_4=%=tu%R)O29?O) z(m|&yz6oHXSU?(a< z77ydR@VUwE-Mp~vi8qSV;CAJ<*jiC@SjNv?5y!(obl2$A6(*asJvq&s6TBAnIVT^l z&pG*cG6Cj=-%&t5cFS@#|K%_6S^#8%^MZ*hiSt6aKGeh&=E01|L}t;9$E5W@n6RQ8 zAcY&mi^9B{Bi?7NMHT8uf+!(!MC71*${%B=Ik_0SPu5Q~o}iP+QV#i3@!)@qC=T^N z-#Qxnuly@5d&=NV`E=aF@o?lZ-1w%Y3zm1It(&2wc4&m0(iP0ZAeY&{Ml?4}L@Veo zAYE26bQk3D4unjn@E3*YeBn`)2HK5gg)GU)Q-DsLm6R2SLZhk4j&qEG(qqMuHiElC zi*R9t-F?xw{!I{&;7IEcm$%r5wsWH+RvBYdFtccSLC&o#&^ltBd&VK(Z2PocC`@e3 zuLo@HyF|kBN_078& zFJy{&kP?~6s4;~XpgG5(V1f|Wl#Nx1{?b&0M}$pv*bC$I+HV4oY$T^d$rX7`PGS84 zsg=s9ZpkTBIPg}ni=sQPK%aaG$XU*{FFZ(t7h}!~wl&^}SQrxBZSm01c5FwkN7>d zOQD?50K`qrQRSV0w~proWeWsDQt=bgDDP3&iQ1u_mUTf+3=S0}{bRp#krYUoeTf|= zuNpB_G{p^NkTeBuLRbS@tMY{qzo_pRWNRXY<9Mj*S`Z)OLsewS3%X=s156p2&w$aR zX5hb-XTV5=m74Ee(Z z)ObjJ?v`0HjZoX0MLQhBoiWeGD>+kI0XhCrQkbL#sOMpb#VX=T1whx{`wR7(Gf&_; zN((AeaXNfdb)YoHac@2ZbjYsLJF3WMP^_ zTyhP|)Jp?Y36UHI#X}qZ*T@_v-GWBe_V#sxt%2}Bnkv8}b?l7z9#dM@Lk>FZx) z%2z7gZQH^}uvK{K$Bx97j)M z&}aBCyw)R*Av&tSVn4WnC>|b(Mxr?2%RE`QG8{Cc&>#3H<6Ss`sj+&VCAybJ5U|pQ zFu&yo^<}0c%Sb624|vBl7_ntc2J%@OoV&Ap-M9^dpD&W&3|^JpFc7qPcmTQvhV7kq zXLo)jc9=#R$HVDG#gtTU@bEpCRw1gxDyDkAUL$|b)c@%Js1+_+<+%TtUUvXPum020 z+RQ6}YEC&Iu?Z=QO zD%k0mV^lg*#jj^J!>TYB{6=U$WPLKjJdEqbN@p%Ufc!1Ti{2?`u;gLDF%G{CtP&!4 z&KNPsS$F_zRLlkfN32U2jUz9xU9_;Q=dko-M#aI*jTxGtCl(!sPRO!`VWzZ;IS$8R z*@c{IcfYmdF$3PyO51{ZUKlrHnPS4Lk#osXauq?9V1R`Nhr^c2Y{H7w7)Qq`5auF$ zh#_W7ky-ZG+k>n;w&MUF07V4=n>v^ue%D3eYrC~@yD8Soq(DirUS+m~K$o^eZafsp zBPEqgZ4BuQj{p7uZx3i{#aJg1`IdXDzF9ghIg%2~ez04A_UQ|^c}!6-G$nl`$1_MP zk0b|5r6@{{Nxuawh^dKNLpI97I{*eUIDs?dHWt)~zeZW@R0HUxFqXfCjjU)og$Pmt zft;j4sSt2XiYF3t35KW6Tj{;DvYNkEs)}EVEs3hJFhD@hd)q(i#r16rk%KDes4%hK zhzF|4D`ie|O-{t8a&U$)X@#zfjBtF5Y{5fW)^oj8&mm^=qlwGDTaMh5U4 zX-v$~WIUR2e6pmeC>@uUBE#sRwr@QJ7>aon3rK_;1N&f1?652Y=xMWrp$miJD}QOHW^R8pcwoJ44Km*Qt*}dPn6ifE`z`IGAvRqt0*_J*37GyFI|C6$1 zAIvkT-l12yr=%}qKXh$sc%rfsUY?n+(^X{u$dekwWiB={y-;Bach8h2J$ zPs|0qMyx9^)FKX)<*6TCf@Pksq%;I=67r3UDbAvWiUKa329iMj*0YaLjv6lTC-)4J zcV~P($UVR9;ggx(N@j7_L+%Cn*VvI)*jwlfhTV^3`|bR`?6t#p#HruiU+|CJW1T2G zas0Oj7!Jww{J=tEyW9;5-!61MogHyE_OqwP>g?5F*Tr`^%e~-}k#=?Qt~j#Zm_L~5 z>9z-~*A1+HmwQz_d?ahTA1K@&54+`4R`>PQlD*s;c5bXh*41H8s%?1f;?@VG!xg$OluC1*m`U%^r6o=!D(ejbF<2?~yMcdQ8;`ui|ufpn~`6a&}M!cn9rLzwUc!6N#xD9^Ddcfdsq zUHj{){%!}*9>c~0Thj*oLc!$9^ZbPpJDdP!nj5K!NCr$3Dun(;&wk>2m z89?RF^DWbtLH(d8$MF=J1~AM5ni7=e3%R8a3kRRyc&EH#+)Nx-J~pH9wgbmep9Z{4 zkJ4O-VMkDhy#)6Y-+2|64s8Gv4}Rs3dxSL{ zR9q`nD1e+ML5^lBtxJRfy&A`-HZ4dmEFuFy3&;-Lig-*!!B>6LXtLQZhNW>SG7Orv zKlp`}u~a-Y7qkmgzy{dIG-B$)Pdd-p04DE!+4%w0Bc<44@YIh!sJNJ^1TY4`pcLW} zh)@IEDMAxLssUW31C5m-1WjtapYV2V^tOfVeOtGsEo*b3z0lVYV%6bPPH!%3Hyo#Z zqbJh|_=G9OYE}&Ptl30%(rm(R2IE6q2QdZ--wQ~gpAUwoE~{dzlEwPAur0f>gMA$f z1v6-0m^RzjlUbp#(JQ$@xUE>&>_I~*?yLbxA+Ek494^{hx`)xyqbM96k?rqp?k=9* z><-1-4TjvX8k1AeAW3O!ptTpwa6mn7R$(Ner0vGm5bd0ifnzDQV~Gdx4qSObaq}Y# zHWpXoAMl(~(6QNK-TgLyYq+nF-W=W*Ta{EXyD;*OU=tN($lgpl1?&-zr4l#+C-@M? zybGGR52!vkB8Ri7RO|?&jiKf-AK*Yi23*y+J?s5xkjIvKr~Y=8-}mmMO_#iF4pzR5 z*~0c&ju@c{FXk{}Oh%GS z>Vz?G{7EwKT{;eaq`&R+i^6T#_2h*&$a7d+AdF@*m5qrArEU0XWHy7yf+m8FxOlgEF!ec|>rnbB>^~WZvE9r^SMpUHl zI6GN7**AS{L5#>M8aVW2bsQ3u(QYxYJtP=Vl7yN#2qw7`Cg*`OfsF21&-Ux)&>p%& zL@dkcYBzkf|2VS(vW6WZtGDkoKwYN4BN?vV1(p2zkTvx`9qyA+@WD5M6LZ365K2#h zz4oS`NzFD8J!ZT=vwrg2^)u(uGj=?F9{p5%D7=(`OtFK)GcV?_YlYcVpl#1NFk&DB z2I-{#tgX6ZA_O?;Yyye{;n^qjsuBjcw-eMtn30}Y`M{;U5TfKX=~&j)BNa=BMK-J9{A?pc| zGYBxLwlgzCrNjS0(HVY6m}*ab;eydLV;55ZOg9GD5@L_V9e;K5moKEKgoB~oTbq=5RThi}p73<`iAD)-#gLeA{45Q3kag)k|gYv<^Y^ z39#cNRZeX+rM8fr!Y?ViSaffC1VvH+&@Y26Avw(n(O4yvL$u=*4v4YPsFXVFu@^I4 zMZl8=M5ulKH_>g?>G)xKK2C05`yh z2A;fEkDDhK&;%l139gbpx-3=u;fE-OnpvAZ;iyIa5M z?K%vE5d&x`fg(i%^QMtj%~Y%(z(N}FxZJYkVg*=CFJ(wD+}WT9t*u%9RJby$RwOFM zTX*W{w=NPqmA$CUy0J*71!I7WZV5MTQSjuw++NCd zNK4GBDU6x;pP+c7^W*{{+Dw?H$Ekhh$$Dz187P{vET)d>n_A6TRqi&+INa%r1TPLe zRv~QO5vmu}5<}lRl#_;?XO)DDbO{ zK1tryzVWMK@WOObBa``HH2Mq|qFtd|CEf|~S&X^O^G;Wg6ot2bCk*^r2i zruh;35!(Uw78@OcM$vy_K0QVdwvdb;VXPv_qIbaSVy)4Z05AK# zo&MY-L$Rnk^?#I0ph}e~YA25N=>SfAF1k(QAN?xQuKLlXYQkm_`-Bx|YF1|{^jFJp zj;RJ^ima8CQ5lxb&Sr+lJkc{oa*`xR?u_>p&}VOpyN}cCXd)=jxl{kTL#-=IlySi*++X?&+@Y ze?uv(07^Q4QTCJndR>Th(G*yPEtC*R1Q<+-z3;pf)m5gHHp;Io6LlbyW;tK*70p>0 zJ?P@Kt8Rb`W#CE8bQI_+G~hPw>yM{B$@D`AoT&G-&lmsJNO&ATG7D7bFs|d63s|5= z%4(22J{(@ay;={a^|960sF480p;TEcxCjNJxnYrdRCvBVBa^L#YCmL;U2tXKrKF6L z#=wg*IK-xytL?z5Jc@o?fXeULYZvWG>?^QWb1|{6Xt8QZpURoob1Q?7eGiYH7_&}J z?lfi`YPo*mPSed4%kd#o;-S84wgv*RdH_N#lKuQ zs+*r1BvSv)hO)wJ5?0MNbL5QxPzSB{^N!LsMB|tkCOw$=ddj=ncU~CxTsiv3-8Xfq z(30kgC*a@S&e5mEwjk8nuWlO3teQw|^REgpNY_M|m5}#-*ld8AnDfNDMx2??C%&)z z(=$hE^6mI<2~K3UiFeI`yDC50qMA!EL#*+b%@D1*SIny%YwXP>nKo9o_RN>3eL3eB zU^eG8(%X<^V}DU!vwP010}b|Vy=B<0 zH6ioe-);>cfigwQ#mqd*u=h(Bo@L6($y%)qOwQpfpUfjRSHjIxY@T9MQD6$$GgY*v zo}C9CJ1^b1W?%KI^Fp$zDjkhf=Mz!f&OQ9gZ=E}g1_Tgm4N?N|;Zw3hPHVz>Xbtm- zHBW(;xL|9(ATz}j9-B99XQI%gcdv+M>7V-e-IGdw)(=|Ql(IW6zo=Cl%jBL1E*4|I zC1KuMrpP!iQs&G}kW5sNbM-Dw?Xx=H-m>$DdG@BO|HF)9+x2fTpWj_%f3kZ3jo(>! ziv4VFy1#Y$=BQ+CZX`6}ay6}W$^pdMS3gj0iLx&l&Bj`et`oKQ_Y!X3^-q__? zUDdwddsgYDOw`Jb@)e<{Oy&BVlCsS_d`VNRWjfDoe=MuNS`%K<6l+ZpfzskunQNI; zti9$BT2@FYWy^R>^y-#j29vd}BRTO|9ff6nM7wonzxGNIDDch8R7F331KQe)gO|*! z=wlzhm|8`DNy^om^)Cx22ijKvfTJeXG{8<2TW1K)YjtPT)U3Bcu~s$mSI!KvS;^XTgqN&_-s%ZRt+O3kjalnd zbn*4X$;SoGdLxW!SD;Orj=E#-B~7#0Oc9k_-f{UHMEXq7csDOoW+Bkz*O2VxtE8V- z%;zVavSe*^EB&b^olfSavwbp~BW3(f5Tk0{)}1d%tW8V+m~wdc;yHb47{nQtCZ zd2jj{ZJW6I2{Oja*!}b)CdNbU5yw~@@Z!J3LCacq|8rv zIcLrNe9uXrpYT$+BKu>R9se?#@Y2E!97N{-=$~g6InBNmk$-ekOFgg6W<7hnR?Fbo zb8IrkPc34~7ug`f!++fptwMqO>DR=hm_N0A(O?NV&sXJmYBY2GlBO8$N(*1l%V@I8 zJQFsM zU!H441@l(hVy&5f1Y)n8j~=~zb?Ebkxqs@3$LH6I{@B)v$~L<#Yq%QQfwfk$ikxam zXi=A&Otk)>aDR(Jix5-Tv|6Iiv52a3ojT3EkNwnqtzd>}=np^Dnw=bkhOMm2?1{Gd zH4{@a=5$YgikjurMO2No)w_jEoz+=9Z6*0LJ1$$~&+oV>0;MH36xI34G5TSg`7IZz z@#Utb4T;*rZ~hyCU;6nKowKRvt<$Ps+8bq^g>;`fNvmYO($Q}no;nltbdFn})cU?S z1F$*1nz@wD+@Rg`hDG9Pn`3#V$)on=@n2h?CQ`GHXD(*5P?C7`T%xVa@8r@v*;-8g z<};ox<|_g*`HsbGglPJGD-FSy?njm8m2|}r^GbTt?V=G;dWU%>ebR5MoDi> z@@{Z+H{QSNKUr?s!n-+rx~PuC890?O|LWnUZ;xF!o}KNvm3`aXrwGn8fBe-~&#_G5 z^zm!^UtKoNcs(xqIGx`bjU@@rsDsgW4}ao9cl735FK+sOGJ!v0)b(5;k-qkhUpy1a zI3jyv?{fO+HANX0XY{dL)OP+r(@NC|&(7*b(Y5xU>vc+D&pDjDZ>$983T(6$v>LH< z=8|{*>}c7hSV%JZF1Z-T(r3I;x7Nvz&28PuR6rWfMoHFqFw=P!#I)M0H_nuNZtq%S z;MCj4XE&Um)is&?Y=sJgnPb?sUt2nJjJdoOqB)Xaxe3oEhQ5+VN^a&1%{O^DDkdT# z=K}gimo18O@=5}Il%-X3CJ%F|0wt9A*N$95s~UW;Fp_s|YcN%EvzNODQU!kYv*tmv zE1EaNZpG0{VRu1WqVqI?=i4dI(IipPEW3v@2%_#nr@>?O{syz`=m)Fag}l2&AFSr9 z-Vs-8v%A-1wSyV06do*o_ivD^t|+I2srp{Zk}{M-kTc7Ag0kF>2Em!l+;WB_8w)%V z*Q<>nd(-b5ia@>_Q;x*-qZ%h<(zJY?Oez!Z{S=XHl9vtAb~hmAB=<_UJgk<5<`Vzm uXI`3C>)d>3))) -mist_io( - .clk_sys (clk_24 ), - .conf_str (CONF_STR ), - .SPI_SCK (SPI_SCK ), - .CONF_DATA0 (CONF_DATA0 ), - .SPI_SS2 (SPI_SS2 ), - .SPI_DO (SPI_DO ), - .SPI_DI (SPI_DI ), - .buttons (buttons ), - .switches (switches ), - .scandoublerD (scandoublerD ), - .ypbpr (ypbpr ), - .ps2_key (ps2_key ), - .joystick_0 (joystick_0 ), - .joystick_1 (joystick_1 ), - .status (status ) - ); - -dac #( - .msbi_g(15)) -dac( - .clk_i(clk_24), - .res_n_i(1), - .dac_i({audio,5'd0}), - .dac_o(AUDIO_L) - ); - -// Rotated Normal -wire m_up = ~status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_up | joystick_0[3] | joystick_1[3]; -wire m_down = ~status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_down | joystick_0[2] | joystick_1[2]; -wire m_left = ~status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_left | joystick_0[1] | joystick_1[1]; -wire m_right = ~status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_right | joystick_0[0] | joystick_1[0]; -wire m_fire = btn_fire1 | joystick_0[4] | joystick_1[4]; -wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5]; - -reg btn_one_player = 0; -reg btn_two_players = 0; -reg btn_left = 0; -reg btn_right = 0; -reg btn_down = 0; -reg btn_up = 0; -reg btn_fire1 = 0; -reg btn_fire2 = 0; -reg btn_fire3 = 0; -reg btn_coin = 0; -wire pressed = ps2_key[9]; -wire [7:0] code = ps2_key[7:0]; - -always @(posedge clk_24) begin - reg old_state; - old_state <= ps2_key[10]; - if(old_state != ps2_key[10]) begin - case(code) - 'h75: btn_up <= pressed; // up - 'h72: btn_down <= pressed; // down - 'h6B: btn_left <= pressed; // left - 'h74: btn_right <= pressed; // right - 'h76: btn_coin <= pressed; // ESC - 'h05: btn_one_player <= pressed; // F1 - 'h06: btn_two_players <= pressed; // F2 - 'h14: btn_fire3 <= pressed; // ctrl - 'h11: btn_fire2 <= pressed; // alt - 'h29: btn_fire1 <= pressed; // Space - endcase - end -end - -endmodule \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/ROM/GAL_FIR.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/ROM/GAL_FIR.vhd deleted file mode 100644 index 5aff2022..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/ROM/GAL_FIR.vhd +++ /dev/null @@ -1,534 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity GAL_FIR is -port ( - clk : in std_logic; - addr : in std_logic_vector(12 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of GAL_FIR is - type rom is array(0 to 8191) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"AC",X"68",X"72",X"C7",X"93",X"3F",X"80",X"C8",X"5C",X"A1",X"22",X"90",X"B9",X"8A",X"41",X"62", - X"C2",X"A1",X"40",X"6A",X"C9",X"7F",X"64",X"3C",X"BC",X"AD",X"5B",X"4C",X"D4",X"62",X"3D",X"D3", - X"7F",X"31",X"A3",X"BE",X"5D",X"49",X"C7",X"7D",X"28",X"C0",X"A1",X"7A",X"7D",X"2B",X"C9",X"91", - X"80",X"6B",X"39",X"95",X"BA",X"91",X"27",X"C1",X"91",X"7E",X"6D",X"31",X"C0",X"A4",X"7C",X"7B", - X"37",X"80",X"CB",X"7E",X"88",X"64",X"40",X"8F",X"C3",X"83",X"83",X"68",X"36",X"D0",X"8C",X"29", - X"B4",X"B1",X"52",X"4B",X"E9",X"3E",X"74",X"C4",X"73",X"81",X"2B",X"AD",X"B9",X"4E",X"4B",X"CB", - X"91",X"76",X"33",X"B6",X"A5",X"6E",X"4A",X"63",X"D7",X"7C",X"3E",X"7E",X"DE",X"45",X"67",X"C1", - X"84",X"2D",X"A8",X"A9",X"20",X"AC",X"B5",X"7E",X"47",X"5F",X"DD",X"6E",X"44",X"BD",X"97",X"22", - X"AE",X"A4",X"25",X"CB",X"93",X"77",X"3C",X"78",X"CB",X"83",X"29",X"B3",X"AB",X"7D",X"5D",X"44", - X"A4",X"BC",X"79",X"8C",X"3A",X"76",X"CF",X"78",X"44",X"6B",X"D9",X"6B",X"3B",X"9A",X"CC",X"26", - X"A4",X"A3",X"1D",X"BA",X"A9",X"83",X"71",X"3A",X"8B",X"CC",X"6A",X"3E",X"E5",X"28",X"A4",X"A3", - X"1E",X"C9",X"9C",X"78",X"32",X"94",X"C4",X"74",X"88",X"2A",X"A2",X"BC",X"1A",X"E2",X"4B",X"86", - X"B3",X"72",X"48",X"68",X"D2",X"83",X"32",X"A4",X"B2",X"73",X"4E",X"5A",X"C8",X"9C",X"2C",X"90", - X"C1",X"7B",X"5E",X"41",X"CC",X"99",X"6F",X"3A",X"8B",X"C9",X"7A",X"84",X"23",X"BC",X"9D",X"33", - X"CC",X"82",X"24",X"D7",X"6C",X"47",X"D1",X"87",X"5C",X"41",X"C5",X"9F",X"71",X"35",X"A8",X"B9", - X"67",X"4F",X"5F",X"CE",X"8A",X"43",X"C6",X"80",X"54",X"4A",X"B1",X"AE",X"87",X"50",X"4F",X"C6", - X"9F",X"55",X"45",X"BB",X"AC",X"5C",X"41",X"A9",X"BE",X"5C",X"4C",X"72",X"D4",X"71",X"42",X"DA", - X"20",X"CF",X"6C",X"3D",X"D5",X"8A",X"78",X"39",X"7B",X"BF",X"99",X"75",X"37",X"99",X"C7",X"28", - X"7B",X"C3",X"91",X"58",X"46",X"9D",X"BB",X"88",X"60",X"40",X"9A",X"BB",X"8C",X"3B",X"6A",X"BA", - X"AC",X"31",X"7F",X"C8",X"2F",X"78",X"DC",X"33",X"AE",X"80",X"34",X"EE",X"38",X"74",X"D5",X"1F", - X"98",X"BA",X"82",X"58",X"4A",X"D6",X"86",X"56",X"49",X"F0",X"34",X"73",X"BD",X"9A",X"43",X"67", - X"C3",X"8D",X"2E",X"8B",X"B9",X"40",X"C6",X"33",X"B7",X"A5",X"27",X"8A",X"BA",X"42",X"BF",X"8A", - X"3A",X"6F",X"D1",X"5C",X"41",X"DF",X"6A",X"42",X"C3",X"A4",X"33",X"80",X"CC",X"5C",X"43",X"89", - X"BE",X"96",X"53",X"4E",X"8D",X"D4",X"2E",X"BD",X"56",X"6C",X"DA",X"53",X"47",X"9C",X"C8",X"2A", - X"75",X"B3",X"B0",X"2F",X"80",X"CA",X"2B",X"81",X"CD",X"35",X"7E",X"CE",X"32",X"81",X"CD",X"74", - X"40",X"74",X"D8",X"4E",X"58",X"D3",X"85",X"4D",X"53",X"AE",X"B8",X"61",X"3D",X"9F",X"C3",X"30", - X"86",X"D0",X"5E",X"47",X"7D",X"C6",X"91",X"4E",X"4E",X"A9",X"B9",X"6D",X"34",X"9F",X"B7",X"3F", - X"C6",X"7A",X"37",X"81",X"C5",X"8C",X"33",X"88",X"D3",X"44",X"59",X"82",X"C8",X"88",X"42",X"61", - X"AF",X"A2",X"44",X"D9",X"48",X"52",X"89",X"BC",X"99",X"2E",X"7E",X"B4",X"38",X"B7",X"9E",X"20", - X"E4",X"56",X"63",X"D9",X"56",X"43",X"B1",X"B8",X"37",X"6B",X"D3",X"6D",X"31",X"C8",X"65",X"8D", - X"B9",X"0B",X"BA",X"86",X"4D",X"D7",X"4E",X"4B",X"E7",X"3C",X"95",X"AD",X"1D",X"D8",X"72",X"35", - X"B4",X"A5",X"2F",X"B3",X"B6",X"44",X"57",X"93",X"CB",X"67",X"3F",X"A1",X"C7",X"21",X"89",X"9C", - X"5A",X"D8",X"20",X"A3",X"BA",X"25",X"89",X"AD",X"37",X"D8",X"5D",X"53",X"DC",X"77",X"43",X"70", - X"E1",X"46",X"59",X"83",X"CC",X"6E",X"37",X"E7",X"56",X"4E",X"86",X"D3",X"27",X"9E",X"AA",X"44", - X"C0",X"19",X"E9",X"54",X"63",X"DB",X"51",X"4D",X"88",X"CF",X"30",X"91",X"C5",X"66",X"35",X"C1", - X"9C",X"33",X"79",X"A7",X"BA",X"53",X"41",X"DD",X"4B",X"73",X"D2",X"25",X"7F",X"BB",X"9D",X"37", - X"68",X"A9",X"BD",X"3B",X"5C",X"CF",X"61",X"47",X"C9",X"9E",X"47",X"55",X"AF",X"96",X"5D",X"D0", - X"28",X"7E",X"D3",X"48",X"51",X"C7",X"95",X"21",X"BB",X"A6",X"3A",X"67",X"C3",X"81",X"37",X"DE", - X"7D",X"3F",X"72",X"AA",X"B4",X"15",X"DC",X"6C",X"47",X"D2",X"71",X"28",X"EB",X"2E",X"9F",X"93", - X"6C",X"9C",X"37",X"DB",X"43",X"AC",X"37",X"D3",X"4F",X"AC",X"8D",X"1B",X"DF",X"7E",X"46",X"6B", - X"BA",X"A5",X"35",X"73",X"CB",X"41",X"7E",X"C8",X"1D",X"D3",X"60",X"5F",X"DB",X"44",X"57",X"C2", - X"A2",X"41",X"5B",X"AE",X"96",X"5E",X"CC",X"10",X"CF",X"83",X"31",X"DF",X"59",X"46",X"CC",X"87", - X"28",X"D7",X"84",X"3D",X"7A",X"DD",X"3A",X"7B",X"C8",X"36",X"66",X"C8",X"60",X"9A",X"8F",X"29", - X"A8",X"B3",X"83",X"1F",X"D6",X"81",X"33",X"C4",X"82",X"2A",X"D4",X"6B",X"70",X"CA",X"1B",X"A9", - X"AB",X"22",X"AE",X"9E",X"49",X"D3",X"45",X"5A",X"A1",X"BB",X"70",X"27",X"E9",X"49",X"72",X"CC", - X"38",X"67",X"B6",X"AD",X"41",X"57",X"B7",X"8C",X"39",X"E4",X"70",X"4B",X"63",X"C7",X"52",X"AE", - X"8A",X"36",X"8A",X"BB",X"8E",X"2F",X"87",X"AB",X"B2",X"2D",X"72",X"94",X"CD",X"39",X"67",X"D9", - X"2B",X"86",X"C8",X"50",X"4D",X"BC",X"A1",X"3F",X"6B",X"BC",X"7C",X"48",X"E0",X"20",X"BA",X"83", - X"43",X"D4",X"26",X"BD",X"A2",X"3E",X"6C",X"CA",X"8A",X"38",X"7B",X"AF",X"AE",X"23",X"91",X"C0", - X"37",X"76",X"A3",X"C2",X"39",X"63",X"D9",X"48",X"5A",X"93",X"C9",X"43",X"62",X"90",X"B1",X"37", - X"D1",X"53",X"74",X"B1",X"37",X"F6",X"23",X"82",X"C3",X"52",X"4A",X"BB",X"75",X"95",X"88",X"3D", - X"90",X"C3",X"76",X"3B",X"87",X"A9",X"70",X"A6",X"61",X"4F",X"AE",X"B6",X"50",X"4B",X"E2",X"4A", - X"63",X"DC",X"3E",X"63",X"92",X"CC",X"4F",X"4D",X"E3",X"4A",X"5B",X"89",X"D0",X"47",X"5E",X"90", - X"D0",X"49",X"5B",X"7E",X"C6",X"76",X"3E",X"8C",X"AA",X"A4",X"15",X"CD",X"89",X"43",X"80",X"BD", - X"65",X"A8",X"3D",X"8E",X"CF",X"0B",X"C0",X"8E",X"46",X"76",X"C9",X"7A",X"3E",X"88",X"AA",X"A8", - X"18",X"BF",X"9C",X"2E",X"C3",X"85",X"2B",X"DC",X"6C",X"45",X"DB",X"4B",X"5F",X"92",X"AD",X"3D", - X"C3",X"4F",X"86",X"A6",X"75",X"81",X"36",X"E7",X"37",X"A6",X"7D",X"A5",X"5A",X"58",X"D8",X"4E", - X"56",X"AB",X"8E",X"49",X"DD",X"68",X"40",X"8A",X"B0",X"53",X"C3",X"4F",X"60",X"92",X"C6",X"51", - X"54",X"9A",X"C5",X"55",X"4D",X"93",X"C2",X"70",X"2F",X"E3",X"50",X"5B",X"8D",X"AF",X"48",X"AA", - X"81",X"98",X"4C",X"65",X"C1",X"66",X"BB",X"23",X"B0",X"9B",X"39",X"83",X"A4",X"B3",X"1A",X"B0", - X"9D",X"31",X"C3",X"8E",X"2B",X"E2",X"54",X"5A",X"DC",X"32",X"86",X"CA",X"14",X"C9",X"83",X"43", - X"83",X"AD",X"A6",X"15",X"DA",X"6D",X"4C",X"87",X"AF",X"63",X"B9",X"3A",X"8C",X"C5",X"0D",X"CC", - X"79",X"58",X"74",X"C9",X"7D",X"42",X"7C",X"B7",X"5C",X"A9",X"7B",X"41",X"93",X"B6",X"81",X"32", - X"9D",X"92",X"6B",X"87",X"9D",X"94",X"4A",X"6C",X"B7",X"A4",X"1B",X"BD",X"88",X"4D",X"7D",X"BD", - X"4D",X"99",X"8A",X"51",X"CF",X"1B",X"F2",X"56",X"5A",X"72",X"C3",X"4B",X"BE",X"63",X"52",X"E1", - X"2F",X"77",X"91",X"93",X"52",X"C0",X"37",X"E1",X"53",X"5A",X"DA",X"35",X"77",X"85",X"D5",X"39", - X"6D",X"80",X"D3",X"50",X"58",X"D3",X"2D",X"9A",X"B2",X"23",X"BC",X"8C",X"52",X"71",X"C1",X"8D", - X"3E",X"76",X"B3",X"6F",X"6D",X"A1",X"49",X"C9",X"2E",X"D1",X"38",X"C6",X"55",X"8B",X"7C",X"86", - X"B2",X"33",X"7E",X"AD",X"99",X"3C",X"80",X"A3",X"6E",X"88",X"98",X"50",X"AA",X"79",X"99",X"27", - X"FB",X"1D",X"AE",X"63",X"8F",X"94",X"51",X"B0",X"4A",X"AD",X"86",X"8B",X"39",X"EA",X"1B",X"AB", - X"9A",X"4C",X"73",X"B8",X"9A",X"3A",X"76",X"AC",X"64",X"88",X"8B",X"6D",X"A6",X"71",X"97",X"40", - X"8C",X"B5",X"4A",X"A0",X"68",X"86",X"8C",X"98",X"69",X"59",X"DE",X"1F",X"AB",X"A0",X"36",X"A8", - X"A7",X"28",X"E0",X"58",X"59",X"CE",X"37",X"82",X"C8",X"2E",X"A4",X"5A",X"AF",X"62",X"8E",X"C2", - X"2D",X"79",X"91",X"C2",X"2A",X"96",X"77",X"8A",X"99",X"8E",X"3D",X"C7",X"61",X"57",X"9D",X"A3", - X"44",X"DE",X"34",X"88",X"B1",X"37",X"89",X"A3",X"B3",X"15",X"CB",X"73",X"43",X"BA",X"8D",X"47", - X"9D",X"6F",X"C9",X"15",X"D1",X"72",X"53",X"CA",X"48",X"6B",X"9B",X"89",X"6A",X"A0",X"57",X"BE", - X"45",X"9C",X"A5",X"5E",X"54",X"CA",X"63",X"52",X"E1",X"25",X"AE",X"93",X"35",X"E5",X"2A",X"A5", - X"97",X"40",X"8A",X"9A",X"73",X"81",X"8E",X"57",X"CC",X"68",X"67",X"5D",X"C5",X"94",X"43",X"6E", - X"AA",X"A8",X"30",X"9D",X"6E",X"B3",X"6B",X"4B",X"AB",X"79",X"90",X"93",X"50",X"89",X"81",X"8A", - X"A4",X"42",X"9B",X"7F",X"67",X"9F",X"A8",X"48",X"80",X"BA",X"23",X"C5",X"6A",X"5E",X"91",X"99", - X"62",X"9A",X"91",X"6A",X"5A",X"D9",X"3D",X"81",X"B2",X"34",X"C5",X"7A",X"3F",X"BB",X"90",X"3D", - X"D0",X"50",X"65",X"95",X"94",X"63",X"C6",X"2D",X"A6",X"91",X"3D",X"CA",X"5F",X"66",X"91",X"97", - X"A6",X"35",X"A6",X"97",X"2E",X"D9",X"41",X"8F",X"A4",X"3E",X"A2",X"B0",X"2E",X"B5",X"7A",X"55", - X"C9",X"3F",X"84",X"C3",X"42",X"8A",X"72",X"9F",X"65",X"95",X"72",X"84",X"8A",X"58",X"C6",X"73", - X"47",X"D9",X"35",X"90",X"9F",X"4D",X"80",X"A8",X"A1",X"30",X"8F",X"8B",X"C5",X"18",X"B5",X"70", - X"65",X"B0",X"5D",X"93",X"93",X"7B",X"48",X"CB",X"52",X"7D",X"B0",X"3D",X"98",X"BA",X"2E",X"AD", - X"86",X"4A",X"BD",X"6E",X"4C",X"DA",X"53",X"78",X"77",X"96",X"75",X"83",X"82",X"82",X"A5",X"3D", - X"86",X"A2",X"A7",X"31",X"8B",X"8E",X"C3",X"20",X"AA",X"92",X"3A",X"C0",X"87",X"51",X"77",X"AD", - X"62",X"B9",X"4F",X"7F",X"BC",X"1E",X"BF",X"7E",X"51",X"C3",X"50",X"72",X"C0",X"49",X"8A",X"81", - X"72",X"AA",X"7B",X"55",X"8C",X"83",X"CA",X"2B",X"97",X"9C",X"4B",X"86",X"9F",X"B0",X"14",X"EA", - X"3C",X"8A",X"9B",X"51",X"C2",X"25",X"C7",X"70",X"5F",X"AF",X"52",X"C6",X"29",X"B8",X"7F",X"5F", - X"A3",X"5C",X"CB",X"26",X"AE",X"8B",X"3C",X"D6",X"48",X"8A",X"74",X"A2",X"8D",X"3F",X"D3",X"2A", - X"B9",X"7B",X"4D",X"A6",X"69",X"B6",X"6E",X"56",X"8A",X"A1",X"64",X"C3",X"28",X"B2",X"7D",X"60", - X"A6",X"58",X"D4",X"11",X"D1",X"5C",X"7A",X"A8",X"42",X"96",X"C7",X"27",X"A9",X"90",X"44",X"89", - X"9F",X"69",X"90",X"A7",X"25",X"DB",X"46",X"7C",X"B7",X"42",X"9A",X"6E",X"99",X"8C",X"81",X"41", - X"C7",X"7A",X"58",X"8D",X"83",X"B2",X"29",X"C1",X"6E",X"52",X"DA",X"44",X"83",X"B6",X"2A",X"C4", - X"41",X"A6",X"7A",X"76",X"98",X"5B",X"B6",X"86",X"42",X"A2",X"8A",X"4B",X"95",X"97",X"65",X"B7", - X"56",X"6C",X"D2",X"1E",X"B6",X"94",X"36",X"DD",X"38",X"96",X"7B",X"70",X"9E",X"95",X"59",X"77", - X"82",X"8D",X"7C",X"78",X"DC",X"01",X"CD",X"70",X"5D",X"76",X"B4",X"91",X"35",X"BD",X"48",X"D3", - X"36",X"8E",X"B7",X"2C",X"BE",X"49",X"CA",X"4C",X"72",X"CB",X"29",X"B9",X"82",X"3B",X"CC",X"71", - X"4B",X"D1",X"4F",X"6A",X"8D",X"C9",X"46",X"6A",X"CA",X"28",X"99",X"A9",X"61",X"59",X"AA",X"78", - X"8F",X"98",X"35",X"CE",X"64",X"58",X"95",X"A7",X"49",X"AC",X"57",X"9B",X"7C",X"70",X"DE",X"14", - X"A9",X"A3",X"3F",X"7B",X"C9",X"57",X"5F",X"D6",X"17",X"C5",X"7D",X"58",X"9E",X"71",X"B8",X"3D", - X"72",X"A7",X"6C",X"A7",X"80",X"3A",X"E5",X"22",X"A5",X"61",X"B6",X"86",X"38",X"D9",X"56",X"57", - X"9A",X"8E",X"64",X"97",X"96",X"7D",X"45",X"CC",X"5D",X"5A",X"A8",X"AA",X"3C",X"7E",X"97",X"C1", - X"22",X"9B",X"A7",X"45",X"7F",X"A1",X"B4",X"1D",X"BB",X"51",X"B9",X"7A",X"45",X"91",X"A5",X"67", - X"B8",X"34",X"9E",X"A8",X"35",X"88",X"B0",X"54",X"A8",X"8C",X"31",X"E7",X"41",X"6A",X"C7",X"41", - X"85",X"BA",X"2D",X"B1",X"A0",X"35",X"90",X"9F",X"75",X"A0",X"5D",X"52",X"CA",X"59",X"84",X"9A", - X"52",X"B2",X"66",X"AF",X"43",X"6E",X"BC",X"59",X"89",X"95",X"8B",X"74",X"44",X"AE",X"85",X"96", - X"7B",X"4A",X"8B",X"BD",X"7E",X"2F",X"D2",X"68",X"4D",X"D9",X"41",X"6F",X"CA",X"4D",X"62",X"A0", - X"B7",X"3C",X"76",X"D1",X"2E",X"98",X"B1",X"2A",X"BB",X"8D",X"2F",X"E2",X"4A",X"6C",X"C4",X"49", - X"64",X"A5",X"88",X"80",X"9E",X"2A",X"DD",X"59",X"54",X"CE",X"60",X"54",X"9E",X"9D",X"42",X"BF", - X"92",X"34",X"98",X"B7",X"40",X"77",X"9F",X"BC",X"28",X"93",X"B8",X"44",X"67",X"A7",X"AC",X"41", - X"6F",X"9F",X"91",X"50",X"C4",X"37",X"B1",X"7A",X"5B",X"DD",X"4C",X"58",X"C6",X"5D",X"51",X"BA", - X"82",X"47",X"D6",X"6B",X"45",X"AC",X"60",X"C5",X"3D",X"7D",X"CA",X"33",X"8D",X"AE",X"42",X"88", - X"CB",X"4F",X"5D",X"84",X"C3",X"31",X"B4",X"6B",X"6C",X"AD",X"73",X"AB",X"23",X"D5",X"6B",X"43", - X"D1",X"6A",X"47",X"CB",X"4B",X"77",X"C4",X"2B",X"BC",X"94",X"35",X"C6",X"77",X"3E",X"9E",X"94", - X"77",X"A5",X"43",X"7C",X"99",X"BD",X"3A",X"79",X"C8",X"2B",X"B8",X"83",X"37",X"D2",X"77",X"4F", - X"78",X"BD",X"43",X"AC",X"80",X"66",X"C8",X"28",X"89",X"A3",X"AF",X"2A",X"92",X"B9",X"3D",X"80", - X"CC",X"27",X"9A",X"B0",X"48",X"66",X"AD",X"8D",X"44",X"D0",X"6A",X"44",X"AA",X"87",X"6B",X"C7", - X"25",X"A3",X"AB",X"41",X"70",X"AD",X"71",X"9C",X"74",X"45",X"C9",X"91",X"51",X"5D",X"D9",X"4E", - X"62",X"C7",X"61",X"4C",X"A4",X"97",X"78",X"95",X"3D",X"9E",X"A8",X"30",X"D4",X"4B",X"81",X"B2", - X"33",X"C5",X"65",X"A4",X"63",X"4E",X"A8",X"98",X"5F",X"C0",X"30",X"96",X"B5",X"3D",X"75",X"B2", - X"92",X"31",X"B1",X"A5",X"33",X"A4",X"AD",X"43",X"68",X"B4",X"7A",X"51",X"DB",X"45",X"74",X"C9", - X"2D",X"95",X"AD",X"3B",X"8E",X"A9",X"3D",X"C0",X"70",X"62",X"D5",X"27",X"A7",X"9E",X"3F",X"7C", - X"BC",X"50",X"A4",X"8E",X"34",X"A3",X"A1",X"4E",X"99",X"BC",X"35",X"7B",X"BD",X"67",X"45",X"AA", - X"94",X"62",X"C1",X"3E",X"74",X"CB",X"41",X"74",X"A3",X"50",X"B6",X"9F",X"47",X"68",X"A6",X"AF", - X"4A",X"62",X"94",X"AC",X"3F",X"AD",X"A9",X"3F",X"72",X"8A",X"C7",X"54",X"5E",X"7A",X"C0",X"80", - X"4D",X"6B",X"B7",X"71",X"86",X"9F",X"2C",X"DC",X"60",X"59",X"79",X"BB",X"7C",X"40",X"A8",X"AC", - X"63",X"48",X"D4",X"67",X"56",X"79",X"B8",X"8D",X"38",X"BE",X"7E",X"3C",X"B0",X"97",X"54",X"C2", - X"37",X"98",X"B4",X"32",X"90",X"B9",X"4F",X"5E",X"B2",X"A0",X"34",X"9F",X"A3",X"35",X"AD",X"9B", - X"38",X"BB",X"97",X"4E",X"64",X"A4",X"94",X"53",X"D0",X"45",X"6A",X"C2",X"6E",X"42",X"CC",X"77", - X"52",X"73",X"BB",X"61",X"89",X"B2",X"2D",X"9C",X"B4",X"43",X"77",X"C5",X"57",X"59",X"93",X"A6", - X"5B",X"B6",X"50",X"63",X"BE",X"8D",X"4D",X"6A",X"A2",X"AA",X"6F",X"3F",X"C2",X"86",X"4B",X"75", - X"BD",X"76",X"4B",X"D2",X"5A",X"5A",X"8A",X"BF",X"5B",X"56",X"B3",X"9F",X"4E",X"66",X"C4",X"5D", - X"51",X"C0",X"68",X"70",X"C1",X"3E",X"75",X"BB",X"50",X"A6",X"88",X"3A",X"AB",X"A4",X"79",X"3A", - X"BC",X"8E",X"4A",X"74",X"B7",X"82",X"42",X"D2",X"5F",X"5A",X"7F",X"B4",X"8D",X"41",X"86",X"C0", - X"55",X"5F",X"C0",X"44",X"96",X"B6",X"5A",X"5A",X"84",X"BD",X"78",X"52",X"6C",X"BA",X"82",X"41", - X"BD",X"83",X"3E",X"A9",X"91",X"56",X"CA",X"38",X"95",X"AA",X"39",X"8B",X"AE",X"4D",X"8C",X"AC", - X"35",X"BC",X"79",X"52",X"C1",X"5A",X"80",X"C2",X"41",X"73",X"A8",X"4C",X"B1",X"9C",X"63",X"4F", - X"BB",X"8B",X"4B",X"70",X"B2",X"7F",X"46",X"D3",X"48",X"A3",X"94",X"3D",X"94",X"B6",X"52",X"61", - X"BD",X"49",X"91",X"B9",X"58",X"61",X"77",X"BD",X"4D",X"A9",X"84",X"43",X"CF",X"6A",X"58",X"74", - X"C2",X"57",X"93",X"61",X"84",X"BB",X"2E",X"B6",X"86",X"4B",X"C7",X"71",X"54",X"76",X"AF",X"73", - X"5D",X"D2",X"40",X"85",X"B7",X"59",X"5A",X"94",X"AF",X"40",X"9D",X"A1",X"32",X"BD",X"71",X"72", - X"BC",X"51",X"60",X"97",X"AC",X"7F",X"47",X"8D",X"B7",X"57",X"5B",X"C1",X"7B",X"52",X"73",X"AB", - X"8B",X"44",X"C1",X"82",X"42",X"BD",X"75",X"4B",X"B0",X"9D",X"6A",X"50",X"8A",X"AD",X"8E",X"53", - X"65",X"9C",X"AE",X"65",X"51",X"AF",X"99",X"43",X"80",X"B4",X"7E",X"3D",X"B9",X"6B",X"66",X"C2", - X"45",X"B4",X"81",X"50",X"72",X"BC",X"6E",X"4E",X"BA",X"7A",X"4A",X"C1",X"6F",X"5A",X"BB",X"89", - X"5C",X"5E",X"9B",X"AF",X"5E",X"5C",X"CA",X"43",X"87",X"B0",X"41",X"85",X"BA",X"4D",X"77",X"BA", - X"76",X"4A",X"A7",X"9D",X"54",X"61",X"AA",X"9C",X"47",X"7B",X"B2",X"8B",X"51",X"6C",X"9A",X"A4", - X"42",X"A4",X"A6",X"3A",X"A5",X"97",X"3F",X"9E",X"A7",X"78",X"4E",X"7F",X"B1",X"8A",X"58",X"64", - X"B8",X"88",X"48",X"87",X"B5",X"6E",X"49",X"BE",X"59",X"93",X"A5",X"46",X"74",X"9E",X"A3",X"35", - X"C2",X"72",X"55",X"C2",X"5B",X"60",X"B9",X"79",X"48",X"C8",X"57",X"84",X"B1",X"4B",X"6C",X"97", - X"AC",X"3F",X"8C",X"AF",X"47",X"AF",X"89",X"4A",X"7D",X"A4",X"9E",X"4F",X"6A",X"B1",X"8E",X"45", - X"88",X"B2",X"70",X"4B",X"A7",X"9C",X"41",X"AD",X"96",X"49",X"7B",X"B6",X"77",X"4B",X"B4",X"8D", - X"56",X"67",X"A2",X"A0",X"3E",X"B2",X"84",X"45",X"AC",X"9A",X"78",X"44",X"B1",X"80",X"52",X"C9", - X"4B",X"7E",X"B7",X"3C",X"A1",X"99",X"40",X"9F",X"A3",X"7C",X"4C",X"8A",X"B0",X"76",X"4C",X"9D", - X"A6",X"3F",X"9C",X"A5",X"5E",X"5C",X"B7",X"85",X"4E",X"7E",X"B4",X"6A",X"56",X"CD",X"4B",X"99", - X"6F",X"69",X"C4",X"45",X"89",X"B2",X"60",X"60",X"7F",X"BB",X"57",X"6E",X"B4",X"84",X"66",X"59", - X"BD",X"4A",X"9F",X"A0",X"5B",X"5F",X"A1",X"A4",X"65",X"57",X"94",X"A3",X"8E",X"46",X"8A",X"9B", - X"58",X"B7",X"78",X"4C",X"9B",X"A1",X"40",X"AF",X"87",X"42",X"B4",X"80",X"5E",X"BB",X"4B",X"7D", - X"BB",X"42",X"95",X"A1",X"42",X"AA",X"98",X"59",X"64",X"A4",X"A0",X"5F",X"5D",X"9C",X"A7",X"66", - X"57",X"A0",X"A4",X"5E",X"61",X"8A",X"B4",X"4D",X"92",X"A5",X"55",X"68",X"8F",X"B1",X"55",X"6C", - X"BE",X"51",X"88",X"A6",X"36",X"C2",X"6C",X"60",X"B2",X"84",X"4D",X"84",X"A8",X"4A",X"A5",X"9E", - X"60",X"5D",X"AD",X"92",X"76",X"4E",X"94",X"A8",X"72",X"4C",X"B0",X"7A",X"57",X"B8",X"85",X"72", - X"51",X"C2",X"59",X"6C",X"B1",X"86",X"69",X"5A",X"92",X"A9",X"7B",X"50",X"8B",X"B3",X"41",X"AD", - X"6F",X"61",X"B7",X"82",X"6E",X"55",X"A0",X"9F",X"4B",X"87",X"B1",X"52",X"9B",X"96",X"59",X"68", - X"B7",X"55",X"85",X"B1",X"64",X"65",X"70",X"BB",X"6A",X"5F",X"B0",X"8A",X"76",X"55",X"82",X"AE", - X"82",X"5F",X"66",X"A1",X"9C",X"48",X"B7",X"67",X"60",X"B8",X"76",X"4D",X"B7",X"76",X"62",X"B1", - X"7C",X"55",X"84",X"AD",X"77",X"55",X"8B",X"AC",X"40",X"9A",X"A1",X"75",X"57",X"7D",X"A6",X"91", - X"75",X"5C",X"74",X"AE",X"7D",X"52",X"C1",X"58",X"74",X"B7",X"45",X"95",X"A1",X"70",X"57",X"89", - X"AA",X"81",X"5B",X"6D",X"9F",X"9E",X"6F",X"57",X"AB",X"8E",X"63",X"5E",X"B0",X"80",X"4E",X"B1", - X"88",X"4C",X"9E",X"9A",X"46",X"98",X"A4",X"6C",X"55",X"B0",X"84",X"56",X"B8",X"48",X"92",X"A3", - X"7D",X"69",X"5C",X"A6",X"98",X"51",X"83",X"B5",X"4C",X"8E",X"A3",X"69",X"5E",X"80",X"AF",X"6B", - X"5B",X"B3",X"7C",X"52",X"B1",X"88",X"81",X"50",X"88",X"A7",X"83",X"54",X"82",X"AB",X"46",X"9F", - X"9F",X"4B",X"94",X"9F",X"42",X"A8",X"92",X"84",X"59",X"77",X"B3",X"46",X"A5",X"8C",X"4A",X"AE", - X"8A",X"59",X"A9",X"82",X"67",X"60",X"99",X"9F",X"81",X"6A",X"5B",X"BF",X"4F",X"9C",X"82",X"54", - X"BA",X"75",X"55",X"A7",X"8A",X"4B",X"A4",X"96",X"82",X"61",X"67",X"9A",X"9E",X"4D",X"8A",X"A7", - X"7F",X"73",X"52",X"BB",X"60",X"73",X"AC",X"83",X"73",X"59",X"89",X"A4",X"88",X"50",X"95",X"A2", - X"67",X"63",X"7D",X"B0",X"72",X"59",X"A9",X"8F",X"50",X"87",X"AC",X"47",X"9C",X"97",X"7B",X"53", - X"92",X"A0",X"7B",X"5B",X"7F",X"B1",X"49",X"8D",X"A4",X"7B",X"66",X"62",X"B4",X"76",X"66",X"AA", - X"81",X"62",X"6D",X"AF",X"80",X"6D",X"5C",X"97",X"9C",X"86",X"69",X"60",X"AE",X"80",X"4E",X"B9", - X"66",X"6D",X"AA",X"83",X"64",X"69",X"AD",X"86",X"6B",X"60",X"8C",X"AA",X"65",X"66",X"AF",X"80", - X"51",X"9A",X"9B",X"7B",X"72",X"57",X"A5",X"92",X"87",X"67",X"66",X"86",X"B2",X"58",X"8E",X"8B", - X"5F",X"B0",X"71",X"6B",X"63",X"A7",X"8F",X"85",X"67",X"63",X"B2",X"61",X"6F",X"AE",X"81",X"7F", - X"4E",X"A4",X"8D",X"51",X"9F",X"99",X"73",X"62",X"75",X"B6",X"66",X"79",X"9F",X"50",X"B7",X"4C", - X"8E",X"9E",X"7D",X"5C",X"7F",X"AF",X"4B",X"8D",X"A1",X"7D",X"65",X"66",X"AE",X"7B",X"62",X"AD", - X"7B",X"6C",X"5F",X"A8",X"8D",X"84",X"66",X"65",X"A7",X"8D",X"75",X"58",X"9F",X"97",X"74",X"60", - X"79",X"A4",X"8E",X"6A",X"5F",X"A7",X"8D",X"53",X"A7",X"87",X"73",X"57",X"B1",X"74",X"68",X"AD", - X"48",X"A0",X"94",X"81",X"6D",X"5F",X"94",X"9C",X"85",X"6D",X"5F",X"97",X"9D",X"78",X"5B",X"87", - X"AA",X"5E",X"6C",X"A6",X"8A",X"7A",X"5D",X"7B",X"9E",X"96",X"59",X"7D",X"AB",X"4C",X"98",X"95", - X"4B",X"A5",X"8B",X"55",X"A5",X"8D",X"71",X"60",X"84",X"A4",X"84",X"7F",X"5A",X"82",X"AB",X"5B", - X"78",X"B2",X"5B",X"7F",X"A2",X"4D",X"94",X"A2",X"51",X"98",X"93",X"78",X"57",X"9B",X"95",X"7D", - X"57",X"90",X"9D",X"53",X"A2",X"8D",X"6C",X"65",X"81",X"AD",X"68",X"71",X"A9",X"53",X"A4",X"82", - X"7A",X"55",X"A4",X"88",X"53",X"A5",X"8D",X"7F",X"6A",X"63",X"A7",X"87",X"59",X"A5",X"8A",X"77", - X"61",X"7B",X"AD",X"73",X"6B",X"A1",X"7F",X"6F",X"60",X"B2",X"6C",X"66",X"AA",X"82",X"81",X"5E", - X"75",X"9D",X"92",X"7D",X"6C",X"63",X"B0",X"73",X"60",X"A8",X"86",X"80",X"62",X"71",X"99",X"9A", - X"50",X"97",X"92",X"51",X"9D",X"96",X"51",X"A5",X"79",X"5D",X"AA",X"85",X"80",X"64",X"6D",X"AB", - X"77",X"64",X"A9",X"82",X"77",X"5F",X"85",X"A1",X"85",X"7F",X"5B",X"88",X"A4",X"4E",X"95",X"98", - X"81",X"69",X"69",X"B1",X"55",X"90",X"99",X"4F",X"A7",X"7E",X"59",X"AA",X"7C",X"5B",X"9E",X"92", - X"7E",X"70",X"5F",X"A1",X"8F",X"85",X"5F",X"78",X"A6",X"7F",X"77",X"5A",X"A0",X"87",X"58",X"A0", - X"93",X"59",X"97",X"94",X"5B",X"76",X"9F",X"8E",X"63",X"72",X"AC",X"57",X"81",X"A6",X"66",X"68", - X"A7",X"83",X"5C",X"A7",X"80",X"7A",X"59",X"97",X"9A",X"5D",X"7A",X"AD",X"66",X"72",X"A1",X"80", - X"70",X"62",X"A7",X"85",X"7B",X"5F",X"7E",X"9D",X"8E",X"73",X"5F",X"93",X"9D",X"63",X"6D",X"AA", - X"7B",X"89",X"5B",X"7F",X"A0",X"84",X"64",X"78",X"A5",X"7A",X"75",X"5E",X"9C",X"93",X"7F",X"7C", - X"58",X"A0",X"8D",X"80",X"61",X"77",X"9D",X"91",X"65",X"71",X"A4",X"80",X"76",X"5E",X"A4",X"89", - X"7C",X"62",X"78",X"9D",X"8D",X"7D",X"6C",X"68",X"B0",X"69",X"78",X"A3",X"54",X"9F",X"8A",X"79", - X"63",X"7A",X"9E",X"8D",X"64",X"71",X"AD",X"6D",X"6D",X"9D",X"86",X"6F",X"68",X"82",X"A8",X"6A", - X"74",X"A2",X"7A",X"73",X"61",X"B1",X"66",X"73",X"A8",X"5C",X"7D",X"A7",X"6C",X"6C",X"AA",X"56", - X"97",X"89",X"55",X"A7",X"85",X"85",X"6E",X"66",X"A6",X"82",X"82",X"5F",X"81",X"A5",X"55",X"8A", - X"9C",X"7C",X"81",X"5B",X"8A",X"9F",X"5E",X"7E",X"A9",X"5D",X"79",X"9E",X"87",X"61",X"76",X"9E", - X"8C",X"65",X"72",X"A2",X"83",X"78",X"60",X"A2",X"86",X"7C",X"5E",X"9B",X"8C",X"56",X"AD",X"66", - X"71",X"A3",X"81",X"82",X"66",X"74",X"AE",X"5E",X"82",X"9B",X"58",X"8E",X"9E",X"63",X"72",X"A1", - X"84",X"72",X"62",X"9F",X"8B",X"81",X"73",X"65",X"89",X"9D",X"7F",X"84",X"5E",X"84",X"9E",X"7C", - X"7B",X"5E",X"8B",X"96",X"8C",X"56",X"96",X"90",X"80",X"66",X"74",X"9A",X"92",X"61",X"78",X"9E", - X"87",X"69",X"72",X"A2",X"7F",X"76",X"63",X"8B",X"9A",X"83",X"5B",X"8F",X"98",X"7B",X"7F",X"5B", - X"92",X"98",X"5A",X"9D",X"86",X"81",X"62",X"80",X"A0",X"7B",X"76",X"61",X"9A",X"91",X"80",X"7B", - X"5E",X"91",X"96",X"7F",X"6E",X"69",X"99",X"94",X"64",X"75",X"A6",X"74",X"64",X"8F",X"9D",X"65", - X"72",X"A1",X"83",X"74",X"62",X"9F",X"89",X"82",X"72",X"67",X"88",X"9D",X"7A",X"62",X"AC",X"5A", - X"8F",X"90",X"7F",X"6E",X"6B",X"8E",X"9D",X"61",X"86",X"9B",X"56",X"9D",X"88",X"7C",X"64",X"7B", - X"99",X"8E",X"5E",X"7F",X"9F",X"7F",X"83",X"63",X"7D",X"A5",X"6A",X"6C",X"99",X"8F",X"57",X"A1", - X"7C",X"68",X"9C",X"86",X"6B",X"72",X"A2",X"7B",X"81",X"5C",X"98",X"90",X"77",X"61",X"A5",X"71", - X"6B",X"A0",X"87",X"73",X"68",X"A2",X"80",X"80",X"63",X"7D",X"9E",X"81",X"60",X"A2",X"77",X"69", - X"A8",X"6B",X"6D",X"9D",X"83",X"7E",X"65",X"7C",X"9D",X"86",X"62",X"80",X"A1",X"6F",X"68",X"A0", - X"83",X"84",X"6C",X"6E",X"92",X"9A",X"5D",X"8C",X"8F",X"5F",X"A1",X"7F",X"7F",X"65",X"7B",X"98", - X"8C",X"61",X"7C",X"A1",X"78",X"66",X"A3",X"68",X"75",X"A3",X"7A",X"87",X"69",X"70",X"8E",X"97", - X"7C",X"62",X"93",X"90",X"79",X"6B",X"74",X"A0",X"83",X"63",X"87",X"9E",X"6D",X"70",X"A1",X"60", - X"8E",X"91",X"7A",X"73",X"68",X"97",X"8E",X"84",X"73",X"68",X"8D",X"9A",X"75",X"66",X"9E",X"7F", - X"60",X"9A",X"8E",X"61",X"8D",X"92",X"57",X"96",X"8E",X"81",X"79",X"65",X"9C",X"87",X"7A",X"67", - X"80",X"9E",X"7D",X"85",X"64",X"7B",X"9B",X"85",X"72",X"68",X"98",X"8F",X"74",X"66",X"9A",X"89", - X"5D",X"8D",X"96",X"7C",X"60",X"A1",X"7C",X"69",X"9D",X"81",X"78",X"65",X"A2",X"78",X"69",X"A8", - X"62",X"83",X"95",X"7E",X"76",X"67",X"8B",X"97",X"7B",X"61",X"A7",X"6B",X"76",X"9C",X"7F",X"77", - X"66",X"91",X"95",X"77",X"64",X"98",X"8E",X"64",X"7B",X"9D",X"7F",X"61",X"94",X"8F",X"7C",X"66", - X"82",X"9D",X"7A",X"87",X"66",X"7A",X"A0",X"6E",X"6D",X"A0",X"7F",X"84",X"71",X"6B",X"9E",X"83", - X"7E",X"62",X"90",X"92",X"7B",X"79",X"62",X"A4",X"79",X"70",X"99",X"84",X"62",X"8B",X"92",X"7F", - X"74",X"6B",X"8A",X"99",X"75",X"68",X"99",X"8C",X"68",X"77",X"9D",X"7D",X"83",X"6F",X"6D",X"91", - X"91",X"83",X"6F",X"6E",X"99",X"8C",X"69",X"76",X"9F",X"79",X"68",X"A1",X"70",X"6D",X"9B",X"86", - X"60",X"9C",X"7C",X"6A",X"9F",X"7B",X"84",X"65",X"81",X"A0",X"61",X"89",X"91",X"7D",X"7B",X"65", - X"8D",X"95",X"7E",X"83",X"70",X"6D",X"A3",X"73",X"70",X"A1",X"67",X"7F",X"9C",X"5A",X"98",X"7F", - X"6B",X"A0",X"78",X"87",X"60",X"8A",X"95",X"7C",X"81",X"61",X"94",X"8E",X"7F",X"7A",X"67",X"88", - X"93",X"88",X"6F",X"71",X"A0",X"67",X"78",X"98",X"88",X"6D",X"72",X"9E",X"7E",X"83",X"78",X"67", - X"8D",X"92",X"82",X"63",X"8F",X"8F",X"7D",X"7A",X"66",X"8F",X"93",X"7B",X"66",X"A3",X"6B",X"7B", - X"97",X"7E",X"74",X"6B",X"9B",X"86",X"7F",X"80",X"66",X"82",X"95",X"87",X"62",X"88",X"95",X"7D", - X"82",X"6B",X"77",X"99",X"86",X"66",X"91",X"8C",X"74",X"6C",X"98",X"85",X"7B",X"66",X"97",X"87", - X"80",X"74",X"6D",X"8C",X"96",X"73",X"70",X"A1",X"64",X"7A",X"93",X"8D",X"64",X"80",X"96",X"82", - X"6F",X"71",X"99",X"87",X"65",X"82",X"98",X"7F",X"82",X"71",X"6F",X"92",X"8D",X"83",X"6E",X"73", - X"95",X"8C",X"6E",X"74",X"9A",X"7E",X"82",X"69",X"7E",X"9F",X"62",X"88",X"91",X"64",X"8F",X"8F", - X"65",X"7E",X"96",X"83",X"63",X"8D",X"90",X"7F",X"7D",X"67",X"98",X"85",X"7E",X"66",X"92",X"8B", - X"7C",X"6C",X"7C",X"9B",X"7C",X"69",X"94",X"86",X"7F",X"72",X"6F",X"8F",X"91",X"78",X"68",X"97", - X"89",X"7B",X"67",X"97",X"86",X"80",X"74",X"6C",X"94",X"8C",X"7E",X"82",X"6B",X"7C",X"9F",X"67", - X"82",X"96",X"6A",X"77",X"9A",X"7E",X"83",X"78",X"69",X"98",X"86",X"81",X"74",X"6D",X"8C",X"91", - X"81",X"7A",X"69",X"99",X"80",X"65",X"90",X"8F",X"7D",X"66",X"96",X"87",X"7F",X"67",X"8D",X"8F", - X"61",X"98",X"7F",X"67",X"8E",X"90",X"7D",X"82",X"69",X"7D",X"96",X"86",X"6A",X"7D",X"9D",X"6F", - X"76",X"99",X"6E",X"71",X"99",X"83",X"83",X"71",X"71",X"8F",X"91",X"71",X"72",X"9A",X"7D",X"84", - X"6A",X"7A",X"8C",X"94",X"6B",X"7D",X"94",X"7F",X"6D",X"79",X"97",X"84",X"67",X"85",X"93",X"81", - X"73",X"74",X"9B",X"7A",X"84",X"68",X"80",X"97",X"7E",X"83",X"69",X"82",X"99",X"69",X"82",X"97", - X"65",X"87",X"91",X"63",X"93",X"86",X"7F",X"76",X"6C",X"94",X"89",X"82",X"6D",X"78",X"96",X"86", - X"69",X"80",X"97",X"79",X"6D",X"97",X"7D",X"6A",X"9A",X"76",X"6D",X"98",X"83",X"81",X"7D",X"6C", - X"80",X"93",X"87",X"65",X"96",X"83",X"81",X"78",X"6B",X"99",X"82",X"82",X"73",X"70",X"91",X"8D", - X"7C",X"84",X"69",X"80",X"97",X"7B",X"85",X"6C",X"79",X"92",X"8B",X"73",X"71",X"9B",X"75",X"6E", - X"91",X"8E",X"70",X"73",X"97",X"84",X"6B",X"80",X"98",X"77",X"70",X"95",X"7F",X"67",X"93",X"89", - X"7F",X"7E",X"6B",X"83",X"95",X"7F",X"82",X"78",X"6C",X"98",X"83",X"81",X"79",X"6B",X"96",X"84", - X"67",X"95",X"84",X"68",X"8E",X"8F",X"71",X"72",X"8F",X"8F",X"6B",X"80",X"93",X"7A",X"6B",X"91", - X"87",X"65",X"90",X"8D",X"74",X"6E",X"93",X"89",X"7D",X"82",X"6B",X"7E",X"93",X"87",X"6B",X"7F", - X"97",X"7A",X"86",X"6B",X"7E",X"95",X"7D",X"83",X"71",X"74",X"93",X"88",X"7F",X"7E",X"69",X"96", - X"83",X"81",X"79",X"6C",X"8B",X"90",X"7D",X"83",X"77",X"6E",X"8A",X"92",X"77",X"71",X"98",X"78", - X"6F",X"9B",X"6E",X"7D",X"94",X"7A",X"83",X"65",X"93",X"88",X"81",X"78",X"6F",X"86",X"96",X"71", - X"79",X"94",X"7D",X"80",X"6C",X"7E",X"91",X"87",X"7E",X"80",X"6B",X"80",X"8F",X"8B",X"6B",X"7D", - X"95",X"7D",X"83",X"72",X"73",X"92",X"88",X"80",X"6E",X"7C",X"95",X"80",X"6D",X"7F",X"95",X"7D", - X"83",X"77",X"6E",X"92",X"88",X"7F",X"6F",X"7A",X"96",X"7F",X"6E",X"80",X"99",X"6B",X"7F",X"90", - X"80",X"75",X"72",X"94",X"87",X"75",X"72",X"99",X"78",X"6F",X"8C",X"8F",X"6C",X"7C",X"92",X"80", - X"78",X"6E",X"90",X"8C",X"72",X"73",X"96",X"81",X"81",X"6D",X"7F",X"95",X"7D",X"83",X"7B",X"6E", - X"83",X"93",X"7E",X"83",X"6A",X"88",X"90",X"66",X"8C",X"8D",X"69",X"86",X"92",X"7B",X"85",X"70", - X"76",X"8D",X"8E",X"70",X"78",X"96",X"7C",X"85",X"6F",X"79",X"98",X"74",X"71",X"90",X"89",X"7C", - X"83",X"6B",X"83",X"91",X"80",X"80",X"70",X"79",X"90",X"88",X"7E",X"81",X"6E",X"7D",X"98",X"71", - X"7B",X"93",X"7A",X"85",X"6B",X"80",X"92",X"81",X"80",X"71",X"79",X"99",X"74",X"78",X"93",X"7C", - X"83",X"70",X"78",X"8D",X"8B",X"7E",X"80",X"6C",X"82",X"90",X"84",X"6A",X"8B",X"8C",X"7D",X"81", - X"6B",X"8B",X"8F",X"6D",X"82",X"92",X"6C",X"7F",X"94",X"72",X"74",X"91",X"86",X"6D",X"82",X"93", - X"69",X"82",X"91",X"80",X"6E",X"81",X"94",X"77",X"73",X"93",X"7C",X"6F",X"97",X"78",X"71",X"8B", - X"8F",X"6C",X"82",X"8E",X"7D",X"81",X"6F",X"7C",X"8F",X"87",X"7E",X"80",X"6E",X"7E",X"8E",X"8A", - X"70",X"78",X"95",X"7D",X"84",X"78",X"71",X"87",X"91",X"79",X"70",X"91",X"85",X"7C",X"6F",X"8B", - X"8C",X"67",X"90",X"82",X"6F",X"91",X"84",X"76",X"72",X"8D",X"8D",X"70",X"7D",X"93",X"6F",X"7D", - X"95",X"68",X"88",X"8B",X"80",X"78",X"73",X"96",X"7D",X"84",X"73",X"75",X"93",X"83",X"81",X"77", - X"72",X"8E",X"8A",X"7E",X"80",X"6D",X"8C",X"8C",X"6A",X"83",X"8F",X"81",X"6D",X"85",X"8F",X"7E", - X"6D",X"88",X"8D",X"7F",X"6F",X"82",X"91",X"7D",X"6F",X"85",X"8F",X"7D",X"7D",X"6D",X"90",X"88", - X"7C",X"6E",X"94",X"80",X"70",X"8E",X"87",X"76",X"74",X"92",X"81",X"7D",X"6D",X"8F",X"87",X"7F", - X"71",X"7C",X"92",X"81",X"73",X"7A",X"95",X"7C",X"84",X"7B",X"6F",X"8D",X"8A",X"7B",X"71",X"82", - X"92",X"79",X"73",X"91",X"7E",X"6D",X"8D",X"89",X"7D",X"83",X"6D",X"84",X"8F",X"7D",X"83",X"70", - X"7B",X"8B",X"8B",X"7B",X"85",X"71",X"7A",X"93",X"7E",X"82",X"75",X"75",X"89",X"8D",X"7D",X"6D", - X"90",X"85",X"81",X"79",X"71",X"8D",X"8A",X"79",X"72",X"91",X"83",X"7D",X"6F",X"86",X"8E",X"7D", - X"70",X"85",X"90",X"7A",X"86",X"74",X"76",X"91",X"82",X"81",X"79",X"72",X"87",X"8D",X"80",X"6D", - X"86",X"8E",X"7E",X"82",X"76",X"74",X"89",X"8B",X"82",X"72",X"7F",X"94",X"6F",X"80",X"8D",X"7E", - X"73",X"7B",X"92",X"7F",X"71",X"8A",X"89",X"6A",X"89",X"8B",X"81",X"71",X"7F",X"91",X"7C",X"84", - X"79",X"72",X"8D",X"89",X"6C",X"8C",X"86",X"7F",X"7C",X"71",X"83",X"8D",X"83",X"7E",X"81",X"6E", - X"83",X"8D",X"85",X"71",X"7C",X"91",X"7E",X"82",X"7D",X"70",X"88",X"8D",X"7D",X"83",X"6E",X"84", - X"8F",X"7C",X"83",X"70",X"7E",X"90",X"7F",X"82",X"76",X"76",X"93",X"7E",X"83",X"7A",X"72",X"8D", - X"89",X"76",X"75",X"92",X"7F",X"83",X"76",X"76",X"92",X"7F",X"6F",X"8A",X"8A",X"7D",X"72",X"83", - X"90",X"79",X"75",X"8A",X"87",X"6B",X"89",X"89",X"7F",X"7F",X"71",X"81",X"93",X"70",X"7E",X"8E", - X"80",X"79",X"73",X"8E",X"88",X"79",X"72",X"8E",X"86",X"7B",X"72",X"8E",X"85",X"6E",X"8E",X"84", - X"6F",X"85",X"8E",X"78",X"74",X"91",X"7C",X"71",X"94",X"7A",X"73",X"8A",X"8C",X"76",X"76",X"8F", - X"84",X"7D",X"83",X"6E",X"86",X"8B",X"81",X"71",X"83",X"8D",X"7E",X"78",X"75",X"92",X"81",X"81", - X"7D",X"72",X"82",X"8E",X"80",X"80",X"7E",X"70",X"85",X"8C",X"83",X"70",X"80",X"8E",X"7F",X"72", - X"81",X"90",X"7A",X"86",X"72",X"7D",X"90",X"77",X"74",X"8C",X"88",X"7D",X"83",X"75",X"78",X"8C", - X"88",X"7D",X"83",X"74",X"79",X"8F",X"83",X"6F",X"87",X"8C",X"79",X"73",X"8A",X"89",X"7D",X"83", - X"76",X"76",X"8C",X"87",X"7F",X"7D",X"70",X"8C",X"87",X"80",X"71",X"84",X"8D",X"7C",X"73",X"8C", - X"83",X"6E",X"89",X"8A",X"7C",X"73",X"90",X"7E",X"83",X"70",X"84",X"8C",X"7E",X"78",X"78",X"93", - X"7A",X"73",X"8A",X"89",X"7C",X"84",X"77",X"76",X"90",X"81",X"81",X"7A",X"73",X"8B",X"89",X"71", - X"7E",X"8F",X"7E",X"71",X"8B",X"86",X"7F",X"7E",X"70",X"8D",X"87",X"72",X"7D",X"8E",X"82",X"73", - X"7E",X"8F",X"7F",X"82",X"7D",X"72",X"88",X"8C",X"6F",X"86",X"89",X"7D",X"81",X"70",X"83",X"8C", - X"82",X"70",X"83",X"8C",X"81",X"72",X"80",X"8E",X"7D",X"83",X"7A",X"74",X"86",X"8C",X"7C",X"72", - X"87",X"8B",X"7D",X"83",X"78",X"76",X"8F",X"82",X"71",X"8D",X"82",X"80",X"7E",X"72",X"83",X"8D", - X"7E",X"83",X"74",X"7E",X"8F",X"7B",X"85",X"74",X"7B",X"8F",X"7F",X"81",X"7B",X"73",X"87",X"8A", - X"80",X"72",X"8B",X"84",X"7E",X"80",X"70",X"8B",X"87",X"7E",X"82",X"73",X"7D",X"8C",X"86",X"77", - X"79",X"91",X"79",X"77",X"90",X"7A",X"77",X"90",X"79",X"75",X"8B",X"87",X"77",X"79",X"91",X"74", - X"7D",X"8C",X"7F",X"72",X"85",X"8B",X"7D",X"72",X"87",X"89",X"7F",X"7B",X"74",X"8D",X"86",X"76", - X"7A",X"91",X"74",X"7A",X"8B",X"86",X"78",X"77",X"8E",X"82",X"7F",X"81",X"73",X"7E",X"8C",X"84", - X"76",X"7B",X"91",X"77",X"77",X"8A",X"87",X"76",X"79",X"8B",X"86",X"75",X"7B",X"8B",X"85",X"72", - X"83",X"89",X"7E",X"7E",X"73",X"8F",X"80",X"73",X"83",X"8D",X"7D",X"84",X"73",X"7E",X"8B",X"84", - X"74",X"7D",X"8C",X"82",X"74",X"7F",X"8D",X"80",X"7B",X"74",X"8D",X"84",X"79",X"76",X"8F",X"80", - X"82",X"72",X"85",X"8A",X"7C",X"82",X"71",X"85",X"8A",X"7F",X"81",X"76",X"7B",X"8F",X"7F",X"83", - X"75",X"7B",X"89",X"89",X"73",X"81",X"8B",X"7C",X"84",X"74",X"7D",X"8C",X"81",X"71",X"89",X"87", - X"80",X"72",X"88",X"87",X"7F",X"75",X"82",X"8C",X"7B",X"84",X"73",X"7F",X"8E",X"7A",X"76",X"8D", - X"81",X"7E",X"74",X"8C",X"84",X"71",X"85",X"8A",X"7E",X"74",X"86",X"8A",X"7B",X"75",X"8A",X"85", - X"71",X"8B",X"83",X"73",X"89",X"85",X"7B",X"75",X"87",X"8A",X"79",X"76",X"8C",X"83",X"7F",X"80", - X"73",X"81",X"89",X"86",X"73",X"7D",X"8B",X"84",X"7A",X"76",X"8C",X"83",X"7F",X"75",X"81",X"8D", - X"7D",X"84",X"77",X"7A",X"8E",X"7B",X"75",X"8D",X"80",X"81",X"7B",X"75",X"8C",X"84",X"7F",X"73", - X"87",X"88",X"7D",X"82",X"75",X"7D",X"8D",X"7F",X"74",X"8D",X"7E",X"75",X"8D",X"7E",X"74",X"88", - X"88",X"7A",X"78",X"8D",X"7C",X"75",X"87",X"89",X"7A",X"76",X"88",X"89",X"77",X"7A",X"8E",X"7C", - X"74",X"8A",X"85",X"7E",X"82",X"76",X"7B",X"89",X"87",X"72",X"88",X"85",X"7E",X"81",X"74",X"7F", - X"88",X"87",X"75",X"7E",X"8E",X"77",X"79",X"8A",X"85",X"77",X"7A",X"8B",X"83",X"76",X"7F",X"8C", - X"73",X"7E",X"8B",X"82",X"75",X"7E",X"8C",X"7F",X"77",X"7C",X"8D",X"80",X"75",X"86",X"87",X"73", - X"7F",X"8B",X"80",X"7F",X"74",X"89",X"85",X"72",X"89",X"85",X"73",X"88",X"85",X"7D",X"82",X"71", - X"8A",X"84",X"83",X"74",X"82",X"89",X"81",X"78",X"7D",X"8C",X"7F",X"7C",X"76",X"8A",X"86",X"7B", - X"77",X"8C",X"81",X"80",X"7E",X"74",X"86",X"88",X"82",X"7A",X"78",X"8B",X"83",X"7E",X"82",X"77", - X"7B",X"88",X"87",X"7A",X"77",X"86",X"89",X"78",X"7A",X"8C",X"7F",X"81",X"79",X"78",X"87",X"87", - X"81",X"76",X"80",X"8D",X"74",X"81",X"89",X"7D",X"83",X"76",X"7D",X"8B",X"81",X"73",X"87",X"88", - X"7D",X"76",X"8D",X"7D",X"77",X"8A",X"82",X"7A",X"78",X"89",X"86",X"76",X"7C",X"8B",X"81",X"7D", - X"75",X"8B",X"82",X"74",X"8A",X"82",X"74",X"8B",X"81",X"80",X"7E",X"75",X"85",X"8A",X"77",X"7B", - X"8A",X"83",X"77",X"7C",X"8B",X"81",X"77",X"7D",X"8D",X"7D",X"83",X"7A",X"78",X"89",X"86",X"7D", - X"83",X"79",X"79",X"8A",X"84",X"75",X"80",X"8A",X"80",X"7B",X"78",X"8E",X"7C",X"78",X"8B",X"7F", - X"81",X"7C",X"76",X"86",X"87",X"80",X"74",X"85",X"88",X"7B",X"76",X"8C",X"81",X"82",X"78",X"7C", - X"8A",X"80",X"7B",X"78",X"8C",X"80",X"7E",X"75",X"87",X"87",X"7D",X"76",X"86",X"88",X"7B",X"77", - X"87",X"87",X"79",X"7A",X"8C",X"7B",X"78",X"8C",X"80",X"81",X"7D",X"76",X"85",X"88",X"80",X"7E", - X"76",X"86",X"88",X"7D",X"76",X"84",X"89",X"7B",X"79",X"89",X"81",X"80",X"7B",X"77",X"89",X"84", - X"80",X"7F",X"75",X"88",X"84",X"7F",X"77",X"7F",X"8B",X"80",X"78",X"7E",X"8C",X"7B",X"79",X"88", - X"83",X"77",X"7F",X"8C",X"76",X"7F",X"89",X"7F",X"78",X"7C",X"8B",X"81",X"76",X"83",X"8A",X"74", - X"83",X"88",X"75",X"82",X"89",X"74",X"81",X"89",X"7D",X"83",X"77",X"7C",X"8C",X"7E",X"76",X"88", - X"86",X"7E",X"83",X"7A",X"79",X"83",X"89",X"7F",X"76",X"88",X"85",X"74",X"84",X"89",X"75",X"82", - X"88",X"7D",X"83",X"75",X"80",X"88",X"82",X"7A",X"7B",X"8B",X"7E",X"82",X"7B",X"78",X"88",X"86", - X"76",X"83",X"88",X"74",X"83",X"88",X"7E",X"76",X"85",X"87",X"7E",X"82",X"7C",X"78",X"83",X"87", - X"83",X"76",X"80",X"89",X"80",X"77",X"81",X"8A",X"7E",X"81",X"7E",X"77",X"81",X"89",X"81",X"78", - X"7C",X"8B",X"80",X"82",X"74",X"86",X"85",X"80",X"77",X"82",X"88",X"7F",X"7A",X"7B",X"8C",X"7E", - X"82",X"7B",X"78",X"87",X"86",X"7E",X"82",X"76",X"81",X"8A",X"7A",X"79",X"87",X"86",X"7A",X"79", - X"89",X"83",X"7F",X"81",X"76",X"83",X"89",X"78",X"7C",X"89",X"82",X"78",X"7C",X"8B",X"7F",X"81", - X"7C",X"77",X"87",X"85",X"7E",X"81",X"77",X"7E",X"8A",X"80",X"81",X"7F",X"77",X"81",X"89",X"80", - X"80",X"7F",X"76",X"84",X"88",X"7E",X"82",X"79",X"7B",X"87",X"86",X"7C",X"79",X"88",X"83",X"76", - X"81",X"88",X"80",X"77",X"81",X"89",X"7D",X"78",X"86",X"84",X"76",X"81",X"88",X"80",X"77",X"85", - X"86",X"76",X"7E",X"89",X"81",X"78",X"7F",X"8A",X"7E",X"78",X"89",X"81",X"80",X"7E",X"77",X"82", - X"87",X"82",X"7F",X"81",X"78",X"7D",X"88",X"83",X"7F",X"77",X"86",X"85",X"7E",X"82",X"76",X"80", - X"88",X"82",X"7E",X"77",X"86",X"85",X"7F",X"77",X"86",X"85",X"7F",X"78",X"81",X"8A",X"75",X"83", - X"87",X"77",X"7F",X"8A",X"79",X"7B",X"88",X"84",X"76",X"84",X"85",X"7E",X"78",X"82",X"88",X"7F", - X"78",X"84",X"87",X"76",X"7F",X"88",X"82",X"7E",X"82",X"77",X"7F",X"89",X"7E",X"82",X"7B",X"7A", - X"87",X"85",X"76",X"81",X"88",X"80",X"77",X"81",X"88",X"7E",X"82",X"7E",X"78",X"82",X"87",X"81", - X"77",X"80",X"88",X"7F",X"78",X"81",X"89",X"7E",X"82",X"7E",X"78",X"82",X"88",X"81",X"78",X"7F", - X"89",X"7E",X"82",X"7E",X"78",X"83",X"88",X"7A",X"7B",X"88",X"81",X"7E",X"77",X"87",X"84",X"7F", - X"78",X"82",X"89",X"75",X"84",X"85",X"7F",X"81",X"78",X"7E",X"8A",X"7E",X"79",X"89",X"80",X"81", - X"7D",X"78",X"85",X"86",X"81",X"76",X"86",X"84",X"80",X"79",X"7E",X"88",X"81",X"79",X"7D",X"8A", - X"7E",X"82",X"7E",X"7A",X"7D",X"88",X"82",X"81",X"79",X"7F",X"8A",X"79",X"7B",X"88",X"82",X"7F", - X"7F",X"77",X"85",X"86",X"7F",X"78",X"82",X"88",X"7F",X"82",X"7B",X"7A",X"86",X"85",X"7F",X"81", - X"77",X"82",X"87",X"80",X"78",X"83",X"86",X"7D",X"83",X"77",X"81",X"88",X"7F",X"82",X"7B",X"7A", - X"88",X"83",X"77",X"83",X"87",X"78",X"7E",X"88",X"80",X"80",X"7F",X"79",X"7D",X"87",X"83",X"80", - X"77",X"83",X"85",X"7F",X"7A",X"7C",X"89",X"81",X"7A",X"7D",X"8A",X"7A",X"7B",X"86",X"84",X"7A", - X"7C",X"89",X"7F",X"82",X"7C",X"7A",X"88",X"81",X"77",X"85",X"86",X"77",X"84",X"85",X"77",X"81", - X"88",X"78",X"7D",X"87",X"82",X"78",X"81",X"87",X"7A",X"7C",X"89",X"7D",X"79",X"87",X"83",X"7A", - X"7C",X"88",X"82",X"7A",X"7D",X"88",X"80",X"78",X"86",X"83",X"76",X"84",X"86",X"7E",X"78",X"86", - X"83",X"7E",X"81",X"77",X"81",X"86",X"83",X"79",X"7E",X"88",X"7F",X"81",X"7D",X"79",X"86",X"84", - X"7E",X"82",X"77",X"81",X"86",X"82",X"78",X"82",X"86",X"80",X"7D",X"7A",X"89",X"80",X"7F",X"78", - X"88",X"81",X"78",X"87",X"81",X"7F",X"81",X"78",X"82",X"88",X"79",X"7F",X"88",X"7B",X"7B",X"85", - X"85",X"7A",X"7E",X"87",X"7F",X"81",X"7D",X"79",X"84",X"85",X"80",X"80",X"78",X"86",X"84",X"77", - X"81",X"87",X"7E",X"82",X"7A",X"7D",X"89",X"7E",X"82",X"7D",X"7A",X"82",X"87",X"7F",X"81",X"7F", - X"79",X"83",X"87",X"7A",X"7C",X"87",X"81",X"7E",X"79",X"85",X"85",X"7E",X"79",X"84",X"86",X"79", - X"7E",X"88",X"7B",X"7B",X"86",X"83",X"7F",X"82",X"79",X"7E",X"87",X"81",X"7D",X"79",X"86",X"84", - X"7F",X"79",X"84",X"85",X"77",X"85",X"84",X"7F",X"81",X"7A",X"7D",X"86",X"83",X"7E",X"82",X"7B", - X"7C",X"87",X"81",X"78",X"81",X"86",X"7F",X"79",X"82",X"86",X"7E",X"79",X"81",X"87",X"7E",X"79", - X"87",X"82",X"7F",X"80",X"78",X"84",X"85",X"7C",X"7B",X"87",X"81",X"80",X"78",X"86",X"83",X"80", - X"7B",X"7C",X"88",X"81",X"7C",X"7C",X"89",X"7B",X"7B",X"85",X"84",X"7B",X"7B",X"85",X"84",X"7C", - X"7A",X"86",X"84",X"7C",X"7B",X"87",X"82",X"7F",X"79",X"85",X"84",X"78",X"84",X"84",X"7A",X"7E", - X"87",X"81",X"7A",X"81",X"86",X"7A",X"7C",X"87",X"81",X"7F",X"81",X"7A",X"7F",X"88",X"7E",X"7A", - X"85",X"83",X"7A",X"7E",X"88",X"7B",X"7D",X"88",X"7D",X"7B",X"87",X"80",X"79",X"84",X"84",X"7E", - X"82",X"79",X"7F",X"87",X"80",X"80",X"79",X"83",X"86",X"7F",X"79",X"83",X"85",X"78",X"80",X"87", - X"7F",X"81",X"7A",X"7F",X"88",X"7A",X"7E",X"87",X"7F",X"81",X"7D",X"7A",X"84",X"85",X"7F",X"79", - X"81",X"87",X"7E",X"82",X"7B",X"7E",X"87",X"7E",X"79",X"84",X"85",X"7E",X"82",X"7C",X"7B",X"84", - X"86",X"78",X"83",X"84",X"80",X"7A",X"7E",X"86",X"82",X"7A",X"7E",X"87",X"81",X"7A",X"7F",X"87", - X"80",X"7E",X"79",X"86",X"83",X"7F",X"81",X"79",X"81",X"86",X"7E",X"82",X"7B",X"7D",X"87",X"80", - X"81",X"7F",X"7A",X"81",X"87",X"7C",X"7B",X"86",X"82",X"7C",X"7B",X"86",X"83",X"7D",X"7A",X"88", - X"7E",X"7B",X"85",X"82",X"7B",X"7D",X"87",X"80",X"7E",X"7A",X"85",X"84",X"7E",X"7A",X"85",X"84", - X"7E",X"7A",X"84",X"84",X"7E",X"82",X"79",X"80",X"86",X"7E",X"7A",X"85",X"83",X"7F",X"80",X"79", - X"85",X"84",X"79",X"82",X"86",X"79",X"81",X"86",X"7B",X"7D",X"87",X"7F",X"79",X"86",X"81",X"79", - X"85",X"83",X"79",X"82",X"85",X"78",X"82",X"85",X"7F",X"81",X"7B",X"7D",X"87",X"80",X"80",X"7F", - X"7A",X"83",X"86",X"7B",X"7D",X"86",X"81",X"7B",X"7D",X"86",X"82",X"7C",X"7D",X"88",X"7D",X"7B", - X"83",X"85",X"7E",X"7A",X"83",X"85",X"7C",X"7C",X"86",X"80",X"7F",X"7A",X"85",X"83",X"79",X"85", - X"83",X"7A",X"81",X"86",X"79",X"80",X"85",X"81",X"7E",X"7B",X"87",X"80",X"81",X"7E",X"7B",X"83", - X"86",X"79",X"81",X"84",X"80",X"7B",X"80",X"86",X"7F",X"7D",X"7D",X"88",X"7E",X"82",X"7C",X"7C", - X"85",X"83",X"79",X"81",X"86",X"7F",X"7A",X"82",X"86",X"79",X"80",X"85",X"81",X"7A",X"7F",X"86", - X"81",X"7B",X"7E",X"87",X"7F",X"80",X"80",X"7B",X"80",X"87",X"7E",X"7A",X"85",X"83",X"7F",X"7A", - X"84",X"84",X"7F",X"7C",X"7E",X"87",X"7E",X"82",X"7D",X"7B",X"85",X"81",X"7F",X"7A",X"85",X"82", - X"7F",X"7B",X"80",X"86",X"80",X"7B",X"80",X"86",X"7F",X"80",X"80",X"7A",X"81",X"85",X"7F",X"7A", - X"82",X"85",X"80",X"7B",X"81",X"86",X"7C",X"7C",X"86",X"81",X"81",X"7C",X"7E",X"86",X"7F",X"80", - X"79",X"84",X"84",X"7F",X"80",X"7F",X"7A",X"83",X"84",X"7F",X"81",X"7B",X"7E",X"83",X"85",X"7D", - X"7C",X"86",X"81",X"7A",X"81",X"85",X"7F",X"7B",X"84",X"82",X"7F",X"81",X"7A",X"80",X"85",X"81", - X"7F",X"81",X"7D",X"7C",X"84",X"84",X"7F",X"7A",X"82",X"85",X"7F",X"81",X"7F",X"7A",X"84",X"83", - X"7F",X"80",X"7A",X"81",X"85",X"80",X"80",X"7D",X"7C",X"86",X"81",X"80",X"80",X"7A",X"85",X"82", - X"7F",X"81",X"7B",X"7E",X"85",X"82",X"7F",X"81",X"7B",X"7F",X"84",X"83",X"7C",X"7D",X"85",X"82", - X"7C",X"7E",X"86",X"7D",X"7C",X"85",X"82",X"7F",X"81",X"7E",X"7B",X"84",X"83",X"81",X"7C",X"7D", - X"87",X"7C",X"7E",X"86",X"7F",X"7B",X"86",X"80",X"81",X"7C",X"7E",X"86",X"7F",X"7B",X"83",X"84", - X"7F",X"80",X"7A",X"81",X"85",X"7F",X"82",X"7C",X"7E",X"85",X"80",X"7E",X"7C",X"87",X"7E",X"7C", - X"85",X"80",X"7B",X"84",X"82",X"79",X"82",X"84",X"81",X"7A",X"81",X"85",X"80",X"7F",X"7B",X"86", - X"81",X"7A",X"83",X"84",X"7F",X"81",X"7F",X"7B",X"82",X"85",X"7B",X"7D",X"85",X"81",X"7F",X"81", - X"7D",X"7C",X"85",X"82",X"80",X"7A",X"83",X"83",X"80",X"7D",X"7D",X"86",X"80",X"7F",X"7B",X"84", - X"83",X"7F",X"81",X"7E",X"7C",X"83",X"84",X"7B",X"81",X"85",X"7C",X"7E",X"86",X"7C",X"7D",X"84", - X"84",X"7C",X"7E",X"85",X"80",X"7C",X"7D",X"85",X"81",X"7F",X"81",X"7C",X"7F",X"86",X"7F",X"81", - X"7F",X"7B",X"84",X"83",X"7C",X"7F",X"86",X"7B",X"7E",X"84",X"82",X"7D",X"7D",X"85",X"80",X"7F", - X"7B",X"86",X"80",X"80",X"7F",X"7B",X"82",X"85",X"7B",X"80",X"84",X"80",X"7D",X"7D",X"85",X"82", - X"7D",X"7D",X"85",X"81",X"7D",X"7D",X"84",X"82",X"7D",X"7E",X"86",X"7D",X"7C",X"84",X"82",X"7B", - X"80",X"85",X"7F",X"80",X"80",X"7B",X"81",X"85",X"7F",X"81",X"7D",X"7D",X"82",X"84",X"80",X"7B", - X"81",X"84",X"7F",X"7B",X"83",X"83",X"7F",X"81",X"7B",X"80",X"83",X"83",X"7D",X"7C",X"85",X"81", - X"7F",X"81",X"7D",X"7D",X"83",X"83",X"80",X"7B",X"83",X"83",X"80",X"7B",X"81",X"84",X"80",X"7C", - X"80",X"85",X"7B",X"7E",X"84",X"82",X"7F",X"82",X"7C",X"7E",X"85",X"80",X"80",X"7B",X"83",X"84", - X"7A",X"83",X"82",X"80",X"7C",X"81",X"85",X"7B",X"7F",X"84",X"80",X"7F",X"81",X"7C",X"7F",X"85", - X"7E",X"7C",X"83",X"84",X"7F",X"81",X"7B",X"80",X"84",X"7F",X"81",X"7D",X"7C",X"83",X"83",X"80", - X"7B",X"80",X"84",X"7F",X"7C",X"81",X"84",X"7F",X"81",X"7F",X"7C",X"81",X"85",X"7B",X"7F",X"85", - X"7F",X"81",X"7D",X"7D",X"82",X"84",X"80",X"80",X"80",X"7B",X"82",X"83",X"7F",X"81",X"7D",X"7D", - X"85",X"80",X"80",X"80",X"7C",X"80",X"85",X"80",X"80",X"7F",X"7C",X"85",X"81",X"7B",X"82",X"83", - X"7A",X"82",X"83",X"7F",X"81",X"7B",X"80",X"85",X"7F",X"7C",X"84",X"82",X"7B",X"80",X"84",X"81", - X"7C",X"7F",X"85",X"7F",X"82",X"7D",X"7E",X"85",X"80",X"7B",X"82",X"83",X"7F",X"80",X"7B",X"85", - X"81",X"7B",X"81",X"84",X"80",X"7C",X"83",X"82",X"7B",X"80",X"84",X"80",X"81",X"7C",X"81",X"85", - X"7B",X"7F",X"85",X"7D",X"7D",X"84",X"81",X"80",X"81",X"7E",X"7C",X"83",X"83",X"7F",X"7C",X"81", - X"84",X"7F",X"81",X"7C",X"7F",X"85",X"7F",X"7C",X"82",X"83",X"7E",X"7C",X"82",X"84",X"7F",X"81", - X"7F",X"7C",X"81",X"84",X"80",X"80",X"81",X"7C",X"80",X"85",X"7F",X"7C",X"84",X"80",X"81",X"7C", - X"7F",X"84",X"81",X"7E",X"7D",X"84",X"82",X"7D",X"7D",X"84",X"81",X"7E",X"7C",X"84",X"81",X"7F", - X"81",X"7D",X"7D",X"82",X"83",X"80",X"7C",X"82",X"83",X"7F",X"7C",X"81",X"84",X"7F",X"81",X"7F", - X"7C",X"80",X"83",X"82",X"7D",X"7E",X"84",X"81",X"7F",X"81",X"7C",X"80",X"84",X"81",X"7D",X"7E", - X"84",X"80",X"7F",X"7C",X"83",X"83",X"7E",X"7D",X"84",X"81",X"7B",X"82",X"83",X"7F",X"7C",X"81", - X"83",X"80",X"7C",X"81",X"84",X"7F",X"80",X"80",X"7C",X"81",X"84",X"7D",X"7D",X"83",X"82",X"7F", - X"81",X"7D",X"7D",X"82",X"83",X"80",X"80",X"80",X"7B",X"82",X"83",X"80",X"7E",X"7D",X"84",X"81", - X"7F",X"80",X"7B",X"82",X"83",X"80",X"7E",X"7D",X"85",X"80",X"80",X"7F",X"7C",X"83",X"82",X"7C", - X"81",X"84",X"7C",X"80",X"84",X"7D",X"7E",X"85",X"7F",X"7C",X"83",X"82",X"7F",X"81",X"7C",X"81", - X"84",X"80",X"80",X"80",X"7D",X"7F",X"83",X"82",X"7C",X"81",X"83",X"7F",X"81",X"7C",X"7F",X"83", - X"81",X"7F",X"81",X"7D",X"7E",X"85",X"80",X"80",X"7F",X"7C",X"82",X"83",X"7D",X"7E",X"83",X"82", - X"7E",X"7D",X"84",X"81",X"80",X"80",X"7C",X"81",X"84",X"80",X"81",X"7E",X"7D",X"84",X"82",X"7C", - X"82",X"83",X"7C",X"7F",X"84",X"80",X"80",X"81",X"7D",X"7E",X"83",X"82",X"80",X"80",X"7C",X"82", - X"83",X"7C",X"80",X"84",X"7D",X"7D",X"84",X"80",X"81",X"7C",X"82",X"83",X"7F",X"7E",X"7E",X"84", - X"80",X"80",X"80",X"7D",X"7E",X"85",X"80",X"7D",X"83",X"81",X"7C",X"81",X"83",X"7F",X"7C",X"82", - X"83",X"7B",X"80",X"83",X"80",X"7D",X"7E",X"84",X"80",X"80",X"80",X"7D",X"7F",X"84",X"7F",X"7C", - X"84",X"81",X"80",X"7C",X"83",X"82",X"7C",X"82",X"82",X"7C",X"80",X"84",X"7D",X"7E",X"84",X"80", - X"80",X"80",X"7C",X"83",X"82",X"80",X"7E",X"7E",X"85",X"7E",X"7D",X"82",X"83",X"7E",X"7D",X"83", - X"80",X"7C",X"83",X"81",X"7C",X"83",X"81",X"80",X"80",X"7C",X"7F",X"82",X"82",X"7E",X"7D",X"83", - X"82",X"7E",X"7D",X"83",X"82",X"7E",X"7E",X"84",X"7F",X"7C",X"84",X"80",X"7C",X"83",X"81",X"7F", - X"80",X"7C",X"81",X"83",X"80",X"7F",X"7D",X"83",X"81",X"7C",X"81",X"83",X"7B",X"82",X"82",X"7F", - X"80",X"7C",X"82",X"82",X"80",X"7D",X"82",X"83",X"7B",X"82",X"82",X"80",X"7D",X"80",X"83",X"80", - X"7D",X"80",X"84",X"7F",X"81",X"7F",X"7D",X"82",X"83",X"80",X"7C",X"81",X"83",X"7F",X"7D",X"81", - X"84",X"7D",X"7F",X"84",X"7F",X"7D",X"84",X"80",X"81",X"7C",X"81",X"83",X"7F",X"81",X"7E",X"7E", - X"82",X"83",X"7F",X"81",X"7D",X"7F",X"83",X"81",X"7D",X"7F",X"84",X"80",X"7C",X"83",X"81",X"7C", - X"82",X"82",X"7C",X"80",X"83",X"80",X"80",X"80",X"7D",X"7E",X"83",X"81",X"80",X"80",X"7F",X"7D", - X"82",X"83",X"80",X"80",X"80",X"7C",X"81",X"83",X"7F",X"81",X"7E",X"7D",X"82",X"82",X"80",X"7E", - X"7D",X"84",X"81",X"80",X"80",X"7D",X"80",X"84",X"7E",X"7E",X"83",X"81",X"7F",X"7D",X"82",X"82", - X"7E",X"7E",X"83",X"7F",X"7D",X"82",X"82",X"7F",X"7D",X"82",X"83",X"7F",X"7D",X"83",X"81",X"7C", - X"82",X"81",X"7F",X"81",X"7D",X"80",X"83",X"7F",X"7D",X"83",X"81",X"7F",X"81",X"7C",X"81",X"83", - X"7F",X"80",X"7F",X"7D",X"82",X"82",X"80",X"7D",X"80",X"83",X"80",X"7D",X"82",X"82",X"7F",X"81", - X"7D",X"7F",X"82",X"82",X"7D",X"81",X"83",X"7F",X"81",X"7D",X"7E",X"84",X"7F",X"7D",X"83",X"80", - X"7D",X"83",X"81",X"80",X"7E",X"7E",X"84",X"7E",X"7E",X"82",X"81",X"7D",X"80",X"83",X"81",X"7E", - X"7E",X"83",X"81",X"7D",X"80",X"83",X"7E",X"7E",X"83",X"81",X"80",X"80",X"7C",X"82",X"82",X"7E", - X"7E",X"83",X"81",X"7E",X"7E",X"83",X"80",X"80",X"7F",X"7D",X"83",X"80",X"80",X"7D",X"83",X"81", - X"80",X"7D",X"80",X"83",X"7F",X"81",X"7E",X"7F",X"83",X"7F",X"7D",X"83",X"80",X"7C",X"83",X"81", - X"7D",X"82",X"82",X"7C",X"81",X"82",X"80",X"7E",X"7F",X"83",X"81",X"7E",X"7F",X"83",X"80",X"80", - X"81",X"7D",X"7F",X"83",X"81",X"7D",X"80",X"83",X"80",X"7D",X"81",X"82",X"7F",X"81",X"7D",X"7F", - X"83",X"80",X"7D",X"83",X"80",X"7F",X"7D",X"83",X"81",X"80",X"80",X"7D",X"81",X"83",X"80",X"7D", - X"83",X"81",X"80",X"80",X"7D",X"80",X"82",X"81",X"7E",X"7E",X"83",X"81",X"7E",X"7E",X"83",X"81", - X"80",X"81",X"7E",X"7E",X"82",X"82",X"7F",X"7D",X"82",X"82",X"7C",X"81",X"82",X"81",X"7D",X"81", - X"82",X"80",X"7E",X"7E",X"83",X"81",X"7E",X"7E",X"83",X"81",X"7F",X"7E",X"83",X"81",X"7E",X"7E", - X"83",X"81",X"7F",X"7E",X"82",X"82",X"7E",X"7F",X"83",X"7F",X"7D",X"82",X"82",X"7E",X"7E",X"83", - X"80",X"80",X"7E",X"7E",X"83",X"81",X"7F",X"7E",X"83",X"7F",X"7E",X"83",X"80",X"7D",X"81",X"83", - X"7F",X"80",X"80",X"7D",X"80",X"83",X"7D",X"7F",X"83",X"80",X"81",X"7E",X"7E",X"83",X"80",X"80", - X"80",X"7D",X"80",X"82",X"82",X"7D",X"80",X"82",X"80",X"7E",X"7E",X"83",X"81",X"7E",X"7E",X"83", - X"80",X"80",X"80",X"7D",X"80",X"83",X"7F",X"7D",X"82",X"82",X"7F",X"81",X"7F",X"7E",X"82",X"81", - X"7D",X"81",X"82",X"7F",X"81",X"7D",X"80",X"82",X"81",X"7E",X"7F",X"83",X"81",X"7E",X"7E",X"83", - X"80",X"7D",X"81",X"82",X"80",X"80",X"7D",X"81",X"82",X"80",X"80",X"7F",X"7D",X"81",X"83",X"7F", - X"7E",X"82",X"81",X"7D",X"81",X"82",X"7F",X"81",X"7D",X"81",X"82",X"7F",X"80",X"7E",X"7E",X"82", - X"82",X"80",X"80",X"7D",X"81",X"83",X"7E",X"7E",X"82",X"82",X"7E",X"7F",X"83",X"7F",X"7D",X"82", - X"82",X"80",X"80",X"80",X"7D",X"81",X"82",X"81",X"7D",X"80",X"82",X"80",X"7E",X"80",X"83",X"80", - X"7F",X"7E",X"83",X"81",X"80",X"80",X"7D",X"81",X"82",X"80",X"80",X"80",X"7D",X"80",X"83",X"7F", - X"7E",X"83",X"80",X"7D",X"81",X"82",X"80",X"7D",X"81",X"82",X"7F",X"80",X"80",X"7D",X"80",X"82", - X"80",X"7D",X"81",X"82",X"80",X"80",X"80",X"7D",X"80",X"82",X"80",X"7F",X"7E",X"83",X"7F",X"7E", - X"83",X"80",X"80",X"80",X"7D",X"81",X"82",X"81",X"7D",X"81",X"81",X"80",X"7E",X"7F",X"83",X"80", - X"7F",X"7E",X"83",X"80",X"80",X"80",X"7F",X"7E",X"82",X"82",X"80",X"80",X"80",X"7D",X"81",X"82", - X"7D",X"80",X"83",X"7F",X"7E",X"82",X"81",X"7D",X"80",X"82",X"80",X"7D",X"81",X"81",X"80",X"7D", - X"81",X"82",X"80",X"7E",X"7F",X"83",X"80",X"80",X"80",X"7E",X"7F",X"82",X"82",X"7E",X"7F",X"82", - X"80",X"7E",X"80",X"82",X"7F",X"81",X"7E",X"7E",X"82",X"82",X"80",X"80",X"80",X"7E",X"80",X"82", - X"81",X"7E",X"81",X"82",X"7F",X"81",X"7E",X"7F",X"82",X"81",X"80",X"80",X"7D",X"80",X"82",X"81", - X"7E",X"80",X"82",X"7F",X"81",X"7E",X"7E",X"81",X"82",X"80",X"80",X"80",X"7E",X"80",X"82",X"80", - X"80",X"80",X"7D",X"82",X"81",X"80",X"80",X"7E",X"7F",X"82",X"81",X"80",X"80",X"7D",X"82",X"81", - X"7F",X"81",X"7E",X"7F",X"82",X"80",X"7D",X"81",X"82",X"80",X"7D",X"81",X"82",X"7F",X"80",X"7D", - X"81",X"82",X"7D",X"80",X"82",X"80",X"7E",X"81",X"82",X"7D",X"81",X"81",X"80",X"7D",X"81",X"82", - X"7F",X"80",X"7E",X"7F",X"82",X"81",X"7F",X"81",X"7D",X"81",X"82",X"7E",X"7F",X"82",X"81",X"7E", - X"7F",X"83",X"7F",X"7E",X"82",X"81",X"80",X"80",X"7F",X"7E",X"81",X"82",X"80",X"80",X"80",X"7E", - X"7F",X"82",X"81",X"7E",X"81",X"82",X"7E",X"7F",X"82",X"80",X"80",X"7E",X"81",X"82",X"7F",X"80", - X"7E",X"80",X"81",X"82",X"7F",X"7E",X"82",X"81",X"7F",X"81",X"7F",X"7E",X"82",X"81",X"7E",X"80", - X"82",X"7E",X"7F",X"82",X"81",X"7E",X"7F",X"83",X"7F",X"7E",X"82",X"81",X"80",X"80",X"7F",X"7E", - X"82",X"81",X"80",X"7E",X"7F",X"82",X"81",X"7E",X"7F",X"82",X"80",X"7F",X"7F",X"83",X"7E",X"7F", - X"82",X"80",X"7F",X"7E",X"82",X"81",X"7F",X"7E",X"82",X"81",X"80",X"7E",X"81",X"81",X"80",X"7E", - X"80",X"82",X"80",X"7F",X"7E",X"83",X"80",X"80",X"80",X"7E",X"81",X"82",X"80",X"7E",X"7F",X"82", - X"80",X"7E",X"80",X"82",X"7E",X"7F",X"82",X"81",X"7F",X"7F",X"83",X"7E",X"7F",X"82",X"80",X"80"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/ROM/GAL_HIT.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/ROM/GAL_HIT.vhd deleted file mode 100644 index 7d2fd29c..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/ROM/GAL_HIT.vhd +++ /dev/null @@ -1,534 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity GAL_HIT is -port ( - clk : in std_logic; - addr : in std_logic_vector(12 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of GAL_HIT is - type rom is array(0 to 8191) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"65",X"75",X"88",X"90",X"93",X"9B",X"A3",X"A3",X"A3",X"A6",X"9E",X"9B",X"9B",X"A3",X"AB",X"B6", - X"B9",X"B9",X"BE",X"B9",X"AE",X"A6",X"9E",X"98",X"88",X"78",X"68",X"65",X"65",X"65",X"62",X"68", - X"68",X"65",X"5D",X"52",X"47",X"47",X"4A",X"4D",X"4D",X"4D",X"52",X"65",X"7D",X"88",X"90",X"9B", - X"A3",X"AE",X"AE",X"AB",X"AB",X"9E",X"98",X"88",X"70",X"52",X"37",X"1F",X"17",X"1F",X"27",X"3A", - X"5A",X"68",X"78",X"83",X"93",X"A3",X"AB",X"AE",X"A3",X"93",X"88",X"88",X"83",X"88",X"8B",X"88", - X"78",X"62",X"4A",X"42",X"3A",X"42",X"4D",X"55",X"65",X"78",X"83",X"8B",X"93",X"90",X"88",X"88", - X"98",X"A6",X"A6",X"AB",X"9E",X"8B",X"7D",X"68",X"70",X"88",X"AB",X"CE",X"E9",X"FC",X"FC",X"FC", - X"FC",X"FC",X"DC",X"9B",X"4D",X"14",X"01",X"04",X"2F",X"52",X"5D",X"68",X"78",X"80",X"78",X"70", - X"5D",X"47",X"32",X"1F",X"14",X"09",X"11",X"1C",X"32",X"52",X"83",X"B9",X"D1",X"C9",X"AB",X"8B", - X"70",X"68",X"75",X"78",X"80",X"8B",X"8B",X"98",X"AB",X"BE",X"C1",X"AB",X"83",X"5D",X"3A",X"17", - X"11",X"17",X"27",X"3A",X"65",X"90",X"AE",X"B6",X"9B",X"78",X"55",X"4A",X"4D",X"5A",X"5D",X"52", - X"4A",X"4A",X"52",X"78",X"AB",X"D4",X"FC",X"FC",X"F7",X"E9",X"E1",X"D1",X"C9",X"BE",X"AB",X"90", - X"52",X"14",X"01",X"01",X"01",X"01",X"01",X"01",X"2F",X"4A",X"52",X"47",X"47",X"62",X"70",X"7D", - X"7D",X"78",X"7D",X"90",X"B3",X"CE",X"EC",X"FC",X"FC",X"FC",X"FC",X"F4",X"E9",X"F4",X"FC",X"FC", - X"FC",X"FC",X"CE",X"98",X"65",X"2C",X"01",X"01",X"01",X"01",X"01",X"32",X"6D",X"7D",X"68",X"4A", - X"27",X"11",X"1C",X"3A",X"4D",X"62",X"68",X"65",X"68",X"70",X"80",X"9B",X"D1",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"DC",X"A3",X"75",X"55",X"62",X"80",X"A3",X"BE",X"CE",X"C1",X"90",X"4A",X"01", - X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"37",X"88",X"C9",X"FC",X"FC",X"FC",X"FC",X"FC",X"DC", - X"B6",X"90",X"68",X"3F",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"1F",X"83",X"BE",X"D1",X"CE", - X"D4",X"F4",X"FC",X"FC",X"FC",X"F7",X"D1",X"CE",X"DC",X"F7",X"FC",X"FC",X"FC",X"FC",X"D1",X"8B", - X"68",X"68",X"88",X"A6",X"C1",X"D9",X"D4",X"BE",X"A3",X"88",X"75",X"68",X"62",X"5D",X"62",X"68", - X"6D",X"78",X"75",X"55",X"2C",X"11",X"11",X"2F",X"55",X"75",X"83",X"93",X"9E",X"B9",X"E9",X"FC", - X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"BE",X"68",X"32",X"11",X"17",X"32",X"52",X"7D", - X"AE",X"E1",X"F7",X"E1",X"A3",X"62",X"17",X"01",X"01",X"01",X"01",X"01",X"1C",X"4D",X"7D",X"90", - X"9B",X"A6",X"B6",X"BE",X"A6",X"70",X"37",X"14",X"14",X"1C",X"14",X"1C",X"2F",X"3A",X"3A",X"3A", - X"4A",X"52",X"4A",X"47",X"3A",X"24",X"11",X"14",X"27",X"3A",X"65",X"9E",X"D4",X"FC",X"FC",X"F7", - X"D4",X"AB",X"93",X"93",X"93",X"83",X"68",X"4D",X"37",X"37",X"5D",X"9B",X"EC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"F7",X"CE",X"AB",X"93",X"7D",X"65",X"65",X"75",X"88",X"93",X"98",X"98",X"93", - X"93",X"90",X"93",X"8B",X"90",X"90",X"90",X"8B",X"8B",X"90",X"8B",X"90",X"90",X"90",X"90",X"8B", - X"8B",X"8B",X"8B",X"8B",X"88",X"88",X"88",X"88",X"88",X"83",X"83",X"80",X"83",X"80",X"80",X"80", - X"80",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"78",X"78",X"78",X"7D",X"78",X"75",X"78",X"75",X"78", - X"78",X"78",X"75",X"78",X"75",X"70",X"75",X"75",X"75",X"75",X"70",X"6D",X"68",X"6D",X"70",X"6D", - X"6D",X"6D",X"6D",X"6D",X"6D",X"6D",X"6D",X"6D",X"6D",X"70",X"70",X"70",X"75",X"75",X"75",X"75", - X"75",X"70",X"62",X"4D",X"4D",X"4D",X"47",X"4A",X"68",X"98",X"B6",X"B3",X"9B",X"78",X"5A",X"3F", - X"32",X"2F",X"32",X"3F",X"5A",X"90",X"D1",X"FC",X"FC",X"FC",X"FC",X"FC",X"E9",X"90",X"4D",X"3A", - X"47",X"5D",X"5D",X"4D",X"3A",X"27",X"1C",X"14",X"11",X"0C",X"01",X"01",X"01",X"01",X"01",X"01", - X"04",X"4A",X"9E",X"F7",X"FC",X"FC",X"FC",X"FC",X"EC",X"E4",X"E4",X"D1",X"AB",X"80",X"62",X"47", - X"37",X"2F",X"2C",X"24",X"04",X"01",X"24",X"52",X"70",X"70",X"62",X"4D",X"3F",X"37",X"37",X"3A", - X"4D",X"62",X"78",X"93",X"AE",X"D1",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"B6",X"68", - X"2C",X"01",X"01",X"01",X"01",X"01",X"01",X"09",X"47",X"65",X"68",X"68",X"62",X"5A",X"52",X"4D", - X"52",X"4D",X"52",X"52",X"5A",X"5D",X"65",X"68",X"6D",X"70",X"75",X"75",X"75",X"65",X"37",X"1C", - X"09",X"09",X"1C",X"32",X"4D",X"70",X"93",X"AB",X"C9",X"D9",X"E9",X"EF",X"FC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"F7",X"6D",X"0C",X"01",X"01",X"01",X"01",X"01",X"17",X"62",X"83",X"78", - X"5A",X"37",X"14",X"04",X"01",X"01",X"01",X"01",X"04",X"11",X"1C",X"1C",X"01",X"01",X"0C",X"3F", - X"6D",X"7D",X"78",X"68",X"65",X"83",X"B3",X"E1",X"F4",X"E4",X"C6",X"A3",X"8B",X"75",X"68",X"65", - X"5D",X"62",X"65",X"62",X"5A",X"3F",X"27",X"17",X"1F",X"5A",X"9E",X"CE",X"D4",X"C9",X"AE",X"A6", - X"AE",X"AB",X"9B",X"83",X"80",X"98",X"9B",X"9B",X"9B",X"B6",X"D9",X"E4",X"E1",X"DC",X"E1",X"D4", - X"B3",X"83",X"5A",X"3A",X"1F",X"11",X"0C",X"11",X"14",X"1C",X"1F",X"2C",X"2C",X"1F",X"27",X"32", - X"3F",X"5D",X"83",X"9B",X"93",X"93",X"88",X"7D",X"7D",X"75",X"70",X"70",X"6D",X"68",X"68",X"68", - X"5A",X"5A",X"75",X"88",X"93",X"93",X"90",X"90",X"88",X"83",X"80",X"80",X"7D",X"7D",X"7D",X"80", - X"7D",X"80",X"80",X"80",X"80",X"83",X"80",X"80",X"7D",X"7D",X"80",X"80",X"83",X"83",X"80",X"80", - X"80",X"7D",X"7D",X"70",X"70",X"6D",X"75",X"83",X"90",X"93",X"90",X"88",X"88",X"80",X"78",X"7D", - X"70",X"68",X"70",X"78",X"78",X"7D",X"78",X"78",X"78",X"75",X"78",X"75",X"70",X"68",X"4D",X"3A", - X"4A",X"70",X"93",X"A3",X"B6",X"B9",X"B3",X"A3",X"90",X"80",X"75",X"70",X"68",X"68",X"68",X"65", - X"68",X"68",X"68",X"68",X"68",X"6D",X"6D",X"70",X"70",X"75",X"75",X"75",X"75",X"78",X"75",X"78", - X"78",X"78",X"78",X"78",X"78",X"78",X"70",X"55",X"37",X"1F",X"24",X"47",X"68",X"7D",X"88",X"8B", - X"88",X"88",X"88",X"8B",X"AB",X"CE",X"E9",X"FC",X"FC",X"FC",X"FC",X"EF",X"C9",X"AB",X"80",X"5A", - X"4A",X"47",X"37",X"2C",X"32",X"4D",X"70",X"78",X"7D",X"8B",X"90",X"88",X"68",X"4A",X"2C",X"1C", - X"11",X"09",X"01",X"01",X"01",X"01",X"14",X"27",X"47",X"70",X"AE",X"E1",X"F4",X"E4",X"D1",X"AE", - X"93",X"80",X"70",X"68",X"62",X"62",X"65",X"68",X"6D",X"75",X"78",X"78",X"65",X"4A",X"4D",X"5A", - X"62",X"65",X"68",X"88",X"B9",X"EC",X"FC",X"F4",X"D1",X"B6",X"B3",X"AE",X"A3",X"98",X"A3",X"C6", - X"D9",X"D4",X"D4",X"E1",X"E1",X"C9",X"9E",X"78",X"62",X"3F",X"32",X"2C",X"27",X"2C",X"32",X"37", - X"3F",X"47",X"4A",X"52",X"55",X"5A",X"5D",X"5D",X"5A",X"3F",X"27",X"14",X"11",X"14",X"24",X"4A", - X"80",X"A6",X"BE",X"C6",X"CE",X"E4",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"DC",X"BE",X"AB",X"8B", - X"5D",X"2F",X"14",X"01",X"01",X"01",X"01",X"01",X"01",X"17",X"3F",X"65",X"70",X"6D",X"5D",X"4D", - X"4D",X"68",X"9B",X"BE",X"C9",X"B9",X"B3",X"AB",X"9B",X"A3",X"B3",X"C6",X"D1",X"B6",X"8B",X"52", - X"1C",X"11",X"11",X"14",X"37",X"62",X"90",X"9E",X"9B",X"83",X"75",X"5D",X"47",X"32",X"2F",X"24", - X"17",X"11",X"11",X"17",X"27",X"5D",X"A3",X"E1",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"EF",X"CE", - X"9B",X"7D",X"68",X"62",X"62",X"7D",X"98",X"9E",X"93",X"7D",X"6D",X"5D",X"55",X"52",X"52",X"52", - X"55",X"55",X"5D",X"62",X"65",X"68",X"6D",X"70",X"75",X"7D",X"78",X"7D",X"80",X"83",X"78",X"62", - X"3A",X"27",X"14",X"17",X"27",X"3F",X"5A",X"78",X"98",X"AE",X"C6",X"DC",X"FC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"F7",X"A6",X"80",X"70",X"62",X"65",X"7D",X"98",X"A6",X"9B",X"80",X"62",X"32", - X"04",X"01",X"01",X"01",X"01",X"01",X"11",X"3A",X"5D",X"83",X"98",X"93",X"88",X"83",X"88",X"78", - X"5D",X"4A",X"37",X"2C",X"24",X"27",X"24",X"17",X"14",X"32",X"5D",X"80",X"90",X"90",X"93",X"93", - X"93",X"90",X"8B",X"8B",X"8B",X"8B",X"90",X"93",X"93",X"98",X"98",X"9B",X"9B",X"9B",X"9E",X"9E", - X"9E",X"9E",X"9E",X"9E",X"9E",X"9B",X"9E",X"9B",X"98",X"98",X"98",X"93",X"93",X"90",X"93",X"8B", - X"88",X"75",X"52",X"37",X"1F",X"1C",X"27",X"37",X"4D",X"68",X"83",X"AE",X"E4",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"D1",X"9B",X"65",X"42",X"3A",X"52",X"80",X"AE",X"D4",X"E9",X"E4",X"C6", - X"80",X"3A",X"11",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"32",X"88",X"C6",X"F7",X"FC", - X"E4",X"CE",X"B9",X"A3",X"80",X"62",X"47",X"37",X"2F",X"2C",X"2F",X"37",X"3F",X"3A",X"32",X"3A", - X"37",X"32",X"37",X"3A",X"52",X"7D",X"B3",X"DC",X"E4",X"E1",X"D1",X"D1",X"E1",X"FC",X"FC",X"FC", - X"FC",X"F4",X"CE",X"A3",X"83",X"75",X"7D",X"83",X"83",X"88",X"98",X"A6",X"A6",X"98",X"88",X"75", - X"68",X"5D",X"5A",X"5A",X"5A",X"62",X"65",X"68",X"6D",X"70",X"75",X"75",X"75",X"7D",X"83",X"83", - X"80",X"75",X"68",X"70",X"80",X"8B",X"93",X"98",X"98",X"90",X"90",X"8B",X"90",X"98",X"A3",X"AE", - X"B6",X"C9",X"C9",X"C1",X"B3",X"A3",X"98",X"8B",X"78",X"75",X"70",X"6D",X"65",X"68",X"70",X"80", - X"83",X"83",X"88",X"8B",X"83",X"78",X"68",X"5D",X"52",X"42",X"2C",X"27",X"2C",X"3A",X"47",X"42", - X"42",X"52",X"70",X"8B",X"A6",X"AB",X"A3",X"9E",X"9E",X"B3",X"B9",X"B9",X"BE",X"BE",X"B9",X"A3", - X"88",X"68",X"5D",X"5A",X"5A",X"52",X"52",X"68",X"70",X"65",X"62",X"62",X"68",X"7D",X"8B",X"8B", - X"83",X"75",X"65",X"68",X"75",X"80",X"9B",X"C1",X"EC",X"FC",X"FC",X"F7",X"EF",X"E9",X"D1",X"A3", - X"78",X"5D",X"42",X"2C",X"14",X"0C",X"09",X"0C",X"0C",X"17",X"2C",X"47",X"62",X"75",X"75",X"68", - X"62",X"52",X"4A",X"4A",X"42",X"3F",X"4A",X"55",X"68",X"90",X"A3",X"B9",X"C6",X"CE",X"E4",X"FC", - X"FC",X"EC",X"E9",X"E9",X"DC",X"C1",X"B3",X"A6",X"98",X"75",X"52",X"3A",X"2C",X"1C",X"11",X"01", - X"0C",X"1F",X"37",X"52",X"70",X"78",X"78",X"68",X"62",X"62",X"75",X"98",X"B6",X"BE",X"B3",X"AB", - X"A6",X"9B",X"9E",X"AE",X"B9",X"C1",X"AE",X"90",X"5D",X"32",X"2C",X"27",X"2C",X"3F",X"62",X"83", - X"93",X"90",X"88",X"80",X"70",X"5D",X"52",X"47",X"3A",X"2F",X"24",X"1F",X"2C",X"3A",X"68",X"A3", - X"D4",X"F4",X"FC",X"FC",X"F4",X"E9",X"E9",X"DC",X"B9",X"90",X"78",X"68",X"5D",X"62",X"7D",X"93", - X"9B",X"90",X"7D",X"70",X"5D",X"5A",X"52",X"52",X"52",X"55",X"5A",X"5D",X"65",X"68",X"68",X"70", - X"70",X"75",X"78",X"78",X"7D",X"80",X"80",X"78",X"65",X"3F",X"27",X"17",X"1C",X"2C",X"3F",X"5D", - X"78",X"93",X"AE",X"C6",X"DC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"F7",X"A6",X"80",X"70", - X"62",X"65",X"7D",X"98",X"A6",X"9B",X"80",X"62",X"32",X"04",X"01",X"01",X"01",X"01",X"01",X"11", - X"3A",X"5D",X"83",X"98",X"93",X"88",X"83",X"88",X"78",X"5D",X"4A",X"37",X"2C",X"24",X"27",X"24", - X"17",X"14",X"32",X"5D",X"80",X"90",X"90",X"93",X"93",X"93",X"90",X"8B",X"8B",X"8B",X"8B",X"90", - X"93",X"93",X"98",X"98",X"9B",X"9B",X"9B",X"9E",X"9E",X"9E",X"9E",X"9E",X"9E",X"9E",X"9B",X"9E", - X"9B",X"98",X"98",X"98",X"93",X"93",X"90",X"93",X"8B",X"88",X"75",X"52",X"37",X"1F",X"1C",X"24", - X"37",X"4D",X"68",X"88",X"AE",X"E4",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"D4",X"9B",X"65", - X"3F",X"37",X"52",X"80",X"B3",X"D9",X"EC",X"EC",X"C9",X"7D",X"37",X"04",X"01",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"27",X"88",X"D1",X"FC",X"FC",X"EC",X"D1",X"BE",X"A3",X"7D",X"62",X"3A", - X"2C",X"1F",X"1F",X"24",X"2C",X"32",X"2C",X"27",X"2F",X"27",X"27",X"27",X"2C",X"47",X"7D",X"C1", - X"F7",X"FC",X"FC",X"E9",X"E1",X"EC",X"FC",X"FC",X"FC",X"FC",X"FC",X"E4",X"AE",X"88",X"78",X"83", - X"8B",X"8B",X"93",X"A3",X"B9",X"BE",X"A6",X"90",X"75",X"65",X"52",X"52",X"52",X"4D",X"55",X"5D", - X"62",X"68",X"70",X"70",X"70",X"75",X"80",X"8B",X"90",X"90",X"8B",X"83",X"90",X"98",X"9B",X"9E", - X"9E",X"9B",X"93",X"93",X"8B",X"90",X"8B",X"8B",X"8B",X"88",X"8B",X"8B",X"8B",X"8B",X"88",X"8B", - X"8B",X"8B",X"8B",X"8B",X"8B",X"88",X"8B",X"88",X"88",X"88",X"88",X"83",X"83",X"80",X"80",X"80", - X"80",X"7D",X"65",X"47",X"52",X"68",X"78",X"78",X"65",X"5A",X"5D",X"6D",X"75",X"78",X"70",X"68", - X"70",X"90",X"C9",X"EC",X"FC",X"FC",X"FC",X"FC",X"E1",X"A6",X"68",X"42",X"3A",X"37",X"3A",X"5D", - X"7D",X"83",X"68",X"55",X"52",X"47",X"32",X"17",X"09",X"01",X"01",X"09",X"17",X"2C",X"52",X"9B", - X"E1",X"FC",X"FC",X"FC",X"FC",X"FC",X"F4",X"DC",X"A6",X"78",X"62",X"47",X"1F",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"3F",X"7D",X"A3",X"9B",X"80",X"5D",X"4A",X"5A",X"7D",X"90",X"9B",X"AB", - X"A6",X"AB",X"AB",X"9E",X"A6",X"BE",X"D4",X"E4",X"D4",X"A6",X"88",X"7D",X"88",X"88",X"83",X"90", - X"A3",X"AB",X"A6",X"9E",X"98",X"8B",X"83",X"80",X"80",X"80",X"83",X"83",X"88",X"8B",X"8B",X"90", - X"90",X"90",X"93",X"98",X"98",X"9B",X"93",X"98",X"93",X"93",X"93",X"93",X"93",X"93",X"90",X"90", - X"90",X"8B",X"8B",X"83",X"80",X"7D",X"68",X"52",X"52",X"62",X"68",X"88",X"AB",X"C6",X"C9",X"C9", - X"B6",X"A6",X"9E",X"8B",X"83",X"8B",X"A3",X"B3",X"AE",X"98",X"80",X"6D",X"5D",X"52",X"47",X"42", - X"47",X"3F",X"47",X"42",X"42",X"4D",X"62",X"65",X"68",X"68",X"68",X"68",X"68",X"68",X"68",X"68", - X"65",X"68",X"68",X"68",X"6D",X"70",X"6D",X"6D",X"70",X"75",X"70",X"75",X"78",X"75",X"78",X"75", - X"78",X"78",X"78",X"78",X"78",X"78",X"78",X"7D",X"80",X"80",X"6D",X"65",X"70",X"80",X"80",X"68", - X"52",X"32",X"2C",X"37",X"68",X"9B",X"B6",X"B6",X"B6",X"C1",X"D4",X"D9",X"C6",X"A3",X"78",X"5A", - X"3F",X"32",X"32",X"3A",X"55",X"8B",X"CE",X"FC",X"FC",X"FC",X"FC",X"FC",X"E1",X"A3",X"62",X"2F", - X"1C",X"09",X"01",X"01",X"1C",X"47",X"5D",X"68",X"80",X"93",X"90",X"80",X"70",X"5A",X"4D",X"52", - X"68",X"78",X"7D",X"70",X"5D",X"4A",X"3A",X"32",X"32",X"2F",X"27",X"27",X"1C",X"11",X"09",X"0C", - X"14",X"2C",X"42",X"75",X"AB",X"DC",X"F7",X"FC",X"FC",X"F7",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"BE",X"88",X"4D",X"11",X"01",X"01",X"0C",X"3F",X"75",X"9E",X"B6",X"B3", - X"93",X"70",X"52",X"3A",X"1F",X"11",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"24",X"3F", - X"52",X"62",X"68",X"7D",X"9E",X"C1",X"E4",X"FC",X"FC",X"F7",X"E1",X"BE",X"A3",X"90",X"80",X"88", - X"AB",X"E1",X"FC",X"FC",X"FC",X"FC",X"F7",X"BE",X"7D",X"3F",X"0C",X"01",X"01",X"01",X"01",X"27", - X"70",X"B6",X"E9",X"FC",X"FC",X"E9",X"AE",X"83",X"62",X"4D",X"2F",X"04",X"01",X"01",X"01",X"01", - X"01",X"01",X"01",X"3F",X"98",X"CE",X"D1",X"BE",X"B6",X"C1",X"D4",X"E9",X"FC",X"E9",X"C9",X"AB", - X"9B",X"88",X"5D",X"37",X"27",X"27",X"1F",X"1C",X"1C",X"1F",X"37",X"70",X"B6",X"FC",X"FC",X"FC", - X"FC",X"FC",X"F4",X"F4",X"E4",X"C6",X"98",X"70",X"5A",X"3A",X"37",X"47",X"6D",X"AE",X"F7",X"FC", - X"FC",X"FC",X"FC",X"FC",X"FC",X"CE",X"93",X"55",X"17",X"01",X"01",X"01",X"1C",X"4A",X"80",X"AB", - X"B3",X"A6",X"A3",X"A3",X"A3",X"A6",X"9B",X"78",X"42",X"11",X"04",X"11",X"1C",X"1F",X"37",X"55", - X"7D",X"8B",X"80",X"5D",X"47",X"4D",X"65",X"6D",X"5D",X"4A",X"3F",X"4D",X"7D",X"B6",X"EC",X"FC", - X"FC",X"FC",X"E4",X"C6",X"9E",X"98",X"9B",X"90",X"75",X"5D",X"62",X"7D",X"9B",X"C6",X"E1",X"E9", - X"D9",X"B3",X"93",X"83",X"70",X"68",X"5D",X"5A",X"52",X"52",X"52",X"55",X"5D",X"65",X"65",X"68", - X"5A",X"37",X"2F",X"4A",X"65",X"6D",X"68",X"75",X"93",X"BE",X"E4",X"EC",X"D1",X"B3",X"9E",X"AB", - X"AB",X"9E",X"80",X"65",X"42",X"32",X"32",X"4A",X"75",X"90",X"A3",X"BE",X"E4",X"FC",X"FC",X"FC", - X"FC",X"D1",X"93",X"5A",X"3A",X"3A",X"47",X"5A",X"7D",X"A6",X"CE",X"CE",X"B9",X"A6",X"9B",X"80", - X"52",X"1C",X"01",X"01",X"01",X"11",X"47",X"78",X"9E",X"AB",X"9B",X"78",X"5A",X"2C",X"14",X"1C", - X"27",X"1F",X"11",X"01",X"01",X"01",X"1C",X"3F",X"75",X"AB",X"C9",X"D4",X"DC",X"CE",X"C9",X"D1", - X"E1",X"F4",X"FC",X"FC",X"FC",X"E4",X"BE",X"90",X"70",X"4A",X"11",X"01",X"01",X"01",X"01",X"09", - X"17",X"4A",X"90",X"D4",X"FC",X"FC",X"FC",X"F4",X"E9",X"E9",X"FC",X"FC",X"E4",X"B3",X"80",X"52", - X"2F",X"1C",X"1F",X"32",X"68",X"AE",X"F4",X"FC",X"FC",X"FC",X"E4",X"C9",X"AB",X"80",X"5D",X"47", - X"37",X"42",X"75",X"AB",X"DC",X"FC",X"FC",X"FC",X"D9",X"93",X"55",X"37",X"2F",X"3A",X"52",X"62", - X"68",X"68",X"55",X"27",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"1C",X"32",X"4D",X"68", - X"9B",X"CE",X"E4",X"F4",X"EC",X"E4",X"E4",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"D9", - X"88",X"4A",X"17",X"04",X"11",X"42",X"75",X"88",X"9B",X"B6",X"BE",X"A6",X"7D",X"4D",X"1C",X"01", - X"01",X"17",X"27",X"32",X"4D",X"7D",X"A6",X"B3",X"B9",X"C6",X"D1",X"D9",X"D9",X"CE",X"BE",X"A6", - X"90",X"65",X"27",X"01",X"01",X"01",X"01",X"01",X"01",X"14",X"68",X"93",X"98",X"83",X"75",X"7D", - X"9E",X"BE",X"C9",X"BE",X"A6",X"9E",X"B6",X"D9",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"D9",X"C1", - X"B3",X"9B",X"75",X"5D",X"47",X"2F",X"2F",X"4A",X"68",X"7D",X"7D",X"78",X"83",X"90",X"9E",X"AE", - X"A3",X"83",X"75",X"52",X"3F",X"4A",X"5D",X"62",X"55",X"3F",X"2F",X"24",X"32",X"5A",X"7D",X"90", - X"AB",X"CE",X"E4",X"FC",X"FC",X"FC",X"E9",X"CE",X"B3",X"98",X"88",X"83",X"83",X"90",X"B3",X"EC", - X"FC",X"FC",X"FC",X"FC",X"FC",X"CE",X"75",X"42",X"27",X"14",X"01",X"01",X"1C",X"3F",X"52",X"5A", - X"68",X"78",X"68",X"47",X"17",X"01",X"01",X"09",X"27",X"37",X"4A",X"65",X"75",X"6D",X"65",X"68", - X"68",X"5D",X"4D",X"42",X"27",X"0C",X"0C",X"14",X"1C",X"1F",X"3A",X"68",X"9E",X"CE",X"E1",X"DC", - X"DC",X"DC",X"DC",X"CE",X"A6",X"75",X"5A",X"4A",X"3A",X"4A",X"70",X"98",X"BE",X"E1",X"E9",X"E4", - X"B9",X"9E",X"90",X"8B",X"88",X"75",X"52",X"2F",X"2F",X"4A",X"5D",X"68",X"78",X"80",X"70",X"70", - X"7D",X"8B",X"9E",X"B6",X"BE",X"B6",X"AE",X"9B",X"98",X"AE",X"CE",X"E4",X"FC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"E4",X"B9",X"9E",X"88",X"65",X"4D",X"47",X"3F",X"2F",X"11",X"01",X"04", - X"1F",X"2F",X"2F",X"1F",X"11",X"01",X"0C",X"2C",X"4D",X"62",X"78",X"98",X"AB",X"BE",X"DC",X"F4", - X"F7",X"E4",X"E1",X"DC",X"C1",X"9E",X"88",X"62",X"3A",X"14",X"01",X"11",X"17",X"27",X"32",X"55", - X"88",X"B6",X"E4",X"F7",X"E4",X"C6",X"A3",X"75",X"5A",X"52",X"5A",X"68",X"78",X"80",X"80",X"5A", - X"27",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"11",X"3F",X"70",X"A3",X"C9",X"E1",X"FC",X"FC", - X"FC",X"FC",X"FC",X"DC",X"C6",X"B3",X"98",X"93",X"9B",X"AB",X"B9",X"AB",X"98",X"83",X"68",X"52", - X"4A",X"2F",X"17",X"04",X"01",X"0C",X"37",X"75",X"A3",X"B9",X"D1",X"CE",X"B3",X"A3",X"9B",X"93", - X"93",X"A6",X"BE",X"B9",X"9E",X"7D",X"55",X"37",X"27",X"27",X"4A",X"80",X"A6",X"B3",X"AE",X"AB", - X"B9",X"C6",X"B9",X"B3",X"A3",X"80",X"5D",X"4A",X"47",X"3A",X"32",X"3A",X"5A",X"7D",X"83",X"90", - X"8B",X"83",X"7D",X"70",X"65",X"6D",X"7D",X"78",X"65",X"47",X"1F",X"0C",X"01",X"01",X"09",X"2C", - X"68",X"AE",X"CE",X"D1",X"CE",X"D4",X"E4",X"E4",X"CE",X"A6",X"98",X"9B",X"AB",X"BE",X"CE",X"CE", - X"B9",X"90",X"52",X"14",X"01",X"01",X"01",X"01",X"09",X"3A",X"78",X"9E",X"AE",X"B9",X"CE",X"CE", - X"B9",X"A6",X"90",X"7D",X"7D",X"83",X"80",X"68",X"55",X"52",X"4A",X"42",X"37",X"32",X"47",X"75", - X"A6",X"C1",X"D1",X"D9",X"CE",X"C9",X"B6",X"9B",X"7D",X"62",X"4D",X"4D",X"6D",X"9E",X"D4",X"F4", - X"EC",X"E4",X"CE",X"A3",X"78",X"65",X"5A",X"4A",X"37",X"2C",X"37",X"5D",X"93",X"C6",X"E9",X"FC", - X"FC",X"D4",X"A6",X"88",X"75",X"68",X"52",X"27",X"01",X"01",X"01",X"01",X"01",X"11",X"5D",X"9B", - X"C9",X"D1",X"C9",X"BE",X"B9",X"B9",X"B9",X"B6",X"AE",X"A3",X"98",X"83",X"70",X"4D",X"17",X"01", - X"01",X"01",X"01",X"01",X"01",X"24",X"47",X"68",X"9B",X"DC",X"FC",X"FC",X"FC",X"FC",X"E9",X"F4", - X"FC",X"FC",X"FC",X"E4",X"D4",X"C9",X"B3",X"9B",X"98",X"98",X"90",X"83",X"88",X"A6",X"C9",X"DC", - X"D9",X"BE",X"AB",X"7D",X"52",X"2F",X"27",X"1F",X"11",X"17",X"27",X"2F",X"2F",X"3F",X"52",X"5D", - X"5A",X"65",X"70",X"75",X"80",X"88",X"8B",X"9B",X"AB",X"BE",X"C6",X"AE",X"83",X"55",X"27",X"09", - X"09",X"27",X"52",X"83",X"93",X"98",X"93",X"88",X"83",X"80",X"70",X"55",X"3F",X"2C",X"27",X"32", - X"47",X"65",X"8B",X"AE",X"D4",X"E9",X"D9",X"B3",X"98",X"90",X"93",X"88",X"68",X"4D",X"4A",X"5A", - X"68",X"6D",X"7D",X"8B",X"90",X"8B",X"88",X"8B",X"98",X"9E",X"9B",X"83",X"62",X"2F",X"09",X"04", - X"1F",X"47",X"6D",X"98",X"AE",X"B6",X"B3",X"AB",X"9B",X"9B",X"A3",X"B6",X"C6",X"B9",X"9B",X"83", - X"78",X"6D",X"65",X"5A",X"5A",X"68",X"88",X"A6",X"B6",X"A3",X"8B",X"75",X"68",X"6D",X"6D",X"65", - X"5D",X"5D",X"68",X"80",X"A3",X"CE",X"DC",X"D4",X"CE",X"CE",X"C9",X"C6",X"CE",X"BE",X"AB",X"90", - X"80",X"80",X"8B",X"98",X"9E",X"B6",X"DC",X"E4",X"E4",X"E1",X"CE",X"C6",X"B6",X"98",X"80",X"7D", - X"75",X"70",X"68",X"68",X"62",X"3F",X"11",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"11",X"47",X"68",X"90",X"B6",X"CE",X"D4",X"E1",X"E9",X"E9",X"E4",X"E4",X"E9",X"E4",X"D4",X"C6", - X"A6",X"78",X"42",X"14",X"01",X"01",X"01",X"01",X"14",X"42",X"78",X"AB",X"D1",X"E1",X"D9",X"C6", - X"9B",X"7D",X"75",X"78",X"88",X"93",X"8B",X"88",X"70",X"4D",X"2F",X"24",X"1C",X"24",X"27",X"24", - X"27",X"3A",X"62",X"88",X"B3",X"CE",X"DC",X"EC",X"EF",X"E1",X"CE",X"BE",X"A3",X"83",X"68",X"52", - X"4D",X"55",X"65",X"78",X"78",X"80",X"90",X"90",X"90",X"8B",X"75",X"5D",X"4D",X"52",X"62",X"80", - X"A3",X"B6",X"B6",X"B6",X"A6",X"90",X"83",X"88",X"93",X"9E",X"BE",X"D1",X"C9",X"AE",X"8B",X"62", - X"3F",X"27",X"1C",X"32",X"62",X"88",X"9B",X"A3",X"AB",X"C1",X"CE",X"C1",X"B6",X"A6",X"90",X"6D", - X"5D",X"55",X"3F",X"2F",X"2F",X"47",X"5D",X"65",X"6D",X"75",X"78",X"83",X"7D",X"75",X"7D",X"83", - X"80",X"68",X"4D",X"2F",X"14",X"04",X"04",X"17",X"37",X"70",X"A6",X"C1",X"C1",X"B9",X"BE",X"D1", - X"D4",X"C1",X"A3",X"98",X"9E",X"AE",X"C9",X"D4",X"D4",X"C6",X"98",X"5D",X"24",X"01",X"01",X"01", - X"01",X"17",X"4A",X"7D",X"A3",X"AE",X"B9",X"C9",X"C6",X"B6",X"A3",X"8B",X"7D",X"80",X"83",X"83", - X"6D",X"55",X"52",X"4A",X"42",X"37",X"32",X"47",X"75",X"A6",X"C1",X"D1",X"D9",X"CE",X"C9",X"B6", - X"9B",X"7D",X"62",X"4D",X"4D",X"6D",X"9E",X"D4",X"F4",X"EC",X"E4",X"CE",X"A3",X"78",X"65",X"5A", - X"4A",X"37",X"2C",X"37",X"5D",X"93",X"C6",X"E9",X"FC",X"FC",X"D4",X"A6",X"88",X"75",X"68",X"52", - X"27",X"01",X"01",X"01",X"01",X"01",X"11",X"5D",X"9B",X"C9",X"D1",X"C9",X"BE",X"B9",X"B9",X"B9", - X"B6",X"AE",X"A3",X"98",X"83",X"70",X"4D",X"17",X"01",X"01",X"01",X"01",X"01",X"01",X"24",X"47", - X"68",X"9B",X"DC",X"FC",X"FC",X"FC",X"FC",X"E9",X"F4",X"FC",X"FC",X"FC",X"E4",X"D4",X"C9",X"B3", - X"9B",X"98",X"98",X"8B",X"83",X"8B",X"A6",X"C9",X"E1",X"DC",X"C1",X"A6",X"7D",X"4D",X"2C",X"24", - X"17",X"0C",X"11",X"1F",X"2C",X"2C",X"3A",X"52",X"5D",X"5A",X"65",X"70",X"78",X"88",X"90",X"90", - X"9E",X"AB",X"C1",X"C6",X"A6",X"78",X"3F",X"11",X"01",X"01",X"14",X"47",X"80",X"93",X"98",X"93", - X"83",X"70",X"65",X"4D",X"2F",X"14",X"04",X"04",X"27",X"47",X"70",X"A3",X"D1",X"FC",X"FC",X"F7", - X"C9",X"A6",X"9B",X"9B",X"8B",X"70",X"5A",X"5D",X"75",X"7D",X"80",X"8B",X"9E",X"9B",X"93",X"8B", - X"98",X"A3",X"AE",X"AE",X"93",X"68",X"32",X"04",X"04",X"24",X"52",X"88",X"B6",X"C9",X"B9",X"AB", - X"98",X"80",X"80",X"90",X"A6",X"B9",X"BE",X"A6",X"93",X"8B",X"80",X"70",X"4D",X"37",X"3F",X"62", - X"88",X"9E",X"98",X"80",X"65",X"55",X"62",X"68",X"68",X"70",X"75",X"78",X"93",X"C6",X"FC",X"FC", - X"FC",X"FC",X"F7",X"E9",X"DC",X"D4",X"BE",X"A3",X"80",X"68",X"70",X"75",X"75",X"70",X"80",X"A3", - X"B3",X"B3",X"AE",X"98",X"83",X"75",X"5D",X"52",X"5A",X"68",X"78",X"83",X"83",X"78",X"4A",X"11", - X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"37",X"78",X"A6",X"D1",X"E9",X"E4", - X"E1",X"E1",X"DC",X"D9",X"E9",X"FC",X"FC",X"FC",X"FC",X"EF",X"B9",X"75",X"2F",X"01",X"01",X"01", - X"01",X"01",X"01",X"27",X"5D",X"9B",X"D4",X"F4",X"EC",X"CE",X"A6",X"93",X"9E",X"B6",X"B6",X"A3", - X"93",X"8B",X"83",X"70",X"68",X"78",X"93",X"A6",X"9E",X"90",X"83",X"98",X"AE",X"C9",X"D4",X"DC", - X"CE",X"A6",X"7D",X"65",X"52",X"2C",X"04",X"01",X"01",X"01",X"01",X"01",X"01",X"11",X"4D",X"9E", - X"E4",X"FC",X"FC",X"FC",X"EC",X"EC",X"FC",X"FC",X"FC",X"FC",X"E9",X"AE",X"78",X"4A",X"2F",X"2F", - X"52",X"8B",X"C6",X"F4",X"FC",X"F7",X"DC",X"B3",X"80",X"4D",X"17",X"01",X"01",X"01",X"1C",X"3F", - X"70",X"A6",X"D1",X"E9",X"E1",X"CE",X"B9",X"B3",X"AE",X"A6",X"88",X"5A",X"1F",X"01",X"01",X"01", - X"01",X"01",X"14",X"52",X"8B",X"B9",X"C6",X"B6",X"A6",X"9E",X"90",X"75",X"68",X"52",X"4A",X"52", - X"68",X"88",X"93",X"83",X"62",X"3F",X"1F",X"17",X"2F",X"4D",X"68",X"75",X"83",X"9E",X"D1",X"FC", - X"FC",X"FC",X"FC",X"FC",X"D4",X"BE",X"B3",X"A3",X"A6",X"BE",X"D4",X"E1",X"CE",X"B3",X"A6",X"98", - X"75",X"4A",X"27",X"1C",X"2F",X"4D",X"68",X"7D",X"68",X"47",X"17",X"01",X"01",X"01",X"01",X"01", - X"04",X"0C",X"1F",X"32",X"4A",X"5D",X"80",X"B3",X"F7",X"FC",X"FC",X"FC",X"EC",X"D4",X"CE",X"BE", - X"C1",X"CE",X"D9",X"C9",X"A3",X"83",X"70",X"5A",X"3F",X"32",X"3F",X"5D",X"68",X"65",X"47",X"2C", - X"17",X"04",X"09",X"27",X"4A",X"68",X"90",X"9E",X"98",X"88",X"7D",X"83",X"9E",X"CE",X"E9",X"F7", - X"E4",X"BE",X"9E",X"68",X"37",X"09",X"01",X"01",X"01",X"04",X"14",X"37",X"55",X"65",X"70",X"88", - X"AE",X"DC",X"FC",X"F4",X"D1",X"AE",X"93",X"80",X"78",X"83",X"9B",X"B3",X"B3",X"98",X"70",X"47", - X"24",X"17",X"32",X"62",X"9B",X"C9",X"CE",X"B9",X"A3",X"9B",X"88",X"70",X"5D",X"55",X"68",X"93", - X"B6",X"BE",X"B3",X"AE",X"AE",X"A3",X"90",X"90",X"98",X"9B",X"AB",X"AB",X"AE",X"B3",X"AB",X"93", - X"78",X"65",X"68",X"78",X"75",X"70",X"68",X"78",X"8B",X"93",X"93",X"9E",X"B9",X"DC",X"FC",X"FC", - X"FC",X"D4",X"93",X"62",X"42",X"1C",X"01",X"01",X"04",X"0C",X"0C",X"1F",X"4A",X"78",X"AB",X"C9", - X"DC",X"E1",X"D9",X"C6",X"AB",X"90",X"70",X"47",X"09",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"01",X"1C",X"47",X"62",X"75",X"88",X"AB",X"D1",X"E9",X"EC",X"E9",X"E4",X"DC",X"F7",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"E4",X"9E",X"80",X"75",X"7D",X"70",X"6D",X"75",X"80",X"8B",X"80",X"65", - X"4A",X"2C",X"04",X"01",X"01",X"01",X"04",X"2C",X"52",X"62",X"5A",X"4D",X"5A",X"78",X"9B",X"B3", - X"C1",X"AB",X"93",X"83",X"78",X"62",X"4D",X"4A",X"52",X"4A",X"3F",X"4D",X"5D",X"7D",X"90",X"9B", - X"9E",X"83",X"68",X"62",X"5D",X"68",X"78",X"88",X"88",X"8B",X"8B",X"80",X"62",X"47",X"3F",X"3A", - X"32",X"37",X"37",X"37",X"4D",X"70",X"88",X"8B",X"80",X"70",X"70",X"8B",X"B6",X"D4",X"D4",X"CE", - X"B9",X"B9",X"C9",X"C9",X"C6",X"B6",X"B9",X"D4",X"FC",X"FC",X"FC",X"FC",X"EC",X"B6",X"80",X"52", - X"37",X"2F",X"2C",X"37",X"62",X"98",X"D1",X"FC",X"FC",X"EC",X"D1",X"A3",X"68",X"4A",X"32",X"27", - X"27",X"3A",X"55",X"68",X"62",X"52",X"3F",X"1C",X"01",X"01",X"01",X"01",X"01",X"01",X"04",X"37", - X"5A",X"70",X"88",X"88",X"7D",X"65",X"52",X"47",X"52",X"68",X"83",X"9E",X"AE",X"B6",X"C1",X"B9", - X"B6",X"AE",X"98",X"78",X"5D",X"42",X"32",X"2C",X"2F",X"4D",X"7D",X"B9",X"F7",X"FC",X"FC",X"FC", - X"E1",X"AB",X"83",X"65",X"52",X"5A",X"68",X"65",X"52",X"3F",X"3F",X"3F",X"37",X"37",X"52",X"7D", - X"A6",X"C1",X"BE",X"9E",X"88",X"7D",X"68",X"5A",X"47",X"47",X"62",X"90",X"B3",X"C6",X"D9",X"EF", - X"FC",X"FC",X"E4",X"CE",X"B9",X"B3",X"B3",X"AE",X"AB",X"9B",X"75",X"55",X"37",X"11",X"01",X"01", - X"01",X"01",X"04",X"4D",X"88",X"AB",X"B3",X"AE",X"A3",X"9B",X"AE",X"C6",X"CE",X"C9",X"BE",X"B6", - X"B3",X"AB",X"AE",X"C6",X"EF",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"CE",X"88",X"4A",X"14",X"01", - X"09",X"2C",X"52",X"78",X"93",X"93",X"78",X"47",X"0C",X"01",X"01",X"01",X"01",X"09",X"09",X"11", - X"27",X"4D",X"62",X"68",X"7D",X"90",X"9E",X"AE",X"AB",X"8B",X"70",X"62",X"52",X"3A",X"1C",X"04", - X"11",X"2F",X"5A",X"83",X"9E",X"B3",X"B9",X"B9",X"AB",X"80",X"62",X"4D",X"4D",X"5A",X"65",X"75", - X"7D",X"83",X"83",X"70",X"4D",X"1F",X"0C",X"14",X"32",X"5D",X"70",X"68",X"65",X"68",X"83",X"9E", - X"9E",X"93",X"88",X"83",X"9B",X"BE",X"D9",X"E1",X"D1",X"B6",X"A3",X"93",X"88",X"88",X"8B",X"98", - X"A3",X"C6",X"FC",X"FC",X"FC",X"FC",X"FC",X"F4",X"D4",X"B3",X"88",X"65",X"4A",X"32",X"3A",X"5D", - X"88",X"B3",X"D4",X"E4",X"E1",X"B9",X"78",X"37",X"11",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"14",X"37",X"42",X"4A",X"5A",X"68",X"78",X"90",X"AE",X"C9",X"E1",X"E1", - X"C9",X"93",X"65",X"4D",X"32",X"1F",X"17",X"27",X"37",X"3F",X"42",X"4D",X"68",X"88",X"98",X"A3", - X"B6",X"C9",X"D4",X"E4",X"E4",X"D4",X"BE",X"A6",X"AE",X"C6",X"E4",X"FC",X"FC",X"FC",X"E4",X"AB", - X"6D",X"3F",X"27",X"2F",X"52",X"83",X"AB",X"AB",X"AE",X"AE",X"AE",X"98",X"70",X"5A",X"5A",X"65", - X"7D",X"88",X"80",X"5D",X"3A",X"24",X"11",X"11",X"2F",X"52",X"75",X"83",X"93",X"A3",X"C9",X"EF", - X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"D4",X"98",X"5A",X"1F",X"01",X"01",X"01",X"11",X"2F", - X"5D",X"90",X"BE",X"E4",X"FC",X"FC",X"D9",X"A3",X"78",X"65",X"68",X"75",X"70",X"65",X"5A",X"4A", - X"2C",X"14",X"04",X"11",X"37",X"68",X"9B",X"A6",X"9B",X"88",X"83",X"90",X"93",X"90",X"8B",X"83", - X"7D",X"83",X"93",X"A6",X"B6",X"BE",X"B9",X"9E",X"68",X"42",X"2C",X"2F",X"47",X"5D",X"78",X"88", - X"90",X"93",X"90",X"70",X"52",X"37",X"17",X"11",X"17",X"2C",X"37",X"3F",X"4D",X"4A",X"3F",X"32", - X"2F",X"37",X"5A",X"7D",X"9B",X"9E",X"A6",X"AE",X"B6",X"D4",X"FC",X"FC",X"FC",X"FC",X"FC",X"EC", - X"E1",X"B9",X"93",X"6D",X"5A",X"5A",X"5D",X"68",X"75",X"78",X"83",X"83",X"83",X"83",X"70",X"5D", - X"4A",X"4D",X"62",X"7D",X"90",X"98",X"88",X"62",X"2F",X"01",X"01",X"01",X"01",X"1C",X"37",X"52", - X"65",X"68",X"5A",X"52",X"5D",X"75",X"7D",X"75",X"5D",X"4A",X"4D",X"65",X"88",X"AB",X"C6",X"D9", - X"D4",X"B6",X"93",X"83",X"70",X"5A",X"47",X"47",X"4A",X"3F",X"3A",X"3F",X"32",X"27",X"17",X"1F", - X"3F",X"68",X"93",X"9E",X"9B",X"93",X"98",X"A6",X"AB",X"AB",X"A3",X"A6",X"BE",X"E1",X"F7",X"FC", - X"FC",X"EC",X"D1",X"AE",X"93",X"8B",X"9B",X"B3",X"B6",X"B6",X"C6",X"C6",X"B6",X"A6",X"9E",X"93", - X"7D",X"5D",X"37",X"1C",X"1F",X"27",X"2C",X"37",X"52",X"75",X"93",X"98",X"8B",X"7D",X"65",X"5D", - X"65",X"75",X"88",X"9B",X"9E",X"9B",X"8B",X"80",X"83",X"8B",X"8B",X"83",X"93",X"AB",X"C9",X"DC", - X"CE",X"B9",X"A6",X"83",X"5D",X"32",X"17",X"01",X"01",X"04",X"1C",X"4A",X"80",X"B6",X"DC",X"E1", - X"D4",X"BE",X"A6",X"98",X"90",X"88",X"6D",X"4D",X"2C",X"11",X"04",X"04",X"1C",X"4D",X"83",X"B6", - X"DC",X"E4",X"D1",X"C1",X"B3",X"9B",X"80",X"68",X"68",X"68",X"75",X"7D",X"7D",X"70",X"52",X"2C", - X"04",X"01",X"01",X"01",X"11",X"2F",X"47",X"5D",X"78",X"A3",X"D4",X"EC",X"FC",X"FC",X"F7",X"EC", - X"EF",X"EC",X"D4",X"C9",X"C6",X"B9",X"9E",X"80",X"65",X"68",X"70",X"78",X"7D",X"80",X"93",X"9E", - X"AB",X"AE",X"AE",X"A3",X"8B",X"68",X"52",X"42",X"32",X"27",X"1C",X"14",X"09",X"01",X"01",X"01", - X"14",X"3F",X"78",X"A3",X"AE",X"AE",X"A3",X"A6",X"BE",X"D4",X"D9",X"D9",X"D9",X"C6",X"B9",X"AB", - X"93",X"78",X"65",X"62",X"68",X"70",X"80",X"8B",X"88",X"7D",X"70",X"6D",X"78",X"7D",X"78",X"70", - X"6D",X"83",X"9E",X"C1",X"CE",X"C1",X"B3",X"98",X"75",X"52",X"3F",X"47",X"5A",X"68",X"7D",X"88", - X"7D",X"62",X"47",X"2F",X"11",X"01",X"01",X"01",X"01",X"01",X"17",X"3F",X"65",X"78",X"93",X"9B", - X"9E",X"93",X"98",X"9B",X"98",X"A3",X"A6",X"AB",X"B3",X"C1",X"D1",X"CE",X"BE",X"AE",X"98",X"7D", - X"75",X"65",X"52",X"4A",X"3F",X"3A",X"3F",X"52",X"68",X"80",X"93",X"AB",X"B6",X"C9",X"E1",X"E4", - X"D4",X"CE",X"CE",X"C9",X"BE",X"9E",X"7D",X"5A",X"37",X"27",X"1C",X"1F",X"37",X"5A",X"75",X"80", - X"8B",X"93",X"90",X"8B",X"88",X"88",X"80",X"80",X"83",X"80",X"88",X"A3",X"C6",X"E1",X"FC",X"FC", - X"F4",X"CE",X"A3",X"80",X"65",X"4A",X"37",X"37",X"3F",X"47",X"52",X"62",X"70",X"7D",X"70",X"62", - X"52",X"55",X"68",X"78",X"80",X"75",X"65",X"65",X"5D",X"55",X"5A",X"5A",X"65",X"80",X"98",X"A3", - X"9B",X"8B",X"7D",X"80",X"88",X"90",X"98",X"9B",X"93",X"93",X"9E",X"AE",X"B9",X"B6",X"AE",X"AE", - X"A6",X"93",X"78",X"65",X"52",X"4D",X"4A",X"52",X"68",X"78",X"88",X"93",X"90",X"83",X"80",X"6D", - X"5D",X"5D",X"62",X"68",X"6D",X"6D",X"5D",X"4A",X"37",X"2F",X"32",X"52",X"75",X"93",X"A6",X"AE", - X"AB",X"AE",X"B6",X"C6",X"BE",X"C1",X"B9",X"A6",X"98",X"8B",X"70",X"52",X"3A",X"2C",X"37",X"42", - X"5A",X"68",X"70",X"78",X"7D",X"88",X"93",X"98",X"90",X"7D",X"7D",X"88",X"90",X"98",X"93",X"7D", - X"52",X"2C",X"09",X"01",X"01",X"09",X"32",X"52",X"70",X"88",X"9B",X"93",X"90",X"93",X"98",X"90", - X"83",X"70",X"65",X"62",X"78",X"93",X"AE",X"BE",X"C6",X"B9",X"9E",X"83",X"70",X"65",X"5D",X"5A", - X"5A",X"5D",X"5A",X"55",X"55",X"47",X"37",X"27",X"1F",X"37",X"5A",X"78",X"88",X"8B",X"8B",X"93", - X"A3",X"A6",X"AB",X"A6",X"AB",X"BE",X"D4",X"E4",X"EC",X"EC",X"E1",X"C9",X"A6",X"90",X"83",X"90", - X"98",X"9B",X"9E",X"AE",X"AB",X"A6",X"9E",X"9B",X"9B",X"90",X"78",X"5A",X"3F",X"37",X"37",X"37", - X"3F",X"52",X"68",X"88",X"83",X"78",X"68",X"5A",X"55",X"65",X"78",X"8B",X"9E",X"A3",X"9B",X"90", - X"83",X"88",X"8B",X"88",X"80",X"8B",X"9E",X"B9",X"C9",X"B9",X"A6",X"93",X"75",X"52",X"32",X"1C", - X"11",X"0C",X"14",X"2C",X"5A",X"8B",X"BE",X"DC",X"E1",X"D9",X"C6",X"AE",X"9E",X"98",X"8B",X"75", - X"55",X"32",X"1C",X"11",X"11",X"24",X"52",X"88",X"B6",X"D9",X"E4",X"CE",X"BE",X"AE",X"98",X"7D", - X"68",X"65",X"68",X"75",X"78",X"7D",X"70",X"52",X"2F",X"09",X"01",X"01",X"01",X"11",X"2F",X"47", - X"5A",X"78",X"A3",X"D4",X"EC",X"FC",X"FC",X"F7",X"EC",X"EF",X"EC",X"D4",X"C9",X"C6",X"B9",X"9E", - X"80",X"65",X"68",X"70",X"78",X"7D",X"80",X"93",X"9E",X"AB",X"AE",X"AE",X"A3",X"8B",X"68",X"52", - X"42",X"32",X"27",X"1C",X"14",X"09",X"01",X"01",X"01",X"14",X"3F",X"78",X"A3",X"AE",X"AE",X"A3", - X"A6",X"BE",X"D4",X"D9",X"D9",X"D9",X"C6",X"B9",X"AB",X"93",X"78",X"65",X"62",X"68",X"70",X"80", - X"8B",X"88",X"7D",X"70",X"6D",X"78",X"7D",X"78",X"70",X"6D",X"83",X"9E",X"C1",X"CE",X"C1",X"B3", - X"98",X"75",X"52",X"3F",X"47",X"5A",X"68",X"7D",X"88",X"7D",X"62",X"47",X"2C",X"0C",X"01",X"01", - X"01",X"01",X"01",X"14",X"3A",X"65",X"7D",X"98",X"A3",X"A3",X"98",X"9B",X"9E",X"9E",X"A6",X"AB", - X"AB",X"B6",X"C6",X"D4",X"CE",X"BE",X"AB",X"90",X"78",X"68",X"5A",X"47",X"32",X"27",X"1F",X"24", - X"3A",X"62",X"80",X"9E",X"B9",X"CE",X"D4",X"E9",X"EC",X"E1",X"D1",X"D1",X"CE",X"C6",X"A6",X"80", - X"55",X"2F",X"17",X"04",X"11",X"2F",X"62",X"83",X"9B",X"A6",X"AB",X"9B",X"90",X"8B",X"88",X"78", - X"70",X"65",X"5A",X"65",X"88",X"A6",X"CE",X"EF",X"FC",X"FC",X"E1",X"B6",X"9E",X"88",X"68",X"52", - X"4A",X"47",X"3F",X"37",X"3A",X"47",X"47",X"3A",X"2F",X"2F",X"4A",X"68",X"80",X"83",X"75",X"65", - X"65",X"65",X"68",X"75",X"7D",X"88",X"9E",X"AB",X"AB",X"98",X"80",X"78",X"7D",X"80",X"8B",X"9E", - X"9E",X"9B",X"9E",X"AE",X"BE",X"C1",X"B3",X"A6",X"A3",X"A6",X"AB",X"9B",X"83",X"68",X"52",X"42", - X"3F",X"52",X"68",X"80",X"93",X"A3",X"A6",X"B3",X"A6",X"93",X"88",X"88",X"93",X"90",X"83",X"68", - X"4D",X"37",X"2C",X"2F",X"47",X"68",X"90",X"AB",X"AE",X"A6",X"A6",X"9B",X"88",X"75",X"68",X"62", - X"52",X"42",X"32",X"27",X"11",X"01",X"01",X"11",X"27",X"3F",X"5A",X"65",X"68",X"78",X"8B",X"A6", - X"C1",X"C6",X"B9",X"B3",X"B3",X"AB",X"A3",X"8B",X"68",X"42",X"24",X"11",X"11",X"11",X"27",X"4D", - X"70",X"98",X"B9",X"DC",X"E9",X"E9",X"E1",X"CE",X"AB",X"98",X"90",X"83",X"83",X"93",X"A3",X"B6", - X"AE",X"A3",X"90",X"78",X"5D",X"4A",X"4D",X"62",X"78",X"83",X"80",X"80",X"83",X"7D",X"68",X"52", - X"37",X"1F",X"1F",X"2F",X"47",X"55",X"65",X"7D",X"90",X"93",X"98",X"A3",X"AE",X"B3",X"B9",X"B6", - X"B6",X"C1",X"C6",X"B9",X"A6",X"8B",X"80",X"70",X"65",X"52",X"4A",X"52",X"62",X"65",X"68",X"7D", - X"90",X"AB",X"C6",X"D1",X"CE",X"AE",X"88",X"68",X"65",X"62",X"52",X"52",X"4D",X"3F",X"2F",X"27", - X"27",X"3A",X"62",X"83",X"9E",X"B3",X"A6",X"9E",X"93",X"90",X"8B",X"7D",X"68",X"62",X"65",X"65", - X"65",X"55",X"3F",X"27",X"14",X"11",X"14",X"1C",X"2F",X"4A",X"62",X"78",X"98",X"B6",X"D1",X"E4", - X"E4",X"E1",X"E4",X"F7",X"FC",X"F7",X"E4",X"D1",X"BE",X"AB",X"98",X"83",X"8B",X"98",X"93",X"90", - X"93",X"90",X"83",X"78",X"70",X"6D",X"62",X"4A",X"2C",X"17",X"14",X"1C",X"27",X"3F",X"4D",X"5D", - X"68",X"68",X"68",X"68",X"75",X"8B",X"9E",X"A6",X"9E",X"9B",X"98",X"98",X"93",X"80",X"70",X"62", - X"52",X"4A",X"42",X"3A",X"2F",X"27",X"2C",X"2F",X"3F",X"5D",X"80",X"90",X"9B",X"A3",X"AE",X"C9", - X"E1",X"E4",X"DC",X"CE",X"C9",X"CE",X"C6",X"B3",X"98",X"8B",X"83",X"75",X"68",X"6D",X"7D",X"90", - X"A3",X"B3",X"B9",X"AE",X"98",X"7D",X"70",X"62",X"4A",X"2F",X"17",X"11",X"17",X"24",X"37",X"52", - X"62",X"75",X"80",X"80",X"80",X"88",X"8B",X"8B",X"98",X"9B",X"9E",X"AB",X"B6",X"AE",X"A3",X"90", - X"83",X"80",X"7D",X"83",X"90",X"90",X"88",X"75",X"62",X"52",X"47",X"42",X"4A",X"5D",X"75",X"8B", - X"A3",X"AB",X"AB",X"A3",X"93",X"98",X"9E",X"AE",X"BE",X"BE",X"AB",X"88",X"68",X"52",X"3A",X"37", - X"47",X"62",X"83",X"98",X"A3",X"9B",X"98",X"98",X"88",X"68",X"52",X"4D",X"52",X"62",X"65",X"62", - X"62",X"5D",X"4A",X"37",X"27",X"2C",X"3F",X"5D",X"6D",X"75",X"75",X"80",X"90",X"A3",X"B3",X"BE", - X"C6",X"C1",X"B9",X"AB",X"9E",X"83",X"68",X"52",X"3F",X"27",X"11",X"0C",X"11",X"1C",X"3F",X"68", - X"9B",X"B6",X"BE",X"B6",X"B3",X"B6",X"BE",X"C9",X"C6",X"AE",X"9B",X"8B",X"80",X"7D",X"83",X"93", - X"A3",X"AE",X"A3",X"9E",X"9B",X"9E",X"9E",X"9E",X"9E",X"93",X"7D",X"68",X"62",X"5D",X"62",X"5D", - X"52",X"4D",X"5A",X"52",X"52",X"52",X"52",X"52",X"5A",X"5A",X"5A",X"62",X"68",X"78",X"88",X"90", - X"98",X"A6",X"B6",X"B9",X"B6",X"B3",X"B6",X"B9",X"B9",X"B6",X"AE",X"AB",X"93",X"78",X"65",X"4D", - X"32",X"24",X"24",X"32",X"52",X"70",X"83",X"88",X"83",X"7D",X"70",X"65",X"68",X"6D",X"6D",X"6D", - X"68",X"65",X"68",X"68",X"65",X"5D",X"55",X"5D",X"70",X"8B",X"90",X"93",X"8B",X"80",X"7D",X"7D", - X"8B",X"9E",X"A6",X"A3",X"9E",X"9E",X"A3",X"A3",X"98",X"88",X"80",X"75",X"68",X"62",X"55",X"4D", - X"4A",X"4D",X"5D",X"75",X"93",X"AE",X"B6",X"AB",X"93",X"78",X"65",X"52",X"5A",X"5D",X"65",X"78", - X"88",X"88",X"80",X"75",X"70",X"68",X"5D",X"5A",X"5D",X"62",X"68",X"70",X"75",X"78",X"7D",X"7D", - X"80",X"78",X"70",X"65",X"5D",X"52",X"5A",X"70",X"8B",X"A3",X"AE",X"AE",X"A6",X"9B",X"90",X"83", - X"75",X"68",X"55",X"4D",X"4A",X"4A",X"4D",X"5A",X"78",X"93",X"B9",X"D4",X"E4",X"E1",X"CE",X"BE", - X"AE",X"9B",X"88",X"78",X"78",X"78",X"78",X"68",X"62",X"55",X"4D",X"3A",X"32",X"3A",X"4D",X"68", - X"7D",X"80",X"7D",X"78",X"75",X"7D",X"88",X"98",X"A3",X"AE",X"AE",X"AB",X"AE",X"B6",X"C6",X"D1", - X"D4",X"D4",X"C6",X"AB",X"98",X"83",X"78",X"65",X"4D",X"3F",X"3F",X"3F",X"4A",X"5A",X"68",X"70", - X"68",X"68",X"70",X"80",X"8B",X"93",X"8B",X"7D",X"70",X"6D",X"68",X"70",X"75",X"75",X"78",X"78", - X"75",X"68",X"65",X"62",X"6D",X"83",X"98",X"AE",X"B6",X"A6",X"98",X"90",X"80",X"75",X"68",X"5D", - X"62",X"68",X"80",X"93",X"9B",X"93",X"90",X"80",X"6D",X"5A",X"4A",X"42",X"47",X"52",X"5D",X"6D", - X"83",X"90",X"90",X"83",X"80",X"80",X"75",X"75",X"70",X"68",X"65",X"5A",X"52",X"4D",X"52",X"65", - X"7D",X"98",X"A6",X"AB",X"AB",X"A6",X"9E",X"9B",X"90",X"80",X"75",X"6D",X"65",X"52",X"52",X"52", - X"52",X"4D",X"42",X"3F",X"47",X"4A",X"55",X"5D",X"62",X"62",X"62",X"62",X"68",X"7D",X"88",X"93", - X"A3",X"9E",X"A3",X"98",X"90",X"90",X"98",X"A3",X"B6",X"C1",X"BE",X"B6",X"B3",X"AB",X"9B",X"88", - X"75",X"70",X"68",X"65",X"70",X"78",X"7D",X"70",X"68",X"68",X"68",X"68",X"65",X"62",X"5D",X"68", - X"7D",X"90",X"9B",X"9B",X"98",X"98",X"98",X"93",X"98",X"9E",X"9B",X"98",X"93",X"93",X"90",X"83", - X"80",X"80",X"78",X"68",X"62",X"62",X"65",X"75",X"83",X"88",X"8B",X"90",X"8B",X"7D",X"70",X"68", - X"65",X"5D",X"55",X"52",X"4D",X"4A",X"4D",X"5A",X"5D",X"65",X"70",X"80",X"8B",X"93",X"9E",X"9E", - X"9B",X"9E",X"A3",X"9B",X"98",X"90",X"88",X"83",X"83",X"88",X"90",X"A6",X"B9",X"BE",X"C1",X"C6", - X"C6",X"C6",X"B6",X"9B",X"83",X"65",X"52",X"4A",X"4D",X"5D",X"6D",X"80",X"8B",X"93",X"8B",X"80", - X"65",X"5A",X"52",X"52",X"52",X"47",X"3F",X"3A",X"47",X"52",X"5D",X"6D",X"83",X"93",X"9B",X"9E", - X"98",X"8B",X"88",X"80",X"80",X"78",X"6D",X"68",X"68",X"70",X"70",X"68",X"68",X"62",X"5A",X"5A", - X"5D",X"5A",X"5D",X"65",X"70",X"75",X"8B",X"98",X"9B",X"9B",X"9B",X"93",X"88",X"88",X"83",X"88", - X"88",X"93",X"9B",X"98",X"8B",X"80",X"78",X"70",X"68",X"68",X"70",X"80",X"88",X"90",X"93",X"9B", - X"9E",X"98",X"98",X"98",X"98",X"90",X"83",X"78",X"78",X"6D",X"6D",X"78",X"88",X"98",X"A3",X"AB", - X"AB",X"A6",X"98",X"83",X"70",X"52",X"47",X"37",X"32",X"27",X"27",X"37",X"47",X"4D",X"65",X"75", - X"88",X"90",X"98",X"90",X"83",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"68",X"62",X"5D",X"4D",X"42", - X"3A",X"3A",X"3F",X"47",X"52",X"5A",X"68",X"78",X"83",X"90",X"A3",X"AE",X"B6",X"B9",X"B6",X"AE", - X"B3",X"B6",X"C1",X"C6",X"BE",X"B9",X"B9",X"AE",X"9B",X"88",X"80",X"75",X"68",X"65",X"65",X"70", - X"78",X"83",X"8B",X"90",X"88",X"7D",X"65",X"5A",X"55",X"5A",X"52",X"4D",X"47",X"42",X"3F",X"47", - X"4A",X"52",X"65",X"7D",X"93",X"9B",X"98",X"93",X"90",X"93",X"9B",X"A6",X"AE",X"AE",X"A6",X"98", - X"8B",X"78",X"68",X"5A",X"52",X"52",X"5A",X"65",X"68",X"75",X"75",X"70",X"70",X"7D",X"80",X"83", - X"83",X"80",X"80",X"80",X"8B",X"98",X"A3",X"A3",X"A6",X"A3",X"9B",X"93",X"90",X"8B",X"88",X"80", - X"78",X"70",X"62",X"5A",X"5A",X"52",X"52",X"55",X"5A",X"62",X"68",X"75",X"70",X"6D",X"65",X"65", - X"68",X"6D",X"70",X"70",X"70",X"75",X"75",X"7D",X"83",X"88",X"93",X"9B",X"A3",X"A3",X"A6",X"A6", - X"A3",X"9E",X"93",X"88",X"80",X"78",X"78",X"78",X"7D",X"80",X"80",X"80",X"7D",X"70",X"68",X"62", - X"62",X"68",X"70",X"78",X"7D",X"7D",X"78",X"75",X"68",X"68",X"62",X"62",X"68",X"78",X"78",X"7D", - X"75",X"68",X"6D",X"6D",X"70",X"75",X"7D",X"83",X"80",X"80",X"80",X"83",X"83",X"80",X"80",X"83", - X"88",X"8B",X"88",X"83",X"80",X"80",X"83",X"8B",X"98",X"9E",X"9E",X"9E",X"9B",X"90",X"83",X"7D", - X"75",X"6D",X"68",X"75",X"80",X"83",X"88",X"8B",X"90",X"8B",X"83",X"7D",X"75",X"75",X"78",X"7D", - X"80",X"80",X"75",X"68",X"5D",X"52",X"4A",X"4D",X"52",X"5D",X"68",X"6D",X"78",X"80",X"88",X"8B", - X"98",X"9B",X"A3",X"A3",X"9B",X"93",X"8B",X"88",X"7D",X"70",X"68",X"65",X"65",X"62",X"62",X"62", - X"65",X"70",X"78",X"7D",X"80",X"88",X"8B",X"93",X"93",X"90",X"8B",X"88",X"80",X"83",X"88",X"90", - X"9E",X"9E",X"9B",X"9B",X"93",X"88",X"7D",X"7D",X"7D",X"78",X"7D",X"78",X"75",X"78",X"7D",X"7D", - X"7D",X"80",X"80",X"80",X"7D",X"78",X"78",X"75",X"70",X"70",X"6D",X"68",X"6D",X"70",X"78",X"80", - X"80",X"80",X"83",X"88",X"90",X"8B",X"8B",X"8B",X"88",X"80",X"7D",X"78",X"70",X"68",X"68",X"68", - X"68",X"6D",X"6D",X"70",X"78",X"7D",X"83",X"8B",X"8B",X"90",X"8B",X"88",X"88",X"88",X"88",X"83", - X"80",X"80",X"83",X"80",X"80",X"7D",X"83",X"83",X"7D",X"7D",X"78",X"75",X"75",X"75",X"78",X"78", - X"75",X"70",X"70",X"70",X"75",X"78",X"78",X"78",X"75",X"75",X"70",X"70",X"75",X"78",X"75",X"75", - X"75",X"75",X"78",X"7D",X"80",X"7D",X"7D",X"7D",X"83",X"88",X"8B",X"88",X"88",X"88",X"88",X"88", - X"8B",X"90",X"90",X"88",X"83",X"7D",X"7D",X"78",X"75",X"75",X"75",X"7D",X"7D",X"80",X"7D",X"78", - X"75",X"70",X"70",X"78",X"80",X"88",X"88",X"88",X"88",X"83",X"7D",X"78",X"78",X"80",X"83",X"83", - X"83",X"80",X"78",X"75",X"75",X"75",X"78",X"80",X"80",X"83",X"83",X"80",X"7D",X"78",X"6D",X"68", - X"65",X"62",X"5D",X"5A",X"62",X"65",X"68",X"75",X"80",X"8B",X"90",X"93",X"90",X"88",X"83",X"80", - X"78",X"75",X"75",X"70",X"68",X"65",X"5D",X"5D",X"55",X"5A",X"5D",X"65",X"68",X"75",X"75",X"80", - X"83",X"8B",X"90",X"9B",X"A3",X"A6",X"A6",X"9E",X"9B",X"98",X"98",X"9E",X"9E",X"A3",X"A3",X"A6", - X"A3",X"9B",X"8B",X"88",X"7D",X"75",X"6D",X"68",X"6D",X"75",X"7D",X"7D",X"83",X"83",X"80",X"75", - X"6D",X"68",X"68",X"68",X"65",X"62",X"5D",X"5A",X"5A",X"5D",X"62",X"68",X"78",X"80",X"83",X"80", - X"7D",X"80",X"83",X"8B",X"98",X"9B",X"9B",X"98",X"90",X"8B",X"7D",X"70",X"68",X"62",X"65",X"68", - X"70",X"78",X"80",X"80",X"80",X"80",X"83",X"83",X"83",X"80",X"7D",X"7D",X"7D",X"83",X"90",X"98", - X"9B",X"9E",X"9B",X"98",X"90",X"8B",X"83",X"83",X"7D",X"75",X"70",X"65",X"5D",X"5D",X"5A",X"5D", - X"62",X"65",X"68",X"75",X"75",X"75",X"75",X"68",X"6D",X"6D",X"70",X"70",X"75",X"70",X"75",X"75", - X"78",X"7D",X"83",X"90",X"98",X"9B",X"9B",X"9E",X"9E",X"9E",X"9E",X"93",X"88",X"83",X"7D",X"7D", - X"7D",X"80",X"83",X"80",X"80",X"7D",X"75",X"68",X"65",X"65",X"68",X"75",X"78",X"7D",X"78",X"78", - X"78",X"6D",X"68",X"65",X"68",X"6D",X"78",X"7D",X"7D",X"75",X"6D",X"6D",X"70",X"75",X"78",X"80", - X"83",X"80",X"80",X"80",X"83",X"83",X"80",X"83",X"83",X"88",X"8B",X"88",X"83",X"80",X"80",X"83", - X"8B",X"98",X"9E",X"9E",X"9E",X"9B",X"90",X"83",X"7D",X"75",X"6D",X"68",X"75",X"80",X"83",X"88", - X"8B",X"90",X"8B",X"83",X"7D",X"75",X"75",X"78",X"7D",X"80",X"80",X"75",X"68",X"5D",X"52",X"4A", - X"4D",X"52",X"5D",X"68",X"6D",X"78",X"80",X"88",X"8B",X"98",X"9B",X"A3",X"A3",X"9B",X"93",X"8B", - X"88",X"7D",X"70",X"68",X"65",X"65",X"62",X"62",X"62",X"65",X"70",X"78",X"7D",X"80",X"88",X"8B", - X"93",X"93",X"90",X"8B",X"88",X"80",X"83",X"88",X"90",X"9E",X"9E",X"9B",X"9B",X"93",X"88",X"7D", - X"7D",X"7D",X"78",X"7D",X"78",X"75",X"78",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"78",X"78",X"75", - X"75",X"70",X"75",X"6D",X"68",X"6D",X"70",X"78",X"80",X"83",X"80",X"83",X"88",X"90",X"8B",X"8B", - X"88",X"83",X"7D",X"78",X"75",X"6D",X"68",X"68",X"68",X"65",X"68",X"68",X"68",X"70",X"75",X"7D", - X"88",X"83",X"88",X"88",X"80",X"83",X"83",X"88",X"8B",X"88",X"88",X"88",X"83",X"80",X"7D",X"80", - X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"7D",X"75",X"75",X"75",X"75",X"70", - X"70",X"68",X"68",X"68",X"68",X"70",X"70",X"75",X"75",X"75",X"75",X"78",X"83",X"83",X"83",X"88", - X"88",X"90",X"98",X"98",X"93",X"90",X"90",X"8B",X"88",X"88",X"8B",X"88",X"80",X"78",X"78",X"75", - X"70",X"68",X"68",X"65",X"68",X"70",X"78",X"78",X"78",X"75",X"75",X"70",X"78",X"80",X"83",X"83", - X"80",X"7D",X"70",X"68",X"65",X"68",X"70",X"7D",X"83",X"83",X"83",X"80",X"75",X"70",X"68",X"65", - X"65",X"65",X"68",X"6D",X"70",X"78",X"7D",X"7D",X"7D",X"83",X"80",X"80",X"80",X"80",X"7D",X"7D", - X"80",X"83",X"8B",X"90",X"93",X"93",X"8B",X"83",X"7D",X"78",X"70",X"6D",X"68",X"65",X"65",X"62", - X"65",X"68",X"70",X"7D",X"88",X"88",X"93",X"90",X"90",X"90",X"90",X"93",X"93",X"93",X"98",X"90", - X"88",X"80",X"78",X"78",X"75",X"78",X"80",X"88",X"90",X"90",X"93",X"8B",X"8B",X"88",X"7D",X"78", - X"6D",X"65",X"65",X"68",X"6D",X"75",X"80",X"83",X"88",X"88",X"88",X"83",X"83",X"83",X"83",X"80", - X"7D",X"80",X"7D",X"75",X"6D",X"68",X"5D",X"55",X"52",X"52",X"62",X"68",X"70",X"75",X"75",X"75", - X"78",X"7D",X"83",X"80",X"83",X"83",X"83",X"83",X"88",X"8B",X"90",X"98",X"98",X"9B",X"9B",X"93", - X"8B",X"83",X"7D",X"78",X"78",X"70",X"75",X"7D",X"80",X"80",X"83",X"80",X"80",X"75",X"70",X"68", - X"68",X"68",X"65",X"68",X"68",X"65",X"68",X"70",X"78",X"7D",X"88",X"88",X"88",X"83",X"83",X"80", - X"80",X"80",X"80",X"7D",X"7D",X"75",X"75",X"68",X"68",X"68",X"68",X"6D",X"6D",X"70",X"70",X"75", - X"75",X"7D",X"83",X"83",X"88",X"83",X"88",X"83",X"88",X"83",X"83",X"8B",X"88",X"8B",X"88",X"88", - X"80",X"7D",X"7D",X"75",X"6D",X"68",X"6D",X"70",X"7D",X"80",X"7D",X"83",X"80",X"80",X"80",X"80", - X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"83",X"80",X"80",X"7D",X"7D",X"80",X"80", - X"83",X"83",X"80",X"80",X"7D",X"78",X"75",X"70",X"68",X"6D",X"75",X"78",X"7D",X"80",X"80",X"80", - X"7D",X"78",X"7D",X"7D",X"80",X"80",X"80",X"80",X"7D",X"80",X"83",X"88",X"88",X"8B",X"8B",X"8B", - X"8B",X"88",X"83",X"83",X"80",X"78",X"75",X"75",X"70",X"70",X"75",X"75",X"80",X"83",X"80",X"83", - X"83",X"83",X"83",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"75",X"75",X"75",X"70",X"70", - X"75",X"75",X"78",X"7D",X"7D",X"80",X"80",X"83",X"83",X"83",X"83",X"88",X"83",X"83",X"83",X"88", - X"83",X"83",X"88",X"8B",X"88",X"88",X"80",X"7D",X"7D",X"7D",X"7D",X"80",X"7D",X"80",X"80",X"80", - X"83",X"83",X"83",X"7D",X"7D",X"75",X"75",X"75",X"75",X"75",X"70",X"75",X"75",X"75",X"78",X"83", - X"80",X"83",X"80",X"7D",X"80",X"78",X"78",X"80",X"80",X"80",X"7D",X"80",X"80",X"80",X"7D",X"75", - X"70",X"68",X"68",X"68",X"68",X"68",X"70",X"75",X"7D",X"83",X"8B",X"90",X"90",X"8B",X"83",X"80", - X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"75",X"75",X"75",X"70",X"70",X"75",X"75", - X"78",X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"75",X"78",X"7D",X"80", - X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"78",X"78",X"78",X"7D",X"80",X"80",X"80",X"83",X"83", - X"8B",X"8B",X"8B",X"88",X"83",X"83",X"80",X"83",X"7D",X"7D",X"7D",X"7D",X"75",X"75",X"78",X"7D", - X"80",X"80",X"78",X"78",X"78",X"78",X"7D",X"78",X"7D",X"7D",X"78",X"7D",X"78",X"7D",X"80",X"80", - X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"78",X"78",X"7D",X"7D", - X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"78",X"78", - X"78",X"78",X"78",X"78",X"7D",X"80",X"78",X"80",X"80",X"78",X"78",X"78",X"78",X"7D",X"78",X"7D", - X"78",X"78",X"7D",X"78",X"78",X"78",X"75",X"78",X"78",X"7D",X"78",X"7D",X"80",X"78",X"7D",X"7D", - X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D", - X"7D",X"78",X"78",X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"78",X"78",X"7D",X"80",X"80", - X"80",X"80",X"80",X"80",X"80",X"78",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D", - X"7D",X"7D",X"7D",X"80",X"80",X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"80", - X"75",X"75",X"75",X"75",X"78",X"83",X"80",X"80",X"80",X"80",X"80",X"80",X"75",X"75",X"78",X"80", - X"80",X"80",X"80",X"80",X"80",X"75",X"75",X"75",X"75",X"83",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"80",X"7D",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"80",X"88",X"83", - X"80",X"80",X"7D",X"78",X"75",X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"80",X"80",X"7D",X"7D",X"7D",X"75",X"75",X"75",X"75",X"78",X"83",X"80",X"80",X"80",X"80", - X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"75",X"78",X"75",X"75",X"78", - X"75",X"78",X"78",X"80",X"80",X"80",X"80",X"80",X"80",X"83",X"83",X"83",X"80",X"80",X"7D",X"7D", - X"7D",X"7D",X"7D",X"83",X"83",X"83",X"83",X"83",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D", - X"7D",X"7D",X"78",X"78",X"78",X"75",X"75",X"75",X"70",X"75",X"75",X"7D",X"7D",X"80",X"80",X"80", - X"80",X"80",X"83",X"83",X"83",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"80",X"78",X"78",X"7D", - X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"78",X"78",X"78", - X"78",X"78",X"78",X"78",X"78",X"75",X"78",X"78",X"80",X"80",X"80",X"80",X"80",X"80",X"83",X"83", - X"83",X"83",X"88",X"83",X"83",X"83",X"83",X"83",X"83",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"78", - X"7D",X"78",X"7D",X"80",X"80",X"80",X"80",X"7D",X"7D",X"80",X"7D",X"78",X"78",X"78",X"75",X"75", - X"75",X"78",X"7D",X"78",X"83",X"80",X"80",X"80",X"80",X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"7D", - X"78",X"78",X"78",X"78",X"75",X"75",X"75",X"75",X"78",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"80", - X"83",X"83",X"83",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"78",X"78",X"78",X"78", - X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D", - X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"7D",X"7D",X"80",X"83",X"83",X"7D", - X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"83",X"80",X"83",X"80",X"7D",X"7D",X"7D",X"7D",X"7D", - X"7D",X"7D",X"7D",X"80",X"80",X"80",X"83",X"83",X"83",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"78", - X"78",X"78",X"7D",X"78",X"7D",X"7D",X"80",X"80",X"80",X"80",X"7D",X"78",X"7D",X"78",X"78",X"7D", - X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"78",X"78",X"78",X"7D",X"7D",X"7D", - X"7D",X"80",X"80",X"80",X"80",X"80",X"83",X"80",X"80",X"83",X"80",X"80",X"83",X"7D",X"7D",X"7D", - X"7D",X"78",X"78",X"78",X"7D",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"7D",X"80",X"80",X"83",X"83",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"7D",X"7D",X"7D",X"78",X"7D",X"78",X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"80",X"7D",X"7D",X"78",X"7D",X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"7D",X"78",X"7D", - X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"78",X"78",X"78",X"7D",X"78",X"78",X"7D", - X"7D",X"80",X"80",X"80",X"80",X"83",X"83",X"83",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D", - X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"78", - X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"78", - X"7D",X"78",X"7D",X"80",X"80",X"80",X"80",X"7D",X"80",X"83",X"80",X"80",X"80",X"80",X"80",X"80"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/build_id.tcl b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/build_id.tcl deleted file mode 100644 index 938515d8..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/build_id.tcl +++ /dev/null @@ -1,35 +0,0 @@ -# ================================================================================ -# -# Build ID Verilog Module Script -# Jeff Wiencrot - 8/1/2011 -# -# Generates a Verilog module that contains a timestamp, -# from the current build. These values are available from the build_date, build_time, -# physical_address, and host_name output ports of the build_id module in the build_id.v -# Verilog source file. -# -# ================================================================================ - -proc generateBuildID_Verilog {} { - - # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) - set buildDate [ clock format [ clock seconds ] -format %y%m%d ] - set buildTime [ clock format [ clock seconds ] -format %H%M%S ] - - # Create a Verilog file for output - set outputFileName "rtl/build_id.v" - set outputFile [open $outputFileName "w"] - - # Output the Verilog source - puts $outputFile "`define BUILD_DATE \"$buildDate\"" - puts $outputFile "`define BUILD_TIME \"$buildTime\"" - close $outputFile - - # Send confirmation message to the Messages window - post_message "Generated build identification Verilog module: [pwd]/$outputFileName" - post_message "Date: $buildDate" - post_message "Time: $buildTime" -} - -# Comment out this line to prevent the process from automatically executing when the file is sourced: -generateBuildID_Verilog \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80.vhd deleted file mode 100644 index c07d2629..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80.vhd +++ /dev/null @@ -1,1093 +0,0 @@ --- **** --- T80(b) core. In an effort to merge and maintain bug fixes .... --- --- --- Ver 303 add undocumented DDCB and FDCB opcodes by TobiFlex 20.04.2010 --- Ver 302 fixed IO cycle timing, tested thanks to Alessandro. --- Ver 301 parity flag is just parity for 8080, also overflow for Z80, by Sean Riddle --- Ver 300 started tidyup. Rmoved some auto_wait bits from 0247 which caused problems --- --- MikeJ March 2005 --- Latest version from www.fpgaarcade.com (original www.opencores.org) --- --- **** --- --- Z80 compatible microprocessor core --- --- Version : 0247 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- --- 0208 : First complete release --- --- 0210 : Fixed wait and halt --- --- 0211 : Fixed Refresh addition and IM 1 --- --- 0214 : Fixed mostly flags, only the block instructions now fail the zex regression test --- --- 0232 : Removed refresh address output for Mode > 1 and added DJNZ M1_n fix by Mike Johnson --- --- 0235 : Added clock enable and IM 2 fix by Mike Johnson --- --- 0237 : Changed 8080 I/O address output, added IntE output --- --- 0238 : Fixed (IX/IY+d) timing and 16 bit ADC and SBC zero flag --- --- 0240 : Added interrupt ack fix by Mike Johnson, changed (IX/IY+d) timing and changed flags in GB mode --- --- 0242 : Added I/O wait, fixed refresh address, moved some registers to RAM --- --- 0247 : Fixed bus req/ack cycle --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use work.T80_Pack.all; - -entity T80 is - generic( - Mode : integer := 0; -- 0 => Z80, 1 => Fast Z80, 2 => 8080, 3 => GB - IOWait : integer := 0; -- 1 => Single cycle I/O, 1 => Std I/O cycle - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - RESET_n : in std_logic; - CLK_n : in std_logic; - CEN : in std_logic; - WAIT_n : in std_logic; - INT_n : in std_logic; - NMI_n : in std_logic; - BUSRQ_n : in std_logic; - M1_n : out std_logic; - IORQ : out std_logic; - NoRead : out std_logic; - Write : out std_logic; - RFSH_n : out std_logic; - HALT_n : out std_logic; - BUSAK_n : out std_logic; - A : out std_logic_vector(15 downto 0); - DInst : in std_logic_vector(7 downto 0); - DI : in std_logic_vector(7 downto 0); - DO : out std_logic_vector(7 downto 0); - MC : out std_logic_vector(2 downto 0); - TS : out std_logic_vector(2 downto 0); - IntCycle_n : out std_logic; - IntE : out std_logic; - Stop : out std_logic - ); -end T80; - -architecture rtl of T80 is - - constant aNone : std_logic_vector(2 downto 0) := "111"; - constant aBC : std_logic_vector(2 downto 0) := "000"; - constant aDE : std_logic_vector(2 downto 0) := "001"; - constant aXY : std_logic_vector(2 downto 0) := "010"; - constant aIOA : std_logic_vector(2 downto 0) := "100"; - constant aSP : std_logic_vector(2 downto 0) := "101"; - constant aZI : std_logic_vector(2 downto 0) := "110"; - - -- Registers - signal ACC, F : std_logic_vector(7 downto 0); - signal Ap, Fp : std_logic_vector(7 downto 0); - signal I : std_logic_vector(7 downto 0); - signal R : unsigned(7 downto 0); - signal SP, PC : unsigned(15 downto 0); - - signal RegDIH : std_logic_vector(7 downto 0); - signal RegDIL : std_logic_vector(7 downto 0); - signal RegBusA : std_logic_vector(15 downto 0); - signal RegBusB : std_logic_vector(15 downto 0); - signal RegBusC : std_logic_vector(15 downto 0); - signal RegAddrA_r : std_logic_vector(2 downto 0); - signal RegAddrA : std_logic_vector(2 downto 0); - signal RegAddrB_r : std_logic_vector(2 downto 0); - signal RegAddrB : std_logic_vector(2 downto 0); - signal RegAddrC : std_logic_vector(2 downto 0); - signal RegWEH : std_logic; - signal RegWEL : std_logic; - signal Alternate : std_logic; - - -- Help Registers - signal TmpAddr : std_logic_vector(15 downto 0); -- Temporary address register - signal IR : std_logic_vector(7 downto 0); -- Instruction register - signal ISet : std_logic_vector(1 downto 0); -- Instruction set selector - signal RegBusA_r : std_logic_vector(15 downto 0); - - signal ID16 : signed(15 downto 0); - signal Save_Mux : std_logic_vector(7 downto 0); - - signal TState : unsigned(2 downto 0); - signal MCycle : std_logic_vector(2 downto 0); - signal IntE_FF1 : std_logic; - signal IntE_FF2 : std_logic; - signal Halt_FF : std_logic; - signal BusReq_s : std_logic; - signal BusAck : std_logic; - signal ClkEn : std_logic; - signal NMI_s : std_logic; - signal INT_s : std_logic; - signal IStatus : std_logic_vector(1 downto 0); - - signal DI_Reg : std_logic_vector(7 downto 0); - signal T_Res : std_logic; - signal XY_State : std_logic_vector(1 downto 0); - signal Pre_XY_F_M : std_logic_vector(2 downto 0); - signal NextIs_XY_Fetch : std_logic; - signal XY_Ind : std_logic; - signal No_BTR : std_logic; - signal BTR_r : std_logic; - signal Auto_Wait : std_logic; - signal Auto_Wait_t1 : std_logic; - signal Auto_Wait_t2 : std_logic; - signal IncDecZ : std_logic; - - -- ALU signals - signal BusB : std_logic_vector(7 downto 0); - signal BusA : std_logic_vector(7 downto 0); - signal ALU_Q : std_logic_vector(7 downto 0); - signal F_Out : std_logic_vector(7 downto 0); - - -- Registered micro code outputs - signal Read_To_Reg_r : std_logic_vector(4 downto 0); - signal Arith16_r : std_logic; - signal Z16_r : std_logic; - signal ALU_Op_r : std_logic_vector(3 downto 0); - signal Save_ALU_r : std_logic; - signal PreserveC_r : std_logic; - signal MCycles : std_logic_vector(2 downto 0); - - -- Micro code outputs - signal MCycles_d : std_logic_vector(2 downto 0); - signal TStates : std_logic_vector(2 downto 0); - signal IntCycle : std_logic; - signal NMICycle : std_logic; - signal Inc_PC : std_logic; - signal Inc_WZ : std_logic; - signal IncDec_16 : std_logic_vector(3 downto 0); - signal Prefix : std_logic_vector(1 downto 0); - signal Read_To_Acc : std_logic; - signal Read_To_Reg : std_logic; - signal Set_BusB_To : std_logic_vector(3 downto 0); - signal Set_BusA_To : std_logic_vector(3 downto 0); - signal ALU_Op : std_logic_vector(3 downto 0); - signal Save_ALU : std_logic; - signal PreserveC : std_logic; - signal Arith16 : std_logic; - signal Set_Addr_To : std_logic_vector(2 downto 0); - signal Jump : std_logic; - signal JumpE : std_logic; - signal JumpXY : std_logic; - signal Call : std_logic; - signal RstP : std_logic; - signal LDZ : std_logic; - signal LDW : std_logic; - signal LDSPHL : std_logic; - signal IORQ_i : std_logic; - signal Special_LD : std_logic_vector(2 downto 0); - signal ExchangeDH : std_logic; - signal ExchangeRp : std_logic; - signal ExchangeAF : std_logic; - signal ExchangeRS : std_logic; - signal I_DJNZ : std_logic; - signal I_CPL : std_logic; - signal I_CCF : std_logic; - signal I_SCF : std_logic; - signal I_RETN : std_logic; - signal I_BT : std_logic; - signal I_BC : std_logic; - signal I_BTR : std_logic; - signal I_RLD : std_logic; - signal I_RRD : std_logic; - signal I_INRC : std_logic; - signal SetDI : std_logic; - signal SetEI : std_logic; - signal IMode : std_logic_vector(1 downto 0); - signal Halt : std_logic; - signal XYbit_undoc : std_logic; - -begin - - mcode : T80_MCode - generic map( - Mode => Mode, - Flag_C => Flag_C, - Flag_N => Flag_N, - Flag_P => Flag_P, - Flag_X => Flag_X, - Flag_H => Flag_H, - Flag_Y => Flag_Y, - Flag_Z => Flag_Z, - Flag_S => Flag_S) - port map( - IR => IR, - ISet => ISet, - MCycle => MCycle, - F => F, - NMICycle => NMICycle, - IntCycle => IntCycle, - XY_State => XY_State, - MCycles => MCycles_d, - TStates => TStates, - Prefix => Prefix, - Inc_PC => Inc_PC, - Inc_WZ => Inc_WZ, - IncDec_16 => IncDec_16, - Read_To_Acc => Read_To_Acc, - Read_To_Reg => Read_To_Reg, - Set_BusB_To => Set_BusB_To, - Set_BusA_To => Set_BusA_To, - ALU_Op => ALU_Op, - Save_ALU => Save_ALU, - PreserveC => PreserveC, - Arith16 => Arith16, - Set_Addr_To => Set_Addr_To, - IORQ => IORQ_i, - Jump => Jump, - JumpE => JumpE, - JumpXY => JumpXY, - Call => Call, - RstP => RstP, - LDZ => LDZ, - LDW => LDW, - LDSPHL => LDSPHL, - Special_LD => Special_LD, - ExchangeDH => ExchangeDH, - ExchangeRp => ExchangeRp, - ExchangeAF => ExchangeAF, - ExchangeRS => ExchangeRS, - I_DJNZ => I_DJNZ, - I_CPL => I_CPL, - I_CCF => I_CCF, - I_SCF => I_SCF, - I_RETN => I_RETN, - I_BT => I_BT, - I_BC => I_BC, - I_BTR => I_BTR, - I_RLD => I_RLD, - I_RRD => I_RRD, - I_INRC => I_INRC, - SetDI => SetDI, - SetEI => SetEI, - IMode => IMode, - Halt => Halt, - NoRead => NoRead, - Write => Write, - XYbit_undoc => XYbit_undoc); - - alu : T80_ALU - generic map( - Mode => Mode, - Flag_C => Flag_C, - Flag_N => Flag_N, - Flag_P => Flag_P, - Flag_X => Flag_X, - Flag_H => Flag_H, - Flag_Y => Flag_Y, - Flag_Z => Flag_Z, - Flag_S => Flag_S) - port map( - Arith16 => Arith16_r, - Z16 => Z16_r, - ALU_Op => ALU_Op_r, - IR => IR(5 downto 0), - ISet => ISet, - BusA => BusA, - BusB => BusB, - F_In => F, - Q => ALU_Q, - F_Out => F_Out); - - ClkEn <= CEN and not BusAck; - - T_Res <= '1' when TState = unsigned(TStates) else '0'; - - NextIs_XY_Fetch <= '1' when XY_State /= "00" and XY_Ind = '0' and - ((Set_Addr_To = aXY) or - (MCycle = "001" and IR = "11001011") or - (MCycle = "001" and IR = "00110110")) else '0'; - - Save_Mux <= BusB when ExchangeRp = '1' else - DI_Reg when Save_ALU_r = '0' else - ALU_Q; - - process (RESET_n, CLK_n) - begin - if RESET_n = '0' then - PC <= (others => '0'); -- Program Counter - A <= (others => '0'); - TmpAddr <= (others => '0'); - IR <= "00000000"; - ISet <= "00"; - XY_State <= "00"; - IStatus <= "00"; - MCycles <= "000"; - DO <= "00000000"; - - ACC <= (others => '1'); - F <= (others => '1'); - Ap <= (others => '1'); - Fp <= (others => '1'); - I <= (others => '0'); - R <= (others => '0'); - SP <= (others => '1'); - Alternate <= '0'; - - Read_To_Reg_r <= "00000"; - F <= (others => '1'); - Arith16_r <= '0'; - BTR_r <= '0'; - Z16_r <= '0'; - ALU_Op_r <= "0000"; - Save_ALU_r <= '0'; - PreserveC_r <= '0'; - XY_Ind <= '0'; - - elsif CLK_n'event and CLK_n = '1' then - - if ClkEn = '1' then - - ALU_Op_r <= "0000"; - Save_ALU_r <= '0'; - Read_To_Reg_r <= "00000"; - - MCycles <= MCycles_d; - - if IMode /= "11" then - IStatus <= IMode; - end if; - - Arith16_r <= Arith16; - PreserveC_r <= PreserveC; - if ISet = "10" and ALU_OP(2) = '0' and ALU_OP(0) = '1' and MCycle = "011" then - Z16_r <= '1'; - else - Z16_r <= '0'; - end if; - - if MCycle = "001" and TState(2) = '0' then - -- MCycle = 1 and TState = 1, 2, or 3 - - if TState = 2 and Wait_n = '1' then - if Mode < 2 then - A(7 downto 0) <= std_logic_vector(R); - A(15 downto 8) <= I; - R(6 downto 0) <= R(6 downto 0) + 1; - end if; - - if Jump = '0' and Call = '0' and NMICycle = '0' and IntCycle = '0' and not (Halt_FF = '1' or Halt = '1') then - PC <= PC + 1; - end if; - - if IntCycle = '1' and IStatus = "01" then - IR <= "11111111"; - elsif Halt_FF = '1' or (IntCycle = '1' and IStatus = "10") or NMICycle = '1' then - IR <= "00000000"; - else - IR <= DInst; - end if; - - ISet <= "00"; - if Prefix /= "00" then - if Prefix = "11" then - if IR(5) = '1' then - XY_State <= "10"; - else - XY_State <= "01"; - end if; - else - if Prefix = "10" then - XY_State <= "00"; - XY_Ind <= '0'; - end if; - ISet <= Prefix; - end if; - else - XY_State <= "00"; - XY_Ind <= '0'; - end if; - end if; - - else - -- either (MCycle > 1) OR (MCycle = 1 AND TState > 3) - - if MCycle = "110" then - XY_Ind <= '1'; - if Prefix = "01" then - ISet <= "01"; - end if; - end if; - - if T_Res = '1' then - BTR_r <= (I_BT or I_BC or I_BTR) and not No_BTR; - if Jump = '1' then - A(15 downto 8) <= DI_Reg; - A(7 downto 0) <= TmpAddr(7 downto 0); - PC(15 downto 8) <= unsigned(DI_Reg); - PC(7 downto 0) <= unsigned(TmpAddr(7 downto 0)); - elsif JumpXY = '1' then - A <= RegBusC; - PC <= unsigned(RegBusC); - elsif Call = '1' or RstP = '1' then - A <= TmpAddr; - PC <= unsigned(TmpAddr); - elsif MCycle = MCycles and NMICycle = '1' then - A <= "0000000001100110"; - PC <= "0000000001100110"; - elsif MCycle = "011" and IntCycle = '1' and IStatus = "10" then - A(15 downto 8) <= I; - A(7 downto 0) <= TmpAddr(7 downto 0); - PC(15 downto 8) <= unsigned(I); - PC(7 downto 0) <= unsigned(TmpAddr(7 downto 0)); - else - case Set_Addr_To is - when aXY => - if XY_State = "00" then - A <= RegBusC; - else - if NextIs_XY_Fetch = '1' then - A <= std_logic_vector(PC); - else - A <= TmpAddr; - end if; - end if; - when aIOA => - if Mode = 3 then - -- Memory map I/O on GBZ80 - A(15 downto 8) <= (others => '1'); - elsif Mode = 2 then - -- Duplicate I/O address on 8080 - A(15 downto 8) <= DI_Reg; - else - A(15 downto 8) <= ACC; - end if; - A(7 downto 0) <= DI_Reg; - when aSP => - A <= std_logic_vector(SP); - when aBC => - if Mode = 3 and IORQ_i = '1' then - -- Memory map I/O on GBZ80 - A(15 downto 8) <= (others => '1'); - A(7 downto 0) <= RegBusC(7 downto 0); - else - A <= RegBusC; - end if; - when aDE => - A <= RegBusC; - when aZI => - if Inc_WZ = '1' then - A <= std_logic_vector(unsigned(TmpAddr) + 1); - else - A(15 downto 8) <= DI_Reg; - A(7 downto 0) <= TmpAddr(7 downto 0); - end if; - when others => - A <= std_logic_vector(PC); - end case; - end if; - - Save_ALU_r <= Save_ALU; - ALU_Op_r <= ALU_Op; - - if I_CPL = '1' then - -- CPL - ACC <= not ACC; - F(Flag_Y) <= not ACC(5); - F(Flag_H) <= '1'; - F(Flag_X) <= not ACC(3); - F(Flag_N) <= '1'; - end if; - if I_CCF = '1' then - -- CCF - F(Flag_C) <= not F(Flag_C); - F(Flag_Y) <= ACC(5); - F(Flag_H) <= F(Flag_C); - F(Flag_X) <= ACC(3); - F(Flag_N) <= '0'; - end if; - if I_SCF = '1' then - -- SCF - F(Flag_C) <= '1'; - F(Flag_Y) <= ACC(5); - F(Flag_H) <= '0'; - F(Flag_X) <= ACC(3); - F(Flag_N) <= '0'; - end if; - end if; - - if TState = 2 and Wait_n = '1' then - if ISet = "01" and MCycle = "111" then - IR <= DInst; - end if; - if JumpE = '1' then - PC <= unsigned(signed(PC) + signed(DI_Reg)); - elsif Inc_PC = '1' then - PC <= PC + 1; - end if; - if BTR_r = '1' then - PC <= PC - 2; - end if; - if RstP = '1' then - TmpAddr <= (others =>'0'); - TmpAddr(5 downto 3) <= IR(5 downto 3); - end if; - end if; - if TState = 3 and MCycle = "110" then - TmpAddr <= std_logic_vector(signed(RegBusC) + signed(DI_Reg)); - end if; - - if (TState = 2 and Wait_n = '1') or (TState = 4 and MCycle = "001") then - if IncDec_16(2 downto 0) = "111" then - if IncDec_16(3) = '1' then - SP <= SP - 1; - else - SP <= SP + 1; - end if; - end if; - end if; - - if LDSPHL = '1' then - SP <= unsigned(RegBusC); - end if; - if ExchangeAF = '1' then - Ap <= ACC; - ACC <= Ap; - Fp <= F; - F <= Fp; - end if; - if ExchangeRS = '1' then - Alternate <= not Alternate; - end if; - end if; - - if TState = 3 then - if LDZ = '1' then - TmpAddr(7 downto 0) <= DI_Reg; - end if; - if LDW = '1' then - TmpAddr(15 downto 8) <= DI_Reg; - end if; - - if Special_LD(2) = '1' then - case Special_LD(1 downto 0) is - when "00" => - ACC <= I; - F(Flag_P) <= IntE_FF2; - when "01" => - ACC <= std_logic_vector(R); - F(Flag_P) <= IntE_FF2; - when "10" => - I <= ACC; - when others => - R <= unsigned(ACC); - end case; - end if; - end if; - - if (I_DJNZ = '0' and Save_ALU_r = '1') or ALU_Op_r = "1001" then - if Mode = 3 then - F(6) <= F_Out(6); - F(5) <= F_Out(5); - F(7) <= F_Out(7); - if PreserveC_r = '0' then - F(4) <= F_Out(4); - end if; - else - F(7 downto 1) <= F_Out(7 downto 1); - if PreserveC_r = '0' then - F(Flag_C) <= F_Out(0); - end if; - end if; - end if; - if T_Res = '1' and I_INRC = '1' then - F(Flag_H) <= '0'; - F(Flag_N) <= '0'; - if DI_Reg(7 downto 0) = "00000000" then - F(Flag_Z) <= '1'; - else - F(Flag_Z) <= '0'; - end if; - F(Flag_S) <= DI_Reg(7); - F(Flag_P) <= not (DI_Reg(0) xor DI_Reg(1) xor DI_Reg(2) xor DI_Reg(3) xor - DI_Reg(4) xor DI_Reg(5) xor DI_Reg(6) xor DI_Reg(7)); - end if; - - if TState = 1 then - DO <= BusB; - if I_RLD = '1' then - DO(3 downto 0) <= BusA(3 downto 0); - DO(7 downto 4) <= BusB(3 downto 0); - end if; - if I_RRD = '1' then - DO(3 downto 0) <= BusB(7 downto 4); - DO(7 downto 4) <= BusA(3 downto 0); - end if; - end if; - - if T_Res = '1' then - Read_To_Reg_r(3 downto 0) <= Set_BusA_To; - Read_To_Reg_r(4) <= Read_To_Reg; - if Read_To_Acc = '1' then - Read_To_Reg_r(3 downto 0) <= "0111"; - Read_To_Reg_r(4) <= '1'; - end if; - end if; - - if TState = 1 and I_BT = '1' then - F(Flag_X) <= ALU_Q(3); - F(Flag_Y) <= ALU_Q(1); - F(Flag_H) <= '0'; - F(Flag_N) <= '0'; - end if; - if I_BC = '1' or I_BT = '1' then - F(Flag_P) <= IncDecZ; - end if; - - if (TState = 1 and Save_ALU_r = '0') or - (Save_ALU_r = '1' and ALU_OP_r /= "0111") then - case Read_To_Reg_r is - when "10111" => - ACC <= Save_Mux; - when "10110" => - DO <= Save_Mux; - when "11000" => - SP(7 downto 0) <= unsigned(Save_Mux); - when "11001" => - SP(15 downto 8) <= unsigned(Save_Mux); - when "11011" => - F <= Save_Mux; - when others => - end case; - if XYbit_undoc='1' then - DO <= ALU_Q; - end if; - end if; - - end if; - - end if; - - end process; - ---------------------------------------------------------------------------- --- --- BC('), DE('), HL('), IX and IY --- ---------------------------------------------------------------------------- - process (CLK_n) - begin - if CLK_n'event and CLK_n = '1' then - if ClkEn = '1' then - -- Bus A / Write - RegAddrA_r <= Alternate & Set_BusA_To(2 downto 1); - if XY_Ind = '0' and XY_State /= "00" and Set_BusA_To(2 downto 1) = "10" then - RegAddrA_r <= XY_State(1) & "11"; - end if; - - -- Bus B - RegAddrB_r <= Alternate & Set_BusB_To(2 downto 1); - if XY_Ind = '0' and XY_State /= "00" and Set_BusB_To(2 downto 1) = "10" then - RegAddrB_r <= XY_State(1) & "11"; - end if; - - -- Address from register - RegAddrC <= Alternate & Set_Addr_To(1 downto 0); - -- Jump (HL), LD SP,HL - if (JumpXY = '1' or LDSPHL = '1') then - RegAddrC <= Alternate & "10"; - end if; - if ((JumpXY = '1' or LDSPHL = '1') and XY_State /= "00") or (MCycle = "110") then - RegAddrC <= XY_State(1) & "11"; - end if; - - if I_DJNZ = '1' and Save_ALU_r = '1' and Mode < 2 then - IncDecZ <= F_Out(Flag_Z); - end if; - if (TState = 2 or (TState = 3 and MCycle = "001")) and IncDec_16(2 downto 0) = "100" then - if ID16 = 0 then - IncDecZ <= '0'; - else - IncDecZ <= '1'; - end if; - end if; - - RegBusA_r <= RegBusA; - end if; - end if; - end process; - - RegAddrA <= - -- 16 bit increment/decrement - Alternate & IncDec_16(1 downto 0) when (TState = 2 or - (TState = 3 and MCycle = "001" and IncDec_16(2) = '1')) and XY_State = "00" else - XY_State(1) & "11" when (TState = 2 or - (TState = 3 and MCycle = "001" and IncDec_16(2) = '1')) and IncDec_16(1 downto 0) = "10" else - -- EX HL,DL - Alternate & "10" when ExchangeDH = '1' and TState = 3 else - Alternate & "01" when ExchangeDH = '1' and TState = 4 else - -- Bus A / Write - RegAddrA_r; - - RegAddrB <= - -- EX HL,DL - Alternate & "01" when ExchangeDH = '1' and TState = 3 else - -- Bus B - RegAddrB_r; - - ID16 <= signed(RegBusA) - 1 when IncDec_16(3) = '1' else - signed(RegBusA) + 1; - - process (Save_ALU_r, Auto_Wait_t1, ALU_OP_r, Read_To_Reg_r, - ExchangeDH, IncDec_16, MCycle, TState, Wait_n) - begin - RegWEH <= '0'; - RegWEL <= '0'; - if (TState = 1 and Save_ALU_r = '0') or - (Save_ALU_r = '1' and ALU_OP_r /= "0111") then - case Read_To_Reg_r is - when "10000" | "10001" | "10010" | "10011" | "10100" | "10101" => - RegWEH <= not Read_To_Reg_r(0); - RegWEL <= Read_To_Reg_r(0); - when others => - end case; - end if; - - if ExchangeDH = '1' and (TState = 3 or TState = 4) then - RegWEH <= '1'; - RegWEL <= '1'; - end if; - - if IncDec_16(2) = '1' and ((TState = 2 and Wait_n = '1' and MCycle /= "001") or (TState = 3 and MCycle = "001")) then - case IncDec_16(1 downto 0) is - when "00" | "01" | "10" => - RegWEH <= '1'; - RegWEL <= '1'; - when others => - end case; - end if; - end process; - - process (Save_Mux, RegBusB, RegBusA_r, ID16, - ExchangeDH, IncDec_16, MCycle, TState, Wait_n) - begin - RegDIH <= Save_Mux; - RegDIL <= Save_Mux; - - if ExchangeDH = '1' and TState = 3 then - RegDIH <= RegBusB(15 downto 8); - RegDIL <= RegBusB(7 downto 0); - end if; - if ExchangeDH = '1' and TState = 4 then - RegDIH <= RegBusA_r(15 downto 8); - RegDIL <= RegBusA_r(7 downto 0); - end if; - - if IncDec_16(2) = '1' and ((TState = 2 and MCycle /= "001") or (TState = 3 and MCycle = "001")) then - RegDIH <= std_logic_vector(ID16(15 downto 8)); - RegDIL <= std_logic_vector(ID16(7 downto 0)); - end if; - end process; - - Regs : T80_Reg - port map( - Clk => CLK_n, - CEN => ClkEn, - WEH => RegWEH, - WEL => RegWEL, - AddrA => RegAddrA, - AddrB => RegAddrB, - AddrC => RegAddrC, - DIH => RegDIH, - DIL => RegDIL, - DOAH => RegBusA(15 downto 8), - DOAL => RegBusA(7 downto 0), - DOBH => RegBusB(15 downto 8), - DOBL => RegBusB(7 downto 0), - DOCH => RegBusC(15 downto 8), - DOCL => RegBusC(7 downto 0)); - ---------------------------------------------------------------------------- --- --- Buses --- ---------------------------------------------------------------------------- - process (CLK_n) - begin - if CLK_n'event and CLK_n = '1' then - if ClkEn = '1' then - case Set_BusB_To is - when "0111" => - BusB <= ACC; - when "0000" | "0001" | "0010" | "0011" | "0100" | "0101" => - if Set_BusB_To(0) = '1' then - BusB <= RegBusB(7 downto 0); - else - BusB <= RegBusB(15 downto 8); - end if; - when "0110" => - BusB <= DI_Reg; - when "1000" => - BusB <= std_logic_vector(SP(7 downto 0)); - when "1001" => - BusB <= std_logic_vector(SP(15 downto 8)); - when "1010" => - BusB <= "00000001"; - when "1011" => - BusB <= F; - when "1100" => - BusB <= std_logic_vector(PC(7 downto 0)); - when "1101" => - BusB <= std_logic_vector(PC(15 downto 8)); - when "1110" => - BusB <= "00000000"; - when others => - BusB <= "--------"; - end case; - - case Set_BusA_To is - when "0111" => - BusA <= ACC; - when "0000" | "0001" | "0010" | "0011" | "0100" | "0101" => - if Set_BusA_To(0) = '1' then - BusA <= RegBusA(7 downto 0); - else - BusA <= RegBusA(15 downto 8); - end if; - when "0110" => - BusA <= DI_Reg; - when "1000" => - BusA <= std_logic_vector(SP(7 downto 0)); - when "1001" => - BusA <= std_logic_vector(SP(15 downto 8)); - when "1010" => - BusA <= "00000000"; - when others => - BusB <= "--------"; - end case; - if XYbit_undoc='1' then - BusA <= DI_Reg; - BusB <= DI_Reg; - end if; - end if; - end if; - end process; - ---------------------------------------------------------------------------- --- --- Generate external control signals --- ---------------------------------------------------------------------------- - process (RESET_n,CLK_n) - begin - if RESET_n = '0' then - RFSH_n <= '1'; - elsif CLK_n'event and CLK_n = '1' then - if CEN = '1' then - if MCycle = "001" and ((TState = 2 and Wait_n = '1') or TState = 3) then - RFSH_n <= '0'; - else - RFSH_n <= '1'; - end if; - end if; - end if; - end process; - - MC <= std_logic_vector(MCycle); - TS <= std_logic_vector(TState); - DI_Reg <= DI; - HALT_n <= not Halt_FF; - BUSAK_n <= not BusAck; - IntCycle_n <= not IntCycle; - IntE <= IntE_FF1; - IORQ <= IORQ_i; - Stop <= I_DJNZ; - -------------------------------------------------------------------------- --- --- Syncronise inputs --- -------------------------------------------------------------------------- - process (RESET_n, CLK_n) - variable OldNMI_n : std_logic; - begin - if RESET_n = '0' then - BusReq_s <= '0'; - INT_s <= '0'; - NMI_s <= '0'; - OldNMI_n := '0'; - elsif CLK_n'event and CLK_n = '1' then - if CEN = '1' then - BusReq_s <= not BUSRQ_n; - INT_s <= not INT_n; - if NMICycle = '1' then - NMI_s <= '0'; - elsif NMI_n = '0' and OldNMI_n = '1' then - NMI_s <= '1'; - end if; - OldNMI_n := NMI_n; - end if; - end if; - end process; - -------------------------------------------------------------------------- --- --- Main state machine --- -------------------------------------------------------------------------- - process (RESET_n, CLK_n) - begin - if RESET_n = '0' then - MCycle <= "001"; - TState <= "000"; - Pre_XY_F_M <= "000"; - Halt_FF <= '0'; - BusAck <= '0'; - NMICycle <= '0'; - IntCycle <= '0'; - IntE_FF1 <= '0'; - IntE_FF2 <= '0'; - No_BTR <= '0'; - Auto_Wait_t1 <= '0'; - Auto_Wait_t2 <= '0'; - M1_n <= '1'; - elsif CLK_n'event and CLK_n = '1' then - if CEN = '1' then - Auto_Wait_t1 <= Auto_Wait; - Auto_Wait_t2 <= Auto_Wait_t1; - No_BTR <= (I_BT and (not IR(4) or not F(Flag_P))) or - (I_BC and (not IR(4) or F(Flag_Z) or not F(Flag_P))) or - (I_BTR and (not IR(4) or F(Flag_Z))); - if TState = 2 then - if SetEI = '1' then - IntE_FF1 <= '1'; - IntE_FF2 <= '1'; - end if; - if I_RETN = '1' then - IntE_FF1 <= IntE_FF2; - end if; - end if; - if TState = 3 then - if SetDI = '1' then - IntE_FF1 <= '0'; - IntE_FF2 <= '0'; - end if; - end if; - if IntCycle = '1' or NMICycle = '1' then - Halt_FF <= '0'; - end if; - if MCycle = "001" and TState = 2 and Wait_n = '1' then - M1_n <= '1'; - end if; - if BusReq_s = '1' and BusAck = '1' then - else - BusAck <= '0'; - if TState = 2 and Wait_n = '0' then - elsif T_Res = '1' then - if Halt = '1' then - Halt_FF <= '1'; - end if; - if BusReq_s = '1' then - BusAck <= '1'; - else - TState <= "001"; - if NextIs_XY_Fetch = '1' then - MCycle <= "110"; - Pre_XY_F_M <= MCycle; - if IR = "00110110" and Mode = 0 then - Pre_XY_F_M <= "010"; - end if; - elsif (MCycle = "111") or - (MCycle = "110" and Mode = 1 and ISet /= "01") then - MCycle <= std_logic_vector(unsigned(Pre_XY_F_M) + 1); - elsif (MCycle = MCycles) or - No_BTR = '1' or - (MCycle = "010" and I_DJNZ = '1' and IncDecZ = '1') then - M1_n <= '0'; - MCycle <= "001"; - IntCycle <= '0'; - NMICycle <= '0'; - if NMI_s = '1' and Prefix = "00" then - NMICycle <= '1'; - IntE_FF1 <= '0'; - elsif (IntE_FF1 = '1' and INT_s = '1') and Prefix = "00" and SetEI = '0' then - IntCycle <= '1'; - IntE_FF1 <= '0'; - IntE_FF2 <= '0'; - end if; - else - MCycle <= std_logic_vector(unsigned(MCycle) + 1); - end if; - end if; - else - if Auto_Wait = '1' nand Auto_Wait_t2 = '0' then - - TState <= TState + 1; - end if; - end if; - end if; - if TState = 0 then - M1_n <= '0'; - end if; - end if; - end if; - end process; - - process (IntCycle, NMICycle, MCycle) - begin - Auto_Wait <= '0'; - if IntCycle = '1' or NMICycle = '1' then - if MCycle = "001" then - Auto_Wait <= '1'; - end if; - end if; - end process; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_ALU.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_ALU.vhd deleted file mode 100644 index 6bd576cf..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_ALU.vhd +++ /dev/null @@ -1,371 +0,0 @@ --- **** --- T80(b) core. In an effort to merge and maintain bug fixes .... --- --- --- Ver 301 parity flag is just parity for 8080, also overflow for Z80, by Sean Riddle --- Ver 300 started tidyup --- MikeJ March 2005 --- Latest version from www.fpgaarcade.com (original www.opencores.org) --- --- **** --- --- Z80 compatible microprocessor core --- --- Version : 0247 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- --- 0214 : Fixed mostly flags, only the block instructions now fail the zex regression test --- --- 0238 : Fixed zero flag for 16 bit SBC and ADC --- --- 0240 : Added GB operations --- --- 0242 : Cleanup --- --- 0247 : Cleanup --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; - -entity T80_ALU is - generic( - Mode : integer := 0; - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - Arith16 : in std_logic; - Z16 : in std_logic; - ALU_Op : in std_logic_vector(3 downto 0); - IR : in std_logic_vector(5 downto 0); - ISet : in std_logic_vector(1 downto 0); - BusA : in std_logic_vector(7 downto 0); - BusB : in std_logic_vector(7 downto 0); - F_In : in std_logic_vector(7 downto 0); - Q : out std_logic_vector(7 downto 0); - F_Out : out std_logic_vector(7 downto 0) - ); -end T80_ALU; - -architecture rtl of T80_ALU is - - procedure AddSub(A : std_logic_vector; - B : std_logic_vector; - Sub : std_logic; - Carry_In : std_logic; - signal Res : out std_logic_vector; - signal Carry : out std_logic) is - - variable B_i : unsigned(A'length - 1 downto 0); - variable Res_i : unsigned(A'length + 1 downto 0); - begin - if Sub = '1' then - B_i := not unsigned(B); - else - B_i := unsigned(B); - end if; - - Res_i := unsigned("0" & A & Carry_In) + unsigned("0" & B_i & "1"); - Carry <= Res_i(A'length + 1); - Res <= std_logic_vector(Res_i(A'length downto 1)); - end; - - -- AddSub variables (temporary signals) - signal UseCarry : std_logic; - signal Carry7_v : std_logic; - signal Overflow_v : std_logic; - signal HalfCarry_v : std_logic; - signal Carry_v : std_logic; - signal Q_v : std_logic_vector(7 downto 0); - - signal BitMask : std_logic_vector(7 downto 0); - -begin - - with IR(5 downto 3) select BitMask <= "00000001" when "000", - "00000010" when "001", - "00000100" when "010", - "00001000" when "011", - "00010000" when "100", - "00100000" when "101", - "01000000" when "110", - "10000000" when others; - - UseCarry <= not ALU_Op(2) and ALU_Op(0); - AddSub(BusA(3 downto 0), BusB(3 downto 0), ALU_Op(1), ALU_Op(1) xor (UseCarry and F_In(Flag_C)), Q_v(3 downto 0), HalfCarry_v); - AddSub(BusA(6 downto 4), BusB(6 downto 4), ALU_Op(1), HalfCarry_v, Q_v(6 downto 4), Carry7_v); - AddSub(BusA(7 downto 7), BusB(7 downto 7), ALU_Op(1), Carry7_v, Q_v(7 downto 7), Carry_v); - - -- bug fix - parity flag is just parity for 8080, also overflow for Z80 - process (Carry_v, Carry7_v, Q_v) - begin - if(Mode=2) then - OverFlow_v <= not (Q_v(0) xor Q_v(1) xor Q_v(2) xor Q_v(3) xor - Q_v(4) xor Q_v(5) xor Q_v(6) xor Q_v(7)); else - OverFlow_v <= Carry_v xor Carry7_v; - end if; - end process; - - process (Arith16, ALU_OP, F_In, BusA, BusB, IR, Q_v, Carry_v, HalfCarry_v, OverFlow_v, BitMask, ISet, Z16) - variable Q_t : std_logic_vector(7 downto 0); - variable DAA_Q : unsigned(8 downto 0); - begin - Q_t := "--------"; - F_Out <= F_In; - DAA_Q := "---------"; - case ALU_Op is - when "0000" | "0001" | "0010" | "0011" | "0100" | "0101" | "0110" | "0111" => - F_Out(Flag_N) <= '0'; - F_Out(Flag_C) <= '0'; - case ALU_OP(2 downto 0) is - when "000" | "001" => -- ADD, ADC - Q_t := Q_v; - F_Out(Flag_C) <= Carry_v; - F_Out(Flag_H) <= HalfCarry_v; - F_Out(Flag_P) <= OverFlow_v; - when "010" | "011" | "111" => -- SUB, SBC, CP - Q_t := Q_v; - F_Out(Flag_N) <= '1'; - F_Out(Flag_C) <= not Carry_v; - F_Out(Flag_H) <= not HalfCarry_v; - F_Out(Flag_P) <= OverFlow_v; - when "100" => -- AND - Q_t(7 downto 0) := BusA and BusB; - F_Out(Flag_H) <= '1'; - when "101" => -- XOR - Q_t(7 downto 0) := BusA xor BusB; - F_Out(Flag_H) <= '0'; - when others => -- OR "110" - Q_t(7 downto 0) := BusA or BusB; - F_Out(Flag_H) <= '0'; - end case; - if ALU_Op(2 downto 0) = "111" then -- CP - F_Out(Flag_X) <= BusB(3); - F_Out(Flag_Y) <= BusB(5); - else - F_Out(Flag_X) <= Q_t(3); - F_Out(Flag_Y) <= Q_t(5); - end if; - if Q_t(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - if Z16 = '1' then - F_Out(Flag_Z) <= F_In(Flag_Z); -- 16 bit ADC,SBC - end if; - else - F_Out(Flag_Z) <= '0'; - end if; - F_Out(Flag_S) <= Q_t(7); - case ALU_Op(2 downto 0) is - when "000" | "001" | "010" | "011" | "111" => -- ADD, ADC, SUB, SBC, CP - when others => - F_Out(Flag_P) <= not (Q_t(0) xor Q_t(1) xor Q_t(2) xor Q_t(3) xor - Q_t(4) xor Q_t(5) xor Q_t(6) xor Q_t(7)); - end case; - if Arith16 = '1' then - F_Out(Flag_S) <= F_In(Flag_S); - F_Out(Flag_Z) <= F_In(Flag_Z); - F_Out(Flag_P) <= F_In(Flag_P); - end if; - when "1100" => - -- DAA - F_Out(Flag_H) <= F_In(Flag_H); - F_Out(Flag_C) <= F_In(Flag_C); - DAA_Q(7 downto 0) := unsigned(BusA); - DAA_Q(8) := '0'; - if F_In(Flag_N) = '0' then - -- After addition - -- Alow > 9 or H = 1 - if DAA_Q(3 downto 0) > 9 or F_In(Flag_H) = '1' then - if (DAA_Q(3 downto 0) > 9) then - F_Out(Flag_H) <= '1'; - else - F_Out(Flag_H) <= '0'; - end if; - DAA_Q := DAA_Q + 6; - end if; - -- new Ahigh > 9 or C = 1 - if DAA_Q(8 downto 4) > 9 or F_In(Flag_C) = '1' then - DAA_Q := DAA_Q + 96; -- 0x60 - end if; - else - -- After subtraction - if DAA_Q(3 downto 0) > 9 or F_In(Flag_H) = '1' then - if DAA_Q(3 downto 0) > 5 then - F_Out(Flag_H) <= '0'; - end if; - DAA_Q(7 downto 0) := DAA_Q(7 downto 0) - 6; - end if; - if unsigned(BusA) > 153 or F_In(Flag_C) = '1' then - DAA_Q := DAA_Q - 352; -- 0x160 - end if; - end if; - F_Out(Flag_X) <= DAA_Q(3); - F_Out(Flag_Y) <= DAA_Q(5); - F_Out(Flag_C) <= F_In(Flag_C) or DAA_Q(8); - Q_t := std_logic_vector(DAA_Q(7 downto 0)); - if DAA_Q(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - else - F_Out(Flag_Z) <= '0'; - end if; - F_Out(Flag_S) <= DAA_Q(7); - F_Out(Flag_P) <= not (DAA_Q(0) xor DAA_Q(1) xor DAA_Q(2) xor DAA_Q(3) xor - DAA_Q(4) xor DAA_Q(5) xor DAA_Q(6) xor DAA_Q(7)); - when "1101" | "1110" => - -- RLD, RRD - Q_t(7 downto 4) := BusA(7 downto 4); - if ALU_Op(0) = '1' then - Q_t(3 downto 0) := BusB(7 downto 4); - else - Q_t(3 downto 0) := BusB(3 downto 0); - end if; - F_Out(Flag_H) <= '0'; - F_Out(Flag_N) <= '0'; - F_Out(Flag_X) <= Q_t(3); - F_Out(Flag_Y) <= Q_t(5); - if Q_t(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - else - F_Out(Flag_Z) <= '0'; - end if; - F_Out(Flag_S) <= Q_t(7); - F_Out(Flag_P) <= not (Q_t(0) xor Q_t(1) xor Q_t(2) xor Q_t(3) xor - Q_t(4) xor Q_t(5) xor Q_t(6) xor Q_t(7)); - when "1001" => - -- BIT - Q_t(7 downto 0) := BusB and BitMask; - F_Out(Flag_S) <= Q_t(7); - if Q_t(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - F_Out(Flag_P) <= '1'; - else - F_Out(Flag_Z) <= '0'; - F_Out(Flag_P) <= '0'; - end if; - F_Out(Flag_H) <= '1'; - F_Out(Flag_N) <= '0'; - F_Out(Flag_X) <= '0'; - F_Out(Flag_Y) <= '0'; - if IR(2 downto 0) /= "110" then - F_Out(Flag_X) <= BusB(3); - F_Out(Flag_Y) <= BusB(5); - end if; - when "1010" => - -- SET - Q_t(7 downto 0) := BusB or BitMask; - when "1011" => - -- RES - Q_t(7 downto 0) := BusB and not BitMask; - when "1000" => - -- ROT - case IR(5 downto 3) is - when "000" => -- RLC - Q_t(7 downto 1) := BusA(6 downto 0); - Q_t(0) := BusA(7); - F_Out(Flag_C) <= BusA(7); - when "010" => -- RL - Q_t(7 downto 1) := BusA(6 downto 0); - Q_t(0) := F_In(Flag_C); - F_Out(Flag_C) <= BusA(7); - when "001" => -- RRC - Q_t(6 downto 0) := BusA(7 downto 1); - Q_t(7) := BusA(0); - F_Out(Flag_C) <= BusA(0); - when "011" => -- RR - Q_t(6 downto 0) := BusA(7 downto 1); - Q_t(7) := F_In(Flag_C); - F_Out(Flag_C) <= BusA(0); - when "100" => -- SLA - Q_t(7 downto 1) := BusA(6 downto 0); - Q_t(0) := '0'; - F_Out(Flag_C) <= BusA(7); - when "110" => -- SLL (Undocumented) / SWAP - if Mode = 3 then - Q_t(7 downto 4) := BusA(3 downto 0); - Q_t(3 downto 0) := BusA(7 downto 4); - F_Out(Flag_C) <= '0'; - else - Q_t(7 downto 1) := BusA(6 downto 0); - Q_t(0) := '1'; - F_Out(Flag_C) <= BusA(7); - end if; - when "101" => -- SRA - Q_t(6 downto 0) := BusA(7 downto 1); - Q_t(7) := BusA(7); - F_Out(Flag_C) <= BusA(0); - when others => -- SRL - Q_t(6 downto 0) := BusA(7 downto 1); - Q_t(7) := '0'; - F_Out(Flag_C) <= BusA(0); - end case; - F_Out(Flag_H) <= '0'; - F_Out(Flag_N) <= '0'; - F_Out(Flag_X) <= Q_t(3); - F_Out(Flag_Y) <= Q_t(5); - F_Out(Flag_S) <= Q_t(7); - if Q_t(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - else - F_Out(Flag_Z) <= '0'; - end if; - F_Out(Flag_P) <= not (Q_t(0) xor Q_t(1) xor Q_t(2) xor Q_t(3) xor - Q_t(4) xor Q_t(5) xor Q_t(6) xor Q_t(7)); - if ISet = "00" then - F_Out(Flag_P) <= F_In(Flag_P); - F_Out(Flag_S) <= F_In(Flag_S); - F_Out(Flag_Z) <= F_In(Flag_Z); - end if; - when others => - null; - end case; - Q <= Q_t; - end process; -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_MCode.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_MCode.vhd deleted file mode 100644 index ee217402..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_MCode.vhd +++ /dev/null @@ -1,2026 +0,0 @@ --- **** --- T80(b) core. In an effort to merge and maintain bug fixes .... --- --- --- Ver 303 add undocumented DDCB and FDCB opcodes by TobiFlex 20.04.2010 --- Ver 302 fixed IO cycle timing, tested thanks to Alessandro. --- Ver 300 started tidyup --- MikeJ March 2005 --- Latest version from www.fpgaarcade.com (original www.opencores.org) --- --- **** --- --- Z80 compatible microprocessor core --- --- Version : 0242 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- --- 0208 : First complete release --- --- 0211 : Fixed IM 1 --- --- 0214 : Fixed mostly flags, only the block instructions now fail the zex regression test --- --- 0235 : Added IM 2 fix by Mike Johnson --- --- 0238 : Added NoRead signal --- --- 0238b: Fixed instruction timing for POP and DJNZ --- --- 0240 : Added (IX/IY+d) states, removed op-codes from mode 2 and added all remaining mode 3 op-codes - --- 0240mj1 fix for HL inc/dec for INI, IND, INIR, INDR, OUTI, OUTD, OTIR, OTDR --- --- 0242 : Fixed I/O instruction timing, cleanup --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use work.T80_Pack.all; - -entity T80_MCode is - generic( - Mode : integer := 0; - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - IR : in std_logic_vector(7 downto 0); - ISet : in std_logic_vector(1 downto 0); - MCycle : in std_logic_vector(2 downto 0); - F : in std_logic_vector(7 downto 0); - NMICycle : in std_logic; - IntCycle : in std_logic; - XY_State : in std_logic_vector(1 downto 0); - MCycles : out std_logic_vector(2 downto 0); - TStates : out std_logic_vector(2 downto 0); - Prefix : out std_logic_vector(1 downto 0); -- None,CB,ED,DD/FD - Inc_PC : out std_logic; - Inc_WZ : out std_logic; - IncDec_16 : out std_logic_vector(3 downto 0); -- BC,DE,HL,SP 0 is inc - Read_To_Reg : out std_logic; - Read_To_Acc : out std_logic; - Set_BusA_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI/DB,A,SP(L),SP(M),0,F - Set_BusB_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI,A,SP(L),SP(M),1,F,PC(L),PC(M),0 - ALU_Op : out std_logic_vector(3 downto 0); - -- ADD, ADC, SUB, SBC, AND, XOR, OR, CP, ROT, BIT, SET, RES, DAA, RLD, RRD, None - Save_ALU : out std_logic; - PreserveC : out std_logic; - Arith16 : out std_logic; - Set_Addr_To : out std_logic_vector(2 downto 0); -- aNone,aXY,aIOA,aSP,aBC,aDE,aZI - IORQ : out std_logic; - Jump : out std_logic; - JumpE : out std_logic; - JumpXY : out std_logic; - Call : out std_logic; - RstP : out std_logic; - LDZ : out std_logic; - LDW : out std_logic; - LDSPHL : out std_logic; - Special_LD : out std_logic_vector(2 downto 0); -- A,I;A,R;I,A;R,A;None - ExchangeDH : out std_logic; - ExchangeRp : out std_logic; - ExchangeAF : out std_logic; - ExchangeRS : out std_logic; - I_DJNZ : out std_logic; - I_CPL : out std_logic; - I_CCF : out std_logic; - I_SCF : out std_logic; - I_RETN : out std_logic; - I_BT : out std_logic; - I_BC : out std_logic; - I_BTR : out std_logic; - I_RLD : out std_logic; - I_RRD : out std_logic; - I_INRC : out std_logic; - SetDI : out std_logic; - SetEI : out std_logic; - IMode : out std_logic_vector(1 downto 0); - Halt : out std_logic; - NoRead : out std_logic; - Write : out std_logic; - XYbit_undoc : out std_logic - ); -end T80_MCode; - -architecture rtl of T80_MCode is - - constant aNone : std_logic_vector(2 downto 0) := "111"; - constant aBC : std_logic_vector(2 downto 0) := "000"; - constant aDE : std_logic_vector(2 downto 0) := "001"; - constant aXY : std_logic_vector(2 downto 0) := "010"; - constant aIOA : std_logic_vector(2 downto 0) := "100"; - constant aSP : std_logic_vector(2 downto 0) := "101"; - constant aZI : std_logic_vector(2 downto 0) := "110"; - - function is_cc_true( - F : std_logic_vector(7 downto 0); - cc : bit_vector(2 downto 0) - ) return boolean is - begin - if Mode = 3 then - case cc is - when "000" => return F(7) = '0'; -- NZ - when "001" => return F(7) = '1'; -- Z - when "010" => return F(4) = '0'; -- NC - when "011" => return F(4) = '1'; -- C - when "100" => return false; - when "101" => return false; - when "110" => return false; - when "111" => return false; - end case; - else - case cc is - when "000" => return F(6) = '0'; -- NZ - when "001" => return F(6) = '1'; -- Z - when "010" => return F(0) = '0'; -- NC - when "011" => return F(0) = '1'; -- C - when "100" => return F(2) = '0'; -- PO - when "101" => return F(2) = '1'; -- PE - when "110" => return F(7) = '0'; -- P - when "111" => return F(7) = '1'; -- M - end case; - end if; - end; - -begin - - process (IR, ISet, MCycle, F, NMICycle, IntCycle, XY_State) - variable DDD : std_logic_vector(2 downto 0); - variable SSS : std_logic_vector(2 downto 0); - variable DPair : std_logic_vector(1 downto 0); - variable IRB : bit_vector(7 downto 0); - begin - DDD := IR(5 downto 3); - SSS := IR(2 downto 0); - DPair := IR(5 downto 4); - IRB := to_bitvector(IR); - - MCycles <= "001"; - if MCycle = "001" then - TStates <= "100"; - else - TStates <= "011"; - end if; - Prefix <= "00"; - Inc_PC <= '0'; - Inc_WZ <= '0'; - IncDec_16 <= "0000"; - Read_To_Acc <= '0'; - Read_To_Reg <= '0'; - Set_BusB_To <= "0000"; - Set_BusA_To <= "0000"; - ALU_Op <= "0" & IR(5 downto 3); - Save_ALU <= '0'; - PreserveC <= '0'; - Arith16 <= '0'; - IORQ <= '0'; - Set_Addr_To <= aNone; - Jump <= '0'; - JumpE <= '0'; - JumpXY <= '0'; - Call <= '0'; - RstP <= '0'; - LDZ <= '0'; - LDW <= '0'; - LDSPHL <= '0'; - Special_LD <= "000"; - ExchangeDH <= '0'; - ExchangeRp <= '0'; - ExchangeAF <= '0'; - ExchangeRS <= '0'; - I_DJNZ <= '0'; - I_CPL <= '0'; - I_CCF <= '0'; - I_SCF <= '0'; - I_RETN <= '0'; - I_BT <= '0'; - I_BC <= '0'; - I_BTR <= '0'; - I_RLD <= '0'; - I_RRD <= '0'; - I_INRC <= '0'; - SetDI <= '0'; - SetEI <= '0'; - IMode <= "11"; - Halt <= '0'; - NoRead <= '0'; - Write <= '0'; - XYbit_undoc <= '0'; - - case ISet is - when "00" => - ------------------------------------------------------------------------------- --- --- Unprefixed instructions --- ------------------------------------------------------------------------------- - - case IRB is --- 8 BIT LOAD GROUP - when "01000000"|"01000001"|"01000010"|"01000011"|"01000100"|"01000101"|"01000111" - |"01001000"|"01001001"|"01001010"|"01001011"|"01001100"|"01001101"|"01001111" - |"01010000"|"01010001"|"01010010"|"01010011"|"01010100"|"01010101"|"01010111" - |"01011000"|"01011001"|"01011010"|"01011011"|"01011100"|"01011101"|"01011111" - |"01100000"|"01100001"|"01100010"|"01100011"|"01100100"|"01100101"|"01100111" - |"01101000"|"01101001"|"01101010"|"01101011"|"01101100"|"01101101"|"01101111" - |"01111000"|"01111001"|"01111010"|"01111011"|"01111100"|"01111101"|"01111111" => - -- LD r,r' - Set_BusB_To(2 downto 0) <= SSS; - ExchangeRp <= '1'; - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - when "00000110"|"00001110"|"00010110"|"00011110"|"00100110"|"00101110"|"00111110" => - -- LD r,n - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - when others => null; - end case; - when "01000110"|"01001110"|"01010110"|"01011110"|"01100110"|"01101110"|"01111110" => - -- LD r,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - when others => null; - end case; - when "01110000"|"01110001"|"01110010"|"01110011"|"01110100"|"01110101"|"01110111" => - -- LD (HL),r - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusB_To(3) <= '0'; - when 2 => - Write <= '1'; - when others => null; - end case; - when "00110110" => - -- LD (HL),n - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aXY; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusB_To(3) <= '0'; - when 3 => - Write <= '1'; - when others => null; - end case; - when "00001010" => - -- LD A,(BC) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - when 2 => - Read_To_Acc <= '1'; - when others => null; - end case; - when "00011010" => - -- LD A,(DE) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aDE; - when 2 => - Read_To_Acc <= '1'; - when others => null; - end case; - when "00111010" => - if Mode = 3 then - -- LDD A,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - Read_To_Acc <= '1'; - IncDec_16 <= "1110"; - when others => null; - end case; - else - -- LD A,(nn) - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - when 4 => - Read_To_Acc <= '1'; - when others => null; - end case; - end if; - when "00000010" => - -- LD (BC),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - when others => null; - end case; - when "00010010" => - -- LD (DE),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aDE; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - when others => null; - end case; - when "00110010" => - if Mode = 3 then - -- LDD (HL),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - IncDec_16 <= "1110"; - when others => null; - end case; - else - -- LD (nn),A - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - Set_BusB_To <= "0111"; - when 4 => - Write <= '1'; - when others => null; - end case; - end if; - --- 16 BIT LOAD GROUP - when "00000001"|"00010001"|"00100001"|"00110001" => - -- LD dd,nn - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Read_To_Reg <= '1'; - if DPAIR = "11" then - Set_BusA_To(3 downto 0) <= "1000"; - else - Set_BusA_To(2 downto 1) <= DPAIR; - Set_BusA_To(0) <= '1'; - end if; - when 3 => - Inc_PC <= '1'; - Read_To_Reg <= '1'; - if DPAIR = "11" then - Set_BusA_To(3 downto 0) <= "1001"; - else - Set_BusA_To(2 downto 1) <= DPAIR; - Set_BusA_To(0) <= '0'; - end if; - when others => null; - end case; - when "00101010" => - if Mode = 3 then - -- LDI A,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - Read_To_Acc <= '1'; - IncDec_16 <= "0110"; - when others => null; - end case; - else - -- LD HL,(nn) - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - when 4 => - Set_BusA_To(2 downto 0) <= "101"; -- L - Read_To_Reg <= '1'; - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - when 5 => - Set_BusA_To(2 downto 0) <= "100"; -- H - Read_To_Reg <= '1'; - when others => null; - end case; - end if; - when "00100010" => - if Mode = 3 then - -- LDI (HL),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - IncDec_16 <= "0110"; - when others => null; - end case; - else - -- LD (nn),HL - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - Set_BusB_To <= "0101"; -- L - when 4 => - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - Write <= '1'; - Set_BusB_To <= "0100"; -- H - when 5 => - Write <= '1'; - when others => null; - end case; - end if; - when "11111001" => - -- LD SP,HL - TStates <= "110"; - LDSPHL <= '1'; - when "11000101"|"11010101"|"11100101"|"11110101" => - -- PUSH qq - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - IncDec_16 <= "1111"; - Set_Addr_TO <= aSP; - if DPAIR = "11" then - Set_BusB_To <= "0111"; - else - Set_BusB_To(2 downto 1) <= DPAIR; - Set_BusB_To(0) <= '0'; - Set_BusB_To(3) <= '0'; - end if; - when 2 => - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - if DPAIR = "11" then - Set_BusB_To <= "1011"; - else - Set_BusB_To(2 downto 1) <= DPAIR; - Set_BusB_To(0) <= '1'; - Set_BusB_To(3) <= '0'; - end if; - Write <= '1'; - when 3 => - Write <= '1'; - when others => null; - end case; - when "11000001"|"11010001"|"11100001"|"11110001" => - -- POP qq - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aSP; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - Read_To_Reg <= '1'; - if DPAIR = "11" then - Set_BusA_To(3 downto 0) <= "1011"; - else - Set_BusA_To(2 downto 1) <= DPAIR; - Set_BusA_To(0) <= '1'; - end if; - when 3 => - IncDec_16 <= "0111"; - Read_To_Reg <= '1'; - if DPAIR = "11" then - Set_BusA_To(3 downto 0) <= "0111"; - else - Set_BusA_To(2 downto 1) <= DPAIR; - Set_BusA_To(0) <= '0'; - end if; - when others => null; - end case; - --- EXCHANGE, BLOCK TRANSFER AND SEARCH GROUP - when "11101011" => - if Mode /= 3 then - -- EX DE,HL - ExchangeDH <= '1'; - end if; - when "00001000" => - if Mode = 3 then - -- LD (nn),SP - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - Set_BusB_To <= "1000"; - when 4 => - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - Write <= '1'; - Set_BusB_To <= "1001"; - when 5 => - Write <= '1'; - when others => null; - end case; - elsif Mode < 2 then - -- EX AF,AF' - ExchangeAF <= '1'; - end if; - when "11011001" => - if Mode = 3 then - -- RETI - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_TO <= aSP; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - LDZ <= '1'; - when 3 => - Jump <= '1'; - IncDec_16 <= "0111"; - I_RETN <= '1'; - SetEI <= '1'; - when others => null; - end case; - elsif Mode < 2 then - -- EXX - ExchangeRS <= '1'; - end if; - when "11100011" => - if Mode /= 3 then - -- EX (SP),HL - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aSP; - when 2 => - Read_To_Reg <= '1'; - Set_BusA_To <= "0101"; - Set_BusB_To <= "0101"; - Set_Addr_To <= aSP; - when 3 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - TStates <= "100"; - Write <= '1'; - when 4 => - Read_To_Reg <= '1'; - Set_BusA_To <= "0100"; - Set_BusB_To <= "0100"; - Set_Addr_To <= aSP; - when 5 => - IncDec_16 <= "1111"; - TStates <= "101"; - Write <= '1'; - when others => null; - end case; - end if; - --- 8 BIT ARITHMETIC AND LOGICAL GROUP - when "10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000111" - |"10001000"|"10001001"|"10001010"|"10001011"|"10001100"|"10001101"|"10001111" - |"10010000"|"10010001"|"10010010"|"10010011"|"10010100"|"10010101"|"10010111" - |"10011000"|"10011001"|"10011010"|"10011011"|"10011100"|"10011101"|"10011111" - |"10100000"|"10100001"|"10100010"|"10100011"|"10100100"|"10100101"|"10100111" - |"10101000"|"10101001"|"10101010"|"10101011"|"10101100"|"10101101"|"10101111" - |"10110000"|"10110001"|"10110010"|"10110011"|"10110100"|"10110101"|"10110111" - |"10111000"|"10111001"|"10111010"|"10111011"|"10111100"|"10111101"|"10111111" => - -- ADD A,r - -- ADC A,r - -- SUB A,r - -- SBC A,r - -- AND A,r - -- OR A,r - -- XOR A,r - -- CP A,r - Set_BusB_To(2 downto 0) <= SSS; - Set_BusA_To(2 downto 0) <= "111"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - when "10000110"|"10001110"|"10010110"|"10011110"|"10100110"|"10101110"|"10110110"|"10111110" => - -- ADD A,(HL) - -- ADC A,(HL) - -- SUB A,(HL) - -- SBC A,(HL) - -- AND A,(HL) - -- OR A,(HL) - -- XOR A,(HL) - -- CP A,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusA_To(2 downto 0) <= "111"; - when others => null; - end case; - when "11000110"|"11001110"|"11010110"|"11011110"|"11100110"|"11101110"|"11110110"|"11111110" => - -- ADD A,n - -- ADC A,n - -- SUB A,n - -- SBC A,n - -- AND A,n - -- OR A,n - -- XOR A,n - -- CP A,n - MCycles <= "010"; - if MCycle = "010" then - Inc_PC <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusA_To(2 downto 0) <= "111"; - end if; - when "00000100"|"00001100"|"00010100"|"00011100"|"00100100"|"00101100"|"00111100" => - -- INC r - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - PreserveC <= '1'; - ALU_Op <= "0000"; - when "00110100" => - -- INC (HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - TStates <= "100"; - Set_Addr_To <= aXY; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - PreserveC <= '1'; - ALU_Op <= "0000"; - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= DDD; - when 3 => - Write <= '1'; - when others => null; - end case; - when "00000101"|"00001101"|"00010101"|"00011101"|"00100101"|"00101101"|"00111101" => - -- DEC r - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - PreserveC <= '1'; - ALU_Op <= "0010"; - when "00110101" => - -- DEC (HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - TStates <= "100"; - Set_Addr_To <= aXY; - ALU_Op <= "0010"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - PreserveC <= '1'; - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= DDD; - when 3 => - Write <= '1'; - when others => null; - end case; - --- GENERAL PURPOSE ARITHMETIC AND CPU CONTROL GROUPS - when "00100111" => - -- DAA - Set_BusA_To(2 downto 0) <= "111"; - Read_To_Reg <= '1'; - ALU_Op <= "1100"; - Save_ALU <= '1'; - when "00101111" => - -- CPL - I_CPL <= '1'; - when "00111111" => - -- CCF - I_CCF <= '1'; - when "00110111" => - -- SCF - I_SCF <= '1'; - when "00000000" => - if NMICycle = '1' then - -- NMI - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1101"; - when 2 => - TStates <= "100"; - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 3 => - TStates <= "100"; - Write <= '1'; - when others => null; - end case; - elsif IntCycle = '1' then - -- INT (IM 2) - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 1 => - LDZ <= '1'; - TStates <= "101"; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1101"; - when 2 => - TStates <= "100"; - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 3 => - TStates <= "100"; - Write <= '1'; - when 4 => - Inc_PC <= '1'; - LDZ <= '1'; - when 5 => - Jump <= '1'; - when others => null; - end case; - else - -- NOP - end if; - when "01110110" => - -- HALT - Halt <= '1'; - when "11110011" => - -- DI - SetDI <= '1'; - when "11111011" => - -- EI - SetEI <= '1'; - --- 16 BIT ARITHMETIC GROUP - when "00001001"|"00011001"|"00101001"|"00111001" => - -- ADD HL,ss - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - NoRead <= '1'; - ALU_Op <= "0000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To(2 downto 0) <= "101"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '1'; - when others => - Set_BusB_To <= "1000"; - end case; - TStates <= "100"; - Arith16 <= '1'; - when 3 => - NoRead <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0001"; - Set_BusA_To(2 downto 0) <= "100"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - when others => - Set_BusB_To <= "1001"; - end case; - Arith16 <= '1'; - when others => - end case; - when "00000011"|"00010011"|"00100011"|"00110011" => - -- INC ss - TStates <= "110"; - IncDec_16(3 downto 2) <= "01"; - IncDec_16(1 downto 0) <= DPair; - when "00001011"|"00011011"|"00101011"|"00111011" => - -- DEC ss - TStates <= "110"; - IncDec_16(3 downto 2) <= "11"; - IncDec_16(1 downto 0) <= DPair; - --- ROTATE AND SHIFT GROUP - when "00000111" - -- RLCA - |"00010111" - -- RLA - |"00001111" - -- RRCA - |"00011111" => - -- RRA - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "1000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - --- JUMP GROUP - when "11000011" => - -- JP nn - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Inc_PC <= '1'; - Jump <= '1'; - when others => null; - end case; - when "11000010"|"11001010"|"11010010"|"11011010"|"11100010"|"11101010"|"11110010"|"11111010" => - if IR(5) = '1' and Mode = 3 then - case IRB(4 downto 3) is - when "00" => - -- LD ($FF00+C),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - IORQ <= '1'; - when others => - end case; - when "01" => - -- LD (nn),A - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - Set_BusB_To <= "0111"; - when 4 => - Write <= '1'; - when others => null; - end case; - when "10" => - -- LD A,($FF00+C) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - when 2 => - Read_To_Acc <= '1'; - IORQ <= '1'; - when others => - end case; - when "11" => - -- LD A,(nn) - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - when 4 => - Read_To_Acc <= '1'; - when others => null; - end case; - end case; - else - -- JP cc,nn - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Inc_PC <= '1'; - if is_cc_true(F, to_bitvector(IR(5 downto 3))) then - Jump <= '1'; - end if; - when others => null; - end case; - end if; - when "00011000" => - if Mode /= 2 then - -- JR e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "00111000" => - if Mode /= 2 then - -- JR C,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - if F(Flag_C) = '0' then - MCycles <= "010"; - end if; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "00110000" => - if Mode /= 2 then - -- JR NC,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - if F(Flag_C) = '1' then - MCycles <= "010"; - end if; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "00101000" => - if Mode /= 2 then - -- JR Z,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - if F(Flag_Z) = '0' then - MCycles <= "010"; - end if; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "00100000" => - if Mode /= 2 then - -- JR NZ,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - if F(Flag_Z) = '1' then - MCycles <= "010"; - end if; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "11101001" => - -- JP (HL) - JumpXY <= '1'; - when "00010000" => - if Mode = 3 then - I_DJNZ <= '1'; - elsif Mode < 2 then - -- DJNZ,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - I_DJNZ <= '1'; - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= "000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0010"; - when 2 => - I_DJNZ <= '1'; - Inc_PC <= '1'; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - --- CALL AND RETURN GROUP - when "11001101" => - -- CALL nn - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - IncDec_16 <= "1111"; - Inc_PC <= '1'; - TStates <= "100"; - Set_Addr_To <= aSP; - LDW <= '1'; - Set_BusB_To <= "1101"; - when 4 => - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 5 => - Write <= '1'; - Call <= '1'; - when others => null; - end case; - when "11000100"|"11001100"|"11010100"|"11011100"|"11100100"|"11101100"|"11110100"|"11111100" => - if IR(5) = '0' or Mode /= 3 then - -- CALL cc,nn - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Inc_PC <= '1'; - LDW <= '1'; - if is_cc_true(F, to_bitvector(IR(5 downto 3))) then - IncDec_16 <= "1111"; - Set_Addr_TO <= aSP; - TStates <= "100"; - Set_BusB_To <= "1101"; - else - MCycles <= "011"; - end if; - when 4 => - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 5 => - Write <= '1'; - Call <= '1'; - when others => null; - end case; - end if; - when "11001001" => - -- RET - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_TO <= aSP; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - LDZ <= '1'; - when 3 => - Jump <= '1'; - IncDec_16 <= "0111"; - when others => null; - end case; - when "11000000"|"11001000"|"11010000"|"11011000"|"11100000"|"11101000"|"11110000"|"11111000" => - if IR(5) = '1' and Mode = 3 then - case IRB(4 downto 3) is - when "00" => - -- LD ($FF00+nn),A - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aIOA; - Set_BusB_To <= "0111"; - when 3 => - Write <= '1'; - when others => null; - end case; - when "01" => - -- ADD SP,n - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - ALU_Op <= "0000"; - Inc_PC <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To <= "1000"; - Set_BusB_To <= "0110"; - when 3 => - NoRead <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0001"; - Set_BusA_To <= "1001"; - Set_BusB_To <= "1110"; -- Incorrect unsigned !!!!!!!!!!!!!!!!!!!!! - when others => - end case; - when "10" => - -- LD A,($FF00+nn) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aIOA; - when 3 => - Read_To_Acc <= '1'; - when others => null; - end case; - when "11" => - -- LD HL,SP+n -- Not correct !!!!!!!!!!!!!!!!!!! - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - when 4 => - Set_BusA_To(2 downto 0) <= "101"; -- L - Read_To_Reg <= '1'; - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - when 5 => - Set_BusA_To(2 downto 0) <= "100"; -- H - Read_To_Reg <= '1'; - when others => null; - end case; - end case; - else - -- RET cc - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - if is_cc_true(F, to_bitvector(IR(5 downto 3))) then - Set_Addr_TO <= aSP; - else - MCycles <= "001"; - end if; - TStates <= "101"; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - LDZ <= '1'; - when 3 => - Jump <= '1'; - IncDec_16 <= "0111"; - when others => null; - end case; - end if; - when "11000111"|"11001111"|"11010111"|"11011111"|"11100111"|"11101111"|"11110111"|"11111111" => - -- RST p - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1101"; - when 2 => - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 3 => - Write <= '1'; - RstP <= '1'; - when others => null; - end case; - --- INPUT AND OUTPUT GROUP - when "11011011" => - if Mode /= 3 then - -- IN A,(n) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aIOA; - when 3 => - Read_To_Acc <= '1'; - IORQ <= '1'; - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - when others => null; - end case; - end if; - when "11010011" => - if Mode /= 3 then - -- OUT (n),A - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aIOA; - Set_BusB_To <= "0111"; - when 3 => - Write <= '1'; - IORQ <= '1'; - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - when others => null; - end case; - end if; - ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- --- MULTIBYTE INSTRUCTIONS ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- - - when "11001011" => - if Mode /= 2 then - Prefix <= "01"; - end if; - - when "11101101" => - if Mode < 2 then - Prefix <= "10"; - end if; - - when "11011101"|"11111101" => - if Mode < 2 then - Prefix <= "11"; - end if; - - end case; - - when "01" => - ------------------------------------------------------------------------------- --- --- CB prefixed instructions --- ------------------------------------------------------------------------------- - - Set_BusA_To(2 downto 0) <= IR(2 downto 0); - Set_BusB_To(2 downto 0) <= IR(2 downto 0); - - case IRB is - when "00000000"|"00000001"|"00000010"|"00000011"|"00000100"|"00000101"|"00000111" - |"00010000"|"00010001"|"00010010"|"00010011"|"00010100"|"00010101"|"00010111" - |"00001000"|"00001001"|"00001010"|"00001011"|"00001100"|"00001101"|"00001111" - |"00011000"|"00011001"|"00011010"|"00011011"|"00011100"|"00011101"|"00011111" - |"00100000"|"00100001"|"00100010"|"00100011"|"00100100"|"00100101"|"00100111" - |"00101000"|"00101001"|"00101010"|"00101011"|"00101100"|"00101101"|"00101111" - |"00110000"|"00110001"|"00110010"|"00110011"|"00110100"|"00110101"|"00110111" - |"00111000"|"00111001"|"00111010"|"00111011"|"00111100"|"00111101"|"00111111" => - -- RLC r - -- RL r - -- RRC r - -- RR r - -- SLA r - -- SRA r - -- SRL r - -- SLL r (Undocumented) / SWAP r - if XY_State="00" then - if MCycle = "001" then - ALU_Op <= "1000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - end if; - else - -- R/S (IX+d),Reg, undocumented - MCycles <= "011"; - XYbit_undoc <= '1'; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - end if; - when "00000110"|"00010110"|"00001110"|"00011110"|"00101110"|"00111110"|"00100110"|"00110110" => - -- RLC (HL) - -- RL (HL) - -- RRC (HL) - -- RR (HL) - -- SRA (HL) - -- SRL (HL) - -- SLA (HL) - -- SLL (HL) (Undocumented) / SWAP (HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 | 7 => - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => - end case; - when "01000000"|"01000001"|"01000010"|"01000011"|"01000100"|"01000101"|"01000111" - |"01001000"|"01001001"|"01001010"|"01001011"|"01001100"|"01001101"|"01001111" - |"01010000"|"01010001"|"01010010"|"01010011"|"01010100"|"01010101"|"01010111" - |"01011000"|"01011001"|"01011010"|"01011011"|"01011100"|"01011101"|"01011111" - |"01100000"|"01100001"|"01100010"|"01100011"|"01100100"|"01100101"|"01100111" - |"01101000"|"01101001"|"01101010"|"01101011"|"01101100"|"01101101"|"01101111" - |"01110000"|"01110001"|"01110010"|"01110011"|"01110100"|"01110101"|"01110111" - |"01111000"|"01111001"|"01111010"|"01111011"|"01111100"|"01111101"|"01111111" => - -- BIT b,r - if XY_State="00" then - if MCycle = "001" then - Set_BusB_To(2 downto 0) <= IR(2 downto 0); - ALU_Op <= "1001"; - end if; - else - -- BIT b,(IX+d), undocumented - MCycles <= "010"; - XYbit_undoc <= '1'; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1001"; - TStates <= "100"; - when others => null; - end case; - end if; - when "01000110"|"01001110"|"01010110"|"01011110"|"01100110"|"01101110"|"01110110"|"01111110" => - -- BIT b,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1001"; - TStates <= "100"; - when others => null; - end case; - when "11000000"|"11000001"|"11000010"|"11000011"|"11000100"|"11000101"|"11000111" - |"11001000"|"11001001"|"11001010"|"11001011"|"11001100"|"11001101"|"11001111" - |"11010000"|"11010001"|"11010010"|"11010011"|"11010100"|"11010101"|"11010111" - |"11011000"|"11011001"|"11011010"|"11011011"|"11011100"|"11011101"|"11011111" - |"11100000"|"11100001"|"11100010"|"11100011"|"11100100"|"11100101"|"11100111" - |"11101000"|"11101001"|"11101010"|"11101011"|"11101100"|"11101101"|"11101111" - |"11110000"|"11110001"|"11110010"|"11110011"|"11110100"|"11110101"|"11110111" - |"11111000"|"11111001"|"11111010"|"11111011"|"11111100"|"11111101"|"11111111" => - -- SET b,r - if XY_State="00" then - if MCycle = "001" then - ALU_Op <= "1010"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - end if; - else - -- SET b,(IX+d),Reg, undocumented - MCycles <= "011"; - XYbit_undoc <= '1'; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1010"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - end if; - when "11000110"|"11001110"|"11010110"|"11011110"|"11100110"|"11101110"|"11110110"|"11111110" => - -- SET b,(HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1010"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - when "10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000111" - |"10001000"|"10001001"|"10001010"|"10001011"|"10001100"|"10001101"|"10001111" - |"10010000"|"10010001"|"10010010"|"10010011"|"10010100"|"10010101"|"10010111" - |"10011000"|"10011001"|"10011010"|"10011011"|"10011100"|"10011101"|"10011111" - |"10100000"|"10100001"|"10100010"|"10100011"|"10100100"|"10100101"|"10100111" - |"10101000"|"10101001"|"10101010"|"10101011"|"10101100"|"10101101"|"10101111" - |"10110000"|"10110001"|"10110010"|"10110011"|"10110100"|"10110101"|"10110111" - |"10111000"|"10111001"|"10111010"|"10111011"|"10111100"|"10111101"|"10111111" => - -- RES b,r - if XY_State="00" then - if MCycle = "001" then - ALU_Op <= "1011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - end if; - else - -- RES b,(IX+d),Reg, undocumented - MCycles <= "011"; - XYbit_undoc <= '1'; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - end if; - - when "10000110"|"10001110"|"10010110"|"10011110"|"10100110"|"10101110"|"10110110"|"10111110" => - -- RES b,(HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 | 7 => - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - end case; - - when others => - ------------------------------------------------------------------------------- --- --- ED prefixed instructions --- ------------------------------------------------------------------------------- - - case IRB is - when "00000000"|"00000001"|"00000010"|"00000011"|"00000100"|"00000101"|"00000110"|"00000111" - |"00001000"|"00001001"|"00001010"|"00001011"|"00001100"|"00001101"|"00001110"|"00001111" - |"00010000"|"00010001"|"00010010"|"00010011"|"00010100"|"00010101"|"00010110"|"00010111" - |"00011000"|"00011001"|"00011010"|"00011011"|"00011100"|"00011101"|"00011110"|"00011111" - |"00100000"|"00100001"|"00100010"|"00100011"|"00100100"|"00100101"|"00100110"|"00100111" - |"00101000"|"00101001"|"00101010"|"00101011"|"00101100"|"00101101"|"00101110"|"00101111" - |"00110000"|"00110001"|"00110010"|"00110011"|"00110100"|"00110101"|"00110110"|"00110111" - |"00111000"|"00111001"|"00111010"|"00111011"|"00111100"|"00111101"|"00111110"|"00111111" - - - |"10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000110"|"10000111" - |"10001000"|"10001001"|"10001010"|"10001011"|"10001100"|"10001101"|"10001110"|"10001111" - |"10010000"|"10010001"|"10010010"|"10010011"|"10010100"|"10010101"|"10010110"|"10010111" - |"10011000"|"10011001"|"10011010"|"10011011"|"10011100"|"10011101"|"10011110"|"10011111" - | "10100100"|"10100101"|"10100110"|"10100111" - | "10101100"|"10101101"|"10101110"|"10101111" - | "10110100"|"10110101"|"10110110"|"10110111" - | "10111100"|"10111101"|"10111110"|"10111111" - |"11000000"|"11000001"|"11000010"|"11000011"|"11000100"|"11000101"|"11000110"|"11000111" - |"11001000"|"11001001"|"11001010"|"11001011"|"11001100"|"11001101"|"11001110"|"11001111" - |"11010000"|"11010001"|"11010010"|"11010011"|"11010100"|"11010101"|"11010110"|"11010111" - |"11011000"|"11011001"|"11011010"|"11011011"|"11011100"|"11011101"|"11011110"|"11011111" - |"11100000"|"11100001"|"11100010"|"11100011"|"11100100"|"11100101"|"11100110"|"11100111" - |"11101000"|"11101001"|"11101010"|"11101011"|"11101100"|"11101101"|"11101110"|"11101111" - |"11110000"|"11110001"|"11110010"|"11110011"|"11110100"|"11110101"|"11110110"|"11110111" - |"11111000"|"11111001"|"11111010"|"11111011"|"11111100"|"11111101"|"11111110"|"11111111" => - null; -- NOP, undocumented - when "01111110"|"01111111" => - -- NOP, undocumented - null; --- 8 BIT LOAD GROUP - when "01010111" => - -- LD A,I - Special_LD <= "100"; - TStates <= "101"; - when "01011111" => - -- LD A,R - Special_LD <= "101"; - TStates <= "101"; - when "01000111" => - -- LD I,A - Special_LD <= "110"; - TStates <= "101"; - when "01001111" => - -- LD R,A - Special_LD <= "111"; - TStates <= "101"; --- 16 BIT LOAD GROUP - when "01001011"|"01011011"|"01101011"|"01111011" => - -- LD dd,(nn) - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - when 4 => - Read_To_Reg <= '1'; - if IR(5 downto 4) = "11" then - Set_BusA_To <= "1000"; - else - Set_BusA_To(2 downto 1) <= IR(5 downto 4); - Set_BusA_To(0) <= '1'; - end if; - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - when 5 => - Read_To_Reg <= '1'; - if IR(5 downto 4) = "11" then - Set_BusA_To <= "1001"; - else - Set_BusA_To(2 downto 1) <= IR(5 downto 4); - Set_BusA_To(0) <= '0'; - end if; - when others => null; - end case; - when "01000011"|"01010011"|"01100011"|"01110011" => - -- LD (nn),dd - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - if IR(5 downto 4) = "11" then - Set_BusB_To <= "1000"; - else - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '1'; - Set_BusB_To(3) <= '0'; - end if; - when 4 => - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - Write <= '1'; - if IR(5 downto 4) = "11" then - Set_BusB_To <= "1001"; - else - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '0'; - Set_BusB_To(3) <= '0'; - end if; - when 5 => - Write <= '1'; - when others => null; - end case; - when "10100000" | "10101000" | "10110000" | "10111000" => - -- LDI, LDD, LDIR, LDDR - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - IncDec_16 <= "1100"; -- BC - when 2 => - Set_BusB_To <= "0110"; - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "0000"; - Set_Addr_To <= aDE; - if IR(3) = '0' then - IncDec_16 <= "0110"; -- IX - else - IncDec_16 <= "1110"; - end if; - when 3 => - I_BT <= '1'; - TStates <= "101"; - Write <= '1'; - if IR(3) = '0' then - IncDec_16 <= "0101"; -- DE - else - IncDec_16 <= "1101"; - end if; - when 4 => - NoRead <= '1'; - TStates <= "101"; - when others => null; - end case; - when "10100001" | "10101001" | "10110001" | "10111001" => - -- CPI, CPD, CPIR, CPDR - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - IncDec_16 <= "1100"; -- BC - when 2 => - Set_BusB_To <= "0110"; - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "0111"; - Save_ALU <= '1'; - PreserveC <= '1'; - if IR(3) = '0' then - IncDec_16 <= "0110"; - else - IncDec_16 <= "1110"; - end if; - when 3 => - NoRead <= '1'; - I_BC <= '1'; - TStates <= "101"; - when 4 => - NoRead <= '1'; - TStates <= "101"; - when others => null; - end case; - when "01000100"|"01001100"|"01010100"|"01011100"|"01100100"|"01101100"|"01110100"|"01111100" => - -- NEG - Alu_OP <= "0010"; - Set_BusB_To <= "0111"; - Set_BusA_To <= "1010"; - Read_To_Acc <= '1'; - Save_ALU <= '1'; - when "01000110"|"01001110"|"01100110"|"01101110" => - -- IM 0 - IMode <= "00"; - when "01010110"|"01110110" => - -- IM 1 - IMode <= "01"; - when "01011110"|"01110111" => - -- IM 2 - IMode <= "10"; --- 16 bit arithmetic - when "01001010"|"01011010"|"01101010"|"01111010" => - -- ADC HL,ss - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - NoRead <= '1'; - ALU_Op <= "0001"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To(2 downto 0) <= "101"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '1'; - when others => - Set_BusB_To <= "1000"; - end case; - TStates <= "100"; - when 3 => - NoRead <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0001"; - Set_BusA_To(2 downto 0) <= "100"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '0'; - when others => - Set_BusB_To <= "1001"; - end case; - when others => - end case; - when "01000010"|"01010010"|"01100010"|"01110010" => - -- SBC HL,ss - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - NoRead <= '1'; - ALU_Op <= "0011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To(2 downto 0) <= "101"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '1'; - when others => - Set_BusB_To <= "1000"; - end case; - TStates <= "100"; - when 3 => - NoRead <= '1'; - ALU_Op <= "0011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To(2 downto 0) <= "100"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - when others => - Set_BusB_To <= "1001"; - end case; - when others => - end case; - when "01101111" => - -- RLD - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - NoRead <= '1'; - Set_Addr_To <= aXY; - when 3 => - Read_To_Reg <= '1'; - Set_BusB_To(2 downto 0) <= "110"; - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "1101"; - TStates <= "100"; - Set_Addr_To <= aXY; - Save_ALU <= '1'; - when 4 => - I_RLD <= '1'; - Write <= '1'; - when others => - end case; - when "01100111" => - -- RRD - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Set_Addr_To <= aXY; - when 3 => - Read_To_Reg <= '1'; - Set_BusB_To(2 downto 0) <= "110"; - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "1110"; - TStates <= "100"; - Set_Addr_To <= aXY; - Save_ALU <= '1'; - when 4 => - I_RRD <= '1'; - Write <= '1'; - when others => - end case; - when "01000101"|"01001101"|"01010101"|"01011101"|"01100101"|"01101101"|"01110101"|"01111101" => - -- RETI, RETN - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_TO <= aSP; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - LDZ <= '1'; - when 3 => - Jump <= '1'; - IncDec_16 <= "0111"; - I_RETN <= '1'; - when others => null; - end case; - when "01000000"|"01001000"|"01010000"|"01011000"|"01100000"|"01101000"|"01110000"|"01111000" => - -- IN r,(C) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - when 2 => - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - IORQ <= '1'; - if IR(5 downto 3) /= "110" then - Read_To_Reg <= '1'; - Set_BusA_To(2 downto 0) <= IR(5 downto 3); - end if; - I_INRC <= '1'; - when others => - end case; - when "01000001"|"01001001"|"01010001"|"01011001"|"01100001"|"01101001"|"01110001"|"01111001" => - -- OUT (C),r - -- OUT (C),0 - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - Set_BusB_To(2 downto 0) <= IR(5 downto 3); - if IR(5 downto 3) = "110" then - Set_BusB_To(3) <= '1'; - end if; - when 2 => - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - Write <= '1'; - IORQ <= '1'; - when others => - end case; - when "10100010" | "10101010" | "10110010" | "10111010" => - -- INI, IND, INIR, INDR - -- note B is decremented AFTER being put on the bus - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - Set_BusB_To <= "1010"; - Set_BusA_To <= "0000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0010"; - when 2 => - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - IORQ <= '1'; - Set_BusB_To <= "0110"; - Set_Addr_To <= aXY; - when 3 => - if IR(3) = '0' then - --IncDec_16 <= "0010"; - IncDec_16 <= "0110"; - else - --IncDec_16 <= "1010"; - IncDec_16 <= "1110"; - end if; - TStates <= "100"; - Write <= '1'; - I_BTR <= '1'; - when 4 => - NoRead <= '1'; - TStates <= "101"; - when others => null; - end case; - when "10100011" | "10101011" | "10110011" | "10111011" => - -- OUTI, OUTD, OTIR, OTDR - -- note B is decremented BEFORE being put on the bus. - -- mikej fix for hl inc - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - Set_Addr_To <= aXY; - Set_BusB_To <= "1010"; - Set_BusA_To <= "0000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0010"; - when 2 => - Set_BusB_To <= "0110"; - Set_Addr_To <= aBC; - when 3 => - if IR(3) = '0' then - IncDec_16 <= "0110"; -- mikej - else - IncDec_16 <= "1110"; -- mikej - end if; - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - IORQ <= '1'; - Write <= '1'; - I_BTR <= '1'; - when 4 => - NoRead <= '1'; - TStates <= "101"; - when others => null; - end case; - end case; - - end case; - - if Mode = 1 then - if MCycle = "001" then --- TStates <= "100"; - else - TStates <= "011"; - end if; - end if; - - if Mode = 3 then - if MCycle = "001" then --- TStates <= "100"; - else - TStates <= "100"; - end if; - end if; - - if Mode < 2 then - if MCycle = "110" then - Inc_PC <= '1'; - if Mode = 1 then - Set_Addr_To <= aXY; - TStates <= "100"; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusB_To(3) <= '0'; - end if; - if IRB = "00110110" or IRB = "11001011" then - Set_Addr_To <= aNone; - end if; - end if; - if MCycle = "111" then - if Mode = 0 then - TStates <= "101"; - end if; - if ISet /= "01" then - Set_Addr_To <= aXY; - end if; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusB_To(3) <= '0'; - if IRB = "00110110" or ISet = "01" then - -- LD (HL),n - Inc_PC <= '1'; - else - NoRead <= '1'; - end if; - end if; - end if; - - end process; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_Pack.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_Pack.vhd deleted file mode 100644 index 679730ab..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_Pack.vhd +++ /dev/null @@ -1,220 +0,0 @@ --- **** --- T80(b) core. In an effort to merge and maintain bug fixes .... --- --- --- Ver 303 add undocumented DDCB and FDCB opcodes by TobiFlex 20.04.2010 --- Ver 300 started tidyup --- MikeJ March 2005 --- Latest version from www.fpgaarcade.com (original www.opencores.org) --- --- **** --- --- Z80 compatible microprocessor core --- --- Version : 0242 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- - -library IEEE; -use IEEE.std_logic_1164.all; - -package T80_Pack is - - component T80 - generic( - Mode : integer := 0; -- 0 => Z80, 1 => Fast Z80, 2 => 8080, 3 => GB - IOWait : integer := 0; -- 1 => Single cycle I/O, 1 => Std I/O cycle - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - RESET_n : in std_logic; - CLK_n : in std_logic; - CEN : in std_logic; - WAIT_n : in std_logic; - INT_n : in std_logic; - NMI_n : in std_logic; - BUSRQ_n : in std_logic; - M1_n : out std_logic; - IORQ : out std_logic; - NoRead : out std_logic; - Write : out std_logic; - RFSH_n : out std_logic; - HALT_n : out std_logic; - BUSAK_n : out std_logic; - A : out std_logic_vector(15 downto 0); - DInst : in std_logic_vector(7 downto 0); - DI : in std_logic_vector(7 downto 0); - DO : out std_logic_vector(7 downto 0); - MC : out std_logic_vector(2 downto 0); - TS : out std_logic_vector(2 downto 0); - IntCycle_n : out std_logic; - IntE : out std_logic; - Stop : out std_logic - ); - end component; - - component T80_Reg - port( - Clk : in std_logic; - CEN : in std_logic; - WEH : in std_logic; - WEL : in std_logic; - AddrA : in std_logic_vector(2 downto 0); - AddrB : in std_logic_vector(2 downto 0); - AddrC : in std_logic_vector(2 downto 0); - DIH : in std_logic_vector(7 downto 0); - DIL : in std_logic_vector(7 downto 0); - DOAH : out std_logic_vector(7 downto 0); - DOAL : out std_logic_vector(7 downto 0); - DOBH : out std_logic_vector(7 downto 0); - DOBL : out std_logic_vector(7 downto 0); - DOCH : out std_logic_vector(7 downto 0); - DOCL : out std_logic_vector(7 downto 0) - ); - end component; - - component T80_MCode - generic( - Mode : integer := 0; - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - IR : in std_logic_vector(7 downto 0); - ISet : in std_logic_vector(1 downto 0); - MCycle : in std_logic_vector(2 downto 0); - F : in std_logic_vector(7 downto 0); - NMICycle : in std_logic; - IntCycle : in std_logic; - XY_State : in std_logic_vector(1 downto 0); - MCycles : out std_logic_vector(2 downto 0); - TStates : out std_logic_vector(2 downto 0); - Prefix : out std_logic_vector(1 downto 0); -- None,BC,ED,DD/FD - Inc_PC : out std_logic; - Inc_WZ : out std_logic; - IncDec_16 : out std_logic_vector(3 downto 0); -- BC,DE,HL,SP 0 is inc - Read_To_Reg : out std_logic; - Read_To_Acc : out std_logic; - Set_BusA_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI/DB,A,SP(L),SP(M),0,F - Set_BusB_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI,A,SP(L),SP(M),1,F,PC(L),PC(M),0 - ALU_Op : out std_logic_vector(3 downto 0); - -- ADD, ADC, SUB, SBC, AND, XOR, OR, CP, ROT, BIT, SET, RES, DAA, RLD, RRD, None - Save_ALU : out std_logic; - PreserveC : out std_logic; - Arith16 : out std_logic; - Set_Addr_To : out std_logic_vector(2 downto 0); -- aNone,aXY,aIOA,aSP,aBC,aDE,aZI - IORQ : out std_logic; - Jump : out std_logic; - JumpE : out std_logic; - JumpXY : out std_logic; - Call : out std_logic; - RstP : out std_logic; - LDZ : out std_logic; - LDW : out std_logic; - LDSPHL : out std_logic; - Special_LD : out std_logic_vector(2 downto 0); -- A,I;A,R;I,A;R,A;None - ExchangeDH : out std_logic; - ExchangeRp : out std_logic; - ExchangeAF : out std_logic; - ExchangeRS : out std_logic; - I_DJNZ : out std_logic; - I_CPL : out std_logic; - I_CCF : out std_logic; - I_SCF : out std_logic; - I_RETN : out std_logic; - I_BT : out std_logic; - I_BC : out std_logic; - I_BTR : out std_logic; - I_RLD : out std_logic; - I_RRD : out std_logic; - I_INRC : out std_logic; - SetDI : out std_logic; - SetEI : out std_logic; - IMode : out std_logic_vector(1 downto 0); - Halt : out std_logic; - NoRead : out std_logic; - Write : out std_logic; - XYbit_undoc : out std_logic - ); - end component; - - component T80_ALU - generic( - Mode : integer := 0; - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - Arith16 : in std_logic; - Z16 : in std_logic; - ALU_Op : in std_logic_vector(3 downto 0); - IR : in std_logic_vector(5 downto 0); - ISet : in std_logic_vector(1 downto 0); - BusA : in std_logic_vector(7 downto 0); - BusB : in std_logic_vector(7 downto 0); - F_In : in std_logic_vector(7 downto 0); - Q : out std_logic_vector(7 downto 0); - F_Out : out std_logic_vector(7 downto 0) - ); - end component; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_Reg.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_Reg.vhd deleted file mode 100644 index 828485fb..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80_Reg.vhd +++ /dev/null @@ -1,105 +0,0 @@ --- --- T80 Registers, technology independent --- --- Version : 0244 --- --- Copyright (c) 2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t51/ --- --- Limitations : --- --- File history : --- --- 0242 : Initial release --- --- 0244 : Changed to single register file --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; - -entity T80_Reg is - port( - Clk : in std_logic; - CEN : in std_logic; - WEH : in std_logic; - WEL : in std_logic; - AddrA : in std_logic_vector(2 downto 0); - AddrB : in std_logic_vector(2 downto 0); - AddrC : in std_logic_vector(2 downto 0); - DIH : in std_logic_vector(7 downto 0); - DIL : in std_logic_vector(7 downto 0); - DOAH : out std_logic_vector(7 downto 0); - DOAL : out std_logic_vector(7 downto 0); - DOBH : out std_logic_vector(7 downto 0); - DOBL : out std_logic_vector(7 downto 0); - DOCH : out std_logic_vector(7 downto 0); - DOCL : out std_logic_vector(7 downto 0) - ); -end T80_Reg; - -architecture rtl of T80_Reg is - - type Register_Image is array (natural range <>) of std_logic_vector(7 downto 0); - signal RegsH : Register_Image(0 to 7); - signal RegsL : Register_Image(0 to 7); - -begin - - process (Clk) - begin - if Clk'event and Clk = '1' then - if CEN = '1' then - if WEH = '1' then - RegsH(to_integer(unsigned(AddrA))) <= DIH; - end if; - if WEL = '1' then - RegsL(to_integer(unsigned(AddrA))) <= DIL; - end if; - end if; - end if; - end process; - - DOAH <= RegsH(to_integer(unsigned(AddrA))); - DOAL <= RegsL(to_integer(unsigned(AddrA))); - DOBH <= RegsH(to_integer(unsigned(AddrB))); - DOBL <= RegsL(to_integer(unsigned(AddrB))); - DOCH <= RegsH(to_integer(unsigned(AddrC))); - DOCL <= RegsL(to_integer(unsigned(AddrC))); - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80as.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80as.vhd deleted file mode 100644 index fe477f50..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/cpu/T80as.vhd +++ /dev/null @@ -1,283 +0,0 @@ ------------------------------------------------------------------------------- --- t80as.vhd : The non-tristate signal edition of t80a.vhd --- --- 2003.2.7 non-tristate modification by Tatsuyuki Satoh --- --- 1.separate 'D' to 'DO' and 'DI'. --- 2.added 'DOE' to 'DO' enable signal.(data direction) --- 3.MREQ_n,IORQ_n,RD_n,WR_n,RFSH_n,A doesn't become the condition of 'Z'. --- --- There is a mark of "--AS" in all the change points. --- ------------------------------------------------------------------------------- - --- --- Z80 compatible microprocessor core, asynchronous top level --- --- Version : 0247 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- --- 0208 : First complete release --- --- 0211 : Fixed interrupt cycle --- --- 0235 : Updated for T80 interface change --- --- 0238 : Updated for T80 interface change --- --- 0240 : Updated for T80 interface change --- --- 0242 : Updated for T80 interface change --- --- 0247 : Fixed bus req/ack cycle --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use work.T80_Pack.all; - -entity T80as is - generic( - Mode : integer := 0 -- 0 => Z80, 1 => Fast Z80, 2 => 8080, 3 => GB - ); - port( - RESET_n : in std_logic; - CLK_n : in std_logic; - WAIT_n : in std_logic; - INT_n : in std_logic; - NMI_n : in std_logic; - BUSRQ_n : in std_logic; - M1_n : out std_logic; - MREQ_n : out std_logic; - IORQ_n : out std_logic; - RD_n : out std_logic; - WR_n : out std_logic; - RFSH_n : out std_logic; - HALT_n : out std_logic; - BUSAK_n : out std_logic; - A : out std_logic_vector(15 downto 0); ---AS-- D : inout std_logic_vector(7 downto 0) ---AS>> - DI : in std_logic_vector(7 downto 0); - DO : out std_logic_vector(7 downto 0); - DOE : out std_logic ---< 'Z'); ---AS-- D <= DO when Write = '1' and BUSAK_n_i = '1' else (others => 'Z'); ---AS>> - MREQ_n <= MREQ_n_i; - IORQ_n <= IORQ_n_i; - RD_n <= RD_n_i; - WR_n <= WR_n_i; - RFSH_n <= RFSH_n_i; - A <= A_i; - DOE <= Write when BUSAK_n_i = '1' else '0'; ---< Mode, - IOWait => 1) - port map( - CEN => CEN, - M1_n => M1_n, - IORQ => IORQ, - NoRead => NoRead, - Write => Write, - RFSH_n => RFSH_n_i, - HALT_n => HALT_n, - WAIT_n => Wait_s, - INT_n => INT_n, - NMI_n => NMI_n, - RESET_n => Reset_s, - BUSRQ_n => BUSRQ_n, - BUSAK_n => BUSAK_n_i, - CLK_n => CLK_n, - A => A_i, --- DInst => D, - DInst => DI, - DI => DI_Reg, - DO => DO, - MC => MCycle, - TS => TState, - IntCycle_n => IntCycle_n); - - process (CLK_n) - begin - if CLK_n'event and CLK_n = '0' then - Wait_s <= WAIT_n; - if TState = "011" and BUSAK_n_i = '1' then ---AS-- DI_Reg <= to_x01(D); ---AS>> - DI_Reg <= to_x01(DI); ---< 0, - IOWait => 1) - port map( - CEN => CLKEN, - M1_n => M1_n, - IORQ => IORQ, - NoRead => NoRead, - Write => Write, - RFSH_n => RFSH_n, - HALT_n => HALT_n, - WAIT_n => Wait_n, - INT_n => INT_n, - NMI_n => NMI_n, - RESET_n => RESET_n, - BUSRQ_n => BUSRQ_n, - BUSAK_n => BUSAK_n, - CLK_n => CLK_n, - A => A, - DInst => DI, - DI => DI_Reg, - DO => DO, - MC => MCycle, - TS => TState, - IntCycle_n => IntCycle_n); - - process (RESET_n, CLK_n) - begin - if RESET_n = '0' then - RD_n <= '1'; - WR_n <= '1'; - IORQ_n <= '1'; - MREQ_n <= '1'; - DI_Reg <= "00000000"; - elsif CLK_n'event and CLK_n = '1' then - if CLKEN = '1' then - RD_n <= '1'; - WR_n <= '1'; - IORQ_n <= '1'; - MREQ_n <= '1'; - if MCycle = "001" then - if TState = "001" or (TState = "010" and Wait_n = '0') then - RD_n <= not IntCycle_n; - MREQ_n <= not IntCycle_n; - IORQ_n <= IntCycle_n; - end if; - if TState = "011" then - MREQ_n <= '0'; - end if; - else - if (TState = "001" or TState = "010") and NoRead = '0' and Write = '0' then - RD_n <= '0'; - IORQ_n <= not IORQ; - MREQ_n <= IORQ; - end if; - if ((TState = "001") or (TState = "010")) and Write = '1' then - WR_n <= '0'; - IORQ_n <= not IORQ; - MREQ_n <= IORQ; - end if; - end if; - if TState = "010" and Wait_n = '1' then - DI_Reg <= DI; - end if; - end if; - end if; - end process; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/dac.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/dac.vhd deleted file mode 100644 index b1ecdcb7..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/dac.vhd +++ /dev/null @@ -1,71 +0,0 @@ -------------------------------------------------------------------------------- --- --- Delta-Sigma DAC --- --- $Id: dac.vhd,v 1.1 2005/10/25 21:09:42 arnim Exp $ --- --- Refer to Xilinx Application Note XAPP154. --- --- This DAC requires an external RC low-pass filter: --- --- dac_o 0---XXXXX---+---0 analog audio --- 3k3 | --- === 4n7 --- | --- GND --- -------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; - -entity dac is - - generic ( - msbi_g : integer := 11 - ); - port ( - clk_i : in std_logic; - res_n_i : in std_logic; - dac_i : in std_logic_vector(msbi_g downto 0); - dac_o : out std_logic - ); - -end dac; - -library ieee; -use ieee.numeric_std.all; - -architecture rtl of dac is - - signal DACout_q : std_logic; - signal DeltaAdder_s, - SigmaAdder_s, - SigmaLatch_q, - DeltaB_s : unsigned(msbi_g+2 downto 0); - -begin - - DeltaB_s(msbi_g+2 downto msbi_g+1) <= SigmaLatch_q(msbi_g+2) & - SigmaLatch_q(msbi_g+2); - DeltaB_s(msbi_g downto 0) <= (others => '0'); - - DeltaAdder_s <= unsigned('0' & '0' & dac_i) + DeltaB_s; - - SigmaAdder_s <= DeltaAdder_s + SigmaLatch_q; - - seq: process (clk_i, res_n_i) - begin - if res_n_i = '0' then - SigmaLatch_q <= to_unsigned(2**(msbi_g+1), SigmaLatch_q'length); - DACout_q <= '0'; - - elsif clk_i'event and clk_i = '1' then - SigmaLatch_q <= SigmaAdder_s; - DACout_q <= SigmaLatch_q(msbi_g+2); - end if; - end process seq; - - dac_o <= DACout_q; - -end rtl; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/dpram.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/dpram.vhd deleted file mode 100644 index dafe8385..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/dpram.vhd +++ /dev/null @@ -1,75 +0,0 @@ -LIBRARY ieee; -USE ieee.std_logic_1164.all; - -LIBRARY altera_mf; -USE altera_mf.altera_mf_components.all; - -entity dpram is - generic ( - addr_width_g : integer := 8; - data_width_g : integer := 8 - ); - PORT - ( - address_a : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); - address_b : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); - clock_a : IN STD_LOGIC := '1'; - clock_b : IN STD_LOGIC ; - data_a : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); - data_b : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); - enable_a : IN STD_LOGIC := '1'; - enable_b : IN STD_LOGIC := '1'; - wren_a : IN STD_LOGIC := '0'; - wren_b : IN STD_LOGIC := '0'; - q_a : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); - q_b : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0) - ); -END dpram; - - -ARCHITECTURE SYN OF dpram IS -BEGIN - altsyncram_component : altsyncram - GENERIC MAP ( - address_reg_b => "CLOCK1", - clock_enable_input_a => "NORMAL", - clock_enable_input_b => "NORMAL", - clock_enable_output_a => "BYPASS", - clock_enable_output_b => "BYPASS", - indata_reg_b => "CLOCK1", - intended_device_family => "Cyclone V", - lpm_type => "altsyncram", - numwords_a => 2**addr_width_g, - numwords_b => 2**addr_width_g, - operation_mode => "BIDIR_DUAL_PORT", - outdata_aclr_a => "NONE", - outdata_aclr_b => "NONE", - outdata_reg_a => "UNREGISTERED", - outdata_reg_b => "UNREGISTERED", - power_up_uninitialized => "FALSE", - read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", - read_during_write_mode_port_b => "NEW_DATA_NO_NBE_READ", - widthad_a => addr_width_g, - widthad_b => addr_width_g, - width_a => data_width_g, - width_b => data_width_g, - width_byteena_a => 1, - width_byteena_b => 1, - wrcontrol_wraddress_reg_b => "CLOCK1" - ) - PORT MAP ( - address_a => address_a, - address_b => address_b, - clock0 => clock_a, - clock1 => clock_b, - clocken0 => enable_a, - clocken1 => enable_b, - data_a => data_a, - data_b => data_b, - wren_a => wren_a, - wren_b => wren_b, - q_a => q_a, - q_b => q_b - ); - -END SYN; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/galaxian.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/galaxian.vhd deleted file mode 100644 index 5f8a3a74..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/galaxian.vhd +++ /dev/null @@ -1,446 +0,0 @@ ------------------------------------------------------------------------------- --- FPGA GALAXIAN --- --- Version downto 2.50 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important not --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 4-30 galaxian modify by K.DEGAWA --- 2004- 5- 6 first release. --- 2004- 8-23 Improvement with T80-IP. --- 2004- 9-22 The problem which missile didn't sometimes come out from was improved. ------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - ---use work.pkg_galaxian.all; - -entity galaxian is - port( - W_CLK_18M : in std_logic; - W_CLK_12M : in std_logic; - W_CLK_6M : in std_logic; - - P1_CSJUDLR : in std_logic_vector(6 downto 0); - P2_CSJUDLR : in std_logic_vector(6 downto 0); - I_RESET : in std_logic; - - W_R : out std_logic_vector(2 downto 0); - W_G : out std_logic_vector(2 downto 0); - W_B : out std_logic_vector(2 downto 0); - HBLANK : out std_logic; - VBLANK : out std_logic; - W_H_SYNC : out std_logic; - W_V_SYNC : out std_logic; - W_SDAT_A : out std_logic_vector( 7 downto 0); - W_SDAT_B : out std_logic_vector( 7 downto 0); - O_CMPBL : out std_logic - ); -end; - -architecture RTL of galaxian is - -- CPU ADDRESS BUS - signal W_A : std_logic_vector(15 downto 0) := (others => '0'); - -- CPU IF - signal W_CPU_CLK : std_logic := '0'; - signal W_CPU_MREQn : std_logic := '0'; - signal W_CPU_NMIn : std_logic := '0'; - signal W_CPU_RDn : std_logic := '0'; - signal W_CPU_RFSHn : std_logic := '0'; - signal W_CPU_WAITn : std_logic := '0'; - signal W_CPU_WRn : std_logic := '0'; - signal W_CPU_WR : std_logic := '0'; - signal W_RESETn : std_logic := '0'; - -------- H and V COUNTER ------------------------- - signal W_C_BLn : std_logic := '0'; - signal W_C_BLnX : std_logic := '0'; - signal W_C_BLXn : std_logic := '0'; - signal W_H_BL : std_logic := '0'; - signal W_H_SYNC_int : std_logic := '0'; - signal W_V_BLn : std_logic := '0'; - signal W_V_BL2n : std_logic := '0'; - signal W_V_SYNC_int : std_logic := '0'; - signal W_H_CNT : std_logic_vector(8 downto 0) := (others => '0'); - signal W_V_CNT : std_logic_vector(7 downto 0) := (others => '0'); - -------- CPU RAM ---------------------------- - signal W_CPU_RAM_DO : std_logic_vector(7 downto 0) := (others => '0'); - -------- ADDRESS DECDER ---------------------- - signal W_BD_G : std_logic := '0'; - signal W_CPU_RAM_CS : std_logic := '0'; - signal W_CPU_RAM_RD : std_logic := '0'; --- signal W_CPU_RAM_WR : std_logic := '0'; - signal W_CPU_ROM_CS : std_logic := '0'; - signal W_DIP_OE : std_logic := '0'; - signal W_H_FLIP : std_logic := '0'; - signal W_DRIVER_WE : std_logic := '0'; - signal W_OBJ_RAM_RD : std_logic := '0'; - signal W_OBJ_RAM_RQ : std_logic := '0'; - signal W_OBJ_RAM_WR : std_logic := '0'; - signal W_PITCH : std_logic := '0'; - signal W_SOUND_WE : std_logic := '0'; - signal W_STARS_ON : std_logic := '0'; - signal W_STARS_OFFn : std_logic := '0'; - signal W_SW0_OE : std_logic := '0'; - signal W_SW1_OE : std_logic := '0'; - signal W_V_FLIP : std_logic := '0'; - signal W_VID_RAM_RD : std_logic := '0'; - signal W_VID_RAM_WR : std_logic := '0'; - signal W_WDR_OE : std_logic := '0'; - --------- INPORT ----------------------------- - signal W_SW_DO : std_logic_vector( 7 downto 0) := (others => '0'); - --------- VIDEO ----------------------------- - signal W_VID_DO : std_logic_vector( 7 downto 0) := (others => '0'); - ----- DATA I/F ------------------------------------- - signal W_CPU_ROM_DO : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_CPU_ROM_DOB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_BDO : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_BDI : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_CPU_RAM_CLK : std_logic := '0'; - signal W_VOL1 : std_logic := '0'; - signal W_VOL2 : std_logic := '0'; - signal W_FIRE : std_logic := '0'; - signal W_HIT : std_logic := '0'; - signal W_FS : std_logic_vector( 2 downto 0) := (others => '0'); - - signal blx_comb : std_logic := '0'; - signal W_1VF : std_logic := '0'; - signal W_256HnX : std_logic := '0'; - signal W_8HF : std_logic := '0'; - signal W_DAC_A : std_logic := '0'; - signal W_DAC_B : std_logic := '0'; - signal W_MISSILEn : std_logic := '0'; - signal W_SHELLn : std_logic := '0'; - signal W_MS_D : std_logic := '0'; - signal W_MS_R : std_logic := '0'; - signal W_MS_G : std_logic := '0'; - signal W_MS_B : std_logic := '0'; - - signal new_sw : std_logic_vector( 2 downto 0) := (others => '0'); - signal in_game : std_logic_vector( 1 downto 0) := (others => '0'); - signal ROM_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal rst_count : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_COL : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_STARS_B : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_STARS_G : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_STARS_R : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_VID : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_VIDEO_B : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_VIDEO_G : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_VIDEO_R : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_WAV_A0 : std_logic_vector(18 downto 0) := (others => '0'); - signal W_WAV_A1 : std_logic_vector(18 downto 0) := (others => '0'); - signal W_WAV_A2 : std_logic_vector(18 downto 0) := (others => '0'); - signal W_WAV_D0 : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_WAV_D1 : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_WAV_D2 : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_DAC : std_logic_vector( 3 downto 0) := (others => '0'); - -begin - mc_vid : entity work.MC_VIDEO - port map( - I_CLK_18M => W_CLK_18M, - I_CLK_12M => W_CLK_12M, - I_CLK_6M => W_CLK_6M, - I_H_CNT => W_H_CNT, - I_V_CNT => W_V_CNT, - I_H_FLIP => W_H_FLIP, - I_V_FLIP => W_V_FLIP, - I_V_BLn => W_V_BLn, - I_C_BLn => W_C_BLn, - I_A => W_A(9 downto 0), - I_OBJ_SUB_A => "000", - I_BD => W_BDI, - I_OBJ_RAM_RQ => W_OBJ_RAM_RQ, - I_OBJ_RAM_RD => W_OBJ_RAM_RD, - I_OBJ_RAM_WR => W_OBJ_RAM_WR, - I_VID_RAM_RD => W_VID_RAM_RD, - I_VID_RAM_WR => W_VID_RAM_WR, - I_DRIVER_WR => W_DRIVER_WE, - O_C_BLnX => W_C_BLnX, - O_8HF => W_8HF, - O_256HnX => W_256HnX, - O_1VF => W_1VF, - O_MISSILEn => W_MISSILEn, - O_SHELLn => W_SHELLn, - O_BD => W_VID_DO, - O_VID => W_VID, - O_COL => W_COL - ); - - cpu : entity work.T80as - port map ( - RESET_n => W_RESETn, - CLK_n => W_CPU_CLK, - WAIT_n => W_CPU_WAITn, - INT_n => '1', - NMI_n => W_CPU_NMIn, - BUSRQ_n => '1', - MREQ_n => W_CPU_MREQn, - RD_n => W_CPU_RDn, - WR_n => W_CPU_WRn, - RFSH_n => W_CPU_RFSHn, - A => W_A, - DI => W_BDO, - DO => W_BDI, - M1_n => open, - IORQ_n => open, - HALT_n => open, - BUSAK_n => open, - DOE => open - ); - - mc_cpu_ram : entity work.MC_CPU_RAM - port map ( - I_CLK => W_CPU_RAM_CLK, - I_ADDR => W_A(9 downto 0), - I_D => W_BDI, - I_WE => W_CPU_WR, - I_OE => W_CPU_RAM_RD, - O_D => W_CPU_RAM_DO - ); - - mc_adec : entity work.MC_ADEC - port map( - I_CLK_12M => W_CLK_12M, - I_CLK_6M => W_CLK_6M, - I_CPU_CLK => W_CPU_CLK, - I_RSTn => W_RESETn, - - I_CPU_A => W_A, - I_CPU_D => W_BDI(0), - I_MREQn => W_CPU_MREQn, - I_RFSHn => W_CPU_RFSHn, - I_RDn => W_CPU_RDn, - I_WRn => W_CPU_WRn, - I_H_BL => W_H_BL, - I_V_BLn => W_V_BLn, - - O_WAITn => W_CPU_WAITn, - O_NMIn => W_CPU_NMIn, - O_CPU_ROM_CS => W_CPU_ROM_CS, - O_CPU_RAM_RD => W_CPU_RAM_RD, --- O_CPU_RAM_WR => W_CPU_RAM_WR, - O_CPU_RAM_CS => W_CPU_RAM_CS, - O_OBJ_RAM_RD => W_OBJ_RAM_RD, - O_OBJ_RAM_WR => W_OBJ_RAM_WR, - O_OBJ_RAM_RQ => W_OBJ_RAM_RQ, - O_VID_RAM_RD => W_VID_RAM_RD, - O_VID_RAM_WR => W_VID_RAM_WR, - O_SW0_OE => W_SW0_OE, - O_SW1_OE => W_SW1_OE, - O_DIP_OE => W_DIP_OE, - O_WDR_OE => W_WDR_OE, - O_DRIVER_WE => W_DRIVER_WE, - O_SOUND_WE => W_SOUND_WE, - O_PITCH => W_PITCH, - O_H_FLIP => W_H_FLIP, - O_V_FLIP => W_V_FLIP, - O_BD_G => W_BD_G, - O_STARS_ON => W_STARS_ON - ); - --- active high buttons - mc_inport : entity work.MC_INPORT - port map ( - I_COIN1 => P1_CSJUDLR(6), - I_COIN2 => P2_CSJUDLR(6), - I_1P_START => P1_CSJUDLR(5), - I_2P_START => P2_CSJUDLR(5), - I_1P_SH => P1_CSJUDLR(4), - I_2P_SH => P2_CSJUDLR(4), - I_1P_LE => P1_CSJUDLR(1), - I_2P_LE => P2_CSJUDLR(3), - I_1P_RI => P1_CSJUDLR(0), - I_2P_RI => P2_CSJUDLR(2), - I_SW0_OE => W_SW0_OE, - I_SW1_OE => W_SW1_OE, - I_DIP_OE => W_DIP_OE, - O_D => W_SW_DO - ); - - mc_hv : entity work.MC_HV_COUNT - port map( - I_CLK => W_CLK_6M, - I_RSTn => W_RESETn, - O_H_CNT => W_H_CNT, - O_H_SYNC => W_H_SYNC_int, - O_H_BL => W_H_BL, - O_V_CNT => W_V_CNT, - O_V_SYNC => W_V_SYNC_int, - O_V_BL2n => W_V_BL2n, - O_V_BLn => W_V_BLn, - O_C_BLn => W_C_BLn - ); - - mc_col_pal : entity work.MC_COL_PAL - port map( - I_CLK_12M => W_CLK_12M, - I_CLK_6M => W_CLK_6M, - I_VID => W_VID, - I_COL => W_COL, - I_C_BLnX => W_C_BLnX, - O_C_BLXn => W_C_BLXn, - O_STARS_OFFn => W_STARS_OFFn, - O_R => W_VIDEO_R, - O_G => W_VIDEO_G, - O_B => W_VIDEO_B - ); - - mc_stars : entity work.MC_STARS - port map ( - I_CLK_18M => W_CLK_18M, - I_CLK_6M => W_CLK_6M, - I_H_FLIP => W_H_FLIP, - I_V_SYNC => W_V_SYNC_int, - I_8HF => W_8HF, - I_256HnX => W_256HnX, - I_1VF => W_1VF, - I_2V => W_V_CNT(1), - I_STARS_ON => W_STARS_ON, - I_STARS_OFFn => W_STARS_OFFn, - O_R => W_STARS_R, - O_G => W_STARS_G, - O_B => W_STARS_B, - O_NOISE => open - ); - - mc_sound_a : entity work.MC_SOUND_A - port map( - I_CLK_12M => W_CLK_12M, - I_CLK_6M => W_CLK_6M, - I_H_CNT1 => W_H_CNT(1), - I_BD => W_BDI, - I_PITCH => W_PITCH, - I_VOL1 => W_VOL1, - I_VOL2 => W_VOL2, - O_SDAT => W_SDAT_A, - O_DO => open - ); - - vmc_sound_b : entity work.MC_SOUND_B - port map( - I_CLK1 => W_CLK_6M, - I_RSTn => rst_count(3), - I_SW => new_sw, - I_DAC => W_DAC, - I_FS => W_FS, - O_SDAT => W_SDAT_B - ); - ---------- ROM ------------------------------------------------------- - mc_roms : entity work.ROM_PGM_0 - port map ( - CLK => W_CLK_12M, - ADDR => W_A(13 downto 0), - DATA => W_CPU_ROM_DO - ); - --------- VIDEO ----------------------------- - blx_comb <= not ( W_C_BLXn and W_V_BL2n ); - W_V_SYNC <= not W_V_SYNC_int; - W_H_SYNC <= not W_H_SYNC_int; - O_CMPBL <= W_C_BLnX; - - -- MISSILE => Yellow ; - -- SHELL => White ; - W_MS_D <= not (W_MISSILEn and W_SHELLn); - W_MS_R <= not blx_comb and W_MS_D; - W_MS_G <= not blx_comb and W_MS_D; - W_MS_B <= not blx_comb and W_MS_D and not W_SHELLn ; - - W_R <= W_VIDEO_R or (W_STARS_R & "0") or (W_MS_R & W_MS_R & "0"); - W_G <= W_VIDEO_G or (W_STARS_G & "0") or (W_MS_G & W_MS_G & "0"); - W_B <= W_VIDEO_B or (W_STARS_B & "0") or (W_MS_B & W_MS_B & "0"); - - process(W_CLK_6M) - begin - if rising_edge(W_CLK_6M) then - HBLANK <= not W_C_BLXn; - VBLANK <= not W_V_BL2n; - end if; - end process; - - ------ CPU I/F ------------------------------------- - - W_CPU_CLK <= W_H_CNT(0); - W_CPU_RAM_CLK <= W_CLK_12M and W_CPU_RAM_CS; - - W_CPU_ROM_DOB <= W_CPU_ROM_DO when W_CPU_ROM_CS = '1' else (others=>'0'); - - W_RESETn <= not I_RESET; - W_BDO <= W_SW_DO or W_VID_DO or W_CPU_RAM_DO or W_CPU_ROM_DOB ; - W_CPU_WR <= not W_CPU_WRn; - - new_sw <= (W_FS(2) or W_FS(1) or W_FS(0)) & W_HIT & W_FIRE; - - process(W_CPU_CLK, I_RESET) - begin - if (I_RESET = '1') then - rst_count <= (others => '0'); - elsif rising_edge( W_CPU_CLK) then - if ( rst_count /= x"f") then - rst_count <= rst_count + 1; - end if; - end if; - end process; - ------ Parts 9L --------- - process(W_CLK_12M, I_RESET) - begin - if (I_RESET = '1') then - W_FS <= (others=>'0'); - W_HIT <= '0'; - W_FIRE <= '0'; - W_VOL1 <= '0'; - W_VOL2 <= '0'; - elsif rising_edge(W_CLK_12M) then - if (W_SOUND_WE = '1') then - case(W_A(2 downto 0)) is - when "000" => W_FS(0) <= W_BDI(0); - when "001" => W_FS(1) <= W_BDI(0); - when "010" => W_FS(2) <= W_BDI(0); - when "011" => W_HIT <= W_BDI(0); --- when "100" => UNUSED <= W_BDI(0); - when "101" => W_FIRE <= W_BDI(0); - when "110" => W_VOL1 <= W_BDI(0); - when "111" => W_VOL2 <= W_BDI(0); - when others => null; - end case; - end if; - end if; - end process; - ------ Parts 9M --------- - process(W_CLK_12M, I_RESET) - begin - if (I_RESET = '1') then - W_DAC <= (others=>'0'); - elsif rising_edge(W_CLK_12M) then - if (W_DRIVER_WE = '1') then - case(W_A(2 downto 0)) is - -- next 4 outputs go off board via ULN2075 buffer --- when "000" => 1P START <= W_BDI(0); --- when "001" => 2P START <= W_BDI(0); --- when "010" => COIN LOCK <= W_BDI(0); --- when "011" => COIN CTR <= W_BDI(0); - when "100" => W_DAC(0) <= W_BDI(0); -- 1M - when "101" => W_DAC(1) <= W_BDI(0); -- 470K - when "110" => W_DAC(2) <= W_BDI(0); -- 220K - when "111" => W_DAC(3) <= W_BDI(0); -- 100K - when others => null; - end case; - end if; - end if; - end process; - -------------------------------------------------------------------------------- -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/hq2x.sv b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/hq2x.sv deleted file mode 100644 index f17732b6..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/hq2x.sv +++ /dev/null @@ -1,454 +0,0 @@ -// -// -// Copyright (c) 2012-2013 Ludvig Strigeus -// Copyright (c) 2017 Sorgelig -// -// This program is GPL Licensed. See COPYING for the full license. -// -// -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -// synopsys translate_off -`timescale 1 ps / 1 ps -// synopsys translate_on - -`define BITS_TO_FIT(N) ( \ - N <= 2 ? 0 : \ - N <= 4 ? 1 : \ - N <= 8 ? 2 : \ - N <= 16 ? 3 : \ - N <= 32 ? 4 : \ - N <= 64 ? 5 : \ - N <= 128 ? 6 : \ - N <= 256 ? 7 : \ - N <= 512 ? 8 : \ - N <=1024 ? 9 : 10 ) - -module hq2x_in #(parameter LENGTH, parameter DWIDTH) -( - input clk, - - input [AWIDTH:0] rdaddr, - input rdbuf, - output[DWIDTH:0] q, - - input [AWIDTH:0] wraddr, - input wrbuf, - input [DWIDTH:0] data, - input wren -); - - localparam AWIDTH = `BITS_TO_FIT(LENGTH); - wire [DWIDTH:0] out[2]; - assign q = out[rdbuf]; - - hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); - hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); -endmodule - - -module hq2x_out #(parameter LENGTH, parameter DWIDTH) -( - input clk, - - input [AWIDTH:0] rdaddr, - input [1:0] rdbuf, - output[DWIDTH:0] q, - - input [AWIDTH:0] wraddr, - input [1:0] wrbuf, - input [DWIDTH:0] data, - input wren -); - - localparam AWIDTH = `BITS_TO_FIT(LENGTH*2); - wire [DWIDTH:0] out[4]; - assign q = out[rdbuf]; - - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf2(clk,data,rdaddr,wraddr,wren && (wrbuf == 2),out[2]); - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf3(clk,data,rdaddr,wraddr,wren && (wrbuf == 3),out[3]); -endmodule - - -module hq2x_buf #(parameter NUMWORDS, parameter AWIDTH, parameter DWIDTH) -( - input clock, - input [DWIDTH:0] data, - input [AWIDTH:0] rdaddress, - input [AWIDTH:0] wraddress, - input wren, - output [DWIDTH:0] q -); - - altsyncram altsyncram_component ( - .address_a (wraddress), - .clock0 (clock), - .data_a (data), - .wren_a (wren), - .address_b (rdaddress), - .q_b(q), - .aclr0 (1'b0), - .aclr1 (1'b0), - .addressstall_a (1'b0), - .addressstall_b (1'b0), - .byteena_a (1'b1), - .byteena_b (1'b1), - .clock1 (1'b1), - .clocken0 (1'b1), - .clocken1 (1'b1), - .clocken2 (1'b1), - .clocken3 (1'b1), - .data_b ({(DWIDTH+1){1'b1}}), - .eccstatus (), - .q_a (), - .rden_a (1'b1), - .rden_b (1'b1), - .wren_b (1'b0)); - defparam - altsyncram_component.address_aclr_b = "NONE", - altsyncram_component.address_reg_b = "CLOCK0", - altsyncram_component.clock_enable_input_a = "BYPASS", - altsyncram_component.clock_enable_input_b = "BYPASS", - altsyncram_component.clock_enable_output_b = "BYPASS", - altsyncram_component.intended_device_family = "Cyclone III", - altsyncram_component.lpm_type = "altsyncram", - altsyncram_component.numwords_a = NUMWORDS, - altsyncram_component.numwords_b = NUMWORDS, - altsyncram_component.operation_mode = "DUAL_PORT", - altsyncram_component.outdata_aclr_b = "NONE", - altsyncram_component.outdata_reg_b = "UNREGISTERED", - altsyncram_component.power_up_uninitialized = "FALSE", - altsyncram_component.read_during_write_mode_mixed_ports = "DONT_CARE", - altsyncram_component.widthad_a = AWIDTH+1, - altsyncram_component.widthad_b = AWIDTH+1, - altsyncram_component.width_a = DWIDTH+1, - altsyncram_component.width_b = DWIDTH+1, - altsyncram_component.width_byteena_a = 1; - -endmodule - -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -module DiffCheck -( - input [17:0] rgb1, - input [17:0] rgb2, - output result -); - - wire [5:0] r = rgb1[5:1] - rgb2[5:1]; - wire [5:0] g = rgb1[11:7] - rgb2[11:7]; - wire [5:0] b = rgb1[17:13] - rgb2[17:13]; - wire [6:0] t = $signed(r) + $signed(b); - wire [6:0] gx = {g[5], g}; - wire [7:0] y = $signed(t) + $signed(gx); - wire [6:0] u = $signed(r) - $signed(b); - wire [7:0] v = $signed({g, 1'b0}) - $signed(t); - - // if y is inside (-24..24) - wire y_inside = (y < 8'h18 || y >= 8'he8); - - // if u is inside (-4, 4) - wire u_inside = (u < 7'h4 || u >= 7'h7c); - - // if v is inside (-6, 6) - wire v_inside = (v < 8'h6 || v >= 8'hfA); - assign result = !(y_inside && u_inside && v_inside); -endmodule - -module InnerBlend -( - input [8:0] Op, - input [5:0] A, - input [5:0] B, - input [5:0] C, - output [5:0] O -); - - function [8:0] mul6x3; - input [5:0] op1; - input [2:0] op2; - begin - mul6x3 = 9'd0; - if(op2[0]) mul6x3 = mul6x3 + op1; - if(op2[1]) mul6x3 = mul6x3 + {op1, 1'b0}; - if(op2[2]) mul6x3 = mul6x3 + {op1, 2'b00}; - end - endfunction - - wire OpOnes = Op[4]; - wire [8:0] Amul = mul6x3(A, Op[7:5]); - wire [8:0] Bmul = mul6x3(B, {Op[3:2], 1'b0}); - wire [8:0] Cmul = mul6x3(C, {Op[1:0], 1'b0}); - wire [8:0] At = Amul; - wire [8:0] Bt = (OpOnes == 0) ? Bmul : {3'b0, B}; - wire [8:0] Ct = (OpOnes == 0) ? Cmul : {3'b0, C}; - wire [9:0] Res = {At, 1'b0} + Bt + Ct; - assign O = Op[8] ? A : Res[9:4]; -endmodule - -module Blend -( - input [5:0] rule, - input disable_hq2x, - input [17:0] E, - input [17:0] A, - input [17:0] B, - input [17:0] D, - input [17:0] F, - input [17:0] H, - output [17:0] Result -); - - reg [1:0] input_ctrl; - reg [8:0] op; - localparam BLEND0 = 9'b1_xxx_x_xx_xx; // 0: A - localparam BLEND1 = 9'b0_110_0_10_00; // 1: (A * 12 + B * 4) >> 4 - localparam BLEND2 = 9'b0_100_0_10_10; // 2: (A * 8 + B * 4 + C * 4) >> 4 - localparam BLEND3 = 9'b0_101_0_10_01; // 3: (A * 10 + B * 4 + C * 2) >> 4 - localparam BLEND4 = 9'b0_110_0_01_01; // 4: (A * 12 + B * 2 + C * 2) >> 4 - localparam BLEND5 = 9'b0_010_0_11_11; // 5: (A * 4 + (B + C) * 6) >> 4 - localparam BLEND6 = 9'b0_111_1_xx_xx; // 6: (A * 14 + B + C) >> 4 - localparam AB = 2'b00; - localparam AD = 2'b01; - localparam DB = 2'b10; - localparam BD = 2'b11; - wire is_diff; - DiffCheck diff_checker(rule[1] ? B : H, rule[0] ? D : F, is_diff); - - always @* begin - case({!is_diff, rule[5:2]}) - 1,17: {op, input_ctrl} = {BLEND1, AB}; - 2,18: {op, input_ctrl} = {BLEND1, DB}; - 3,19: {op, input_ctrl} = {BLEND1, BD}; - 4,20: {op, input_ctrl} = {BLEND2, DB}; - 5,21: {op, input_ctrl} = {BLEND2, AB}; - 6,22: {op, input_ctrl} = {BLEND2, AD}; - - 8: {op, input_ctrl} = {BLEND0, 2'bxx}; - 9: {op, input_ctrl} = {BLEND0, 2'bxx}; - 10: {op, input_ctrl} = {BLEND0, 2'bxx}; - 11: {op, input_ctrl} = {BLEND1, AB}; - 12: {op, input_ctrl} = {BLEND1, AB}; - 13: {op, input_ctrl} = {BLEND1, AB}; - 14: {op, input_ctrl} = {BLEND1, DB}; - 15: {op, input_ctrl} = {BLEND1, BD}; - - 24: {op, input_ctrl} = {BLEND2, DB}; - 25: {op, input_ctrl} = {BLEND5, DB}; - 26: {op, input_ctrl} = {BLEND6, DB}; - 27: {op, input_ctrl} = {BLEND2, DB}; - 28: {op, input_ctrl} = {BLEND4, DB}; - 29: {op, input_ctrl} = {BLEND5, DB}; - 30: {op, input_ctrl} = {BLEND3, BD}; - 31: {op, input_ctrl} = {BLEND3, DB}; - default: {op, input_ctrl} = 11'bx; - endcase - - // Setting op[8] effectively disables HQ2X because blend will always return E. - if (disable_hq2x) op[8] = 1; - end - - // Generate inputs to the inner blender. Valid combinations. - // 00: E A B - // 01: E A D - // 10: E D B - // 11: E B D - wire [17:0] Input1 = E; - wire [17:0] Input2 = !input_ctrl[1] ? A : - !input_ctrl[0] ? D : B; - - wire [17:0] Input3 = !input_ctrl[0] ? B : D; - InnerBlend inner_blend1(op, Input1[5:0], Input2[5:0], Input3[5:0], Result[5:0]); - InnerBlend inner_blend2(op, Input1[11:6], Input2[11:6], Input3[11:6], Result[11:6]); - InnerBlend inner_blend3(op, Input1[17:12], Input2[17:12], Input3[17:12], Result[17:12]); -endmodule - - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -module Hq2x #(parameter LENGTH, parameter HALF_DEPTH) -( - input clk, - input ce_x4, - input [DWIDTH:0] inputpixel, - input mono, - input disable_hq2x, - input reset_frame, - input reset_line, - input [1:0] read_y, - input [AWIDTH+1:0] read_x, - output [DWIDTH:0] outpixel -); - - -localparam AWIDTH = `BITS_TO_FIT(LENGTH); -localparam DWIDTH = HALF_DEPTH ? 8 : 17; - -wire [5:0] hqTable[256] = '{ - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, - 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 35, 35, 23, 15, 7, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, - 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 51, 35, 23, 15, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 35, 35, 23, 61, 51, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 7, 35, 23, 61, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 58, 23, 15, 51, 35, 23, 61, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 39, 23, 15, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 39, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 7, 35, 23, 15, 7, 43 -}; - -reg [17:0] Prev0, Prev1, Prev2, Curr0, Curr1, Next0, Next1, Next2; -reg [17:0] A, B, D, F, G, H; -reg [7:0] pattern, nextpatt; -reg [1:0] i; -reg [7:0] y; - -wire curbuf = y[0]; -reg prevbuf = 0; -wire iobuf = !curbuf; - -wire diff0, diff1; -DiffCheck diffcheck0(Curr1, (i == 0) ? Prev0 : (i == 1) ? Curr0 : (i == 2) ? Prev2 : Next1, diff0); -DiffCheck diffcheck1(Curr1, (i == 0) ? Prev1 : (i == 1) ? Next0 : (i == 2) ? Curr2 : Next2, diff1); - -wire [7:0] new_pattern = {diff1, diff0, pattern[7:2]}; - -wire [17:0] X = (i == 0) ? A : (i == 1) ? Prev1 : (i == 2) ? Next1 : G; -wire [17:0] blend_result; -Blend blender(hqTable[nextpatt], disable_hq2x, Curr0, X, B, D, F, H, blend_result); - -reg Curr2_addr1; -reg [AWIDTH:0] Curr2_addr2; -wire [17:0] Curr2 = HALF_DEPTH ? h2rgb(Curr2tmp) : Curr2tmp; -wire [DWIDTH:0] Curr2tmp; - -reg [AWIDTH:0] wrin_addr2; -reg [DWIDTH:0] wrpix; -reg wrin_en; - -function [17:0] h2rgb; - input [8:0] v; -begin - h2rgb = mono ? {v[5:3],v[2:0], v[5:3],v[2:0], v[5:3],v[2:0]} : {v[8:6],v[8:6],v[5:3],v[5:3],v[2:0],v[2:0]}; -end -endfunction - -function [8:0] rgb2h; - input [17:0] v; -begin - rgb2h = mono ? {3'b000, v[17:15], v[14:12]} : {v[17:15], v[11:9], v[5:3]}; -end -endfunction - -hq2x_in #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_in -( - .clk(clk), - - .rdaddr(Curr2_addr2), - .rdbuf(Curr2_addr1), - .q(Curr2tmp), - - .wraddr(wrin_addr2), - .wrbuf(iobuf), - .data(wrpix), - .wren(wrin_en) -); - -reg [1:0] wrout_addr1; -reg [AWIDTH+1:0] wrout_addr2; -reg wrout_en; -reg [DWIDTH:0] wrdata; - -hq2x_out #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_out -( - .clk(clk), - - .rdaddr(read_x), - .rdbuf(read_y), - .q(outpixel), - - .wraddr(wrout_addr2), - .wrbuf(wrout_addr1), - .data(wrdata), - .wren(wrout_en) -); - -always @(posedge clk) begin - reg [AWIDTH:0] offs; - reg old_reset_line; - reg old_reset_frame; - - wrout_en <= 0; - wrin_en <= 0; - - if(ce_x4) begin - - pattern <= new_pattern; - - if(~&offs) begin - if (i == 0) begin - Curr2_addr1 <= prevbuf; - Curr2_addr2 <= offs; - end - if (i == 1) begin - Prev2 <= Curr2; - Curr2_addr1 <= curbuf; - Curr2_addr2 <= offs; - end - if (i == 2) begin - Next2 <= HALF_DEPTH ? h2rgb(inputpixel) : inputpixel; - wrpix <= inputpixel; - wrin_addr2 <= offs; - wrin_en <= 1; - end - if (i == 3) begin - offs <= offs + 1'd1; - end - - if(HALF_DEPTH) wrdata <= rgb2h(blend_result); - else wrdata <= blend_result; - - wrout_addr1 <= {curbuf, i[1]}; - wrout_addr2 <= {offs, i[1]^i[0]}; - wrout_en <= 1; - end - - if(i==3) begin - nextpatt <= {new_pattern[7:6], new_pattern[3], new_pattern[5], new_pattern[2], new_pattern[4], new_pattern[1:0]}; - {A, G} <= {Prev0, Next0}; - {B, F, H, D} <= {Prev1, Curr2, Next1, Curr0}; - {Prev0, Prev1} <= {Prev1, Prev2}; - {Curr0, Curr1} <= {Curr1, Curr2}; - {Next0, Next1} <= {Next1, Next2}; - end else begin - nextpatt <= {nextpatt[5], nextpatt[3], nextpatt[0], nextpatt[6], nextpatt[1], nextpatt[7], nextpatt[4], nextpatt[2]}; - {B, F, H, D} <= {F, H, D, B}; - end - - i <= i + 1'b1; - if(old_reset_line && ~reset_line) begin - old_reset_frame <= reset_frame; - offs <= 0; - i <= 0; - y <= y + 1'd1; - prevbuf <= curbuf; - if(old_reset_frame & ~reset_frame) begin - y <= 0; - prevbuf <= 0; - end - end - - old_reset_line <= reset_line; - end -end - -endmodule // Hq2x diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_adec.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_adec.vhd deleted file mode 100644 index 7245ce8c..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_adec.vhd +++ /dev/null @@ -1,251 +0,0 @@ ---------------------------------------------------------------------- --- FPGA GALAXIAN ADDRESS DECDER --- --- Version : 2.01 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 4-30 galaxian modify by K.DEGAWA --- 2004- 5- 6 first release. --- 2004- 8-23 Improvement with T80-IP. ---------------------------------------------------------------------- --- ---GALAXIAN Address Map --- --- Address Item(R..read-mode W..wight-mode) Parts ---0000 - 1FFF CPU-ROM..R ( 7H or 7K ) ---2000 - 3FFF CPU-ROM..R ( 7L ) ---4000 - 47FF CPU-RAM..RW ( 7N & 7P ) ---5000 - 57FF VID-RAM..RW ---5800 - 5FFF OBJ-RAM..RW ---6000 - SW0..R LAMP......W ---6800 - SW1..R SOUND.....W ---7000 - DIP..R ---7001 NMI_ON....W ---7004 STARS_ON..W ---7006 H_FLIP....W ---7007 V-FLIP....W ---7800 WDR..R PITCH.....W --- ---W MODE ---6000 1P START ---6001 2P START ---6002 COIN LOCKOUT ---6003 COIN COUNTER ---6004 - 6007 SOUND CONTROL(OSC) --- ---6800 SOUND CONTROL(FS1) ---6801 SOUND CONTROL(FS2) ---6802 SOUND CONTROL(FS3) ---6803 SOUND CONTROL(HIT) ---6805 SOUND CONTROL(SHOT) ---6806 SOUND CONTROL(VOL1) ---6807 SOUND CONTROL(VOL2) --- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_ADEC is - port ( - I_CLK_12M : in std_logic; - I_CLK_6M : in std_logic; - I_CPU_CLK : in std_logic; - I_RSTn : in std_logic; - - I_CPU_A : in std_logic_vector(15 downto 0); - I_CPU_D : in std_logic; - I_MREQn : in std_logic; - I_RFSHn : in std_logic; - I_RDn : in std_logic; - I_WRn : in std_logic; - I_H_BL : in std_logic; - I_V_BLn : in std_logic; - - O_WAITn : out std_logic; - O_NMIn : out std_logic; - O_CPU_ROM_CS : out std_logic; - O_CPU_RAM_RD : out std_logic; - O_CPU_RAM_WR : out std_logic; - O_CPU_RAM_CS : out std_logic; - O_OBJ_RAM_RD : out std_logic; - O_OBJ_RAM_WR : out std_logic; - O_OBJ_RAM_RQ : out std_logic; - O_VID_RAM_RD : out std_logic; - O_VID_RAM_WR : out std_logic; - O_SW0_OE : out std_logic; - O_SW1_OE : out std_logic; - O_DIP_OE : out std_logic; - O_WDR_OE : out std_logic; - O_DRIVER_WE : out std_logic; - O_SOUND_WE : out std_logic; - O_PITCH : out std_logic; - O_H_FLIP : out std_logic; - O_V_FLIP : out std_logic; - O_BD_G : out std_logic; - O_STARS_ON : out std_logic - ); -end; - -architecture RTL of MC_ADEC is - signal W_8E1_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_8E2_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_8P_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_8N_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_8M_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_9N_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_NMI_ONn : std_logic := '0'; - -------- CPU WAITn ---------------------------------------------- --- signal W_6S1_Q : std_logic := '0'; - signal W_6S1_Qn : std_logic := '0'; --- signal W_6S2_Qn : std_logic := '0'; - - signal W_V_BL : std_logic := '0'; - -begin - W_NMI_ONn <= W_9N_Q(1); -- galaxian - --- O_WAITn <= '1' ; -- No Wait - O_WAITn <= W_6S1_Qn; - - process(I_CPU_CLK, I_V_BLn) - begin - if (I_V_BLn = '0') then --- W_6S1_Q <= '0'; - W_6S1_Qn <= '1'; - elsif rising_edge(I_CPU_CLK) then --- W_6S1_Q <= not (I_H_BL or W_8P_Q(2)); - W_6S1_Qn <= I_H_BL or W_8P_Q(2); - end if; - end process; - --- process(I_CPU_CLK) --- begin --- if falling_edge(I_CPU_CLK) then --- W_6S2_Qn <= not W_6S1_Q; --- end if; --- end process; - --------- CPU NMIn ----------------------------------------------- - W_V_BL <= not I_V_BLn; - process(W_V_BL, W_NMI_ONn) - begin - if (W_NMI_ONn = '0') then - O_NMIn <= '1'; - elsif rising_edge(W_V_BL) then - O_NMIn <= '0'; - end if; - end process; - - ------------------------------------------------------------------- - u_8e1 : entity work.LOGIC_74XX139 - port map ( - I_G => I_MREQn, - I_Sel(1) => I_CPU_A(15), - I_Sel(0) => I_CPU_A(14), - O_Q => W_8E1_Q - ); - - ---------- CPU_ROM CS 0000 - 3FFF --------------------------- - u_8e2 : entity work.LOGIC_74XX139 - port map ( - I_G => I_RDn, - I_Sel(1) => W_8E1_Q(0), - I_Sel(0) => I_CPU_A(13), - O_Q => W_8E2_Q - ); - - O_CPU_ROM_CS <= not (W_8E2_Q(0) and W_8E2_Q(1) ) ; -- 0000 - 3FFF - ------------------------------------------------------------------- - -- ADDRESS - -- W_8E1_Q[0] = 0000 - 3FFF ---- CPU_ROM_USE - -- W_8E1_Q[1] = 4000 - 7FFF ---- GALAXIAN USE *1 - -- W_8E1_Q[2] = 8000 - BFFF ---- MOONCREST USE - -- W_8E1_Q[3] = C000 - FFFF - - u_8p : entity work.LOGIC_74XX138 - port map ( - I_G1 => I_RFSHn, - I_G2a => W_8E1_Q(1), -- <= *1 - I_G2b => W_8E1_Q(1), -- <= *1 - I_Sel => I_CPU_A(13 downto 11), - O_Q => W_8P_Q - ); - - u_8n : entity work.LOGIC_74XX138 - port map ( - I_G1 => '1', - I_G2a => I_RDn, - I_G2b => W_8E1_Q(1), -- <= *1 - I_Sel => I_CPU_A(13 downto 11), - O_Q => W_8N_Q - ); - - u_8m : entity work.LOGIC_74XX138 - port map ( - -- I_G1 => W_6S2_Qn, - I_G1 => '1', -- No Wait - I_G2a => I_WRn, - I_G2b => W_8E1_Q(1), -- <= *1 - I_Sel => I_CPU_A(13 downto 11), - O_Q => W_8M_Q - ); - - O_BD_G <= not (W_8E1_Q(0) and W_8P_Q(0)); - O_OBJ_RAM_RQ <= not W_8P_Q(3); - - O_CPU_RAM_CS <= not (W_8N_Q(0) and W_8M_Q(0)); - - O_WDR_OE <= not W_8N_Q(7); - O_DIP_OE <= not W_8N_Q(6); - O_SW1_OE <= not W_8N_Q(5); - O_SW0_OE <= not W_8N_Q(4); - O_OBJ_RAM_RD <= not W_8N_Q(3); - O_VID_RAM_RD <= not W_8N_Q(2); --- UNUSED <= not W_8N_Q(1); - O_CPU_RAM_RD <= not W_8N_Q(0); - - O_PITCH <= not W_8M_Q(7); --- STARS_ON_ENA <= not W_8M_Q(6); - O_SOUND_WE <= not W_8M_Q(5); - O_DRIVER_WE <= not W_8M_Q(4); - O_OBJ_RAM_WR <= not W_8M_Q(3); - O_VID_RAM_WR <= not W_8M_Q(2); --- UNUSED <= not W_8M_Q(1); - O_CPU_RAM_WR <= not W_8M_Q(0); - - ----- Parts 9N --------- - - process(I_CLK_12M, I_RSTn) - begin - if (I_RSTn = '0') then - W_9N_Q <= (others => '0'); - elsif rising_edge(I_CLK_12M) then - if (W_8M_Q(6) = '0') then - case I_CPU_A(2 downto 0) is - when "000" => W_9N_Q(0) <= I_CPU_D; - when "001" => W_9N_Q(1) <= I_CPU_D; - when "010" => W_9N_Q(2) <= I_CPU_D; - when "011" => W_9N_Q(3) <= I_CPU_D; - when "100" => W_9N_Q(4) <= I_CPU_D; - when "101" => W_9N_Q(5) <= I_CPU_D; - when "110" => W_9N_Q(6) <= I_CPU_D; - when "111" => W_9N_Q(7) <= I_CPU_D; - when others => null; - end case; - end if; - end if; - end process; - - O_STARS_ON <= W_9N_Q(4); - O_H_FLIP <= W_9N_Q(6); - O_V_FLIP <= W_9N_Q(7); - -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_bram.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_bram.vhd deleted file mode 100644 index a6df1ce1..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_bram.vhd +++ /dev/null @@ -1,182 +0,0 @@ ------------------------------------------------------------------------------- --- FPGA MOONCRESTA & GALAXIAN --- FPGA BLOCK RAM I/F (XILINX SPARTAN) --- --- Version : 2.50 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- mc_col_rom(6L) added by k.Degawa --- --- 2004- 5- 6 first release. --- 2004- 8-23 Improvement with T80-IP. K.Degawa --- 2004- 9-18 added Xilinx Device K.Degawa ------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - --- mc_top.v use -entity MC_CPU_RAM is - port ( - I_CLK : in std_logic; - I_ADDR : in std_logic_vector(9 downto 0); - I_D : in std_logic_vector(7 downto 0); - I_WE : in std_logic; - I_OE : in std_logic; - O_D : out std_logic_vector(7 downto 0) - ); -end; -architecture RTL of MC_CPU_RAM is - - signal W_D : std_logic_vector(7 downto 0) := (others => '0'); -begin - O_D <= W_D when I_OE ='1' else (others=>'0'); - - ram_inst : work.spram generic map(10,8) - port map - ( - address => I_ADDR, - clock => I_CLK, - data => I_D, - wren => I_WE, - q => W_D - ); -end RTL; - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - --- mc_video.v use -entity MC_OBJ_RAM is - port( - I_CLKA : in std_logic := '0'; - I_WEA : in std_logic := '0'; - I_CEA : in std_logic := '0'; - I_ADDRA : in std_logic_vector(7 downto 0); - I_DA : in std_logic_vector(7 downto 0); - O_DA : out std_logic_vector(7 downto 0); - - I_CLKB : in std_logic := '0'; - I_WEB : in std_logic := '0'; - I_CEB : in std_logic := '0'; - I_ADDRB : in std_logic_vector(7 downto 0); - I_DB : in std_logic_vector(7 downto 0); - O_DB : out std_logic_vector(7 downto 0) - ); - end; - -architecture RTL of MC_OBJ_RAM is -begin - - ram_inst : work.dpram generic map(8,8) - port map - ( - clock_a => I_CLKA, - address_a => I_ADDRA, - data_a => I_DA, - q_a => O_DA, - enable_a => I_CEA, - wren_a => I_WEA, - - clock_b => I_CLKB, - address_b => I_ADDRB, - data_b => I_DB, - q_b => O_DB, - enable_b => I_CEB, - wren_b => I_WEB - ); -end RTL; - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - --- mc_video.v use -entity MC_VID_RAM is - port ( - I_CLKA : in std_logic := '0'; - I_WEA : in std_logic := '0'; - I_CEA : in std_logic := '0'; - I_ADDRA : in std_logic_vector(9 downto 0); - I_DA : in std_logic_vector(7 downto 0); - O_DA : out std_logic_vector(7 downto 0); - - I_CLKB : in std_logic := '0'; - I_WEB : in std_logic := '0'; - I_CEB : in std_logic := '0'; - I_ADDRB : in std_logic_vector(9 downto 0); - I_DB : in std_logic_vector(7 downto 0); - O_DB : out std_logic_vector(7 downto 0) - ); -end; - -architecture RTL of MC_VID_RAM is -begin - ram_inst : work.dpram generic map(10,8) - port map - ( - clock_a => I_CLKA, - address_a => I_ADDRA, - data_a => I_DA, - q_a => O_DA, - enable_a => I_CEA, - wren_a => I_WEA, - - clock_b => I_CLKB, - address_b => I_ADDRB, - data_b => I_DB, - q_b => O_DB, - enable_b => I_CEB, - wren_b => I_WEB - ); -end RTL; - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - --- mc_video.v use -entity MC_LRAM is - port ( - I_CLK : in std_logic; - I_ADDR : in std_logic_vector(7 downto 0); - I_D : in std_logic_vector(4 downto 0); - I_WE : in std_logic; - O_Dn : out std_logic_vector(4 downto 0) - ); -end; - -architecture RTL of MC_LRAM is - signal W_D : std_logic_vector(4 downto 0) := (others => '0'); -begin - - O_Dn <= not W_D; - - ram_inst : work.dpram generic map(8,5) - port map - ( - clock_a => I_CLK, - address_a => I_ADDR, - data_a => I_D, - wren_a => not I_WE, - - clock_b => not I_CLK, - address_b => I_ADDR, - data_b => (others => '0'), - q_b => W_D, - enable_b => '1', - wren_b => '0' - ); -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_clocks.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_clocks.vhd deleted file mode 100644 index 5a4d0094..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_clocks.vhd +++ /dev/null @@ -1,85 +0,0 @@ ------------------------------------------------------------------------ --- FPGA MOONCRESTA CLOCK GEN --- --- Version : 1.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- ------------------------------------------------------------------------ -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity CLOCKGEN is -port ( - CLKIN_IN : in std_logic; - RST_IN : in std_logic; - -- - O_CLK_24M : out std_logic; - O_CLK_18M : out std_logic; - O_CLK_12M : out std_logic; - O_CLK_06M : out std_logic -); -end; - -architecture RTL of CLOCKGEN is - signal state : std_logic_vector(1 downto 0) := (others => '0'); - signal ctr1 : std_logic_vector(1 downto 0) := (others => '0'); - signal ctr2 : std_logic_vector(2 downto 0) := (others => '0'); - signal CLKFB_IN : std_logic := '0'; - signal CLK0_BUF : std_logic := '0'; - signal CLKFX_BUF : std_logic := '0'; - signal CLK_72M : std_logic := '0'; - signal I_DCM_LOCKED : std_logic := '0'; - -begin - dcm_inst : DCM_SP - generic map ( - CLKFX_MULTIPLY => 9, - CLKFX_DIVIDE => 4, - CLKIN_PERIOD => 31.25 - ) - port map ( - CLKIN => CLKIN_IN, - CLKFB => CLKFB_IN, - RST => RST_IN, - CLK0 => CLK0_BUF, - CLKFX => CLKFX_BUF, - LOCKED => I_DCM_LOCKED - ); - - BUFG0 : BUFG port map (I=> CLK0_BUF, O => CLKFB_IN); - BUFG1 : BUFG port map (I=> CLKFX_BUF, O => CLK_72M); - O_CLK_06M <= ctr2(2); - O_CLK_12M <= ctr2(1); - O_CLK_24M <= ctr2(0); - O_CLK_18M <= ctr1(1); - - -- generate all clocks, 36Mhz, 18Mhz, 24Mhz, 12Mhz and 6Mhz - process(CLK_72M) - begin - if rising_edge(CLK_72M) then - if (I_DCM_LOCKED = '0') then - state <= "00"; - ctr1 <= (others=>'0'); - ctr2 <= (others=>'0'); - else - ctr1 <= ctr1 + 1; - case state is - when "00" => state <= "01"; ctr2 <= ctr2 + 1; - when "01" => state <= "10"; ctr2 <= ctr2 + 1; - when "10" => state <= "00"; - when "11" => state <= "00"; - when others => null; - end case; - end if; - end if; - end process; -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_col_pal.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_col_pal.vhd deleted file mode 100644 index c4dc06ad..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_col_pal.vhd +++ /dev/null @@ -1,78 +0,0 @@ -------------------------------------------------------------------------------- --- FPGA MOONCRESTA COLOR-PALETTE --- --- Version : 2.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 9-18 added Xilinx Device. K.Degawa -------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; --- use ieee.numeric_std.all; - ---library UNISIM; --- use UNISIM.Vcomponents.all; - -entity MC_COL_PAL is -port ( - I_CLK_12M : in std_logic; - I_CLK_6M : in std_logic; - I_VID : in std_logic_vector(1 downto 0); - I_COL : in std_logic_vector(2 downto 0); - I_C_BLnX : in std_logic; - - O_C_BLXn : out std_logic; - O_STARS_OFFn : out std_logic; - O_R : out std_logic_vector(2 downto 0); - O_G : out std_logic_vector(2 downto 0); - O_B : out std_logic_vector(2 downto 0) -); -end; - -architecture RTL of MC_COL_PAL is - --- Parts 6M -------------------------------------------------------- - signal W_COL_ROM_DO : std_logic_vector(7 downto 0) := (others => '0'); - signal W_6M_DI : std_logic_vector(6 downto 0) := (others => '0'); - signal W_6M_DO : std_logic_vector(6 downto 0) := (others => '0'); - signal W_6M_CLR : std_logic := '0'; - -begin - W_6M_DI <= I_COL(2 downto 0) & I_VID(1 downto 0) & not (I_VID(0) or I_VID(1)) & I_C_BLnX; - W_6M_CLR <= W_6M_DI(0) or W_6M_DO(0); - O_C_BLXn <= W_6M_DI(0) or W_6M_DO(0); - O_STARS_OFFn <= W_6M_DO(1); - ---always@(posedge I_CLK_6M or negedge W_6M_CLR) - process(I_CLK_6M, W_6M_CLR) - begin - if (W_6M_CLR = '0') then - W_6M_DO <= (others => '0'); - elsif rising_edge(I_CLK_6M) then - W_6M_DO <= W_6M_DI; - end if; - end process; - - --- COL ROM -------------------------------------------------------- ---wire W_COL_ROM_OEn = W_6M_DO[1]; - - galaxian_6l : entity work.GALAXIAN_6L - port map ( - CLK => I_CLK_12M, - ADDR => W_6M_DO(6 downto 2), - DATA => W_COL_ROM_DO - ); - - --- VID OUT -------------------------------------------------------- - O_R <= W_COL_ROM_DO(2 downto 0); - O_G <= W_COL_ROM_DO(5 downto 3); - O_B <= W_COL_ROM_DO(7 downto 6) & "0"; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_hv_count.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_hv_count.vhd deleted file mode 100644 index f310321b..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_hv_count.vhd +++ /dev/null @@ -1,145 +0,0 @@ ------------------------------------------------------------------------ --- FPGA MOONCRESTA H & V COUNTER --- --- Version : 2.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 9-22 ------------------------------------------------------------------------ --- MoonCrest hv_count --- H_CNT 0 - 255 , 384 - 511 Total 384 count --- V_CNT 0 - 255 , 504 - 511 Total 264 count -------------------------------------------------------------------------------------------- --- H_CNT[0], H_CNT[1], H_CNT[2], H_CNT[3], H_CNT[4], H_CNT[5], H_CNT[6], H_CNT[7], H_CNT[8], --- 1 H 2 H 4 H 8 H 16 H 32 H 64 H 128 H 256 H -------------------------------------------------------------------------------------------- --- V_CNT[0], V_CNT[1], V_CNT[2], V_CNT[3], V_CNT[4], V_CNT[5], V_CNT[6], V_CNT[7] --- 1 V 2 V 4 V 8 V 16 V 32 V 64 V 128 V -------------------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_HV_COUNT is - port( - I_CLK : in std_logic; - I_RSTn : in std_logic; - O_H_CNT : out std_logic_vector(8 downto 0); - O_H_SYNC : out std_logic; - O_H_BL : out std_logic; - O_V_BL2n : out std_logic; - O_V_CNT : out std_logic_vector(7 downto 0); - O_V_SYNC : out std_logic; - O_V_BLn : out std_logic; - O_C_BLn : out std_logic - ); -end; - -architecture RTL of MC_HV_COUNT is - signal H_CNT : std_logic_vector(8 downto 0) := (others => '0'); - signal V_CNT : std_logic_vector(8 downto 0) := (others => '0'); - signal H_SYNC : std_logic := '0'; - signal H_CLK : std_logic := '0'; - signal H_BL : std_logic := '0'; - signal V_BLn : std_logic := '0'; - signal V_BL2n : std_logic := '0'; - -begin ---------- H_COUNT ---------------------------------------- - - process(I_CLK) - begin - if rising_edge(I_CLK) then - if (H_CNT = 255) then - H_CNT <= std_logic_vector(to_unsigned(384, H_CNT'length)); - else - H_CNT <= H_CNT + 1 ; - end if; - end if; - end process; - - O_H_CNT <= H_CNT; - ---------- H_SYNC ---------------------------------------- - H_CLK <= H_CNT(4); - process(H_CLK, H_CNT(8)) - begin - if (H_CNT(8) = '0') then - H_SYNC <= '0'; - elsif rising_edge(H_CLK) then - H_SYNC <= (not H_CNT(6) ) and H_CNT(5); - end if; - end process; - - O_H_SYNC <= H_SYNC; - ---------- H_BL ------------------------------------------ - - process(I_CLK) - begin - if rising_edge(I_CLK) then - if H_CNT = 387 then - H_BL <= '1'; - elsif H_CNT = 503 then - H_BL <= '0'; - end if; - end if; - end process; - - O_H_BL <= H_BL; - ---------- V_COUNT ---------------------------------------- - process(H_SYNC, I_RSTn) - begin - if (I_RSTn = '0') then - V_CNT <= (others => '0'); - elsif rising_edge(H_SYNC) then - if (V_CNT = 255) then - V_CNT <= std_logic_vector(to_unsigned(504, V_CNT'length)); - else - V_CNT <= V_CNT + 1 ; - end if; - end if; - end process; - - O_V_CNT <= V_CNT(7 downto 0); - O_V_SYNC <= V_CNT(8); - ---------- V_BLn ------------------------------------------ - - process(H_SYNC) - begin - if rising_edge(H_SYNC) then - if V_CNT(7 downto 0) = 239 then - V_BLn <= '0'; - elsif V_CNT(7 downto 0) = 15 then - V_BLn <= '1'; - end if; - end if; - end process; - - process(H_SYNC) - begin - if rising_edge(H_SYNC) then - if V_CNT(7 downto 0) = 239 then - V_BL2n <= '0'; - elsif V_CNT(7 downto 0) = 16 then - V_BL2n <= '1'; - end if; - end if; - end process; - - O_V_BLn <= V_BLn; - O_V_BL2n <= V_BL2n; -------- C_BLn ------------------------------------------ - O_C_BLn <= V_BLn and (not H_CNT(8)); - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_inport.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_inport.vhd deleted file mode 100644 index 677a03d1..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_inport.vhd +++ /dev/null @@ -1,74 +0,0 @@ ------------------------------------------------------------------------ --- FPGA MOONCRESTA INPORT --- --- Version : 1.01 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004-4-30 galaxian modify by K.DEGAWA ------------------------------------------------------------------------ - --- DIP SW 0 1 2 3 4 5 ------------------------------------------------------------------ --- COIN CHUTE --- 1 COIN/1 PLAY 1'b0 1'b0 --- 2 COIN/1 PLAY 1'b1 1'b0 --- 1 COIN/2 PLAY 1'b0 1'b1 --- FREE PLAY 1'b1 1'b1 --- BOUNS --- 1'b0 1'b0 --- 1'b1 1'b0 --- 1'b0 1'b1 --- 1'b1 1'b1 --- LIVES --- 2 1'b0 --- 3 1'b1 -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_INPORT is -port ( - I_COIN1 : in std_logic; -- active high - I_COIN2 : in std_logic; -- active high - I_1P_LE : in std_logic; -- active high - I_1P_RI : in std_logic; -- active high - I_1P_SH : in std_logic; -- active high - I_2P_LE : in std_logic; - I_2P_RI : in std_logic; - I_2P_SH : in std_logic; - I_1P_START : in std_logic; -- active high - I_2P_START : in std_logic; -- active high - I_SW0_OE : in std_logic; - I_SW1_OE : in std_logic; - I_DIP_OE : in std_logic; - O_D : out std_logic_vector(7 downto 0) -); - -end; - -architecture RTL of MC_INPORT is - - constant W_TABLE : std_logic := '0'; -- UP = 0; - constant W_TEST : std_logic := '0'; - constant W_SERVICE : std_logic := '0'; - - signal W_SW0_DO : std_logic_vector(7 downto 0) := (others => '0'); - signal W_SW1_DO : std_logic_vector(7 downto 0) := (others => '0'); - signal W_DIP_DO : std_logic_vector(7 downto 0) := (others => '0'); - -begin - - W_SW0_DO <= x"00" when I_SW0_OE = '0' else '0' & I_2P_SH & I_1P_SH & I_COIN1 & I_1P_LE & I_1P_RI & I_2P_LE & I_2P_RI; - W_SW1_DO <= x"00" when I_SW1_OE = '0' else "10" & I_1P_LE & I_1P_RI & I_2P_LE & I_2P_RI & I_2P_START & I_1P_START; - W_DIP_DO <= x"00" when I_DIP_OE = '0' else "00000100"; - O_D <= W_SW0_DO or W_SW1_DO or W_DIP_DO ; - -end RTL; \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_ld_pls.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_ld_pls.vhd deleted file mode 100644 index 0945fe35..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_ld_pls.vhd +++ /dev/null @@ -1,115 +0,0 @@ -------------------------------------------------------------------------------- --- FPGA MOONCRESTA VIDEO-LD_PLS_GEN --- --- Version : 2.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 9-22 The problem where missile sometimes didn't come out was fixed. -------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_LD_PLS is - port ( - I_CLK_6M : in std_logic; - I_H_CNT : in std_logic_vector(8 downto 0); - I_3D_DI : in std_logic; - - O_LDn : out std_logic; - O_CNTRLDn : out std_logic; - O_CNTRCLRn : out std_logic; - O_COLLn : out std_logic; - O_VPLn : out std_logic; - O_OBJDATALn : out std_logic; - O_MLDn : out std_logic; - O_SLDn : out std_logic - ); -end; - -architecture RTL of MC_LD_PLS is - signal W_4C1_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_4C2_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_4C1_Q3 : std_logic := '0'; - signal W_4C2_B : std_logic := '0'; - signal W_4D1_G : std_logic := '0'; - signal W_4D1_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_4D2_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_5C_Q : std_logic := '0'; - signal W_HCNT : std_logic := '0'; -begin - O_LDn <= W_4D1_G; - O_CNTRLDn <= W_4D1_Q(2); - O_CNTRCLRn <= W_4D1_Q(0); - O_COLLn <= W_4D2_Q(2); - O_VPLn <= W_4D2_Q(0); - O_OBJDATALn <= W_4C1_Q(2); - O_MLDn <= W_4C2_Q(0); - O_SLDn <= W_4C2_Q(1); - W_4D1_G <= not (I_H_CNT(0) and I_H_CNT(1) and I_H_CNT(2)); - W_HCNT <= not (I_H_CNT(6) and I_H_CNT(5) and I_H_CNT(4) and I_H_CNT(3)); - -- Parts 4D - u_4d1 : entity work.LOGIC_74XX139 - port map( - I_G => W_4D1_G, - I_Sel(1) => I_H_CNT(8), - I_Sel(0) => I_H_CNT(3), - O_Q =>W_4D1_Q - ); - - u_4d2 : entity work.LOGIC_74XX139 - port map( - I_G => W_5C_Q, - I_Sel(1) => I_H_CNT(2), - I_Sel(0) => I_H_CNT(1), - O_Q => W_4D2_Q - ); - - -- Parts 4C - u_4c1 : entity work.LOGIC_74XX139 - port map( - I_G => W_4D2_Q(1), - I_Sel(1) => I_H_CNT(8), - I_Sel(0) => I_H_CNT(3), - O_Q => W_4C1_Q - ); - - u_4c2 : entity work.LOGIC_74XX139 - port map( - I_G => W_4D1_Q(3), - I_Sel(1) => W_4C2_B, - I_Sel(0) => W_HCNT, - O_Q => W_4C2_Q - ); - - process(I_CLK_6M) - begin - if falling_edge(I_CLK_6M) then - W_5C_Q <= I_H_CNT(0); - end if; - end process; - - -- 2004-9-22 added - process(I_CLK_6M) - begin - if rising_edge(I_CLK_6M) then - W_4C1_Q3 <= W_4C1_Q(3); - end if; - end process; - - process(W_4C1_Q3) - begin - if rising_edge(W_4C1_Q3) then - W_4C2_B <= I_3D_DI; - end if; - end process; - -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_logic.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_logic.vhd deleted file mode 100644 index 5dae8a87..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_logic.vhd +++ /dev/null @@ -1,92 +0,0 @@ -------------------------------------------------------------------------------- --- FPGA MOONCRESTA LOGIC IP MODULE --- --- Version : 1.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- -------------------------------------------------------------------------------- - -library ieee; - use ieee.std_logic_1164.all; - use ieee.numeric_std.all; - -------------------------------------------------------------------------------- --- 74xx138 --- 3-to-8 line decoder -------------------------------------------------------------------------------- -entity LOGIC_74XX138 is - port ( - I_G1 : in std_logic; - I_G2a : in std_logic; - I_G2b : in std_logic; - I_Sel : in std_logic_vector(2 downto 0); - O_Q : out std_logic_vector(7 downto 0) - ); -end logic_74xx138; - -architecture RTL of LOGIC_74XX138 is - signal I_G : std_logic_vector(2 downto 0) := (others => '0'); - -begin - I_G <= I_G1 & I_G2a & I_G2b; - - xx138 : process(I_G, I_Sel) - begin - if(I_G = "100" ) then - case I_Sel is - when "000" => O_Q <= "11111110"; - when "001" => O_Q <= "11111101"; - when "010" => O_Q <= "11111011"; - when "011" => O_Q <= "11110111"; - when "100" => O_Q <= "11101111"; - when "101" => O_Q <= "11011111"; - when "110" => O_Q <= "10111111"; - when "111" => O_Q <= "01111111"; - when others => null; - end case; - else - O_Q <= (others => '1'); - end if; - end process; -end RTL; - -library ieee; - use ieee.std_logic_1164.all; - use ieee.numeric_std.all; - -------------------------------------------------------------------------------- --- 74xx139 --- 2-to-4 line decoder -------------------------------------------------------------------------------- -entity LOGIC_74XX139 is - port ( - I_G : in std_logic; - I_Sel : in std_logic_vector(1 downto 0); - O_Q : out std_logic_vector(3 downto 0) - ); -end; - -architecture RTL of LOGIC_74XX139 is -begin - xx139 : process (I_G, I_Sel) - begin - if I_G = '0' then - case I_Sel is - when "00" => O_Q <= "1110"; - when "01" => O_Q <= "1101"; - when "10" => O_Q <= "1011"; - when "11" => O_Q <= "0111"; - when others => null; - end case; - else - O_Q <= "1111"; - end if; - end process; -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_missile.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_missile.vhd deleted file mode 100644 index e924e09e..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_missile.vhd +++ /dev/null @@ -1,107 +0,0 @@ --------------------------------------------------------------------------------- ----- FPGA MOONCRESTA VIDEO-MISSILE ----- ----- Version : 2.00 ----- ----- Copyright(c) 2004 Katsumi Degawa , All rights reserved ----- ----- Important ! ----- ----- This program is freeware for non-commercial use. ----- The author does not guarantee this program. ----- You can use this at your own risk. ----- ----- 2004- 9-22 The problem which missile didn't sometimes come out from was improved. --------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_MISSILE is - port( - I_CLK_6M : in std_logic; - I_CLK_18M : in std_logic; - I_C_BLn_X : in std_logic; - I_MLDn : in std_logic; - I_SLDn : in std_logic; - I_HPOS : in std_logic_vector (7 downto 0); - - O_MISSILEn : out std_logic; - O_SHELLn : out std_logic - ); -end; - -architecture RTL of MC_MISSILE is - signal W_45R_Q : std_logic_vector (7 downto 0) := (others => '0'); - signal W_45S_Q : std_logic_vector (7 downto 0) := (others => '0'); - signal W_5P1_Q : std_logic := '0'; - signal W_5P2_Q : std_logic := '0'; - signal W_5P1_CLK : std_logic := '0'; - signal W_5P2_CLK : std_logic := '0'; -begin - - O_MISSILEn <= W_5P1_CLK; - O_SHELLn <= W_5P2_CLK; - - -- missile counter - process(I_CLK_6M) - begin - if falling_edge(I_CLK_6M) then - if (I_MLDn = '0') then - W_45R_Q <= I_HPOS; - else - if (I_C_BLn_X = '1') then - W_45R_Q <= W_45R_Q + 1; - if (W_45R_Q(7 downto 0) = "11111010") and W_5P1_Q = '1' then - W_5P1_CLK <= '0'; - else - W_5P1_CLK <= '1'; - end if; - end if; - end if; - end if; - end process; - - -- shell counter - process(I_CLK_6M) - begin - if falling_edge(I_CLK_6M) then - if(I_SLDn = '0') then - W_45S_Q <= I_HPOS; - else - if(I_C_BLn_X = '1') then - W_45S_Q <= W_45S_Q + 1; - if (W_45S_Q(7 downto 0) = "11111010") and W_5P2_Q = '1' then - W_5P2_CLK <= '0'; - else - W_5P2_CLK <= '1'; - end if; - end if; - end if; - end if; - end process; - - -- Standard D-type flip-flop with D input tied low, async active - -- low preset (I_MLDn) and clock active on rising edge (W_5P1_CLK) - process(W_5P1_CLK, I_MLDn) - begin - if (I_MLDn = '0') then - W_5P1_Q <= '1'; - elsif rising_edge(W_5P1_CLK) then - W_5P1_Q <= '0'; - end if; - end process; - - -- Standard D-type flip-flop with D input tied low, async active - -- low preset (I_SLDn) and clock active on rising edge (W_5P2_CLK) - process(W_5P2_CLK, I_SLDn) - begin - if (I_SLDn = '0') then - W_5P2_Q <= '1'; - elsif rising_edge(W_5P2_CLK) then - W_5P2_Q <= '0'; - end if; - end process; - -end RTL; \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_a.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_a.vhd deleted file mode 100644 index ee0c66be..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_a.vhd +++ /dev/null @@ -1,117 +0,0 @@ ------------------------------------------------------------------------------- --- FPGA MOONCRESTA SOUND I/F --- --- Version : 1.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- ------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - use IEEE.std_logic_arith.all; - -entity MC_SOUND_A is -port ( - I_CLK_12M : in std_logic; - I_CLK_6M : in std_logic; - I_H_CNT1 : in std_logic; - I_BD : in std_logic_vector(7 downto 0); - I_PITCH : in std_logic; - I_VOL1 : in std_logic; - I_VOL2 : in std_logic; - - O_SDAT : out std_logic_vector(7 downto 0); - O_DO : out std_logic_vector(3 downto 0) -); -end; - -architecture RTL of MC_SOUND_A is - signal W_PITCH : std_logic := '0'; - signal W_89K_LDn : std_logic := '0'; - signal W_89K_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_89K_LDATA : std_logic_vector(7 downto 0) := (others => '0'); - signal W_6T_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_SDAT0 : std_logic_vector(7 downto 0) := (others => '0'); - signal W_SDAT2 : std_logic_vector(7 downto 0) := (others => '0'); - signal W_SDAT3 : std_logic_vector(7 downto 0) := (others => '0'); - -begin - O_DO <= W_6T_Q; - - process (I_CLK_12M) - begin - if rising_edge(I_CLK_12M) then - W_PITCH <= I_PITCH; - if (W_89K_Q = x"ff") then - W_89K_LDn <= '0' ; - else - W_89K_LDn <= '1' ; - end if; - end if; - end process; - - -- Parts 9J - process (W_PITCH) - begin - if falling_edge(W_PITCH) then - W_89K_LDATA <= I_BD; - end if; - end process; - - process (I_H_CNT1) - begin - if rising_edge(I_H_CNT1) then - if (W_89K_LDn = '0') then - W_89K_Q <= W_89K_LDATA; - else - W_89K_Q <= W_89K_Q + 1; - end if; - end if; - end process; - - process (W_89K_LDn) - begin - if falling_edge(W_89K_LDn) then - W_6T_Q <= W_6T_Q + 1; - end if; - end process; - - process (I_CLK_6M) - begin - if rising_edge(I_CLK_6M) then - O_SDAT <= (x"14" + W_SDAT3) + (W_SDAT0 + W_SDAT2); - - if W_6T_Q(0)='1' then - W_SDAT0 <= x"2a"; - else - W_SDAT0 <= (others => '0'); - end if; - - if W_6T_Q(2)='1' then - if I_VOL1 = '1' then - W_SDAT2 <= x"69"; - else - W_SDAT2 <= x"39"; - end if; - else - W_SDAT2 <= (others => '0'); - end if; - - if (W_6T_Q(3)='1') and (I_VOL2 = '1') then - W_SDAT3 <= x"48" ; - else - W_SDAT3 <= (others => '0'); - end if; - - end if; - end process; - -end; \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_b.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_b.vhd deleted file mode 100644 index b74e4bb1..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_b.vhd +++ /dev/null @@ -1,253 +0,0 @@ --------------------------------------------------------------------------------- ----- FPGA MOONCRESTA WAVE SOUND ----- ----- Version : 1.00 ----- ----- Copyright(c) 2004 Katsumi Degawa , All rights reserved ----- ----- Important ! ----- ----- This program is freeware for non-commercial use. ----- The author does no guarantee this program. ----- You can use this at your own risk. ----- --------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - ---pragma translate_off --- use ieee.std_logic_textio.all; --- use std.textio.all; ---pragma translate_on - -entity MC_SOUND_B is - port( - I_CLK1 : in std_logic; -- 6MHz - I_RSTn : in std_logic; - I_SW : in std_logic_vector( 2 downto 0); - I_DAC : in std_logic_vector( 3 downto 0); - I_FS : in std_logic_vector( 2 downto 0); - O_SDAT : out std_logic_vector( 7 downto 0) - ); -end; - -architecture RTL of MC_SOUND_B is -constant sample_time : integer := 557; -- sample time : 557 = 11025Hz, 557/2 = 22050Hz -constant fire_cnt : std_logic_vector(15 downto 0) := x"2000"; -constant hit_cnt : std_logic_vector(15 downto 0) := x"2000"; - -signal sample : std_logic_vector(10 downto 0) := (others => '0'); -signal sample_pls : std_logic := '0'; -signal s0_trg_ff : std_logic_vector( 1 downto 0) := (others => '0'); -signal s0_trg : std_logic := '0'; -signal s1_trg_ff : std_logic_vector( 1 downto 0) := (others => '0'); -signal s1_trg : std_logic := '0'; -signal fire_addr : std_logic_vector(15 downto 0) := (others => '0'); -signal hit_addr : std_logic_vector(15 downto 0) := (others => '0'); - -signal WAV_D0 : std_logic_vector( 7 downto 0) := (others => '0'); -signal WAV_D1 : std_logic_vector( 7 downto 0) := (others => '0'); - -signal W_VCO1_STEP: std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO2_STEP: std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO3_STEP: std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO1_OUT : std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO2_OUT : std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO3_OUT : std_logic_vector( 7 downto 0) := (others => '0'); -signal VCO_CTR : std_logic_vector(24 downto 0) := (others => '0'); - -signal SDAT : std_logic_vector(10 downto 0) := (others => '0'); - -begin - -- ideally we should divide by 5 because this is the sum of 5 channels - -- but in practice we divide by 4 and just clip sounds that are too loud. - O_SDAT <= SDAT(9 downto 2) when SDAT(10) = '0' else (others=>'1'); -- clip overrange sounds - - process(I_CLK1) - begin - if rising_edge(I_CLK1) then - SDAT <= ("000" & W_VCO3_OUT) + ( ( ("000" & W_VCO2_OUT) + ("000" & W_VCO1_OUT) ) + ( ("000" & WAV_D0) + ("000" & WAV_D1) ) ); - end if; - end process; - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - sample <= (others => '0'); - sample_pls <= '0'; - elsif rising_edge(I_CLK1) then - if (sample = sample_time - 1) then - sample <= (others => '0'); - sample_pls <= '1'; - else - sample <= sample + 1; - sample_pls <= '0'; - end if; - end if; - end process; - -------------- FIRE SOUND ------------------------------------------ - mc_roms_fire : entity work.GAL_FIR - port map ( - CLK => I_CLK1, - ADDR => fire_addr(12 downto 0), - DATA => WAV_D0 - ); - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - s0_trg_ff <= (others => '0'); - s0_trg <= '0'; - elsif rising_edge(I_CLK1) then - s0_trg_ff(0) <= I_SW(0); - s0_trg_ff(1) <= s0_trg_ff(0); - s0_trg <= not s0_trg_ff(1) and s0_trg_ff(0); - end if; - end process; - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - fire_addr <= fire_cnt; - elsif rising_edge(I_CLK1) then - if (s0_trg = '1') then - fire_addr <= (others => '0'); - else - if(sample_pls = '1') then - if(fire_addr <= fire_cnt) then - fire_addr <= fire_addr + 1; - else - fire_addr <= fire_addr ; - end if; - end if; - end if; - end if; - end process; - -------------- HIT SOUND ------------------------------------------ - mc_roms_hit : entity work.GAL_HIT - port map ( - CLK => I_CLK1, - ADDR => hit_addr(12 downto 0), - DATA => WAV_D1 - ); - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - s1_trg_ff <= (others => '0'); - s1_trg <= '0'; - elsif rising_edge(I_CLK1) then - s1_trg_ff(0) <= I_SW(1); - s1_trg_ff(1) <= s1_trg_ff(0); - s1_trg <= not s1_trg_ff(1) and s1_trg_ff(0); - end if; - end process; - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - hit_addr <= hit_cnt; - elsif rising_edge(I_CLK1) then - if (s1_trg = '1') then - hit_addr <= (others => '0'); - else - if (sample_pls = '1') then - if (hit_addr <= hit_cnt) then - hit_addr <= hit_addr + 1 ; - else - hit_addr <= hit_addr ; - end if; - end if; - end if; - end if; - end process; - ---------------- EFFECT SOUND --------------------------------------- - --- 9R modulator voltage generator based on DAC value - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - VCO_CTR <= (others=>'0'); - elsif rising_edge(I_CLK1) then - VCO_CTR <= VCO_CTR + (not I_DAC); - end if; - end process; - - -- modulator frequency lookup tables for the three VCOs - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - elsif rising_edge(I_CLK1) then - case VCO_CTR(23 downto 19) is - when "00000" => W_VCO1_STEP <= x"2A"; W_VCO2_STEP <= x"3A"; W_VCO3_STEP <= x"54"; - when "00001" => W_VCO1_STEP <= x"29"; W_VCO2_STEP <= x"39"; W_VCO3_STEP <= x"53"; - when "00010" => W_VCO1_STEP <= x"29"; W_VCO2_STEP <= x"38"; W_VCO3_STEP <= x"52"; - when "00011" => W_VCO1_STEP <= x"28"; W_VCO2_STEP <= x"37"; W_VCO3_STEP <= x"50"; - when "00100" => W_VCO1_STEP <= x"28"; W_VCO2_STEP <= x"37"; W_VCO3_STEP <= x"4F"; - when "00101" => W_VCO1_STEP <= x"27"; W_VCO2_STEP <= x"36"; W_VCO3_STEP <= x"4E"; - when "00110" => W_VCO1_STEP <= x"27"; W_VCO2_STEP <= x"35"; W_VCO3_STEP <= x"4D"; - when "00111" => W_VCO1_STEP <= x"26"; W_VCO2_STEP <= x"34"; W_VCO3_STEP <= x"4C"; - when "01000" => W_VCO1_STEP <= x"25"; W_VCO2_STEP <= x"33"; W_VCO3_STEP <= x"4A"; - when "01001" => W_VCO1_STEP <= x"25"; W_VCO2_STEP <= x"33"; W_VCO3_STEP <= x"49"; - when "01010" => W_VCO1_STEP <= x"24"; W_VCO2_STEP <= x"32"; W_VCO3_STEP <= x"48"; - when "01011" => W_VCO1_STEP <= x"24"; W_VCO2_STEP <= x"31"; W_VCO3_STEP <= x"47"; - when "01100" => W_VCO1_STEP <= x"23"; W_VCO2_STEP <= x"30"; W_VCO3_STEP <= x"46"; - when "01101" => W_VCO1_STEP <= x"23"; W_VCO2_STEP <= x"2F"; W_VCO3_STEP <= x"44"; - when "01110" => W_VCO1_STEP <= x"22"; W_VCO2_STEP <= x"2F"; W_VCO3_STEP <= x"43"; - when "01111" => W_VCO1_STEP <= x"21"; W_VCO2_STEP <= x"2E"; W_VCO3_STEP <= x"42"; - when "10000" => W_VCO1_STEP <= x"21"; W_VCO2_STEP <= x"2D"; W_VCO3_STEP <= x"41"; - when "10001" => W_VCO1_STEP <= x"20"; W_VCO2_STEP <= x"2C"; W_VCO3_STEP <= x"40"; - when "10010" => W_VCO1_STEP <= x"20"; W_VCO2_STEP <= x"2B"; W_VCO3_STEP <= x"3F"; - when "10011" => W_VCO1_STEP <= x"1F"; W_VCO2_STEP <= x"2B"; W_VCO3_STEP <= x"3D"; - when "10100" => W_VCO1_STEP <= x"1F"; W_VCO2_STEP <= x"2A"; W_VCO3_STEP <= x"3C"; - when "10101" => W_VCO1_STEP <= x"1E"; W_VCO2_STEP <= x"29"; W_VCO3_STEP <= x"3B"; - when "10110" => W_VCO1_STEP <= x"1E"; W_VCO2_STEP <= x"28"; W_VCO3_STEP <= x"3A"; - when "10111" => W_VCO1_STEP <= x"1D"; W_VCO2_STEP <= x"28"; W_VCO3_STEP <= x"39"; - when "11000" => W_VCO1_STEP <= x"1C"; W_VCO2_STEP <= x"27"; W_VCO3_STEP <= x"37"; - when "11001" => W_VCO1_STEP <= x"1C"; W_VCO2_STEP <= x"26"; W_VCO3_STEP <= x"36"; - when "11010" => W_VCO1_STEP <= x"1B"; W_VCO2_STEP <= x"25"; W_VCO3_STEP <= x"35"; - when "11011" => W_VCO1_STEP <= x"1B"; W_VCO2_STEP <= x"24"; W_VCO3_STEP <= x"34"; - when "11100" => W_VCO1_STEP <= x"1A"; W_VCO2_STEP <= x"24"; W_VCO3_STEP <= x"33"; - when "11101" => W_VCO1_STEP <= x"1A"; W_VCO2_STEP <= x"23"; W_VCO3_STEP <= x"32"; - when "11110" => W_VCO1_STEP <= x"19"; W_VCO2_STEP <= x"22"; W_VCO3_STEP <= x"30"; - when "11111" => W_VCO1_STEP <= x"18"; W_VCO2_STEP <= x"21"; W_VCO3_STEP <= x"2F"; - when others => null; - end case; - end if; - end process; - --- 8R VCO 240Hz - 140Hz (8) - mc_vco1 : entity work.MC_SOUND_VCO - port map ( - I_CLK => I_CLK1, - I_RSTn => I_RSTn, - I_FS => I_FS(0), - I_STEP => W_VCO1_STEP, - O_WAV => W_VCO1_OUT - ); - --- 8S VCO 330Hz - 190Hz (11) - mc_vco2 : entity work.MC_SOUND_VCO - port map ( - I_CLK => I_CLK1, - I_RSTn => I_RSTn, - I_FS => I_FS(1), - I_STEP => W_VCO2_STEP, - O_WAV => W_VCO2_OUT - ); - --- 8T VCO 480Hz - 270Hz (16) - mc_vco3 : entity work.MC_SOUND_VCO - port map ( - I_CLK => I_CLK1, - I_RSTn => I_RSTn, - I_FS => I_FS(2), - I_STEP => W_VCO3_STEP, - O_WAV => W_VCO3_OUT - ); -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_vco.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_vco.vhd deleted file mode 100644 index e2a63e85..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_sound_vco.vhd +++ /dev/null @@ -1,49 +0,0 @@ --------------------------------------------------------------------------------- ----- FPGA VCO --------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -use work.sine_package.all; - --- O_CLK = (I_CLK / 2^20) * I_STEP -entity MC_SOUND_VCO is - port( - I_CLK : in std_logic; - I_RSTn : in std_logic; - I_FS : in std_logic; - I_STEP : in std_logic_vector( 7 downto 0); - O_WAV : out std_logic_vector( 7 downto 0) - ); -end; - -architecture RTL of MC_SOUND_VCO is - signal VCO1_CTR : std_logic_vector(19 downto 0) := (others => '0'); - signal sine : std_logic_vector(14 downto 0) := (others => '0'); - -begin - O_WAV <= sine(14 downto 7); - process(I_CLK, I_RSTn) - begin - if (I_RSTn = '0') then - VCO1_CTR <= (others=>'0'); - elsif rising_edge(I_CLK) then - if I_FS = '1' then - VCO1_CTR <= VCO1_CTR + I_STEP; - case VCO1_CTR(19 downto 18) is - when "00" => - sine <= "100000000000000" + std_logic_vector( to_signed(get_table_value( VCO1_CTR(17 downto 11)), 15)); - when "01" => - sine <= "100000000000000" + std_logic_vector( to_signed(get_table_value( not VCO1_CTR(17 downto 11)), 15)); - when "10" => - sine <= "100000000000000" + std_logic_vector(-to_signed(get_table_value( VCO1_CTR(17 downto 11)), 15)); - when "11" => - sine <= "100000000000000" + std_logic_vector(-to_signed(get_table_value( not VCO1_CTR(17 downto 11)), 15)); - when others => null; - end case; - end if; - end if; - end process; -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_stars.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_stars.vhd deleted file mode 100644 index b91197b3..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_stars.vhd +++ /dev/null @@ -1,90 +0,0 @@ ------------------------------------------------------------------------------- --- FPGA MOONCRESTA STARS --- --- Version : 2.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- ------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.numeric_std.all; - -entity MC_STARS is - port ( - I_CLK_18M : in std_logic; - I_CLK_6M : in std_logic; - I_H_FLIP : in std_logic; - I_V_SYNC : in std_logic; - I_8HF : in std_logic; - I_256HnX : in std_logic; - I_1VF : in std_logic; - I_2V : in std_logic; - I_STARS_ON : in std_logic; - I_STARS_OFFn : in std_logic; - - O_R : out std_logic_vector(1 downto 0); - O_G : out std_logic_vector(1 downto 0); - O_B : out std_logic_vector(1 downto 0); - O_NOISE : out std_logic - ); -end; - -architecture RTL of MC_STARS is - signal CLK_1C : std_logic := '0'; - signal W_2D_Qn : std_logic := '0'; - - signal W_3B : std_logic := '0'; - signal noise : std_logic := '0'; - signal W_2A : std_logic := '0'; - signal W_4P : std_logic := '0'; - signal CLK_1AB : std_logic := '0'; - signal W_1AB_Q : std_logic_vector(15 downto 0) := (others => '0'); - signal W_1C_Q : std_logic_vector( 1 downto 0) := (others => '0'); -begin - O_R <= (W_1AB_Q( 9) & W_1AB_Q (8) ) when (W_2A = '0' and W_4P = '0') else (others => '0'); - O_G <= (W_1AB_Q(11) & W_1AB_Q(10) ) when (W_2A = '0' and W_4P = '0') else (others => '0'); - O_B <= (W_1AB_Q(13) & W_1AB_Q(12) ) when (W_2A = '0' and W_4P = '0') else (others => '0'); - - CLK_1C <= not (I_CLK_18M and (not I_CLK_6M )and (not I_V_SYNC) and I_256HnX); - CLK_1AB <= not (CLK_1C or (not (I_H_FLIP or W_1C_Q(1)))); - W_3B <= W_2D_Qn xor W_1AB_Q(4); - - W_2A <= '0' when (W_1AB_Q(7 downto 0) = x"ff") else '1'; - W_4P <= not (( I_8HF xor I_1VF ) and W_2D_Qn and I_STARS_OFFn); - - O_NOISE <= noise ; - - process(I_2V) - begin - if rising_edge(I_2V) then - noise <= W_2D_Qn; - end if; - end process; - - process(CLK_1C, I_V_SYNC) - begin - if(I_V_SYNC = '1') then - W_1C_Q <= (others => '0'); - elsif rising_edge(CLK_1C) then - W_1C_Q <= W_1C_Q(0) & '1'; - end if; - end process; - - process(CLK_1AB, I_STARS_ON) - begin - if(I_STARS_ON = '0') then - W_1AB_Q <= (others => '0'); - W_2D_Qn <= '1'; - elsif rising_edge(CLK_1AB) then - W_1AB_Q <= W_1AB_Q(14 downto 0) & W_3B; - W_2D_Qn <= not W_1AB_Q(15); - end if; - end process; -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_video.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_video.vhd deleted file mode 100644 index dbe0d0d8..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mc_video.vhd +++ /dev/null @@ -1,433 +0,0 @@ --------------------------------------------------------------------------------- ----- FPGA GALAXIAN VIDEO ----- ----- Version : 2.50 ----- ----- Copyright(c) 2004 Katsumi Degawa , All rights reserved ----- ----- Important ! ----- ----- This program is freeware for non-commercial use. ----- The author does not guarantee this program. ----- You can use this at your own risk. ----- ----- 2004- 4-30 galaxian modify by K.DEGAWA ----- 2004- 5- 6 first release. ----- 2004- 8-23 Improvement with T80-IP. ----- 2004- 9-22 The problem where missile sometimes didn't come out was fixed. --------------------------------------------------------------------------------- - -------------------------------------------------------------------------------------------- --- H_CNT(0), H_CNT(1), H_CNT(2), H_CNT(3), H_CNT(4), H_CNT(5), H_CNT(6), H_CNT(7), H_CNT(8), --- 1 H 2 H 4 H 8 H 16 H 32H 64 H 128 H 256 H -------------------------------------------------------------------------------------------- --- V_CNT(0), V_CNT(1), V_CNT(2), V_CNT(3), V_CNT(4), V_CNT(5), V_CNT(6), V_CNT(7) --- 1 V 2 V 4 V 8 V 16 V 32 V 64 V 128 V -------------------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_VIDEO is - port( - I_CLK_18M : in std_logic; - I_CLK_12M : in std_logic; - I_CLK_6M : in std_logic; - I_H_CNT : in std_logic_vector(8 downto 0); - I_V_CNT : in std_logic_vector(7 downto 0); - I_H_FLIP : in std_logic; - I_V_FLIP : in std_logic; - I_V_BLn : in std_logic; - I_C_BLn : in std_logic; - - I_A : in std_logic_vector(9 downto 0); - I_BD : in std_logic_vector(7 downto 0); - I_OBJ_SUB_A : in std_logic_vector(2 downto 0); - I_OBJ_RAM_RQ : in std_logic; - I_OBJ_RAM_RD : in std_logic; - I_OBJ_RAM_WR : in std_logic; - I_VID_RAM_RD : in std_logic; - I_VID_RAM_WR : in std_logic; - I_DRIVER_WR : in std_logic; - - O_C_BLnX : out std_logic; - O_8HF : out std_logic; - O_256HnX : out std_logic; - O_1VF : out std_logic; - O_MISSILEn : out std_logic; - O_SHELLn : out std_logic; - - O_BD : out std_logic_vector(7 downto 0); - O_VID : out std_logic_vector(1 downto 0); - O_COL : out std_logic_vector(2 downto 0) - ); -end; - -architecture RTL of MC_VIDEO is - - signal WB_LDn : std_logic := '0'; - signal WB_CNTRLDn : std_logic := '0'; - signal WB_CNTRCLRn : std_logic := '0'; - signal WB_COLLn : std_logic := '0'; - signal WB_VPLn : std_logic := '0'; - signal WB_OBJDATALn : std_logic := '0'; - signal WB_MLDn : std_logic := '0'; - signal WB_SLDn : std_logic := '0'; - signal W_3D : std_logic := '0'; - signal W_LDn : std_logic := '0'; - signal W_CNTRLDn : std_logic := '0'; - signal W_CNTRCLRn : std_logic := '0'; - signal W_COLLn : std_logic := '0'; - signal W_VPLn : std_logic := '0'; - signal W_OBJDATALn : std_logic := '0'; - signal W_MLDn : std_logic := '0'; - signal W_SLDn : std_logic := '0'; - signal W_VID : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_COL : std_logic_vector( 2 downto 0) := (others => '0'); - - signal W_H_POSI : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_2M_Q : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_6K_Q : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_6P_Q : std_logic_vector( 6 downto 0) := (others => '0'); - signal W_45T_Q : std_logic_vector( 7 downto 0) := (others => '0'); - signal reg_2KL : std_logic_vector( 7 downto 0) := (others => '0'); - signal reg_2HJ : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_RV : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_RC : std_logic_vector( 2 downto 0) := (others => '0'); - - signal W_O_OBJ_ROM_A : std_logic_vector(10 downto 0) := (others => '0'); - signal W_VID_RAM_A : std_logic_vector(11 downto 0) := (others => '0'); - signal W_VID_RAM_AA : std_logic_vector(11 downto 0) := (others => '0'); - signal W_VID_RAM_AB : std_logic_vector(11 downto 0) := (others => '0'); - signal C_2HJ : std_logic_vector( 1 downto 0) := (others => '0'); - signal C_2KL : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_CD : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_1M : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_3L_A : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_3L_B : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_3L_Y : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_LRAM_DI : std_logic_vector( 4 downto 0) := (others => '0'); - signal W_LRAM_DO : std_logic_vector( 4 downto 0) := (others => '0'); - signal W_1H_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_1K_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_LRAM_A : std_logic_vector( 7 downto 0) := (others => '0'); --- signal W_OBJ_RAM_A : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_RAM_AB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_RAM_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_RAM_DOA : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_RAM_DOB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_ROM_A : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_ROM_AB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VF_CNT : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VID_RAM_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VID_RAM_DI : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VID_RAM_DOA : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VID_RAM_DOB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_HF_CNT : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_45N_Q : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_6J_Q : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_6J_DA : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_6J_DB : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_256HnX : std_logic := '0'; - signal W_2N : std_logic := '0'; - signal W_45T_CLR : std_logic := '0'; - signal W_C_BLnX : std_logic := '0'; - signal W_H_FLIP1 : std_logic := '0'; - signal W_H_FLIP2 : std_logic := '0'; - signal W_H_FLIP1X : std_logic := '0'; - signal W_H_FLIP2X : std_logic := '0'; - signal W_LRAM_AND : std_logic := '0'; - signal W_RAW0 : std_logic := '0'; - signal W_RAW1 : std_logic := '0'; - signal W_RAW_OR : std_logic := '0'; - signal W_SRCLK : std_logic := '0'; - signal W_SRLD : std_logic := '0'; - signal W_VID_RAM_CS : std_logic := '0'; - signal W_CLK_6Mn : std_logic := '0'; - -begin - ld_pls : entity work.MC_LD_PLS - port map( - I_CLK_6M => I_CLK_6M, - I_H_CNT => I_H_CNT, - I_3D_DI => W_3D, - - O_LDn => WB_LDn, - O_CNTRLDn => WB_CNTRLDn, - O_CNTRCLRn => WB_CNTRCLRn, - O_COLLn => WB_COLLn, - O_VPLn => WB_VPLn, - O_OBJDATALn => WB_OBJDATALn, - O_MLDn => WB_MLDn, - O_SLDn => WB_SLDn - ); - - obj_ram : entity work.MC_OBJ_RAM - port map( - I_CLKA => I_CLK_12M, - I_ADDRA => I_A(7 downto 0), - I_WEA => I_OBJ_RAM_WR, - I_CEA => I_OBJ_RAM_RQ, - I_DA => I_BD, - O_DA => W_OBJ_RAM_DOA, - - I_CLKB => I_CLK_12M, - I_ADDRB => W_OBJ_RAM_AB, - I_WEB => '0', - I_CEB => '1', - I_DB => x"00", - O_DB => W_OBJ_RAM_DOB - ); - - lram : entity work.MC_LRAM - port map( - I_CLK => I_CLK_18M, - I_ADDR => W_LRAM_A, - I_WE => W_CLK_6Mn, - I_D => W_LRAM_DI, - O_Dn => W_LRAM_DO - ); - - missile : entity work.MC_MISSILE - port map( - I_CLK_18M => I_CLK_18M, - I_CLK_6M => I_CLK_6M, - I_C_BLn_X => W_C_BLnX, - I_MLDn => W_MLDn, - I_SLDn => W_SLDn, - I_HPOS => W_H_POSI, - O_MISSILEn => O_MISSILEn, - O_SHELLn => O_SHELLn - ); - - vid_ram : entity work.MC_VID_RAM - port map ( - I_CLKA => I_CLK_12M, - I_ADDRA => I_A(9 downto 0), - I_DA => W_VID_RAM_DI, - I_WEA => I_VID_RAM_WR, - I_CEA => W_VID_RAM_CS, - O_DA => W_VID_RAM_DOA, - - I_CLKB => I_CLK_12M, - I_ADDRB => W_VID_RAM_A(9 downto 0), - I_DB => x"00", - I_WEB => '0', - I_CEB => '1', - O_DB => W_VID_RAM_DOB - ); - - -- 1K VID-Rom - k_rom : entity work.GALAXIAN_1K - port map ( - CLK => I_CLK_12M, - ADDR => W_O_OBJ_ROM_A, - DATA => W_1K_D - ); - - -- 1H VID-Rom - h_rom : entity work.GALAXIAN_1H - port map( - CLK => I_CLK_12M, - ADDR => W_O_OBJ_ROM_A, - DATA => W_1H_D - ); - ------------------------------------------------------------------------------------ - - process(I_CLK_12M) - begin - if falling_edge(I_CLK_12M) then - W_LDn <= WB_LDn; - W_CNTRLDn <= WB_CNTRLDn; - W_CNTRCLRn <= WB_CNTRCLRn; - W_COLLn <= WB_COLLn; - W_VPLn <= WB_VPLn; - W_OBJDATALn <= WB_OBJDATALn; - W_MLDn <= WB_MLDn; - W_SLDn <= WB_SLDn; - end if; - end process; - - W_CLK_6Mn <= not I_CLK_6M; - - W_6J_DA <= I_H_FLIP & W_HF_CNT(7) & W_HF_CNT(3) & I_H_CNT(2); - W_6J_DB <= W_OBJ_D(6) & ( W_HF_CNT(3) and I_H_CNT(1) ) & I_H_CNT(2) & I_H_CNT(1); - W_6J_Q <= W_6J_DB when I_H_CNT(8) = '1' else W_6J_DA; - - W_H_FLIP1 <= (not I_H_CNT(8)) and I_H_FLIP; - - W_HF_CNT(7 downto 3) <= not I_H_CNT(7 downto 3) when W_H_FLIP1 = '1' else I_H_CNT(7 downto 3); - W_VF_CNT <= not I_V_CNT when I_V_FLIP = '1' else I_V_CNT; - - O_8HF <= W_HF_CNT(3); - O_1VF <= W_VF_CNT(0); - W_H_FLIP2 <= W_6J_Q(3); - --- Parts 4F,5F - W_OBJ_RAM_AB <= "0" & I_H_CNT(8) & W_6J_Q(2) & W_HF_CNT(6 downto 4) & W_6J_Q(1 downto 0); --- W_OBJ_RAM_A <= W_OBJ_RAM_AB when I_OBJ_RAM_RQ = '0' else I_A(7 downto 0) ; - - process(I_CLK_12M) - begin - if rising_edge(I_CLK_12M) then - W_H_POSI <= W_OBJ_RAM_DOB; - end if; - end process; - - W_OBJ_RAM_D <= W_OBJ_RAM_DOA when I_OBJ_RAM_RD = '1' else (others => '0'); - --- Parts 4L - process(W_OBJDATALn) - begin - if rising_edge(W_OBJDATALn) then - W_OBJ_D <= W_H_POSI; - end if; - end process; - --- Parts 4,5N - W_45N_Q <= W_VF_CNT + W_H_POSI; - W_3D <= '0' when W_45N_Q = x"FF" else '1'; - - process(W_VPLn, I_V_BLn) - begin - if (I_V_BLn = '0') then - W_2M_Q <= (others => '0'); - elsif rising_edge(W_VPLn) then - W_2M_Q <= W_45N_Q; - end if; - end process; - - W_2N <= I_H_CNT(8) and W_OBJ_D(7); - W_1M <= W_2M_Q(3 downto 0) xor (W_2N & W_2N & W_2N & W_2N); - W_VID_RAM_CS <= I_VID_RAM_RD or I_VID_RAM_WR; - W_VID_RAM_DI <= I_BD when I_VID_RAM_WR = '1' else (others => '0'); - W_VID_RAM_AA <= (not ( W_2M_Q(7) and W_2M_Q(6) and W_2M_Q(5) and W_2M_Q(4))) & (not W_VID_RAM_CS) & "0000000000"; -- I_A(9:0) - W_VID_RAM_AB <= "00" & W_2M_Q(7 downto 4) & W_1M(3) & W_HF_CNT(7 downto 3); - W_VID_RAM_A <= W_VID_RAM_AB when I_C_BLn = '1' else W_VID_RAM_AA; - W_VID_RAM_D <= W_VID_RAM_DOA when I_VID_RAM_RD = '1' else (others => '0'); - ----- VIDEO DATA OUTPUT -------------- - - O_BD <= W_OBJ_RAM_D or W_VID_RAM_D; - W_SRLD <= not (W_LDn or W_VID_RAM_A(11)); - W_OBJ_ROM_AB <= W_OBJ_D(5 downto 0) & W_1M(3) & (W_OBJ_D(6) xor I_H_CNT(3)); - W_OBJ_ROM_A <= W_OBJ_ROM_AB when I_H_CNT(8) = '1' else W_VID_RAM_DOB; - W_O_OBJ_ROM_A <= W_OBJ_ROM_A & W_1M(2 downto 0); - ------------------------------------------------------------------------------------ - - W_3L_A <= reg_2HJ(7) & reg_2KL(7) & "1" & W_SRLD; - W_3L_B <= reg_2HJ(0) & reg_2KL(0) & W_SRLD & "1"; - W_3L_Y <= W_3L_B when W_H_FLIP2X = '1' else W_3L_A; -- (3)=RAW1,(2)=RAW0 - C_2HJ <= W_3L_Y(1 downto 0); - C_2KL <= W_3L_Y(1 downto 0); - W_RAW0 <= W_3L_Y(2); - W_RAW1 <= W_3L_Y(3); - W_SRCLK <= I_CLK_6M; - --------- PARTS 2KL ---------------------------------------------- - - process(W_SRCLK) - begin - if rising_edge(W_SRCLK) then - case(C_2KL) is - when "00" => reg_2KL <= reg_2KL; - when "10" => reg_2KL <= reg_2KL(6 downto 0) & "0"; - when "01" => reg_2KL <= "0" & reg_2KL(7 downto 1); - when "11" => reg_2KL <= W_1K_D; - when others => null; - end case; - end if; - end process; - --------- PARTS 2HJ ---------------------------------------------- - - process(W_SRCLK) - begin - if rising_edge(W_SRCLK) then - case(C_2HJ) is - when "00" => reg_2HJ <= reg_2HJ; - when "10" => reg_2HJ <= reg_2HJ(6 downto 0) & "0"; - when "01" => reg_2HJ <= "0" & reg_2HJ(7 downto 1); - when "11" => reg_2HJ <= W_1H_D; - when others => null; - end case; - end if; - end process; - -------- SHT2 ----------------------------------------------------- - --- Parts 6K - process(W_COLLn) - begin - if rising_edge(W_COLLn) then - W_6K_Q <= W_H_POSI(2 downto 0); - end if; - end process; - --- Parts 6P - process(I_CLK_6M) - begin - if rising_edge(I_CLK_6M) then - if (W_LDn = '0') then - W_6P_Q <= W_H_FLIP2 & W_H_FLIP1 & I_C_BLn & (not I_H_CNT(8)) & W_6K_Q(2 downto 0); - else - W_6P_Q <= W_6P_Q; - end if; - end if; - end process; - - W_H_FLIP2X <= W_6P_Q(6); - W_H_FLIP1X <= W_6P_Q(5); - W_C_BLnX <= W_6P_Q(4); - W_256HnX <= W_6P_Q(3); - W_CD <= W_6P_Q(2 downto 0); - O_256HnX <= W_256HnX; - O_C_BLnX <= W_C_BLnX; - W_45T_CLR <= W_CNTRCLRn or W_256HnX ; - - process(I_CLK_6M, W_45T_CLR) - begin - if (W_45T_CLR = '0') then - W_45T_Q <= (others => '0'); - elsif rising_edge(I_CLK_6M) then - if (W_CNTRLDn = '0') then - W_45T_Q <= W_H_POSI; - else - W_45T_Q <= W_45T_Q + 1; - end if; - end if; - end process; - - W_LRAM_A <= (not W_45T_Q) when W_H_FLIP1X = '1' else W_45T_Q; - - process(I_CLK_6M) - begin - if falling_edge(I_CLK_6M) then - W_RV <= W_LRAM_DO(1 downto 0); - W_RC <= W_LRAM_DO(4 downto 2); - end if; - end process; - - W_LRAM_AND <= not (not ((W_LRAM_A(4) or W_LRAM_A(5)) or (W_LRAM_A(6) or W_LRAM_A(7))) or W_256HnX ); - W_RAW_OR <= W_RAW0 or W_RAW1 ; - - W_VID(0) <= not (not (W_RAW0 and W_RV(1)) and W_RV(0)); - W_VID(1) <= not (not (W_RAW1 and W_RV(0)) and W_RV(1)); - W_COL(0) <= not (not (W_RAW_OR and W_CD(0) and W_RC(1) and W_RC(2)) and W_RC(0)); - W_COL(1) <= not (not (W_RAW_OR and W_CD(1) and W_RC(2) and W_RC(0)) and W_RC(1)); - W_COL(2) <= not (not (W_RAW_OR and W_CD(2) and W_RC(0) and W_RC(1)) and W_RC(2)); - - O_VID <= W_VID; - O_COL <= W_COL; - - W_LRAM_DI(0) <= W_LRAM_AND and W_VID(0); - W_LRAM_DI(1) <= W_LRAM_AND and W_VID(1); - W_LRAM_DI(2) <= W_LRAM_AND and W_COL(0); - W_LRAM_DI(3) <= W_LRAM_AND and W_COL(1); - W_LRAM_DI(4) <= W_LRAM_AND and W_COL(2); - -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mist_io.v b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mist_io.v deleted file mode 100644 index 2f41221f..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/mist_io.v +++ /dev/null @@ -1,530 +0,0 @@ -// -// mist_io.v -// -// mist_io for the MiST board -// http://code.google.com/p/mist-board/ -// -// Copyright (c) 2014 Till Harbaum -// Copyright (c) 2015-2017 Sorgelig -// -// This source file 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 source file 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, see . -// -/////////////////////////////////////////////////////////////////////// - -// -// Use buffer to access SD card. It's time-critical part. -// Made module synchroneous with 2 clock domains: clk_sys and SPI_SCK -// (Sorgelig) -// -// for synchronous projects default value for PS2DIV is fine for any frequency of system clock. -// clk_ps2 = clk_sys/(PS2DIV*2) -// - -module mist_io #(parameter STRLEN=0, parameter PS2DIV=100) -( - - // parameter STRLEN and the actual length of conf_str have to match - input [(8*STRLEN)-1:0] conf_str, - - // Global clock. It should be around 100MHz (higher is better). - input clk_sys, - - // Global SPI clock from ARM. 24MHz - input SPI_SCK, - - input CONF_DATA0, - input SPI_SS2, - output SPI_DO, - input SPI_DI, - - output reg [7:0] joystick_0, - output reg [7:0] joystick_1, -// output reg [31:0] joystick_2, -// output reg [31:0] joystick_3, -// output reg [31:0] joystick_4, - output reg [15:0] joystick_analog_0, - output reg [15:0] joystick_analog_1, - output [1:0] buttons, - output [1:0] switches, - output scandoublerD, - output ypbpr, - - output reg [31:0] status, - - // SD config - input sd_conf, - input sd_sdhc, - output [1:0] img_mounted, // signaling that new image has been mounted - output reg [31:0] img_size, // size of image in bytes - - // SD block level access - input [31:0] sd_lba, - input [1:0] sd_rd, - input [1:0] sd_wr, - output reg sd_ack, - output reg sd_ack_conf, - - // SD byte level access. Signals for 2-PORT altsyncram. - output reg [8:0] sd_buff_addr, - output reg [7:0] sd_buff_dout, - input [7:0] sd_buff_din, - output reg sd_buff_wr, - - // ps2 keyboard emulation - output ps2_kbd_clk, - output reg ps2_kbd_data, - output ps2_mouse_clk, - output reg ps2_mouse_data, - - // ps2 alternative interface. - - // [8] - extended, [9] - pressed, [10] - toggles with every press/release - output reg [10:0] ps2_key = 0, - - // [24] - toggles with every event - output reg [24:0] ps2_mouse = 0, - - // ARM -> FPGA download - input ioctl_ce, - output reg ioctl_download = 0, // signal indicating an active download - output reg [7:0] ioctl_index, // menu index used to upload the file - output reg ioctl_wr = 0, - output reg [24:0] ioctl_addr, - output reg [7:0] ioctl_dout -); - -reg [7:0] but_sw; -reg [2:0] stick_idx; - -reg [1:0] mount_strobe = 0; -assign img_mounted = mount_strobe; - -assign buttons = but_sw[1:0]; -assign switches = but_sw[3:2]; -assign scandoublerD = but_sw[4]; -assign ypbpr = but_sw[5]; - -// this variant of user_io is for 8 bit cores (type == a4) only -wire [7:0] core_type = 8'ha4; - -// command byte read by the io controller -wire drive_sel = sd_rd[1] | sd_wr[1]; -wire [7:0] sd_cmd = { 4'h6, sd_conf, sd_sdhc, sd_wr[drive_sel], sd_rd[drive_sel] }; - -reg [7:0] cmd; -reg [2:0] bit_cnt; // counts bits 0-7 0-7 ... -reg [9:0] byte_cnt; // counts bytes - -reg spi_do; -assign SPI_DO = CONF_DATA0 ? 1'bZ : spi_do; - -reg [7:0] spi_data_out; - -// SPI transmitter -always@(negedge SPI_SCK) spi_do <= spi_data_out[~bit_cnt]; - -reg [7:0] spi_data_in; -reg spi_data_ready = 0; - -// SPI receiver -always@(posedge SPI_SCK or posedge CONF_DATA0) begin - reg [6:0] sbuf; - reg [31:0] sd_lba_r; - reg drive_sel_r; - - if(CONF_DATA0) begin - bit_cnt <= 0; - byte_cnt <= 0; - spi_data_out <= core_type; - end - else - begin - bit_cnt <= bit_cnt + 1'd1; - sbuf <= {sbuf[5:0], SPI_DI}; - - // finished reading command byte - if(bit_cnt == 7) begin - if(!byte_cnt) cmd <= {sbuf, SPI_DI}; - - spi_data_in <= {sbuf, SPI_DI}; - spi_data_ready <= ~spi_data_ready; - if(~&byte_cnt) byte_cnt <= byte_cnt + 8'd1; - - spi_data_out <= 0; - case({(!byte_cnt) ? {sbuf, SPI_DI} : cmd}) - // reading config string - 8'h14: if(byte_cnt < STRLEN) spi_data_out <= conf_str[(STRLEN - byte_cnt - 1)<<3 +:8]; - - // reading sd card status - 8'h16: if(byte_cnt == 0) begin - spi_data_out <= sd_cmd; - sd_lba_r <= sd_lba; - drive_sel_r <= drive_sel; - end else if (byte_cnt == 1) begin - spi_data_out <= drive_sel_r; - end else if(byte_cnt < 6) spi_data_out <= sd_lba_r[(5-byte_cnt)<<3 +:8]; - - // reading sd card write data - 8'h18: spi_data_out <= sd_buff_din; - endcase - end - end -end - -reg [31:0] ps2_key_raw = 0; -wire pressed = (ps2_key_raw[15:8] != 8'hf0); -wire extended = (~pressed ? (ps2_key_raw[23:16] == 8'he0) : (ps2_key_raw[15:8] == 8'he0)); - -// transfer to clk_sys domain -always@(posedge clk_sys) begin - reg old_ss1, old_ss2; - reg old_ready1, old_ready2; - reg [2:0] b_wr; - reg got_ps2 = 0; - - old_ss1 <= CONF_DATA0; - old_ss2 <= old_ss1; - old_ready1 <= spi_data_ready; - old_ready2 <= old_ready1; - - sd_buff_wr <= b_wr[0]; - if(b_wr[2] && (~&sd_buff_addr)) sd_buff_addr <= sd_buff_addr + 1'b1; - b_wr <= (b_wr<<1); - - if(old_ss2) begin - got_ps2 <= 0; - sd_ack <= 0; - sd_ack_conf <= 0; - sd_buff_addr <= 0; - if(got_ps2) begin - if(cmd == 4) ps2_mouse[24] <= ~ps2_mouse[24]; - if(cmd == 5) begin - ps2_key <= {~ps2_key[10], pressed, extended, ps2_key_raw[7:0]}; - if(ps2_key_raw == 'hE012E07C) ps2_key[9:0] <= 'h37C; // prnscr pressed - if(ps2_key_raw == 'h7CE0F012) ps2_key[9:0] <= 'h17C; // prnscr released - if(ps2_key_raw == 'hF014F077) ps2_key[9:0] <= 'h377; // pause pressed - end - end - end - else - if(old_ready2 ^ old_ready1) begin - - if(cmd == 8'h18 && ~&sd_buff_addr) sd_buff_addr <= sd_buff_addr + 1'b1; - - if(byte_cnt < 2) begin - - if (cmd == 8'h19) sd_ack_conf <= 1; - if((cmd == 8'h17) || (cmd == 8'h18)) sd_ack <= 1; - mount_strobe <= 0; - - if(cmd == 5) ps2_key_raw <= 0; - end else begin - - case(cmd) - // buttons and switches - 8'h01: but_sw <= spi_data_in; - 8'h02: joystick_0 <= spi_data_in; - 8'h03: joystick_1 <= spi_data_in; -// 8'h60: if (byte_cnt < 5) joystick_0[(byte_cnt-1)<<3 +:8] <= spi_data_in; -// 8'h61: if (byte_cnt < 5) joystick_1[(byte_cnt-1)<<3 +:8] <= spi_data_in; -// 8'h62: if (byte_cnt < 5) joystick_2[(byte_cnt-1)<<3 +:8] <= spi_data_in; -// 8'h63: if (byte_cnt < 5) joystick_3[(byte_cnt-1)<<3 +:8] <= spi_data_in; -// 8'h64: if (byte_cnt < 5) joystick_4[(byte_cnt-1)<<3 +:8] <= spi_data_in; - // store incoming ps2 mouse bytes - 8'h04: begin - got_ps2 <= 1; - case(byte_cnt) - 2: ps2_mouse[7:0] <= spi_data_in; - 3: ps2_mouse[15:8] <= spi_data_in; - 4: ps2_mouse[23:16] <= spi_data_in; - endcase - ps2_mouse_fifo[ps2_mouse_wptr] <= spi_data_in; - ps2_mouse_wptr <= ps2_mouse_wptr + 1'd1; - end - - // store incoming ps2 keyboard bytes - 8'h05: begin - got_ps2 <= 1; - ps2_key_raw[31:0] <= {ps2_key_raw[23:0], spi_data_in}; - ps2_kbd_fifo[ps2_kbd_wptr] <= spi_data_in; - ps2_kbd_wptr <= ps2_kbd_wptr + 1'd1; - end - - 8'h15: status[7:0] <= spi_data_in; - - // send SD config IO -> FPGA - // flag that download begins - // sd card knows data is config if sd_dout_strobe is asserted - // with sd_ack still being inactive (low) - 8'h19, - // send sector IO -> FPGA - // flag that download begins - 8'h17: begin - sd_buff_dout <= spi_data_in; - b_wr <= 1; - end - - // joystick analog - 8'h1a: begin - // first byte is joystick index - if(byte_cnt == 2) stick_idx <= spi_data_in[2:0]; - else if(byte_cnt == 3) begin - // second byte is x axis - if(stick_idx == 0) joystick_analog_0[15:8] <= spi_data_in; - else if(stick_idx == 1) joystick_analog_1[15:8] <= spi_data_in; - end else if(byte_cnt == 4) begin - // third byte is y axis - if(stick_idx == 0) joystick_analog_0[7:0] <= spi_data_in; - else if(stick_idx == 1) joystick_analog_1[7:0] <= spi_data_in; - end - end - - // notify image selection - 8'h1c: mount_strobe[spi_data_in[0]] <= 1; - - // send image info - 8'h1d: if(byte_cnt<6) img_size[(byte_cnt-2)<<3 +:8] <= spi_data_in; - - // status, 32bit version - 8'h1e: if(byte_cnt<6) status[(byte_cnt-2)<<3 +:8] <= spi_data_in; - default: ; - endcase - end - end -end - - -/////////////////////////////// PS2 /////////////////////////////// -// 8 byte fifos to store ps2 bytes -localparam PS2_FIFO_BITS = 3; - -reg clk_ps2; -always @(negedge clk_sys) begin - integer cnt; - cnt <= cnt + 1'd1; - if(cnt == PS2DIV) begin - clk_ps2 <= ~clk_ps2; - cnt <= 0; - end -end - -// keyboard -reg [7:0] ps2_kbd_fifo[1<= 1)&&(ps2_kbd_tx_state < 9)) begin - ps2_kbd_data <= ps2_kbd_tx_byte[0]; // data bits - ps2_kbd_tx_byte[6:0] <= ps2_kbd_tx_byte[7:1]; // shift down - if(ps2_kbd_tx_byte[0]) - ps2_kbd_parity <= !ps2_kbd_parity; - end - - // transmission of parity - if(ps2_kbd_tx_state == 9) ps2_kbd_data <= ps2_kbd_parity; - - // transmission of stop bit - if(ps2_kbd_tx_state == 10) ps2_kbd_data <= 1; // stop bit is 1 - - // advance state machine - if(ps2_kbd_tx_state < 11) ps2_kbd_tx_state <= ps2_kbd_tx_state + 1'd1; - else ps2_kbd_tx_state <= 0; - end - end -end - -// mouse -reg [7:0] ps2_mouse_fifo[1<= 1)&&(ps2_mouse_tx_state < 9)) begin - ps2_mouse_data <= ps2_mouse_tx_byte[0]; // data bits - ps2_mouse_tx_byte[6:0] <= ps2_mouse_tx_byte[7:1]; // shift down - if(ps2_mouse_tx_byte[0]) - ps2_mouse_parity <= !ps2_mouse_parity; - end - - // transmission of parity - if(ps2_mouse_tx_state == 9) ps2_mouse_data <= ps2_mouse_parity; - - // transmission of stop bit - if(ps2_mouse_tx_state == 10) ps2_mouse_data <= 1; // stop bit is 1 - - // advance state machine - if(ps2_mouse_tx_state < 11) ps2_mouse_tx_state <= ps2_mouse_tx_state + 1'd1; - else ps2_mouse_tx_state <= 0; - end - end -end - - -/////////////////////////////// DOWNLOADING /////////////////////////////// - -reg [7:0] data_w; -reg [24:0] addr_w; -reg rclk = 0; - -localparam UIO_FILE_TX = 8'h53; -localparam UIO_FILE_TX_DAT = 8'h54; -localparam UIO_FILE_INDEX = 8'h55; - -reg rdownload = 0; - -// data_io has its own SPI interface to the io controller -always@(posedge SPI_SCK, posedge SPI_SS2) begin - reg [6:0] sbuf; - reg [7:0] cmd; - reg [4:0] cnt; - reg [24:0] addr; - - if(SPI_SS2) cnt <= 0; - else begin - // don't shift in last bit. It is evaluated directly - // when writing to ram - if(cnt != 15) sbuf <= { sbuf[5:0], SPI_DI}; - - // count 0-7 8-15 8-15 ... - if(cnt < 15) cnt <= cnt + 1'd1; - else cnt <= 8; - - // finished command byte - if(cnt == 7) cmd <= {sbuf, SPI_DI}; - - // prepare/end transmission - if((cmd == UIO_FILE_TX) && (cnt == 15)) begin - // prepare - if(SPI_DI) begin - case(ioctl_index[4:0]) - 1: addr <= 25'h200000; // TRD buffer at 2MB - 2: addr <= 25'h400000; // tape buffer at 4MB - default: addr <= 25'h150000; // boot rom - endcase - rdownload <= 1; - end else begin - addr_w <= addr; - rdownload <= 0; - end - end - - // command 0x54: UIO_FILE_TX - if((cmd == UIO_FILE_TX_DAT) && (cnt == 15)) begin - addr_w <= addr; - data_w <= {sbuf, SPI_DI}; - addr <= addr + 1'd1; - rclk <= ~rclk; - end - - // expose file (menu) index - if((cmd == UIO_FILE_INDEX) && (cnt == 15)) ioctl_index <= {sbuf, SPI_DI}; - end -end - -// transfer to ioctl_clk domain. -// ioctl_index is set before ioctl_download, so it's stable already -always@(posedge clk_sys) begin - reg rclkD, rclkD2; - - if(ioctl_ce) begin - ioctl_download <= rdownload; - - rclkD <= rclk; - rclkD2 <= rclkD; - ioctl_wr <= 0; - - if(rclkD != rclkD2) begin - ioctl_dout <= data_w; - ioctl_addr <= addr_w; - ioctl_wr <= 1; - end - end -end - -endmodule \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/osd.v b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/osd.v deleted file mode 100644 index b9181763..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/osd.v +++ /dev/null @@ -1,194 +0,0 @@ -// A simple OSD implementation. Can be hooked up between a cores -// VGA output and the physical VGA pins - -module osd ( - // OSDs pixel clock, should be synchronous to cores pixel clock to - // avoid jitter. - input clk_sys, - - // SPI interface - input SPI_SCK, - input SPI_SS3, - input SPI_DI, - - input [1:0] rotate, //[0] - rotate [1] - left or right - - // VGA signals coming from core - input [5:0] R_in, - input [5:0] G_in, - input [5:0] B_in, - input HSync, - input VSync, - - // VGA signals going to video connector - output [5:0] R_out, - output [5:0] G_out, - output [5:0] B_out -); - -parameter OSD_X_OFFSET = 10'd0; -parameter OSD_Y_OFFSET = 10'd0; -parameter OSD_COLOR = 3'd0; - -localparam OSD_WIDTH = 10'd256; -localparam OSD_HEIGHT = 10'd128; - -// ********************************************************************************* -// spi client -// ********************************************************************************* - -// this core supports only the display related OSD commands -// of the minimig -reg osd_enable; -(* ramstyle = "no_rw_check" *) reg [7:0] osd_buffer[2047:0]; // the OSD buffer itself - -// the OSD has its own SPI interface to the io controller -always@(posedge SPI_SCK, posedge SPI_SS3) begin - reg [4:0] cnt; - reg [10:0] bcnt; - reg [7:0] sbuf; - reg [7:0] cmd; - - if(SPI_SS3) begin - cnt <= 0; - bcnt <= 0; - end else begin - sbuf <= {sbuf[6:0], SPI_DI}; - - // 0:7 is command, rest payload - if(cnt < 15) cnt <= cnt + 1'd1; - else cnt <= 8; - - if(cnt == 7) begin - cmd <= {sbuf[6:0], SPI_DI}; - - // lower three command bits are line address - bcnt <= {sbuf[1:0], SPI_DI, 8'h00}; - - // command 0x40: OSDCMDENABLE, OSDCMDDISABLE - if(sbuf[6:3] == 4'b0100) osd_enable <= SPI_DI; - end - - // command 0x20: OSDCMDWRITE - if((cmd[7:3] == 5'b00100) && (cnt == 15)) begin - osd_buffer[bcnt] <= {sbuf[6:0], SPI_DI}; - bcnt <= bcnt + 1'd1; - end - end -end - -// ********************************************************************************* -// video timing and sync polarity anaylsis -// ********************************************************************************* - -// horizontal counter -reg [9:0] h_cnt; -reg [9:0] hs_low, hs_high; -wire hs_pol = hs_high < hs_low; -wire [9:0] dsp_width = hs_pol ? hs_low : hs_high; - -// vertical counter -reg [9:0] v_cnt; -reg [9:0] vs_low, vs_high; -wire vs_pol = vs_high < vs_low; -wire [9:0] dsp_height = vs_pol ? vs_low : vs_high; - -wire doublescan = (dsp_height>350); - -reg ce_pix; -always @(negedge clk_sys) begin - integer cnt = 0; - integer pixsz, pixcnt; - reg hs; - - cnt <= cnt + 1; - hs <= HSync; - - pixcnt <= pixcnt + 1; - if(pixcnt == pixsz) pixcnt <= 0; - ce_pix <= !pixcnt; - - if(hs && ~HSync) begin - cnt <= 0; - pixsz <= (cnt >> 9) - 1; - pixcnt <= 0; - ce_pix <= 1; - end -end - -always @(posedge clk_sys) begin - reg hsD, hsD2; - reg vsD, vsD2; - - if(ce_pix) begin - // bring hsync into local clock domain - hsD <= HSync; - hsD2 <= hsD; - - // falling edge of HSync - if(!hsD && hsD2) begin - h_cnt <= 0; - hs_high <= h_cnt; - end - - // rising edge of HSync - else if(hsD && !hsD2) begin - h_cnt <= 0; - hs_low <= h_cnt; - v_cnt <= v_cnt + 1'd1; - end else begin - h_cnt <= h_cnt + 1'd1; - end - - vsD <= VSync; - vsD2 <= vsD; - - // falling edge of VSync - if(!vsD && vsD2) begin - v_cnt <= 0; - vs_high <= v_cnt; - end - - // rising edge of VSync - else if(vsD && !vsD2) begin - v_cnt <= 0; - vs_low <= v_cnt; - end - end -end - -// area in which OSD is being displayed -wire [9:0] h_osd_start = ((dsp_width - OSD_WIDTH)>> 1) + OSD_X_OFFSET; -wire [9:0] h_osd_end = h_osd_start + OSD_WIDTH; -wire [9:0] v_osd_start = ((dsp_height- (OSD_HEIGHT<> 1) + OSD_Y_OFFSET; -wire [9:0] v_osd_end = v_osd_start + (OSD_HEIGHT<= h_osd_start) && (h_cnt < h_osd_end) && - (VSync != vs_pol) && (v_cnt >= v_osd_start) && (v_cnt < v_osd_end); - -reg [10:0] osd_buffer_addr; -wire [7:0] osd_byte = osd_buffer[osd_buffer_addr]; -reg osd_pixel; - -always @(posedge clk_sys) begin - if(ce_pix) begin - osd_buffer_addr <= rotate[0] ? {rotate[1] ? osd_hcnt_next2[7:5] : ~osd_hcnt_next2[7:5], - rotate[1] ? (doublescan ? ~osd_vcnt[7:0] : ~{osd_vcnt[6:0], 1'b0}) : - (doublescan ? osd_vcnt[7:0] : {osd_vcnt[6:0], 1'b0})} : - {doublescan ? osd_vcnt[7:5] : osd_vcnt[6:4], osd_hcnt_next2[7:0]}; - - osd_pixel <= rotate[0] ? osd_byte[rotate[1] ? osd_hcnt_next[4:2] : ~osd_hcnt_next[4:2]] : - osd_byte[doublescan ? osd_vcnt[4:2] : osd_vcnt[3:1]]; - end -end - -assign R_out = !osd_de ? R_in : {osd_pixel, osd_pixel, OSD_COLOR[2], R_in[5:3]}; -assign G_out = !osd_de ? G_in : {osd_pixel, osd_pixel, OSD_COLOR[1], G_in[5:3]}; -assign B_out = !osd_de ? B_in : {osd_pixel, osd_pixel, OSD_COLOR[0], B_in[5:3]}; - -endmodule diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/pll.qip b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/pll.qip deleted file mode 100644 index 68624e41..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/pll.qip +++ /dev/null @@ -1,4 +0,0 @@ -set_global_assignment -name IP_TOOL_NAME "ALTPLL" -set_global_assignment -name IP_TOOL_VERSION "13.0" -set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll.vhd"] -set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/pll.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/pll.vhd deleted file mode 100644 index 37a2b849..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/pll.vhd +++ /dev/null @@ -1,451 +0,0 @@ --- megafunction wizard: %ALTPLL% --- GENERATION: STANDARD --- VERSION: WM1.0 --- MODULE: altpll - --- ============================================================ --- File Name: pll.vhd --- Megafunction Name(s): --- altpll --- --- Simulation Library Files(s): --- altera_mf --- ============================================================ --- ************************************************************ --- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! --- --- 13.0.1 Build 232 06/12/2013 SP 1 SJ Full Version --- ************************************************************ - - ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions ---and other software and tools, and its AMPP partner logic ---functions, and any output files from any of the foregoing ---(including device programming or simulation files), and any ---associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. - - -LIBRARY ieee; -USE ieee.std_logic_1164.all; - -LIBRARY altera_mf; -USE altera_mf.all; - -ENTITY pll IS - PORT - ( - areset : IN STD_LOGIC := '0'; - inclk0 : IN STD_LOGIC := '0'; - c0 : OUT STD_LOGIC ; - c1 : OUT STD_LOGIC ; - c2 : OUT STD_LOGIC ; - c3 : OUT STD_LOGIC - ); -END pll; - - -ARCHITECTURE SYN OF pll IS - - SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); - SIGNAL sub_wire1 : STD_LOGIC ; - SIGNAL sub_wire2 : STD_LOGIC ; - SIGNAL sub_wire3 : STD_LOGIC ; - SIGNAL sub_wire4 : STD_LOGIC ; - SIGNAL sub_wire5 : STD_LOGIC ; - SIGNAL sub_wire6 : STD_LOGIC_VECTOR (1 DOWNTO 0); - SIGNAL sub_wire7_bv : BIT_VECTOR (0 DOWNTO 0); - SIGNAL sub_wire7 : STD_LOGIC_VECTOR (0 DOWNTO 0); - - - - COMPONENT altpll - GENERIC ( - bandwidth_type : STRING; - clk0_divide_by : NATURAL; - clk0_duty_cycle : NATURAL; - clk0_multiply_by : NATURAL; - clk0_phase_shift : STRING; - clk1_divide_by : NATURAL; - clk1_duty_cycle : NATURAL; - clk1_multiply_by : NATURAL; - clk1_phase_shift : STRING; - clk2_divide_by : NATURAL; - clk2_duty_cycle : NATURAL; - clk2_multiply_by : NATURAL; - clk2_phase_shift : STRING; - clk3_divide_by : NATURAL; - clk3_duty_cycle : NATURAL; - clk3_multiply_by : NATURAL; - clk3_phase_shift : STRING; - compensate_clock : STRING; - inclk0_input_frequency : NATURAL; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - operation_mode : STRING; - pll_type : STRING; - port_activeclock : STRING; - port_areset : STRING; - port_clkbad0 : STRING; - port_clkbad1 : STRING; - port_clkloss : STRING; - port_clkswitch : STRING; - port_configupdate : STRING; - port_fbin : STRING; - port_inclk0 : STRING; - port_inclk1 : STRING; - port_locked : STRING; - port_pfdena : STRING; - port_phasecounterselect : STRING; - port_phasedone : STRING; - port_phasestep : STRING; - port_phaseupdown : STRING; - port_pllena : STRING; - port_scanaclr : STRING; - port_scanclk : STRING; - port_scanclkena : STRING; - port_scandata : STRING; - port_scandataout : STRING; - port_scandone : STRING; - port_scanread : STRING; - port_scanwrite : STRING; - port_clk0 : STRING; - port_clk1 : STRING; - port_clk2 : STRING; - port_clk3 : STRING; - port_clk4 : STRING; - port_clk5 : STRING; - port_clkena0 : STRING; - port_clkena1 : STRING; - port_clkena2 : STRING; - port_clkena3 : STRING; - port_clkena4 : STRING; - port_clkena5 : STRING; - port_extclk0 : STRING; - port_extclk1 : STRING; - port_extclk2 : STRING; - port_extclk3 : STRING; - width_clock : NATURAL - ); - PORT ( - areset : IN STD_LOGIC ; - clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); - inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0) - ); - END COMPONENT; - -BEGIN - sub_wire7_bv(0 DOWNTO 0) <= "0"; - sub_wire7 <= To_stdlogicvector(sub_wire7_bv); - sub_wire4 <= sub_wire0(2); - sub_wire3 <= sub_wire0(0); - sub_wire2 <= sub_wire0(3); - sub_wire1 <= sub_wire0(1); - c1 <= sub_wire1; - c3 <= sub_wire2; - c0 <= sub_wire3; - c2 <= sub_wire4; - sub_wire5 <= inclk0; - sub_wire6 <= sub_wire7(0 DOWNTO 0) & sub_wire5; - - altpll_component : altpll - GENERIC MAP ( - bandwidth_type => "AUTO", - clk0_divide_by => 9, - clk0_duty_cycle => 50, - clk0_multiply_by => 8, - clk0_phase_shift => "0", - clk1_divide_by => 3, - clk1_duty_cycle => 50, - clk1_multiply_by => 2, - clk1_phase_shift => "0", - clk2_divide_by => 9, - clk2_duty_cycle => 50, - clk2_multiply_by => 4, - clk2_phase_shift => "0", - clk3_divide_by => 9, - clk3_duty_cycle => 50, - clk3_multiply_by => 2, - clk3_phase_shift => "0", - compensate_clock => "CLK0", - inclk0_input_frequency => 37037, - intended_device_family => "Cyclone III", - lpm_hint => "CBX_MODULE_PREFIX=pll", - lpm_type => "altpll", - operation_mode => "NORMAL", - pll_type => "AUTO", - port_activeclock => "PORT_UNUSED", - port_areset => "PORT_USED", - port_clkbad0 => "PORT_UNUSED", - port_clkbad1 => "PORT_UNUSED", - port_clkloss => "PORT_UNUSED", - port_clkswitch => "PORT_UNUSED", - port_configupdate => "PORT_UNUSED", - port_fbin => "PORT_UNUSED", - port_inclk0 => "PORT_USED", - port_inclk1 => "PORT_UNUSED", - port_locked => "PORT_UNUSED", - port_pfdena => "PORT_UNUSED", - port_phasecounterselect => "PORT_UNUSED", - port_phasedone => "PORT_UNUSED", - port_phasestep => "PORT_UNUSED", - port_phaseupdown => "PORT_UNUSED", - port_pllena => "PORT_UNUSED", - port_scanaclr => "PORT_UNUSED", - port_scanclk => "PORT_UNUSED", - port_scanclkena => "PORT_UNUSED", - port_scandata => "PORT_UNUSED", - port_scandataout => "PORT_UNUSED", - port_scandone => "PORT_UNUSED", - port_scanread => "PORT_UNUSED", - port_scanwrite => "PORT_UNUSED", - port_clk0 => "PORT_USED", - port_clk1 => "PORT_USED", - port_clk2 => "PORT_USED", - port_clk3 => "PORT_USED", - port_clk4 => "PORT_UNUSED", - port_clk5 => "PORT_UNUSED", - port_clkena0 => "PORT_UNUSED", - port_clkena1 => "PORT_UNUSED", - port_clkena2 => "PORT_UNUSED", - port_clkena3 => "PORT_UNUSED", - port_clkena4 => "PORT_UNUSED", - port_clkena5 => "PORT_UNUSED", - port_extclk0 => "PORT_UNUSED", - port_extclk1 => "PORT_UNUSED", - port_extclk2 => "PORT_UNUSED", - port_extclk3 => "PORT_UNUSED", - width_clock => 5 - ) - PORT MAP ( - areset => areset, - inclk => sub_wire6, - clk => sub_wire0 - ); - - - -END SYN; - --- ============================================================ --- CNX file retrieval info --- ============================================================ --- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" --- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" --- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" --- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" --- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" --- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" --- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" --- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" --- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" --- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" --- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" --- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" --- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" --- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" --- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" --- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "9" --- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "3" --- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "9" --- Retrieval info: PRIVATE: DIV_FACTOR3 NUMERIC "9" --- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" --- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" --- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" --- Retrieval info: PRIVATE: DUTY_CYCLE3 STRING "50.00000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "24.000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "18.000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "12.000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE3 STRING "6.000000" --- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" --- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" --- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" --- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" --- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" --- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" --- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" --- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "27.000" --- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" --- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" --- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" --- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" --- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" --- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" --- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0" --- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" --- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" --- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" --- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" --- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps" --- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "ps" --- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT3 STRING "ps" --- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" --- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" --- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" --- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" --- Retrieval info: PRIVATE: MIRROR_CLK3 STRING "0" --- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "8" --- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "2" --- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "4" --- Retrieval info: PRIVATE: MULT_FACTOR3 NUMERIC "2" --- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" --- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "24.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "18.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "12.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ3 STRING "6.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE3 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT3 STRING "MHz" --- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" --- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT3 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT3 STRING "deg" --- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" --- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" --- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" --- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" --- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" --- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" --- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" --- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" --- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" --- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" --- Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll.mif" --- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" --- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" --- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" --- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" --- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" --- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" --- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" --- Retrieval info: PRIVATE: SPREAD_USE STRING "0" --- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" --- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" --- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" --- Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" --- Retrieval info: PRIVATE: STICKY_CLK3 STRING "1" --- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" --- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" --- Retrieval info: PRIVATE: USE_CLK0 STRING "1" --- Retrieval info: PRIVATE: USE_CLK1 STRING "1" --- Retrieval info: PRIVATE: USE_CLK2 STRING "1" --- Retrieval info: PRIVATE: USE_CLK3 STRING "1" --- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" --- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" --- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" --- Retrieval info: PRIVATE: USE_CLKENA3 STRING "0" --- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" --- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" --- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all --- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" --- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "9" --- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "8" --- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "3" --- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "2" --- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "9" --- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "4" --- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: CLK3_DIVIDE_BY NUMERIC "9" --- Retrieval info: CONSTANT: CLK3_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK3_MULTIPLY_BY NUMERIC "2" --- Retrieval info: CONSTANT: CLK3_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" --- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" --- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" --- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" --- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" --- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" --- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" --- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" --- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" --- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" --- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" --- Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" --- Retrieval info: USED_PORT: c3 0 0 0 0 OUTPUT_CLK_EXT VCC "c3" --- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" --- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 --- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 --- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 --- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 --- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 --- Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 --- Retrieval info: CONNECT: c3 0 0 0 0 @clk 0 0 1 3 --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE --- Retrieval info: LIB_FILE: altera_mf --- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/scandoubler.v b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/scandoubler.v deleted file mode 100644 index 36e71ed2..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/scandoubler.v +++ /dev/null @@ -1,194 +0,0 @@ -// -// scandoubler.v -// -// Copyright (c) 2015 Till Harbaum -// Copyright (c) 2017 Sorgelig -// -// This source file 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 source file 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, see . - -// TODO: Delay vsync one line - -module scandoubler #(parameter LENGTH, parameter HALF_DEPTH) -( - // system interface - input clk_sys, - input ce_pix, - input ce_pix_actual, - - input hq2x, - - // shifter video interface - input hs_in, - input vs_in, - input line_start, - - input [DWIDTH:0] r_in, - input [DWIDTH:0] g_in, - input [DWIDTH:0] b_in, - input mono, - - // output interface - output reg hs_out, - output vs_out, - output [DWIDTH:0] r_out, - output [DWIDTH:0] g_out, - output [DWIDTH:0] b_out -); - -`define BITS_TO_FIT(N) ( \ - N <= 2 ? 0 : \ - N <= 4 ? 1 : \ - N <= 8 ? 2 : \ - N <= 16 ? 3 : \ - N <= 32 ? 4 : \ - N <= 64 ? 5 : \ - N <= 128 ? 6 : \ - N <= 256 ? 7 : \ - N <= 512 ? 8 : \ - N <=1024 ? 9 : 10 ) - -localparam DWIDTH = HALF_DEPTH ? 2 : 5; - -assign vs_out = vs_in; - -reg [2:0] phase; -reg [2:0] ce_div; -reg [7:0] pix_len = 0; -wire [7:0] pl = pix_len + 1'b1; - -reg ce_x1, ce_x4; -reg req_line_reset; -wire ls_in = hs_in | line_start; -always @(negedge clk_sys) begin - reg old_ce; - reg [2:0] ce_cnt; - - reg [7:0] pixsz2, pixsz4 = 0; - - old_ce <= ce_pix; - if(~&pix_len) pix_len <= pix_len + 1'd1; - - ce_x4 <= 0; - ce_x1 <= 0; - - // use such odd comparison to place c_x4 evenly if master clock isn't multiple 4. - if((pl == pixsz4) || (pl == pixsz2) || (pl == (pixsz2+pixsz4))) begin - phase <= phase + 1'd1; - ce_x4 <= 1; - end - - if(~old_ce & ce_pix) begin - pixsz2 <= {1'b0, pl[7:1]}; - pixsz4 <= {2'b00, pl[7:2]}; - ce_x1 <= 1; - ce_x4 <= 1; - pix_len <= 0; - phase <= phase + 1'd1; - - ce_cnt <= ce_cnt + 1'd1; - if(ce_pix_actual) begin - phase <= 0; - ce_div <= ce_cnt + 1'd1; - ce_cnt <= 0; - req_line_reset <= 0; - end - - if(ls_in) req_line_reset <= 1; - end -end - -reg ce_sd; -always @(*) begin - case(ce_div) - 2: ce_sd = !phase[0]; - 4: ce_sd = !phase[1:0]; - default: ce_sd <= 1; - endcase -end - -localparam AWIDTH = `BITS_TO_FIT(LENGTH); -Hq2x #(.LENGTH(LENGTH), .HALF_DEPTH(HALF_DEPTH)) Hq2x -( - .clk(clk_sys), - .ce_x4(ce_x4 & ce_sd), - .inputpixel({b_in,g_in,r_in}), - .mono(mono), - .disable_hq2x(~hq2x), - .reset_frame(vs_in), - .reset_line(req_line_reset), - .read_y(sd_line), - .read_x(sd_h_actual), - .outpixel({b_out,g_out,r_out}) -); - -reg [10:0] sd_h_actual; -always @(*) begin - case(ce_div) - 2: sd_h_actual = sd_h[10:1]; - 4: sd_h_actual = sd_h[10:2]; - default: sd_h_actual = sd_h; - endcase -end - -reg [10:0] sd_h; -reg [1:0] sd_line; -always @(posedge clk_sys) begin - - reg [11:0] hs_max,hs_rise,hs_ls; - reg [10:0] hcnt; - reg [11:0] sd_hcnt; - - reg hs, hs2, vs, ls; - - if(ce_x1) begin - hs <= hs_in; - ls <= ls_in; - - if(ls && !ls_in) hs_ls <= {hcnt,1'b1}; - - // falling edge of hsync indicates start of line - if(hs && !hs_in) begin - hs_max <= {hcnt,1'b1}; - hcnt <= 0; - if(ls && !ls_in) hs_ls <= {10'd0,1'b1}; - end else begin - hcnt <= hcnt + 1'd1; - end - - // save position of rising edge - if(!hs && hs_in) hs_rise <= {hcnt,1'b1}; - - vs <= vs_in; - if(vs && ~vs_in) sd_line <= 0; - end - - if(ce_x4) begin - hs2 <= hs_in; - - // output counter synchronous to input and at twice the rate - sd_hcnt <= sd_hcnt + 1'd1; - sd_h <= sd_h + 1'd1; - if(hs2 && !hs_in) sd_hcnt <= hs_max; - if(sd_hcnt == hs_max) sd_hcnt <= 0; - - // replicate horizontal sync at twice the speed - if(sd_hcnt == hs_max) hs_out <= 0; - if(sd_hcnt == hs_rise) hs_out <= 1; - - if(sd_hcnt == hs_ls) sd_h <= 0; - if(sd_hcnt == hs_ls) sd_line <= sd_line + 1'd1; - end -end - -endmodule diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/sine_package.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/sine_package.vhd deleted file mode 100644 index 473caa04..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/sine_package.vhd +++ /dev/null @@ -1,152 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; - -package sine_package is - - subtype table_value_type is integer range 0 to 16383; - subtype table_index_type is std_logic_vector( 6 downto 0 ); - - function get_table_value (table_index: table_index_type) return table_value_type; - -end; - -package body sine_package is - - function get_table_value (table_index: table_index_type) return table_value_type is - variable table_value: table_value_type; - begin - case table_index is - when "0000000" => table_value := 101; - when "0000001" => table_value := 302; - when "0000010" => table_value := 503; - when "0000011" => table_value := 703; - when "0000100" => table_value := 904; - when "0000101" => table_value := 1105; - when "0000110" => table_value := 1305; - when "0000111" => table_value := 1506; - when "0001000" => table_value := 1706; - when "0001001" => table_value := 1906; - when "0001010" => table_value := 2105; - when "0001011" => table_value := 2304; - when "0001100" => table_value := 2503; - when "0001101" => table_value := 2702; - when "0001110" => table_value := 2900; - when "0001111" => table_value := 3098; - when "0010000" => table_value := 3295; - when "0010001" => table_value := 3491; - when "0010010" => table_value := 3688; - when "0010011" => table_value := 3883; - when "0010100" => table_value := 4078; - when "0010101" => table_value := 4273; - when "0010110" => table_value := 4466; - when "0010111" => table_value := 4659; - when "0011000" => table_value := 4852; - when "0011001" => table_value := 5044; - when "0011010" => table_value := 5234; - when "0011011" => table_value := 5425; - when "0011100" => table_value := 5614; - when "0011101" => table_value := 5802; - when "0011110" => table_value := 5990; - when "0011111" => table_value := 6177; - when "0100000" => table_value := 6362; - when "0100001" => table_value := 6547; - when "0100010" => table_value := 6731; - when "0100011" => table_value := 6914; - when "0100100" => table_value := 7095; - when "0100101" => table_value := 7276; - when "0100110" => table_value := 7456; - when "0100111" => table_value := 7634; - when "0101000" => table_value := 7811; - when "0101001" => table_value := 7988; - when "0101010" => table_value := 8162; - when "0101011" => table_value := 8336; - when "0101100" => table_value := 8509; - when "0101101" => table_value := 8680; - when "0101110" => table_value := 8850; - when "0101111" => table_value := 9018; - when "0110000" => table_value := 9185; - when "0110001" => table_value := 9351; - when "0110010" => table_value := 9515; - when "0110011" => table_value := 9678; - when "0110100" => table_value := 9840; - when "0110101" => table_value := 10000; - when "0110110" => table_value := 10158; - when "0110111" => table_value := 10315; - when "0111000" => table_value := 10471; - when "0111001" => table_value := 10625; - when "0111010" => table_value := 10777; - when "0111011" => table_value := 10927; - when "0111100" => table_value := 11076; - when "0111101" => table_value := 11224; - when "0111110" => table_value := 11369; - when "0111111" => table_value := 11513; - when "1000000" => table_value := 11655; - when "1000001" => table_value := 11796; - when "1000010" => table_value := 11934; - when "1000011" => table_value := 12071; - when "1000100" => table_value := 12206; - when "1000101" => table_value := 12339; - when "1000110" => table_value := 12471; - when "1000111" => table_value := 12600; - when "1001000" => table_value := 12728; - when "1001001" => table_value := 12853; - when "1001010" => table_value := 12977; - when "1001011" => table_value := 13099; - when "1001100" => table_value := 13219; - when "1001101" => table_value := 13336; - when "1001110" => table_value := 13452; - when "1001111" => table_value := 13566; - when "1010000" => table_value := 13678; - when "1010001" => table_value := 13787; - when "1010010" => table_value := 13895; - when "1010011" => table_value := 14000; - when "1010100" => table_value := 14104; - when "1010101" => table_value := 14205; - when "1010110" => table_value := 14304; - when "1010111" => table_value := 14401; - when "1011000" => table_value := 14496; - when "1011001" => table_value := 14588; - when "1011010" => table_value := 14679; - when "1011011" => table_value := 14767; - when "1011100" => table_value := 14853; - when "1011101" => table_value := 14936; - when "1011110" => table_value := 15018; - when "1011111" => table_value := 15097; - when "1100000" => table_value := 15174; - when "1100001" => table_value := 15249; - when "1100010" => table_value := 15321; - when "1100011" => table_value := 15391; - when "1100100" => table_value := 15459; - when "1100101" => table_value := 15524; - when "1100110" => table_value := 15587; - when "1100111" => table_value := 15648; - when "1101000" => table_value := 15706; - when "1101001" => table_value := 15762; - when "1101010" => table_value := 15816; - when "1101011" => table_value := 15867; - when "1101100" => table_value := 15916; - when "1101101" => table_value := 15963; - when "1101110" => table_value := 16007; - when "1101111" => table_value := 16048; - when "1110000" => table_value := 16088; - when "1110001" => table_value := 16124; - when "1110010" => table_value := 16159; - when "1110011" => table_value := 16191; - when "1110100" => table_value := 16220; - when "1110101" => table_value := 16247; - when "1110110" => table_value := 16272; - when "1110111" => table_value := 16294; - when "1111000" => table_value := 16314; - when "1111001" => table_value := 16331; - when "1111010" => table_value := 16346; - when "1111011" => table_value := 16358; - when "1111100" => table_value := 16368; - when "1111101" => table_value := 16375; - when "1111110" => table_value := 16380; - when "1111111" => table_value := 16383; - when others => null; - end case; - return table_value; - end; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/spram.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/spram.vhd deleted file mode 100644 index ad6b58b5..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/spram.vhd +++ /dev/null @@ -1,55 +0,0 @@ -LIBRARY ieee; -USE ieee.std_logic_1164.all; - -LIBRARY altera_mf; -USE altera_mf.altera_mf_components.all; - -ENTITY spram IS - generic ( - addr_width_g : integer := 8; - data_width_g : integer := 8 - ); - PORT - ( - address : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); - clken : IN STD_LOGIC := '1'; - clock : IN STD_LOGIC := '1'; - data : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); - wren : IN STD_LOGIC ; - q : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0) - ); -END spram; - - -ARCHITECTURE SYN OF spram IS - -BEGIN - altsyncram_component : altsyncram - GENERIC MAP ( - clock_enable_input_a => "NORMAL", - clock_enable_output_a => "BYPASS", - intended_device_family => "Cyclone V", - lpm_hint => "ENABLE_RUNTIME_MOD=NO", - lpm_type => "altsyncram", - numwords_a => 2**addr_width_g, - operation_mode => "SINGLE_PORT", - outdata_aclr_a => "NONE", - outdata_reg_a => "UNREGISTERED", - power_up_uninitialized => "FALSE", - read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", - widthad_a => addr_width_g, - width_a => data_width_g, - width_byteena_a => 1 - ) - PORT MAP ( - address_a => address, - clock0 => clock, - clocken0 => clken, - data_a => data, - wren_a => wren, - q_a => q - ); - - - -END SYN; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/video_mixer.sv b/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/video_mixer.sv deleted file mode 100644 index 79d8ca03..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/AzurianAttack_MiST/rtl/video_mixer.sv +++ /dev/null @@ -1,243 +0,0 @@ -// -// -// Copyright (c) 2017 Sorgelig -// -// This program is GPL Licensed. See COPYING for the full license. -// -// -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -`timescale 1ns / 1ps - -// -// LINE_LENGTH: Length of display line in pixels -// Usually it's length from HSync to HSync. -// May be less if line_start is used. -// -// HALF_DEPTH: If =1 then color dept is 3 bits per component -// For half depth 6 bits monochrome is available with -// mono signal enabled and color = {G, R} - -module video_mixer -#( - parameter LINE_LENGTH = 480, - parameter HALF_DEPTH = 1, - - parameter OSD_COLOR = 3'd4, - parameter OSD_X_OFFSET = 10'd0, - parameter OSD_Y_OFFSET = 10'd0 -) -( - // master clock - // it should be multiple by (ce_pix*4). - input clk_sys, - - // Pixel clock or clock_enable (both are accepted). - input ce_pix, - - // Some systems have multiple resolutions. - // ce_pix_actual should match ce_pix where every second or fourth pulse is enabled, - // thus half or qurter resolutions can be used without brake video sync while switching resolutions. - // For fixed single resolution (or when video sync stability isn't required) ce_pix_actual = ce_pix. - input ce_pix_actual, - - // OSD SPI interface - input SPI_SCK, - input SPI_SS3, - input SPI_DI, - - // scanlines (00-none 01-25% 10-50% 11-75%) - input [1:0] scanlines, - - // 0 = HVSync 31KHz, 1 = CSync 15KHz - input scandoublerD, - - // High quality 2x scaling - input hq2x, - - // YPbPr always uses composite sync - input ypbpr, - - // 0 = 16-240 range. 1 = 0-255 range. (only for YPbPr color space) - input ypbpr_full, - input [1:0] rotate, //[0] - rotate [1] - left or right - // color - input [DWIDTH:0] R, - input [DWIDTH:0] G, - input [DWIDTH:0] B, - - // Monochrome mode (for HALF_DEPTH only) - input mono, - - // interlace sync. Positive pulses. - input HSync, - input VSync, - - // Falling of this signal means start of informative part of line. - // It can be horizontal blank signal. - // This signal can be used to reduce amount of required FPGA RAM for HQ2x scan doubler - // If FPGA RAM is not an issue, then simply set it to 0 for whole line processing. - // Keep in mind: due to algo first and last pixels of line should be black to avoid side artefacts. - // Thus, if blank signal is used to reduce the line, make sure to feed at least one black (or paper) pixel - // before first informative pixel. - input line_start, - - // MiST video output signals - output [5:0] VGA_R, - output [5:0] VGA_G, - output [5:0] VGA_B, - output VGA_VS, - output VGA_HS -); - -localparam DWIDTH = HALF_DEPTH ? 2 : 5; - -wire [DWIDTH:0] R_sd; -wire [DWIDTH:0] G_sd; -wire [DWIDTH:0] B_sd; -wire hs_sd, vs_sd; - -scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) scandoubler -( - .*, - .hs_in(HSync), - .vs_in(VSync), - .r_in(R), - .g_in(G), - .b_in(B), - - .hs_out(hs_sd), - .vs_out(vs_sd), - .r_out(R_sd), - .g_out(G_sd), - .b_out(B_sd) -); - -wire [DWIDTH:0] rt = (scandoublerD ? R : R_sd); -wire [DWIDTH:0] gt = (scandoublerD ? G : G_sd); -wire [DWIDTH:0] bt = (scandoublerD ? B : B_sd); - -generate - if(HALF_DEPTH) begin - wire [5:0] r = mono ? {gt,rt} : {rt,rt}; - wire [5:0] g = mono ? {gt,rt} : {gt,gt}; - wire [5:0] b = mono ? {gt,rt} : {bt,bt}; - end else begin - wire [5:0] r = rt; - wire [5:0] g = gt; - wire [5:0] b = bt; - end -endgenerate - -wire hs = (scandoublerD ? HSync : hs_sd); -wire vs = (scandoublerD ? VSync : vs_sd); - -reg scanline = 0; -always @(posedge clk_sys) begin - reg old_hs, old_vs; - - old_hs <= hs; - old_vs <= vs; - - if(old_hs && ~hs) scanline <= ~scanline; - if(old_vs && ~vs) scanline <= 0; -end - -wire [5:0] r_out, g_out, b_out; -always @(*) begin - case(scanlines & {scanline, scanline}) - 1: begin // reduce 25% = 1/2 + 1/4 - r_out = {1'b0, r[5:1]} + {2'b00, r[5:2]}; - g_out = {1'b0, g[5:1]} + {2'b00, g[5:2]}; - b_out = {1'b0, b[5:1]} + {2'b00, b[5:2]}; - end - - 2: begin // reduce 50% = 1/2 - r_out = {1'b0, r[5:1]}; - g_out = {1'b0, g[5:1]}; - b_out = {1'b0, b[5:1]}; - end - - 3: begin // reduce 75% = 1/4 - r_out = {2'b00, r[5:2]}; - g_out = {2'b00, g[5:2]}; - b_out = {2'b00, b[5:2]}; - end - - default: begin - r_out = r; - g_out = g; - b_out = b; - end - endcase -end - -wire [5:0] red, green, blue; -osd #(OSD_X_OFFSET, OSD_Y_OFFSET, OSD_COLOR) osd -( - .*, - - .R_in(r_out), - .G_in(g_out), - .B_in(b_out), - .HSync(hs), - .VSync(vs), - .rotate(rotate), - - .R_out(red), - .G_out(green), - .B_out(blue) -); - -wire [5:0] yuv_full[225] = '{ - 6'd0, 6'd0, 6'd0, 6'd0, 6'd1, 6'd1, 6'd1, 6'd1, - 6'd2, 6'd2, 6'd2, 6'd3, 6'd3, 6'd3, 6'd3, 6'd4, - 6'd4, 6'd4, 6'd5, 6'd5, 6'd5, 6'd5, 6'd6, 6'd6, - 6'd6, 6'd7, 6'd7, 6'd7, 6'd7, 6'd8, 6'd8, 6'd8, - 6'd9, 6'd9, 6'd9, 6'd9, 6'd10, 6'd10, 6'd10, 6'd11, - 6'd11, 6'd11, 6'd11, 6'd12, 6'd12, 6'd12, 6'd13, 6'd13, - 6'd13, 6'd13, 6'd14, 6'd14, 6'd14, 6'd15, 6'd15, 6'd15, - 6'd15, 6'd16, 6'd16, 6'd16, 6'd17, 6'd17, 6'd17, 6'd17, - 6'd18, 6'd18, 6'd18, 6'd19, 6'd19, 6'd19, 6'd19, 6'd20, - 6'd20, 6'd20, 6'd21, 6'd21, 6'd21, 6'd21, 6'd22, 6'd22, - 6'd22, 6'd23, 6'd23, 6'd23, 6'd23, 6'd24, 6'd24, 6'd24, - 6'd25, 6'd25, 6'd25, 6'd25, 6'd26, 6'd26, 6'd26, 6'd27, - 6'd27, 6'd27, 6'd27, 6'd28, 6'd28, 6'd28, 6'd29, 6'd29, - 6'd29, 6'd29, 6'd30, 6'd30, 6'd30, 6'd31, 6'd31, 6'd31, - 6'd31, 6'd32, 6'd32, 6'd32, 6'd33, 6'd33, 6'd33, 6'd33, - 6'd34, 6'd34, 6'd34, 6'd35, 6'd35, 6'd35, 6'd35, 6'd36, - 6'd36, 6'd36, 6'd36, 6'd37, 6'd37, 6'd37, 6'd38, 6'd38, - 6'd38, 6'd38, 6'd39, 6'd39, 6'd39, 6'd40, 6'd40, 6'd40, - 6'd40, 6'd41, 6'd41, 6'd41, 6'd42, 6'd42, 6'd42, 6'd42, - 6'd43, 6'd43, 6'd43, 6'd44, 6'd44, 6'd44, 6'd44, 6'd45, - 6'd45, 6'd45, 6'd46, 6'd46, 6'd46, 6'd46, 6'd47, 6'd47, - 6'd47, 6'd48, 6'd48, 6'd48, 6'd48, 6'd49, 6'd49, 6'd49, - 6'd50, 6'd50, 6'd50, 6'd50, 6'd51, 6'd51, 6'd51, 6'd52, - 6'd52, 6'd52, 6'd52, 6'd53, 6'd53, 6'd53, 6'd54, 6'd54, - 6'd54, 6'd54, 6'd55, 6'd55, 6'd55, 6'd56, 6'd56, 6'd56, - 6'd56, 6'd57, 6'd57, 6'd57, 6'd58, 6'd58, 6'd58, 6'd58, - 6'd59, 6'd59, 6'd59, 6'd60, 6'd60, 6'd60, 6'd60, 6'd61, - 6'd61, 6'd61, 6'd62, 6'd62, 6'd62, 6'd62, 6'd63, 6'd63, - 6'd63 -}; - -// http://marsee101.blog19.fc2.com/blog-entry-2311.html -// Y = 16 + 0.257*R + 0.504*G + 0.098*B (Y = 0.299*R + 0.587*G + 0.114*B) -// Pb = 128 - 0.148*R - 0.291*G + 0.439*B (Pb = -0.169*R - 0.331*G + 0.500*B) -// Pr = 128 + 0.439*R - 0.368*G - 0.071*B (Pr = 0.500*R - 0.419*G - 0.081*B) - -wire [18:0] y_8 = 19'd04096 + ({red, 8'd0} + {red, 3'd0}) + ({green, 9'd0} + {green, 2'd0}) + ({blue, 6'd0} + {blue, 5'd0} + {blue, 2'd0}); -wire [18:0] pb_8 = 19'd32768 - ({red, 7'd0} + {red, 4'd0} + {red, 3'd0}) - ({green, 8'd0} + {green, 5'd0} + {green, 3'd0}) + ({blue, 8'd0} + {blue, 7'd0} + {blue, 6'd0}); -wire [18:0] pr_8 = 19'd32768 + ({red, 8'd0} + {red, 7'd0} + {red, 6'd0}) - ({green, 8'd0} + {green, 6'd0} + {green, 5'd0} + {green, 4'd0} + {green, 3'd0}) - ({blue, 6'd0} + {blue , 3'd0}); - -wire [7:0] y = ( y_8[17:8] < 16) ? 8'd16 : ( y_8[17:8] > 235) ? 8'd235 : y_8[15:8]; -wire [7:0] pb = (pb_8[17:8] < 16) ? 8'd16 : (pb_8[17:8] > 240) ? 8'd240 : pb_8[15:8]; -wire [7:0] pr = (pr_8[17:8] < 16) ? 8'd16 : (pr_8[17:8] > 240) ? 8'd240 : pr_8[15:8]; - -assign VGA_R = ypbpr ? (ypbpr_full ? yuv_full[pr-8'd16] : pr[7:2]) : red; -assign VGA_G = ypbpr ? (ypbpr_full ? yuv_full[y -8'd16] : y[7:2]) : green; -assign VGA_B = ypbpr ? (ypbpr_full ? yuv_full[pb-8'd16] : pb[7:2]) : blue; -assign VGA_VS = (scandoublerD | ypbpr) ? 1'b1 : ~vs_sd; -assign VGA_HS = scandoublerD ? ~(HSync ^ VSync) : ypbpr ? ~(hs_sd ^ vs_sd) : ~hs_sd; - -endmodule diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.qpf b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.qpf deleted file mode 100644 index fd1b9b51..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.qpf +++ /dev/null @@ -1,30 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2013 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II 64-Bit -# Version 13.1.0 Build 162 10/23/2013 SJ Web Edition -# Date created = 14:59:16 November 16, 2017 -# -# -------------------------------------------------------------------------- # - -QUARTUS_VERSION = "13.1" -DATE = "14:59:16 November 16, 2017" - -# Revisions - -PROJECT_REVISION = "BlackHole" \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.qsf b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.qsf deleted file mode 100644 index 4a93cae8..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.qsf +++ /dev/null @@ -1,190 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2014 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II 64-Bit -# Version 13.1.4 Build 182 03/12/2014 SJ Web Edition -# Date created = 16:33:56 March 10, 2019 -# -# -------------------------------------------------------------------------- # -# -# Notes: -# -# 1) The default values for assignments are stored in the file: -# BlackHole_assignment_defaults.qdf -# If this file doesn't exist, see file: -# assignment_defaults.qdf -# -# 2) Altera recommends that you do not modify this file. This -# file is updated automatically by the Quartus II software -# and any changes you make may be lost or overwritten. -# -# -------------------------------------------------------------------------- # - - - -# Project-Wide Assignments -# ======================== -set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.1.2 -set_global_assignment -name LAST_QUARTUS_VERSION 13.1 -set_global_assignment -name PROJECT_CREATION_TIME_DATE "01:53:30 APRIL 20, 2017" -set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files -set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL -set_global_assignment -name SMART_RECOMPILE ON -set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" -set_global_assignment -name SYSTEMVERILOG_FILE rtl/BlackHole.sv -set_global_assignment -name VHDL_FILE rtl/galaxian.vhd -set_global_assignment -name VHDL_FILE rtl/mc_video.vhd -set_global_assignment -name VHDL_FILE rtl/mc_stars.vhd -set_global_assignment -name VHDL_FILE rtl/mc_sound_vco.vhd -set_global_assignment -name VHDL_FILE rtl/mc_sound_b.vhd -set_global_assignment -name VHDL_FILE rtl/mc_sound_a.vhd -set_global_assignment -name VHDL_FILE rtl/mc_missile.vhd -set_global_assignment -name VHDL_FILE rtl/mc_logic.vhd -set_global_assignment -name VHDL_FILE rtl/mc_ld_pls.vhd -set_global_assignment -name VHDL_FILE rtl/mc_inport.vhd -set_global_assignment -name VHDL_FILE rtl/mc_hv_count.vhd -set_global_assignment -name VHDL_FILE rtl/mc_col_pal.vhd -set_global_assignment -name VHDL_FILE rtl/mc_bram.vhd -set_global_assignment -name VHDL_FILE rtl/mc_adec.vhd -set_global_assignment -name VHDL_FILE rtl/sine_package.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/ROM_PGM_0.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GALAXIAN_6L.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GALAXIAN_1K.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GALAXIAN_1H.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GAL_HIT.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GAL_FIR.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80sed.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80as.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_Reg.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_Pack.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_MCode.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_ALU.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80.vhd -set_global_assignment -name VHDL_FILE rtl/spram.vhd -set_global_assignment -name VHDL_FILE rtl/dpram.vhd -set_global_assignment -name VHDL_FILE rtl/pll.vhd -set_global_assignment -name SYSTEMVERILOG_FILE rtl/video_mixer.sv -set_global_assignment -name VERILOG_FILE rtl/scandoubler.v -set_global_assignment -name VERILOG_FILE rtl/osd.v -set_global_assignment -name VERILOG_FILE rtl/mist_io.v -set_global_assignment -name SYSTEMVERILOG_FILE rtl/hq2x.sv -set_global_assignment -name VHDL_FILE rtl/dac.vhd - -# Pin & Location Assignments -# ========================== -set_location_assignment PIN_7 -to LED -set_location_assignment PIN_54 -to CLOCK_27 -set_location_assignment PIN_144 -to VGA_R[5] -set_location_assignment PIN_143 -to VGA_R[4] -set_location_assignment PIN_142 -to VGA_R[3] -set_location_assignment PIN_141 -to VGA_R[2] -set_location_assignment PIN_137 -to VGA_R[1] -set_location_assignment PIN_135 -to VGA_R[0] -set_location_assignment PIN_133 -to VGA_B[5] -set_location_assignment PIN_132 -to VGA_B[4] -set_location_assignment PIN_125 -to VGA_B[3] -set_location_assignment PIN_121 -to VGA_B[2] -set_location_assignment PIN_120 -to VGA_B[1] -set_location_assignment PIN_115 -to VGA_B[0] -set_location_assignment PIN_114 -to VGA_G[5] -set_location_assignment PIN_113 -to VGA_G[4] -set_location_assignment PIN_112 -to VGA_G[3] -set_location_assignment PIN_111 -to VGA_G[2] -set_location_assignment PIN_110 -to VGA_G[1] -set_location_assignment PIN_106 -to VGA_G[0] -set_location_assignment PIN_136 -to VGA_VS -set_location_assignment PIN_119 -to VGA_HS -set_location_assignment PIN_65 -to AUDIO_L -set_location_assignment PIN_80 -to AUDIO_R -set_location_assignment PIN_105 -to SPI_DO -set_location_assignment PIN_88 -to SPI_DI -set_location_assignment PIN_126 -to SPI_SCK -set_location_assignment PIN_127 -to SPI_SS2 -set_location_assignment PIN_91 -to SPI_SS3 -set_location_assignment PIN_13 -to CONF_DATA0 -set_location_assignment PLL_1 -to "pll:pll|altpll:altpll_component" - -# Classic Timing Assignments -# ========================== -set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 -set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS OFF - -# Analysis & Synthesis Assignments -# ================================ -set_global_assignment -name FAMILY "Cyclone III" -set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 -set_global_assignment -name SAVE_DISK_SPACE OFF -set_global_assignment -name DEVICE_FILTER_PACKAGE TQFP -set_global_assignment -name TOP_LEVEL_ENTITY BlackHole - -# Fitter Assignments -# ================== -set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING OFF -set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION ALWAYS -set_global_assignment -name FITTER_EFFORT "STANDARD FIT" -set_global_assignment -name DEVICE EP3C25E144C8 -set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF -set_global_assignment -name ENABLE_NCE_PIN OFF -set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF -set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF -set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON -set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" -set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" - -# Assembler Assignments -# ===================== -set_global_assignment -name GENERATE_RBF_FILE ON -set_global_assignment -name USE_CONFIGURATION_DEVICE OFF - -# Power Estimation Assignments -# ============================ -set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" -set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" - -# Advanced I/O Timing Assignments -# =============================== -set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise -set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall -set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise -set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall - -# ----------------------- -# start ENTITY(BlackHole) - - # start DESIGN_PARTITION(Top) - # --------------------------- - - # Incremental Compilation Assignments - # =================================== - set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top - set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top - set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top - set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top - - # end DESIGN_PARTITION(Top) - # ------------------------- - -# end ENTITY(BlackHole) -# --------------------- \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.srf b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.srf deleted file mode 100644 index 063fa14d..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/BlackHole.srf +++ /dev/null @@ -1,52 +0,0 @@ -{ "" "" "" "Variable or input pin \"data_b\" is defined but never used." { } { } 0 287013 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Found combinational loop of 47 nodes" { } { } 0 332125 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "LOCKED port on the PLL is not properly connected on instance \"pll_hdmi:pll_hdmi\|pll_hdmi_0002:pll_hdmi_inst\|altera_pll:altera_pll_i\|general\[0\].gpll\". The LOCKED port on the PLL should be connected when the FBOUTCLK port is connected. Although it is unnecessary to connect the LOCKED signal, any logic driven off of an output clock of the PLL will not know when the PLL is locked and ready." { } { } 0 21300 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Net \"soc_system:soc_system\|soc_system_Video_Output:video_output\|alt_vip_cvo_core:cvo_core\|genlock_enable_sync1\[1\]\" is missing source, defaulting to GND" { } { } 0 12110 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"zxspectrum:emu\|mist_io:mist_io\|ps2_kbd_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"zxspectrum:emu\|mist_io:mist_io\|ps2_mouse_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "No destination clock period was found satisfying the set_net_delay assignment from \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|h_sync_polarity_reg\}\]\" to \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|vid_h_sync_polarity\}\]\". This assignment will be ignored." { } { } 0 17897 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "No destination clock period was found satisfying the set_net_delay assignment from \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|v_sync_polarity_reg\}\]\" to \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|vid_v_sync_polarity\}\]\". This assignment will be ignored." { } { } 0 17897 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "No destination clock period was found satisfying the set_net_delay assignment from \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|interlaced_field_reg\[*\]\}\]\" to \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|vid_interlaced_field\[*\]\}\]\". This assignment will be ignored." { } { } 0 17897 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Some pins have incomplete I/O assignments. Refer to the I/O Assignment Warnings report for details" { } { } 0 15714 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "55 hierarchies have connectivity warnings - see the Connectivity Checks report folder" { } { } 0 12241 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"emu:emu\|mister_io:mister_io\|ps2_kbd_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"emu:emu\|mister_io:mister_io\|ps2_mouse_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Verilog HDL or VHDL warning at de10_top.v(97): object \"io_win\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Verilog HDL or VHDL warning at de10_top.v(102): object \"io_sdd\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Overwriting existing clock: vip\|hps\|fpga_interfaces\|clocks_resets\|h2f_user0_clk" { } { } 0 332043 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Variable or input pin \"data_a\" is defined but never used." { } { } 0 287013 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Design contains 1 input pin(s) that do not drive logic" { } { } 0 21074 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 169085 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 174073 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 332174 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 13009 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 21300 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_cvo_mode_banks" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_pll.sv" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_common_frame_counter.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0_acv_hard_memphy.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0_acv_ldc.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0_acv_hard_io_pads.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "altera_mem_if_hard_memory_controller_top_cyclonev.sv" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "genlock_enable_sync" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "u_calculate_mode" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "genlock_enable" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "reset_value" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_pll_video:pll_video\|altera_pll:altera_pll_i\|general\[0\].gpll" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_cvo_core.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_packet_transfer.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_common_dc_mixed_widths_fifo.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "altera_mem_if_hhp_qseq_synth_top" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_vip_vout:vip_vout\|alt_vip_cvo_core:cvo_core\|genlock_enable_sync1" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_vip_fb:vip_fb\|alt_vip_packet_transfer:pkt_trans_rd\|alt_vip_packet_transfer_read_proc:READ_BLOCK.read_proc_instance\|alt_vip_common_fifo2:output_msg_queue\|scfifo:scfifo_component\|scfifo_scd1:auto_generated\|a_dpfifo_e471:dpfifo\|altsyncram_ums1:FIFOram\|q_b" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_Video_Input:video_input\|alt_vip_cvi_core:cvi_core\|alt_vip_cvi_write_fifo_buffer:write_fifo_buffer" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_Frame_Buffer:frame_buffer\|alt_vip_packet_transfer:pkt_trans_rd" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system_hps_fpga_interfaces.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system_HPS_fpga_interfaces.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "RST" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_scaler_alg_core" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "cvo_core" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "vip_HPS_fpga_interfaces.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_dil_vof_scheduler.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_dil_scheduler.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/README.txt deleted file mode 100644 index 4767d316..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/README.txt +++ /dev/null @@ -1,24 +0,0 @@ ---------------------------------------------------------------------------------- --- --- Arcade: Black Hole port to MiST by Gehstock --- 18 December 2017 --- ---------------------------------------------------------------------------------- --- A simulation model of Galaxian hardware --- Copyright(c) 2004 Katsumi Degawa ---------------------------------------------------------------------------------- --- --- Only controls and OSD are rotated on Video output. --- --- --- Keyboard inputs : --- --- ESC : Coin --- F1 : Start 1 player --- F2 : Start 2 player --- SPACE : Fire --- ARROW KEYS : Movements --- --- Joystick support. --- ---------------------------------------------------------------------------------- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/Release/BlackHole.rbf b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/Release/BlackHole.rbf deleted file mode 100644 index 403b25658c89e98707c11f5a528c1e5ff73f8ac3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 302464 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 N`R+eI{%~gD{{bcDf<6EM diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/clean.bat b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/clean.bat deleted file mode 100644 index b3b7c3b5..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/clean.bat +++ /dev/null @@ -1,37 +0,0 @@ -@echo off -del /s *.bak -del /s *.orig -del /s *.rej -del /s *~ -rmdir /s /q db -rmdir /s /q incremental_db -rmdir /s /q output_files -rmdir /s /q simulation -rmdir /s /q greybox_tmp -rmdir /s /q hc_output -rmdir /s /q .qsys_edit -rmdir /s /q hps_isw_handoff -rmdir /s /q sys\.qsys_edit -rmdir /s /q sys\vip -cd sys -for /d %%i in (*_sim) do rmdir /s /q "%%~nxi" -cd .. -for /d %%i in (*_sim) do rmdir /s /q "%%~nxi" -del build_id.v -del c5_pin_model_dump.txt -del PLLJ_PLLSPE_INFO.txt -del /s *.qws -del /s *.ppf -del /s *.ddb -del /s *.csv -del /s *.cmp -del /s *.sip -del /s *.spd -del /s *.bsf -del /s *.f -del /s *.sopcinfo -del /s *.xml -del /s new_rtl_netlist -del /s old_rtl_netlist - -pause diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/BlackHole.sv b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/BlackHole.sv deleted file mode 100644 index b9ff9f01..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/BlackHole.sv +++ /dev/null @@ -1,192 +0,0 @@ -//============================================================================ -// Arcade: BlackHole -// -// Port to MiSTer -// Copyright (C) 2017 Sorgelig -// -// 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 2 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 the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -//============================================================================ - -module BlackHole( - output LED, - output [5:0] VGA_R, - output [5:0] VGA_G, - output [5:0] VGA_B, - output VGA_HS, - output VGA_VS, - output AUDIO_L, - output AUDIO_R, - input SPI_SCK, - output SPI_DO, - input SPI_DI, - input SPI_SS2, - input SPI_SS3, - input CONF_DATA0, - input CLOCK_27 -); - -`include "rtl\build_id.v" - -localparam CONF_STR = { - "BlackHole;;", - "O2,Rotate Controls,Off,On;", - "O34,Scanlines,Off,25%,50%,75%;", - "T6,Reset;", - "V,v1.20.",`BUILD_DATE -}; - -assign LED = 1; -assign AUDIO_R = AUDIO_L; - -wire clk_24, clk_18, clk_12, clk_6; -wire pll_locked; -pll pll( - .inclk0(CLOCK_27), - .areset(0), - .c0(clk_24), - .c1(clk_18), - .c2(clk_12), - .c3(clk_6) - ); - -wire [31:0] status; -wire [1:0] buttons; -wire [1:0] switches; -wire [7:0] joystick_0; -wire [7:0] joystick_1; -wire scandoublerD; -wire ypbpr; -wire [10:0] ps2_key; -wire [7:0] audio_a, audio_b; -wire [10:0] audio = {1'b0, audio_b, 2'b0} + {3'b0, audio_a}; -wire hs, vs; -wire hb, vb; -wire blankn = ~(hb | vb); -wire [2:0] r,g,b; - -galaxian blackhole( - .W_CLK_18M(clk_18), - .W_CLK_12M(clk_12), - .W_CLK_6M(clk_6), - .I_RESET(status[0] | status[6] | buttons[1]), - .P1_CSJUDLR({btn_coin,btn_one_player,m_fire,2'b00,m_left,m_right}), - .P2_CSJUDLR({1'b0,btn_two_players,m_fire,2'b00,m_down,m_up}), - .W_R(r), - .W_G(g), - .W_B(b), - .W_H_SYNC(hs), - .W_V_SYNC(vs), - .HBLANK(hb), - .VBLANK(vb), - .W_SDAT_A(audio_a), - .W_SDAT_B(audio_b) - ); - -video_mixer video_mixer( - .clk_sys(clk_24), - .ce_pix(clk_6), - .ce_pix_actual(clk_6), - .SPI_SCK(SPI_SCK), - .SPI_SS3(SPI_SS3), - .SPI_DI(SPI_DI), - .R(blankn ? r : "000"), - .G(blankn ? g : "000"), - .B(blankn ? b : "000"), - .HSync(hs), - .VSync(vs), - .VGA_R(VGA_R), - .VGA_G(VGA_G), - .VGA_B(VGA_B), - .VGA_VS(VGA_VS), - .VGA_HS(VGA_HS), - .rotate({1'b1,status[2]}), - .scandoublerD(scandoublerD), - .scanlines(scandoublerD ? 2'b00 : status[4:3]), - .ypbpr(ypbpr), - .ypbpr_full(1), - .line_start(0), - .mono(0) - ); - -mist_io #( - .STRLEN(($size(CONF_STR)>>3))) -mist_io( - .clk_sys (clk_24 ), - .conf_str (CONF_STR ), - .SPI_SCK (SPI_SCK ), - .CONF_DATA0 (CONF_DATA0 ), - .SPI_SS2 (SPI_SS2 ), - .SPI_DO (SPI_DO ), - .SPI_DI (SPI_DI ), - .buttons (buttons ), - .switches (switches ), - .scandoublerD (scandoublerD ), - .ypbpr (ypbpr ), - .ps2_key (ps2_key ), - .joystick_0 (joystick_0 ), - .joystick_1 (joystick_1 ), - .status (status ) - ); - -dac #( - .msbi_g(15)) -dac( - .clk_i(clk_24), - .res_n_i(1), - .dac_i({audio,5'd0}), - .dac_o(AUDIO_L) - ); - -// Rotated Normal -wire m_up = ~status[2] ? btn_left | joystick_0[1] | joystick_1[1] : btn_up | joystick_0[3] | joystick_1[3]; -wire m_down = ~status[2] ? btn_right | joystick_0[0] | joystick_1[0] : btn_down | joystick_0[2] | joystick_1[2]; -wire m_left = ~status[2] ? btn_down | joystick_0[2] | joystick_1[2] : btn_left | joystick_0[1] | joystick_1[1]; -wire m_right = ~status[2] ? btn_up | joystick_0[3] | joystick_1[3] : btn_right | joystick_0[0] | joystick_1[0]; -wire m_fire = btn_fire1 | joystick_0[4] | joystick_1[4]; -wire m_bomb = btn_fire2 | joystick_0[5] | joystick_1[5]; - -reg btn_one_player = 0; -reg btn_two_players = 0; -reg btn_left = 0; -reg btn_right = 0; -reg btn_down = 0; -reg btn_up = 0; -reg btn_fire1 = 0; -reg btn_fire2 = 0; -reg btn_fire3 = 0; -reg btn_coin = 0; -wire pressed = ps2_key[9]; -wire [7:0] code = ps2_key[7:0]; - -always @(posedge clk_24) begin - reg old_state; - old_state <= ps2_key[10]; - if(old_state != ps2_key[10]) begin - case(code) - 'h75: btn_up <= pressed; // up - 'h72: btn_down <= pressed; // down - 'h6B: btn_left <= pressed; // left - 'h74: btn_right <= pressed; // right - 'h76: btn_coin <= pressed; // ESC - 'h05: btn_one_player <= pressed; // F1 - 'h06: btn_two_players <= pressed; // F2 - 'h14: btn_fire3 <= pressed; // ctrl - 'h11: btn_fire2 <= pressed; // alt - 'h29: btn_fire1 <= pressed; // Space - endcase - end -end - -endmodule \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/ROM/GAL_FIR.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/ROM/GAL_FIR.vhd deleted file mode 100644 index 5aff2022..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/ROM/GAL_FIR.vhd +++ /dev/null @@ -1,534 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity GAL_FIR is -port ( - clk : in std_logic; - addr : in std_logic_vector(12 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of GAL_FIR is - type rom is array(0 to 8191) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"AC",X"68",X"72",X"C7",X"93",X"3F",X"80",X"C8",X"5C",X"A1",X"22",X"90",X"B9",X"8A",X"41",X"62", - X"C2",X"A1",X"40",X"6A",X"C9",X"7F",X"64",X"3C",X"BC",X"AD",X"5B",X"4C",X"D4",X"62",X"3D",X"D3", - X"7F",X"31",X"A3",X"BE",X"5D",X"49",X"C7",X"7D",X"28",X"C0",X"A1",X"7A",X"7D",X"2B",X"C9",X"91", - X"80",X"6B",X"39",X"95",X"BA",X"91",X"27",X"C1",X"91",X"7E",X"6D",X"31",X"C0",X"A4",X"7C",X"7B", - X"37",X"80",X"CB",X"7E",X"88",X"64",X"40",X"8F",X"C3",X"83",X"83",X"68",X"36",X"D0",X"8C",X"29", - X"B4",X"B1",X"52",X"4B",X"E9",X"3E",X"74",X"C4",X"73",X"81",X"2B",X"AD",X"B9",X"4E",X"4B",X"CB", - X"91",X"76",X"33",X"B6",X"A5",X"6E",X"4A",X"63",X"D7",X"7C",X"3E",X"7E",X"DE",X"45",X"67",X"C1", - X"84",X"2D",X"A8",X"A9",X"20",X"AC",X"B5",X"7E",X"47",X"5F",X"DD",X"6E",X"44",X"BD",X"97",X"22", - X"AE",X"A4",X"25",X"CB",X"93",X"77",X"3C",X"78",X"CB",X"83",X"29",X"B3",X"AB",X"7D",X"5D",X"44", - X"A4",X"BC",X"79",X"8C",X"3A",X"76",X"CF",X"78",X"44",X"6B",X"D9",X"6B",X"3B",X"9A",X"CC",X"26", - X"A4",X"A3",X"1D",X"BA",X"A9",X"83",X"71",X"3A",X"8B",X"CC",X"6A",X"3E",X"E5",X"28",X"A4",X"A3", - X"1E",X"C9",X"9C",X"78",X"32",X"94",X"C4",X"74",X"88",X"2A",X"A2",X"BC",X"1A",X"E2",X"4B",X"86", - X"B3",X"72",X"48",X"68",X"D2",X"83",X"32",X"A4",X"B2",X"73",X"4E",X"5A",X"C8",X"9C",X"2C",X"90", - X"C1",X"7B",X"5E",X"41",X"CC",X"99",X"6F",X"3A",X"8B",X"C9",X"7A",X"84",X"23",X"BC",X"9D",X"33", - X"CC",X"82",X"24",X"D7",X"6C",X"47",X"D1",X"87",X"5C",X"41",X"C5",X"9F",X"71",X"35",X"A8",X"B9", - X"67",X"4F",X"5F",X"CE",X"8A",X"43",X"C6",X"80",X"54",X"4A",X"B1",X"AE",X"87",X"50",X"4F",X"C6", - X"9F",X"55",X"45",X"BB",X"AC",X"5C",X"41",X"A9",X"BE",X"5C",X"4C",X"72",X"D4",X"71",X"42",X"DA", - X"20",X"CF",X"6C",X"3D",X"D5",X"8A",X"78",X"39",X"7B",X"BF",X"99",X"75",X"37",X"99",X"C7",X"28", - X"7B",X"C3",X"91",X"58",X"46",X"9D",X"BB",X"88",X"60",X"40",X"9A",X"BB",X"8C",X"3B",X"6A",X"BA", - X"AC",X"31",X"7F",X"C8",X"2F",X"78",X"DC",X"33",X"AE",X"80",X"34",X"EE",X"38",X"74",X"D5",X"1F", - X"98",X"BA",X"82",X"58",X"4A",X"D6",X"86",X"56",X"49",X"F0",X"34",X"73",X"BD",X"9A",X"43",X"67", - X"C3",X"8D",X"2E",X"8B",X"B9",X"40",X"C6",X"33",X"B7",X"A5",X"27",X"8A",X"BA",X"42",X"BF",X"8A", - X"3A",X"6F",X"D1",X"5C",X"41",X"DF",X"6A",X"42",X"C3",X"A4",X"33",X"80",X"CC",X"5C",X"43",X"89", - X"BE",X"96",X"53",X"4E",X"8D",X"D4",X"2E",X"BD",X"56",X"6C",X"DA",X"53",X"47",X"9C",X"C8",X"2A", - X"75",X"B3",X"B0",X"2F",X"80",X"CA",X"2B",X"81",X"CD",X"35",X"7E",X"CE",X"32",X"81",X"CD",X"74", - X"40",X"74",X"D8",X"4E",X"58",X"D3",X"85",X"4D",X"53",X"AE",X"B8",X"61",X"3D",X"9F",X"C3",X"30", - X"86",X"D0",X"5E",X"47",X"7D",X"C6",X"91",X"4E",X"4E",X"A9",X"B9",X"6D",X"34",X"9F",X"B7",X"3F", - X"C6",X"7A",X"37",X"81",X"C5",X"8C",X"33",X"88",X"D3",X"44",X"59",X"82",X"C8",X"88",X"42",X"61", - X"AF",X"A2",X"44",X"D9",X"48",X"52",X"89",X"BC",X"99",X"2E",X"7E",X"B4",X"38",X"B7",X"9E",X"20", - X"E4",X"56",X"63",X"D9",X"56",X"43",X"B1",X"B8",X"37",X"6B",X"D3",X"6D",X"31",X"C8",X"65",X"8D", - X"B9",X"0B",X"BA",X"86",X"4D",X"D7",X"4E",X"4B",X"E7",X"3C",X"95",X"AD",X"1D",X"D8",X"72",X"35", - X"B4",X"A5",X"2F",X"B3",X"B6",X"44",X"57",X"93",X"CB",X"67",X"3F",X"A1",X"C7",X"21",X"89",X"9C", - X"5A",X"D8",X"20",X"A3",X"BA",X"25",X"89",X"AD",X"37",X"D8",X"5D",X"53",X"DC",X"77",X"43",X"70", - X"E1",X"46",X"59",X"83",X"CC",X"6E",X"37",X"E7",X"56",X"4E",X"86",X"D3",X"27",X"9E",X"AA",X"44", - X"C0",X"19",X"E9",X"54",X"63",X"DB",X"51",X"4D",X"88",X"CF",X"30",X"91",X"C5",X"66",X"35",X"C1", - X"9C",X"33",X"79",X"A7",X"BA",X"53",X"41",X"DD",X"4B",X"73",X"D2",X"25",X"7F",X"BB",X"9D",X"37", - X"68",X"A9",X"BD",X"3B",X"5C",X"CF",X"61",X"47",X"C9",X"9E",X"47",X"55",X"AF",X"96",X"5D",X"D0", - X"28",X"7E",X"D3",X"48",X"51",X"C7",X"95",X"21",X"BB",X"A6",X"3A",X"67",X"C3",X"81",X"37",X"DE", - X"7D",X"3F",X"72",X"AA",X"B4",X"15",X"DC",X"6C",X"47",X"D2",X"71",X"28",X"EB",X"2E",X"9F",X"93", - X"6C",X"9C",X"37",X"DB",X"43",X"AC",X"37",X"D3",X"4F",X"AC",X"8D",X"1B",X"DF",X"7E",X"46",X"6B", - X"BA",X"A5",X"35",X"73",X"CB",X"41",X"7E",X"C8",X"1D",X"D3",X"60",X"5F",X"DB",X"44",X"57",X"C2", - X"A2",X"41",X"5B",X"AE",X"96",X"5E",X"CC",X"10",X"CF",X"83",X"31",X"DF",X"59",X"46",X"CC",X"87", - X"28",X"D7",X"84",X"3D",X"7A",X"DD",X"3A",X"7B",X"C8",X"36",X"66",X"C8",X"60",X"9A",X"8F",X"29", - X"A8",X"B3",X"83",X"1F",X"D6",X"81",X"33",X"C4",X"82",X"2A",X"D4",X"6B",X"70",X"CA",X"1B",X"A9", - X"AB",X"22",X"AE",X"9E",X"49",X"D3",X"45",X"5A",X"A1",X"BB",X"70",X"27",X"E9",X"49",X"72",X"CC", - X"38",X"67",X"B6",X"AD",X"41",X"57",X"B7",X"8C",X"39",X"E4",X"70",X"4B",X"63",X"C7",X"52",X"AE", - X"8A",X"36",X"8A",X"BB",X"8E",X"2F",X"87",X"AB",X"B2",X"2D",X"72",X"94",X"CD",X"39",X"67",X"D9", - X"2B",X"86",X"C8",X"50",X"4D",X"BC",X"A1",X"3F",X"6B",X"BC",X"7C",X"48",X"E0",X"20",X"BA",X"83", - X"43",X"D4",X"26",X"BD",X"A2",X"3E",X"6C",X"CA",X"8A",X"38",X"7B",X"AF",X"AE",X"23",X"91",X"C0", - X"37",X"76",X"A3",X"C2",X"39",X"63",X"D9",X"48",X"5A",X"93",X"C9",X"43",X"62",X"90",X"B1",X"37", - X"D1",X"53",X"74",X"B1",X"37",X"F6",X"23",X"82",X"C3",X"52",X"4A",X"BB",X"75",X"95",X"88",X"3D", - X"90",X"C3",X"76",X"3B",X"87",X"A9",X"70",X"A6",X"61",X"4F",X"AE",X"B6",X"50",X"4B",X"E2",X"4A", - X"63",X"DC",X"3E",X"63",X"92",X"CC",X"4F",X"4D",X"E3",X"4A",X"5B",X"89",X"D0",X"47",X"5E",X"90", - X"D0",X"49",X"5B",X"7E",X"C6",X"76",X"3E",X"8C",X"AA",X"A4",X"15",X"CD",X"89",X"43",X"80",X"BD", - X"65",X"A8",X"3D",X"8E",X"CF",X"0B",X"C0",X"8E",X"46",X"76",X"C9",X"7A",X"3E",X"88",X"AA",X"A8", - X"18",X"BF",X"9C",X"2E",X"C3",X"85",X"2B",X"DC",X"6C",X"45",X"DB",X"4B",X"5F",X"92",X"AD",X"3D", - X"C3",X"4F",X"86",X"A6",X"75",X"81",X"36",X"E7",X"37",X"A6",X"7D",X"A5",X"5A",X"58",X"D8",X"4E", - X"56",X"AB",X"8E",X"49",X"DD",X"68",X"40",X"8A",X"B0",X"53",X"C3",X"4F",X"60",X"92",X"C6",X"51", - X"54",X"9A",X"C5",X"55",X"4D",X"93",X"C2",X"70",X"2F",X"E3",X"50",X"5B",X"8D",X"AF",X"48",X"AA", - X"81",X"98",X"4C",X"65",X"C1",X"66",X"BB",X"23",X"B0",X"9B",X"39",X"83",X"A4",X"B3",X"1A",X"B0", - X"9D",X"31",X"C3",X"8E",X"2B",X"E2",X"54",X"5A",X"DC",X"32",X"86",X"CA",X"14",X"C9",X"83",X"43", - X"83",X"AD",X"A6",X"15",X"DA",X"6D",X"4C",X"87",X"AF",X"63",X"B9",X"3A",X"8C",X"C5",X"0D",X"CC", - X"79",X"58",X"74",X"C9",X"7D",X"42",X"7C",X"B7",X"5C",X"A9",X"7B",X"41",X"93",X"B6",X"81",X"32", - X"9D",X"92",X"6B",X"87",X"9D",X"94",X"4A",X"6C",X"B7",X"A4",X"1B",X"BD",X"88",X"4D",X"7D",X"BD", - X"4D",X"99",X"8A",X"51",X"CF",X"1B",X"F2",X"56",X"5A",X"72",X"C3",X"4B",X"BE",X"63",X"52",X"E1", - X"2F",X"77",X"91",X"93",X"52",X"C0",X"37",X"E1",X"53",X"5A",X"DA",X"35",X"77",X"85",X"D5",X"39", - X"6D",X"80",X"D3",X"50",X"58",X"D3",X"2D",X"9A",X"B2",X"23",X"BC",X"8C",X"52",X"71",X"C1",X"8D", - X"3E",X"76",X"B3",X"6F",X"6D",X"A1",X"49",X"C9",X"2E",X"D1",X"38",X"C6",X"55",X"8B",X"7C",X"86", - X"B2",X"33",X"7E",X"AD",X"99",X"3C",X"80",X"A3",X"6E",X"88",X"98",X"50",X"AA",X"79",X"99",X"27", - X"FB",X"1D",X"AE",X"63",X"8F",X"94",X"51",X"B0",X"4A",X"AD",X"86",X"8B",X"39",X"EA",X"1B",X"AB", - X"9A",X"4C",X"73",X"B8",X"9A",X"3A",X"76",X"AC",X"64",X"88",X"8B",X"6D",X"A6",X"71",X"97",X"40", - X"8C",X"B5",X"4A",X"A0",X"68",X"86",X"8C",X"98",X"69",X"59",X"DE",X"1F",X"AB",X"A0",X"36",X"A8", - X"A7",X"28",X"E0",X"58",X"59",X"CE",X"37",X"82",X"C8",X"2E",X"A4",X"5A",X"AF",X"62",X"8E",X"C2", - X"2D",X"79",X"91",X"C2",X"2A",X"96",X"77",X"8A",X"99",X"8E",X"3D",X"C7",X"61",X"57",X"9D",X"A3", - X"44",X"DE",X"34",X"88",X"B1",X"37",X"89",X"A3",X"B3",X"15",X"CB",X"73",X"43",X"BA",X"8D",X"47", - X"9D",X"6F",X"C9",X"15",X"D1",X"72",X"53",X"CA",X"48",X"6B",X"9B",X"89",X"6A",X"A0",X"57",X"BE", - X"45",X"9C",X"A5",X"5E",X"54",X"CA",X"63",X"52",X"E1",X"25",X"AE",X"93",X"35",X"E5",X"2A",X"A5", - X"97",X"40",X"8A",X"9A",X"73",X"81",X"8E",X"57",X"CC",X"68",X"67",X"5D",X"C5",X"94",X"43",X"6E", - X"AA",X"A8",X"30",X"9D",X"6E",X"B3",X"6B",X"4B",X"AB",X"79",X"90",X"93",X"50",X"89",X"81",X"8A", - X"A4",X"42",X"9B",X"7F",X"67",X"9F",X"A8",X"48",X"80",X"BA",X"23",X"C5",X"6A",X"5E",X"91",X"99", - X"62",X"9A",X"91",X"6A",X"5A",X"D9",X"3D",X"81",X"B2",X"34",X"C5",X"7A",X"3F",X"BB",X"90",X"3D", - X"D0",X"50",X"65",X"95",X"94",X"63",X"C6",X"2D",X"A6",X"91",X"3D",X"CA",X"5F",X"66",X"91",X"97", - X"A6",X"35",X"A6",X"97",X"2E",X"D9",X"41",X"8F",X"A4",X"3E",X"A2",X"B0",X"2E",X"B5",X"7A",X"55", - X"C9",X"3F",X"84",X"C3",X"42",X"8A",X"72",X"9F",X"65",X"95",X"72",X"84",X"8A",X"58",X"C6",X"73", - X"47",X"D9",X"35",X"90",X"9F",X"4D",X"80",X"A8",X"A1",X"30",X"8F",X"8B",X"C5",X"18",X"B5",X"70", - X"65",X"B0",X"5D",X"93",X"93",X"7B",X"48",X"CB",X"52",X"7D",X"B0",X"3D",X"98",X"BA",X"2E",X"AD", - X"86",X"4A",X"BD",X"6E",X"4C",X"DA",X"53",X"78",X"77",X"96",X"75",X"83",X"82",X"82",X"A5",X"3D", - X"86",X"A2",X"A7",X"31",X"8B",X"8E",X"C3",X"20",X"AA",X"92",X"3A",X"C0",X"87",X"51",X"77",X"AD", - X"62",X"B9",X"4F",X"7F",X"BC",X"1E",X"BF",X"7E",X"51",X"C3",X"50",X"72",X"C0",X"49",X"8A",X"81", - X"72",X"AA",X"7B",X"55",X"8C",X"83",X"CA",X"2B",X"97",X"9C",X"4B",X"86",X"9F",X"B0",X"14",X"EA", - X"3C",X"8A",X"9B",X"51",X"C2",X"25",X"C7",X"70",X"5F",X"AF",X"52",X"C6",X"29",X"B8",X"7F",X"5F", - X"A3",X"5C",X"CB",X"26",X"AE",X"8B",X"3C",X"D6",X"48",X"8A",X"74",X"A2",X"8D",X"3F",X"D3",X"2A", - X"B9",X"7B",X"4D",X"A6",X"69",X"B6",X"6E",X"56",X"8A",X"A1",X"64",X"C3",X"28",X"B2",X"7D",X"60", - X"A6",X"58",X"D4",X"11",X"D1",X"5C",X"7A",X"A8",X"42",X"96",X"C7",X"27",X"A9",X"90",X"44",X"89", - X"9F",X"69",X"90",X"A7",X"25",X"DB",X"46",X"7C",X"B7",X"42",X"9A",X"6E",X"99",X"8C",X"81",X"41", - X"C7",X"7A",X"58",X"8D",X"83",X"B2",X"29",X"C1",X"6E",X"52",X"DA",X"44",X"83",X"B6",X"2A",X"C4", - X"41",X"A6",X"7A",X"76",X"98",X"5B",X"B6",X"86",X"42",X"A2",X"8A",X"4B",X"95",X"97",X"65",X"B7", - X"56",X"6C",X"D2",X"1E",X"B6",X"94",X"36",X"DD",X"38",X"96",X"7B",X"70",X"9E",X"95",X"59",X"77", - X"82",X"8D",X"7C",X"78",X"DC",X"01",X"CD",X"70",X"5D",X"76",X"B4",X"91",X"35",X"BD",X"48",X"D3", - X"36",X"8E",X"B7",X"2C",X"BE",X"49",X"CA",X"4C",X"72",X"CB",X"29",X"B9",X"82",X"3B",X"CC",X"71", - X"4B",X"D1",X"4F",X"6A",X"8D",X"C9",X"46",X"6A",X"CA",X"28",X"99",X"A9",X"61",X"59",X"AA",X"78", - X"8F",X"98",X"35",X"CE",X"64",X"58",X"95",X"A7",X"49",X"AC",X"57",X"9B",X"7C",X"70",X"DE",X"14", - X"A9",X"A3",X"3F",X"7B",X"C9",X"57",X"5F",X"D6",X"17",X"C5",X"7D",X"58",X"9E",X"71",X"B8",X"3D", - X"72",X"A7",X"6C",X"A7",X"80",X"3A",X"E5",X"22",X"A5",X"61",X"B6",X"86",X"38",X"D9",X"56",X"57", - X"9A",X"8E",X"64",X"97",X"96",X"7D",X"45",X"CC",X"5D",X"5A",X"A8",X"AA",X"3C",X"7E",X"97",X"C1", - X"22",X"9B",X"A7",X"45",X"7F",X"A1",X"B4",X"1D",X"BB",X"51",X"B9",X"7A",X"45",X"91",X"A5",X"67", - X"B8",X"34",X"9E",X"A8",X"35",X"88",X"B0",X"54",X"A8",X"8C",X"31",X"E7",X"41",X"6A",X"C7",X"41", - X"85",X"BA",X"2D",X"B1",X"A0",X"35",X"90",X"9F",X"75",X"A0",X"5D",X"52",X"CA",X"59",X"84",X"9A", - X"52",X"B2",X"66",X"AF",X"43",X"6E",X"BC",X"59",X"89",X"95",X"8B",X"74",X"44",X"AE",X"85",X"96", - X"7B",X"4A",X"8B",X"BD",X"7E",X"2F",X"D2",X"68",X"4D",X"D9",X"41",X"6F",X"CA",X"4D",X"62",X"A0", - X"B7",X"3C",X"76",X"D1",X"2E",X"98",X"B1",X"2A",X"BB",X"8D",X"2F",X"E2",X"4A",X"6C",X"C4",X"49", - X"64",X"A5",X"88",X"80",X"9E",X"2A",X"DD",X"59",X"54",X"CE",X"60",X"54",X"9E",X"9D",X"42",X"BF", - X"92",X"34",X"98",X"B7",X"40",X"77",X"9F",X"BC",X"28",X"93",X"B8",X"44",X"67",X"A7",X"AC",X"41", - X"6F",X"9F",X"91",X"50",X"C4",X"37",X"B1",X"7A",X"5B",X"DD",X"4C",X"58",X"C6",X"5D",X"51",X"BA", - X"82",X"47",X"D6",X"6B",X"45",X"AC",X"60",X"C5",X"3D",X"7D",X"CA",X"33",X"8D",X"AE",X"42",X"88", - X"CB",X"4F",X"5D",X"84",X"C3",X"31",X"B4",X"6B",X"6C",X"AD",X"73",X"AB",X"23",X"D5",X"6B",X"43", - X"D1",X"6A",X"47",X"CB",X"4B",X"77",X"C4",X"2B",X"BC",X"94",X"35",X"C6",X"77",X"3E",X"9E",X"94", - X"77",X"A5",X"43",X"7C",X"99",X"BD",X"3A",X"79",X"C8",X"2B",X"B8",X"83",X"37",X"D2",X"77",X"4F", - X"78",X"BD",X"43",X"AC",X"80",X"66",X"C8",X"28",X"89",X"A3",X"AF",X"2A",X"92",X"B9",X"3D",X"80", - X"CC",X"27",X"9A",X"B0",X"48",X"66",X"AD",X"8D",X"44",X"D0",X"6A",X"44",X"AA",X"87",X"6B",X"C7", - X"25",X"A3",X"AB",X"41",X"70",X"AD",X"71",X"9C",X"74",X"45",X"C9",X"91",X"51",X"5D",X"D9",X"4E", - X"62",X"C7",X"61",X"4C",X"A4",X"97",X"78",X"95",X"3D",X"9E",X"A8",X"30",X"D4",X"4B",X"81",X"B2", - X"33",X"C5",X"65",X"A4",X"63",X"4E",X"A8",X"98",X"5F",X"C0",X"30",X"96",X"B5",X"3D",X"75",X"B2", - X"92",X"31",X"B1",X"A5",X"33",X"A4",X"AD",X"43",X"68",X"B4",X"7A",X"51",X"DB",X"45",X"74",X"C9", - X"2D",X"95",X"AD",X"3B",X"8E",X"A9",X"3D",X"C0",X"70",X"62",X"D5",X"27",X"A7",X"9E",X"3F",X"7C", - X"BC",X"50",X"A4",X"8E",X"34",X"A3",X"A1",X"4E",X"99",X"BC",X"35",X"7B",X"BD",X"67",X"45",X"AA", - X"94",X"62",X"C1",X"3E",X"74",X"CB",X"41",X"74",X"A3",X"50",X"B6",X"9F",X"47",X"68",X"A6",X"AF", - X"4A",X"62",X"94",X"AC",X"3F",X"AD",X"A9",X"3F",X"72",X"8A",X"C7",X"54",X"5E",X"7A",X"C0",X"80", - X"4D",X"6B",X"B7",X"71",X"86",X"9F",X"2C",X"DC",X"60",X"59",X"79",X"BB",X"7C",X"40",X"A8",X"AC", - X"63",X"48",X"D4",X"67",X"56",X"79",X"B8",X"8D",X"38",X"BE",X"7E",X"3C",X"B0",X"97",X"54",X"C2", - X"37",X"98",X"B4",X"32",X"90",X"B9",X"4F",X"5E",X"B2",X"A0",X"34",X"9F",X"A3",X"35",X"AD",X"9B", - X"38",X"BB",X"97",X"4E",X"64",X"A4",X"94",X"53",X"D0",X"45",X"6A",X"C2",X"6E",X"42",X"CC",X"77", - X"52",X"73",X"BB",X"61",X"89",X"B2",X"2D",X"9C",X"B4",X"43",X"77",X"C5",X"57",X"59",X"93",X"A6", - X"5B",X"B6",X"50",X"63",X"BE",X"8D",X"4D",X"6A",X"A2",X"AA",X"6F",X"3F",X"C2",X"86",X"4B",X"75", - X"BD",X"76",X"4B",X"D2",X"5A",X"5A",X"8A",X"BF",X"5B",X"56",X"B3",X"9F",X"4E",X"66",X"C4",X"5D", - X"51",X"C0",X"68",X"70",X"C1",X"3E",X"75",X"BB",X"50",X"A6",X"88",X"3A",X"AB",X"A4",X"79",X"3A", - X"BC",X"8E",X"4A",X"74",X"B7",X"82",X"42",X"D2",X"5F",X"5A",X"7F",X"B4",X"8D",X"41",X"86",X"C0", - X"55",X"5F",X"C0",X"44",X"96",X"B6",X"5A",X"5A",X"84",X"BD",X"78",X"52",X"6C",X"BA",X"82",X"41", - X"BD",X"83",X"3E",X"A9",X"91",X"56",X"CA",X"38",X"95",X"AA",X"39",X"8B",X"AE",X"4D",X"8C",X"AC", - X"35",X"BC",X"79",X"52",X"C1",X"5A",X"80",X"C2",X"41",X"73",X"A8",X"4C",X"B1",X"9C",X"63",X"4F", - X"BB",X"8B",X"4B",X"70",X"B2",X"7F",X"46",X"D3",X"48",X"A3",X"94",X"3D",X"94",X"B6",X"52",X"61", - X"BD",X"49",X"91",X"B9",X"58",X"61",X"77",X"BD",X"4D",X"A9",X"84",X"43",X"CF",X"6A",X"58",X"74", - X"C2",X"57",X"93",X"61",X"84",X"BB",X"2E",X"B6",X"86",X"4B",X"C7",X"71",X"54",X"76",X"AF",X"73", - X"5D",X"D2",X"40",X"85",X"B7",X"59",X"5A",X"94",X"AF",X"40",X"9D",X"A1",X"32",X"BD",X"71",X"72", - X"BC",X"51",X"60",X"97",X"AC",X"7F",X"47",X"8D",X"B7",X"57",X"5B",X"C1",X"7B",X"52",X"73",X"AB", - X"8B",X"44",X"C1",X"82",X"42",X"BD",X"75",X"4B",X"B0",X"9D",X"6A",X"50",X"8A",X"AD",X"8E",X"53", - X"65",X"9C",X"AE",X"65",X"51",X"AF",X"99",X"43",X"80",X"B4",X"7E",X"3D",X"B9",X"6B",X"66",X"C2", - X"45",X"B4",X"81",X"50",X"72",X"BC",X"6E",X"4E",X"BA",X"7A",X"4A",X"C1",X"6F",X"5A",X"BB",X"89", - X"5C",X"5E",X"9B",X"AF",X"5E",X"5C",X"CA",X"43",X"87",X"B0",X"41",X"85",X"BA",X"4D",X"77",X"BA", - X"76",X"4A",X"A7",X"9D",X"54",X"61",X"AA",X"9C",X"47",X"7B",X"B2",X"8B",X"51",X"6C",X"9A",X"A4", - X"42",X"A4",X"A6",X"3A",X"A5",X"97",X"3F",X"9E",X"A7",X"78",X"4E",X"7F",X"B1",X"8A",X"58",X"64", - X"B8",X"88",X"48",X"87",X"B5",X"6E",X"49",X"BE",X"59",X"93",X"A5",X"46",X"74",X"9E",X"A3",X"35", - X"C2",X"72",X"55",X"C2",X"5B",X"60",X"B9",X"79",X"48",X"C8",X"57",X"84",X"B1",X"4B",X"6C",X"97", - X"AC",X"3F",X"8C",X"AF",X"47",X"AF",X"89",X"4A",X"7D",X"A4",X"9E",X"4F",X"6A",X"B1",X"8E",X"45", - X"88",X"B2",X"70",X"4B",X"A7",X"9C",X"41",X"AD",X"96",X"49",X"7B",X"B6",X"77",X"4B",X"B4",X"8D", - X"56",X"67",X"A2",X"A0",X"3E",X"B2",X"84",X"45",X"AC",X"9A",X"78",X"44",X"B1",X"80",X"52",X"C9", - X"4B",X"7E",X"B7",X"3C",X"A1",X"99",X"40",X"9F",X"A3",X"7C",X"4C",X"8A",X"B0",X"76",X"4C",X"9D", - X"A6",X"3F",X"9C",X"A5",X"5E",X"5C",X"B7",X"85",X"4E",X"7E",X"B4",X"6A",X"56",X"CD",X"4B",X"99", - X"6F",X"69",X"C4",X"45",X"89",X"B2",X"60",X"60",X"7F",X"BB",X"57",X"6E",X"B4",X"84",X"66",X"59", - X"BD",X"4A",X"9F",X"A0",X"5B",X"5F",X"A1",X"A4",X"65",X"57",X"94",X"A3",X"8E",X"46",X"8A",X"9B", - X"58",X"B7",X"78",X"4C",X"9B",X"A1",X"40",X"AF",X"87",X"42",X"B4",X"80",X"5E",X"BB",X"4B",X"7D", - X"BB",X"42",X"95",X"A1",X"42",X"AA",X"98",X"59",X"64",X"A4",X"A0",X"5F",X"5D",X"9C",X"A7",X"66", - X"57",X"A0",X"A4",X"5E",X"61",X"8A",X"B4",X"4D",X"92",X"A5",X"55",X"68",X"8F",X"B1",X"55",X"6C", - X"BE",X"51",X"88",X"A6",X"36",X"C2",X"6C",X"60",X"B2",X"84",X"4D",X"84",X"A8",X"4A",X"A5",X"9E", - X"60",X"5D",X"AD",X"92",X"76",X"4E",X"94",X"A8",X"72",X"4C",X"B0",X"7A",X"57",X"B8",X"85",X"72", - X"51",X"C2",X"59",X"6C",X"B1",X"86",X"69",X"5A",X"92",X"A9",X"7B",X"50",X"8B",X"B3",X"41",X"AD", - X"6F",X"61",X"B7",X"82",X"6E",X"55",X"A0",X"9F",X"4B",X"87",X"B1",X"52",X"9B",X"96",X"59",X"68", - X"B7",X"55",X"85",X"B1",X"64",X"65",X"70",X"BB",X"6A",X"5F",X"B0",X"8A",X"76",X"55",X"82",X"AE", - X"82",X"5F",X"66",X"A1",X"9C",X"48",X"B7",X"67",X"60",X"B8",X"76",X"4D",X"B7",X"76",X"62",X"B1", - X"7C",X"55",X"84",X"AD",X"77",X"55",X"8B",X"AC",X"40",X"9A",X"A1",X"75",X"57",X"7D",X"A6",X"91", - X"75",X"5C",X"74",X"AE",X"7D",X"52",X"C1",X"58",X"74",X"B7",X"45",X"95",X"A1",X"70",X"57",X"89", - X"AA",X"81",X"5B",X"6D",X"9F",X"9E",X"6F",X"57",X"AB",X"8E",X"63",X"5E",X"B0",X"80",X"4E",X"B1", - X"88",X"4C",X"9E",X"9A",X"46",X"98",X"A4",X"6C",X"55",X"B0",X"84",X"56",X"B8",X"48",X"92",X"A3", - X"7D",X"69",X"5C",X"A6",X"98",X"51",X"83",X"B5",X"4C",X"8E",X"A3",X"69",X"5E",X"80",X"AF",X"6B", - X"5B",X"B3",X"7C",X"52",X"B1",X"88",X"81",X"50",X"88",X"A7",X"83",X"54",X"82",X"AB",X"46",X"9F", - X"9F",X"4B",X"94",X"9F",X"42",X"A8",X"92",X"84",X"59",X"77",X"B3",X"46",X"A5",X"8C",X"4A",X"AE", - X"8A",X"59",X"A9",X"82",X"67",X"60",X"99",X"9F",X"81",X"6A",X"5B",X"BF",X"4F",X"9C",X"82",X"54", - X"BA",X"75",X"55",X"A7",X"8A",X"4B",X"A4",X"96",X"82",X"61",X"67",X"9A",X"9E",X"4D",X"8A",X"A7", - X"7F",X"73",X"52",X"BB",X"60",X"73",X"AC",X"83",X"73",X"59",X"89",X"A4",X"88",X"50",X"95",X"A2", - X"67",X"63",X"7D",X"B0",X"72",X"59",X"A9",X"8F",X"50",X"87",X"AC",X"47",X"9C",X"97",X"7B",X"53", - X"92",X"A0",X"7B",X"5B",X"7F",X"B1",X"49",X"8D",X"A4",X"7B",X"66",X"62",X"B4",X"76",X"66",X"AA", - X"81",X"62",X"6D",X"AF",X"80",X"6D",X"5C",X"97",X"9C",X"86",X"69",X"60",X"AE",X"80",X"4E",X"B9", - X"66",X"6D",X"AA",X"83",X"64",X"69",X"AD",X"86",X"6B",X"60",X"8C",X"AA",X"65",X"66",X"AF",X"80", - X"51",X"9A",X"9B",X"7B",X"72",X"57",X"A5",X"92",X"87",X"67",X"66",X"86",X"B2",X"58",X"8E",X"8B", - X"5F",X"B0",X"71",X"6B",X"63",X"A7",X"8F",X"85",X"67",X"63",X"B2",X"61",X"6F",X"AE",X"81",X"7F", - X"4E",X"A4",X"8D",X"51",X"9F",X"99",X"73",X"62",X"75",X"B6",X"66",X"79",X"9F",X"50",X"B7",X"4C", - X"8E",X"9E",X"7D",X"5C",X"7F",X"AF",X"4B",X"8D",X"A1",X"7D",X"65",X"66",X"AE",X"7B",X"62",X"AD", - X"7B",X"6C",X"5F",X"A8",X"8D",X"84",X"66",X"65",X"A7",X"8D",X"75",X"58",X"9F",X"97",X"74",X"60", - X"79",X"A4",X"8E",X"6A",X"5F",X"A7",X"8D",X"53",X"A7",X"87",X"73",X"57",X"B1",X"74",X"68",X"AD", - X"48",X"A0",X"94",X"81",X"6D",X"5F",X"94",X"9C",X"85",X"6D",X"5F",X"97",X"9D",X"78",X"5B",X"87", - X"AA",X"5E",X"6C",X"A6",X"8A",X"7A",X"5D",X"7B",X"9E",X"96",X"59",X"7D",X"AB",X"4C",X"98",X"95", - X"4B",X"A5",X"8B",X"55",X"A5",X"8D",X"71",X"60",X"84",X"A4",X"84",X"7F",X"5A",X"82",X"AB",X"5B", - X"78",X"B2",X"5B",X"7F",X"A2",X"4D",X"94",X"A2",X"51",X"98",X"93",X"78",X"57",X"9B",X"95",X"7D", - X"57",X"90",X"9D",X"53",X"A2",X"8D",X"6C",X"65",X"81",X"AD",X"68",X"71",X"A9",X"53",X"A4",X"82", - X"7A",X"55",X"A4",X"88",X"53",X"A5",X"8D",X"7F",X"6A",X"63",X"A7",X"87",X"59",X"A5",X"8A",X"77", - X"61",X"7B",X"AD",X"73",X"6B",X"A1",X"7F",X"6F",X"60",X"B2",X"6C",X"66",X"AA",X"82",X"81",X"5E", - X"75",X"9D",X"92",X"7D",X"6C",X"63",X"B0",X"73",X"60",X"A8",X"86",X"80",X"62",X"71",X"99",X"9A", - X"50",X"97",X"92",X"51",X"9D",X"96",X"51",X"A5",X"79",X"5D",X"AA",X"85",X"80",X"64",X"6D",X"AB", - X"77",X"64",X"A9",X"82",X"77",X"5F",X"85",X"A1",X"85",X"7F",X"5B",X"88",X"A4",X"4E",X"95",X"98", - X"81",X"69",X"69",X"B1",X"55",X"90",X"99",X"4F",X"A7",X"7E",X"59",X"AA",X"7C",X"5B",X"9E",X"92", - X"7E",X"70",X"5F",X"A1",X"8F",X"85",X"5F",X"78",X"A6",X"7F",X"77",X"5A",X"A0",X"87",X"58",X"A0", - X"93",X"59",X"97",X"94",X"5B",X"76",X"9F",X"8E",X"63",X"72",X"AC",X"57",X"81",X"A6",X"66",X"68", - X"A7",X"83",X"5C",X"A7",X"80",X"7A",X"59",X"97",X"9A",X"5D",X"7A",X"AD",X"66",X"72",X"A1",X"80", - X"70",X"62",X"A7",X"85",X"7B",X"5F",X"7E",X"9D",X"8E",X"73",X"5F",X"93",X"9D",X"63",X"6D",X"AA", - X"7B",X"89",X"5B",X"7F",X"A0",X"84",X"64",X"78",X"A5",X"7A",X"75",X"5E",X"9C",X"93",X"7F",X"7C", - X"58",X"A0",X"8D",X"80",X"61",X"77",X"9D",X"91",X"65",X"71",X"A4",X"80",X"76",X"5E",X"A4",X"89", - X"7C",X"62",X"78",X"9D",X"8D",X"7D",X"6C",X"68",X"B0",X"69",X"78",X"A3",X"54",X"9F",X"8A",X"79", - X"63",X"7A",X"9E",X"8D",X"64",X"71",X"AD",X"6D",X"6D",X"9D",X"86",X"6F",X"68",X"82",X"A8",X"6A", - X"74",X"A2",X"7A",X"73",X"61",X"B1",X"66",X"73",X"A8",X"5C",X"7D",X"A7",X"6C",X"6C",X"AA",X"56", - X"97",X"89",X"55",X"A7",X"85",X"85",X"6E",X"66",X"A6",X"82",X"82",X"5F",X"81",X"A5",X"55",X"8A", - X"9C",X"7C",X"81",X"5B",X"8A",X"9F",X"5E",X"7E",X"A9",X"5D",X"79",X"9E",X"87",X"61",X"76",X"9E", - X"8C",X"65",X"72",X"A2",X"83",X"78",X"60",X"A2",X"86",X"7C",X"5E",X"9B",X"8C",X"56",X"AD",X"66", - X"71",X"A3",X"81",X"82",X"66",X"74",X"AE",X"5E",X"82",X"9B",X"58",X"8E",X"9E",X"63",X"72",X"A1", - X"84",X"72",X"62",X"9F",X"8B",X"81",X"73",X"65",X"89",X"9D",X"7F",X"84",X"5E",X"84",X"9E",X"7C", - X"7B",X"5E",X"8B",X"96",X"8C",X"56",X"96",X"90",X"80",X"66",X"74",X"9A",X"92",X"61",X"78",X"9E", - X"87",X"69",X"72",X"A2",X"7F",X"76",X"63",X"8B",X"9A",X"83",X"5B",X"8F",X"98",X"7B",X"7F",X"5B", - X"92",X"98",X"5A",X"9D",X"86",X"81",X"62",X"80",X"A0",X"7B",X"76",X"61",X"9A",X"91",X"80",X"7B", - X"5E",X"91",X"96",X"7F",X"6E",X"69",X"99",X"94",X"64",X"75",X"A6",X"74",X"64",X"8F",X"9D",X"65", - X"72",X"A1",X"83",X"74",X"62",X"9F",X"89",X"82",X"72",X"67",X"88",X"9D",X"7A",X"62",X"AC",X"5A", - X"8F",X"90",X"7F",X"6E",X"6B",X"8E",X"9D",X"61",X"86",X"9B",X"56",X"9D",X"88",X"7C",X"64",X"7B", - X"99",X"8E",X"5E",X"7F",X"9F",X"7F",X"83",X"63",X"7D",X"A5",X"6A",X"6C",X"99",X"8F",X"57",X"A1", - X"7C",X"68",X"9C",X"86",X"6B",X"72",X"A2",X"7B",X"81",X"5C",X"98",X"90",X"77",X"61",X"A5",X"71", - X"6B",X"A0",X"87",X"73",X"68",X"A2",X"80",X"80",X"63",X"7D",X"9E",X"81",X"60",X"A2",X"77",X"69", - X"A8",X"6B",X"6D",X"9D",X"83",X"7E",X"65",X"7C",X"9D",X"86",X"62",X"80",X"A1",X"6F",X"68",X"A0", - X"83",X"84",X"6C",X"6E",X"92",X"9A",X"5D",X"8C",X"8F",X"5F",X"A1",X"7F",X"7F",X"65",X"7B",X"98", - X"8C",X"61",X"7C",X"A1",X"78",X"66",X"A3",X"68",X"75",X"A3",X"7A",X"87",X"69",X"70",X"8E",X"97", - X"7C",X"62",X"93",X"90",X"79",X"6B",X"74",X"A0",X"83",X"63",X"87",X"9E",X"6D",X"70",X"A1",X"60", - X"8E",X"91",X"7A",X"73",X"68",X"97",X"8E",X"84",X"73",X"68",X"8D",X"9A",X"75",X"66",X"9E",X"7F", - X"60",X"9A",X"8E",X"61",X"8D",X"92",X"57",X"96",X"8E",X"81",X"79",X"65",X"9C",X"87",X"7A",X"67", - X"80",X"9E",X"7D",X"85",X"64",X"7B",X"9B",X"85",X"72",X"68",X"98",X"8F",X"74",X"66",X"9A",X"89", - X"5D",X"8D",X"96",X"7C",X"60",X"A1",X"7C",X"69",X"9D",X"81",X"78",X"65",X"A2",X"78",X"69",X"A8", - X"62",X"83",X"95",X"7E",X"76",X"67",X"8B",X"97",X"7B",X"61",X"A7",X"6B",X"76",X"9C",X"7F",X"77", - X"66",X"91",X"95",X"77",X"64",X"98",X"8E",X"64",X"7B",X"9D",X"7F",X"61",X"94",X"8F",X"7C",X"66", - X"82",X"9D",X"7A",X"87",X"66",X"7A",X"A0",X"6E",X"6D",X"A0",X"7F",X"84",X"71",X"6B",X"9E",X"83", - X"7E",X"62",X"90",X"92",X"7B",X"79",X"62",X"A4",X"79",X"70",X"99",X"84",X"62",X"8B",X"92",X"7F", - X"74",X"6B",X"8A",X"99",X"75",X"68",X"99",X"8C",X"68",X"77",X"9D",X"7D",X"83",X"6F",X"6D",X"91", - X"91",X"83",X"6F",X"6E",X"99",X"8C",X"69",X"76",X"9F",X"79",X"68",X"A1",X"70",X"6D",X"9B",X"86", - X"60",X"9C",X"7C",X"6A",X"9F",X"7B",X"84",X"65",X"81",X"A0",X"61",X"89",X"91",X"7D",X"7B",X"65", - X"8D",X"95",X"7E",X"83",X"70",X"6D",X"A3",X"73",X"70",X"A1",X"67",X"7F",X"9C",X"5A",X"98",X"7F", - X"6B",X"A0",X"78",X"87",X"60",X"8A",X"95",X"7C",X"81",X"61",X"94",X"8E",X"7F",X"7A",X"67",X"88", - X"93",X"88",X"6F",X"71",X"A0",X"67",X"78",X"98",X"88",X"6D",X"72",X"9E",X"7E",X"83",X"78",X"67", - X"8D",X"92",X"82",X"63",X"8F",X"8F",X"7D",X"7A",X"66",X"8F",X"93",X"7B",X"66",X"A3",X"6B",X"7B", - X"97",X"7E",X"74",X"6B",X"9B",X"86",X"7F",X"80",X"66",X"82",X"95",X"87",X"62",X"88",X"95",X"7D", - X"82",X"6B",X"77",X"99",X"86",X"66",X"91",X"8C",X"74",X"6C",X"98",X"85",X"7B",X"66",X"97",X"87", - X"80",X"74",X"6D",X"8C",X"96",X"73",X"70",X"A1",X"64",X"7A",X"93",X"8D",X"64",X"80",X"96",X"82", - X"6F",X"71",X"99",X"87",X"65",X"82",X"98",X"7F",X"82",X"71",X"6F",X"92",X"8D",X"83",X"6E",X"73", - X"95",X"8C",X"6E",X"74",X"9A",X"7E",X"82",X"69",X"7E",X"9F",X"62",X"88",X"91",X"64",X"8F",X"8F", - X"65",X"7E",X"96",X"83",X"63",X"8D",X"90",X"7F",X"7D",X"67",X"98",X"85",X"7E",X"66",X"92",X"8B", - X"7C",X"6C",X"7C",X"9B",X"7C",X"69",X"94",X"86",X"7F",X"72",X"6F",X"8F",X"91",X"78",X"68",X"97", - X"89",X"7B",X"67",X"97",X"86",X"80",X"74",X"6C",X"94",X"8C",X"7E",X"82",X"6B",X"7C",X"9F",X"67", - X"82",X"96",X"6A",X"77",X"9A",X"7E",X"83",X"78",X"69",X"98",X"86",X"81",X"74",X"6D",X"8C",X"91", - X"81",X"7A",X"69",X"99",X"80",X"65",X"90",X"8F",X"7D",X"66",X"96",X"87",X"7F",X"67",X"8D",X"8F", - X"61",X"98",X"7F",X"67",X"8E",X"90",X"7D",X"82",X"69",X"7D",X"96",X"86",X"6A",X"7D",X"9D",X"6F", - X"76",X"99",X"6E",X"71",X"99",X"83",X"83",X"71",X"71",X"8F",X"91",X"71",X"72",X"9A",X"7D",X"84", - X"6A",X"7A",X"8C",X"94",X"6B",X"7D",X"94",X"7F",X"6D",X"79",X"97",X"84",X"67",X"85",X"93",X"81", - X"73",X"74",X"9B",X"7A",X"84",X"68",X"80",X"97",X"7E",X"83",X"69",X"82",X"99",X"69",X"82",X"97", - X"65",X"87",X"91",X"63",X"93",X"86",X"7F",X"76",X"6C",X"94",X"89",X"82",X"6D",X"78",X"96",X"86", - X"69",X"80",X"97",X"79",X"6D",X"97",X"7D",X"6A",X"9A",X"76",X"6D",X"98",X"83",X"81",X"7D",X"6C", - X"80",X"93",X"87",X"65",X"96",X"83",X"81",X"78",X"6B",X"99",X"82",X"82",X"73",X"70",X"91",X"8D", - X"7C",X"84",X"69",X"80",X"97",X"7B",X"85",X"6C",X"79",X"92",X"8B",X"73",X"71",X"9B",X"75",X"6E", - X"91",X"8E",X"70",X"73",X"97",X"84",X"6B",X"80",X"98",X"77",X"70",X"95",X"7F",X"67",X"93",X"89", - X"7F",X"7E",X"6B",X"83",X"95",X"7F",X"82",X"78",X"6C",X"98",X"83",X"81",X"79",X"6B",X"96",X"84", - X"67",X"95",X"84",X"68",X"8E",X"8F",X"71",X"72",X"8F",X"8F",X"6B",X"80",X"93",X"7A",X"6B",X"91", - X"87",X"65",X"90",X"8D",X"74",X"6E",X"93",X"89",X"7D",X"82",X"6B",X"7E",X"93",X"87",X"6B",X"7F", - X"97",X"7A",X"86",X"6B",X"7E",X"95",X"7D",X"83",X"71",X"74",X"93",X"88",X"7F",X"7E",X"69",X"96", - X"83",X"81",X"79",X"6C",X"8B",X"90",X"7D",X"83",X"77",X"6E",X"8A",X"92",X"77",X"71",X"98",X"78", - X"6F",X"9B",X"6E",X"7D",X"94",X"7A",X"83",X"65",X"93",X"88",X"81",X"78",X"6F",X"86",X"96",X"71", - X"79",X"94",X"7D",X"80",X"6C",X"7E",X"91",X"87",X"7E",X"80",X"6B",X"80",X"8F",X"8B",X"6B",X"7D", - X"95",X"7D",X"83",X"72",X"73",X"92",X"88",X"80",X"6E",X"7C",X"95",X"80",X"6D",X"7F",X"95",X"7D", - X"83",X"77",X"6E",X"92",X"88",X"7F",X"6F",X"7A",X"96",X"7F",X"6E",X"80",X"99",X"6B",X"7F",X"90", - X"80",X"75",X"72",X"94",X"87",X"75",X"72",X"99",X"78",X"6F",X"8C",X"8F",X"6C",X"7C",X"92",X"80", - X"78",X"6E",X"90",X"8C",X"72",X"73",X"96",X"81",X"81",X"6D",X"7F",X"95",X"7D",X"83",X"7B",X"6E", - X"83",X"93",X"7E",X"83",X"6A",X"88",X"90",X"66",X"8C",X"8D",X"69",X"86",X"92",X"7B",X"85",X"70", - X"76",X"8D",X"8E",X"70",X"78",X"96",X"7C",X"85",X"6F",X"79",X"98",X"74",X"71",X"90",X"89",X"7C", - X"83",X"6B",X"83",X"91",X"80",X"80",X"70",X"79",X"90",X"88",X"7E",X"81",X"6E",X"7D",X"98",X"71", - X"7B",X"93",X"7A",X"85",X"6B",X"80",X"92",X"81",X"80",X"71",X"79",X"99",X"74",X"78",X"93",X"7C", - X"83",X"70",X"78",X"8D",X"8B",X"7E",X"80",X"6C",X"82",X"90",X"84",X"6A",X"8B",X"8C",X"7D",X"81", - X"6B",X"8B",X"8F",X"6D",X"82",X"92",X"6C",X"7F",X"94",X"72",X"74",X"91",X"86",X"6D",X"82",X"93", - X"69",X"82",X"91",X"80",X"6E",X"81",X"94",X"77",X"73",X"93",X"7C",X"6F",X"97",X"78",X"71",X"8B", - X"8F",X"6C",X"82",X"8E",X"7D",X"81",X"6F",X"7C",X"8F",X"87",X"7E",X"80",X"6E",X"7E",X"8E",X"8A", - X"70",X"78",X"95",X"7D",X"84",X"78",X"71",X"87",X"91",X"79",X"70",X"91",X"85",X"7C",X"6F",X"8B", - X"8C",X"67",X"90",X"82",X"6F",X"91",X"84",X"76",X"72",X"8D",X"8D",X"70",X"7D",X"93",X"6F",X"7D", - X"95",X"68",X"88",X"8B",X"80",X"78",X"73",X"96",X"7D",X"84",X"73",X"75",X"93",X"83",X"81",X"77", - X"72",X"8E",X"8A",X"7E",X"80",X"6D",X"8C",X"8C",X"6A",X"83",X"8F",X"81",X"6D",X"85",X"8F",X"7E", - X"6D",X"88",X"8D",X"7F",X"6F",X"82",X"91",X"7D",X"6F",X"85",X"8F",X"7D",X"7D",X"6D",X"90",X"88", - X"7C",X"6E",X"94",X"80",X"70",X"8E",X"87",X"76",X"74",X"92",X"81",X"7D",X"6D",X"8F",X"87",X"7F", - X"71",X"7C",X"92",X"81",X"73",X"7A",X"95",X"7C",X"84",X"7B",X"6F",X"8D",X"8A",X"7B",X"71",X"82", - X"92",X"79",X"73",X"91",X"7E",X"6D",X"8D",X"89",X"7D",X"83",X"6D",X"84",X"8F",X"7D",X"83",X"70", - X"7B",X"8B",X"8B",X"7B",X"85",X"71",X"7A",X"93",X"7E",X"82",X"75",X"75",X"89",X"8D",X"7D",X"6D", - X"90",X"85",X"81",X"79",X"71",X"8D",X"8A",X"79",X"72",X"91",X"83",X"7D",X"6F",X"86",X"8E",X"7D", - X"70",X"85",X"90",X"7A",X"86",X"74",X"76",X"91",X"82",X"81",X"79",X"72",X"87",X"8D",X"80",X"6D", - X"86",X"8E",X"7E",X"82",X"76",X"74",X"89",X"8B",X"82",X"72",X"7F",X"94",X"6F",X"80",X"8D",X"7E", - X"73",X"7B",X"92",X"7F",X"71",X"8A",X"89",X"6A",X"89",X"8B",X"81",X"71",X"7F",X"91",X"7C",X"84", - X"79",X"72",X"8D",X"89",X"6C",X"8C",X"86",X"7F",X"7C",X"71",X"83",X"8D",X"83",X"7E",X"81",X"6E", - X"83",X"8D",X"85",X"71",X"7C",X"91",X"7E",X"82",X"7D",X"70",X"88",X"8D",X"7D",X"83",X"6E",X"84", - X"8F",X"7C",X"83",X"70",X"7E",X"90",X"7F",X"82",X"76",X"76",X"93",X"7E",X"83",X"7A",X"72",X"8D", - X"89",X"76",X"75",X"92",X"7F",X"83",X"76",X"76",X"92",X"7F",X"6F",X"8A",X"8A",X"7D",X"72",X"83", - X"90",X"79",X"75",X"8A",X"87",X"6B",X"89",X"89",X"7F",X"7F",X"71",X"81",X"93",X"70",X"7E",X"8E", - X"80",X"79",X"73",X"8E",X"88",X"79",X"72",X"8E",X"86",X"7B",X"72",X"8E",X"85",X"6E",X"8E",X"84", - X"6F",X"85",X"8E",X"78",X"74",X"91",X"7C",X"71",X"94",X"7A",X"73",X"8A",X"8C",X"76",X"76",X"8F", - X"84",X"7D",X"83",X"6E",X"86",X"8B",X"81",X"71",X"83",X"8D",X"7E",X"78",X"75",X"92",X"81",X"81", - X"7D",X"72",X"82",X"8E",X"80",X"80",X"7E",X"70",X"85",X"8C",X"83",X"70",X"80",X"8E",X"7F",X"72", - X"81",X"90",X"7A",X"86",X"72",X"7D",X"90",X"77",X"74",X"8C",X"88",X"7D",X"83",X"75",X"78",X"8C", - X"88",X"7D",X"83",X"74",X"79",X"8F",X"83",X"6F",X"87",X"8C",X"79",X"73",X"8A",X"89",X"7D",X"83", - X"76",X"76",X"8C",X"87",X"7F",X"7D",X"70",X"8C",X"87",X"80",X"71",X"84",X"8D",X"7C",X"73",X"8C", - X"83",X"6E",X"89",X"8A",X"7C",X"73",X"90",X"7E",X"83",X"70",X"84",X"8C",X"7E",X"78",X"78",X"93", - X"7A",X"73",X"8A",X"89",X"7C",X"84",X"77",X"76",X"90",X"81",X"81",X"7A",X"73",X"8B",X"89",X"71", - X"7E",X"8F",X"7E",X"71",X"8B",X"86",X"7F",X"7E",X"70",X"8D",X"87",X"72",X"7D",X"8E",X"82",X"73", - X"7E",X"8F",X"7F",X"82",X"7D",X"72",X"88",X"8C",X"6F",X"86",X"89",X"7D",X"81",X"70",X"83",X"8C", - X"82",X"70",X"83",X"8C",X"81",X"72",X"80",X"8E",X"7D",X"83",X"7A",X"74",X"86",X"8C",X"7C",X"72", - X"87",X"8B",X"7D",X"83",X"78",X"76",X"8F",X"82",X"71",X"8D",X"82",X"80",X"7E",X"72",X"83",X"8D", - X"7E",X"83",X"74",X"7E",X"8F",X"7B",X"85",X"74",X"7B",X"8F",X"7F",X"81",X"7B",X"73",X"87",X"8A", - X"80",X"72",X"8B",X"84",X"7E",X"80",X"70",X"8B",X"87",X"7E",X"82",X"73",X"7D",X"8C",X"86",X"77", - X"79",X"91",X"79",X"77",X"90",X"7A",X"77",X"90",X"79",X"75",X"8B",X"87",X"77",X"79",X"91",X"74", - X"7D",X"8C",X"7F",X"72",X"85",X"8B",X"7D",X"72",X"87",X"89",X"7F",X"7B",X"74",X"8D",X"86",X"76", - X"7A",X"91",X"74",X"7A",X"8B",X"86",X"78",X"77",X"8E",X"82",X"7F",X"81",X"73",X"7E",X"8C",X"84", - X"76",X"7B",X"91",X"77",X"77",X"8A",X"87",X"76",X"79",X"8B",X"86",X"75",X"7B",X"8B",X"85",X"72", - X"83",X"89",X"7E",X"7E",X"73",X"8F",X"80",X"73",X"83",X"8D",X"7D",X"84",X"73",X"7E",X"8B",X"84", - X"74",X"7D",X"8C",X"82",X"74",X"7F",X"8D",X"80",X"7B",X"74",X"8D",X"84",X"79",X"76",X"8F",X"80", - X"82",X"72",X"85",X"8A",X"7C",X"82",X"71",X"85",X"8A",X"7F",X"81",X"76",X"7B",X"8F",X"7F",X"83", - X"75",X"7B",X"89",X"89",X"73",X"81",X"8B",X"7C",X"84",X"74",X"7D",X"8C",X"81",X"71",X"89",X"87", - X"80",X"72",X"88",X"87",X"7F",X"75",X"82",X"8C",X"7B",X"84",X"73",X"7F",X"8E",X"7A",X"76",X"8D", - X"81",X"7E",X"74",X"8C",X"84",X"71",X"85",X"8A",X"7E",X"74",X"86",X"8A",X"7B",X"75",X"8A",X"85", - X"71",X"8B",X"83",X"73",X"89",X"85",X"7B",X"75",X"87",X"8A",X"79",X"76",X"8C",X"83",X"7F",X"80", - X"73",X"81",X"89",X"86",X"73",X"7D",X"8B",X"84",X"7A",X"76",X"8C",X"83",X"7F",X"75",X"81",X"8D", - X"7D",X"84",X"77",X"7A",X"8E",X"7B",X"75",X"8D",X"80",X"81",X"7B",X"75",X"8C",X"84",X"7F",X"73", - X"87",X"88",X"7D",X"82",X"75",X"7D",X"8D",X"7F",X"74",X"8D",X"7E",X"75",X"8D",X"7E",X"74",X"88", - X"88",X"7A",X"78",X"8D",X"7C",X"75",X"87",X"89",X"7A",X"76",X"88",X"89",X"77",X"7A",X"8E",X"7C", - X"74",X"8A",X"85",X"7E",X"82",X"76",X"7B",X"89",X"87",X"72",X"88",X"85",X"7E",X"81",X"74",X"7F", - X"88",X"87",X"75",X"7E",X"8E",X"77",X"79",X"8A",X"85",X"77",X"7A",X"8B",X"83",X"76",X"7F",X"8C", - X"73",X"7E",X"8B",X"82",X"75",X"7E",X"8C",X"7F",X"77",X"7C",X"8D",X"80",X"75",X"86",X"87",X"73", - X"7F",X"8B",X"80",X"7F",X"74",X"89",X"85",X"72",X"89",X"85",X"73",X"88",X"85",X"7D",X"82",X"71", - X"8A",X"84",X"83",X"74",X"82",X"89",X"81",X"78",X"7D",X"8C",X"7F",X"7C",X"76",X"8A",X"86",X"7B", - X"77",X"8C",X"81",X"80",X"7E",X"74",X"86",X"88",X"82",X"7A",X"78",X"8B",X"83",X"7E",X"82",X"77", - X"7B",X"88",X"87",X"7A",X"77",X"86",X"89",X"78",X"7A",X"8C",X"7F",X"81",X"79",X"78",X"87",X"87", - X"81",X"76",X"80",X"8D",X"74",X"81",X"89",X"7D",X"83",X"76",X"7D",X"8B",X"81",X"73",X"87",X"88", - X"7D",X"76",X"8D",X"7D",X"77",X"8A",X"82",X"7A",X"78",X"89",X"86",X"76",X"7C",X"8B",X"81",X"7D", - X"75",X"8B",X"82",X"74",X"8A",X"82",X"74",X"8B",X"81",X"80",X"7E",X"75",X"85",X"8A",X"77",X"7B", - X"8A",X"83",X"77",X"7C",X"8B",X"81",X"77",X"7D",X"8D",X"7D",X"83",X"7A",X"78",X"89",X"86",X"7D", - X"83",X"79",X"79",X"8A",X"84",X"75",X"80",X"8A",X"80",X"7B",X"78",X"8E",X"7C",X"78",X"8B",X"7F", - X"81",X"7C",X"76",X"86",X"87",X"80",X"74",X"85",X"88",X"7B",X"76",X"8C",X"81",X"82",X"78",X"7C", - X"8A",X"80",X"7B",X"78",X"8C",X"80",X"7E",X"75",X"87",X"87",X"7D",X"76",X"86",X"88",X"7B",X"77", - X"87",X"87",X"79",X"7A",X"8C",X"7B",X"78",X"8C",X"80",X"81",X"7D",X"76",X"85",X"88",X"80",X"7E", - X"76",X"86",X"88",X"7D",X"76",X"84",X"89",X"7B",X"79",X"89",X"81",X"80",X"7B",X"77",X"89",X"84", - X"80",X"7F",X"75",X"88",X"84",X"7F",X"77",X"7F",X"8B",X"80",X"78",X"7E",X"8C",X"7B",X"79",X"88", - X"83",X"77",X"7F",X"8C",X"76",X"7F",X"89",X"7F",X"78",X"7C",X"8B",X"81",X"76",X"83",X"8A",X"74", - X"83",X"88",X"75",X"82",X"89",X"74",X"81",X"89",X"7D",X"83",X"77",X"7C",X"8C",X"7E",X"76",X"88", - X"86",X"7E",X"83",X"7A",X"79",X"83",X"89",X"7F",X"76",X"88",X"85",X"74",X"84",X"89",X"75",X"82", - X"88",X"7D",X"83",X"75",X"80",X"88",X"82",X"7A",X"7B",X"8B",X"7E",X"82",X"7B",X"78",X"88",X"86", - X"76",X"83",X"88",X"74",X"83",X"88",X"7E",X"76",X"85",X"87",X"7E",X"82",X"7C",X"78",X"83",X"87", - X"83",X"76",X"80",X"89",X"80",X"77",X"81",X"8A",X"7E",X"81",X"7E",X"77",X"81",X"89",X"81",X"78", - X"7C",X"8B",X"80",X"82",X"74",X"86",X"85",X"80",X"77",X"82",X"88",X"7F",X"7A",X"7B",X"8C",X"7E", - X"82",X"7B",X"78",X"87",X"86",X"7E",X"82",X"76",X"81",X"8A",X"7A",X"79",X"87",X"86",X"7A",X"79", - X"89",X"83",X"7F",X"81",X"76",X"83",X"89",X"78",X"7C",X"89",X"82",X"78",X"7C",X"8B",X"7F",X"81", - X"7C",X"77",X"87",X"85",X"7E",X"81",X"77",X"7E",X"8A",X"80",X"81",X"7F",X"77",X"81",X"89",X"80", - X"80",X"7F",X"76",X"84",X"88",X"7E",X"82",X"79",X"7B",X"87",X"86",X"7C",X"79",X"88",X"83",X"76", - X"81",X"88",X"80",X"77",X"81",X"89",X"7D",X"78",X"86",X"84",X"76",X"81",X"88",X"80",X"77",X"85", - X"86",X"76",X"7E",X"89",X"81",X"78",X"7F",X"8A",X"7E",X"78",X"89",X"81",X"80",X"7E",X"77",X"82", - X"87",X"82",X"7F",X"81",X"78",X"7D",X"88",X"83",X"7F",X"77",X"86",X"85",X"7E",X"82",X"76",X"80", - X"88",X"82",X"7E",X"77",X"86",X"85",X"7F",X"77",X"86",X"85",X"7F",X"78",X"81",X"8A",X"75",X"83", - X"87",X"77",X"7F",X"8A",X"79",X"7B",X"88",X"84",X"76",X"84",X"85",X"7E",X"78",X"82",X"88",X"7F", - X"78",X"84",X"87",X"76",X"7F",X"88",X"82",X"7E",X"82",X"77",X"7F",X"89",X"7E",X"82",X"7B",X"7A", - X"87",X"85",X"76",X"81",X"88",X"80",X"77",X"81",X"88",X"7E",X"82",X"7E",X"78",X"82",X"87",X"81", - X"77",X"80",X"88",X"7F",X"78",X"81",X"89",X"7E",X"82",X"7E",X"78",X"82",X"88",X"81",X"78",X"7F", - X"89",X"7E",X"82",X"7E",X"78",X"83",X"88",X"7A",X"7B",X"88",X"81",X"7E",X"77",X"87",X"84",X"7F", - X"78",X"82",X"89",X"75",X"84",X"85",X"7F",X"81",X"78",X"7E",X"8A",X"7E",X"79",X"89",X"80",X"81", - X"7D",X"78",X"85",X"86",X"81",X"76",X"86",X"84",X"80",X"79",X"7E",X"88",X"81",X"79",X"7D",X"8A", - X"7E",X"82",X"7E",X"7A",X"7D",X"88",X"82",X"81",X"79",X"7F",X"8A",X"79",X"7B",X"88",X"82",X"7F", - X"7F",X"77",X"85",X"86",X"7F",X"78",X"82",X"88",X"7F",X"82",X"7B",X"7A",X"86",X"85",X"7F",X"81", - X"77",X"82",X"87",X"80",X"78",X"83",X"86",X"7D",X"83",X"77",X"81",X"88",X"7F",X"82",X"7B",X"7A", - X"88",X"83",X"77",X"83",X"87",X"78",X"7E",X"88",X"80",X"80",X"7F",X"79",X"7D",X"87",X"83",X"80", - X"77",X"83",X"85",X"7F",X"7A",X"7C",X"89",X"81",X"7A",X"7D",X"8A",X"7A",X"7B",X"86",X"84",X"7A", - X"7C",X"89",X"7F",X"82",X"7C",X"7A",X"88",X"81",X"77",X"85",X"86",X"77",X"84",X"85",X"77",X"81", - X"88",X"78",X"7D",X"87",X"82",X"78",X"81",X"87",X"7A",X"7C",X"89",X"7D",X"79",X"87",X"83",X"7A", - X"7C",X"88",X"82",X"7A",X"7D",X"88",X"80",X"78",X"86",X"83",X"76",X"84",X"86",X"7E",X"78",X"86", - X"83",X"7E",X"81",X"77",X"81",X"86",X"83",X"79",X"7E",X"88",X"7F",X"81",X"7D",X"79",X"86",X"84", - X"7E",X"82",X"77",X"81",X"86",X"82",X"78",X"82",X"86",X"80",X"7D",X"7A",X"89",X"80",X"7F",X"78", - X"88",X"81",X"78",X"87",X"81",X"7F",X"81",X"78",X"82",X"88",X"79",X"7F",X"88",X"7B",X"7B",X"85", - X"85",X"7A",X"7E",X"87",X"7F",X"81",X"7D",X"79",X"84",X"85",X"80",X"80",X"78",X"86",X"84",X"77", - X"81",X"87",X"7E",X"82",X"7A",X"7D",X"89",X"7E",X"82",X"7D",X"7A",X"82",X"87",X"7F",X"81",X"7F", - X"79",X"83",X"87",X"7A",X"7C",X"87",X"81",X"7E",X"79",X"85",X"85",X"7E",X"79",X"84",X"86",X"79", - X"7E",X"88",X"7B",X"7B",X"86",X"83",X"7F",X"82",X"79",X"7E",X"87",X"81",X"7D",X"79",X"86",X"84", - X"7F",X"79",X"84",X"85",X"77",X"85",X"84",X"7F",X"81",X"7A",X"7D",X"86",X"83",X"7E",X"82",X"7B", - X"7C",X"87",X"81",X"78",X"81",X"86",X"7F",X"79",X"82",X"86",X"7E",X"79",X"81",X"87",X"7E",X"79", - X"87",X"82",X"7F",X"80",X"78",X"84",X"85",X"7C",X"7B",X"87",X"81",X"80",X"78",X"86",X"83",X"80", - X"7B",X"7C",X"88",X"81",X"7C",X"7C",X"89",X"7B",X"7B",X"85",X"84",X"7B",X"7B",X"85",X"84",X"7C", - X"7A",X"86",X"84",X"7C",X"7B",X"87",X"82",X"7F",X"79",X"85",X"84",X"78",X"84",X"84",X"7A",X"7E", - X"87",X"81",X"7A",X"81",X"86",X"7A",X"7C",X"87",X"81",X"7F",X"81",X"7A",X"7F",X"88",X"7E",X"7A", - X"85",X"83",X"7A",X"7E",X"88",X"7B",X"7D",X"88",X"7D",X"7B",X"87",X"80",X"79",X"84",X"84",X"7E", - X"82",X"79",X"7F",X"87",X"80",X"80",X"79",X"83",X"86",X"7F",X"79",X"83",X"85",X"78",X"80",X"87", - X"7F",X"81",X"7A",X"7F",X"88",X"7A",X"7E",X"87",X"7F",X"81",X"7D",X"7A",X"84",X"85",X"7F",X"79", - X"81",X"87",X"7E",X"82",X"7B",X"7E",X"87",X"7E",X"79",X"84",X"85",X"7E",X"82",X"7C",X"7B",X"84", - X"86",X"78",X"83",X"84",X"80",X"7A",X"7E",X"86",X"82",X"7A",X"7E",X"87",X"81",X"7A",X"7F",X"87", - X"80",X"7E",X"79",X"86",X"83",X"7F",X"81",X"79",X"81",X"86",X"7E",X"82",X"7B",X"7D",X"87",X"80", - X"81",X"7F",X"7A",X"81",X"87",X"7C",X"7B",X"86",X"82",X"7C",X"7B",X"86",X"83",X"7D",X"7A",X"88", - X"7E",X"7B",X"85",X"82",X"7B",X"7D",X"87",X"80",X"7E",X"7A",X"85",X"84",X"7E",X"7A",X"85",X"84", - X"7E",X"7A",X"84",X"84",X"7E",X"82",X"79",X"80",X"86",X"7E",X"7A",X"85",X"83",X"7F",X"80",X"79", - X"85",X"84",X"79",X"82",X"86",X"79",X"81",X"86",X"7B",X"7D",X"87",X"7F",X"79",X"86",X"81",X"79", - X"85",X"83",X"79",X"82",X"85",X"78",X"82",X"85",X"7F",X"81",X"7B",X"7D",X"87",X"80",X"80",X"7F", - X"7A",X"83",X"86",X"7B",X"7D",X"86",X"81",X"7B",X"7D",X"86",X"82",X"7C",X"7D",X"88",X"7D",X"7B", - X"83",X"85",X"7E",X"7A",X"83",X"85",X"7C",X"7C",X"86",X"80",X"7F",X"7A",X"85",X"83",X"79",X"85", - X"83",X"7A",X"81",X"86",X"79",X"80",X"85",X"81",X"7E",X"7B",X"87",X"80",X"81",X"7E",X"7B",X"83", - X"86",X"79",X"81",X"84",X"80",X"7B",X"80",X"86",X"7F",X"7D",X"7D",X"88",X"7E",X"82",X"7C",X"7C", - X"85",X"83",X"79",X"81",X"86",X"7F",X"7A",X"82",X"86",X"79",X"80",X"85",X"81",X"7A",X"7F",X"86", - X"81",X"7B",X"7E",X"87",X"7F",X"80",X"80",X"7B",X"80",X"87",X"7E",X"7A",X"85",X"83",X"7F",X"7A", - X"84",X"84",X"7F",X"7C",X"7E",X"87",X"7E",X"82",X"7D",X"7B",X"85",X"81",X"7F",X"7A",X"85",X"82", - X"7F",X"7B",X"80",X"86",X"80",X"7B",X"80",X"86",X"7F",X"80",X"80",X"7A",X"81",X"85",X"7F",X"7A", - X"82",X"85",X"80",X"7B",X"81",X"86",X"7C",X"7C",X"86",X"81",X"81",X"7C",X"7E",X"86",X"7F",X"80", - X"79",X"84",X"84",X"7F",X"80",X"7F",X"7A",X"83",X"84",X"7F",X"81",X"7B",X"7E",X"83",X"85",X"7D", - X"7C",X"86",X"81",X"7A",X"81",X"85",X"7F",X"7B",X"84",X"82",X"7F",X"81",X"7A",X"80",X"85",X"81", - X"7F",X"81",X"7D",X"7C",X"84",X"84",X"7F",X"7A",X"82",X"85",X"7F",X"81",X"7F",X"7A",X"84",X"83", - X"7F",X"80",X"7A",X"81",X"85",X"80",X"80",X"7D",X"7C",X"86",X"81",X"80",X"80",X"7A",X"85",X"82", - X"7F",X"81",X"7B",X"7E",X"85",X"82",X"7F",X"81",X"7B",X"7F",X"84",X"83",X"7C",X"7D",X"85",X"82", - X"7C",X"7E",X"86",X"7D",X"7C",X"85",X"82",X"7F",X"81",X"7E",X"7B",X"84",X"83",X"81",X"7C",X"7D", - X"87",X"7C",X"7E",X"86",X"7F",X"7B",X"86",X"80",X"81",X"7C",X"7E",X"86",X"7F",X"7B",X"83",X"84", - X"7F",X"80",X"7A",X"81",X"85",X"7F",X"82",X"7C",X"7E",X"85",X"80",X"7E",X"7C",X"87",X"7E",X"7C", - X"85",X"80",X"7B",X"84",X"82",X"79",X"82",X"84",X"81",X"7A",X"81",X"85",X"80",X"7F",X"7B",X"86", - X"81",X"7A",X"83",X"84",X"7F",X"81",X"7F",X"7B",X"82",X"85",X"7B",X"7D",X"85",X"81",X"7F",X"81", - X"7D",X"7C",X"85",X"82",X"80",X"7A",X"83",X"83",X"80",X"7D",X"7D",X"86",X"80",X"7F",X"7B",X"84", - X"83",X"7F",X"81",X"7E",X"7C",X"83",X"84",X"7B",X"81",X"85",X"7C",X"7E",X"86",X"7C",X"7D",X"84", - X"84",X"7C",X"7E",X"85",X"80",X"7C",X"7D",X"85",X"81",X"7F",X"81",X"7C",X"7F",X"86",X"7F",X"81", - X"7F",X"7B",X"84",X"83",X"7C",X"7F",X"86",X"7B",X"7E",X"84",X"82",X"7D",X"7D",X"85",X"80",X"7F", - X"7B",X"86",X"80",X"80",X"7F",X"7B",X"82",X"85",X"7B",X"80",X"84",X"80",X"7D",X"7D",X"85",X"82", - X"7D",X"7D",X"85",X"81",X"7D",X"7D",X"84",X"82",X"7D",X"7E",X"86",X"7D",X"7C",X"84",X"82",X"7B", - X"80",X"85",X"7F",X"80",X"80",X"7B",X"81",X"85",X"7F",X"81",X"7D",X"7D",X"82",X"84",X"80",X"7B", - X"81",X"84",X"7F",X"7B",X"83",X"83",X"7F",X"81",X"7B",X"80",X"83",X"83",X"7D",X"7C",X"85",X"81", - X"7F",X"81",X"7D",X"7D",X"83",X"83",X"80",X"7B",X"83",X"83",X"80",X"7B",X"81",X"84",X"80",X"7C", - X"80",X"85",X"7B",X"7E",X"84",X"82",X"7F",X"82",X"7C",X"7E",X"85",X"80",X"80",X"7B",X"83",X"84", - X"7A",X"83",X"82",X"80",X"7C",X"81",X"85",X"7B",X"7F",X"84",X"80",X"7F",X"81",X"7C",X"7F",X"85", - X"7E",X"7C",X"83",X"84",X"7F",X"81",X"7B",X"80",X"84",X"7F",X"81",X"7D",X"7C",X"83",X"83",X"80", - X"7B",X"80",X"84",X"7F",X"7C",X"81",X"84",X"7F",X"81",X"7F",X"7C",X"81",X"85",X"7B",X"7F",X"85", - X"7F",X"81",X"7D",X"7D",X"82",X"84",X"80",X"80",X"80",X"7B",X"82",X"83",X"7F",X"81",X"7D",X"7D", - X"85",X"80",X"80",X"80",X"7C",X"80",X"85",X"80",X"80",X"7F",X"7C",X"85",X"81",X"7B",X"82",X"83", - X"7A",X"82",X"83",X"7F",X"81",X"7B",X"80",X"85",X"7F",X"7C",X"84",X"82",X"7B",X"80",X"84",X"81", - X"7C",X"7F",X"85",X"7F",X"82",X"7D",X"7E",X"85",X"80",X"7B",X"82",X"83",X"7F",X"80",X"7B",X"85", - X"81",X"7B",X"81",X"84",X"80",X"7C",X"83",X"82",X"7B",X"80",X"84",X"80",X"81",X"7C",X"81",X"85", - X"7B",X"7F",X"85",X"7D",X"7D",X"84",X"81",X"80",X"81",X"7E",X"7C",X"83",X"83",X"7F",X"7C",X"81", - X"84",X"7F",X"81",X"7C",X"7F",X"85",X"7F",X"7C",X"82",X"83",X"7E",X"7C",X"82",X"84",X"7F",X"81", - X"7F",X"7C",X"81",X"84",X"80",X"80",X"81",X"7C",X"80",X"85",X"7F",X"7C",X"84",X"80",X"81",X"7C", - X"7F",X"84",X"81",X"7E",X"7D",X"84",X"82",X"7D",X"7D",X"84",X"81",X"7E",X"7C",X"84",X"81",X"7F", - X"81",X"7D",X"7D",X"82",X"83",X"80",X"7C",X"82",X"83",X"7F",X"7C",X"81",X"84",X"7F",X"81",X"7F", - X"7C",X"80",X"83",X"82",X"7D",X"7E",X"84",X"81",X"7F",X"81",X"7C",X"80",X"84",X"81",X"7D",X"7E", - X"84",X"80",X"7F",X"7C",X"83",X"83",X"7E",X"7D",X"84",X"81",X"7B",X"82",X"83",X"7F",X"7C",X"81", - X"83",X"80",X"7C",X"81",X"84",X"7F",X"80",X"80",X"7C",X"81",X"84",X"7D",X"7D",X"83",X"82",X"7F", - X"81",X"7D",X"7D",X"82",X"83",X"80",X"80",X"80",X"7B",X"82",X"83",X"80",X"7E",X"7D",X"84",X"81", - X"7F",X"80",X"7B",X"82",X"83",X"80",X"7E",X"7D",X"85",X"80",X"80",X"7F",X"7C",X"83",X"82",X"7C", - X"81",X"84",X"7C",X"80",X"84",X"7D",X"7E",X"85",X"7F",X"7C",X"83",X"82",X"7F",X"81",X"7C",X"81", - X"84",X"80",X"80",X"80",X"7D",X"7F",X"83",X"82",X"7C",X"81",X"83",X"7F",X"81",X"7C",X"7F",X"83", - X"81",X"7F",X"81",X"7D",X"7E",X"85",X"80",X"80",X"7F",X"7C",X"82",X"83",X"7D",X"7E",X"83",X"82", - X"7E",X"7D",X"84",X"81",X"80",X"80",X"7C",X"81",X"84",X"80",X"81",X"7E",X"7D",X"84",X"82",X"7C", - X"82",X"83",X"7C",X"7F",X"84",X"80",X"80",X"81",X"7D",X"7E",X"83",X"82",X"80",X"80",X"7C",X"82", - X"83",X"7C",X"80",X"84",X"7D",X"7D",X"84",X"80",X"81",X"7C",X"82",X"83",X"7F",X"7E",X"7E",X"84", - X"80",X"80",X"80",X"7D",X"7E",X"85",X"80",X"7D",X"83",X"81",X"7C",X"81",X"83",X"7F",X"7C",X"82", - X"83",X"7B",X"80",X"83",X"80",X"7D",X"7E",X"84",X"80",X"80",X"80",X"7D",X"7F",X"84",X"7F",X"7C", - X"84",X"81",X"80",X"7C",X"83",X"82",X"7C",X"82",X"82",X"7C",X"80",X"84",X"7D",X"7E",X"84",X"80", - X"80",X"80",X"7C",X"83",X"82",X"80",X"7E",X"7E",X"85",X"7E",X"7D",X"82",X"83",X"7E",X"7D",X"83", - X"80",X"7C",X"83",X"81",X"7C",X"83",X"81",X"80",X"80",X"7C",X"7F",X"82",X"82",X"7E",X"7D",X"83", - X"82",X"7E",X"7D",X"83",X"82",X"7E",X"7E",X"84",X"7F",X"7C",X"84",X"80",X"7C",X"83",X"81",X"7F", - X"80",X"7C",X"81",X"83",X"80",X"7F",X"7D",X"83",X"81",X"7C",X"81",X"83",X"7B",X"82",X"82",X"7F", - X"80",X"7C",X"82",X"82",X"80",X"7D",X"82",X"83",X"7B",X"82",X"82",X"80",X"7D",X"80",X"83",X"80", - X"7D",X"80",X"84",X"7F",X"81",X"7F",X"7D",X"82",X"83",X"80",X"7C",X"81",X"83",X"7F",X"7D",X"81", - X"84",X"7D",X"7F",X"84",X"7F",X"7D",X"84",X"80",X"81",X"7C",X"81",X"83",X"7F",X"81",X"7E",X"7E", - X"82",X"83",X"7F",X"81",X"7D",X"7F",X"83",X"81",X"7D",X"7F",X"84",X"80",X"7C",X"83",X"81",X"7C", - X"82",X"82",X"7C",X"80",X"83",X"80",X"80",X"80",X"7D",X"7E",X"83",X"81",X"80",X"80",X"7F",X"7D", - X"82",X"83",X"80",X"80",X"80",X"7C",X"81",X"83",X"7F",X"81",X"7E",X"7D",X"82",X"82",X"80",X"7E", - X"7D",X"84",X"81",X"80",X"80",X"7D",X"80",X"84",X"7E",X"7E",X"83",X"81",X"7F",X"7D",X"82",X"82", - X"7E",X"7E",X"83",X"7F",X"7D",X"82",X"82",X"7F",X"7D",X"82",X"83",X"7F",X"7D",X"83",X"81",X"7C", - X"82",X"81",X"7F",X"81",X"7D",X"80",X"83",X"7F",X"7D",X"83",X"81",X"7F",X"81",X"7C",X"81",X"83", - X"7F",X"80",X"7F",X"7D",X"82",X"82",X"80",X"7D",X"80",X"83",X"80",X"7D",X"82",X"82",X"7F",X"81", - X"7D",X"7F",X"82",X"82",X"7D",X"81",X"83",X"7F",X"81",X"7D",X"7E",X"84",X"7F",X"7D",X"83",X"80", - X"7D",X"83",X"81",X"80",X"7E",X"7E",X"84",X"7E",X"7E",X"82",X"81",X"7D",X"80",X"83",X"81",X"7E", - X"7E",X"83",X"81",X"7D",X"80",X"83",X"7E",X"7E",X"83",X"81",X"80",X"80",X"7C",X"82",X"82",X"7E", - X"7E",X"83",X"81",X"7E",X"7E",X"83",X"80",X"80",X"7F",X"7D",X"83",X"80",X"80",X"7D",X"83",X"81", - X"80",X"7D",X"80",X"83",X"7F",X"81",X"7E",X"7F",X"83",X"7F",X"7D",X"83",X"80",X"7C",X"83",X"81", - X"7D",X"82",X"82",X"7C",X"81",X"82",X"80",X"7E",X"7F",X"83",X"81",X"7E",X"7F",X"83",X"80",X"80", - X"81",X"7D",X"7F",X"83",X"81",X"7D",X"80",X"83",X"80",X"7D",X"81",X"82",X"7F",X"81",X"7D",X"7F", - X"83",X"80",X"7D",X"83",X"80",X"7F",X"7D",X"83",X"81",X"80",X"80",X"7D",X"81",X"83",X"80",X"7D", - X"83",X"81",X"80",X"80",X"7D",X"80",X"82",X"81",X"7E",X"7E",X"83",X"81",X"7E",X"7E",X"83",X"81", - X"80",X"81",X"7E",X"7E",X"82",X"82",X"7F",X"7D",X"82",X"82",X"7C",X"81",X"82",X"81",X"7D",X"81", - X"82",X"80",X"7E",X"7E",X"83",X"81",X"7E",X"7E",X"83",X"81",X"7F",X"7E",X"83",X"81",X"7E",X"7E", - X"83",X"81",X"7F",X"7E",X"82",X"82",X"7E",X"7F",X"83",X"7F",X"7D",X"82",X"82",X"7E",X"7E",X"83", - X"80",X"80",X"7E",X"7E",X"83",X"81",X"7F",X"7E",X"83",X"7F",X"7E",X"83",X"80",X"7D",X"81",X"83", - X"7F",X"80",X"80",X"7D",X"80",X"83",X"7D",X"7F",X"83",X"80",X"81",X"7E",X"7E",X"83",X"80",X"80", - X"80",X"7D",X"80",X"82",X"82",X"7D",X"80",X"82",X"80",X"7E",X"7E",X"83",X"81",X"7E",X"7E",X"83", - X"80",X"80",X"80",X"7D",X"80",X"83",X"7F",X"7D",X"82",X"82",X"7F",X"81",X"7F",X"7E",X"82",X"81", - X"7D",X"81",X"82",X"7F",X"81",X"7D",X"80",X"82",X"81",X"7E",X"7F",X"83",X"81",X"7E",X"7E",X"83", - X"80",X"7D",X"81",X"82",X"80",X"80",X"7D",X"81",X"82",X"80",X"80",X"7F",X"7D",X"81",X"83",X"7F", - X"7E",X"82",X"81",X"7D",X"81",X"82",X"7F",X"81",X"7D",X"81",X"82",X"7F",X"80",X"7E",X"7E",X"82", - X"82",X"80",X"80",X"7D",X"81",X"83",X"7E",X"7E",X"82",X"82",X"7E",X"7F",X"83",X"7F",X"7D",X"82", - X"82",X"80",X"80",X"80",X"7D",X"81",X"82",X"81",X"7D",X"80",X"82",X"80",X"7E",X"80",X"83",X"80", - X"7F",X"7E",X"83",X"81",X"80",X"80",X"7D",X"81",X"82",X"80",X"80",X"80",X"7D",X"80",X"83",X"7F", - X"7E",X"83",X"80",X"7D",X"81",X"82",X"80",X"7D",X"81",X"82",X"7F",X"80",X"80",X"7D",X"80",X"82", - X"80",X"7D",X"81",X"82",X"80",X"80",X"80",X"7D",X"80",X"82",X"80",X"7F",X"7E",X"83",X"7F",X"7E", - X"83",X"80",X"80",X"80",X"7D",X"81",X"82",X"81",X"7D",X"81",X"81",X"80",X"7E",X"7F",X"83",X"80", - X"7F",X"7E",X"83",X"80",X"80",X"80",X"7F",X"7E",X"82",X"82",X"80",X"80",X"80",X"7D",X"81",X"82", - X"7D",X"80",X"83",X"7F",X"7E",X"82",X"81",X"7D",X"80",X"82",X"80",X"7D",X"81",X"81",X"80",X"7D", - X"81",X"82",X"80",X"7E",X"7F",X"83",X"80",X"80",X"80",X"7E",X"7F",X"82",X"82",X"7E",X"7F",X"82", - X"80",X"7E",X"80",X"82",X"7F",X"81",X"7E",X"7E",X"82",X"82",X"80",X"80",X"80",X"7E",X"80",X"82", - X"81",X"7E",X"81",X"82",X"7F",X"81",X"7E",X"7F",X"82",X"81",X"80",X"80",X"7D",X"80",X"82",X"81", - X"7E",X"80",X"82",X"7F",X"81",X"7E",X"7E",X"81",X"82",X"80",X"80",X"80",X"7E",X"80",X"82",X"80", - X"80",X"80",X"7D",X"82",X"81",X"80",X"80",X"7E",X"7F",X"82",X"81",X"80",X"80",X"7D",X"82",X"81", - X"7F",X"81",X"7E",X"7F",X"82",X"80",X"7D",X"81",X"82",X"80",X"7D",X"81",X"82",X"7F",X"80",X"7D", - X"81",X"82",X"7D",X"80",X"82",X"80",X"7E",X"81",X"82",X"7D",X"81",X"81",X"80",X"7D",X"81",X"82", - X"7F",X"80",X"7E",X"7F",X"82",X"81",X"7F",X"81",X"7D",X"81",X"82",X"7E",X"7F",X"82",X"81",X"7E", - X"7F",X"83",X"7F",X"7E",X"82",X"81",X"80",X"80",X"7F",X"7E",X"81",X"82",X"80",X"80",X"80",X"7E", - X"7F",X"82",X"81",X"7E",X"81",X"82",X"7E",X"7F",X"82",X"80",X"80",X"7E",X"81",X"82",X"7F",X"80", - X"7E",X"80",X"81",X"82",X"7F",X"7E",X"82",X"81",X"7F",X"81",X"7F",X"7E",X"82",X"81",X"7E",X"80", - X"82",X"7E",X"7F",X"82",X"81",X"7E",X"7F",X"83",X"7F",X"7E",X"82",X"81",X"80",X"80",X"7F",X"7E", - X"82",X"81",X"80",X"7E",X"7F",X"82",X"81",X"7E",X"7F",X"82",X"80",X"7F",X"7F",X"83",X"7E",X"7F", - X"82",X"80",X"7F",X"7E",X"82",X"81",X"7F",X"7E",X"82",X"81",X"80",X"7E",X"81",X"81",X"80",X"7E", - X"80",X"82",X"80",X"7F",X"7E",X"83",X"80",X"80",X"80",X"7E",X"81",X"82",X"80",X"7E",X"7F",X"82", - X"80",X"7E",X"80",X"82",X"7E",X"7F",X"82",X"81",X"7F",X"7F",X"83",X"7E",X"7F",X"82",X"80",X"80"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/ROM/GAL_HIT.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/ROM/GAL_HIT.vhd deleted file mode 100644 index 7d2fd29c..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/ROM/GAL_HIT.vhd +++ /dev/null @@ -1,534 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all,ieee.numeric_std.all; - -entity GAL_HIT is -port ( - clk : in std_logic; - addr : in std_logic_vector(12 downto 0); - data : out std_logic_vector(7 downto 0) -); -end entity; - -architecture prom of GAL_HIT is - type rom is array(0 to 8191) of std_logic_vector(7 downto 0); - signal rom_data: rom := ( - X"65",X"75",X"88",X"90",X"93",X"9B",X"A3",X"A3",X"A3",X"A6",X"9E",X"9B",X"9B",X"A3",X"AB",X"B6", - X"B9",X"B9",X"BE",X"B9",X"AE",X"A6",X"9E",X"98",X"88",X"78",X"68",X"65",X"65",X"65",X"62",X"68", - X"68",X"65",X"5D",X"52",X"47",X"47",X"4A",X"4D",X"4D",X"4D",X"52",X"65",X"7D",X"88",X"90",X"9B", - X"A3",X"AE",X"AE",X"AB",X"AB",X"9E",X"98",X"88",X"70",X"52",X"37",X"1F",X"17",X"1F",X"27",X"3A", - X"5A",X"68",X"78",X"83",X"93",X"A3",X"AB",X"AE",X"A3",X"93",X"88",X"88",X"83",X"88",X"8B",X"88", - X"78",X"62",X"4A",X"42",X"3A",X"42",X"4D",X"55",X"65",X"78",X"83",X"8B",X"93",X"90",X"88",X"88", - X"98",X"A6",X"A6",X"AB",X"9E",X"8B",X"7D",X"68",X"70",X"88",X"AB",X"CE",X"E9",X"FC",X"FC",X"FC", - X"FC",X"FC",X"DC",X"9B",X"4D",X"14",X"01",X"04",X"2F",X"52",X"5D",X"68",X"78",X"80",X"78",X"70", - X"5D",X"47",X"32",X"1F",X"14",X"09",X"11",X"1C",X"32",X"52",X"83",X"B9",X"D1",X"C9",X"AB",X"8B", - X"70",X"68",X"75",X"78",X"80",X"8B",X"8B",X"98",X"AB",X"BE",X"C1",X"AB",X"83",X"5D",X"3A",X"17", - X"11",X"17",X"27",X"3A",X"65",X"90",X"AE",X"B6",X"9B",X"78",X"55",X"4A",X"4D",X"5A",X"5D",X"52", - X"4A",X"4A",X"52",X"78",X"AB",X"D4",X"FC",X"FC",X"F7",X"E9",X"E1",X"D1",X"C9",X"BE",X"AB",X"90", - X"52",X"14",X"01",X"01",X"01",X"01",X"01",X"01",X"2F",X"4A",X"52",X"47",X"47",X"62",X"70",X"7D", - X"7D",X"78",X"7D",X"90",X"B3",X"CE",X"EC",X"FC",X"FC",X"FC",X"FC",X"F4",X"E9",X"F4",X"FC",X"FC", - X"FC",X"FC",X"CE",X"98",X"65",X"2C",X"01",X"01",X"01",X"01",X"01",X"32",X"6D",X"7D",X"68",X"4A", - X"27",X"11",X"1C",X"3A",X"4D",X"62",X"68",X"65",X"68",X"70",X"80",X"9B",X"D1",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"DC",X"A3",X"75",X"55",X"62",X"80",X"A3",X"BE",X"CE",X"C1",X"90",X"4A",X"01", - X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"37",X"88",X"C9",X"FC",X"FC",X"FC",X"FC",X"FC",X"DC", - X"B6",X"90",X"68",X"3F",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"1F",X"83",X"BE",X"D1",X"CE", - X"D4",X"F4",X"FC",X"FC",X"FC",X"F7",X"D1",X"CE",X"DC",X"F7",X"FC",X"FC",X"FC",X"FC",X"D1",X"8B", - X"68",X"68",X"88",X"A6",X"C1",X"D9",X"D4",X"BE",X"A3",X"88",X"75",X"68",X"62",X"5D",X"62",X"68", - X"6D",X"78",X"75",X"55",X"2C",X"11",X"11",X"2F",X"55",X"75",X"83",X"93",X"9E",X"B9",X"E9",X"FC", - X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"BE",X"68",X"32",X"11",X"17",X"32",X"52",X"7D", - X"AE",X"E1",X"F7",X"E1",X"A3",X"62",X"17",X"01",X"01",X"01",X"01",X"01",X"1C",X"4D",X"7D",X"90", - X"9B",X"A6",X"B6",X"BE",X"A6",X"70",X"37",X"14",X"14",X"1C",X"14",X"1C",X"2F",X"3A",X"3A",X"3A", - X"4A",X"52",X"4A",X"47",X"3A",X"24",X"11",X"14",X"27",X"3A",X"65",X"9E",X"D4",X"FC",X"FC",X"F7", - X"D4",X"AB",X"93",X"93",X"93",X"83",X"68",X"4D",X"37",X"37",X"5D",X"9B",X"EC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"F7",X"CE",X"AB",X"93",X"7D",X"65",X"65",X"75",X"88",X"93",X"98",X"98",X"93", - X"93",X"90",X"93",X"8B",X"90",X"90",X"90",X"8B",X"8B",X"90",X"8B",X"90",X"90",X"90",X"90",X"8B", - X"8B",X"8B",X"8B",X"8B",X"88",X"88",X"88",X"88",X"88",X"83",X"83",X"80",X"83",X"80",X"80",X"80", - X"80",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"78",X"78",X"78",X"7D",X"78",X"75",X"78",X"75",X"78", - X"78",X"78",X"75",X"78",X"75",X"70",X"75",X"75",X"75",X"75",X"70",X"6D",X"68",X"6D",X"70",X"6D", - X"6D",X"6D",X"6D",X"6D",X"6D",X"6D",X"6D",X"6D",X"6D",X"70",X"70",X"70",X"75",X"75",X"75",X"75", - X"75",X"70",X"62",X"4D",X"4D",X"4D",X"47",X"4A",X"68",X"98",X"B6",X"B3",X"9B",X"78",X"5A",X"3F", - X"32",X"2F",X"32",X"3F",X"5A",X"90",X"D1",X"FC",X"FC",X"FC",X"FC",X"FC",X"E9",X"90",X"4D",X"3A", - X"47",X"5D",X"5D",X"4D",X"3A",X"27",X"1C",X"14",X"11",X"0C",X"01",X"01",X"01",X"01",X"01",X"01", - X"04",X"4A",X"9E",X"F7",X"FC",X"FC",X"FC",X"FC",X"EC",X"E4",X"E4",X"D1",X"AB",X"80",X"62",X"47", - X"37",X"2F",X"2C",X"24",X"04",X"01",X"24",X"52",X"70",X"70",X"62",X"4D",X"3F",X"37",X"37",X"3A", - X"4D",X"62",X"78",X"93",X"AE",X"D1",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"B6",X"68", - X"2C",X"01",X"01",X"01",X"01",X"01",X"01",X"09",X"47",X"65",X"68",X"68",X"62",X"5A",X"52",X"4D", - X"52",X"4D",X"52",X"52",X"5A",X"5D",X"65",X"68",X"6D",X"70",X"75",X"75",X"75",X"65",X"37",X"1C", - X"09",X"09",X"1C",X"32",X"4D",X"70",X"93",X"AB",X"C9",X"D9",X"E9",X"EF",X"FC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"F7",X"6D",X"0C",X"01",X"01",X"01",X"01",X"01",X"17",X"62",X"83",X"78", - X"5A",X"37",X"14",X"04",X"01",X"01",X"01",X"01",X"04",X"11",X"1C",X"1C",X"01",X"01",X"0C",X"3F", - X"6D",X"7D",X"78",X"68",X"65",X"83",X"B3",X"E1",X"F4",X"E4",X"C6",X"A3",X"8B",X"75",X"68",X"65", - X"5D",X"62",X"65",X"62",X"5A",X"3F",X"27",X"17",X"1F",X"5A",X"9E",X"CE",X"D4",X"C9",X"AE",X"A6", - X"AE",X"AB",X"9B",X"83",X"80",X"98",X"9B",X"9B",X"9B",X"B6",X"D9",X"E4",X"E1",X"DC",X"E1",X"D4", - X"B3",X"83",X"5A",X"3A",X"1F",X"11",X"0C",X"11",X"14",X"1C",X"1F",X"2C",X"2C",X"1F",X"27",X"32", - X"3F",X"5D",X"83",X"9B",X"93",X"93",X"88",X"7D",X"7D",X"75",X"70",X"70",X"6D",X"68",X"68",X"68", - X"5A",X"5A",X"75",X"88",X"93",X"93",X"90",X"90",X"88",X"83",X"80",X"80",X"7D",X"7D",X"7D",X"80", - X"7D",X"80",X"80",X"80",X"80",X"83",X"80",X"80",X"7D",X"7D",X"80",X"80",X"83",X"83",X"80",X"80", - X"80",X"7D",X"7D",X"70",X"70",X"6D",X"75",X"83",X"90",X"93",X"90",X"88",X"88",X"80",X"78",X"7D", - X"70",X"68",X"70",X"78",X"78",X"7D",X"78",X"78",X"78",X"75",X"78",X"75",X"70",X"68",X"4D",X"3A", - X"4A",X"70",X"93",X"A3",X"B6",X"B9",X"B3",X"A3",X"90",X"80",X"75",X"70",X"68",X"68",X"68",X"65", - X"68",X"68",X"68",X"68",X"68",X"6D",X"6D",X"70",X"70",X"75",X"75",X"75",X"75",X"78",X"75",X"78", - X"78",X"78",X"78",X"78",X"78",X"78",X"70",X"55",X"37",X"1F",X"24",X"47",X"68",X"7D",X"88",X"8B", - X"88",X"88",X"88",X"8B",X"AB",X"CE",X"E9",X"FC",X"FC",X"FC",X"FC",X"EF",X"C9",X"AB",X"80",X"5A", - X"4A",X"47",X"37",X"2C",X"32",X"4D",X"70",X"78",X"7D",X"8B",X"90",X"88",X"68",X"4A",X"2C",X"1C", - X"11",X"09",X"01",X"01",X"01",X"01",X"14",X"27",X"47",X"70",X"AE",X"E1",X"F4",X"E4",X"D1",X"AE", - X"93",X"80",X"70",X"68",X"62",X"62",X"65",X"68",X"6D",X"75",X"78",X"78",X"65",X"4A",X"4D",X"5A", - X"62",X"65",X"68",X"88",X"B9",X"EC",X"FC",X"F4",X"D1",X"B6",X"B3",X"AE",X"A3",X"98",X"A3",X"C6", - X"D9",X"D4",X"D4",X"E1",X"E1",X"C9",X"9E",X"78",X"62",X"3F",X"32",X"2C",X"27",X"2C",X"32",X"37", - X"3F",X"47",X"4A",X"52",X"55",X"5A",X"5D",X"5D",X"5A",X"3F",X"27",X"14",X"11",X"14",X"24",X"4A", - X"80",X"A6",X"BE",X"C6",X"CE",X"E4",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"DC",X"BE",X"AB",X"8B", - X"5D",X"2F",X"14",X"01",X"01",X"01",X"01",X"01",X"01",X"17",X"3F",X"65",X"70",X"6D",X"5D",X"4D", - X"4D",X"68",X"9B",X"BE",X"C9",X"B9",X"B3",X"AB",X"9B",X"A3",X"B3",X"C6",X"D1",X"B6",X"8B",X"52", - X"1C",X"11",X"11",X"14",X"37",X"62",X"90",X"9E",X"9B",X"83",X"75",X"5D",X"47",X"32",X"2F",X"24", - X"17",X"11",X"11",X"17",X"27",X"5D",X"A3",X"E1",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"EF",X"CE", - X"9B",X"7D",X"68",X"62",X"62",X"7D",X"98",X"9E",X"93",X"7D",X"6D",X"5D",X"55",X"52",X"52",X"52", - X"55",X"55",X"5D",X"62",X"65",X"68",X"6D",X"70",X"75",X"7D",X"78",X"7D",X"80",X"83",X"78",X"62", - X"3A",X"27",X"14",X"17",X"27",X"3F",X"5A",X"78",X"98",X"AE",X"C6",X"DC",X"FC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"F7",X"A6",X"80",X"70",X"62",X"65",X"7D",X"98",X"A6",X"9B",X"80",X"62",X"32", - X"04",X"01",X"01",X"01",X"01",X"01",X"11",X"3A",X"5D",X"83",X"98",X"93",X"88",X"83",X"88",X"78", - X"5D",X"4A",X"37",X"2C",X"24",X"27",X"24",X"17",X"14",X"32",X"5D",X"80",X"90",X"90",X"93",X"93", - X"93",X"90",X"8B",X"8B",X"8B",X"8B",X"90",X"93",X"93",X"98",X"98",X"9B",X"9B",X"9B",X"9E",X"9E", - X"9E",X"9E",X"9E",X"9E",X"9E",X"9B",X"9E",X"9B",X"98",X"98",X"98",X"93",X"93",X"90",X"93",X"8B", - X"88",X"75",X"52",X"37",X"1F",X"1C",X"27",X"37",X"4D",X"68",X"83",X"AE",X"E4",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"D1",X"9B",X"65",X"42",X"3A",X"52",X"80",X"AE",X"D4",X"E9",X"E4",X"C6", - X"80",X"3A",X"11",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"32",X"88",X"C6",X"F7",X"FC", - X"E4",X"CE",X"B9",X"A3",X"80",X"62",X"47",X"37",X"2F",X"2C",X"2F",X"37",X"3F",X"3A",X"32",X"3A", - X"37",X"32",X"37",X"3A",X"52",X"7D",X"B3",X"DC",X"E4",X"E1",X"D1",X"D1",X"E1",X"FC",X"FC",X"FC", - X"FC",X"F4",X"CE",X"A3",X"83",X"75",X"7D",X"83",X"83",X"88",X"98",X"A6",X"A6",X"98",X"88",X"75", - X"68",X"5D",X"5A",X"5A",X"5A",X"62",X"65",X"68",X"6D",X"70",X"75",X"75",X"75",X"7D",X"83",X"83", - X"80",X"75",X"68",X"70",X"80",X"8B",X"93",X"98",X"98",X"90",X"90",X"8B",X"90",X"98",X"A3",X"AE", - X"B6",X"C9",X"C9",X"C1",X"B3",X"A3",X"98",X"8B",X"78",X"75",X"70",X"6D",X"65",X"68",X"70",X"80", - X"83",X"83",X"88",X"8B",X"83",X"78",X"68",X"5D",X"52",X"42",X"2C",X"27",X"2C",X"3A",X"47",X"42", - X"42",X"52",X"70",X"8B",X"A6",X"AB",X"A3",X"9E",X"9E",X"B3",X"B9",X"B9",X"BE",X"BE",X"B9",X"A3", - X"88",X"68",X"5D",X"5A",X"5A",X"52",X"52",X"68",X"70",X"65",X"62",X"62",X"68",X"7D",X"8B",X"8B", - X"83",X"75",X"65",X"68",X"75",X"80",X"9B",X"C1",X"EC",X"FC",X"FC",X"F7",X"EF",X"E9",X"D1",X"A3", - X"78",X"5D",X"42",X"2C",X"14",X"0C",X"09",X"0C",X"0C",X"17",X"2C",X"47",X"62",X"75",X"75",X"68", - X"62",X"52",X"4A",X"4A",X"42",X"3F",X"4A",X"55",X"68",X"90",X"A3",X"B9",X"C6",X"CE",X"E4",X"FC", - X"FC",X"EC",X"E9",X"E9",X"DC",X"C1",X"B3",X"A6",X"98",X"75",X"52",X"3A",X"2C",X"1C",X"11",X"01", - X"0C",X"1F",X"37",X"52",X"70",X"78",X"78",X"68",X"62",X"62",X"75",X"98",X"B6",X"BE",X"B3",X"AB", - X"A6",X"9B",X"9E",X"AE",X"B9",X"C1",X"AE",X"90",X"5D",X"32",X"2C",X"27",X"2C",X"3F",X"62",X"83", - X"93",X"90",X"88",X"80",X"70",X"5D",X"52",X"47",X"3A",X"2F",X"24",X"1F",X"2C",X"3A",X"68",X"A3", - X"D4",X"F4",X"FC",X"FC",X"F4",X"E9",X"E9",X"DC",X"B9",X"90",X"78",X"68",X"5D",X"62",X"7D",X"93", - X"9B",X"90",X"7D",X"70",X"5D",X"5A",X"52",X"52",X"52",X"55",X"5A",X"5D",X"65",X"68",X"68",X"70", - X"70",X"75",X"78",X"78",X"7D",X"80",X"80",X"78",X"65",X"3F",X"27",X"17",X"1C",X"2C",X"3F",X"5D", - X"78",X"93",X"AE",X"C6",X"DC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"F7",X"A6",X"80",X"70", - X"62",X"65",X"7D",X"98",X"A6",X"9B",X"80",X"62",X"32",X"04",X"01",X"01",X"01",X"01",X"01",X"11", - X"3A",X"5D",X"83",X"98",X"93",X"88",X"83",X"88",X"78",X"5D",X"4A",X"37",X"2C",X"24",X"27",X"24", - X"17",X"14",X"32",X"5D",X"80",X"90",X"90",X"93",X"93",X"93",X"90",X"8B",X"8B",X"8B",X"8B",X"90", - X"93",X"93",X"98",X"98",X"9B",X"9B",X"9B",X"9E",X"9E",X"9E",X"9E",X"9E",X"9E",X"9E",X"9B",X"9E", - X"9B",X"98",X"98",X"98",X"93",X"93",X"90",X"93",X"8B",X"88",X"75",X"52",X"37",X"1F",X"1C",X"24", - X"37",X"4D",X"68",X"88",X"AE",X"E4",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"D4",X"9B",X"65", - X"3F",X"37",X"52",X"80",X"B3",X"D9",X"EC",X"EC",X"C9",X"7D",X"37",X"04",X"01",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"27",X"88",X"D1",X"FC",X"FC",X"EC",X"D1",X"BE",X"A3",X"7D",X"62",X"3A", - X"2C",X"1F",X"1F",X"24",X"2C",X"32",X"2C",X"27",X"2F",X"27",X"27",X"27",X"2C",X"47",X"7D",X"C1", - X"F7",X"FC",X"FC",X"E9",X"E1",X"EC",X"FC",X"FC",X"FC",X"FC",X"FC",X"E4",X"AE",X"88",X"78",X"83", - X"8B",X"8B",X"93",X"A3",X"B9",X"BE",X"A6",X"90",X"75",X"65",X"52",X"52",X"52",X"4D",X"55",X"5D", - X"62",X"68",X"70",X"70",X"70",X"75",X"80",X"8B",X"90",X"90",X"8B",X"83",X"90",X"98",X"9B",X"9E", - X"9E",X"9B",X"93",X"93",X"8B",X"90",X"8B",X"8B",X"8B",X"88",X"8B",X"8B",X"8B",X"8B",X"88",X"8B", - X"8B",X"8B",X"8B",X"8B",X"8B",X"88",X"8B",X"88",X"88",X"88",X"88",X"83",X"83",X"80",X"80",X"80", - X"80",X"7D",X"65",X"47",X"52",X"68",X"78",X"78",X"65",X"5A",X"5D",X"6D",X"75",X"78",X"70",X"68", - X"70",X"90",X"C9",X"EC",X"FC",X"FC",X"FC",X"FC",X"E1",X"A6",X"68",X"42",X"3A",X"37",X"3A",X"5D", - X"7D",X"83",X"68",X"55",X"52",X"47",X"32",X"17",X"09",X"01",X"01",X"09",X"17",X"2C",X"52",X"9B", - X"E1",X"FC",X"FC",X"FC",X"FC",X"FC",X"F4",X"DC",X"A6",X"78",X"62",X"47",X"1F",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"3F",X"7D",X"A3",X"9B",X"80",X"5D",X"4A",X"5A",X"7D",X"90",X"9B",X"AB", - X"A6",X"AB",X"AB",X"9E",X"A6",X"BE",X"D4",X"E4",X"D4",X"A6",X"88",X"7D",X"88",X"88",X"83",X"90", - X"A3",X"AB",X"A6",X"9E",X"98",X"8B",X"83",X"80",X"80",X"80",X"83",X"83",X"88",X"8B",X"8B",X"90", - X"90",X"90",X"93",X"98",X"98",X"9B",X"93",X"98",X"93",X"93",X"93",X"93",X"93",X"93",X"90",X"90", - X"90",X"8B",X"8B",X"83",X"80",X"7D",X"68",X"52",X"52",X"62",X"68",X"88",X"AB",X"C6",X"C9",X"C9", - X"B6",X"A6",X"9E",X"8B",X"83",X"8B",X"A3",X"B3",X"AE",X"98",X"80",X"6D",X"5D",X"52",X"47",X"42", - X"47",X"3F",X"47",X"42",X"42",X"4D",X"62",X"65",X"68",X"68",X"68",X"68",X"68",X"68",X"68",X"68", - X"65",X"68",X"68",X"68",X"6D",X"70",X"6D",X"6D",X"70",X"75",X"70",X"75",X"78",X"75",X"78",X"75", - X"78",X"78",X"78",X"78",X"78",X"78",X"78",X"7D",X"80",X"80",X"6D",X"65",X"70",X"80",X"80",X"68", - X"52",X"32",X"2C",X"37",X"68",X"9B",X"B6",X"B6",X"B6",X"C1",X"D4",X"D9",X"C6",X"A3",X"78",X"5A", - X"3F",X"32",X"32",X"3A",X"55",X"8B",X"CE",X"FC",X"FC",X"FC",X"FC",X"FC",X"E1",X"A3",X"62",X"2F", - X"1C",X"09",X"01",X"01",X"1C",X"47",X"5D",X"68",X"80",X"93",X"90",X"80",X"70",X"5A",X"4D",X"52", - X"68",X"78",X"7D",X"70",X"5D",X"4A",X"3A",X"32",X"32",X"2F",X"27",X"27",X"1C",X"11",X"09",X"0C", - X"14",X"2C",X"42",X"75",X"AB",X"DC",X"F7",X"FC",X"FC",X"F7",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"BE",X"88",X"4D",X"11",X"01",X"01",X"0C",X"3F",X"75",X"9E",X"B6",X"B3", - X"93",X"70",X"52",X"3A",X"1F",X"11",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"24",X"3F", - X"52",X"62",X"68",X"7D",X"9E",X"C1",X"E4",X"FC",X"FC",X"F7",X"E1",X"BE",X"A3",X"90",X"80",X"88", - X"AB",X"E1",X"FC",X"FC",X"FC",X"FC",X"F7",X"BE",X"7D",X"3F",X"0C",X"01",X"01",X"01",X"01",X"27", - X"70",X"B6",X"E9",X"FC",X"FC",X"E9",X"AE",X"83",X"62",X"4D",X"2F",X"04",X"01",X"01",X"01",X"01", - X"01",X"01",X"01",X"3F",X"98",X"CE",X"D1",X"BE",X"B6",X"C1",X"D4",X"E9",X"FC",X"E9",X"C9",X"AB", - X"9B",X"88",X"5D",X"37",X"27",X"27",X"1F",X"1C",X"1C",X"1F",X"37",X"70",X"B6",X"FC",X"FC",X"FC", - X"FC",X"FC",X"F4",X"F4",X"E4",X"C6",X"98",X"70",X"5A",X"3A",X"37",X"47",X"6D",X"AE",X"F7",X"FC", - X"FC",X"FC",X"FC",X"FC",X"FC",X"CE",X"93",X"55",X"17",X"01",X"01",X"01",X"1C",X"4A",X"80",X"AB", - X"B3",X"A6",X"A3",X"A3",X"A3",X"A6",X"9B",X"78",X"42",X"11",X"04",X"11",X"1C",X"1F",X"37",X"55", - X"7D",X"8B",X"80",X"5D",X"47",X"4D",X"65",X"6D",X"5D",X"4A",X"3F",X"4D",X"7D",X"B6",X"EC",X"FC", - X"FC",X"FC",X"E4",X"C6",X"9E",X"98",X"9B",X"90",X"75",X"5D",X"62",X"7D",X"9B",X"C6",X"E1",X"E9", - X"D9",X"B3",X"93",X"83",X"70",X"68",X"5D",X"5A",X"52",X"52",X"52",X"55",X"5D",X"65",X"65",X"68", - X"5A",X"37",X"2F",X"4A",X"65",X"6D",X"68",X"75",X"93",X"BE",X"E4",X"EC",X"D1",X"B3",X"9E",X"AB", - X"AB",X"9E",X"80",X"65",X"42",X"32",X"32",X"4A",X"75",X"90",X"A3",X"BE",X"E4",X"FC",X"FC",X"FC", - X"FC",X"D1",X"93",X"5A",X"3A",X"3A",X"47",X"5A",X"7D",X"A6",X"CE",X"CE",X"B9",X"A6",X"9B",X"80", - X"52",X"1C",X"01",X"01",X"01",X"11",X"47",X"78",X"9E",X"AB",X"9B",X"78",X"5A",X"2C",X"14",X"1C", - X"27",X"1F",X"11",X"01",X"01",X"01",X"1C",X"3F",X"75",X"AB",X"C9",X"D4",X"DC",X"CE",X"C9",X"D1", - X"E1",X"F4",X"FC",X"FC",X"FC",X"E4",X"BE",X"90",X"70",X"4A",X"11",X"01",X"01",X"01",X"01",X"09", - X"17",X"4A",X"90",X"D4",X"FC",X"FC",X"FC",X"F4",X"E9",X"E9",X"FC",X"FC",X"E4",X"B3",X"80",X"52", - X"2F",X"1C",X"1F",X"32",X"68",X"AE",X"F4",X"FC",X"FC",X"FC",X"E4",X"C9",X"AB",X"80",X"5D",X"47", - X"37",X"42",X"75",X"AB",X"DC",X"FC",X"FC",X"FC",X"D9",X"93",X"55",X"37",X"2F",X"3A",X"52",X"62", - X"68",X"68",X"55",X"27",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"1C",X"32",X"4D",X"68", - X"9B",X"CE",X"E4",X"F4",X"EC",X"E4",X"E4",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"D9", - X"88",X"4A",X"17",X"04",X"11",X"42",X"75",X"88",X"9B",X"B6",X"BE",X"A6",X"7D",X"4D",X"1C",X"01", - X"01",X"17",X"27",X"32",X"4D",X"7D",X"A6",X"B3",X"B9",X"C6",X"D1",X"D9",X"D9",X"CE",X"BE",X"A6", - X"90",X"65",X"27",X"01",X"01",X"01",X"01",X"01",X"01",X"14",X"68",X"93",X"98",X"83",X"75",X"7D", - X"9E",X"BE",X"C9",X"BE",X"A6",X"9E",X"B6",X"D9",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"D9",X"C1", - X"B3",X"9B",X"75",X"5D",X"47",X"2F",X"2F",X"4A",X"68",X"7D",X"7D",X"78",X"83",X"90",X"9E",X"AE", - X"A3",X"83",X"75",X"52",X"3F",X"4A",X"5D",X"62",X"55",X"3F",X"2F",X"24",X"32",X"5A",X"7D",X"90", - X"AB",X"CE",X"E4",X"FC",X"FC",X"FC",X"E9",X"CE",X"B3",X"98",X"88",X"83",X"83",X"90",X"B3",X"EC", - X"FC",X"FC",X"FC",X"FC",X"FC",X"CE",X"75",X"42",X"27",X"14",X"01",X"01",X"1C",X"3F",X"52",X"5A", - X"68",X"78",X"68",X"47",X"17",X"01",X"01",X"09",X"27",X"37",X"4A",X"65",X"75",X"6D",X"65",X"68", - X"68",X"5D",X"4D",X"42",X"27",X"0C",X"0C",X"14",X"1C",X"1F",X"3A",X"68",X"9E",X"CE",X"E1",X"DC", - X"DC",X"DC",X"DC",X"CE",X"A6",X"75",X"5A",X"4A",X"3A",X"4A",X"70",X"98",X"BE",X"E1",X"E9",X"E4", - X"B9",X"9E",X"90",X"8B",X"88",X"75",X"52",X"2F",X"2F",X"4A",X"5D",X"68",X"78",X"80",X"70",X"70", - X"7D",X"8B",X"9E",X"B6",X"BE",X"B6",X"AE",X"9B",X"98",X"AE",X"CE",X"E4",X"FC",X"FC",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"E4",X"B9",X"9E",X"88",X"65",X"4D",X"47",X"3F",X"2F",X"11",X"01",X"04", - X"1F",X"2F",X"2F",X"1F",X"11",X"01",X"0C",X"2C",X"4D",X"62",X"78",X"98",X"AB",X"BE",X"DC",X"F4", - X"F7",X"E4",X"E1",X"DC",X"C1",X"9E",X"88",X"62",X"3A",X"14",X"01",X"11",X"17",X"27",X"32",X"55", - X"88",X"B6",X"E4",X"F7",X"E4",X"C6",X"A3",X"75",X"5A",X"52",X"5A",X"68",X"78",X"80",X"80",X"5A", - X"27",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"11",X"3F",X"70",X"A3",X"C9",X"E1",X"FC",X"FC", - X"FC",X"FC",X"FC",X"DC",X"C6",X"B3",X"98",X"93",X"9B",X"AB",X"B9",X"AB",X"98",X"83",X"68",X"52", - X"4A",X"2F",X"17",X"04",X"01",X"0C",X"37",X"75",X"A3",X"B9",X"D1",X"CE",X"B3",X"A3",X"9B",X"93", - X"93",X"A6",X"BE",X"B9",X"9E",X"7D",X"55",X"37",X"27",X"27",X"4A",X"80",X"A6",X"B3",X"AE",X"AB", - X"B9",X"C6",X"B9",X"B3",X"A3",X"80",X"5D",X"4A",X"47",X"3A",X"32",X"3A",X"5A",X"7D",X"83",X"90", - X"8B",X"83",X"7D",X"70",X"65",X"6D",X"7D",X"78",X"65",X"47",X"1F",X"0C",X"01",X"01",X"09",X"2C", - X"68",X"AE",X"CE",X"D1",X"CE",X"D4",X"E4",X"E4",X"CE",X"A6",X"98",X"9B",X"AB",X"BE",X"CE",X"CE", - X"B9",X"90",X"52",X"14",X"01",X"01",X"01",X"01",X"09",X"3A",X"78",X"9E",X"AE",X"B9",X"CE",X"CE", - X"B9",X"A6",X"90",X"7D",X"7D",X"83",X"80",X"68",X"55",X"52",X"4A",X"42",X"37",X"32",X"47",X"75", - X"A6",X"C1",X"D1",X"D9",X"CE",X"C9",X"B6",X"9B",X"7D",X"62",X"4D",X"4D",X"6D",X"9E",X"D4",X"F4", - X"EC",X"E4",X"CE",X"A3",X"78",X"65",X"5A",X"4A",X"37",X"2C",X"37",X"5D",X"93",X"C6",X"E9",X"FC", - X"FC",X"D4",X"A6",X"88",X"75",X"68",X"52",X"27",X"01",X"01",X"01",X"01",X"01",X"11",X"5D",X"9B", - X"C9",X"D1",X"C9",X"BE",X"B9",X"B9",X"B9",X"B6",X"AE",X"A3",X"98",X"83",X"70",X"4D",X"17",X"01", - X"01",X"01",X"01",X"01",X"01",X"24",X"47",X"68",X"9B",X"DC",X"FC",X"FC",X"FC",X"FC",X"E9",X"F4", - X"FC",X"FC",X"FC",X"E4",X"D4",X"C9",X"B3",X"9B",X"98",X"98",X"90",X"83",X"88",X"A6",X"C9",X"DC", - X"D9",X"BE",X"AB",X"7D",X"52",X"2F",X"27",X"1F",X"11",X"17",X"27",X"2F",X"2F",X"3F",X"52",X"5D", - X"5A",X"65",X"70",X"75",X"80",X"88",X"8B",X"9B",X"AB",X"BE",X"C6",X"AE",X"83",X"55",X"27",X"09", - X"09",X"27",X"52",X"83",X"93",X"98",X"93",X"88",X"83",X"80",X"70",X"55",X"3F",X"2C",X"27",X"32", - X"47",X"65",X"8B",X"AE",X"D4",X"E9",X"D9",X"B3",X"98",X"90",X"93",X"88",X"68",X"4D",X"4A",X"5A", - X"68",X"6D",X"7D",X"8B",X"90",X"8B",X"88",X"8B",X"98",X"9E",X"9B",X"83",X"62",X"2F",X"09",X"04", - X"1F",X"47",X"6D",X"98",X"AE",X"B6",X"B3",X"AB",X"9B",X"9B",X"A3",X"B6",X"C6",X"B9",X"9B",X"83", - X"78",X"6D",X"65",X"5A",X"5A",X"68",X"88",X"A6",X"B6",X"A3",X"8B",X"75",X"68",X"6D",X"6D",X"65", - X"5D",X"5D",X"68",X"80",X"A3",X"CE",X"DC",X"D4",X"CE",X"CE",X"C9",X"C6",X"CE",X"BE",X"AB",X"90", - X"80",X"80",X"8B",X"98",X"9E",X"B6",X"DC",X"E4",X"E4",X"E1",X"CE",X"C6",X"B6",X"98",X"80",X"7D", - X"75",X"70",X"68",X"68",X"62",X"3F",X"11",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"11",X"47",X"68",X"90",X"B6",X"CE",X"D4",X"E1",X"E9",X"E9",X"E4",X"E4",X"E9",X"E4",X"D4",X"C6", - X"A6",X"78",X"42",X"14",X"01",X"01",X"01",X"01",X"14",X"42",X"78",X"AB",X"D1",X"E1",X"D9",X"C6", - X"9B",X"7D",X"75",X"78",X"88",X"93",X"8B",X"88",X"70",X"4D",X"2F",X"24",X"1C",X"24",X"27",X"24", - X"27",X"3A",X"62",X"88",X"B3",X"CE",X"DC",X"EC",X"EF",X"E1",X"CE",X"BE",X"A3",X"83",X"68",X"52", - X"4D",X"55",X"65",X"78",X"78",X"80",X"90",X"90",X"90",X"8B",X"75",X"5D",X"4D",X"52",X"62",X"80", - X"A3",X"B6",X"B6",X"B6",X"A6",X"90",X"83",X"88",X"93",X"9E",X"BE",X"D1",X"C9",X"AE",X"8B",X"62", - X"3F",X"27",X"1C",X"32",X"62",X"88",X"9B",X"A3",X"AB",X"C1",X"CE",X"C1",X"B6",X"A6",X"90",X"6D", - X"5D",X"55",X"3F",X"2F",X"2F",X"47",X"5D",X"65",X"6D",X"75",X"78",X"83",X"7D",X"75",X"7D",X"83", - X"80",X"68",X"4D",X"2F",X"14",X"04",X"04",X"17",X"37",X"70",X"A6",X"C1",X"C1",X"B9",X"BE",X"D1", - X"D4",X"C1",X"A3",X"98",X"9E",X"AE",X"C9",X"D4",X"D4",X"C6",X"98",X"5D",X"24",X"01",X"01",X"01", - X"01",X"17",X"4A",X"7D",X"A3",X"AE",X"B9",X"C9",X"C6",X"B6",X"A3",X"8B",X"7D",X"80",X"83",X"83", - X"6D",X"55",X"52",X"4A",X"42",X"37",X"32",X"47",X"75",X"A6",X"C1",X"D1",X"D9",X"CE",X"C9",X"B6", - X"9B",X"7D",X"62",X"4D",X"4D",X"6D",X"9E",X"D4",X"F4",X"EC",X"E4",X"CE",X"A3",X"78",X"65",X"5A", - X"4A",X"37",X"2C",X"37",X"5D",X"93",X"C6",X"E9",X"FC",X"FC",X"D4",X"A6",X"88",X"75",X"68",X"52", - X"27",X"01",X"01",X"01",X"01",X"01",X"11",X"5D",X"9B",X"C9",X"D1",X"C9",X"BE",X"B9",X"B9",X"B9", - X"B6",X"AE",X"A3",X"98",X"83",X"70",X"4D",X"17",X"01",X"01",X"01",X"01",X"01",X"01",X"24",X"47", - X"68",X"9B",X"DC",X"FC",X"FC",X"FC",X"FC",X"E9",X"F4",X"FC",X"FC",X"FC",X"E4",X"D4",X"C9",X"B3", - X"9B",X"98",X"98",X"8B",X"83",X"8B",X"A6",X"C9",X"E1",X"DC",X"C1",X"A6",X"7D",X"4D",X"2C",X"24", - X"17",X"0C",X"11",X"1F",X"2C",X"2C",X"3A",X"52",X"5D",X"5A",X"65",X"70",X"78",X"88",X"90",X"90", - X"9E",X"AB",X"C1",X"C6",X"A6",X"78",X"3F",X"11",X"01",X"01",X"14",X"47",X"80",X"93",X"98",X"93", - X"83",X"70",X"65",X"4D",X"2F",X"14",X"04",X"04",X"27",X"47",X"70",X"A3",X"D1",X"FC",X"FC",X"F7", - X"C9",X"A6",X"9B",X"9B",X"8B",X"70",X"5A",X"5D",X"75",X"7D",X"80",X"8B",X"9E",X"9B",X"93",X"8B", - X"98",X"A3",X"AE",X"AE",X"93",X"68",X"32",X"04",X"04",X"24",X"52",X"88",X"B6",X"C9",X"B9",X"AB", - X"98",X"80",X"80",X"90",X"A6",X"B9",X"BE",X"A6",X"93",X"8B",X"80",X"70",X"4D",X"37",X"3F",X"62", - X"88",X"9E",X"98",X"80",X"65",X"55",X"62",X"68",X"68",X"70",X"75",X"78",X"93",X"C6",X"FC",X"FC", - X"FC",X"FC",X"F7",X"E9",X"DC",X"D4",X"BE",X"A3",X"80",X"68",X"70",X"75",X"75",X"70",X"80",X"A3", - X"B3",X"B3",X"AE",X"98",X"83",X"75",X"5D",X"52",X"5A",X"68",X"78",X"83",X"83",X"78",X"4A",X"11", - X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"37",X"78",X"A6",X"D1",X"E9",X"E4", - X"E1",X"E1",X"DC",X"D9",X"E9",X"FC",X"FC",X"FC",X"FC",X"EF",X"B9",X"75",X"2F",X"01",X"01",X"01", - X"01",X"01",X"01",X"27",X"5D",X"9B",X"D4",X"F4",X"EC",X"CE",X"A6",X"93",X"9E",X"B6",X"B6",X"A3", - X"93",X"8B",X"83",X"70",X"68",X"78",X"93",X"A6",X"9E",X"90",X"83",X"98",X"AE",X"C9",X"D4",X"DC", - X"CE",X"A6",X"7D",X"65",X"52",X"2C",X"04",X"01",X"01",X"01",X"01",X"01",X"01",X"11",X"4D",X"9E", - X"E4",X"FC",X"FC",X"FC",X"EC",X"EC",X"FC",X"FC",X"FC",X"FC",X"E9",X"AE",X"78",X"4A",X"2F",X"2F", - X"52",X"8B",X"C6",X"F4",X"FC",X"F7",X"DC",X"B3",X"80",X"4D",X"17",X"01",X"01",X"01",X"1C",X"3F", - X"70",X"A6",X"D1",X"E9",X"E1",X"CE",X"B9",X"B3",X"AE",X"A6",X"88",X"5A",X"1F",X"01",X"01",X"01", - X"01",X"01",X"14",X"52",X"8B",X"B9",X"C6",X"B6",X"A6",X"9E",X"90",X"75",X"68",X"52",X"4A",X"52", - X"68",X"88",X"93",X"83",X"62",X"3F",X"1F",X"17",X"2F",X"4D",X"68",X"75",X"83",X"9E",X"D1",X"FC", - X"FC",X"FC",X"FC",X"FC",X"D4",X"BE",X"B3",X"A3",X"A6",X"BE",X"D4",X"E1",X"CE",X"B3",X"A6",X"98", - X"75",X"4A",X"27",X"1C",X"2F",X"4D",X"68",X"7D",X"68",X"47",X"17",X"01",X"01",X"01",X"01",X"01", - X"04",X"0C",X"1F",X"32",X"4A",X"5D",X"80",X"B3",X"F7",X"FC",X"FC",X"FC",X"EC",X"D4",X"CE",X"BE", - X"C1",X"CE",X"D9",X"C9",X"A3",X"83",X"70",X"5A",X"3F",X"32",X"3F",X"5D",X"68",X"65",X"47",X"2C", - X"17",X"04",X"09",X"27",X"4A",X"68",X"90",X"9E",X"98",X"88",X"7D",X"83",X"9E",X"CE",X"E9",X"F7", - X"E4",X"BE",X"9E",X"68",X"37",X"09",X"01",X"01",X"01",X"04",X"14",X"37",X"55",X"65",X"70",X"88", - X"AE",X"DC",X"FC",X"F4",X"D1",X"AE",X"93",X"80",X"78",X"83",X"9B",X"B3",X"B3",X"98",X"70",X"47", - X"24",X"17",X"32",X"62",X"9B",X"C9",X"CE",X"B9",X"A3",X"9B",X"88",X"70",X"5D",X"55",X"68",X"93", - X"B6",X"BE",X"B3",X"AE",X"AE",X"A3",X"90",X"90",X"98",X"9B",X"AB",X"AB",X"AE",X"B3",X"AB",X"93", - X"78",X"65",X"68",X"78",X"75",X"70",X"68",X"78",X"8B",X"93",X"93",X"9E",X"B9",X"DC",X"FC",X"FC", - X"FC",X"D4",X"93",X"62",X"42",X"1C",X"01",X"01",X"04",X"0C",X"0C",X"1F",X"4A",X"78",X"AB",X"C9", - X"DC",X"E1",X"D9",X"C6",X"AB",X"90",X"70",X"47",X"09",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"01",X"1C",X"47",X"62",X"75",X"88",X"AB",X"D1",X"E9",X"EC",X"E9",X"E4",X"DC",X"F7",X"FC",X"FC", - X"FC",X"FC",X"FC",X"FC",X"E4",X"9E",X"80",X"75",X"7D",X"70",X"6D",X"75",X"80",X"8B",X"80",X"65", - X"4A",X"2C",X"04",X"01",X"01",X"01",X"04",X"2C",X"52",X"62",X"5A",X"4D",X"5A",X"78",X"9B",X"B3", - X"C1",X"AB",X"93",X"83",X"78",X"62",X"4D",X"4A",X"52",X"4A",X"3F",X"4D",X"5D",X"7D",X"90",X"9B", - X"9E",X"83",X"68",X"62",X"5D",X"68",X"78",X"88",X"88",X"8B",X"8B",X"80",X"62",X"47",X"3F",X"3A", - X"32",X"37",X"37",X"37",X"4D",X"70",X"88",X"8B",X"80",X"70",X"70",X"8B",X"B6",X"D4",X"D4",X"CE", - X"B9",X"B9",X"C9",X"C9",X"C6",X"B6",X"B9",X"D4",X"FC",X"FC",X"FC",X"FC",X"EC",X"B6",X"80",X"52", - X"37",X"2F",X"2C",X"37",X"62",X"98",X"D1",X"FC",X"FC",X"EC",X"D1",X"A3",X"68",X"4A",X"32",X"27", - X"27",X"3A",X"55",X"68",X"62",X"52",X"3F",X"1C",X"01",X"01",X"01",X"01",X"01",X"01",X"04",X"37", - X"5A",X"70",X"88",X"88",X"7D",X"65",X"52",X"47",X"52",X"68",X"83",X"9E",X"AE",X"B6",X"C1",X"B9", - X"B6",X"AE",X"98",X"78",X"5D",X"42",X"32",X"2C",X"2F",X"4D",X"7D",X"B9",X"F7",X"FC",X"FC",X"FC", - X"E1",X"AB",X"83",X"65",X"52",X"5A",X"68",X"65",X"52",X"3F",X"3F",X"3F",X"37",X"37",X"52",X"7D", - X"A6",X"C1",X"BE",X"9E",X"88",X"7D",X"68",X"5A",X"47",X"47",X"62",X"90",X"B3",X"C6",X"D9",X"EF", - X"FC",X"FC",X"E4",X"CE",X"B9",X"B3",X"B3",X"AE",X"AB",X"9B",X"75",X"55",X"37",X"11",X"01",X"01", - X"01",X"01",X"04",X"4D",X"88",X"AB",X"B3",X"AE",X"A3",X"9B",X"AE",X"C6",X"CE",X"C9",X"BE",X"B6", - X"B3",X"AB",X"AE",X"C6",X"EF",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"CE",X"88",X"4A",X"14",X"01", - X"09",X"2C",X"52",X"78",X"93",X"93",X"78",X"47",X"0C",X"01",X"01",X"01",X"01",X"09",X"09",X"11", - X"27",X"4D",X"62",X"68",X"7D",X"90",X"9E",X"AE",X"AB",X"8B",X"70",X"62",X"52",X"3A",X"1C",X"04", - X"11",X"2F",X"5A",X"83",X"9E",X"B3",X"B9",X"B9",X"AB",X"80",X"62",X"4D",X"4D",X"5A",X"65",X"75", - X"7D",X"83",X"83",X"70",X"4D",X"1F",X"0C",X"14",X"32",X"5D",X"70",X"68",X"65",X"68",X"83",X"9E", - X"9E",X"93",X"88",X"83",X"9B",X"BE",X"D9",X"E1",X"D1",X"B6",X"A3",X"93",X"88",X"88",X"8B",X"98", - X"A3",X"C6",X"FC",X"FC",X"FC",X"FC",X"FC",X"F4",X"D4",X"B3",X"88",X"65",X"4A",X"32",X"3A",X"5D", - X"88",X"B3",X"D4",X"E4",X"E1",X"B9",X"78",X"37",X"11",X"01",X"01",X"01",X"01",X"01",X"01",X"01", - X"01",X"01",X"01",X"01",X"14",X"37",X"42",X"4A",X"5A",X"68",X"78",X"90",X"AE",X"C9",X"E1",X"E1", - X"C9",X"93",X"65",X"4D",X"32",X"1F",X"17",X"27",X"37",X"3F",X"42",X"4D",X"68",X"88",X"98",X"A3", - X"B6",X"C9",X"D4",X"E4",X"E4",X"D4",X"BE",X"A6",X"AE",X"C6",X"E4",X"FC",X"FC",X"FC",X"E4",X"AB", - X"6D",X"3F",X"27",X"2F",X"52",X"83",X"AB",X"AB",X"AE",X"AE",X"AE",X"98",X"70",X"5A",X"5A",X"65", - X"7D",X"88",X"80",X"5D",X"3A",X"24",X"11",X"11",X"2F",X"52",X"75",X"83",X"93",X"A3",X"C9",X"EF", - X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"D4",X"98",X"5A",X"1F",X"01",X"01",X"01",X"11",X"2F", - X"5D",X"90",X"BE",X"E4",X"FC",X"FC",X"D9",X"A3",X"78",X"65",X"68",X"75",X"70",X"65",X"5A",X"4A", - X"2C",X"14",X"04",X"11",X"37",X"68",X"9B",X"A6",X"9B",X"88",X"83",X"90",X"93",X"90",X"8B",X"83", - X"7D",X"83",X"93",X"A6",X"B6",X"BE",X"B9",X"9E",X"68",X"42",X"2C",X"2F",X"47",X"5D",X"78",X"88", - X"90",X"93",X"90",X"70",X"52",X"37",X"17",X"11",X"17",X"2C",X"37",X"3F",X"4D",X"4A",X"3F",X"32", - X"2F",X"37",X"5A",X"7D",X"9B",X"9E",X"A6",X"AE",X"B6",X"D4",X"FC",X"FC",X"FC",X"FC",X"FC",X"EC", - X"E1",X"B9",X"93",X"6D",X"5A",X"5A",X"5D",X"68",X"75",X"78",X"83",X"83",X"83",X"83",X"70",X"5D", - X"4A",X"4D",X"62",X"7D",X"90",X"98",X"88",X"62",X"2F",X"01",X"01",X"01",X"01",X"1C",X"37",X"52", - X"65",X"68",X"5A",X"52",X"5D",X"75",X"7D",X"75",X"5D",X"4A",X"4D",X"65",X"88",X"AB",X"C6",X"D9", - X"D4",X"B6",X"93",X"83",X"70",X"5A",X"47",X"47",X"4A",X"3F",X"3A",X"3F",X"32",X"27",X"17",X"1F", - X"3F",X"68",X"93",X"9E",X"9B",X"93",X"98",X"A6",X"AB",X"AB",X"A3",X"A6",X"BE",X"E1",X"F7",X"FC", - X"FC",X"EC",X"D1",X"AE",X"93",X"8B",X"9B",X"B3",X"B6",X"B6",X"C6",X"C6",X"B6",X"A6",X"9E",X"93", - X"7D",X"5D",X"37",X"1C",X"1F",X"27",X"2C",X"37",X"52",X"75",X"93",X"98",X"8B",X"7D",X"65",X"5D", - X"65",X"75",X"88",X"9B",X"9E",X"9B",X"8B",X"80",X"83",X"8B",X"8B",X"83",X"93",X"AB",X"C9",X"DC", - X"CE",X"B9",X"A6",X"83",X"5D",X"32",X"17",X"01",X"01",X"04",X"1C",X"4A",X"80",X"B6",X"DC",X"E1", - X"D4",X"BE",X"A6",X"98",X"90",X"88",X"6D",X"4D",X"2C",X"11",X"04",X"04",X"1C",X"4D",X"83",X"B6", - X"DC",X"E4",X"D1",X"C1",X"B3",X"9B",X"80",X"68",X"68",X"68",X"75",X"7D",X"7D",X"70",X"52",X"2C", - X"04",X"01",X"01",X"01",X"11",X"2F",X"47",X"5D",X"78",X"A3",X"D4",X"EC",X"FC",X"FC",X"F7",X"EC", - X"EF",X"EC",X"D4",X"C9",X"C6",X"B9",X"9E",X"80",X"65",X"68",X"70",X"78",X"7D",X"80",X"93",X"9E", - X"AB",X"AE",X"AE",X"A3",X"8B",X"68",X"52",X"42",X"32",X"27",X"1C",X"14",X"09",X"01",X"01",X"01", - X"14",X"3F",X"78",X"A3",X"AE",X"AE",X"A3",X"A6",X"BE",X"D4",X"D9",X"D9",X"D9",X"C6",X"B9",X"AB", - X"93",X"78",X"65",X"62",X"68",X"70",X"80",X"8B",X"88",X"7D",X"70",X"6D",X"78",X"7D",X"78",X"70", - X"6D",X"83",X"9E",X"C1",X"CE",X"C1",X"B3",X"98",X"75",X"52",X"3F",X"47",X"5A",X"68",X"7D",X"88", - X"7D",X"62",X"47",X"2F",X"11",X"01",X"01",X"01",X"01",X"01",X"17",X"3F",X"65",X"78",X"93",X"9B", - X"9E",X"93",X"98",X"9B",X"98",X"A3",X"A6",X"AB",X"B3",X"C1",X"D1",X"CE",X"BE",X"AE",X"98",X"7D", - X"75",X"65",X"52",X"4A",X"3F",X"3A",X"3F",X"52",X"68",X"80",X"93",X"AB",X"B6",X"C9",X"E1",X"E4", - X"D4",X"CE",X"CE",X"C9",X"BE",X"9E",X"7D",X"5A",X"37",X"27",X"1C",X"1F",X"37",X"5A",X"75",X"80", - X"8B",X"93",X"90",X"8B",X"88",X"88",X"80",X"80",X"83",X"80",X"88",X"A3",X"C6",X"E1",X"FC",X"FC", - X"F4",X"CE",X"A3",X"80",X"65",X"4A",X"37",X"37",X"3F",X"47",X"52",X"62",X"70",X"7D",X"70",X"62", - X"52",X"55",X"68",X"78",X"80",X"75",X"65",X"65",X"5D",X"55",X"5A",X"5A",X"65",X"80",X"98",X"A3", - X"9B",X"8B",X"7D",X"80",X"88",X"90",X"98",X"9B",X"93",X"93",X"9E",X"AE",X"B9",X"B6",X"AE",X"AE", - X"A6",X"93",X"78",X"65",X"52",X"4D",X"4A",X"52",X"68",X"78",X"88",X"93",X"90",X"83",X"80",X"6D", - X"5D",X"5D",X"62",X"68",X"6D",X"6D",X"5D",X"4A",X"37",X"2F",X"32",X"52",X"75",X"93",X"A6",X"AE", - X"AB",X"AE",X"B6",X"C6",X"BE",X"C1",X"B9",X"A6",X"98",X"8B",X"70",X"52",X"3A",X"2C",X"37",X"42", - X"5A",X"68",X"70",X"78",X"7D",X"88",X"93",X"98",X"90",X"7D",X"7D",X"88",X"90",X"98",X"93",X"7D", - X"52",X"2C",X"09",X"01",X"01",X"09",X"32",X"52",X"70",X"88",X"9B",X"93",X"90",X"93",X"98",X"90", - X"83",X"70",X"65",X"62",X"78",X"93",X"AE",X"BE",X"C6",X"B9",X"9E",X"83",X"70",X"65",X"5D",X"5A", - X"5A",X"5D",X"5A",X"55",X"55",X"47",X"37",X"27",X"1F",X"37",X"5A",X"78",X"88",X"8B",X"8B",X"93", - X"A3",X"A6",X"AB",X"A6",X"AB",X"BE",X"D4",X"E4",X"EC",X"EC",X"E1",X"C9",X"A6",X"90",X"83",X"90", - X"98",X"9B",X"9E",X"AE",X"AB",X"A6",X"9E",X"9B",X"9B",X"90",X"78",X"5A",X"3F",X"37",X"37",X"37", - X"3F",X"52",X"68",X"88",X"83",X"78",X"68",X"5A",X"55",X"65",X"78",X"8B",X"9E",X"A3",X"9B",X"90", - X"83",X"88",X"8B",X"88",X"80",X"8B",X"9E",X"B9",X"C9",X"B9",X"A6",X"93",X"75",X"52",X"32",X"1C", - X"11",X"0C",X"14",X"2C",X"5A",X"8B",X"BE",X"DC",X"E1",X"D9",X"C6",X"AE",X"9E",X"98",X"8B",X"75", - X"55",X"32",X"1C",X"11",X"11",X"24",X"52",X"88",X"B6",X"D9",X"E4",X"CE",X"BE",X"AE",X"98",X"7D", - X"68",X"65",X"68",X"75",X"78",X"7D",X"70",X"52",X"2F",X"09",X"01",X"01",X"01",X"11",X"2F",X"47", - X"5A",X"78",X"A3",X"D4",X"EC",X"FC",X"FC",X"F7",X"EC",X"EF",X"EC",X"D4",X"C9",X"C6",X"B9",X"9E", - X"80",X"65",X"68",X"70",X"78",X"7D",X"80",X"93",X"9E",X"AB",X"AE",X"AE",X"A3",X"8B",X"68",X"52", - X"42",X"32",X"27",X"1C",X"14",X"09",X"01",X"01",X"01",X"14",X"3F",X"78",X"A3",X"AE",X"AE",X"A3", - X"A6",X"BE",X"D4",X"D9",X"D9",X"D9",X"C6",X"B9",X"AB",X"93",X"78",X"65",X"62",X"68",X"70",X"80", - X"8B",X"88",X"7D",X"70",X"6D",X"78",X"7D",X"78",X"70",X"6D",X"83",X"9E",X"C1",X"CE",X"C1",X"B3", - X"98",X"75",X"52",X"3F",X"47",X"5A",X"68",X"7D",X"88",X"7D",X"62",X"47",X"2C",X"0C",X"01",X"01", - X"01",X"01",X"01",X"14",X"3A",X"65",X"7D",X"98",X"A3",X"A3",X"98",X"9B",X"9E",X"9E",X"A6",X"AB", - X"AB",X"B6",X"C6",X"D4",X"CE",X"BE",X"AB",X"90",X"78",X"68",X"5A",X"47",X"32",X"27",X"1F",X"24", - X"3A",X"62",X"80",X"9E",X"B9",X"CE",X"D4",X"E9",X"EC",X"E1",X"D1",X"D1",X"CE",X"C6",X"A6",X"80", - X"55",X"2F",X"17",X"04",X"11",X"2F",X"62",X"83",X"9B",X"A6",X"AB",X"9B",X"90",X"8B",X"88",X"78", - X"70",X"65",X"5A",X"65",X"88",X"A6",X"CE",X"EF",X"FC",X"FC",X"E1",X"B6",X"9E",X"88",X"68",X"52", - X"4A",X"47",X"3F",X"37",X"3A",X"47",X"47",X"3A",X"2F",X"2F",X"4A",X"68",X"80",X"83",X"75",X"65", - X"65",X"65",X"68",X"75",X"7D",X"88",X"9E",X"AB",X"AB",X"98",X"80",X"78",X"7D",X"80",X"8B",X"9E", - X"9E",X"9B",X"9E",X"AE",X"BE",X"C1",X"B3",X"A6",X"A3",X"A6",X"AB",X"9B",X"83",X"68",X"52",X"42", - X"3F",X"52",X"68",X"80",X"93",X"A3",X"A6",X"B3",X"A6",X"93",X"88",X"88",X"93",X"90",X"83",X"68", - X"4D",X"37",X"2C",X"2F",X"47",X"68",X"90",X"AB",X"AE",X"A6",X"A6",X"9B",X"88",X"75",X"68",X"62", - X"52",X"42",X"32",X"27",X"11",X"01",X"01",X"11",X"27",X"3F",X"5A",X"65",X"68",X"78",X"8B",X"A6", - X"C1",X"C6",X"B9",X"B3",X"B3",X"AB",X"A3",X"8B",X"68",X"42",X"24",X"11",X"11",X"11",X"27",X"4D", - X"70",X"98",X"B9",X"DC",X"E9",X"E9",X"E1",X"CE",X"AB",X"98",X"90",X"83",X"83",X"93",X"A3",X"B6", - X"AE",X"A3",X"90",X"78",X"5D",X"4A",X"4D",X"62",X"78",X"83",X"80",X"80",X"83",X"7D",X"68",X"52", - X"37",X"1F",X"1F",X"2F",X"47",X"55",X"65",X"7D",X"90",X"93",X"98",X"A3",X"AE",X"B3",X"B9",X"B6", - X"B6",X"C1",X"C6",X"B9",X"A6",X"8B",X"80",X"70",X"65",X"52",X"4A",X"52",X"62",X"65",X"68",X"7D", - X"90",X"AB",X"C6",X"D1",X"CE",X"AE",X"88",X"68",X"65",X"62",X"52",X"52",X"4D",X"3F",X"2F",X"27", - X"27",X"3A",X"62",X"83",X"9E",X"B3",X"A6",X"9E",X"93",X"90",X"8B",X"7D",X"68",X"62",X"65",X"65", - X"65",X"55",X"3F",X"27",X"14",X"11",X"14",X"1C",X"2F",X"4A",X"62",X"78",X"98",X"B6",X"D1",X"E4", - X"E4",X"E1",X"E4",X"F7",X"FC",X"F7",X"E4",X"D1",X"BE",X"AB",X"98",X"83",X"8B",X"98",X"93",X"90", - X"93",X"90",X"83",X"78",X"70",X"6D",X"62",X"4A",X"2C",X"17",X"14",X"1C",X"27",X"3F",X"4D",X"5D", - X"68",X"68",X"68",X"68",X"75",X"8B",X"9E",X"A6",X"9E",X"9B",X"98",X"98",X"93",X"80",X"70",X"62", - X"52",X"4A",X"42",X"3A",X"2F",X"27",X"2C",X"2F",X"3F",X"5D",X"80",X"90",X"9B",X"A3",X"AE",X"C9", - X"E1",X"E4",X"DC",X"CE",X"C9",X"CE",X"C6",X"B3",X"98",X"8B",X"83",X"75",X"68",X"6D",X"7D",X"90", - X"A3",X"B3",X"B9",X"AE",X"98",X"7D",X"70",X"62",X"4A",X"2F",X"17",X"11",X"17",X"24",X"37",X"52", - X"62",X"75",X"80",X"80",X"80",X"88",X"8B",X"8B",X"98",X"9B",X"9E",X"AB",X"B6",X"AE",X"A3",X"90", - X"83",X"80",X"7D",X"83",X"90",X"90",X"88",X"75",X"62",X"52",X"47",X"42",X"4A",X"5D",X"75",X"8B", - X"A3",X"AB",X"AB",X"A3",X"93",X"98",X"9E",X"AE",X"BE",X"BE",X"AB",X"88",X"68",X"52",X"3A",X"37", - X"47",X"62",X"83",X"98",X"A3",X"9B",X"98",X"98",X"88",X"68",X"52",X"4D",X"52",X"62",X"65",X"62", - X"62",X"5D",X"4A",X"37",X"27",X"2C",X"3F",X"5D",X"6D",X"75",X"75",X"80",X"90",X"A3",X"B3",X"BE", - X"C6",X"C1",X"B9",X"AB",X"9E",X"83",X"68",X"52",X"3F",X"27",X"11",X"0C",X"11",X"1C",X"3F",X"68", - X"9B",X"B6",X"BE",X"B6",X"B3",X"B6",X"BE",X"C9",X"C6",X"AE",X"9B",X"8B",X"80",X"7D",X"83",X"93", - X"A3",X"AE",X"A3",X"9E",X"9B",X"9E",X"9E",X"9E",X"9E",X"93",X"7D",X"68",X"62",X"5D",X"62",X"5D", - X"52",X"4D",X"5A",X"52",X"52",X"52",X"52",X"52",X"5A",X"5A",X"5A",X"62",X"68",X"78",X"88",X"90", - X"98",X"A6",X"B6",X"B9",X"B6",X"B3",X"B6",X"B9",X"B9",X"B6",X"AE",X"AB",X"93",X"78",X"65",X"4D", - X"32",X"24",X"24",X"32",X"52",X"70",X"83",X"88",X"83",X"7D",X"70",X"65",X"68",X"6D",X"6D",X"6D", - X"68",X"65",X"68",X"68",X"65",X"5D",X"55",X"5D",X"70",X"8B",X"90",X"93",X"8B",X"80",X"7D",X"7D", - X"8B",X"9E",X"A6",X"A3",X"9E",X"9E",X"A3",X"A3",X"98",X"88",X"80",X"75",X"68",X"62",X"55",X"4D", - X"4A",X"4D",X"5D",X"75",X"93",X"AE",X"B6",X"AB",X"93",X"78",X"65",X"52",X"5A",X"5D",X"65",X"78", - X"88",X"88",X"80",X"75",X"70",X"68",X"5D",X"5A",X"5D",X"62",X"68",X"70",X"75",X"78",X"7D",X"7D", - X"80",X"78",X"70",X"65",X"5D",X"52",X"5A",X"70",X"8B",X"A3",X"AE",X"AE",X"A6",X"9B",X"90",X"83", - X"75",X"68",X"55",X"4D",X"4A",X"4A",X"4D",X"5A",X"78",X"93",X"B9",X"D4",X"E4",X"E1",X"CE",X"BE", - X"AE",X"9B",X"88",X"78",X"78",X"78",X"78",X"68",X"62",X"55",X"4D",X"3A",X"32",X"3A",X"4D",X"68", - X"7D",X"80",X"7D",X"78",X"75",X"7D",X"88",X"98",X"A3",X"AE",X"AE",X"AB",X"AE",X"B6",X"C6",X"D1", - X"D4",X"D4",X"C6",X"AB",X"98",X"83",X"78",X"65",X"4D",X"3F",X"3F",X"3F",X"4A",X"5A",X"68",X"70", - X"68",X"68",X"70",X"80",X"8B",X"93",X"8B",X"7D",X"70",X"6D",X"68",X"70",X"75",X"75",X"78",X"78", - X"75",X"68",X"65",X"62",X"6D",X"83",X"98",X"AE",X"B6",X"A6",X"98",X"90",X"80",X"75",X"68",X"5D", - X"62",X"68",X"80",X"93",X"9B",X"93",X"90",X"80",X"6D",X"5A",X"4A",X"42",X"47",X"52",X"5D",X"6D", - X"83",X"90",X"90",X"83",X"80",X"80",X"75",X"75",X"70",X"68",X"65",X"5A",X"52",X"4D",X"52",X"65", - X"7D",X"98",X"A6",X"AB",X"AB",X"A6",X"9E",X"9B",X"90",X"80",X"75",X"6D",X"65",X"52",X"52",X"52", - X"52",X"4D",X"42",X"3F",X"47",X"4A",X"55",X"5D",X"62",X"62",X"62",X"62",X"68",X"7D",X"88",X"93", - X"A3",X"9E",X"A3",X"98",X"90",X"90",X"98",X"A3",X"B6",X"C1",X"BE",X"B6",X"B3",X"AB",X"9B",X"88", - X"75",X"70",X"68",X"65",X"70",X"78",X"7D",X"70",X"68",X"68",X"68",X"68",X"65",X"62",X"5D",X"68", - X"7D",X"90",X"9B",X"9B",X"98",X"98",X"98",X"93",X"98",X"9E",X"9B",X"98",X"93",X"93",X"90",X"83", - X"80",X"80",X"78",X"68",X"62",X"62",X"65",X"75",X"83",X"88",X"8B",X"90",X"8B",X"7D",X"70",X"68", - X"65",X"5D",X"55",X"52",X"4D",X"4A",X"4D",X"5A",X"5D",X"65",X"70",X"80",X"8B",X"93",X"9E",X"9E", - X"9B",X"9E",X"A3",X"9B",X"98",X"90",X"88",X"83",X"83",X"88",X"90",X"A6",X"B9",X"BE",X"C1",X"C6", - X"C6",X"C6",X"B6",X"9B",X"83",X"65",X"52",X"4A",X"4D",X"5D",X"6D",X"80",X"8B",X"93",X"8B",X"80", - X"65",X"5A",X"52",X"52",X"52",X"47",X"3F",X"3A",X"47",X"52",X"5D",X"6D",X"83",X"93",X"9B",X"9E", - X"98",X"8B",X"88",X"80",X"80",X"78",X"6D",X"68",X"68",X"70",X"70",X"68",X"68",X"62",X"5A",X"5A", - X"5D",X"5A",X"5D",X"65",X"70",X"75",X"8B",X"98",X"9B",X"9B",X"9B",X"93",X"88",X"88",X"83",X"88", - X"88",X"93",X"9B",X"98",X"8B",X"80",X"78",X"70",X"68",X"68",X"70",X"80",X"88",X"90",X"93",X"9B", - X"9E",X"98",X"98",X"98",X"98",X"90",X"83",X"78",X"78",X"6D",X"6D",X"78",X"88",X"98",X"A3",X"AB", - X"AB",X"A6",X"98",X"83",X"70",X"52",X"47",X"37",X"32",X"27",X"27",X"37",X"47",X"4D",X"65",X"75", - X"88",X"90",X"98",X"90",X"83",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"68",X"62",X"5D",X"4D",X"42", - X"3A",X"3A",X"3F",X"47",X"52",X"5A",X"68",X"78",X"83",X"90",X"A3",X"AE",X"B6",X"B9",X"B6",X"AE", - X"B3",X"B6",X"C1",X"C6",X"BE",X"B9",X"B9",X"AE",X"9B",X"88",X"80",X"75",X"68",X"65",X"65",X"70", - X"78",X"83",X"8B",X"90",X"88",X"7D",X"65",X"5A",X"55",X"5A",X"52",X"4D",X"47",X"42",X"3F",X"47", - X"4A",X"52",X"65",X"7D",X"93",X"9B",X"98",X"93",X"90",X"93",X"9B",X"A6",X"AE",X"AE",X"A6",X"98", - X"8B",X"78",X"68",X"5A",X"52",X"52",X"5A",X"65",X"68",X"75",X"75",X"70",X"70",X"7D",X"80",X"83", - X"83",X"80",X"80",X"80",X"8B",X"98",X"A3",X"A3",X"A6",X"A3",X"9B",X"93",X"90",X"8B",X"88",X"80", - X"78",X"70",X"62",X"5A",X"5A",X"52",X"52",X"55",X"5A",X"62",X"68",X"75",X"70",X"6D",X"65",X"65", - X"68",X"6D",X"70",X"70",X"70",X"75",X"75",X"7D",X"83",X"88",X"93",X"9B",X"A3",X"A3",X"A6",X"A6", - X"A3",X"9E",X"93",X"88",X"80",X"78",X"78",X"78",X"7D",X"80",X"80",X"80",X"7D",X"70",X"68",X"62", - X"62",X"68",X"70",X"78",X"7D",X"7D",X"78",X"75",X"68",X"68",X"62",X"62",X"68",X"78",X"78",X"7D", - X"75",X"68",X"6D",X"6D",X"70",X"75",X"7D",X"83",X"80",X"80",X"80",X"83",X"83",X"80",X"80",X"83", - X"88",X"8B",X"88",X"83",X"80",X"80",X"83",X"8B",X"98",X"9E",X"9E",X"9E",X"9B",X"90",X"83",X"7D", - X"75",X"6D",X"68",X"75",X"80",X"83",X"88",X"8B",X"90",X"8B",X"83",X"7D",X"75",X"75",X"78",X"7D", - X"80",X"80",X"75",X"68",X"5D",X"52",X"4A",X"4D",X"52",X"5D",X"68",X"6D",X"78",X"80",X"88",X"8B", - X"98",X"9B",X"A3",X"A3",X"9B",X"93",X"8B",X"88",X"7D",X"70",X"68",X"65",X"65",X"62",X"62",X"62", - X"65",X"70",X"78",X"7D",X"80",X"88",X"8B",X"93",X"93",X"90",X"8B",X"88",X"80",X"83",X"88",X"90", - X"9E",X"9E",X"9B",X"9B",X"93",X"88",X"7D",X"7D",X"7D",X"78",X"7D",X"78",X"75",X"78",X"7D",X"7D", - X"7D",X"80",X"80",X"80",X"7D",X"78",X"78",X"75",X"70",X"70",X"6D",X"68",X"6D",X"70",X"78",X"80", - X"80",X"80",X"83",X"88",X"90",X"8B",X"8B",X"8B",X"88",X"80",X"7D",X"78",X"70",X"68",X"68",X"68", - X"68",X"6D",X"6D",X"70",X"78",X"7D",X"83",X"8B",X"8B",X"90",X"8B",X"88",X"88",X"88",X"88",X"83", - X"80",X"80",X"83",X"80",X"80",X"7D",X"83",X"83",X"7D",X"7D",X"78",X"75",X"75",X"75",X"78",X"78", - X"75",X"70",X"70",X"70",X"75",X"78",X"78",X"78",X"75",X"75",X"70",X"70",X"75",X"78",X"75",X"75", - X"75",X"75",X"78",X"7D",X"80",X"7D",X"7D",X"7D",X"83",X"88",X"8B",X"88",X"88",X"88",X"88",X"88", - X"8B",X"90",X"90",X"88",X"83",X"7D",X"7D",X"78",X"75",X"75",X"75",X"7D",X"7D",X"80",X"7D",X"78", - X"75",X"70",X"70",X"78",X"80",X"88",X"88",X"88",X"88",X"83",X"7D",X"78",X"78",X"80",X"83",X"83", - X"83",X"80",X"78",X"75",X"75",X"75",X"78",X"80",X"80",X"83",X"83",X"80",X"7D",X"78",X"6D",X"68", - X"65",X"62",X"5D",X"5A",X"62",X"65",X"68",X"75",X"80",X"8B",X"90",X"93",X"90",X"88",X"83",X"80", - X"78",X"75",X"75",X"70",X"68",X"65",X"5D",X"5D",X"55",X"5A",X"5D",X"65",X"68",X"75",X"75",X"80", - X"83",X"8B",X"90",X"9B",X"A3",X"A6",X"A6",X"9E",X"9B",X"98",X"98",X"9E",X"9E",X"A3",X"A3",X"A6", - X"A3",X"9B",X"8B",X"88",X"7D",X"75",X"6D",X"68",X"6D",X"75",X"7D",X"7D",X"83",X"83",X"80",X"75", - X"6D",X"68",X"68",X"68",X"65",X"62",X"5D",X"5A",X"5A",X"5D",X"62",X"68",X"78",X"80",X"83",X"80", - X"7D",X"80",X"83",X"8B",X"98",X"9B",X"9B",X"98",X"90",X"8B",X"7D",X"70",X"68",X"62",X"65",X"68", - X"70",X"78",X"80",X"80",X"80",X"80",X"83",X"83",X"83",X"80",X"7D",X"7D",X"7D",X"83",X"90",X"98", - X"9B",X"9E",X"9B",X"98",X"90",X"8B",X"83",X"83",X"7D",X"75",X"70",X"65",X"5D",X"5D",X"5A",X"5D", - X"62",X"65",X"68",X"75",X"75",X"75",X"75",X"68",X"6D",X"6D",X"70",X"70",X"75",X"70",X"75",X"75", - X"78",X"7D",X"83",X"90",X"98",X"9B",X"9B",X"9E",X"9E",X"9E",X"9E",X"93",X"88",X"83",X"7D",X"7D", - X"7D",X"80",X"83",X"80",X"80",X"7D",X"75",X"68",X"65",X"65",X"68",X"75",X"78",X"7D",X"78",X"78", - X"78",X"6D",X"68",X"65",X"68",X"6D",X"78",X"7D",X"7D",X"75",X"6D",X"6D",X"70",X"75",X"78",X"80", - X"83",X"80",X"80",X"80",X"83",X"83",X"80",X"83",X"83",X"88",X"8B",X"88",X"83",X"80",X"80",X"83", - X"8B",X"98",X"9E",X"9E",X"9E",X"9B",X"90",X"83",X"7D",X"75",X"6D",X"68",X"75",X"80",X"83",X"88", - X"8B",X"90",X"8B",X"83",X"7D",X"75",X"75",X"78",X"7D",X"80",X"80",X"75",X"68",X"5D",X"52",X"4A", - X"4D",X"52",X"5D",X"68",X"6D",X"78",X"80",X"88",X"8B",X"98",X"9B",X"A3",X"A3",X"9B",X"93",X"8B", - X"88",X"7D",X"70",X"68",X"65",X"65",X"62",X"62",X"62",X"65",X"70",X"78",X"7D",X"80",X"88",X"8B", - X"93",X"93",X"90",X"8B",X"88",X"80",X"83",X"88",X"90",X"9E",X"9E",X"9B",X"9B",X"93",X"88",X"7D", - X"7D",X"7D",X"78",X"7D",X"78",X"75",X"78",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"78",X"78",X"75", - X"75",X"70",X"75",X"6D",X"68",X"6D",X"70",X"78",X"80",X"83",X"80",X"83",X"88",X"90",X"8B",X"8B", - X"88",X"83",X"7D",X"78",X"75",X"6D",X"68",X"68",X"68",X"65",X"68",X"68",X"68",X"70",X"75",X"7D", - X"88",X"83",X"88",X"88",X"80",X"83",X"83",X"88",X"8B",X"88",X"88",X"88",X"83",X"80",X"7D",X"80", - X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"7D",X"75",X"75",X"75",X"75",X"70", - X"70",X"68",X"68",X"68",X"68",X"70",X"70",X"75",X"75",X"75",X"75",X"78",X"83",X"83",X"83",X"88", - X"88",X"90",X"98",X"98",X"93",X"90",X"90",X"8B",X"88",X"88",X"8B",X"88",X"80",X"78",X"78",X"75", - X"70",X"68",X"68",X"65",X"68",X"70",X"78",X"78",X"78",X"75",X"75",X"70",X"78",X"80",X"83",X"83", - X"80",X"7D",X"70",X"68",X"65",X"68",X"70",X"7D",X"83",X"83",X"83",X"80",X"75",X"70",X"68",X"65", - X"65",X"65",X"68",X"6D",X"70",X"78",X"7D",X"7D",X"7D",X"83",X"80",X"80",X"80",X"80",X"7D",X"7D", - X"80",X"83",X"8B",X"90",X"93",X"93",X"8B",X"83",X"7D",X"78",X"70",X"6D",X"68",X"65",X"65",X"62", - X"65",X"68",X"70",X"7D",X"88",X"88",X"93",X"90",X"90",X"90",X"90",X"93",X"93",X"93",X"98",X"90", - X"88",X"80",X"78",X"78",X"75",X"78",X"80",X"88",X"90",X"90",X"93",X"8B",X"8B",X"88",X"7D",X"78", - X"6D",X"65",X"65",X"68",X"6D",X"75",X"80",X"83",X"88",X"88",X"88",X"83",X"83",X"83",X"83",X"80", - X"7D",X"80",X"7D",X"75",X"6D",X"68",X"5D",X"55",X"52",X"52",X"62",X"68",X"70",X"75",X"75",X"75", - X"78",X"7D",X"83",X"80",X"83",X"83",X"83",X"83",X"88",X"8B",X"90",X"98",X"98",X"9B",X"9B",X"93", - X"8B",X"83",X"7D",X"78",X"78",X"70",X"75",X"7D",X"80",X"80",X"83",X"80",X"80",X"75",X"70",X"68", - X"68",X"68",X"65",X"68",X"68",X"65",X"68",X"70",X"78",X"7D",X"88",X"88",X"88",X"83",X"83",X"80", - X"80",X"80",X"80",X"7D",X"7D",X"75",X"75",X"68",X"68",X"68",X"68",X"6D",X"6D",X"70",X"70",X"75", - X"75",X"7D",X"83",X"83",X"88",X"83",X"88",X"83",X"88",X"83",X"83",X"8B",X"88",X"8B",X"88",X"88", - X"80",X"7D",X"7D",X"75",X"6D",X"68",X"6D",X"70",X"7D",X"80",X"7D",X"83",X"80",X"80",X"80",X"80", - X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"83",X"80",X"80",X"7D",X"7D",X"80",X"80", - X"83",X"83",X"80",X"80",X"7D",X"78",X"75",X"70",X"68",X"6D",X"75",X"78",X"7D",X"80",X"80",X"80", - X"7D",X"78",X"7D",X"7D",X"80",X"80",X"80",X"80",X"7D",X"80",X"83",X"88",X"88",X"8B",X"8B",X"8B", - X"8B",X"88",X"83",X"83",X"80",X"78",X"75",X"75",X"70",X"70",X"75",X"75",X"80",X"83",X"80",X"83", - X"83",X"83",X"83",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"75",X"75",X"75",X"70",X"70", - X"75",X"75",X"78",X"7D",X"7D",X"80",X"80",X"83",X"83",X"83",X"83",X"88",X"83",X"83",X"83",X"88", - X"83",X"83",X"88",X"8B",X"88",X"88",X"80",X"7D",X"7D",X"7D",X"7D",X"80",X"7D",X"80",X"80",X"80", - X"83",X"83",X"83",X"7D",X"7D",X"75",X"75",X"75",X"75",X"75",X"70",X"75",X"75",X"75",X"78",X"83", - X"80",X"83",X"80",X"7D",X"80",X"78",X"78",X"80",X"80",X"80",X"7D",X"80",X"80",X"80",X"7D",X"75", - X"70",X"68",X"68",X"68",X"68",X"68",X"70",X"75",X"7D",X"83",X"8B",X"90",X"90",X"8B",X"83",X"80", - X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"75",X"75",X"75",X"70",X"70",X"75",X"75", - X"78",X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"75",X"78",X"7D",X"80", - X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"78",X"78",X"78",X"7D",X"80",X"80",X"80",X"83",X"83", - X"8B",X"8B",X"8B",X"88",X"83",X"83",X"80",X"83",X"7D",X"7D",X"7D",X"7D",X"75",X"75",X"78",X"7D", - X"80",X"80",X"78",X"78",X"78",X"78",X"7D",X"78",X"7D",X"7D",X"78",X"7D",X"78",X"7D",X"80",X"80", - X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"78",X"78",X"7D",X"7D", - X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"78",X"78", - X"78",X"78",X"78",X"78",X"7D",X"80",X"78",X"80",X"80",X"78",X"78",X"78",X"78",X"7D",X"78",X"7D", - X"78",X"78",X"7D",X"78",X"78",X"78",X"75",X"78",X"78",X"7D",X"78",X"7D",X"80",X"78",X"7D",X"7D", - X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D", - X"7D",X"78",X"78",X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"78",X"78",X"7D",X"80",X"80", - X"80",X"80",X"80",X"80",X"80",X"78",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D", - X"7D",X"7D",X"7D",X"80",X"80",X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"80", - X"75",X"75",X"75",X"75",X"78",X"83",X"80",X"80",X"80",X"80",X"80",X"80",X"75",X"75",X"78",X"80", - X"80",X"80",X"80",X"80",X"80",X"75",X"75",X"75",X"75",X"83",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"80",X"7D",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"80",X"88",X"83", - X"80",X"80",X"7D",X"78",X"75",X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"80",X"80",X"7D",X"7D",X"7D",X"75",X"75",X"75",X"75",X"78",X"83",X"80",X"80",X"80",X"80", - X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"75",X"78",X"75",X"75",X"78", - X"75",X"78",X"78",X"80",X"80",X"80",X"80",X"80",X"80",X"83",X"83",X"83",X"80",X"80",X"7D",X"7D", - X"7D",X"7D",X"7D",X"83",X"83",X"83",X"83",X"83",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D", - X"7D",X"7D",X"78",X"78",X"78",X"75",X"75",X"75",X"70",X"75",X"75",X"7D",X"7D",X"80",X"80",X"80", - X"80",X"80",X"83",X"83",X"83",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"80",X"78",X"78",X"7D", - X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"78",X"78",X"78", - X"78",X"78",X"78",X"78",X"78",X"75",X"78",X"78",X"80",X"80",X"80",X"80",X"80",X"80",X"83",X"83", - X"83",X"83",X"88",X"83",X"83",X"83",X"83",X"83",X"83",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"78", - X"7D",X"78",X"7D",X"80",X"80",X"80",X"80",X"7D",X"7D",X"80",X"7D",X"78",X"78",X"78",X"75",X"75", - X"75",X"78",X"7D",X"78",X"83",X"80",X"80",X"80",X"80",X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"7D", - X"78",X"78",X"78",X"78",X"75",X"75",X"75",X"75",X"78",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"80", - X"83",X"83",X"83",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"78",X"78",X"78",X"78", - X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D", - X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"7D",X"7D",X"80",X"83",X"83",X"7D", - X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"83",X"80",X"83",X"80",X"7D",X"7D",X"7D",X"7D",X"7D", - X"7D",X"7D",X"7D",X"80",X"80",X"80",X"83",X"83",X"83",X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"78", - X"78",X"78",X"7D",X"78",X"7D",X"7D",X"80",X"80",X"80",X"80",X"7D",X"78",X"7D",X"78",X"78",X"7D", - X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"78",X"78",X"78",X"7D",X"7D",X"7D", - X"7D",X"80",X"80",X"80",X"80",X"80",X"83",X"80",X"80",X"83",X"80",X"80",X"83",X"7D",X"7D",X"7D", - X"7D",X"78",X"78",X"78",X"7D",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"7D",X"80",X"80",X"83",X"83",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"7D",X"7D",X"7D",X"78",X"7D",X"78",X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"80",X"7D",X"7D",X"78",X"7D",X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"7D",X"78",X"7D", - X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"78",X"78",X"78",X"7D",X"78",X"78",X"7D", - X"7D",X"80",X"80",X"80",X"80",X"83",X"83",X"83",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"7D", - X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"78", - X"78",X"7D",X"80",X"80",X"80",X"80",X"80",X"80",X"7D",X"7D",X"80",X"80",X"80",X"80",X"80",X"80", - X"80",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"80",X"7D",X"7D",X"7D",X"7D",X"7D",X"7D",X"78", - X"7D",X"78",X"7D",X"80",X"80",X"80",X"80",X"7D",X"80",X"83",X"80",X"80",X"80",X"80",X"80",X"80"); -begin -process(clk) -begin - if rising_edge(clk) then - data <= rom_data(to_integer(unsigned(addr))); - end if; -end process; -end architecture; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/build_id.tcl b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/build_id.tcl deleted file mode 100644 index 938515d8..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/build_id.tcl +++ /dev/null @@ -1,35 +0,0 @@ -# ================================================================================ -# -# Build ID Verilog Module Script -# Jeff Wiencrot - 8/1/2011 -# -# Generates a Verilog module that contains a timestamp, -# from the current build. These values are available from the build_date, build_time, -# physical_address, and host_name output ports of the build_id module in the build_id.v -# Verilog source file. -# -# ================================================================================ - -proc generateBuildID_Verilog {} { - - # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) - set buildDate [ clock format [ clock seconds ] -format %y%m%d ] - set buildTime [ clock format [ clock seconds ] -format %H%M%S ] - - # Create a Verilog file for output - set outputFileName "rtl/build_id.v" - set outputFile [open $outputFileName "w"] - - # Output the Verilog source - puts $outputFile "`define BUILD_DATE \"$buildDate\"" - puts $outputFile "`define BUILD_TIME \"$buildTime\"" - close $outputFile - - # Send confirmation message to the Messages window - post_message "Generated build identification Verilog module: [pwd]/$outputFileName" - post_message "Date: $buildDate" - post_message "Time: $buildTime" -} - -# Comment out this line to prevent the process from automatically executing when the file is sourced: -generateBuildID_Verilog \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80.vhd deleted file mode 100644 index c07d2629..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80.vhd +++ /dev/null @@ -1,1093 +0,0 @@ --- **** --- T80(b) core. In an effort to merge and maintain bug fixes .... --- --- --- Ver 303 add undocumented DDCB and FDCB opcodes by TobiFlex 20.04.2010 --- Ver 302 fixed IO cycle timing, tested thanks to Alessandro. --- Ver 301 parity flag is just parity for 8080, also overflow for Z80, by Sean Riddle --- Ver 300 started tidyup. Rmoved some auto_wait bits from 0247 which caused problems --- --- MikeJ March 2005 --- Latest version from www.fpgaarcade.com (original www.opencores.org) --- --- **** --- --- Z80 compatible microprocessor core --- --- Version : 0247 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- --- 0208 : First complete release --- --- 0210 : Fixed wait and halt --- --- 0211 : Fixed Refresh addition and IM 1 --- --- 0214 : Fixed mostly flags, only the block instructions now fail the zex regression test --- --- 0232 : Removed refresh address output for Mode > 1 and added DJNZ M1_n fix by Mike Johnson --- --- 0235 : Added clock enable and IM 2 fix by Mike Johnson --- --- 0237 : Changed 8080 I/O address output, added IntE output --- --- 0238 : Fixed (IX/IY+d) timing and 16 bit ADC and SBC zero flag --- --- 0240 : Added interrupt ack fix by Mike Johnson, changed (IX/IY+d) timing and changed flags in GB mode --- --- 0242 : Added I/O wait, fixed refresh address, moved some registers to RAM --- --- 0247 : Fixed bus req/ack cycle --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use work.T80_Pack.all; - -entity T80 is - generic( - Mode : integer := 0; -- 0 => Z80, 1 => Fast Z80, 2 => 8080, 3 => GB - IOWait : integer := 0; -- 1 => Single cycle I/O, 1 => Std I/O cycle - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - RESET_n : in std_logic; - CLK_n : in std_logic; - CEN : in std_logic; - WAIT_n : in std_logic; - INT_n : in std_logic; - NMI_n : in std_logic; - BUSRQ_n : in std_logic; - M1_n : out std_logic; - IORQ : out std_logic; - NoRead : out std_logic; - Write : out std_logic; - RFSH_n : out std_logic; - HALT_n : out std_logic; - BUSAK_n : out std_logic; - A : out std_logic_vector(15 downto 0); - DInst : in std_logic_vector(7 downto 0); - DI : in std_logic_vector(7 downto 0); - DO : out std_logic_vector(7 downto 0); - MC : out std_logic_vector(2 downto 0); - TS : out std_logic_vector(2 downto 0); - IntCycle_n : out std_logic; - IntE : out std_logic; - Stop : out std_logic - ); -end T80; - -architecture rtl of T80 is - - constant aNone : std_logic_vector(2 downto 0) := "111"; - constant aBC : std_logic_vector(2 downto 0) := "000"; - constant aDE : std_logic_vector(2 downto 0) := "001"; - constant aXY : std_logic_vector(2 downto 0) := "010"; - constant aIOA : std_logic_vector(2 downto 0) := "100"; - constant aSP : std_logic_vector(2 downto 0) := "101"; - constant aZI : std_logic_vector(2 downto 0) := "110"; - - -- Registers - signal ACC, F : std_logic_vector(7 downto 0); - signal Ap, Fp : std_logic_vector(7 downto 0); - signal I : std_logic_vector(7 downto 0); - signal R : unsigned(7 downto 0); - signal SP, PC : unsigned(15 downto 0); - - signal RegDIH : std_logic_vector(7 downto 0); - signal RegDIL : std_logic_vector(7 downto 0); - signal RegBusA : std_logic_vector(15 downto 0); - signal RegBusB : std_logic_vector(15 downto 0); - signal RegBusC : std_logic_vector(15 downto 0); - signal RegAddrA_r : std_logic_vector(2 downto 0); - signal RegAddrA : std_logic_vector(2 downto 0); - signal RegAddrB_r : std_logic_vector(2 downto 0); - signal RegAddrB : std_logic_vector(2 downto 0); - signal RegAddrC : std_logic_vector(2 downto 0); - signal RegWEH : std_logic; - signal RegWEL : std_logic; - signal Alternate : std_logic; - - -- Help Registers - signal TmpAddr : std_logic_vector(15 downto 0); -- Temporary address register - signal IR : std_logic_vector(7 downto 0); -- Instruction register - signal ISet : std_logic_vector(1 downto 0); -- Instruction set selector - signal RegBusA_r : std_logic_vector(15 downto 0); - - signal ID16 : signed(15 downto 0); - signal Save_Mux : std_logic_vector(7 downto 0); - - signal TState : unsigned(2 downto 0); - signal MCycle : std_logic_vector(2 downto 0); - signal IntE_FF1 : std_logic; - signal IntE_FF2 : std_logic; - signal Halt_FF : std_logic; - signal BusReq_s : std_logic; - signal BusAck : std_logic; - signal ClkEn : std_logic; - signal NMI_s : std_logic; - signal INT_s : std_logic; - signal IStatus : std_logic_vector(1 downto 0); - - signal DI_Reg : std_logic_vector(7 downto 0); - signal T_Res : std_logic; - signal XY_State : std_logic_vector(1 downto 0); - signal Pre_XY_F_M : std_logic_vector(2 downto 0); - signal NextIs_XY_Fetch : std_logic; - signal XY_Ind : std_logic; - signal No_BTR : std_logic; - signal BTR_r : std_logic; - signal Auto_Wait : std_logic; - signal Auto_Wait_t1 : std_logic; - signal Auto_Wait_t2 : std_logic; - signal IncDecZ : std_logic; - - -- ALU signals - signal BusB : std_logic_vector(7 downto 0); - signal BusA : std_logic_vector(7 downto 0); - signal ALU_Q : std_logic_vector(7 downto 0); - signal F_Out : std_logic_vector(7 downto 0); - - -- Registered micro code outputs - signal Read_To_Reg_r : std_logic_vector(4 downto 0); - signal Arith16_r : std_logic; - signal Z16_r : std_logic; - signal ALU_Op_r : std_logic_vector(3 downto 0); - signal Save_ALU_r : std_logic; - signal PreserveC_r : std_logic; - signal MCycles : std_logic_vector(2 downto 0); - - -- Micro code outputs - signal MCycles_d : std_logic_vector(2 downto 0); - signal TStates : std_logic_vector(2 downto 0); - signal IntCycle : std_logic; - signal NMICycle : std_logic; - signal Inc_PC : std_logic; - signal Inc_WZ : std_logic; - signal IncDec_16 : std_logic_vector(3 downto 0); - signal Prefix : std_logic_vector(1 downto 0); - signal Read_To_Acc : std_logic; - signal Read_To_Reg : std_logic; - signal Set_BusB_To : std_logic_vector(3 downto 0); - signal Set_BusA_To : std_logic_vector(3 downto 0); - signal ALU_Op : std_logic_vector(3 downto 0); - signal Save_ALU : std_logic; - signal PreserveC : std_logic; - signal Arith16 : std_logic; - signal Set_Addr_To : std_logic_vector(2 downto 0); - signal Jump : std_logic; - signal JumpE : std_logic; - signal JumpXY : std_logic; - signal Call : std_logic; - signal RstP : std_logic; - signal LDZ : std_logic; - signal LDW : std_logic; - signal LDSPHL : std_logic; - signal IORQ_i : std_logic; - signal Special_LD : std_logic_vector(2 downto 0); - signal ExchangeDH : std_logic; - signal ExchangeRp : std_logic; - signal ExchangeAF : std_logic; - signal ExchangeRS : std_logic; - signal I_DJNZ : std_logic; - signal I_CPL : std_logic; - signal I_CCF : std_logic; - signal I_SCF : std_logic; - signal I_RETN : std_logic; - signal I_BT : std_logic; - signal I_BC : std_logic; - signal I_BTR : std_logic; - signal I_RLD : std_logic; - signal I_RRD : std_logic; - signal I_INRC : std_logic; - signal SetDI : std_logic; - signal SetEI : std_logic; - signal IMode : std_logic_vector(1 downto 0); - signal Halt : std_logic; - signal XYbit_undoc : std_logic; - -begin - - mcode : T80_MCode - generic map( - Mode => Mode, - Flag_C => Flag_C, - Flag_N => Flag_N, - Flag_P => Flag_P, - Flag_X => Flag_X, - Flag_H => Flag_H, - Flag_Y => Flag_Y, - Flag_Z => Flag_Z, - Flag_S => Flag_S) - port map( - IR => IR, - ISet => ISet, - MCycle => MCycle, - F => F, - NMICycle => NMICycle, - IntCycle => IntCycle, - XY_State => XY_State, - MCycles => MCycles_d, - TStates => TStates, - Prefix => Prefix, - Inc_PC => Inc_PC, - Inc_WZ => Inc_WZ, - IncDec_16 => IncDec_16, - Read_To_Acc => Read_To_Acc, - Read_To_Reg => Read_To_Reg, - Set_BusB_To => Set_BusB_To, - Set_BusA_To => Set_BusA_To, - ALU_Op => ALU_Op, - Save_ALU => Save_ALU, - PreserveC => PreserveC, - Arith16 => Arith16, - Set_Addr_To => Set_Addr_To, - IORQ => IORQ_i, - Jump => Jump, - JumpE => JumpE, - JumpXY => JumpXY, - Call => Call, - RstP => RstP, - LDZ => LDZ, - LDW => LDW, - LDSPHL => LDSPHL, - Special_LD => Special_LD, - ExchangeDH => ExchangeDH, - ExchangeRp => ExchangeRp, - ExchangeAF => ExchangeAF, - ExchangeRS => ExchangeRS, - I_DJNZ => I_DJNZ, - I_CPL => I_CPL, - I_CCF => I_CCF, - I_SCF => I_SCF, - I_RETN => I_RETN, - I_BT => I_BT, - I_BC => I_BC, - I_BTR => I_BTR, - I_RLD => I_RLD, - I_RRD => I_RRD, - I_INRC => I_INRC, - SetDI => SetDI, - SetEI => SetEI, - IMode => IMode, - Halt => Halt, - NoRead => NoRead, - Write => Write, - XYbit_undoc => XYbit_undoc); - - alu : T80_ALU - generic map( - Mode => Mode, - Flag_C => Flag_C, - Flag_N => Flag_N, - Flag_P => Flag_P, - Flag_X => Flag_X, - Flag_H => Flag_H, - Flag_Y => Flag_Y, - Flag_Z => Flag_Z, - Flag_S => Flag_S) - port map( - Arith16 => Arith16_r, - Z16 => Z16_r, - ALU_Op => ALU_Op_r, - IR => IR(5 downto 0), - ISet => ISet, - BusA => BusA, - BusB => BusB, - F_In => F, - Q => ALU_Q, - F_Out => F_Out); - - ClkEn <= CEN and not BusAck; - - T_Res <= '1' when TState = unsigned(TStates) else '0'; - - NextIs_XY_Fetch <= '1' when XY_State /= "00" and XY_Ind = '0' and - ((Set_Addr_To = aXY) or - (MCycle = "001" and IR = "11001011") or - (MCycle = "001" and IR = "00110110")) else '0'; - - Save_Mux <= BusB when ExchangeRp = '1' else - DI_Reg when Save_ALU_r = '0' else - ALU_Q; - - process (RESET_n, CLK_n) - begin - if RESET_n = '0' then - PC <= (others => '0'); -- Program Counter - A <= (others => '0'); - TmpAddr <= (others => '0'); - IR <= "00000000"; - ISet <= "00"; - XY_State <= "00"; - IStatus <= "00"; - MCycles <= "000"; - DO <= "00000000"; - - ACC <= (others => '1'); - F <= (others => '1'); - Ap <= (others => '1'); - Fp <= (others => '1'); - I <= (others => '0'); - R <= (others => '0'); - SP <= (others => '1'); - Alternate <= '0'; - - Read_To_Reg_r <= "00000"; - F <= (others => '1'); - Arith16_r <= '0'; - BTR_r <= '0'; - Z16_r <= '0'; - ALU_Op_r <= "0000"; - Save_ALU_r <= '0'; - PreserveC_r <= '0'; - XY_Ind <= '0'; - - elsif CLK_n'event and CLK_n = '1' then - - if ClkEn = '1' then - - ALU_Op_r <= "0000"; - Save_ALU_r <= '0'; - Read_To_Reg_r <= "00000"; - - MCycles <= MCycles_d; - - if IMode /= "11" then - IStatus <= IMode; - end if; - - Arith16_r <= Arith16; - PreserveC_r <= PreserveC; - if ISet = "10" and ALU_OP(2) = '0' and ALU_OP(0) = '1' and MCycle = "011" then - Z16_r <= '1'; - else - Z16_r <= '0'; - end if; - - if MCycle = "001" and TState(2) = '0' then - -- MCycle = 1 and TState = 1, 2, or 3 - - if TState = 2 and Wait_n = '1' then - if Mode < 2 then - A(7 downto 0) <= std_logic_vector(R); - A(15 downto 8) <= I; - R(6 downto 0) <= R(6 downto 0) + 1; - end if; - - if Jump = '0' and Call = '0' and NMICycle = '0' and IntCycle = '0' and not (Halt_FF = '1' or Halt = '1') then - PC <= PC + 1; - end if; - - if IntCycle = '1' and IStatus = "01" then - IR <= "11111111"; - elsif Halt_FF = '1' or (IntCycle = '1' and IStatus = "10") or NMICycle = '1' then - IR <= "00000000"; - else - IR <= DInst; - end if; - - ISet <= "00"; - if Prefix /= "00" then - if Prefix = "11" then - if IR(5) = '1' then - XY_State <= "10"; - else - XY_State <= "01"; - end if; - else - if Prefix = "10" then - XY_State <= "00"; - XY_Ind <= '0'; - end if; - ISet <= Prefix; - end if; - else - XY_State <= "00"; - XY_Ind <= '0'; - end if; - end if; - - else - -- either (MCycle > 1) OR (MCycle = 1 AND TState > 3) - - if MCycle = "110" then - XY_Ind <= '1'; - if Prefix = "01" then - ISet <= "01"; - end if; - end if; - - if T_Res = '1' then - BTR_r <= (I_BT or I_BC or I_BTR) and not No_BTR; - if Jump = '1' then - A(15 downto 8) <= DI_Reg; - A(7 downto 0) <= TmpAddr(7 downto 0); - PC(15 downto 8) <= unsigned(DI_Reg); - PC(7 downto 0) <= unsigned(TmpAddr(7 downto 0)); - elsif JumpXY = '1' then - A <= RegBusC; - PC <= unsigned(RegBusC); - elsif Call = '1' or RstP = '1' then - A <= TmpAddr; - PC <= unsigned(TmpAddr); - elsif MCycle = MCycles and NMICycle = '1' then - A <= "0000000001100110"; - PC <= "0000000001100110"; - elsif MCycle = "011" and IntCycle = '1' and IStatus = "10" then - A(15 downto 8) <= I; - A(7 downto 0) <= TmpAddr(7 downto 0); - PC(15 downto 8) <= unsigned(I); - PC(7 downto 0) <= unsigned(TmpAddr(7 downto 0)); - else - case Set_Addr_To is - when aXY => - if XY_State = "00" then - A <= RegBusC; - else - if NextIs_XY_Fetch = '1' then - A <= std_logic_vector(PC); - else - A <= TmpAddr; - end if; - end if; - when aIOA => - if Mode = 3 then - -- Memory map I/O on GBZ80 - A(15 downto 8) <= (others => '1'); - elsif Mode = 2 then - -- Duplicate I/O address on 8080 - A(15 downto 8) <= DI_Reg; - else - A(15 downto 8) <= ACC; - end if; - A(7 downto 0) <= DI_Reg; - when aSP => - A <= std_logic_vector(SP); - when aBC => - if Mode = 3 and IORQ_i = '1' then - -- Memory map I/O on GBZ80 - A(15 downto 8) <= (others => '1'); - A(7 downto 0) <= RegBusC(7 downto 0); - else - A <= RegBusC; - end if; - when aDE => - A <= RegBusC; - when aZI => - if Inc_WZ = '1' then - A <= std_logic_vector(unsigned(TmpAddr) + 1); - else - A(15 downto 8) <= DI_Reg; - A(7 downto 0) <= TmpAddr(7 downto 0); - end if; - when others => - A <= std_logic_vector(PC); - end case; - end if; - - Save_ALU_r <= Save_ALU; - ALU_Op_r <= ALU_Op; - - if I_CPL = '1' then - -- CPL - ACC <= not ACC; - F(Flag_Y) <= not ACC(5); - F(Flag_H) <= '1'; - F(Flag_X) <= not ACC(3); - F(Flag_N) <= '1'; - end if; - if I_CCF = '1' then - -- CCF - F(Flag_C) <= not F(Flag_C); - F(Flag_Y) <= ACC(5); - F(Flag_H) <= F(Flag_C); - F(Flag_X) <= ACC(3); - F(Flag_N) <= '0'; - end if; - if I_SCF = '1' then - -- SCF - F(Flag_C) <= '1'; - F(Flag_Y) <= ACC(5); - F(Flag_H) <= '0'; - F(Flag_X) <= ACC(3); - F(Flag_N) <= '0'; - end if; - end if; - - if TState = 2 and Wait_n = '1' then - if ISet = "01" and MCycle = "111" then - IR <= DInst; - end if; - if JumpE = '1' then - PC <= unsigned(signed(PC) + signed(DI_Reg)); - elsif Inc_PC = '1' then - PC <= PC + 1; - end if; - if BTR_r = '1' then - PC <= PC - 2; - end if; - if RstP = '1' then - TmpAddr <= (others =>'0'); - TmpAddr(5 downto 3) <= IR(5 downto 3); - end if; - end if; - if TState = 3 and MCycle = "110" then - TmpAddr <= std_logic_vector(signed(RegBusC) + signed(DI_Reg)); - end if; - - if (TState = 2 and Wait_n = '1') or (TState = 4 and MCycle = "001") then - if IncDec_16(2 downto 0) = "111" then - if IncDec_16(3) = '1' then - SP <= SP - 1; - else - SP <= SP + 1; - end if; - end if; - end if; - - if LDSPHL = '1' then - SP <= unsigned(RegBusC); - end if; - if ExchangeAF = '1' then - Ap <= ACC; - ACC <= Ap; - Fp <= F; - F <= Fp; - end if; - if ExchangeRS = '1' then - Alternate <= not Alternate; - end if; - end if; - - if TState = 3 then - if LDZ = '1' then - TmpAddr(7 downto 0) <= DI_Reg; - end if; - if LDW = '1' then - TmpAddr(15 downto 8) <= DI_Reg; - end if; - - if Special_LD(2) = '1' then - case Special_LD(1 downto 0) is - when "00" => - ACC <= I; - F(Flag_P) <= IntE_FF2; - when "01" => - ACC <= std_logic_vector(R); - F(Flag_P) <= IntE_FF2; - when "10" => - I <= ACC; - when others => - R <= unsigned(ACC); - end case; - end if; - end if; - - if (I_DJNZ = '0' and Save_ALU_r = '1') or ALU_Op_r = "1001" then - if Mode = 3 then - F(6) <= F_Out(6); - F(5) <= F_Out(5); - F(7) <= F_Out(7); - if PreserveC_r = '0' then - F(4) <= F_Out(4); - end if; - else - F(7 downto 1) <= F_Out(7 downto 1); - if PreserveC_r = '0' then - F(Flag_C) <= F_Out(0); - end if; - end if; - end if; - if T_Res = '1' and I_INRC = '1' then - F(Flag_H) <= '0'; - F(Flag_N) <= '0'; - if DI_Reg(7 downto 0) = "00000000" then - F(Flag_Z) <= '1'; - else - F(Flag_Z) <= '0'; - end if; - F(Flag_S) <= DI_Reg(7); - F(Flag_P) <= not (DI_Reg(0) xor DI_Reg(1) xor DI_Reg(2) xor DI_Reg(3) xor - DI_Reg(4) xor DI_Reg(5) xor DI_Reg(6) xor DI_Reg(7)); - end if; - - if TState = 1 then - DO <= BusB; - if I_RLD = '1' then - DO(3 downto 0) <= BusA(3 downto 0); - DO(7 downto 4) <= BusB(3 downto 0); - end if; - if I_RRD = '1' then - DO(3 downto 0) <= BusB(7 downto 4); - DO(7 downto 4) <= BusA(3 downto 0); - end if; - end if; - - if T_Res = '1' then - Read_To_Reg_r(3 downto 0) <= Set_BusA_To; - Read_To_Reg_r(4) <= Read_To_Reg; - if Read_To_Acc = '1' then - Read_To_Reg_r(3 downto 0) <= "0111"; - Read_To_Reg_r(4) <= '1'; - end if; - end if; - - if TState = 1 and I_BT = '1' then - F(Flag_X) <= ALU_Q(3); - F(Flag_Y) <= ALU_Q(1); - F(Flag_H) <= '0'; - F(Flag_N) <= '0'; - end if; - if I_BC = '1' or I_BT = '1' then - F(Flag_P) <= IncDecZ; - end if; - - if (TState = 1 and Save_ALU_r = '0') or - (Save_ALU_r = '1' and ALU_OP_r /= "0111") then - case Read_To_Reg_r is - when "10111" => - ACC <= Save_Mux; - when "10110" => - DO <= Save_Mux; - when "11000" => - SP(7 downto 0) <= unsigned(Save_Mux); - when "11001" => - SP(15 downto 8) <= unsigned(Save_Mux); - when "11011" => - F <= Save_Mux; - when others => - end case; - if XYbit_undoc='1' then - DO <= ALU_Q; - end if; - end if; - - end if; - - end if; - - end process; - ---------------------------------------------------------------------------- --- --- BC('), DE('), HL('), IX and IY --- ---------------------------------------------------------------------------- - process (CLK_n) - begin - if CLK_n'event and CLK_n = '1' then - if ClkEn = '1' then - -- Bus A / Write - RegAddrA_r <= Alternate & Set_BusA_To(2 downto 1); - if XY_Ind = '0' and XY_State /= "00" and Set_BusA_To(2 downto 1) = "10" then - RegAddrA_r <= XY_State(1) & "11"; - end if; - - -- Bus B - RegAddrB_r <= Alternate & Set_BusB_To(2 downto 1); - if XY_Ind = '0' and XY_State /= "00" and Set_BusB_To(2 downto 1) = "10" then - RegAddrB_r <= XY_State(1) & "11"; - end if; - - -- Address from register - RegAddrC <= Alternate & Set_Addr_To(1 downto 0); - -- Jump (HL), LD SP,HL - if (JumpXY = '1' or LDSPHL = '1') then - RegAddrC <= Alternate & "10"; - end if; - if ((JumpXY = '1' or LDSPHL = '1') and XY_State /= "00") or (MCycle = "110") then - RegAddrC <= XY_State(1) & "11"; - end if; - - if I_DJNZ = '1' and Save_ALU_r = '1' and Mode < 2 then - IncDecZ <= F_Out(Flag_Z); - end if; - if (TState = 2 or (TState = 3 and MCycle = "001")) and IncDec_16(2 downto 0) = "100" then - if ID16 = 0 then - IncDecZ <= '0'; - else - IncDecZ <= '1'; - end if; - end if; - - RegBusA_r <= RegBusA; - end if; - end if; - end process; - - RegAddrA <= - -- 16 bit increment/decrement - Alternate & IncDec_16(1 downto 0) when (TState = 2 or - (TState = 3 and MCycle = "001" and IncDec_16(2) = '1')) and XY_State = "00" else - XY_State(1) & "11" when (TState = 2 or - (TState = 3 and MCycle = "001" and IncDec_16(2) = '1')) and IncDec_16(1 downto 0) = "10" else - -- EX HL,DL - Alternate & "10" when ExchangeDH = '1' and TState = 3 else - Alternate & "01" when ExchangeDH = '1' and TState = 4 else - -- Bus A / Write - RegAddrA_r; - - RegAddrB <= - -- EX HL,DL - Alternate & "01" when ExchangeDH = '1' and TState = 3 else - -- Bus B - RegAddrB_r; - - ID16 <= signed(RegBusA) - 1 when IncDec_16(3) = '1' else - signed(RegBusA) + 1; - - process (Save_ALU_r, Auto_Wait_t1, ALU_OP_r, Read_To_Reg_r, - ExchangeDH, IncDec_16, MCycle, TState, Wait_n) - begin - RegWEH <= '0'; - RegWEL <= '0'; - if (TState = 1 and Save_ALU_r = '0') or - (Save_ALU_r = '1' and ALU_OP_r /= "0111") then - case Read_To_Reg_r is - when "10000" | "10001" | "10010" | "10011" | "10100" | "10101" => - RegWEH <= not Read_To_Reg_r(0); - RegWEL <= Read_To_Reg_r(0); - when others => - end case; - end if; - - if ExchangeDH = '1' and (TState = 3 or TState = 4) then - RegWEH <= '1'; - RegWEL <= '1'; - end if; - - if IncDec_16(2) = '1' and ((TState = 2 and Wait_n = '1' and MCycle /= "001") or (TState = 3 and MCycle = "001")) then - case IncDec_16(1 downto 0) is - when "00" | "01" | "10" => - RegWEH <= '1'; - RegWEL <= '1'; - when others => - end case; - end if; - end process; - - process (Save_Mux, RegBusB, RegBusA_r, ID16, - ExchangeDH, IncDec_16, MCycle, TState, Wait_n) - begin - RegDIH <= Save_Mux; - RegDIL <= Save_Mux; - - if ExchangeDH = '1' and TState = 3 then - RegDIH <= RegBusB(15 downto 8); - RegDIL <= RegBusB(7 downto 0); - end if; - if ExchangeDH = '1' and TState = 4 then - RegDIH <= RegBusA_r(15 downto 8); - RegDIL <= RegBusA_r(7 downto 0); - end if; - - if IncDec_16(2) = '1' and ((TState = 2 and MCycle /= "001") or (TState = 3 and MCycle = "001")) then - RegDIH <= std_logic_vector(ID16(15 downto 8)); - RegDIL <= std_logic_vector(ID16(7 downto 0)); - end if; - end process; - - Regs : T80_Reg - port map( - Clk => CLK_n, - CEN => ClkEn, - WEH => RegWEH, - WEL => RegWEL, - AddrA => RegAddrA, - AddrB => RegAddrB, - AddrC => RegAddrC, - DIH => RegDIH, - DIL => RegDIL, - DOAH => RegBusA(15 downto 8), - DOAL => RegBusA(7 downto 0), - DOBH => RegBusB(15 downto 8), - DOBL => RegBusB(7 downto 0), - DOCH => RegBusC(15 downto 8), - DOCL => RegBusC(7 downto 0)); - ---------------------------------------------------------------------------- --- --- Buses --- ---------------------------------------------------------------------------- - process (CLK_n) - begin - if CLK_n'event and CLK_n = '1' then - if ClkEn = '1' then - case Set_BusB_To is - when "0111" => - BusB <= ACC; - when "0000" | "0001" | "0010" | "0011" | "0100" | "0101" => - if Set_BusB_To(0) = '1' then - BusB <= RegBusB(7 downto 0); - else - BusB <= RegBusB(15 downto 8); - end if; - when "0110" => - BusB <= DI_Reg; - when "1000" => - BusB <= std_logic_vector(SP(7 downto 0)); - when "1001" => - BusB <= std_logic_vector(SP(15 downto 8)); - when "1010" => - BusB <= "00000001"; - when "1011" => - BusB <= F; - when "1100" => - BusB <= std_logic_vector(PC(7 downto 0)); - when "1101" => - BusB <= std_logic_vector(PC(15 downto 8)); - when "1110" => - BusB <= "00000000"; - when others => - BusB <= "--------"; - end case; - - case Set_BusA_To is - when "0111" => - BusA <= ACC; - when "0000" | "0001" | "0010" | "0011" | "0100" | "0101" => - if Set_BusA_To(0) = '1' then - BusA <= RegBusA(7 downto 0); - else - BusA <= RegBusA(15 downto 8); - end if; - when "0110" => - BusA <= DI_Reg; - when "1000" => - BusA <= std_logic_vector(SP(7 downto 0)); - when "1001" => - BusA <= std_logic_vector(SP(15 downto 8)); - when "1010" => - BusA <= "00000000"; - when others => - BusB <= "--------"; - end case; - if XYbit_undoc='1' then - BusA <= DI_Reg; - BusB <= DI_Reg; - end if; - end if; - end if; - end process; - ---------------------------------------------------------------------------- --- --- Generate external control signals --- ---------------------------------------------------------------------------- - process (RESET_n,CLK_n) - begin - if RESET_n = '0' then - RFSH_n <= '1'; - elsif CLK_n'event and CLK_n = '1' then - if CEN = '1' then - if MCycle = "001" and ((TState = 2 and Wait_n = '1') or TState = 3) then - RFSH_n <= '0'; - else - RFSH_n <= '1'; - end if; - end if; - end if; - end process; - - MC <= std_logic_vector(MCycle); - TS <= std_logic_vector(TState); - DI_Reg <= DI; - HALT_n <= not Halt_FF; - BUSAK_n <= not BusAck; - IntCycle_n <= not IntCycle; - IntE <= IntE_FF1; - IORQ <= IORQ_i; - Stop <= I_DJNZ; - -------------------------------------------------------------------------- --- --- Syncronise inputs --- -------------------------------------------------------------------------- - process (RESET_n, CLK_n) - variable OldNMI_n : std_logic; - begin - if RESET_n = '0' then - BusReq_s <= '0'; - INT_s <= '0'; - NMI_s <= '0'; - OldNMI_n := '0'; - elsif CLK_n'event and CLK_n = '1' then - if CEN = '1' then - BusReq_s <= not BUSRQ_n; - INT_s <= not INT_n; - if NMICycle = '1' then - NMI_s <= '0'; - elsif NMI_n = '0' and OldNMI_n = '1' then - NMI_s <= '1'; - end if; - OldNMI_n := NMI_n; - end if; - end if; - end process; - -------------------------------------------------------------------------- --- --- Main state machine --- -------------------------------------------------------------------------- - process (RESET_n, CLK_n) - begin - if RESET_n = '0' then - MCycle <= "001"; - TState <= "000"; - Pre_XY_F_M <= "000"; - Halt_FF <= '0'; - BusAck <= '0'; - NMICycle <= '0'; - IntCycle <= '0'; - IntE_FF1 <= '0'; - IntE_FF2 <= '0'; - No_BTR <= '0'; - Auto_Wait_t1 <= '0'; - Auto_Wait_t2 <= '0'; - M1_n <= '1'; - elsif CLK_n'event and CLK_n = '1' then - if CEN = '1' then - Auto_Wait_t1 <= Auto_Wait; - Auto_Wait_t2 <= Auto_Wait_t1; - No_BTR <= (I_BT and (not IR(4) or not F(Flag_P))) or - (I_BC and (not IR(4) or F(Flag_Z) or not F(Flag_P))) or - (I_BTR and (not IR(4) or F(Flag_Z))); - if TState = 2 then - if SetEI = '1' then - IntE_FF1 <= '1'; - IntE_FF2 <= '1'; - end if; - if I_RETN = '1' then - IntE_FF1 <= IntE_FF2; - end if; - end if; - if TState = 3 then - if SetDI = '1' then - IntE_FF1 <= '0'; - IntE_FF2 <= '0'; - end if; - end if; - if IntCycle = '1' or NMICycle = '1' then - Halt_FF <= '0'; - end if; - if MCycle = "001" and TState = 2 and Wait_n = '1' then - M1_n <= '1'; - end if; - if BusReq_s = '1' and BusAck = '1' then - else - BusAck <= '0'; - if TState = 2 and Wait_n = '0' then - elsif T_Res = '1' then - if Halt = '1' then - Halt_FF <= '1'; - end if; - if BusReq_s = '1' then - BusAck <= '1'; - else - TState <= "001"; - if NextIs_XY_Fetch = '1' then - MCycle <= "110"; - Pre_XY_F_M <= MCycle; - if IR = "00110110" and Mode = 0 then - Pre_XY_F_M <= "010"; - end if; - elsif (MCycle = "111") or - (MCycle = "110" and Mode = 1 and ISet /= "01") then - MCycle <= std_logic_vector(unsigned(Pre_XY_F_M) + 1); - elsif (MCycle = MCycles) or - No_BTR = '1' or - (MCycle = "010" and I_DJNZ = '1' and IncDecZ = '1') then - M1_n <= '0'; - MCycle <= "001"; - IntCycle <= '0'; - NMICycle <= '0'; - if NMI_s = '1' and Prefix = "00" then - NMICycle <= '1'; - IntE_FF1 <= '0'; - elsif (IntE_FF1 = '1' and INT_s = '1') and Prefix = "00" and SetEI = '0' then - IntCycle <= '1'; - IntE_FF1 <= '0'; - IntE_FF2 <= '0'; - end if; - else - MCycle <= std_logic_vector(unsigned(MCycle) + 1); - end if; - end if; - else - if Auto_Wait = '1' nand Auto_Wait_t2 = '0' then - - TState <= TState + 1; - end if; - end if; - end if; - if TState = 0 then - M1_n <= '0'; - end if; - end if; - end if; - end process; - - process (IntCycle, NMICycle, MCycle) - begin - Auto_Wait <= '0'; - if IntCycle = '1' or NMICycle = '1' then - if MCycle = "001" then - Auto_Wait <= '1'; - end if; - end if; - end process; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_ALU.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_ALU.vhd deleted file mode 100644 index 6bd576cf..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_ALU.vhd +++ /dev/null @@ -1,371 +0,0 @@ --- **** --- T80(b) core. In an effort to merge and maintain bug fixes .... --- --- --- Ver 301 parity flag is just parity for 8080, also overflow for Z80, by Sean Riddle --- Ver 300 started tidyup --- MikeJ March 2005 --- Latest version from www.fpgaarcade.com (original www.opencores.org) --- --- **** --- --- Z80 compatible microprocessor core --- --- Version : 0247 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- --- 0214 : Fixed mostly flags, only the block instructions now fail the zex regression test --- --- 0238 : Fixed zero flag for 16 bit SBC and ADC --- --- 0240 : Added GB operations --- --- 0242 : Cleanup --- --- 0247 : Cleanup --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; - -entity T80_ALU is - generic( - Mode : integer := 0; - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - Arith16 : in std_logic; - Z16 : in std_logic; - ALU_Op : in std_logic_vector(3 downto 0); - IR : in std_logic_vector(5 downto 0); - ISet : in std_logic_vector(1 downto 0); - BusA : in std_logic_vector(7 downto 0); - BusB : in std_logic_vector(7 downto 0); - F_In : in std_logic_vector(7 downto 0); - Q : out std_logic_vector(7 downto 0); - F_Out : out std_logic_vector(7 downto 0) - ); -end T80_ALU; - -architecture rtl of T80_ALU is - - procedure AddSub(A : std_logic_vector; - B : std_logic_vector; - Sub : std_logic; - Carry_In : std_logic; - signal Res : out std_logic_vector; - signal Carry : out std_logic) is - - variable B_i : unsigned(A'length - 1 downto 0); - variable Res_i : unsigned(A'length + 1 downto 0); - begin - if Sub = '1' then - B_i := not unsigned(B); - else - B_i := unsigned(B); - end if; - - Res_i := unsigned("0" & A & Carry_In) + unsigned("0" & B_i & "1"); - Carry <= Res_i(A'length + 1); - Res <= std_logic_vector(Res_i(A'length downto 1)); - end; - - -- AddSub variables (temporary signals) - signal UseCarry : std_logic; - signal Carry7_v : std_logic; - signal Overflow_v : std_logic; - signal HalfCarry_v : std_logic; - signal Carry_v : std_logic; - signal Q_v : std_logic_vector(7 downto 0); - - signal BitMask : std_logic_vector(7 downto 0); - -begin - - with IR(5 downto 3) select BitMask <= "00000001" when "000", - "00000010" when "001", - "00000100" when "010", - "00001000" when "011", - "00010000" when "100", - "00100000" when "101", - "01000000" when "110", - "10000000" when others; - - UseCarry <= not ALU_Op(2) and ALU_Op(0); - AddSub(BusA(3 downto 0), BusB(3 downto 0), ALU_Op(1), ALU_Op(1) xor (UseCarry and F_In(Flag_C)), Q_v(3 downto 0), HalfCarry_v); - AddSub(BusA(6 downto 4), BusB(6 downto 4), ALU_Op(1), HalfCarry_v, Q_v(6 downto 4), Carry7_v); - AddSub(BusA(7 downto 7), BusB(7 downto 7), ALU_Op(1), Carry7_v, Q_v(7 downto 7), Carry_v); - - -- bug fix - parity flag is just parity for 8080, also overflow for Z80 - process (Carry_v, Carry7_v, Q_v) - begin - if(Mode=2) then - OverFlow_v <= not (Q_v(0) xor Q_v(1) xor Q_v(2) xor Q_v(3) xor - Q_v(4) xor Q_v(5) xor Q_v(6) xor Q_v(7)); else - OverFlow_v <= Carry_v xor Carry7_v; - end if; - end process; - - process (Arith16, ALU_OP, F_In, BusA, BusB, IR, Q_v, Carry_v, HalfCarry_v, OverFlow_v, BitMask, ISet, Z16) - variable Q_t : std_logic_vector(7 downto 0); - variable DAA_Q : unsigned(8 downto 0); - begin - Q_t := "--------"; - F_Out <= F_In; - DAA_Q := "---------"; - case ALU_Op is - when "0000" | "0001" | "0010" | "0011" | "0100" | "0101" | "0110" | "0111" => - F_Out(Flag_N) <= '0'; - F_Out(Flag_C) <= '0'; - case ALU_OP(2 downto 0) is - when "000" | "001" => -- ADD, ADC - Q_t := Q_v; - F_Out(Flag_C) <= Carry_v; - F_Out(Flag_H) <= HalfCarry_v; - F_Out(Flag_P) <= OverFlow_v; - when "010" | "011" | "111" => -- SUB, SBC, CP - Q_t := Q_v; - F_Out(Flag_N) <= '1'; - F_Out(Flag_C) <= not Carry_v; - F_Out(Flag_H) <= not HalfCarry_v; - F_Out(Flag_P) <= OverFlow_v; - when "100" => -- AND - Q_t(7 downto 0) := BusA and BusB; - F_Out(Flag_H) <= '1'; - when "101" => -- XOR - Q_t(7 downto 0) := BusA xor BusB; - F_Out(Flag_H) <= '0'; - when others => -- OR "110" - Q_t(7 downto 0) := BusA or BusB; - F_Out(Flag_H) <= '0'; - end case; - if ALU_Op(2 downto 0) = "111" then -- CP - F_Out(Flag_X) <= BusB(3); - F_Out(Flag_Y) <= BusB(5); - else - F_Out(Flag_X) <= Q_t(3); - F_Out(Flag_Y) <= Q_t(5); - end if; - if Q_t(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - if Z16 = '1' then - F_Out(Flag_Z) <= F_In(Flag_Z); -- 16 bit ADC,SBC - end if; - else - F_Out(Flag_Z) <= '0'; - end if; - F_Out(Flag_S) <= Q_t(7); - case ALU_Op(2 downto 0) is - when "000" | "001" | "010" | "011" | "111" => -- ADD, ADC, SUB, SBC, CP - when others => - F_Out(Flag_P) <= not (Q_t(0) xor Q_t(1) xor Q_t(2) xor Q_t(3) xor - Q_t(4) xor Q_t(5) xor Q_t(6) xor Q_t(7)); - end case; - if Arith16 = '1' then - F_Out(Flag_S) <= F_In(Flag_S); - F_Out(Flag_Z) <= F_In(Flag_Z); - F_Out(Flag_P) <= F_In(Flag_P); - end if; - when "1100" => - -- DAA - F_Out(Flag_H) <= F_In(Flag_H); - F_Out(Flag_C) <= F_In(Flag_C); - DAA_Q(7 downto 0) := unsigned(BusA); - DAA_Q(8) := '0'; - if F_In(Flag_N) = '0' then - -- After addition - -- Alow > 9 or H = 1 - if DAA_Q(3 downto 0) > 9 or F_In(Flag_H) = '1' then - if (DAA_Q(3 downto 0) > 9) then - F_Out(Flag_H) <= '1'; - else - F_Out(Flag_H) <= '0'; - end if; - DAA_Q := DAA_Q + 6; - end if; - -- new Ahigh > 9 or C = 1 - if DAA_Q(8 downto 4) > 9 or F_In(Flag_C) = '1' then - DAA_Q := DAA_Q + 96; -- 0x60 - end if; - else - -- After subtraction - if DAA_Q(3 downto 0) > 9 or F_In(Flag_H) = '1' then - if DAA_Q(3 downto 0) > 5 then - F_Out(Flag_H) <= '0'; - end if; - DAA_Q(7 downto 0) := DAA_Q(7 downto 0) - 6; - end if; - if unsigned(BusA) > 153 or F_In(Flag_C) = '1' then - DAA_Q := DAA_Q - 352; -- 0x160 - end if; - end if; - F_Out(Flag_X) <= DAA_Q(3); - F_Out(Flag_Y) <= DAA_Q(5); - F_Out(Flag_C) <= F_In(Flag_C) or DAA_Q(8); - Q_t := std_logic_vector(DAA_Q(7 downto 0)); - if DAA_Q(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - else - F_Out(Flag_Z) <= '0'; - end if; - F_Out(Flag_S) <= DAA_Q(7); - F_Out(Flag_P) <= not (DAA_Q(0) xor DAA_Q(1) xor DAA_Q(2) xor DAA_Q(3) xor - DAA_Q(4) xor DAA_Q(5) xor DAA_Q(6) xor DAA_Q(7)); - when "1101" | "1110" => - -- RLD, RRD - Q_t(7 downto 4) := BusA(7 downto 4); - if ALU_Op(0) = '1' then - Q_t(3 downto 0) := BusB(7 downto 4); - else - Q_t(3 downto 0) := BusB(3 downto 0); - end if; - F_Out(Flag_H) <= '0'; - F_Out(Flag_N) <= '0'; - F_Out(Flag_X) <= Q_t(3); - F_Out(Flag_Y) <= Q_t(5); - if Q_t(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - else - F_Out(Flag_Z) <= '0'; - end if; - F_Out(Flag_S) <= Q_t(7); - F_Out(Flag_P) <= not (Q_t(0) xor Q_t(1) xor Q_t(2) xor Q_t(3) xor - Q_t(4) xor Q_t(5) xor Q_t(6) xor Q_t(7)); - when "1001" => - -- BIT - Q_t(7 downto 0) := BusB and BitMask; - F_Out(Flag_S) <= Q_t(7); - if Q_t(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - F_Out(Flag_P) <= '1'; - else - F_Out(Flag_Z) <= '0'; - F_Out(Flag_P) <= '0'; - end if; - F_Out(Flag_H) <= '1'; - F_Out(Flag_N) <= '0'; - F_Out(Flag_X) <= '0'; - F_Out(Flag_Y) <= '0'; - if IR(2 downto 0) /= "110" then - F_Out(Flag_X) <= BusB(3); - F_Out(Flag_Y) <= BusB(5); - end if; - when "1010" => - -- SET - Q_t(7 downto 0) := BusB or BitMask; - when "1011" => - -- RES - Q_t(7 downto 0) := BusB and not BitMask; - when "1000" => - -- ROT - case IR(5 downto 3) is - when "000" => -- RLC - Q_t(7 downto 1) := BusA(6 downto 0); - Q_t(0) := BusA(7); - F_Out(Flag_C) <= BusA(7); - when "010" => -- RL - Q_t(7 downto 1) := BusA(6 downto 0); - Q_t(0) := F_In(Flag_C); - F_Out(Flag_C) <= BusA(7); - when "001" => -- RRC - Q_t(6 downto 0) := BusA(7 downto 1); - Q_t(7) := BusA(0); - F_Out(Flag_C) <= BusA(0); - when "011" => -- RR - Q_t(6 downto 0) := BusA(7 downto 1); - Q_t(7) := F_In(Flag_C); - F_Out(Flag_C) <= BusA(0); - when "100" => -- SLA - Q_t(7 downto 1) := BusA(6 downto 0); - Q_t(0) := '0'; - F_Out(Flag_C) <= BusA(7); - when "110" => -- SLL (Undocumented) / SWAP - if Mode = 3 then - Q_t(7 downto 4) := BusA(3 downto 0); - Q_t(3 downto 0) := BusA(7 downto 4); - F_Out(Flag_C) <= '0'; - else - Q_t(7 downto 1) := BusA(6 downto 0); - Q_t(0) := '1'; - F_Out(Flag_C) <= BusA(7); - end if; - when "101" => -- SRA - Q_t(6 downto 0) := BusA(7 downto 1); - Q_t(7) := BusA(7); - F_Out(Flag_C) <= BusA(0); - when others => -- SRL - Q_t(6 downto 0) := BusA(7 downto 1); - Q_t(7) := '0'; - F_Out(Flag_C) <= BusA(0); - end case; - F_Out(Flag_H) <= '0'; - F_Out(Flag_N) <= '0'; - F_Out(Flag_X) <= Q_t(3); - F_Out(Flag_Y) <= Q_t(5); - F_Out(Flag_S) <= Q_t(7); - if Q_t(7 downto 0) = "00000000" then - F_Out(Flag_Z) <= '1'; - else - F_Out(Flag_Z) <= '0'; - end if; - F_Out(Flag_P) <= not (Q_t(0) xor Q_t(1) xor Q_t(2) xor Q_t(3) xor - Q_t(4) xor Q_t(5) xor Q_t(6) xor Q_t(7)); - if ISet = "00" then - F_Out(Flag_P) <= F_In(Flag_P); - F_Out(Flag_S) <= F_In(Flag_S); - F_Out(Flag_Z) <= F_In(Flag_Z); - end if; - when others => - null; - end case; - Q <= Q_t; - end process; -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_MCode.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_MCode.vhd deleted file mode 100644 index ee217402..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_MCode.vhd +++ /dev/null @@ -1,2026 +0,0 @@ --- **** --- T80(b) core. In an effort to merge and maintain bug fixes .... --- --- --- Ver 303 add undocumented DDCB and FDCB opcodes by TobiFlex 20.04.2010 --- Ver 302 fixed IO cycle timing, tested thanks to Alessandro. --- Ver 300 started tidyup --- MikeJ March 2005 --- Latest version from www.fpgaarcade.com (original www.opencores.org) --- --- **** --- --- Z80 compatible microprocessor core --- --- Version : 0242 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- --- 0208 : First complete release --- --- 0211 : Fixed IM 1 --- --- 0214 : Fixed mostly flags, only the block instructions now fail the zex regression test --- --- 0235 : Added IM 2 fix by Mike Johnson --- --- 0238 : Added NoRead signal --- --- 0238b: Fixed instruction timing for POP and DJNZ --- --- 0240 : Added (IX/IY+d) states, removed op-codes from mode 2 and added all remaining mode 3 op-codes - --- 0240mj1 fix for HL inc/dec for INI, IND, INIR, INDR, OUTI, OUTD, OTIR, OTDR --- --- 0242 : Fixed I/O instruction timing, cleanup --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use work.T80_Pack.all; - -entity T80_MCode is - generic( - Mode : integer := 0; - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - IR : in std_logic_vector(7 downto 0); - ISet : in std_logic_vector(1 downto 0); - MCycle : in std_logic_vector(2 downto 0); - F : in std_logic_vector(7 downto 0); - NMICycle : in std_logic; - IntCycle : in std_logic; - XY_State : in std_logic_vector(1 downto 0); - MCycles : out std_logic_vector(2 downto 0); - TStates : out std_logic_vector(2 downto 0); - Prefix : out std_logic_vector(1 downto 0); -- None,CB,ED,DD/FD - Inc_PC : out std_logic; - Inc_WZ : out std_logic; - IncDec_16 : out std_logic_vector(3 downto 0); -- BC,DE,HL,SP 0 is inc - Read_To_Reg : out std_logic; - Read_To_Acc : out std_logic; - Set_BusA_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI/DB,A,SP(L),SP(M),0,F - Set_BusB_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI,A,SP(L),SP(M),1,F,PC(L),PC(M),0 - ALU_Op : out std_logic_vector(3 downto 0); - -- ADD, ADC, SUB, SBC, AND, XOR, OR, CP, ROT, BIT, SET, RES, DAA, RLD, RRD, None - Save_ALU : out std_logic; - PreserveC : out std_logic; - Arith16 : out std_logic; - Set_Addr_To : out std_logic_vector(2 downto 0); -- aNone,aXY,aIOA,aSP,aBC,aDE,aZI - IORQ : out std_logic; - Jump : out std_logic; - JumpE : out std_logic; - JumpXY : out std_logic; - Call : out std_logic; - RstP : out std_logic; - LDZ : out std_logic; - LDW : out std_logic; - LDSPHL : out std_logic; - Special_LD : out std_logic_vector(2 downto 0); -- A,I;A,R;I,A;R,A;None - ExchangeDH : out std_logic; - ExchangeRp : out std_logic; - ExchangeAF : out std_logic; - ExchangeRS : out std_logic; - I_DJNZ : out std_logic; - I_CPL : out std_logic; - I_CCF : out std_logic; - I_SCF : out std_logic; - I_RETN : out std_logic; - I_BT : out std_logic; - I_BC : out std_logic; - I_BTR : out std_logic; - I_RLD : out std_logic; - I_RRD : out std_logic; - I_INRC : out std_logic; - SetDI : out std_logic; - SetEI : out std_logic; - IMode : out std_logic_vector(1 downto 0); - Halt : out std_logic; - NoRead : out std_logic; - Write : out std_logic; - XYbit_undoc : out std_logic - ); -end T80_MCode; - -architecture rtl of T80_MCode is - - constant aNone : std_logic_vector(2 downto 0) := "111"; - constant aBC : std_logic_vector(2 downto 0) := "000"; - constant aDE : std_logic_vector(2 downto 0) := "001"; - constant aXY : std_logic_vector(2 downto 0) := "010"; - constant aIOA : std_logic_vector(2 downto 0) := "100"; - constant aSP : std_logic_vector(2 downto 0) := "101"; - constant aZI : std_logic_vector(2 downto 0) := "110"; - - function is_cc_true( - F : std_logic_vector(7 downto 0); - cc : bit_vector(2 downto 0) - ) return boolean is - begin - if Mode = 3 then - case cc is - when "000" => return F(7) = '0'; -- NZ - when "001" => return F(7) = '1'; -- Z - when "010" => return F(4) = '0'; -- NC - when "011" => return F(4) = '1'; -- C - when "100" => return false; - when "101" => return false; - when "110" => return false; - when "111" => return false; - end case; - else - case cc is - when "000" => return F(6) = '0'; -- NZ - when "001" => return F(6) = '1'; -- Z - when "010" => return F(0) = '0'; -- NC - when "011" => return F(0) = '1'; -- C - when "100" => return F(2) = '0'; -- PO - when "101" => return F(2) = '1'; -- PE - when "110" => return F(7) = '0'; -- P - when "111" => return F(7) = '1'; -- M - end case; - end if; - end; - -begin - - process (IR, ISet, MCycle, F, NMICycle, IntCycle, XY_State) - variable DDD : std_logic_vector(2 downto 0); - variable SSS : std_logic_vector(2 downto 0); - variable DPair : std_logic_vector(1 downto 0); - variable IRB : bit_vector(7 downto 0); - begin - DDD := IR(5 downto 3); - SSS := IR(2 downto 0); - DPair := IR(5 downto 4); - IRB := to_bitvector(IR); - - MCycles <= "001"; - if MCycle = "001" then - TStates <= "100"; - else - TStates <= "011"; - end if; - Prefix <= "00"; - Inc_PC <= '0'; - Inc_WZ <= '0'; - IncDec_16 <= "0000"; - Read_To_Acc <= '0'; - Read_To_Reg <= '0'; - Set_BusB_To <= "0000"; - Set_BusA_To <= "0000"; - ALU_Op <= "0" & IR(5 downto 3); - Save_ALU <= '0'; - PreserveC <= '0'; - Arith16 <= '0'; - IORQ <= '0'; - Set_Addr_To <= aNone; - Jump <= '0'; - JumpE <= '0'; - JumpXY <= '0'; - Call <= '0'; - RstP <= '0'; - LDZ <= '0'; - LDW <= '0'; - LDSPHL <= '0'; - Special_LD <= "000"; - ExchangeDH <= '0'; - ExchangeRp <= '0'; - ExchangeAF <= '0'; - ExchangeRS <= '0'; - I_DJNZ <= '0'; - I_CPL <= '0'; - I_CCF <= '0'; - I_SCF <= '0'; - I_RETN <= '0'; - I_BT <= '0'; - I_BC <= '0'; - I_BTR <= '0'; - I_RLD <= '0'; - I_RRD <= '0'; - I_INRC <= '0'; - SetDI <= '0'; - SetEI <= '0'; - IMode <= "11"; - Halt <= '0'; - NoRead <= '0'; - Write <= '0'; - XYbit_undoc <= '0'; - - case ISet is - when "00" => - ------------------------------------------------------------------------------- --- --- Unprefixed instructions --- ------------------------------------------------------------------------------- - - case IRB is --- 8 BIT LOAD GROUP - when "01000000"|"01000001"|"01000010"|"01000011"|"01000100"|"01000101"|"01000111" - |"01001000"|"01001001"|"01001010"|"01001011"|"01001100"|"01001101"|"01001111" - |"01010000"|"01010001"|"01010010"|"01010011"|"01010100"|"01010101"|"01010111" - |"01011000"|"01011001"|"01011010"|"01011011"|"01011100"|"01011101"|"01011111" - |"01100000"|"01100001"|"01100010"|"01100011"|"01100100"|"01100101"|"01100111" - |"01101000"|"01101001"|"01101010"|"01101011"|"01101100"|"01101101"|"01101111" - |"01111000"|"01111001"|"01111010"|"01111011"|"01111100"|"01111101"|"01111111" => - -- LD r,r' - Set_BusB_To(2 downto 0) <= SSS; - ExchangeRp <= '1'; - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - when "00000110"|"00001110"|"00010110"|"00011110"|"00100110"|"00101110"|"00111110" => - -- LD r,n - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - when others => null; - end case; - when "01000110"|"01001110"|"01010110"|"01011110"|"01100110"|"01101110"|"01111110" => - -- LD r,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - when others => null; - end case; - when "01110000"|"01110001"|"01110010"|"01110011"|"01110100"|"01110101"|"01110111" => - -- LD (HL),r - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusB_To(3) <= '0'; - when 2 => - Write <= '1'; - when others => null; - end case; - when "00110110" => - -- LD (HL),n - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aXY; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusB_To(3) <= '0'; - when 3 => - Write <= '1'; - when others => null; - end case; - when "00001010" => - -- LD A,(BC) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - when 2 => - Read_To_Acc <= '1'; - when others => null; - end case; - when "00011010" => - -- LD A,(DE) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aDE; - when 2 => - Read_To_Acc <= '1'; - when others => null; - end case; - when "00111010" => - if Mode = 3 then - -- LDD A,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - Read_To_Acc <= '1'; - IncDec_16 <= "1110"; - when others => null; - end case; - else - -- LD A,(nn) - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - when 4 => - Read_To_Acc <= '1'; - when others => null; - end case; - end if; - when "00000010" => - -- LD (BC),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - when others => null; - end case; - when "00010010" => - -- LD (DE),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aDE; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - when others => null; - end case; - when "00110010" => - if Mode = 3 then - -- LDD (HL),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - IncDec_16 <= "1110"; - when others => null; - end case; - else - -- LD (nn),A - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - Set_BusB_To <= "0111"; - when 4 => - Write <= '1'; - when others => null; - end case; - end if; - --- 16 BIT LOAD GROUP - when "00000001"|"00010001"|"00100001"|"00110001" => - -- LD dd,nn - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Read_To_Reg <= '1'; - if DPAIR = "11" then - Set_BusA_To(3 downto 0) <= "1000"; - else - Set_BusA_To(2 downto 1) <= DPAIR; - Set_BusA_To(0) <= '1'; - end if; - when 3 => - Inc_PC <= '1'; - Read_To_Reg <= '1'; - if DPAIR = "11" then - Set_BusA_To(3 downto 0) <= "1001"; - else - Set_BusA_To(2 downto 1) <= DPAIR; - Set_BusA_To(0) <= '0'; - end if; - when others => null; - end case; - when "00101010" => - if Mode = 3 then - -- LDI A,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - Read_To_Acc <= '1'; - IncDec_16 <= "0110"; - when others => null; - end case; - else - -- LD HL,(nn) - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - when 4 => - Set_BusA_To(2 downto 0) <= "101"; -- L - Read_To_Reg <= '1'; - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - when 5 => - Set_BusA_To(2 downto 0) <= "100"; -- H - Read_To_Reg <= '1'; - when others => null; - end case; - end if; - when "00100010" => - if Mode = 3 then - -- LDI (HL),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - IncDec_16 <= "0110"; - when others => null; - end case; - else - -- LD (nn),HL - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - Set_BusB_To <= "0101"; -- L - when 4 => - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - Write <= '1'; - Set_BusB_To <= "0100"; -- H - when 5 => - Write <= '1'; - when others => null; - end case; - end if; - when "11111001" => - -- LD SP,HL - TStates <= "110"; - LDSPHL <= '1'; - when "11000101"|"11010101"|"11100101"|"11110101" => - -- PUSH qq - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - IncDec_16 <= "1111"; - Set_Addr_TO <= aSP; - if DPAIR = "11" then - Set_BusB_To <= "0111"; - else - Set_BusB_To(2 downto 1) <= DPAIR; - Set_BusB_To(0) <= '0'; - Set_BusB_To(3) <= '0'; - end if; - when 2 => - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - if DPAIR = "11" then - Set_BusB_To <= "1011"; - else - Set_BusB_To(2 downto 1) <= DPAIR; - Set_BusB_To(0) <= '1'; - Set_BusB_To(3) <= '0'; - end if; - Write <= '1'; - when 3 => - Write <= '1'; - when others => null; - end case; - when "11000001"|"11010001"|"11100001"|"11110001" => - -- POP qq - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aSP; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - Read_To_Reg <= '1'; - if DPAIR = "11" then - Set_BusA_To(3 downto 0) <= "1011"; - else - Set_BusA_To(2 downto 1) <= DPAIR; - Set_BusA_To(0) <= '1'; - end if; - when 3 => - IncDec_16 <= "0111"; - Read_To_Reg <= '1'; - if DPAIR = "11" then - Set_BusA_To(3 downto 0) <= "0111"; - else - Set_BusA_To(2 downto 1) <= DPAIR; - Set_BusA_To(0) <= '0'; - end if; - when others => null; - end case; - --- EXCHANGE, BLOCK TRANSFER AND SEARCH GROUP - when "11101011" => - if Mode /= 3 then - -- EX DE,HL - ExchangeDH <= '1'; - end if; - when "00001000" => - if Mode = 3 then - -- LD (nn),SP - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - Set_BusB_To <= "1000"; - when 4 => - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - Write <= '1'; - Set_BusB_To <= "1001"; - when 5 => - Write <= '1'; - when others => null; - end case; - elsif Mode < 2 then - -- EX AF,AF' - ExchangeAF <= '1'; - end if; - when "11011001" => - if Mode = 3 then - -- RETI - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_TO <= aSP; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - LDZ <= '1'; - when 3 => - Jump <= '1'; - IncDec_16 <= "0111"; - I_RETN <= '1'; - SetEI <= '1'; - when others => null; - end case; - elsif Mode < 2 then - -- EXX - ExchangeRS <= '1'; - end if; - when "11100011" => - if Mode /= 3 then - -- EX (SP),HL - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aSP; - when 2 => - Read_To_Reg <= '1'; - Set_BusA_To <= "0101"; - Set_BusB_To <= "0101"; - Set_Addr_To <= aSP; - when 3 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - TStates <= "100"; - Write <= '1'; - when 4 => - Read_To_Reg <= '1'; - Set_BusA_To <= "0100"; - Set_BusB_To <= "0100"; - Set_Addr_To <= aSP; - when 5 => - IncDec_16 <= "1111"; - TStates <= "101"; - Write <= '1'; - when others => null; - end case; - end if; - --- 8 BIT ARITHMETIC AND LOGICAL GROUP - when "10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000111" - |"10001000"|"10001001"|"10001010"|"10001011"|"10001100"|"10001101"|"10001111" - |"10010000"|"10010001"|"10010010"|"10010011"|"10010100"|"10010101"|"10010111" - |"10011000"|"10011001"|"10011010"|"10011011"|"10011100"|"10011101"|"10011111" - |"10100000"|"10100001"|"10100010"|"10100011"|"10100100"|"10100101"|"10100111" - |"10101000"|"10101001"|"10101010"|"10101011"|"10101100"|"10101101"|"10101111" - |"10110000"|"10110001"|"10110010"|"10110011"|"10110100"|"10110101"|"10110111" - |"10111000"|"10111001"|"10111010"|"10111011"|"10111100"|"10111101"|"10111111" => - -- ADD A,r - -- ADC A,r - -- SUB A,r - -- SBC A,r - -- AND A,r - -- OR A,r - -- XOR A,r - -- CP A,r - Set_BusB_To(2 downto 0) <= SSS; - Set_BusA_To(2 downto 0) <= "111"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - when "10000110"|"10001110"|"10010110"|"10011110"|"10100110"|"10101110"|"10110110"|"10111110" => - -- ADD A,(HL) - -- ADC A,(HL) - -- SUB A,(HL) - -- SBC A,(HL) - -- AND A,(HL) - -- OR A,(HL) - -- XOR A,(HL) - -- CP A,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusA_To(2 downto 0) <= "111"; - when others => null; - end case; - when "11000110"|"11001110"|"11010110"|"11011110"|"11100110"|"11101110"|"11110110"|"11111110" => - -- ADD A,n - -- ADC A,n - -- SUB A,n - -- SBC A,n - -- AND A,n - -- OR A,n - -- XOR A,n - -- CP A,n - MCycles <= "010"; - if MCycle = "010" then - Inc_PC <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusA_To(2 downto 0) <= "111"; - end if; - when "00000100"|"00001100"|"00010100"|"00011100"|"00100100"|"00101100"|"00111100" => - -- INC r - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - PreserveC <= '1'; - ALU_Op <= "0000"; - when "00110100" => - -- INC (HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - TStates <= "100"; - Set_Addr_To <= aXY; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - PreserveC <= '1'; - ALU_Op <= "0000"; - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= DDD; - when 3 => - Write <= '1'; - when others => null; - end case; - when "00000101"|"00001101"|"00010101"|"00011101"|"00100101"|"00101101"|"00111101" => - -- DEC r - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= DDD; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - PreserveC <= '1'; - ALU_Op <= "0010"; - when "00110101" => - -- DEC (HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - when 2 => - TStates <= "100"; - Set_Addr_To <= aXY; - ALU_Op <= "0010"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - PreserveC <= '1'; - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= DDD; - when 3 => - Write <= '1'; - when others => null; - end case; - --- GENERAL PURPOSE ARITHMETIC AND CPU CONTROL GROUPS - when "00100111" => - -- DAA - Set_BusA_To(2 downto 0) <= "111"; - Read_To_Reg <= '1'; - ALU_Op <= "1100"; - Save_ALU <= '1'; - when "00101111" => - -- CPL - I_CPL <= '1'; - when "00111111" => - -- CCF - I_CCF <= '1'; - when "00110111" => - -- SCF - I_SCF <= '1'; - when "00000000" => - if NMICycle = '1' then - -- NMI - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1101"; - when 2 => - TStates <= "100"; - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 3 => - TStates <= "100"; - Write <= '1'; - when others => null; - end case; - elsif IntCycle = '1' then - -- INT (IM 2) - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 1 => - LDZ <= '1'; - TStates <= "101"; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1101"; - when 2 => - TStates <= "100"; - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 3 => - TStates <= "100"; - Write <= '1'; - when 4 => - Inc_PC <= '1'; - LDZ <= '1'; - when 5 => - Jump <= '1'; - when others => null; - end case; - else - -- NOP - end if; - when "01110110" => - -- HALT - Halt <= '1'; - when "11110011" => - -- DI - SetDI <= '1'; - when "11111011" => - -- EI - SetEI <= '1'; - --- 16 BIT ARITHMETIC GROUP - when "00001001"|"00011001"|"00101001"|"00111001" => - -- ADD HL,ss - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - NoRead <= '1'; - ALU_Op <= "0000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To(2 downto 0) <= "101"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '1'; - when others => - Set_BusB_To <= "1000"; - end case; - TStates <= "100"; - Arith16 <= '1'; - when 3 => - NoRead <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0001"; - Set_BusA_To(2 downto 0) <= "100"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - when others => - Set_BusB_To <= "1001"; - end case; - Arith16 <= '1'; - when others => - end case; - when "00000011"|"00010011"|"00100011"|"00110011" => - -- INC ss - TStates <= "110"; - IncDec_16(3 downto 2) <= "01"; - IncDec_16(1 downto 0) <= DPair; - when "00001011"|"00011011"|"00101011"|"00111011" => - -- DEC ss - TStates <= "110"; - IncDec_16(3 downto 2) <= "11"; - IncDec_16(1 downto 0) <= DPair; - --- ROTATE AND SHIFT GROUP - when "00000111" - -- RLCA - |"00010111" - -- RLA - |"00001111" - -- RRCA - |"00011111" => - -- RRA - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "1000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - --- JUMP GROUP - when "11000011" => - -- JP nn - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Inc_PC <= '1'; - Jump <= '1'; - when others => null; - end case; - when "11000010"|"11001010"|"11010010"|"11011010"|"11100010"|"11101010"|"11110010"|"11111010" => - if IR(5) = '1' and Mode = 3 then - case IRB(4 downto 3) is - when "00" => - -- LD ($FF00+C),A - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - Set_BusB_To <= "0111"; - when 2 => - Write <= '1'; - IORQ <= '1'; - when others => - end case; - when "01" => - -- LD (nn),A - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - Set_BusB_To <= "0111"; - when 4 => - Write <= '1'; - when others => null; - end case; - when "10" => - -- LD A,($FF00+C) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - when 2 => - Read_To_Acc <= '1'; - IORQ <= '1'; - when others => - end case; - when "11" => - -- LD A,(nn) - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - when 4 => - Read_To_Acc <= '1'; - when others => null; - end case; - end case; - else - -- JP cc,nn - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Inc_PC <= '1'; - if is_cc_true(F, to_bitvector(IR(5 downto 3))) then - Jump <= '1'; - end if; - when others => null; - end case; - end if; - when "00011000" => - if Mode /= 2 then - -- JR e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "00111000" => - if Mode /= 2 then - -- JR C,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - if F(Flag_C) = '0' then - MCycles <= "010"; - end if; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "00110000" => - if Mode /= 2 then - -- JR NC,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - if F(Flag_C) = '1' then - MCycles <= "010"; - end if; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "00101000" => - if Mode /= 2 then - -- JR Z,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - if F(Flag_Z) = '0' then - MCycles <= "010"; - end if; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "00100000" => - if Mode /= 2 then - -- JR NZ,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - if F(Flag_Z) = '1' then - MCycles <= "010"; - end if; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - when "11101001" => - -- JP (HL) - JumpXY <= '1'; - when "00010000" => - if Mode = 3 then - I_DJNZ <= '1'; - elsif Mode < 2 then - -- DJNZ,e - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - I_DJNZ <= '1'; - Set_BusB_To <= "1010"; - Set_BusA_To(2 downto 0) <= "000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0010"; - when 2 => - I_DJNZ <= '1'; - Inc_PC <= '1'; - when 3 => - NoRead <= '1'; - JumpE <= '1'; - TStates <= "101"; - when others => null; - end case; - end if; - --- CALL AND RETURN GROUP - when "11001101" => - -- CALL nn - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - IncDec_16 <= "1111"; - Inc_PC <= '1'; - TStates <= "100"; - Set_Addr_To <= aSP; - LDW <= '1'; - Set_BusB_To <= "1101"; - when 4 => - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 5 => - Write <= '1'; - Call <= '1'; - when others => null; - end case; - when "11000100"|"11001100"|"11010100"|"11011100"|"11100100"|"11101100"|"11110100"|"11111100" => - if IR(5) = '0' or Mode /= 3 then - -- CALL cc,nn - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Inc_PC <= '1'; - LDW <= '1'; - if is_cc_true(F, to_bitvector(IR(5 downto 3))) then - IncDec_16 <= "1111"; - Set_Addr_TO <= aSP; - TStates <= "100"; - Set_BusB_To <= "1101"; - else - MCycles <= "011"; - end if; - when 4 => - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 5 => - Write <= '1'; - Call <= '1'; - when others => null; - end case; - end if; - when "11001001" => - -- RET - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_TO <= aSP; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - LDZ <= '1'; - when 3 => - Jump <= '1'; - IncDec_16 <= "0111"; - when others => null; - end case; - when "11000000"|"11001000"|"11010000"|"11011000"|"11100000"|"11101000"|"11110000"|"11111000" => - if IR(5) = '1' and Mode = 3 then - case IRB(4 downto 3) is - when "00" => - -- LD ($FF00+nn),A - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aIOA; - Set_BusB_To <= "0111"; - when 3 => - Write <= '1'; - when others => null; - end case; - when "01" => - -- ADD SP,n - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - ALU_Op <= "0000"; - Inc_PC <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To <= "1000"; - Set_BusB_To <= "0110"; - when 3 => - NoRead <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0001"; - Set_BusA_To <= "1001"; - Set_BusB_To <= "1110"; -- Incorrect unsigned !!!!!!!!!!!!!!!!!!!!! - when others => - end case; - when "10" => - -- LD A,($FF00+nn) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aIOA; - when 3 => - Read_To_Acc <= '1'; - when others => null; - end case; - when "11" => - -- LD HL,SP+n -- Not correct !!!!!!!!!!!!!!!!!!! - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - when 4 => - Set_BusA_To(2 downto 0) <= "101"; -- L - Read_To_Reg <= '1'; - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - when 5 => - Set_BusA_To(2 downto 0) <= "100"; -- H - Read_To_Reg <= '1'; - when others => null; - end case; - end case; - else - -- RET cc - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - if is_cc_true(F, to_bitvector(IR(5 downto 3))) then - Set_Addr_TO <= aSP; - else - MCycles <= "001"; - end if; - TStates <= "101"; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - LDZ <= '1'; - when 3 => - Jump <= '1'; - IncDec_16 <= "0111"; - when others => null; - end case; - end if; - when "11000111"|"11001111"|"11010111"|"11011111"|"11100111"|"11101111"|"11110111"|"11111111" => - -- RST p - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1101"; - when 2 => - Write <= '1'; - IncDec_16 <= "1111"; - Set_Addr_To <= aSP; - Set_BusB_To <= "1100"; - when 3 => - Write <= '1'; - RstP <= '1'; - when others => null; - end case; - --- INPUT AND OUTPUT GROUP - when "11011011" => - if Mode /= 3 then - -- IN A,(n) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aIOA; - when 3 => - Read_To_Acc <= '1'; - IORQ <= '1'; - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - when others => null; - end case; - end if; - when "11010011" => - if Mode /= 3 then - -- OUT (n),A - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - Set_Addr_To <= aIOA; - Set_BusB_To <= "0111"; - when 3 => - Write <= '1'; - IORQ <= '1'; - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - when others => null; - end case; - end if; - ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- --- MULTIBYTE INSTRUCTIONS ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- - - when "11001011" => - if Mode /= 2 then - Prefix <= "01"; - end if; - - when "11101101" => - if Mode < 2 then - Prefix <= "10"; - end if; - - when "11011101"|"11111101" => - if Mode < 2 then - Prefix <= "11"; - end if; - - end case; - - when "01" => - ------------------------------------------------------------------------------- --- --- CB prefixed instructions --- ------------------------------------------------------------------------------- - - Set_BusA_To(2 downto 0) <= IR(2 downto 0); - Set_BusB_To(2 downto 0) <= IR(2 downto 0); - - case IRB is - when "00000000"|"00000001"|"00000010"|"00000011"|"00000100"|"00000101"|"00000111" - |"00010000"|"00010001"|"00010010"|"00010011"|"00010100"|"00010101"|"00010111" - |"00001000"|"00001001"|"00001010"|"00001011"|"00001100"|"00001101"|"00001111" - |"00011000"|"00011001"|"00011010"|"00011011"|"00011100"|"00011101"|"00011111" - |"00100000"|"00100001"|"00100010"|"00100011"|"00100100"|"00100101"|"00100111" - |"00101000"|"00101001"|"00101010"|"00101011"|"00101100"|"00101101"|"00101111" - |"00110000"|"00110001"|"00110010"|"00110011"|"00110100"|"00110101"|"00110111" - |"00111000"|"00111001"|"00111010"|"00111011"|"00111100"|"00111101"|"00111111" => - -- RLC r - -- RL r - -- RRC r - -- RR r - -- SLA r - -- SRA r - -- SRL r - -- SLL r (Undocumented) / SWAP r - if XY_State="00" then - if MCycle = "001" then - ALU_Op <= "1000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - end if; - else - -- R/S (IX+d),Reg, undocumented - MCycles <= "011"; - XYbit_undoc <= '1'; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - end if; - when "00000110"|"00010110"|"00001110"|"00011110"|"00101110"|"00111110"|"00100110"|"00110110" => - -- RLC (HL) - -- RL (HL) - -- RRC (HL) - -- RR (HL) - -- SRA (HL) - -- SRL (HL) - -- SLA (HL) - -- SLL (HL) (Undocumented) / SWAP (HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 | 7 => - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => - end case; - when "01000000"|"01000001"|"01000010"|"01000011"|"01000100"|"01000101"|"01000111" - |"01001000"|"01001001"|"01001010"|"01001011"|"01001100"|"01001101"|"01001111" - |"01010000"|"01010001"|"01010010"|"01010011"|"01010100"|"01010101"|"01010111" - |"01011000"|"01011001"|"01011010"|"01011011"|"01011100"|"01011101"|"01011111" - |"01100000"|"01100001"|"01100010"|"01100011"|"01100100"|"01100101"|"01100111" - |"01101000"|"01101001"|"01101010"|"01101011"|"01101100"|"01101101"|"01101111" - |"01110000"|"01110001"|"01110010"|"01110011"|"01110100"|"01110101"|"01110111" - |"01111000"|"01111001"|"01111010"|"01111011"|"01111100"|"01111101"|"01111111" => - -- BIT b,r - if XY_State="00" then - if MCycle = "001" then - Set_BusB_To(2 downto 0) <= IR(2 downto 0); - ALU_Op <= "1001"; - end if; - else - -- BIT b,(IX+d), undocumented - MCycles <= "010"; - XYbit_undoc <= '1'; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1001"; - TStates <= "100"; - when others => null; - end case; - end if; - when "01000110"|"01001110"|"01010110"|"01011110"|"01100110"|"01101110"|"01110110"|"01111110" => - -- BIT b,(HL) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1001"; - TStates <= "100"; - when others => null; - end case; - when "11000000"|"11000001"|"11000010"|"11000011"|"11000100"|"11000101"|"11000111" - |"11001000"|"11001001"|"11001010"|"11001011"|"11001100"|"11001101"|"11001111" - |"11010000"|"11010001"|"11010010"|"11010011"|"11010100"|"11010101"|"11010111" - |"11011000"|"11011001"|"11011010"|"11011011"|"11011100"|"11011101"|"11011111" - |"11100000"|"11100001"|"11100010"|"11100011"|"11100100"|"11100101"|"11100111" - |"11101000"|"11101001"|"11101010"|"11101011"|"11101100"|"11101101"|"11101111" - |"11110000"|"11110001"|"11110010"|"11110011"|"11110100"|"11110101"|"11110111" - |"11111000"|"11111001"|"11111010"|"11111011"|"11111100"|"11111101"|"11111111" => - -- SET b,r - if XY_State="00" then - if MCycle = "001" then - ALU_Op <= "1010"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - end if; - else - -- SET b,(IX+d),Reg, undocumented - MCycles <= "011"; - XYbit_undoc <= '1'; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1010"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - end if; - when "11000110"|"11001110"|"11010110"|"11011110"|"11100110"|"11101110"|"11110110"|"11111110" => - -- SET b,(HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1010"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - when "10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000111" - |"10001000"|"10001001"|"10001010"|"10001011"|"10001100"|"10001101"|"10001111" - |"10010000"|"10010001"|"10010010"|"10010011"|"10010100"|"10010101"|"10010111" - |"10011000"|"10011001"|"10011010"|"10011011"|"10011100"|"10011101"|"10011111" - |"10100000"|"10100001"|"10100010"|"10100011"|"10100100"|"10100101"|"10100111" - |"10101000"|"10101001"|"10101010"|"10101011"|"10101100"|"10101101"|"10101111" - |"10110000"|"10110001"|"10110010"|"10110011"|"10110100"|"10110101"|"10110111" - |"10111000"|"10111001"|"10111010"|"10111011"|"10111100"|"10111101"|"10111111" => - -- RES b,r - if XY_State="00" then - if MCycle = "001" then - ALU_Op <= "1011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - end if; - else - -- RES b,(IX+d),Reg, undocumented - MCycles <= "011"; - XYbit_undoc <= '1'; - case to_integer(unsigned(MCycle)) is - when 1 | 7=> - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - end if; - - when "10000110"|"10001110"|"10010110"|"10011110"|"10100110"|"10101110"|"10110110"|"10111110" => - -- RES b,(HL) - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 | 7 => - Set_Addr_To <= aXY; - when 2 => - ALU_Op <= "1011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_Addr_To <= aXY; - TStates <= "100"; - when 3 => - Write <= '1'; - when others => null; - end case; - end case; - - when others => - ------------------------------------------------------------------------------- --- --- ED prefixed instructions --- ------------------------------------------------------------------------------- - - case IRB is - when "00000000"|"00000001"|"00000010"|"00000011"|"00000100"|"00000101"|"00000110"|"00000111" - |"00001000"|"00001001"|"00001010"|"00001011"|"00001100"|"00001101"|"00001110"|"00001111" - |"00010000"|"00010001"|"00010010"|"00010011"|"00010100"|"00010101"|"00010110"|"00010111" - |"00011000"|"00011001"|"00011010"|"00011011"|"00011100"|"00011101"|"00011110"|"00011111" - |"00100000"|"00100001"|"00100010"|"00100011"|"00100100"|"00100101"|"00100110"|"00100111" - |"00101000"|"00101001"|"00101010"|"00101011"|"00101100"|"00101101"|"00101110"|"00101111" - |"00110000"|"00110001"|"00110010"|"00110011"|"00110100"|"00110101"|"00110110"|"00110111" - |"00111000"|"00111001"|"00111010"|"00111011"|"00111100"|"00111101"|"00111110"|"00111111" - - - |"10000000"|"10000001"|"10000010"|"10000011"|"10000100"|"10000101"|"10000110"|"10000111" - |"10001000"|"10001001"|"10001010"|"10001011"|"10001100"|"10001101"|"10001110"|"10001111" - |"10010000"|"10010001"|"10010010"|"10010011"|"10010100"|"10010101"|"10010110"|"10010111" - |"10011000"|"10011001"|"10011010"|"10011011"|"10011100"|"10011101"|"10011110"|"10011111" - | "10100100"|"10100101"|"10100110"|"10100111" - | "10101100"|"10101101"|"10101110"|"10101111" - | "10110100"|"10110101"|"10110110"|"10110111" - | "10111100"|"10111101"|"10111110"|"10111111" - |"11000000"|"11000001"|"11000010"|"11000011"|"11000100"|"11000101"|"11000110"|"11000111" - |"11001000"|"11001001"|"11001010"|"11001011"|"11001100"|"11001101"|"11001110"|"11001111" - |"11010000"|"11010001"|"11010010"|"11010011"|"11010100"|"11010101"|"11010110"|"11010111" - |"11011000"|"11011001"|"11011010"|"11011011"|"11011100"|"11011101"|"11011110"|"11011111" - |"11100000"|"11100001"|"11100010"|"11100011"|"11100100"|"11100101"|"11100110"|"11100111" - |"11101000"|"11101001"|"11101010"|"11101011"|"11101100"|"11101101"|"11101110"|"11101111" - |"11110000"|"11110001"|"11110010"|"11110011"|"11110100"|"11110101"|"11110110"|"11110111" - |"11111000"|"11111001"|"11111010"|"11111011"|"11111100"|"11111101"|"11111110"|"11111111" => - null; -- NOP, undocumented - when "01111110"|"01111111" => - -- NOP, undocumented - null; --- 8 BIT LOAD GROUP - when "01010111" => - -- LD A,I - Special_LD <= "100"; - TStates <= "101"; - when "01011111" => - -- LD A,R - Special_LD <= "101"; - TStates <= "101"; - when "01000111" => - -- LD I,A - Special_LD <= "110"; - TStates <= "101"; - when "01001111" => - -- LD R,A - Special_LD <= "111"; - TStates <= "101"; --- 16 BIT LOAD GROUP - when "01001011"|"01011011"|"01101011"|"01111011" => - -- LD dd,(nn) - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - when 4 => - Read_To_Reg <= '1'; - if IR(5 downto 4) = "11" then - Set_BusA_To <= "1000"; - else - Set_BusA_To(2 downto 1) <= IR(5 downto 4); - Set_BusA_To(0) <= '1'; - end if; - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - when 5 => - Read_To_Reg <= '1'; - if IR(5 downto 4) = "11" then - Set_BusA_To <= "1001"; - else - Set_BusA_To(2 downto 1) <= IR(5 downto 4); - Set_BusA_To(0) <= '0'; - end if; - when others => null; - end case; - when "01000011"|"01010011"|"01100011"|"01110011" => - -- LD (nn),dd - MCycles <= "101"; - case to_integer(unsigned(MCycle)) is - when 2 => - Inc_PC <= '1'; - LDZ <= '1'; - when 3 => - Set_Addr_To <= aZI; - Inc_PC <= '1'; - LDW <= '1'; - if IR(5 downto 4) = "11" then - Set_BusB_To <= "1000"; - else - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '1'; - Set_BusB_To(3) <= '0'; - end if; - when 4 => - Inc_WZ <= '1'; - Set_Addr_To <= aZI; - Write <= '1'; - if IR(5 downto 4) = "11" then - Set_BusB_To <= "1001"; - else - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '0'; - Set_BusB_To(3) <= '0'; - end if; - when 5 => - Write <= '1'; - when others => null; - end case; - when "10100000" | "10101000" | "10110000" | "10111000" => - -- LDI, LDD, LDIR, LDDR - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - IncDec_16 <= "1100"; -- BC - when 2 => - Set_BusB_To <= "0110"; - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "0000"; - Set_Addr_To <= aDE; - if IR(3) = '0' then - IncDec_16 <= "0110"; -- IX - else - IncDec_16 <= "1110"; - end if; - when 3 => - I_BT <= '1'; - TStates <= "101"; - Write <= '1'; - if IR(3) = '0' then - IncDec_16 <= "0101"; -- DE - else - IncDec_16 <= "1101"; - end if; - when 4 => - NoRead <= '1'; - TStates <= "101"; - when others => null; - end case; - when "10100001" | "10101001" | "10110001" | "10111001" => - -- CPI, CPD, CPIR, CPDR - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aXY; - IncDec_16 <= "1100"; -- BC - when 2 => - Set_BusB_To <= "0110"; - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "0111"; - Save_ALU <= '1'; - PreserveC <= '1'; - if IR(3) = '0' then - IncDec_16 <= "0110"; - else - IncDec_16 <= "1110"; - end if; - when 3 => - NoRead <= '1'; - I_BC <= '1'; - TStates <= "101"; - when 4 => - NoRead <= '1'; - TStates <= "101"; - when others => null; - end case; - when "01000100"|"01001100"|"01010100"|"01011100"|"01100100"|"01101100"|"01110100"|"01111100" => - -- NEG - Alu_OP <= "0010"; - Set_BusB_To <= "0111"; - Set_BusA_To <= "1010"; - Read_To_Acc <= '1'; - Save_ALU <= '1'; - when "01000110"|"01001110"|"01100110"|"01101110" => - -- IM 0 - IMode <= "00"; - when "01010110"|"01110110" => - -- IM 1 - IMode <= "01"; - when "01011110"|"01110111" => - -- IM 2 - IMode <= "10"; --- 16 bit arithmetic - when "01001010"|"01011010"|"01101010"|"01111010" => - -- ADC HL,ss - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - NoRead <= '1'; - ALU_Op <= "0001"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To(2 downto 0) <= "101"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '1'; - when others => - Set_BusB_To <= "1000"; - end case; - TStates <= "100"; - when 3 => - NoRead <= '1'; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0001"; - Set_BusA_To(2 downto 0) <= "100"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '0'; - when others => - Set_BusB_To <= "1001"; - end case; - when others => - end case; - when "01000010"|"01010010"|"01100010"|"01110010" => - -- SBC HL,ss - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 2 => - NoRead <= '1'; - ALU_Op <= "0011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To(2 downto 0) <= "101"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - Set_BusB_To(0) <= '1'; - when others => - Set_BusB_To <= "1000"; - end case; - TStates <= "100"; - when 3 => - NoRead <= '1'; - ALU_Op <= "0011"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - Set_BusA_To(2 downto 0) <= "100"; - case to_integer(unsigned(IR(5 downto 4))) is - when 0|1|2 => - Set_BusB_To(2 downto 1) <= IR(5 downto 4); - when others => - Set_BusB_To <= "1001"; - end case; - when others => - end case; - when "01101111" => - -- RLD - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - NoRead <= '1'; - Set_Addr_To <= aXY; - when 3 => - Read_To_Reg <= '1'; - Set_BusB_To(2 downto 0) <= "110"; - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "1101"; - TStates <= "100"; - Set_Addr_To <= aXY; - Save_ALU <= '1'; - when 4 => - I_RLD <= '1'; - Write <= '1'; - when others => - end case; - when "01100111" => - -- RRD - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 2 => - Set_Addr_To <= aXY; - when 3 => - Read_To_Reg <= '1'; - Set_BusB_To(2 downto 0) <= "110"; - Set_BusA_To(2 downto 0) <= "111"; - ALU_Op <= "1110"; - TStates <= "100"; - Set_Addr_To <= aXY; - Save_ALU <= '1'; - when 4 => - I_RRD <= '1'; - Write <= '1'; - when others => - end case; - when "01000101"|"01001101"|"01010101"|"01011101"|"01100101"|"01101101"|"01110101"|"01111101" => - -- RETI, RETN - MCycles <= "011"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_TO <= aSP; - when 2 => - IncDec_16 <= "0111"; - Set_Addr_To <= aSP; - LDZ <= '1'; - when 3 => - Jump <= '1'; - IncDec_16 <= "0111"; - I_RETN <= '1'; - when others => null; - end case; - when "01000000"|"01001000"|"01010000"|"01011000"|"01100000"|"01101000"|"01110000"|"01111000" => - -- IN r,(C) - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - when 2 => - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - IORQ <= '1'; - if IR(5 downto 3) /= "110" then - Read_To_Reg <= '1'; - Set_BusA_To(2 downto 0) <= IR(5 downto 3); - end if; - I_INRC <= '1'; - when others => - end case; - when "01000001"|"01001001"|"01010001"|"01011001"|"01100001"|"01101001"|"01110001"|"01111001" => - -- OUT (C),r - -- OUT (C),0 - MCycles <= "010"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - Set_BusB_To(2 downto 0) <= IR(5 downto 3); - if IR(5 downto 3) = "110" then - Set_BusB_To(3) <= '1'; - end if; - when 2 => - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - Write <= '1'; - IORQ <= '1'; - when others => - end case; - when "10100010" | "10101010" | "10110010" | "10111010" => - -- INI, IND, INIR, INDR - -- note B is decremented AFTER being put on the bus - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 1 => - Set_Addr_To <= aBC; - Set_BusB_To <= "1010"; - Set_BusA_To <= "0000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0010"; - when 2 => - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - IORQ <= '1'; - Set_BusB_To <= "0110"; - Set_Addr_To <= aXY; - when 3 => - if IR(3) = '0' then - --IncDec_16 <= "0010"; - IncDec_16 <= "0110"; - else - --IncDec_16 <= "1010"; - IncDec_16 <= "1110"; - end if; - TStates <= "100"; - Write <= '1'; - I_BTR <= '1'; - when 4 => - NoRead <= '1'; - TStates <= "101"; - when others => null; - end case; - when "10100011" | "10101011" | "10110011" | "10111011" => - -- OUTI, OUTD, OTIR, OTDR - -- note B is decremented BEFORE being put on the bus. - -- mikej fix for hl inc - MCycles <= "100"; - case to_integer(unsigned(MCycle)) is - when 1 => - TStates <= "101"; - Set_Addr_To <= aXY; - Set_BusB_To <= "1010"; - Set_BusA_To <= "0000"; - Read_To_Reg <= '1'; - Save_ALU <= '1'; - ALU_Op <= "0010"; - when 2 => - Set_BusB_To <= "0110"; - Set_Addr_To <= aBC; - when 3 => - if IR(3) = '0' then - IncDec_16 <= "0110"; -- mikej - else - IncDec_16 <= "1110"; -- mikej - end if; - TStates <= "100"; -- MIKEJ should be 4 for IO cycle - IORQ <= '1'; - Write <= '1'; - I_BTR <= '1'; - when 4 => - NoRead <= '1'; - TStates <= "101"; - when others => null; - end case; - end case; - - end case; - - if Mode = 1 then - if MCycle = "001" then --- TStates <= "100"; - else - TStates <= "011"; - end if; - end if; - - if Mode = 3 then - if MCycle = "001" then --- TStates <= "100"; - else - TStates <= "100"; - end if; - end if; - - if Mode < 2 then - if MCycle = "110" then - Inc_PC <= '1'; - if Mode = 1 then - Set_Addr_To <= aXY; - TStates <= "100"; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusB_To(3) <= '0'; - end if; - if IRB = "00110110" or IRB = "11001011" then - Set_Addr_To <= aNone; - end if; - end if; - if MCycle = "111" then - if Mode = 0 then - TStates <= "101"; - end if; - if ISet /= "01" then - Set_Addr_To <= aXY; - end if; - Set_BusB_To(2 downto 0) <= SSS; - Set_BusB_To(3) <= '0'; - if IRB = "00110110" or ISet = "01" then - -- LD (HL),n - Inc_PC <= '1'; - else - NoRead <= '1'; - end if; - end if; - end if; - - end process; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_Pack.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_Pack.vhd deleted file mode 100644 index 679730ab..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_Pack.vhd +++ /dev/null @@ -1,220 +0,0 @@ --- **** --- T80(b) core. In an effort to merge and maintain bug fixes .... --- --- --- Ver 303 add undocumented DDCB and FDCB opcodes by TobiFlex 20.04.2010 --- Ver 300 started tidyup --- MikeJ March 2005 --- Latest version from www.fpgaarcade.com (original www.opencores.org) --- --- **** --- --- Z80 compatible microprocessor core --- --- Version : 0242 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- - -library IEEE; -use IEEE.std_logic_1164.all; - -package T80_Pack is - - component T80 - generic( - Mode : integer := 0; -- 0 => Z80, 1 => Fast Z80, 2 => 8080, 3 => GB - IOWait : integer := 0; -- 1 => Single cycle I/O, 1 => Std I/O cycle - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - RESET_n : in std_logic; - CLK_n : in std_logic; - CEN : in std_logic; - WAIT_n : in std_logic; - INT_n : in std_logic; - NMI_n : in std_logic; - BUSRQ_n : in std_logic; - M1_n : out std_logic; - IORQ : out std_logic; - NoRead : out std_logic; - Write : out std_logic; - RFSH_n : out std_logic; - HALT_n : out std_logic; - BUSAK_n : out std_logic; - A : out std_logic_vector(15 downto 0); - DInst : in std_logic_vector(7 downto 0); - DI : in std_logic_vector(7 downto 0); - DO : out std_logic_vector(7 downto 0); - MC : out std_logic_vector(2 downto 0); - TS : out std_logic_vector(2 downto 0); - IntCycle_n : out std_logic; - IntE : out std_logic; - Stop : out std_logic - ); - end component; - - component T80_Reg - port( - Clk : in std_logic; - CEN : in std_logic; - WEH : in std_logic; - WEL : in std_logic; - AddrA : in std_logic_vector(2 downto 0); - AddrB : in std_logic_vector(2 downto 0); - AddrC : in std_logic_vector(2 downto 0); - DIH : in std_logic_vector(7 downto 0); - DIL : in std_logic_vector(7 downto 0); - DOAH : out std_logic_vector(7 downto 0); - DOAL : out std_logic_vector(7 downto 0); - DOBH : out std_logic_vector(7 downto 0); - DOBL : out std_logic_vector(7 downto 0); - DOCH : out std_logic_vector(7 downto 0); - DOCL : out std_logic_vector(7 downto 0) - ); - end component; - - component T80_MCode - generic( - Mode : integer := 0; - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - IR : in std_logic_vector(7 downto 0); - ISet : in std_logic_vector(1 downto 0); - MCycle : in std_logic_vector(2 downto 0); - F : in std_logic_vector(7 downto 0); - NMICycle : in std_logic; - IntCycle : in std_logic; - XY_State : in std_logic_vector(1 downto 0); - MCycles : out std_logic_vector(2 downto 0); - TStates : out std_logic_vector(2 downto 0); - Prefix : out std_logic_vector(1 downto 0); -- None,BC,ED,DD/FD - Inc_PC : out std_logic; - Inc_WZ : out std_logic; - IncDec_16 : out std_logic_vector(3 downto 0); -- BC,DE,HL,SP 0 is inc - Read_To_Reg : out std_logic; - Read_To_Acc : out std_logic; - Set_BusA_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI/DB,A,SP(L),SP(M),0,F - Set_BusB_To : out std_logic_vector(3 downto 0); -- B,C,D,E,H,L,DI,A,SP(L),SP(M),1,F,PC(L),PC(M),0 - ALU_Op : out std_logic_vector(3 downto 0); - -- ADD, ADC, SUB, SBC, AND, XOR, OR, CP, ROT, BIT, SET, RES, DAA, RLD, RRD, None - Save_ALU : out std_logic; - PreserveC : out std_logic; - Arith16 : out std_logic; - Set_Addr_To : out std_logic_vector(2 downto 0); -- aNone,aXY,aIOA,aSP,aBC,aDE,aZI - IORQ : out std_logic; - Jump : out std_logic; - JumpE : out std_logic; - JumpXY : out std_logic; - Call : out std_logic; - RstP : out std_logic; - LDZ : out std_logic; - LDW : out std_logic; - LDSPHL : out std_logic; - Special_LD : out std_logic_vector(2 downto 0); -- A,I;A,R;I,A;R,A;None - ExchangeDH : out std_logic; - ExchangeRp : out std_logic; - ExchangeAF : out std_logic; - ExchangeRS : out std_logic; - I_DJNZ : out std_logic; - I_CPL : out std_logic; - I_CCF : out std_logic; - I_SCF : out std_logic; - I_RETN : out std_logic; - I_BT : out std_logic; - I_BC : out std_logic; - I_BTR : out std_logic; - I_RLD : out std_logic; - I_RRD : out std_logic; - I_INRC : out std_logic; - SetDI : out std_logic; - SetEI : out std_logic; - IMode : out std_logic_vector(1 downto 0); - Halt : out std_logic; - NoRead : out std_logic; - Write : out std_logic; - XYbit_undoc : out std_logic - ); - end component; - - component T80_ALU - generic( - Mode : integer := 0; - Flag_C : integer := 0; - Flag_N : integer := 1; - Flag_P : integer := 2; - Flag_X : integer := 3; - Flag_H : integer := 4; - Flag_Y : integer := 5; - Flag_Z : integer := 6; - Flag_S : integer := 7 - ); - port( - Arith16 : in std_logic; - Z16 : in std_logic; - ALU_Op : in std_logic_vector(3 downto 0); - IR : in std_logic_vector(5 downto 0); - ISet : in std_logic_vector(1 downto 0); - BusA : in std_logic_vector(7 downto 0); - BusB : in std_logic_vector(7 downto 0); - F_In : in std_logic_vector(7 downto 0); - Q : out std_logic_vector(7 downto 0); - F_Out : out std_logic_vector(7 downto 0) - ); - end component; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_Reg.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_Reg.vhd deleted file mode 100644 index 828485fb..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80_Reg.vhd +++ /dev/null @@ -1,105 +0,0 @@ --- --- T80 Registers, technology independent --- --- Version : 0244 --- --- Copyright (c) 2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t51/ --- --- Limitations : --- --- File history : --- --- 0242 : Initial release --- --- 0244 : Changed to single register file --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; - -entity T80_Reg is - port( - Clk : in std_logic; - CEN : in std_logic; - WEH : in std_logic; - WEL : in std_logic; - AddrA : in std_logic_vector(2 downto 0); - AddrB : in std_logic_vector(2 downto 0); - AddrC : in std_logic_vector(2 downto 0); - DIH : in std_logic_vector(7 downto 0); - DIL : in std_logic_vector(7 downto 0); - DOAH : out std_logic_vector(7 downto 0); - DOAL : out std_logic_vector(7 downto 0); - DOBH : out std_logic_vector(7 downto 0); - DOBL : out std_logic_vector(7 downto 0); - DOCH : out std_logic_vector(7 downto 0); - DOCL : out std_logic_vector(7 downto 0) - ); -end T80_Reg; - -architecture rtl of T80_Reg is - - type Register_Image is array (natural range <>) of std_logic_vector(7 downto 0); - signal RegsH : Register_Image(0 to 7); - signal RegsL : Register_Image(0 to 7); - -begin - - process (Clk) - begin - if Clk'event and Clk = '1' then - if CEN = '1' then - if WEH = '1' then - RegsH(to_integer(unsigned(AddrA))) <= DIH; - end if; - if WEL = '1' then - RegsL(to_integer(unsigned(AddrA))) <= DIL; - end if; - end if; - end if; - end process; - - DOAH <= RegsH(to_integer(unsigned(AddrA))); - DOAL <= RegsL(to_integer(unsigned(AddrA))); - DOBH <= RegsH(to_integer(unsigned(AddrB))); - DOBL <= RegsL(to_integer(unsigned(AddrB))); - DOCH <= RegsH(to_integer(unsigned(AddrC))); - DOCL <= RegsL(to_integer(unsigned(AddrC))); - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80as.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80as.vhd deleted file mode 100644 index fe477f50..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/cpu/T80as.vhd +++ /dev/null @@ -1,283 +0,0 @@ ------------------------------------------------------------------------------- --- t80as.vhd : The non-tristate signal edition of t80a.vhd --- --- 2003.2.7 non-tristate modification by Tatsuyuki Satoh --- --- 1.separate 'D' to 'DO' and 'DI'. --- 2.added 'DOE' to 'DO' enable signal.(data direction) --- 3.MREQ_n,IORQ_n,RD_n,WR_n,RFSH_n,A doesn't become the condition of 'Z'. --- --- There is a mark of "--AS" in all the change points. --- ------------------------------------------------------------------------------- - --- --- Z80 compatible microprocessor core, asynchronous top level --- --- Version : 0247 --- --- Copyright (c) 2001-2002 Daniel Wallner (jesus@opencores.org) --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- 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 AUTHOR 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. --- --- Please report bugs to the author, but before you do so, please --- make sure that this is not a derivative work and that --- you have the latest version of this file. --- --- The latest version of this file can be found at: --- http://www.opencores.org/cvsweb.shtml/t80/ --- --- Limitations : --- --- File history : --- --- 0208 : First complete release --- --- 0211 : Fixed interrupt cycle --- --- 0235 : Updated for T80 interface change --- --- 0238 : Updated for T80 interface change --- --- 0240 : Updated for T80 interface change --- --- 0242 : Updated for T80 interface change --- --- 0247 : Fixed bus req/ack cycle --- - -library IEEE; -use IEEE.std_logic_1164.all; -use IEEE.numeric_std.all; -use work.T80_Pack.all; - -entity T80as is - generic( - Mode : integer := 0 -- 0 => Z80, 1 => Fast Z80, 2 => 8080, 3 => GB - ); - port( - RESET_n : in std_logic; - CLK_n : in std_logic; - WAIT_n : in std_logic; - INT_n : in std_logic; - NMI_n : in std_logic; - BUSRQ_n : in std_logic; - M1_n : out std_logic; - MREQ_n : out std_logic; - IORQ_n : out std_logic; - RD_n : out std_logic; - WR_n : out std_logic; - RFSH_n : out std_logic; - HALT_n : out std_logic; - BUSAK_n : out std_logic; - A : out std_logic_vector(15 downto 0); ---AS-- D : inout std_logic_vector(7 downto 0) ---AS>> - DI : in std_logic_vector(7 downto 0); - DO : out std_logic_vector(7 downto 0); - DOE : out std_logic ---< 'Z'); ---AS-- D <= DO when Write = '1' and BUSAK_n_i = '1' else (others => 'Z'); ---AS>> - MREQ_n <= MREQ_n_i; - IORQ_n <= IORQ_n_i; - RD_n <= RD_n_i; - WR_n <= WR_n_i; - RFSH_n <= RFSH_n_i; - A <= A_i; - DOE <= Write when BUSAK_n_i = '1' else '0'; ---< Mode, - IOWait => 1) - port map( - CEN => CEN, - M1_n => M1_n, - IORQ => IORQ, - NoRead => NoRead, - Write => Write, - RFSH_n => RFSH_n_i, - HALT_n => HALT_n, - WAIT_n => Wait_s, - INT_n => INT_n, - NMI_n => NMI_n, - RESET_n => Reset_s, - BUSRQ_n => BUSRQ_n, - BUSAK_n => BUSAK_n_i, - CLK_n => CLK_n, - A => A_i, --- DInst => D, - DInst => DI, - DI => DI_Reg, - DO => DO, - MC => MCycle, - TS => TState, - IntCycle_n => IntCycle_n); - - process (CLK_n) - begin - if CLK_n'event and CLK_n = '0' then - Wait_s <= WAIT_n; - if TState = "011" and BUSAK_n_i = '1' then ---AS-- DI_Reg <= to_x01(D); ---AS>> - DI_Reg <= to_x01(DI); ---< 0, - IOWait => 1) - port map( - CEN => CLKEN, - M1_n => M1_n, - IORQ => IORQ, - NoRead => NoRead, - Write => Write, - RFSH_n => RFSH_n, - HALT_n => HALT_n, - WAIT_n => Wait_n, - INT_n => INT_n, - NMI_n => NMI_n, - RESET_n => RESET_n, - BUSRQ_n => BUSRQ_n, - BUSAK_n => BUSAK_n, - CLK_n => CLK_n, - A => A, - DInst => DI, - DI => DI_Reg, - DO => DO, - MC => MCycle, - TS => TState, - IntCycle_n => IntCycle_n); - - process (RESET_n, CLK_n) - begin - if RESET_n = '0' then - RD_n <= '1'; - WR_n <= '1'; - IORQ_n <= '1'; - MREQ_n <= '1'; - DI_Reg <= "00000000"; - elsif CLK_n'event and CLK_n = '1' then - if CLKEN = '1' then - RD_n <= '1'; - WR_n <= '1'; - IORQ_n <= '1'; - MREQ_n <= '1'; - if MCycle = "001" then - if TState = "001" or (TState = "010" and Wait_n = '0') then - RD_n <= not IntCycle_n; - MREQ_n <= not IntCycle_n; - IORQ_n <= IntCycle_n; - end if; - if TState = "011" then - MREQ_n <= '0'; - end if; - else - if (TState = "001" or TState = "010") and NoRead = '0' and Write = '0' then - RD_n <= '0'; - IORQ_n <= not IORQ; - MREQ_n <= IORQ; - end if; - if ((TState = "001") or (TState = "010")) and Write = '1' then - WR_n <= '0'; - IORQ_n <= not IORQ; - MREQ_n <= IORQ; - end if; - end if; - if TState = "010" and Wait_n = '1' then - DI_Reg <= DI; - end if; - end if; - end if; - end process; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/dac.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/dac.vhd deleted file mode 100644 index b1ecdcb7..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/dac.vhd +++ /dev/null @@ -1,71 +0,0 @@ -------------------------------------------------------------------------------- --- --- Delta-Sigma DAC --- --- $Id: dac.vhd,v 1.1 2005/10/25 21:09:42 arnim Exp $ --- --- Refer to Xilinx Application Note XAPP154. --- --- This DAC requires an external RC low-pass filter: --- --- dac_o 0---XXXXX---+---0 analog audio --- 3k3 | --- === 4n7 --- | --- GND --- -------------------------------------------------------------------------------- - -library ieee; -use ieee.std_logic_1164.all; - -entity dac is - - generic ( - msbi_g : integer := 11 - ); - port ( - clk_i : in std_logic; - res_n_i : in std_logic; - dac_i : in std_logic_vector(msbi_g downto 0); - dac_o : out std_logic - ); - -end dac; - -library ieee; -use ieee.numeric_std.all; - -architecture rtl of dac is - - signal DACout_q : std_logic; - signal DeltaAdder_s, - SigmaAdder_s, - SigmaLatch_q, - DeltaB_s : unsigned(msbi_g+2 downto 0); - -begin - - DeltaB_s(msbi_g+2 downto msbi_g+1) <= SigmaLatch_q(msbi_g+2) & - SigmaLatch_q(msbi_g+2); - DeltaB_s(msbi_g downto 0) <= (others => '0'); - - DeltaAdder_s <= unsigned('0' & '0' & dac_i) + DeltaB_s; - - SigmaAdder_s <= DeltaAdder_s + SigmaLatch_q; - - seq: process (clk_i, res_n_i) - begin - if res_n_i = '0' then - SigmaLatch_q <= to_unsigned(2**(msbi_g+1), SigmaLatch_q'length); - DACout_q <= '0'; - - elsif clk_i'event and clk_i = '1' then - SigmaLatch_q <= SigmaAdder_s; - DACout_q <= SigmaLatch_q(msbi_g+2); - end if; - end process seq; - - dac_o <= DACout_q; - -end rtl; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/dpram.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/dpram.vhd deleted file mode 100644 index dafe8385..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/dpram.vhd +++ /dev/null @@ -1,75 +0,0 @@ -LIBRARY ieee; -USE ieee.std_logic_1164.all; - -LIBRARY altera_mf; -USE altera_mf.altera_mf_components.all; - -entity dpram is - generic ( - addr_width_g : integer := 8; - data_width_g : integer := 8 - ); - PORT - ( - address_a : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); - address_b : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); - clock_a : IN STD_LOGIC := '1'; - clock_b : IN STD_LOGIC ; - data_a : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); - data_b : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); - enable_a : IN STD_LOGIC := '1'; - enable_b : IN STD_LOGIC := '1'; - wren_a : IN STD_LOGIC := '0'; - wren_b : IN STD_LOGIC := '0'; - q_a : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); - q_b : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0) - ); -END dpram; - - -ARCHITECTURE SYN OF dpram IS -BEGIN - altsyncram_component : altsyncram - GENERIC MAP ( - address_reg_b => "CLOCK1", - clock_enable_input_a => "NORMAL", - clock_enable_input_b => "NORMAL", - clock_enable_output_a => "BYPASS", - clock_enable_output_b => "BYPASS", - indata_reg_b => "CLOCK1", - intended_device_family => "Cyclone V", - lpm_type => "altsyncram", - numwords_a => 2**addr_width_g, - numwords_b => 2**addr_width_g, - operation_mode => "BIDIR_DUAL_PORT", - outdata_aclr_a => "NONE", - outdata_aclr_b => "NONE", - outdata_reg_a => "UNREGISTERED", - outdata_reg_b => "UNREGISTERED", - power_up_uninitialized => "FALSE", - read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", - read_during_write_mode_port_b => "NEW_DATA_NO_NBE_READ", - widthad_a => addr_width_g, - widthad_b => addr_width_g, - width_a => data_width_g, - width_b => data_width_g, - width_byteena_a => 1, - width_byteena_b => 1, - wrcontrol_wraddress_reg_b => "CLOCK1" - ) - PORT MAP ( - address_a => address_a, - address_b => address_b, - clock0 => clock_a, - clock1 => clock_b, - clocken0 => enable_a, - clocken1 => enable_b, - data_a => data_a, - data_b => data_b, - wren_a => wren_a, - wren_b => wren_b, - q_a => q_a, - q_b => q_b - ); - -END SYN; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/galaxian.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/galaxian.vhd deleted file mode 100644 index b881e738..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/galaxian.vhd +++ /dev/null @@ -1,446 +0,0 @@ ------------------------------------------------------------------------------- --- FPGA GALAXIAN --- --- Version downto 2.50 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important not --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 4-30 galaxian modify by K.DEGAWA --- 2004- 5- 6 first release. --- 2004- 8-23 Improvement with T80-IP. --- 2004- 9-22 The problem which missile didn't sometimes come out from was improved. ------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - ---use work.pkg_galaxian.all; - -entity galaxian is - port( - W_CLK_18M : in std_logic; - W_CLK_12M : in std_logic; - W_CLK_6M : in std_logic; - - P1_CSJUDLR : in std_logic_vector(6 downto 0); - P2_CSJUDLR : in std_logic_vector(6 downto 0); - I_RESET : in std_logic; - - W_R : out std_logic_vector(2 downto 0); - W_G : out std_logic_vector(2 downto 0); - W_B : out std_logic_vector(2 downto 0); - HBLANK : out std_logic; - VBLANK : out std_logic; - W_H_SYNC : out std_logic; - W_V_SYNC : out std_logic; - W_SDAT_A : out std_logic_vector( 7 downto 0); - W_SDAT_B : out std_logic_vector( 7 downto 0); - O_CMPBL : out std_logic - ); -end; - -architecture RTL of galaxian is - -- CPU ADDRESS BUS - signal W_A : std_logic_vector(15 downto 0) := (others => '0'); - -- CPU IF - signal W_CPU_CLK : std_logic := '0'; - signal W_CPU_MREQn : std_logic := '0'; - signal W_CPU_NMIn : std_logic := '0'; - signal W_CPU_RDn : std_logic := '0'; - signal W_CPU_RFSHn : std_logic := '0'; - signal W_CPU_WAITn : std_logic := '0'; - signal W_CPU_WRn : std_logic := '0'; - signal W_CPU_WR : std_logic := '0'; - signal W_RESETn : std_logic := '0'; - -------- H and V COUNTER ------------------------- - signal W_C_BLn : std_logic := '0'; - signal W_C_BLnX : std_logic := '0'; - signal W_C_BLXn : std_logic := '0'; - signal W_H_BL : std_logic := '0'; - signal W_H_SYNC_int : std_logic := '0'; - signal W_V_BLn : std_logic := '0'; - signal W_V_BL2n : std_logic := '0'; - signal W_V_SYNC_int : std_logic := '0'; - signal W_H_CNT : std_logic_vector(8 downto 0) := (others => '0'); - signal W_V_CNT : std_logic_vector(7 downto 0) := (others => '0'); - -------- CPU RAM ---------------------------- - signal W_CPU_RAM_DO : std_logic_vector(7 downto 0) := (others => '0'); - -------- ADDRESS DECDER ---------------------- - signal W_BD_G : std_logic := '0'; - signal W_CPU_RAM_CS : std_logic := '0'; - signal W_CPU_RAM_RD : std_logic := '0'; --- signal W_CPU_RAM_WR : std_logic := '0'; - signal W_CPU_ROM_CS : std_logic := '0'; - signal W_DIP_OE : std_logic := '0'; - signal W_H_FLIP : std_logic := '0'; - signal W_DRIVER_WE : std_logic := '0'; - signal W_OBJ_RAM_RD : std_logic := '0'; - signal W_OBJ_RAM_RQ : std_logic := '0'; - signal W_OBJ_RAM_WR : std_logic := '0'; - signal W_PITCH : std_logic := '0'; - signal W_SOUND_WE : std_logic := '0'; - signal W_STARS_ON : std_logic := '0'; - signal W_STARS_OFFn : std_logic := '0'; - signal W_SW0_OE : std_logic := '0'; - signal W_SW1_OE : std_logic := '0'; - signal W_V_FLIP : std_logic := '0'; - signal W_VID_RAM_RD : std_logic := '0'; - signal W_VID_RAM_WR : std_logic := '0'; - signal W_WDR_OE : std_logic := '0'; - --------- INPORT ----------------------------- - signal W_SW_DO : std_logic_vector( 7 downto 0) := (others => '0'); - --------- VIDEO ----------------------------- - signal W_VID_DO : std_logic_vector( 7 downto 0) := (others => '0'); - ----- DATA I/F ------------------------------------- - signal W_CPU_ROM_DO : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_CPU_ROM_DOB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_BDO : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_BDI : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_CPU_RAM_CLK : std_logic := '0'; - signal W_VOL1 : std_logic := '0'; - signal W_VOL2 : std_logic := '0'; - signal W_FIRE : std_logic := '0'; - signal W_HIT : std_logic := '0'; - signal W_FS : std_logic_vector( 2 downto 0) := (others => '0'); - - signal blx_comb : std_logic := '0'; - signal W_1VF : std_logic := '0'; - signal W_256HnX : std_logic := '0'; - signal W_8HF : std_logic := '0'; - signal W_DAC_A : std_logic := '0'; - signal W_DAC_B : std_logic := '0'; - signal W_MISSILEn : std_logic := '0'; - signal W_SHELLn : std_logic := '0'; - signal W_MS_D : std_logic := '0'; - signal W_MS_R : std_logic := '0'; - signal W_MS_G : std_logic := '0'; - signal W_MS_B : std_logic := '0'; - - signal new_sw : std_logic_vector( 2 downto 0) := (others => '0'); - signal in_game : std_logic_vector( 1 downto 0) := (others => '0'); - signal ROM_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal rst_count : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_COL : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_STARS_B : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_STARS_G : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_STARS_R : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_VID : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_VIDEO_B : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_VIDEO_G : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_VIDEO_R : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_WAV_A0 : std_logic_vector(18 downto 0) := (others => '0'); - signal W_WAV_A1 : std_logic_vector(18 downto 0) := (others => '0'); - signal W_WAV_A2 : std_logic_vector(18 downto 0) := (others => '0'); - signal W_WAV_D0 : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_WAV_D1 : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_WAV_D2 : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_DAC : std_logic_vector( 3 downto 0) := (others => '0'); - -begin - mc_vid : entity work.MC_VIDEO - port map( - I_CLK_18M => W_CLK_18M, - I_CLK_12M => W_CLK_12M, - I_CLK_6M => W_CLK_6M, - I_H_CNT => W_H_CNT, - I_V_CNT => W_V_CNT, - I_H_FLIP => W_H_FLIP, - I_V_FLIP => W_V_FLIP, - I_V_BLn => W_V_BLn, - I_C_BLn => W_C_BLn, - I_A => W_A(9 downto 0), - I_OBJ_SUB_A => "000", - I_BD => W_BDI, - I_OBJ_RAM_RQ => W_OBJ_RAM_RQ, - I_OBJ_RAM_RD => W_OBJ_RAM_RD, - I_OBJ_RAM_WR => W_OBJ_RAM_WR, - I_VID_RAM_RD => W_VID_RAM_RD, - I_VID_RAM_WR => W_VID_RAM_WR, - I_DRIVER_WR => W_DRIVER_WE, - O_C_BLnX => W_C_BLnX, - O_8HF => W_8HF, - O_256HnX => W_256HnX, - O_1VF => W_1VF, - O_MISSILEn => W_MISSILEn, - O_SHELLn => W_SHELLn, - O_BD => W_VID_DO, - O_VID => W_VID, - O_COL => W_COL - ); - - cpu : entity work.T80as - port map ( - RESET_n => W_RESETn, - CLK_n => W_CPU_CLK, - WAIT_n => W_CPU_WAITn, - INT_n => '1', - NMI_n => W_CPU_NMIn, - BUSRQ_n => '1', - MREQ_n => W_CPU_MREQn, - RD_n => W_CPU_RDn, - WR_n => W_CPU_WRn, - RFSH_n => W_CPU_RFSHn, - A => W_A, - DI => W_BDO, - DO => W_BDI, - M1_n => open, - IORQ_n => open, - HALT_n => open, - BUSAK_n => open, - DOE => open - ); - - mc_cpu_ram : entity work.MC_CPU_RAM - port map ( - I_CLK => W_CPU_RAM_CLK, - I_ADDR => W_A(9 downto 0), - I_D => W_BDI, - I_WE => W_CPU_WR, - I_OE => W_CPU_RAM_RD, - O_D => W_CPU_RAM_DO - ); - - mc_adec : entity work.MC_ADEC - port map( - I_CLK_12M => W_CLK_12M, - I_CLK_6M => W_CLK_6M, - I_CPU_CLK => W_CPU_CLK, - I_RSTn => W_RESETn, - - I_CPU_A => W_A, - I_CPU_D => W_BDI(0), - I_MREQn => W_CPU_MREQn, - I_RFSHn => W_CPU_RFSHn, - I_RDn => W_CPU_RDn, - I_WRn => W_CPU_WRn, - I_H_BL => W_H_BL, - I_V_BLn => W_V_BLn, - - O_WAITn => W_CPU_WAITn, - O_NMIn => W_CPU_NMIn, - O_CPU_ROM_CS => W_CPU_ROM_CS, - O_CPU_RAM_RD => W_CPU_RAM_RD, --- O_CPU_RAM_WR => W_CPU_RAM_WR, - O_CPU_RAM_CS => W_CPU_RAM_CS, - O_OBJ_RAM_RD => W_OBJ_RAM_RD, - O_OBJ_RAM_WR => W_OBJ_RAM_WR, - O_OBJ_RAM_RQ => W_OBJ_RAM_RQ, - O_VID_RAM_RD => W_VID_RAM_RD, - O_VID_RAM_WR => W_VID_RAM_WR, - O_SW0_OE => W_SW0_OE, - O_SW1_OE => W_SW1_OE, - O_DIP_OE => W_DIP_OE, - O_WDR_OE => W_WDR_OE, - O_DRIVER_WE => W_DRIVER_WE, - O_SOUND_WE => W_SOUND_WE, - O_PITCH => W_PITCH, - O_H_FLIP => W_H_FLIP, - O_V_FLIP => W_V_FLIP, - O_BD_G => W_BD_G, - O_STARS_ON => W_STARS_ON - ); - - -- active high buttons - mc_inport : entity work.MC_INPORT - port map ( - I_COIN1 => P1_CSJUDLR(6), - I_COIN2 => P2_CSJUDLR(6), - I_1P_START => P1_CSJUDLR(5), - I_2P_START => P2_CSJUDLR(5), - I_1P_SH => P1_CSJUDLR(4), - I_2P_SH => P2_CSJUDLR(4), - I_1P_LE => P1_CSJUDLR(1), - I_2P_LE => P2_CSJUDLR(1), - I_1P_RI => P1_CSJUDLR(0), - I_2P_RI => P2_CSJUDLR(0), - I_SW0_OE => W_SW0_OE, - I_SW1_OE => W_SW1_OE, - I_DIP_OE => W_DIP_OE, - O_D => W_SW_DO - ); - - mc_hv : entity work.MC_HV_COUNT - port map( - I_CLK => W_CLK_6M, - I_RSTn => W_RESETn, - O_H_CNT => W_H_CNT, - O_H_SYNC => W_H_SYNC_int, - O_H_BL => W_H_BL, - O_V_CNT => W_V_CNT, - O_V_SYNC => W_V_SYNC_int, - O_V_BL2n => W_V_BL2n, - O_V_BLn => W_V_BLn, - O_C_BLn => W_C_BLn - ); - - mc_col_pal : entity work.MC_COL_PAL - port map( - I_CLK_12M => W_CLK_12M, - I_CLK_6M => W_CLK_6M, - I_VID => W_VID, - I_COL => W_COL, - I_C_BLnX => W_C_BLnX, - O_C_BLXn => W_C_BLXn, - O_STARS_OFFn => W_STARS_OFFn, - O_R => W_VIDEO_R, - O_G => W_VIDEO_G, - O_B => W_VIDEO_B - ); - - mc_stars : entity work.MC_STARS - port map ( - I_CLK_18M => W_CLK_18M, - I_CLK_6M => W_CLK_6M, - I_H_FLIP => W_H_FLIP, - I_V_SYNC => W_V_SYNC_int, - I_8HF => W_8HF, - I_256HnX => W_256HnX, - I_1VF => W_1VF, - I_2V => W_V_CNT(1), - I_STARS_ON => W_STARS_ON, - I_STARS_OFFn => W_STARS_OFFn, - O_R => W_STARS_R, - O_G => W_STARS_G, - O_B => W_STARS_B, - O_NOISE => open - ); - - mc_sound_a : entity work.MC_SOUND_A - port map( - I_CLK_12M => W_CLK_12M, - I_CLK_6M => W_CLK_6M, - I_H_CNT1 => W_H_CNT(1), - I_BD => W_BDI, - I_PITCH => W_PITCH, - I_VOL1 => W_VOL1, - I_VOL2 => W_VOL2, - O_SDAT => W_SDAT_A, - O_DO => open - ); - - vmc_sound_b : entity work.MC_SOUND_B - port map( - I_CLK1 => W_CLK_6M, - I_RSTn => rst_count(3), - I_SW => new_sw, - I_DAC => W_DAC, - I_FS => W_FS, - O_SDAT => W_SDAT_B - ); - ---------- ROM ------------------------------------------------------- - mc_roms : entity work.ROM_PGM_0 - port map ( - CLK => W_CLK_12M, - ADDR => W_A(13 downto 0), - DATA => W_CPU_ROM_DO - ); - --------- VIDEO ----------------------------- - blx_comb <= not ( W_C_BLXn and W_V_BL2n ); - W_V_SYNC <= not W_V_SYNC_int; - W_H_SYNC <= not W_H_SYNC_int; - O_CMPBL <= W_C_BLnX; - - -- MISSILE => Yellow ; - -- SHELL => White ; - W_MS_D <= not (W_MISSILEn and W_SHELLn); - W_MS_R <= not blx_comb and W_MS_D; - W_MS_G <= not blx_comb and W_MS_D; - W_MS_B <= not blx_comb and W_MS_D and not W_SHELLn ; - - W_R <= W_VIDEO_R or (W_STARS_R & "0") or (W_MS_R & W_MS_R & "0"); - W_G <= W_VIDEO_G or (W_STARS_G & "0") or (W_MS_G & W_MS_G & "0"); - W_B <= W_VIDEO_B or (W_STARS_B & "0") or (W_MS_B & W_MS_B & "0"); - - process(W_CLK_6M) - begin - if rising_edge(W_CLK_6M) then - HBLANK <= not W_C_BLXn; - VBLANK <= not W_V_BL2n; - end if; - end process; - - ------ CPU I/F ------------------------------------- - - W_CPU_CLK <= W_H_CNT(0); - W_CPU_RAM_CLK <= W_CLK_12M and W_CPU_RAM_CS; - - W_CPU_ROM_DOB <= W_CPU_ROM_DO when W_CPU_ROM_CS = '1' else (others=>'0'); - - W_RESETn <= not I_RESET; - W_BDO <= W_SW_DO or W_VID_DO or W_CPU_RAM_DO or W_CPU_ROM_DOB ; - W_CPU_WR <= not W_CPU_WRn; - - new_sw <= (W_FS(2) or W_FS(1) or W_FS(0)) & W_HIT & W_FIRE; - - process(W_CPU_CLK, I_RESET) - begin - if (I_RESET = '1') then - rst_count <= (others => '0'); - elsif rising_edge( W_CPU_CLK) then - if ( rst_count /= x"f") then - rst_count <= rst_count + 1; - end if; - end if; - end process; - ------ Parts 9L --------- - process(W_CLK_12M, I_RESET) - begin - if (I_RESET = '1') then - W_FS <= (others=>'0'); - W_HIT <= '0'; - W_FIRE <= '0'; - W_VOL1 <= '0'; - W_VOL2 <= '0'; - elsif rising_edge(W_CLK_12M) then - if (W_SOUND_WE = '1') then - case(W_A(2 downto 0)) is - when "000" => W_FS(0) <= W_BDI(0); - when "001" => W_FS(1) <= W_BDI(0); - when "010" => W_FS(2) <= W_BDI(0); - when "011" => W_HIT <= W_BDI(0); --- when "100" => UNUSED <= W_BDI(0); - when "101" => W_FIRE <= W_BDI(0); - when "110" => W_VOL1 <= W_BDI(0); - when "111" => W_VOL2 <= W_BDI(0); - when others => null; - end case; - end if; - end if; - end process; - ------ Parts 9M --------- - process(W_CLK_12M, I_RESET) - begin - if (I_RESET = '1') then - W_DAC <= (others=>'0'); - elsif rising_edge(W_CLK_12M) then - if (W_DRIVER_WE = '1') then - case(W_A(2 downto 0)) is - -- next 4 outputs go off board via ULN2075 buffer --- when "000" => 1P START <= W_BDI(0); --- when "001" => 2P START <= W_BDI(0); --- when "010" => COIN LOCK <= W_BDI(0); --- when "011" => COIN CTR <= W_BDI(0); - when "100" => W_DAC(0) <= W_BDI(0); -- 1M - when "101" => W_DAC(1) <= W_BDI(0); -- 470K - when "110" => W_DAC(2) <= W_BDI(0); -- 220K - when "111" => W_DAC(3) <= W_BDI(0); -- 100K - when others => null; - end case; - end if; - end if; - end process; - -------------------------------------------------------------------------------- -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/hq2x.sv b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/hq2x.sv deleted file mode 100644 index f17732b6..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/hq2x.sv +++ /dev/null @@ -1,454 +0,0 @@ -// -// -// Copyright (c) 2012-2013 Ludvig Strigeus -// Copyright (c) 2017 Sorgelig -// -// This program is GPL Licensed. See COPYING for the full license. -// -// -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -// synopsys translate_off -`timescale 1 ps / 1 ps -// synopsys translate_on - -`define BITS_TO_FIT(N) ( \ - N <= 2 ? 0 : \ - N <= 4 ? 1 : \ - N <= 8 ? 2 : \ - N <= 16 ? 3 : \ - N <= 32 ? 4 : \ - N <= 64 ? 5 : \ - N <= 128 ? 6 : \ - N <= 256 ? 7 : \ - N <= 512 ? 8 : \ - N <=1024 ? 9 : 10 ) - -module hq2x_in #(parameter LENGTH, parameter DWIDTH) -( - input clk, - - input [AWIDTH:0] rdaddr, - input rdbuf, - output[DWIDTH:0] q, - - input [AWIDTH:0] wraddr, - input wrbuf, - input [DWIDTH:0] data, - input wren -); - - localparam AWIDTH = `BITS_TO_FIT(LENGTH); - wire [DWIDTH:0] out[2]; - assign q = out[rdbuf]; - - hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); - hq2x_buf #(.NUMWORDS(LENGTH), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); -endmodule - - -module hq2x_out #(parameter LENGTH, parameter DWIDTH) -( - input clk, - - input [AWIDTH:0] rdaddr, - input [1:0] rdbuf, - output[DWIDTH:0] q, - - input [AWIDTH:0] wraddr, - input [1:0] wrbuf, - input [DWIDTH:0] data, - input wren -); - - localparam AWIDTH = `BITS_TO_FIT(LENGTH*2); - wire [DWIDTH:0] out[4]; - assign q = out[rdbuf]; - - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf0(clk,data,rdaddr,wraddr,wren && (wrbuf == 0),out[0]); - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf1(clk,data,rdaddr,wraddr,wren && (wrbuf == 1),out[1]); - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf2(clk,data,rdaddr,wraddr,wren && (wrbuf == 2),out[2]); - hq2x_buf #(.NUMWORDS(LENGTH*2), .AWIDTH(AWIDTH), .DWIDTH(DWIDTH)) buf3(clk,data,rdaddr,wraddr,wren && (wrbuf == 3),out[3]); -endmodule - - -module hq2x_buf #(parameter NUMWORDS, parameter AWIDTH, parameter DWIDTH) -( - input clock, - input [DWIDTH:0] data, - input [AWIDTH:0] rdaddress, - input [AWIDTH:0] wraddress, - input wren, - output [DWIDTH:0] q -); - - altsyncram altsyncram_component ( - .address_a (wraddress), - .clock0 (clock), - .data_a (data), - .wren_a (wren), - .address_b (rdaddress), - .q_b(q), - .aclr0 (1'b0), - .aclr1 (1'b0), - .addressstall_a (1'b0), - .addressstall_b (1'b0), - .byteena_a (1'b1), - .byteena_b (1'b1), - .clock1 (1'b1), - .clocken0 (1'b1), - .clocken1 (1'b1), - .clocken2 (1'b1), - .clocken3 (1'b1), - .data_b ({(DWIDTH+1){1'b1}}), - .eccstatus (), - .q_a (), - .rden_a (1'b1), - .rden_b (1'b1), - .wren_b (1'b0)); - defparam - altsyncram_component.address_aclr_b = "NONE", - altsyncram_component.address_reg_b = "CLOCK0", - altsyncram_component.clock_enable_input_a = "BYPASS", - altsyncram_component.clock_enable_input_b = "BYPASS", - altsyncram_component.clock_enable_output_b = "BYPASS", - altsyncram_component.intended_device_family = "Cyclone III", - altsyncram_component.lpm_type = "altsyncram", - altsyncram_component.numwords_a = NUMWORDS, - altsyncram_component.numwords_b = NUMWORDS, - altsyncram_component.operation_mode = "DUAL_PORT", - altsyncram_component.outdata_aclr_b = "NONE", - altsyncram_component.outdata_reg_b = "UNREGISTERED", - altsyncram_component.power_up_uninitialized = "FALSE", - altsyncram_component.read_during_write_mode_mixed_ports = "DONT_CARE", - altsyncram_component.widthad_a = AWIDTH+1, - altsyncram_component.widthad_b = AWIDTH+1, - altsyncram_component.width_a = DWIDTH+1, - altsyncram_component.width_b = DWIDTH+1, - altsyncram_component.width_byteena_a = 1; - -endmodule - -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -module DiffCheck -( - input [17:0] rgb1, - input [17:0] rgb2, - output result -); - - wire [5:0] r = rgb1[5:1] - rgb2[5:1]; - wire [5:0] g = rgb1[11:7] - rgb2[11:7]; - wire [5:0] b = rgb1[17:13] - rgb2[17:13]; - wire [6:0] t = $signed(r) + $signed(b); - wire [6:0] gx = {g[5], g}; - wire [7:0] y = $signed(t) + $signed(gx); - wire [6:0] u = $signed(r) - $signed(b); - wire [7:0] v = $signed({g, 1'b0}) - $signed(t); - - // if y is inside (-24..24) - wire y_inside = (y < 8'h18 || y >= 8'he8); - - // if u is inside (-4, 4) - wire u_inside = (u < 7'h4 || u >= 7'h7c); - - // if v is inside (-6, 6) - wire v_inside = (v < 8'h6 || v >= 8'hfA); - assign result = !(y_inside && u_inside && v_inside); -endmodule - -module InnerBlend -( - input [8:0] Op, - input [5:0] A, - input [5:0] B, - input [5:0] C, - output [5:0] O -); - - function [8:0] mul6x3; - input [5:0] op1; - input [2:0] op2; - begin - mul6x3 = 9'd0; - if(op2[0]) mul6x3 = mul6x3 + op1; - if(op2[1]) mul6x3 = mul6x3 + {op1, 1'b0}; - if(op2[2]) mul6x3 = mul6x3 + {op1, 2'b00}; - end - endfunction - - wire OpOnes = Op[4]; - wire [8:0] Amul = mul6x3(A, Op[7:5]); - wire [8:0] Bmul = mul6x3(B, {Op[3:2], 1'b0}); - wire [8:0] Cmul = mul6x3(C, {Op[1:0], 1'b0}); - wire [8:0] At = Amul; - wire [8:0] Bt = (OpOnes == 0) ? Bmul : {3'b0, B}; - wire [8:0] Ct = (OpOnes == 0) ? Cmul : {3'b0, C}; - wire [9:0] Res = {At, 1'b0} + Bt + Ct; - assign O = Op[8] ? A : Res[9:4]; -endmodule - -module Blend -( - input [5:0] rule, - input disable_hq2x, - input [17:0] E, - input [17:0] A, - input [17:0] B, - input [17:0] D, - input [17:0] F, - input [17:0] H, - output [17:0] Result -); - - reg [1:0] input_ctrl; - reg [8:0] op; - localparam BLEND0 = 9'b1_xxx_x_xx_xx; // 0: A - localparam BLEND1 = 9'b0_110_0_10_00; // 1: (A * 12 + B * 4) >> 4 - localparam BLEND2 = 9'b0_100_0_10_10; // 2: (A * 8 + B * 4 + C * 4) >> 4 - localparam BLEND3 = 9'b0_101_0_10_01; // 3: (A * 10 + B * 4 + C * 2) >> 4 - localparam BLEND4 = 9'b0_110_0_01_01; // 4: (A * 12 + B * 2 + C * 2) >> 4 - localparam BLEND5 = 9'b0_010_0_11_11; // 5: (A * 4 + (B + C) * 6) >> 4 - localparam BLEND6 = 9'b0_111_1_xx_xx; // 6: (A * 14 + B + C) >> 4 - localparam AB = 2'b00; - localparam AD = 2'b01; - localparam DB = 2'b10; - localparam BD = 2'b11; - wire is_diff; - DiffCheck diff_checker(rule[1] ? B : H, rule[0] ? D : F, is_diff); - - always @* begin - case({!is_diff, rule[5:2]}) - 1,17: {op, input_ctrl} = {BLEND1, AB}; - 2,18: {op, input_ctrl} = {BLEND1, DB}; - 3,19: {op, input_ctrl} = {BLEND1, BD}; - 4,20: {op, input_ctrl} = {BLEND2, DB}; - 5,21: {op, input_ctrl} = {BLEND2, AB}; - 6,22: {op, input_ctrl} = {BLEND2, AD}; - - 8: {op, input_ctrl} = {BLEND0, 2'bxx}; - 9: {op, input_ctrl} = {BLEND0, 2'bxx}; - 10: {op, input_ctrl} = {BLEND0, 2'bxx}; - 11: {op, input_ctrl} = {BLEND1, AB}; - 12: {op, input_ctrl} = {BLEND1, AB}; - 13: {op, input_ctrl} = {BLEND1, AB}; - 14: {op, input_ctrl} = {BLEND1, DB}; - 15: {op, input_ctrl} = {BLEND1, BD}; - - 24: {op, input_ctrl} = {BLEND2, DB}; - 25: {op, input_ctrl} = {BLEND5, DB}; - 26: {op, input_ctrl} = {BLEND6, DB}; - 27: {op, input_ctrl} = {BLEND2, DB}; - 28: {op, input_ctrl} = {BLEND4, DB}; - 29: {op, input_ctrl} = {BLEND5, DB}; - 30: {op, input_ctrl} = {BLEND3, BD}; - 31: {op, input_ctrl} = {BLEND3, DB}; - default: {op, input_ctrl} = 11'bx; - endcase - - // Setting op[8] effectively disables HQ2X because blend will always return E. - if (disable_hq2x) op[8] = 1; - end - - // Generate inputs to the inner blender. Valid combinations. - // 00: E A B - // 01: E A D - // 10: E D B - // 11: E B D - wire [17:0] Input1 = E; - wire [17:0] Input2 = !input_ctrl[1] ? A : - !input_ctrl[0] ? D : B; - - wire [17:0] Input3 = !input_ctrl[0] ? B : D; - InnerBlend inner_blend1(op, Input1[5:0], Input2[5:0], Input3[5:0], Result[5:0]); - InnerBlend inner_blend2(op, Input1[11:6], Input2[11:6], Input3[11:6], Result[11:6]); - InnerBlend inner_blend3(op, Input1[17:12], Input2[17:12], Input3[17:12], Result[17:12]); -endmodule - - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -module Hq2x #(parameter LENGTH, parameter HALF_DEPTH) -( - input clk, - input ce_x4, - input [DWIDTH:0] inputpixel, - input mono, - input disable_hq2x, - input reset_frame, - input reset_line, - input [1:0] read_y, - input [AWIDTH+1:0] read_x, - output [DWIDTH:0] outpixel -); - - -localparam AWIDTH = `BITS_TO_FIT(LENGTH); -localparam DWIDTH = HALF_DEPTH ? 8 : 17; - -wire [5:0] hqTable[256] = '{ - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, - 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 35, 35, 23, 15, 7, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, - 19, 19, 26, 58, 19, 19, 26, 58, 23, 15, 51, 35, 23, 15, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 35, 35, 23, 61, 51, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 61, 7, 35, 23, 61, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 58, 23, 15, 51, 35, 23, 61, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 47, 35, 23, 15, 55, 39, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 55, 39, 23, 15, 51, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 39, 23, 15, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 51, 39, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 35, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 51, 35, 23, 15, 7, 43, - 19, 19, 26, 11, 19, 19, 26, 11, 23, 15, 7, 35, 23, 15, 7, 43 -}; - -reg [17:0] Prev0, Prev1, Prev2, Curr0, Curr1, Next0, Next1, Next2; -reg [17:0] A, B, D, F, G, H; -reg [7:0] pattern, nextpatt; -reg [1:0] i; -reg [7:0] y; - -wire curbuf = y[0]; -reg prevbuf = 0; -wire iobuf = !curbuf; - -wire diff0, diff1; -DiffCheck diffcheck0(Curr1, (i == 0) ? Prev0 : (i == 1) ? Curr0 : (i == 2) ? Prev2 : Next1, diff0); -DiffCheck diffcheck1(Curr1, (i == 0) ? Prev1 : (i == 1) ? Next0 : (i == 2) ? Curr2 : Next2, diff1); - -wire [7:0] new_pattern = {diff1, diff0, pattern[7:2]}; - -wire [17:0] X = (i == 0) ? A : (i == 1) ? Prev1 : (i == 2) ? Next1 : G; -wire [17:0] blend_result; -Blend blender(hqTable[nextpatt], disable_hq2x, Curr0, X, B, D, F, H, blend_result); - -reg Curr2_addr1; -reg [AWIDTH:0] Curr2_addr2; -wire [17:0] Curr2 = HALF_DEPTH ? h2rgb(Curr2tmp) : Curr2tmp; -wire [DWIDTH:0] Curr2tmp; - -reg [AWIDTH:0] wrin_addr2; -reg [DWIDTH:0] wrpix; -reg wrin_en; - -function [17:0] h2rgb; - input [8:0] v; -begin - h2rgb = mono ? {v[5:3],v[2:0], v[5:3],v[2:0], v[5:3],v[2:0]} : {v[8:6],v[8:6],v[5:3],v[5:3],v[2:0],v[2:0]}; -end -endfunction - -function [8:0] rgb2h; - input [17:0] v; -begin - rgb2h = mono ? {3'b000, v[17:15], v[14:12]} : {v[17:15], v[11:9], v[5:3]}; -end -endfunction - -hq2x_in #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_in -( - .clk(clk), - - .rdaddr(Curr2_addr2), - .rdbuf(Curr2_addr1), - .q(Curr2tmp), - - .wraddr(wrin_addr2), - .wrbuf(iobuf), - .data(wrpix), - .wren(wrin_en) -); - -reg [1:0] wrout_addr1; -reg [AWIDTH+1:0] wrout_addr2; -reg wrout_en; -reg [DWIDTH:0] wrdata; - -hq2x_out #(.LENGTH(LENGTH), .DWIDTH(DWIDTH)) hq2x_out -( - .clk(clk), - - .rdaddr(read_x), - .rdbuf(read_y), - .q(outpixel), - - .wraddr(wrout_addr2), - .wrbuf(wrout_addr1), - .data(wrdata), - .wren(wrout_en) -); - -always @(posedge clk) begin - reg [AWIDTH:0] offs; - reg old_reset_line; - reg old_reset_frame; - - wrout_en <= 0; - wrin_en <= 0; - - if(ce_x4) begin - - pattern <= new_pattern; - - if(~&offs) begin - if (i == 0) begin - Curr2_addr1 <= prevbuf; - Curr2_addr2 <= offs; - end - if (i == 1) begin - Prev2 <= Curr2; - Curr2_addr1 <= curbuf; - Curr2_addr2 <= offs; - end - if (i == 2) begin - Next2 <= HALF_DEPTH ? h2rgb(inputpixel) : inputpixel; - wrpix <= inputpixel; - wrin_addr2 <= offs; - wrin_en <= 1; - end - if (i == 3) begin - offs <= offs + 1'd1; - end - - if(HALF_DEPTH) wrdata <= rgb2h(blend_result); - else wrdata <= blend_result; - - wrout_addr1 <= {curbuf, i[1]}; - wrout_addr2 <= {offs, i[1]^i[0]}; - wrout_en <= 1; - end - - if(i==3) begin - nextpatt <= {new_pattern[7:6], new_pattern[3], new_pattern[5], new_pattern[2], new_pattern[4], new_pattern[1:0]}; - {A, G} <= {Prev0, Next0}; - {B, F, H, D} <= {Prev1, Curr2, Next1, Curr0}; - {Prev0, Prev1} <= {Prev1, Prev2}; - {Curr0, Curr1} <= {Curr1, Curr2}; - {Next0, Next1} <= {Next1, Next2}; - end else begin - nextpatt <= {nextpatt[5], nextpatt[3], nextpatt[0], nextpatt[6], nextpatt[1], nextpatt[7], nextpatt[4], nextpatt[2]}; - {B, F, H, D} <= {F, H, D, B}; - end - - i <= i + 1'b1; - if(old_reset_line && ~reset_line) begin - old_reset_frame <= reset_frame; - offs <= 0; - i <= 0; - y <= y + 1'd1; - prevbuf <= curbuf; - if(old_reset_frame & ~reset_frame) begin - y <= 0; - prevbuf <= 0; - end - end - - old_reset_line <= reset_line; - end -end - -endmodule // Hq2x diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_adec.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_adec.vhd deleted file mode 100644 index 7245ce8c..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_adec.vhd +++ /dev/null @@ -1,251 +0,0 @@ ---------------------------------------------------------------------- --- FPGA GALAXIAN ADDRESS DECDER --- --- Version : 2.01 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 4-30 galaxian modify by K.DEGAWA --- 2004- 5- 6 first release. --- 2004- 8-23 Improvement with T80-IP. ---------------------------------------------------------------------- --- ---GALAXIAN Address Map --- --- Address Item(R..read-mode W..wight-mode) Parts ---0000 - 1FFF CPU-ROM..R ( 7H or 7K ) ---2000 - 3FFF CPU-ROM..R ( 7L ) ---4000 - 47FF CPU-RAM..RW ( 7N & 7P ) ---5000 - 57FF VID-RAM..RW ---5800 - 5FFF OBJ-RAM..RW ---6000 - SW0..R LAMP......W ---6800 - SW1..R SOUND.....W ---7000 - DIP..R ---7001 NMI_ON....W ---7004 STARS_ON..W ---7006 H_FLIP....W ---7007 V-FLIP....W ---7800 WDR..R PITCH.....W --- ---W MODE ---6000 1P START ---6001 2P START ---6002 COIN LOCKOUT ---6003 COIN COUNTER ---6004 - 6007 SOUND CONTROL(OSC) --- ---6800 SOUND CONTROL(FS1) ---6801 SOUND CONTROL(FS2) ---6802 SOUND CONTROL(FS3) ---6803 SOUND CONTROL(HIT) ---6805 SOUND CONTROL(SHOT) ---6806 SOUND CONTROL(VOL1) ---6807 SOUND CONTROL(VOL2) --- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_ADEC is - port ( - I_CLK_12M : in std_logic; - I_CLK_6M : in std_logic; - I_CPU_CLK : in std_logic; - I_RSTn : in std_logic; - - I_CPU_A : in std_logic_vector(15 downto 0); - I_CPU_D : in std_logic; - I_MREQn : in std_logic; - I_RFSHn : in std_logic; - I_RDn : in std_logic; - I_WRn : in std_logic; - I_H_BL : in std_logic; - I_V_BLn : in std_logic; - - O_WAITn : out std_logic; - O_NMIn : out std_logic; - O_CPU_ROM_CS : out std_logic; - O_CPU_RAM_RD : out std_logic; - O_CPU_RAM_WR : out std_logic; - O_CPU_RAM_CS : out std_logic; - O_OBJ_RAM_RD : out std_logic; - O_OBJ_RAM_WR : out std_logic; - O_OBJ_RAM_RQ : out std_logic; - O_VID_RAM_RD : out std_logic; - O_VID_RAM_WR : out std_logic; - O_SW0_OE : out std_logic; - O_SW1_OE : out std_logic; - O_DIP_OE : out std_logic; - O_WDR_OE : out std_logic; - O_DRIVER_WE : out std_logic; - O_SOUND_WE : out std_logic; - O_PITCH : out std_logic; - O_H_FLIP : out std_logic; - O_V_FLIP : out std_logic; - O_BD_G : out std_logic; - O_STARS_ON : out std_logic - ); -end; - -architecture RTL of MC_ADEC is - signal W_8E1_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_8E2_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_8P_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_8N_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_8M_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_9N_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_NMI_ONn : std_logic := '0'; - -------- CPU WAITn ---------------------------------------------- --- signal W_6S1_Q : std_logic := '0'; - signal W_6S1_Qn : std_logic := '0'; --- signal W_6S2_Qn : std_logic := '0'; - - signal W_V_BL : std_logic := '0'; - -begin - W_NMI_ONn <= W_9N_Q(1); -- galaxian - --- O_WAITn <= '1' ; -- No Wait - O_WAITn <= W_6S1_Qn; - - process(I_CPU_CLK, I_V_BLn) - begin - if (I_V_BLn = '0') then --- W_6S1_Q <= '0'; - W_6S1_Qn <= '1'; - elsif rising_edge(I_CPU_CLK) then --- W_6S1_Q <= not (I_H_BL or W_8P_Q(2)); - W_6S1_Qn <= I_H_BL or W_8P_Q(2); - end if; - end process; - --- process(I_CPU_CLK) --- begin --- if falling_edge(I_CPU_CLK) then --- W_6S2_Qn <= not W_6S1_Q; --- end if; --- end process; - --------- CPU NMIn ----------------------------------------------- - W_V_BL <= not I_V_BLn; - process(W_V_BL, W_NMI_ONn) - begin - if (W_NMI_ONn = '0') then - O_NMIn <= '1'; - elsif rising_edge(W_V_BL) then - O_NMIn <= '0'; - end if; - end process; - - ------------------------------------------------------------------- - u_8e1 : entity work.LOGIC_74XX139 - port map ( - I_G => I_MREQn, - I_Sel(1) => I_CPU_A(15), - I_Sel(0) => I_CPU_A(14), - O_Q => W_8E1_Q - ); - - ---------- CPU_ROM CS 0000 - 3FFF --------------------------- - u_8e2 : entity work.LOGIC_74XX139 - port map ( - I_G => I_RDn, - I_Sel(1) => W_8E1_Q(0), - I_Sel(0) => I_CPU_A(13), - O_Q => W_8E2_Q - ); - - O_CPU_ROM_CS <= not (W_8E2_Q(0) and W_8E2_Q(1) ) ; -- 0000 - 3FFF - ------------------------------------------------------------------- - -- ADDRESS - -- W_8E1_Q[0] = 0000 - 3FFF ---- CPU_ROM_USE - -- W_8E1_Q[1] = 4000 - 7FFF ---- GALAXIAN USE *1 - -- W_8E1_Q[2] = 8000 - BFFF ---- MOONCREST USE - -- W_8E1_Q[3] = C000 - FFFF - - u_8p : entity work.LOGIC_74XX138 - port map ( - I_G1 => I_RFSHn, - I_G2a => W_8E1_Q(1), -- <= *1 - I_G2b => W_8E1_Q(1), -- <= *1 - I_Sel => I_CPU_A(13 downto 11), - O_Q => W_8P_Q - ); - - u_8n : entity work.LOGIC_74XX138 - port map ( - I_G1 => '1', - I_G2a => I_RDn, - I_G2b => W_8E1_Q(1), -- <= *1 - I_Sel => I_CPU_A(13 downto 11), - O_Q => W_8N_Q - ); - - u_8m : entity work.LOGIC_74XX138 - port map ( - -- I_G1 => W_6S2_Qn, - I_G1 => '1', -- No Wait - I_G2a => I_WRn, - I_G2b => W_8E1_Q(1), -- <= *1 - I_Sel => I_CPU_A(13 downto 11), - O_Q => W_8M_Q - ); - - O_BD_G <= not (W_8E1_Q(0) and W_8P_Q(0)); - O_OBJ_RAM_RQ <= not W_8P_Q(3); - - O_CPU_RAM_CS <= not (W_8N_Q(0) and W_8M_Q(0)); - - O_WDR_OE <= not W_8N_Q(7); - O_DIP_OE <= not W_8N_Q(6); - O_SW1_OE <= not W_8N_Q(5); - O_SW0_OE <= not W_8N_Q(4); - O_OBJ_RAM_RD <= not W_8N_Q(3); - O_VID_RAM_RD <= not W_8N_Q(2); --- UNUSED <= not W_8N_Q(1); - O_CPU_RAM_RD <= not W_8N_Q(0); - - O_PITCH <= not W_8M_Q(7); --- STARS_ON_ENA <= not W_8M_Q(6); - O_SOUND_WE <= not W_8M_Q(5); - O_DRIVER_WE <= not W_8M_Q(4); - O_OBJ_RAM_WR <= not W_8M_Q(3); - O_VID_RAM_WR <= not W_8M_Q(2); --- UNUSED <= not W_8M_Q(1); - O_CPU_RAM_WR <= not W_8M_Q(0); - - ----- Parts 9N --------- - - process(I_CLK_12M, I_RSTn) - begin - if (I_RSTn = '0') then - W_9N_Q <= (others => '0'); - elsif rising_edge(I_CLK_12M) then - if (W_8M_Q(6) = '0') then - case I_CPU_A(2 downto 0) is - when "000" => W_9N_Q(0) <= I_CPU_D; - when "001" => W_9N_Q(1) <= I_CPU_D; - when "010" => W_9N_Q(2) <= I_CPU_D; - when "011" => W_9N_Q(3) <= I_CPU_D; - when "100" => W_9N_Q(4) <= I_CPU_D; - when "101" => W_9N_Q(5) <= I_CPU_D; - when "110" => W_9N_Q(6) <= I_CPU_D; - when "111" => W_9N_Q(7) <= I_CPU_D; - when others => null; - end case; - end if; - end if; - end process; - - O_STARS_ON <= W_9N_Q(4); - O_H_FLIP <= W_9N_Q(6); - O_V_FLIP <= W_9N_Q(7); - -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_bram.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_bram.vhd deleted file mode 100644 index a6df1ce1..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_bram.vhd +++ /dev/null @@ -1,182 +0,0 @@ ------------------------------------------------------------------------------- --- FPGA MOONCRESTA & GALAXIAN --- FPGA BLOCK RAM I/F (XILINX SPARTAN) --- --- Version : 2.50 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- mc_col_rom(6L) added by k.Degawa --- --- 2004- 5- 6 first release. --- 2004- 8-23 Improvement with T80-IP. K.Degawa --- 2004- 9-18 added Xilinx Device K.Degawa ------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - --- mc_top.v use -entity MC_CPU_RAM is - port ( - I_CLK : in std_logic; - I_ADDR : in std_logic_vector(9 downto 0); - I_D : in std_logic_vector(7 downto 0); - I_WE : in std_logic; - I_OE : in std_logic; - O_D : out std_logic_vector(7 downto 0) - ); -end; -architecture RTL of MC_CPU_RAM is - - signal W_D : std_logic_vector(7 downto 0) := (others => '0'); -begin - O_D <= W_D when I_OE ='1' else (others=>'0'); - - ram_inst : work.spram generic map(10,8) - port map - ( - address => I_ADDR, - clock => I_CLK, - data => I_D, - wren => I_WE, - q => W_D - ); -end RTL; - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - --- mc_video.v use -entity MC_OBJ_RAM is - port( - I_CLKA : in std_logic := '0'; - I_WEA : in std_logic := '0'; - I_CEA : in std_logic := '0'; - I_ADDRA : in std_logic_vector(7 downto 0); - I_DA : in std_logic_vector(7 downto 0); - O_DA : out std_logic_vector(7 downto 0); - - I_CLKB : in std_logic := '0'; - I_WEB : in std_logic := '0'; - I_CEB : in std_logic := '0'; - I_ADDRB : in std_logic_vector(7 downto 0); - I_DB : in std_logic_vector(7 downto 0); - O_DB : out std_logic_vector(7 downto 0) - ); - end; - -architecture RTL of MC_OBJ_RAM is -begin - - ram_inst : work.dpram generic map(8,8) - port map - ( - clock_a => I_CLKA, - address_a => I_ADDRA, - data_a => I_DA, - q_a => O_DA, - enable_a => I_CEA, - wren_a => I_WEA, - - clock_b => I_CLKB, - address_b => I_ADDRB, - data_b => I_DB, - q_b => O_DB, - enable_b => I_CEB, - wren_b => I_WEB - ); -end RTL; - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - --- mc_video.v use -entity MC_VID_RAM is - port ( - I_CLKA : in std_logic := '0'; - I_WEA : in std_logic := '0'; - I_CEA : in std_logic := '0'; - I_ADDRA : in std_logic_vector(9 downto 0); - I_DA : in std_logic_vector(7 downto 0); - O_DA : out std_logic_vector(7 downto 0); - - I_CLKB : in std_logic := '0'; - I_WEB : in std_logic := '0'; - I_CEB : in std_logic := '0'; - I_ADDRB : in std_logic_vector(9 downto 0); - I_DB : in std_logic_vector(7 downto 0); - O_DB : out std_logic_vector(7 downto 0) - ); -end; - -architecture RTL of MC_VID_RAM is -begin - ram_inst : work.dpram generic map(10,8) - port map - ( - clock_a => I_CLKA, - address_a => I_ADDRA, - data_a => I_DA, - q_a => O_DA, - enable_a => I_CEA, - wren_a => I_WEA, - - clock_b => I_CLKB, - address_b => I_ADDRB, - data_b => I_DB, - q_b => O_DB, - enable_b => I_CEB, - wren_b => I_WEB - ); -end RTL; - -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - --- mc_video.v use -entity MC_LRAM is - port ( - I_CLK : in std_logic; - I_ADDR : in std_logic_vector(7 downto 0); - I_D : in std_logic_vector(4 downto 0); - I_WE : in std_logic; - O_Dn : out std_logic_vector(4 downto 0) - ); -end; - -architecture RTL of MC_LRAM is - signal W_D : std_logic_vector(4 downto 0) := (others => '0'); -begin - - O_Dn <= not W_D; - - ram_inst : work.dpram generic map(8,5) - port map - ( - clock_a => I_CLK, - address_a => I_ADDR, - data_a => I_D, - wren_a => not I_WE, - - clock_b => not I_CLK, - address_b => I_ADDR, - data_b => (others => '0'), - q_b => W_D, - enable_b => '1', - wren_b => '0' - ); -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_clocks.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_clocks.vhd deleted file mode 100644 index 014e6f7a..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_clocks.vhd +++ /dev/null @@ -1,88 +0,0 @@ ------------------------------------------------------------------------ --- FPGA MOONCRESTA CLOCK GEN --- --- Version : 1.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- ------------------------------------------------------------------------ -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -library unisim; - use unisim.vcomponents.all; - -entity CLOCKGEN is -port ( - CLKIN_IN : in std_logic; - RST_IN : in std_logic; - -- - O_CLK_24M : out std_logic; - O_CLK_18M : out std_logic; - O_CLK_12M : out std_logic; - O_CLK_06M : out std_logic -); -end; - -architecture RTL of CLOCKGEN is - signal state : std_logic_vector(1 downto 0) := (others => '0'); - signal ctr1 : std_logic_vector(1 downto 0) := (others => '0'); - signal ctr2 : std_logic_vector(2 downto 0) := (others => '0'); - signal CLKFB_IN : std_logic := '0'; - signal CLK0_BUF : std_logic := '0'; - signal CLKFX_BUF : std_logic := '0'; - signal CLK_72M : std_logic := '0'; - signal I_DCM_LOCKED : std_logic := '0'; - -begin - dcm_inst : DCM_SP - generic map ( - CLKFX_MULTIPLY => 9, - CLKFX_DIVIDE => 4, - CLKIN_PERIOD => 31.25 - ) - port map ( - CLKIN => CLKIN_IN, - CLKFB => CLKFB_IN, - RST => RST_IN, - CLK0 => CLK0_BUF, - CLKFX => CLKFX_BUF, - LOCKED => I_DCM_LOCKED - ); - - BUFG0 : BUFG port map (I=> CLK0_BUF, O => CLKFB_IN); - BUFG1 : BUFG port map (I=> CLKFX_BUF, O => CLK_72M); - O_CLK_06M <= ctr2(2); - O_CLK_12M <= ctr2(1); - O_CLK_24M <= ctr2(0); - O_CLK_18M <= ctr1(1); - - -- generate all clocks, 36Mhz, 18Mhz, 24Mhz, 12Mhz and 6Mhz - process(CLK_72M) - begin - if rising_edge(CLK_72M) then - if (I_DCM_LOCKED = '0') then - state <= "00"; - ctr1 <= (others=>'0'); - ctr2 <= (others=>'0'); - else - ctr1 <= ctr1 + 1; - case state is - when "00" => state <= "01"; ctr2 <= ctr2 + 1; - when "01" => state <= "10"; ctr2 <= ctr2 + 1; - when "10" => state <= "00"; - when "11" => state <= "00"; - when others => null; - end case; - end if; - end if; - end process; -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_col_pal.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_col_pal.vhd deleted file mode 100644 index c4dc06ad..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_col_pal.vhd +++ /dev/null @@ -1,78 +0,0 @@ -------------------------------------------------------------------------------- --- FPGA MOONCRESTA COLOR-PALETTE --- --- Version : 2.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 9-18 added Xilinx Device. K.Degawa -------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; --- use ieee.numeric_std.all; - ---library UNISIM; --- use UNISIM.Vcomponents.all; - -entity MC_COL_PAL is -port ( - I_CLK_12M : in std_logic; - I_CLK_6M : in std_logic; - I_VID : in std_logic_vector(1 downto 0); - I_COL : in std_logic_vector(2 downto 0); - I_C_BLnX : in std_logic; - - O_C_BLXn : out std_logic; - O_STARS_OFFn : out std_logic; - O_R : out std_logic_vector(2 downto 0); - O_G : out std_logic_vector(2 downto 0); - O_B : out std_logic_vector(2 downto 0) -); -end; - -architecture RTL of MC_COL_PAL is - --- Parts 6M -------------------------------------------------------- - signal W_COL_ROM_DO : std_logic_vector(7 downto 0) := (others => '0'); - signal W_6M_DI : std_logic_vector(6 downto 0) := (others => '0'); - signal W_6M_DO : std_logic_vector(6 downto 0) := (others => '0'); - signal W_6M_CLR : std_logic := '0'; - -begin - W_6M_DI <= I_COL(2 downto 0) & I_VID(1 downto 0) & not (I_VID(0) or I_VID(1)) & I_C_BLnX; - W_6M_CLR <= W_6M_DI(0) or W_6M_DO(0); - O_C_BLXn <= W_6M_DI(0) or W_6M_DO(0); - O_STARS_OFFn <= W_6M_DO(1); - ---always@(posedge I_CLK_6M or negedge W_6M_CLR) - process(I_CLK_6M, W_6M_CLR) - begin - if (W_6M_CLR = '0') then - W_6M_DO <= (others => '0'); - elsif rising_edge(I_CLK_6M) then - W_6M_DO <= W_6M_DI; - end if; - end process; - - --- COL ROM -------------------------------------------------------- ---wire W_COL_ROM_OEn = W_6M_DO[1]; - - galaxian_6l : entity work.GALAXIAN_6L - port map ( - CLK => I_CLK_12M, - ADDR => W_6M_DO(6 downto 2), - DATA => W_COL_ROM_DO - ); - - --- VID OUT -------------------------------------------------------- - O_R <= W_COL_ROM_DO(2 downto 0); - O_G <= W_COL_ROM_DO(5 downto 3); - O_B <= W_COL_ROM_DO(7 downto 6) & "0"; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_hv_count.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_hv_count.vhd deleted file mode 100644 index f310321b..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_hv_count.vhd +++ /dev/null @@ -1,145 +0,0 @@ ------------------------------------------------------------------------ --- FPGA MOONCRESTA H & V COUNTER --- --- Version : 2.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 9-22 ------------------------------------------------------------------------ --- MoonCrest hv_count --- H_CNT 0 - 255 , 384 - 511 Total 384 count --- V_CNT 0 - 255 , 504 - 511 Total 264 count -------------------------------------------------------------------------------------------- --- H_CNT[0], H_CNT[1], H_CNT[2], H_CNT[3], H_CNT[4], H_CNT[5], H_CNT[6], H_CNT[7], H_CNT[8], --- 1 H 2 H 4 H 8 H 16 H 32 H 64 H 128 H 256 H -------------------------------------------------------------------------------------------- --- V_CNT[0], V_CNT[1], V_CNT[2], V_CNT[3], V_CNT[4], V_CNT[5], V_CNT[6], V_CNT[7] --- 1 V 2 V 4 V 8 V 16 V 32 V 64 V 128 V -------------------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_HV_COUNT is - port( - I_CLK : in std_logic; - I_RSTn : in std_logic; - O_H_CNT : out std_logic_vector(8 downto 0); - O_H_SYNC : out std_logic; - O_H_BL : out std_logic; - O_V_BL2n : out std_logic; - O_V_CNT : out std_logic_vector(7 downto 0); - O_V_SYNC : out std_logic; - O_V_BLn : out std_logic; - O_C_BLn : out std_logic - ); -end; - -architecture RTL of MC_HV_COUNT is - signal H_CNT : std_logic_vector(8 downto 0) := (others => '0'); - signal V_CNT : std_logic_vector(8 downto 0) := (others => '0'); - signal H_SYNC : std_logic := '0'; - signal H_CLK : std_logic := '0'; - signal H_BL : std_logic := '0'; - signal V_BLn : std_logic := '0'; - signal V_BL2n : std_logic := '0'; - -begin ---------- H_COUNT ---------------------------------------- - - process(I_CLK) - begin - if rising_edge(I_CLK) then - if (H_CNT = 255) then - H_CNT <= std_logic_vector(to_unsigned(384, H_CNT'length)); - else - H_CNT <= H_CNT + 1 ; - end if; - end if; - end process; - - O_H_CNT <= H_CNT; - ---------- H_SYNC ---------------------------------------- - H_CLK <= H_CNT(4); - process(H_CLK, H_CNT(8)) - begin - if (H_CNT(8) = '0') then - H_SYNC <= '0'; - elsif rising_edge(H_CLK) then - H_SYNC <= (not H_CNT(6) ) and H_CNT(5); - end if; - end process; - - O_H_SYNC <= H_SYNC; - ---------- H_BL ------------------------------------------ - - process(I_CLK) - begin - if rising_edge(I_CLK) then - if H_CNT = 387 then - H_BL <= '1'; - elsif H_CNT = 503 then - H_BL <= '0'; - end if; - end if; - end process; - - O_H_BL <= H_BL; - ---------- V_COUNT ---------------------------------------- - process(H_SYNC, I_RSTn) - begin - if (I_RSTn = '0') then - V_CNT <= (others => '0'); - elsif rising_edge(H_SYNC) then - if (V_CNT = 255) then - V_CNT <= std_logic_vector(to_unsigned(504, V_CNT'length)); - else - V_CNT <= V_CNT + 1 ; - end if; - end if; - end process; - - O_V_CNT <= V_CNT(7 downto 0); - O_V_SYNC <= V_CNT(8); - ---------- V_BLn ------------------------------------------ - - process(H_SYNC) - begin - if rising_edge(H_SYNC) then - if V_CNT(7 downto 0) = 239 then - V_BLn <= '0'; - elsif V_CNT(7 downto 0) = 15 then - V_BLn <= '1'; - end if; - end if; - end process; - - process(H_SYNC) - begin - if rising_edge(H_SYNC) then - if V_CNT(7 downto 0) = 239 then - V_BL2n <= '0'; - elsif V_CNT(7 downto 0) = 16 then - V_BL2n <= '1'; - end if; - end if; - end process; - - O_V_BLn <= V_BLn; - O_V_BL2n <= V_BL2n; -------- C_BLn ------------------------------------------ - O_C_BLn <= V_BLn and (not H_CNT(8)); - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_inport.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_inport.vhd deleted file mode 100644 index 1d61cf9c..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_inport.vhd +++ /dev/null @@ -1,72 +0,0 @@ ------------------------------------------------------------------------ --- FPGA MOONCRESTA INPORT --- --- Version : 1.01 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004-4-30 galaxian modify by K.DEGAWA ------------------------------------------------------------------------ - --- DIP SW 0 1 2 3 4 5 ------------------------------------------------------------------ --- COIN CHUTE --- 1 COIN/1 PLAY 1'b0 1'b0 --- 2 COIN/1 PLAY 1'b1 1'b0 --- 1 COIN/2 PLAY 1'b0 1'b1 --- FREE PLAY 1'b1 1'b1 --- BOUNS --- 1'b0 1'b0 --- 1'b1 1'b0 --- 1'b0 1'b1 --- 1'b1 1'b1 --- LIVES --- 2 1'b0 --- 3 1'b1 -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_INPORT is -port ( - I_COIN1 : in std_logic; -- active high - I_COIN2 : in std_logic; -- active high - I_1P_LE : in std_logic; -- active high - I_1P_RI : in std_logic; -- active high - I_1P_SH : in std_logic; -- active high - I_2P_LE : in std_logic; - I_2P_RI : in std_logic; - I_2P_SH : in std_logic; - I_1P_START : in std_logic; -- active high - I_2P_START : in std_logic; -- active high - I_SW0_OE : in std_logic; - I_SW1_OE : in std_logic; - I_DIP_OE : in std_logic; - O_D : out std_logic_vector(7 downto 0) -); - -end; - -architecture RTL of MC_INPORT is - -signal W_TABLE : std_logic := '1'; -- UP TYPE = 1; - - signal W_SW0_DO : std_logic_vector(7 downto 0) := (others => '0'); - signal W_SW1_DO : std_logic_vector(7 downto 0) := (others => '0'); - signal W_DIP_DO : std_logic_vector(7 downto 0) := (others => '0'); - -begin - - W_SW0_DO <= x"00" when I_SW0_OE = '0' else "000" & I_1P_SH & I_1P_RI & I_1P_LE & I_COIN2 & I_COIN1; - W_SW1_DO <= x"00" when I_SW1_OE = '0' else "000" & I_2P_SH & I_2P_RI & I_2P_LE & I_2P_START & I_1P_START; - W_DIP_DO <= x"00" when I_DIP_OE = '0' else "00000110"; - O_D <= W_SW0_DO or W_SW1_DO or W_DIP_DO ; - -end RTL; \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_ld_pls.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_ld_pls.vhd deleted file mode 100644 index 0945fe35..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_ld_pls.vhd +++ /dev/null @@ -1,115 +0,0 @@ -------------------------------------------------------------------------------- --- FPGA MOONCRESTA VIDEO-LD_PLS_GEN --- --- Version : 2.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- --- 2004- 9-22 The problem where missile sometimes didn't come out was fixed. -------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_LD_PLS is - port ( - I_CLK_6M : in std_logic; - I_H_CNT : in std_logic_vector(8 downto 0); - I_3D_DI : in std_logic; - - O_LDn : out std_logic; - O_CNTRLDn : out std_logic; - O_CNTRCLRn : out std_logic; - O_COLLn : out std_logic; - O_VPLn : out std_logic; - O_OBJDATALn : out std_logic; - O_MLDn : out std_logic; - O_SLDn : out std_logic - ); -end; - -architecture RTL of MC_LD_PLS is - signal W_4C1_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_4C2_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_4C1_Q3 : std_logic := '0'; - signal W_4C2_B : std_logic := '0'; - signal W_4D1_G : std_logic := '0'; - signal W_4D1_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_4D2_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_5C_Q : std_logic := '0'; - signal W_HCNT : std_logic := '0'; -begin - O_LDn <= W_4D1_G; - O_CNTRLDn <= W_4D1_Q(2); - O_CNTRCLRn <= W_4D1_Q(0); - O_COLLn <= W_4D2_Q(2); - O_VPLn <= W_4D2_Q(0); - O_OBJDATALn <= W_4C1_Q(2); - O_MLDn <= W_4C2_Q(0); - O_SLDn <= W_4C2_Q(1); - W_4D1_G <= not (I_H_CNT(0) and I_H_CNT(1) and I_H_CNT(2)); - W_HCNT <= not (I_H_CNT(6) and I_H_CNT(5) and I_H_CNT(4) and I_H_CNT(3)); - -- Parts 4D - u_4d1 : entity work.LOGIC_74XX139 - port map( - I_G => W_4D1_G, - I_Sel(1) => I_H_CNT(8), - I_Sel(0) => I_H_CNT(3), - O_Q =>W_4D1_Q - ); - - u_4d2 : entity work.LOGIC_74XX139 - port map( - I_G => W_5C_Q, - I_Sel(1) => I_H_CNT(2), - I_Sel(0) => I_H_CNT(1), - O_Q => W_4D2_Q - ); - - -- Parts 4C - u_4c1 : entity work.LOGIC_74XX139 - port map( - I_G => W_4D2_Q(1), - I_Sel(1) => I_H_CNT(8), - I_Sel(0) => I_H_CNT(3), - O_Q => W_4C1_Q - ); - - u_4c2 : entity work.LOGIC_74XX139 - port map( - I_G => W_4D1_Q(3), - I_Sel(1) => W_4C2_B, - I_Sel(0) => W_HCNT, - O_Q => W_4C2_Q - ); - - process(I_CLK_6M) - begin - if falling_edge(I_CLK_6M) then - W_5C_Q <= I_H_CNT(0); - end if; - end process; - - -- 2004-9-22 added - process(I_CLK_6M) - begin - if rising_edge(I_CLK_6M) then - W_4C1_Q3 <= W_4C1_Q(3); - end if; - end process; - - process(W_4C1_Q3) - begin - if rising_edge(W_4C1_Q3) then - W_4C2_B <= I_3D_DI; - end if; - end process; - -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_logic.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_logic.vhd deleted file mode 100644 index 5dae8a87..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_logic.vhd +++ /dev/null @@ -1,92 +0,0 @@ -------------------------------------------------------------------------------- --- FPGA MOONCRESTA LOGIC IP MODULE --- --- Version : 1.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- -------------------------------------------------------------------------------- - -library ieee; - use ieee.std_logic_1164.all; - use ieee.numeric_std.all; - -------------------------------------------------------------------------------- --- 74xx138 --- 3-to-8 line decoder -------------------------------------------------------------------------------- -entity LOGIC_74XX138 is - port ( - I_G1 : in std_logic; - I_G2a : in std_logic; - I_G2b : in std_logic; - I_Sel : in std_logic_vector(2 downto 0); - O_Q : out std_logic_vector(7 downto 0) - ); -end logic_74xx138; - -architecture RTL of LOGIC_74XX138 is - signal I_G : std_logic_vector(2 downto 0) := (others => '0'); - -begin - I_G <= I_G1 & I_G2a & I_G2b; - - xx138 : process(I_G, I_Sel) - begin - if(I_G = "100" ) then - case I_Sel is - when "000" => O_Q <= "11111110"; - when "001" => O_Q <= "11111101"; - when "010" => O_Q <= "11111011"; - when "011" => O_Q <= "11110111"; - when "100" => O_Q <= "11101111"; - when "101" => O_Q <= "11011111"; - when "110" => O_Q <= "10111111"; - when "111" => O_Q <= "01111111"; - when others => null; - end case; - else - O_Q <= (others => '1'); - end if; - end process; -end RTL; - -library ieee; - use ieee.std_logic_1164.all; - use ieee.numeric_std.all; - -------------------------------------------------------------------------------- --- 74xx139 --- 2-to-4 line decoder -------------------------------------------------------------------------------- -entity LOGIC_74XX139 is - port ( - I_G : in std_logic; - I_Sel : in std_logic_vector(1 downto 0); - O_Q : out std_logic_vector(3 downto 0) - ); -end; - -architecture RTL of LOGIC_74XX139 is -begin - xx139 : process (I_G, I_Sel) - begin - if I_G = '0' then - case I_Sel is - when "00" => O_Q <= "1110"; - when "01" => O_Q <= "1101"; - when "10" => O_Q <= "1011"; - when "11" => O_Q <= "0111"; - when others => null; - end case; - else - O_Q <= "1111"; - end if; - end process; -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_missile.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_missile.vhd deleted file mode 100644 index c5aa6633..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_missile.vhd +++ /dev/null @@ -1,107 +0,0 @@ --------------------------------------------------------------------------------- ----- FPGA MOONCRESTA VIDEO-MISSILE ----- ----- Version : 2.00 ----- ----- Copyright(c) 2004 Katsumi Degawa , All rights reserved ----- ----- Important ! ----- ----- This program is freeware for non-commercial use. ----- The author does not guarantee this program. ----- You can use this at your own risk. ----- ----- 2004- 9-22 The problem which missile didn't sometimes come out from was improved. --------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_MISSILE is - port( - I_CLK_6M : in std_logic; - I_CLK_18M : in std_logic; - I_C_BLn_X : in std_logic; - I_MLDn : in std_logic; - I_SLDn : in std_logic; - I_HPOS : in std_logic_vector (7 downto 0); - - O_MISSILEn : out std_logic; - O_SHELLn : out std_logic - ); -end; - -architecture RTL of MC_MISSILE is - signal W_45R_Q : std_logic_vector (7 downto 0) := (others => '0'); - signal W_45S_Q : std_logic_vector (7 downto 0) := (others => '0'); - signal W_5P1_Q : std_logic := '0'; - signal W_5P2_Q : std_logic := '0'; - signal W_5P1_CLK : std_logic := '0'; - signal W_5P2_CLK : std_logic := '0'; -begin - - O_MISSILEn <= W_5P1_CLK; - O_SHELLn <= W_5P2_CLK; - - -- missile counter - process(I_CLK_6M) - begin - if falling_edge(I_CLK_6M) then - if (I_MLDn = '0') then - W_45R_Q <= I_HPOS; - else - if (I_C_BLn_X = '1') then - W_45R_Q <= W_45R_Q + 1; - if (W_45R_Q(7 downto 2) = "111111") and W_5P1_Q = '1' then - W_5P1_CLK <= '0'; - else - W_5P1_CLK <= '1'; - end if; - end if; - end if; - end if; - end process; - - -- shell counter - process(I_CLK_6M) - begin - if falling_edge(I_CLK_6M) then - if(I_SLDn = '0') then - W_45S_Q <= I_HPOS; - else - if(I_C_BLn_X = '1') then - W_45S_Q <= W_45S_Q + 1; - if (W_45S_Q(7 downto 2) = "111111") and W_5P2_Q = '1' then - W_5P2_CLK <= '0'; - else - W_5P2_CLK <= '1'; - end if; - end if; - end if; - end if; - end process; - - -- Standard D-type flip-flop with D input tied low, async active - -- low preset (I_MLDn) and clock active on rising edge (W_5P1_CLK) - process(W_5P1_CLK, I_MLDn) - begin - if (I_MLDn = '0') then - W_5P1_Q <= '1'; - elsif rising_edge(W_5P1_CLK) then - W_5P1_Q <= '0'; - end if; - end process; - - -- Standard D-type flip-flop with D input tied low, async active - -- low preset (I_SLDn) and clock active on rising edge (W_5P2_CLK) - process(W_5P2_CLK, I_SLDn) - begin - if (I_SLDn = '0') then - W_5P2_Q <= '1'; - elsif rising_edge(W_5P2_CLK) then - W_5P2_Q <= '0'; - end if; - end process; - -end RTL; \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_a.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_a.vhd deleted file mode 100644 index ee0c66be..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_a.vhd +++ /dev/null @@ -1,117 +0,0 @@ ------------------------------------------------------------------------------- --- FPGA MOONCRESTA SOUND I/F --- --- Version : 1.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- ------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - use IEEE.std_logic_arith.all; - -entity MC_SOUND_A is -port ( - I_CLK_12M : in std_logic; - I_CLK_6M : in std_logic; - I_H_CNT1 : in std_logic; - I_BD : in std_logic_vector(7 downto 0); - I_PITCH : in std_logic; - I_VOL1 : in std_logic; - I_VOL2 : in std_logic; - - O_SDAT : out std_logic_vector(7 downto 0); - O_DO : out std_logic_vector(3 downto 0) -); -end; - -architecture RTL of MC_SOUND_A is - signal W_PITCH : std_logic := '0'; - signal W_89K_LDn : std_logic := '0'; - signal W_89K_Q : std_logic_vector(7 downto 0) := (others => '0'); - signal W_89K_LDATA : std_logic_vector(7 downto 0) := (others => '0'); - signal W_6T_Q : std_logic_vector(3 downto 0) := (others => '0'); - signal W_SDAT0 : std_logic_vector(7 downto 0) := (others => '0'); - signal W_SDAT2 : std_logic_vector(7 downto 0) := (others => '0'); - signal W_SDAT3 : std_logic_vector(7 downto 0) := (others => '0'); - -begin - O_DO <= W_6T_Q; - - process (I_CLK_12M) - begin - if rising_edge(I_CLK_12M) then - W_PITCH <= I_PITCH; - if (W_89K_Q = x"ff") then - W_89K_LDn <= '0' ; - else - W_89K_LDn <= '1' ; - end if; - end if; - end process; - - -- Parts 9J - process (W_PITCH) - begin - if falling_edge(W_PITCH) then - W_89K_LDATA <= I_BD; - end if; - end process; - - process (I_H_CNT1) - begin - if rising_edge(I_H_CNT1) then - if (W_89K_LDn = '0') then - W_89K_Q <= W_89K_LDATA; - else - W_89K_Q <= W_89K_Q + 1; - end if; - end if; - end process; - - process (W_89K_LDn) - begin - if falling_edge(W_89K_LDn) then - W_6T_Q <= W_6T_Q + 1; - end if; - end process; - - process (I_CLK_6M) - begin - if rising_edge(I_CLK_6M) then - O_SDAT <= (x"14" + W_SDAT3) + (W_SDAT0 + W_SDAT2); - - if W_6T_Q(0)='1' then - W_SDAT0 <= x"2a"; - else - W_SDAT0 <= (others => '0'); - end if; - - if W_6T_Q(2)='1' then - if I_VOL1 = '1' then - W_SDAT2 <= x"69"; - else - W_SDAT2 <= x"39"; - end if; - else - W_SDAT2 <= (others => '0'); - end if; - - if (W_6T_Q(3)='1') and (I_VOL2 = '1') then - W_SDAT3 <= x"48" ; - else - W_SDAT3 <= (others => '0'); - end if; - - end if; - end process; - -end; \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_b.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_b.vhd deleted file mode 100644 index b74e4bb1..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_b.vhd +++ /dev/null @@ -1,253 +0,0 @@ --------------------------------------------------------------------------------- ----- FPGA MOONCRESTA WAVE SOUND ----- ----- Version : 1.00 ----- ----- Copyright(c) 2004 Katsumi Degawa , All rights reserved ----- ----- Important ! ----- ----- This program is freeware for non-commercial use. ----- The author does no guarantee this program. ----- You can use this at your own risk. ----- --------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - ---pragma translate_off --- use ieee.std_logic_textio.all; --- use std.textio.all; ---pragma translate_on - -entity MC_SOUND_B is - port( - I_CLK1 : in std_logic; -- 6MHz - I_RSTn : in std_logic; - I_SW : in std_logic_vector( 2 downto 0); - I_DAC : in std_logic_vector( 3 downto 0); - I_FS : in std_logic_vector( 2 downto 0); - O_SDAT : out std_logic_vector( 7 downto 0) - ); -end; - -architecture RTL of MC_SOUND_B is -constant sample_time : integer := 557; -- sample time : 557 = 11025Hz, 557/2 = 22050Hz -constant fire_cnt : std_logic_vector(15 downto 0) := x"2000"; -constant hit_cnt : std_logic_vector(15 downto 0) := x"2000"; - -signal sample : std_logic_vector(10 downto 0) := (others => '0'); -signal sample_pls : std_logic := '0'; -signal s0_trg_ff : std_logic_vector( 1 downto 0) := (others => '0'); -signal s0_trg : std_logic := '0'; -signal s1_trg_ff : std_logic_vector( 1 downto 0) := (others => '0'); -signal s1_trg : std_logic := '0'; -signal fire_addr : std_logic_vector(15 downto 0) := (others => '0'); -signal hit_addr : std_logic_vector(15 downto 0) := (others => '0'); - -signal WAV_D0 : std_logic_vector( 7 downto 0) := (others => '0'); -signal WAV_D1 : std_logic_vector( 7 downto 0) := (others => '0'); - -signal W_VCO1_STEP: std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO2_STEP: std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO3_STEP: std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO1_OUT : std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO2_OUT : std_logic_vector( 7 downto 0) := (others => '0'); -signal W_VCO3_OUT : std_logic_vector( 7 downto 0) := (others => '0'); -signal VCO_CTR : std_logic_vector(24 downto 0) := (others => '0'); - -signal SDAT : std_logic_vector(10 downto 0) := (others => '0'); - -begin - -- ideally we should divide by 5 because this is the sum of 5 channels - -- but in practice we divide by 4 and just clip sounds that are too loud. - O_SDAT <= SDAT(9 downto 2) when SDAT(10) = '0' else (others=>'1'); -- clip overrange sounds - - process(I_CLK1) - begin - if rising_edge(I_CLK1) then - SDAT <= ("000" & W_VCO3_OUT) + ( ( ("000" & W_VCO2_OUT) + ("000" & W_VCO1_OUT) ) + ( ("000" & WAV_D0) + ("000" & WAV_D1) ) ); - end if; - end process; - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - sample <= (others => '0'); - sample_pls <= '0'; - elsif rising_edge(I_CLK1) then - if (sample = sample_time - 1) then - sample <= (others => '0'); - sample_pls <= '1'; - else - sample <= sample + 1; - sample_pls <= '0'; - end if; - end if; - end process; - -------------- FIRE SOUND ------------------------------------------ - mc_roms_fire : entity work.GAL_FIR - port map ( - CLK => I_CLK1, - ADDR => fire_addr(12 downto 0), - DATA => WAV_D0 - ); - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - s0_trg_ff <= (others => '0'); - s0_trg <= '0'; - elsif rising_edge(I_CLK1) then - s0_trg_ff(0) <= I_SW(0); - s0_trg_ff(1) <= s0_trg_ff(0); - s0_trg <= not s0_trg_ff(1) and s0_trg_ff(0); - end if; - end process; - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - fire_addr <= fire_cnt; - elsif rising_edge(I_CLK1) then - if (s0_trg = '1') then - fire_addr <= (others => '0'); - else - if(sample_pls = '1') then - if(fire_addr <= fire_cnt) then - fire_addr <= fire_addr + 1; - else - fire_addr <= fire_addr ; - end if; - end if; - end if; - end if; - end process; - -------------- HIT SOUND ------------------------------------------ - mc_roms_hit : entity work.GAL_HIT - port map ( - CLK => I_CLK1, - ADDR => hit_addr(12 downto 0), - DATA => WAV_D1 - ); - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - s1_trg_ff <= (others => '0'); - s1_trg <= '0'; - elsif rising_edge(I_CLK1) then - s1_trg_ff(0) <= I_SW(1); - s1_trg_ff(1) <= s1_trg_ff(0); - s1_trg <= not s1_trg_ff(1) and s1_trg_ff(0); - end if; - end process; - - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - hit_addr <= hit_cnt; - elsif rising_edge(I_CLK1) then - if (s1_trg = '1') then - hit_addr <= (others => '0'); - else - if (sample_pls = '1') then - if (hit_addr <= hit_cnt) then - hit_addr <= hit_addr + 1 ; - else - hit_addr <= hit_addr ; - end if; - end if; - end if; - end if; - end process; - ---------------- EFFECT SOUND --------------------------------------- - --- 9R modulator voltage generator based on DAC value - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - VCO_CTR <= (others=>'0'); - elsif rising_edge(I_CLK1) then - VCO_CTR <= VCO_CTR + (not I_DAC); - end if; - end process; - - -- modulator frequency lookup tables for the three VCOs - process(I_CLK1, I_RSTn) - begin - if (I_RSTn = '0') then - elsif rising_edge(I_CLK1) then - case VCO_CTR(23 downto 19) is - when "00000" => W_VCO1_STEP <= x"2A"; W_VCO2_STEP <= x"3A"; W_VCO3_STEP <= x"54"; - when "00001" => W_VCO1_STEP <= x"29"; W_VCO2_STEP <= x"39"; W_VCO3_STEP <= x"53"; - when "00010" => W_VCO1_STEP <= x"29"; W_VCO2_STEP <= x"38"; W_VCO3_STEP <= x"52"; - when "00011" => W_VCO1_STEP <= x"28"; W_VCO2_STEP <= x"37"; W_VCO3_STEP <= x"50"; - when "00100" => W_VCO1_STEP <= x"28"; W_VCO2_STEP <= x"37"; W_VCO3_STEP <= x"4F"; - when "00101" => W_VCO1_STEP <= x"27"; W_VCO2_STEP <= x"36"; W_VCO3_STEP <= x"4E"; - when "00110" => W_VCO1_STEP <= x"27"; W_VCO2_STEP <= x"35"; W_VCO3_STEP <= x"4D"; - when "00111" => W_VCO1_STEP <= x"26"; W_VCO2_STEP <= x"34"; W_VCO3_STEP <= x"4C"; - when "01000" => W_VCO1_STEP <= x"25"; W_VCO2_STEP <= x"33"; W_VCO3_STEP <= x"4A"; - when "01001" => W_VCO1_STEP <= x"25"; W_VCO2_STEP <= x"33"; W_VCO3_STEP <= x"49"; - when "01010" => W_VCO1_STEP <= x"24"; W_VCO2_STEP <= x"32"; W_VCO3_STEP <= x"48"; - when "01011" => W_VCO1_STEP <= x"24"; W_VCO2_STEP <= x"31"; W_VCO3_STEP <= x"47"; - when "01100" => W_VCO1_STEP <= x"23"; W_VCO2_STEP <= x"30"; W_VCO3_STEP <= x"46"; - when "01101" => W_VCO1_STEP <= x"23"; W_VCO2_STEP <= x"2F"; W_VCO3_STEP <= x"44"; - when "01110" => W_VCO1_STEP <= x"22"; W_VCO2_STEP <= x"2F"; W_VCO3_STEP <= x"43"; - when "01111" => W_VCO1_STEP <= x"21"; W_VCO2_STEP <= x"2E"; W_VCO3_STEP <= x"42"; - when "10000" => W_VCO1_STEP <= x"21"; W_VCO2_STEP <= x"2D"; W_VCO3_STEP <= x"41"; - when "10001" => W_VCO1_STEP <= x"20"; W_VCO2_STEP <= x"2C"; W_VCO3_STEP <= x"40"; - when "10010" => W_VCO1_STEP <= x"20"; W_VCO2_STEP <= x"2B"; W_VCO3_STEP <= x"3F"; - when "10011" => W_VCO1_STEP <= x"1F"; W_VCO2_STEP <= x"2B"; W_VCO3_STEP <= x"3D"; - when "10100" => W_VCO1_STEP <= x"1F"; W_VCO2_STEP <= x"2A"; W_VCO3_STEP <= x"3C"; - when "10101" => W_VCO1_STEP <= x"1E"; W_VCO2_STEP <= x"29"; W_VCO3_STEP <= x"3B"; - when "10110" => W_VCO1_STEP <= x"1E"; W_VCO2_STEP <= x"28"; W_VCO3_STEP <= x"3A"; - when "10111" => W_VCO1_STEP <= x"1D"; W_VCO2_STEP <= x"28"; W_VCO3_STEP <= x"39"; - when "11000" => W_VCO1_STEP <= x"1C"; W_VCO2_STEP <= x"27"; W_VCO3_STEP <= x"37"; - when "11001" => W_VCO1_STEP <= x"1C"; W_VCO2_STEP <= x"26"; W_VCO3_STEP <= x"36"; - when "11010" => W_VCO1_STEP <= x"1B"; W_VCO2_STEP <= x"25"; W_VCO3_STEP <= x"35"; - when "11011" => W_VCO1_STEP <= x"1B"; W_VCO2_STEP <= x"24"; W_VCO3_STEP <= x"34"; - when "11100" => W_VCO1_STEP <= x"1A"; W_VCO2_STEP <= x"24"; W_VCO3_STEP <= x"33"; - when "11101" => W_VCO1_STEP <= x"1A"; W_VCO2_STEP <= x"23"; W_VCO3_STEP <= x"32"; - when "11110" => W_VCO1_STEP <= x"19"; W_VCO2_STEP <= x"22"; W_VCO3_STEP <= x"30"; - when "11111" => W_VCO1_STEP <= x"18"; W_VCO2_STEP <= x"21"; W_VCO3_STEP <= x"2F"; - when others => null; - end case; - end if; - end process; - --- 8R VCO 240Hz - 140Hz (8) - mc_vco1 : entity work.MC_SOUND_VCO - port map ( - I_CLK => I_CLK1, - I_RSTn => I_RSTn, - I_FS => I_FS(0), - I_STEP => W_VCO1_STEP, - O_WAV => W_VCO1_OUT - ); - --- 8S VCO 330Hz - 190Hz (11) - mc_vco2 : entity work.MC_SOUND_VCO - port map ( - I_CLK => I_CLK1, - I_RSTn => I_RSTn, - I_FS => I_FS(1), - I_STEP => W_VCO2_STEP, - O_WAV => W_VCO2_OUT - ); - --- 8T VCO 480Hz - 270Hz (16) - mc_vco3 : entity work.MC_SOUND_VCO - port map ( - I_CLK => I_CLK1, - I_RSTn => I_RSTn, - I_FS => I_FS(2), - I_STEP => W_VCO3_STEP, - O_WAV => W_VCO3_OUT - ); -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_vco.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_vco.vhd deleted file mode 100644 index e2a63e85..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_sound_vco.vhd +++ /dev/null @@ -1,49 +0,0 @@ --------------------------------------------------------------------------------- ----- FPGA VCO --------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -use work.sine_package.all; - --- O_CLK = (I_CLK / 2^20) * I_STEP -entity MC_SOUND_VCO is - port( - I_CLK : in std_logic; - I_RSTn : in std_logic; - I_FS : in std_logic; - I_STEP : in std_logic_vector( 7 downto 0); - O_WAV : out std_logic_vector( 7 downto 0) - ); -end; - -architecture RTL of MC_SOUND_VCO is - signal VCO1_CTR : std_logic_vector(19 downto 0) := (others => '0'); - signal sine : std_logic_vector(14 downto 0) := (others => '0'); - -begin - O_WAV <= sine(14 downto 7); - process(I_CLK, I_RSTn) - begin - if (I_RSTn = '0') then - VCO1_CTR <= (others=>'0'); - elsif rising_edge(I_CLK) then - if I_FS = '1' then - VCO1_CTR <= VCO1_CTR + I_STEP; - case VCO1_CTR(19 downto 18) is - when "00" => - sine <= "100000000000000" + std_logic_vector( to_signed(get_table_value( VCO1_CTR(17 downto 11)), 15)); - when "01" => - sine <= "100000000000000" + std_logic_vector( to_signed(get_table_value( not VCO1_CTR(17 downto 11)), 15)); - when "10" => - sine <= "100000000000000" + std_logic_vector(-to_signed(get_table_value( VCO1_CTR(17 downto 11)), 15)); - when "11" => - sine <= "100000000000000" + std_logic_vector(-to_signed(get_table_value( not VCO1_CTR(17 downto 11)), 15)); - when others => null; - end case; - end if; - end if; - end process; -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_stars.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_stars.vhd deleted file mode 100644 index b91197b3..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_stars.vhd +++ /dev/null @@ -1,90 +0,0 @@ ------------------------------------------------------------------------------- --- FPGA MOONCRESTA STARS --- --- Version : 2.00 --- --- Copyright(c) 2004 Katsumi Degawa , All rights reserved --- --- Important ! --- --- This program is freeware for non-commercial use. --- The author does not guarantee this program. --- You can use this at your own risk. --- ------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.numeric_std.all; - -entity MC_STARS is - port ( - I_CLK_18M : in std_logic; - I_CLK_6M : in std_logic; - I_H_FLIP : in std_logic; - I_V_SYNC : in std_logic; - I_8HF : in std_logic; - I_256HnX : in std_logic; - I_1VF : in std_logic; - I_2V : in std_logic; - I_STARS_ON : in std_logic; - I_STARS_OFFn : in std_logic; - - O_R : out std_logic_vector(1 downto 0); - O_G : out std_logic_vector(1 downto 0); - O_B : out std_logic_vector(1 downto 0); - O_NOISE : out std_logic - ); -end; - -architecture RTL of MC_STARS is - signal CLK_1C : std_logic := '0'; - signal W_2D_Qn : std_logic := '0'; - - signal W_3B : std_logic := '0'; - signal noise : std_logic := '0'; - signal W_2A : std_logic := '0'; - signal W_4P : std_logic := '0'; - signal CLK_1AB : std_logic := '0'; - signal W_1AB_Q : std_logic_vector(15 downto 0) := (others => '0'); - signal W_1C_Q : std_logic_vector( 1 downto 0) := (others => '0'); -begin - O_R <= (W_1AB_Q( 9) & W_1AB_Q (8) ) when (W_2A = '0' and W_4P = '0') else (others => '0'); - O_G <= (W_1AB_Q(11) & W_1AB_Q(10) ) when (W_2A = '0' and W_4P = '0') else (others => '0'); - O_B <= (W_1AB_Q(13) & W_1AB_Q(12) ) when (W_2A = '0' and W_4P = '0') else (others => '0'); - - CLK_1C <= not (I_CLK_18M and (not I_CLK_6M )and (not I_V_SYNC) and I_256HnX); - CLK_1AB <= not (CLK_1C or (not (I_H_FLIP or W_1C_Q(1)))); - W_3B <= W_2D_Qn xor W_1AB_Q(4); - - W_2A <= '0' when (W_1AB_Q(7 downto 0) = x"ff") else '1'; - W_4P <= not (( I_8HF xor I_1VF ) and W_2D_Qn and I_STARS_OFFn); - - O_NOISE <= noise ; - - process(I_2V) - begin - if rising_edge(I_2V) then - noise <= W_2D_Qn; - end if; - end process; - - process(CLK_1C, I_V_SYNC) - begin - if(I_V_SYNC = '1') then - W_1C_Q <= (others => '0'); - elsif rising_edge(CLK_1C) then - W_1C_Q <= W_1C_Q(0) & '1'; - end if; - end process; - - process(CLK_1AB, I_STARS_ON) - begin - if(I_STARS_ON = '0') then - W_1AB_Q <= (others => '0'); - W_2D_Qn <= '1'; - elsif rising_edge(CLK_1AB) then - W_1AB_Q <= W_1AB_Q(14 downto 0) & W_3B; - W_2D_Qn <= not W_1AB_Q(15); - end if; - end process; -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_video.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_video.vhd deleted file mode 100644 index dbe0d0d8..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mc_video.vhd +++ /dev/null @@ -1,433 +0,0 @@ --------------------------------------------------------------------------------- ----- FPGA GALAXIAN VIDEO ----- ----- Version : 2.50 ----- ----- Copyright(c) 2004 Katsumi Degawa , All rights reserved ----- ----- Important ! ----- ----- This program is freeware for non-commercial use. ----- The author does not guarantee this program. ----- You can use this at your own risk. ----- ----- 2004- 4-30 galaxian modify by K.DEGAWA ----- 2004- 5- 6 first release. ----- 2004- 8-23 Improvement with T80-IP. ----- 2004- 9-22 The problem where missile sometimes didn't come out was fixed. --------------------------------------------------------------------------------- - -------------------------------------------------------------------------------------------- --- H_CNT(0), H_CNT(1), H_CNT(2), H_CNT(3), H_CNT(4), H_CNT(5), H_CNT(6), H_CNT(7), H_CNT(8), --- 1 H 2 H 4 H 8 H 16 H 32H 64 H 128 H 256 H -------------------------------------------------------------------------------------------- --- V_CNT(0), V_CNT(1), V_CNT(2), V_CNT(3), V_CNT(4), V_CNT(5), V_CNT(6), V_CNT(7) --- 1 V 2 V 4 V 8 V 16 V 32 V 64 V 128 V -------------------------------------------------------------------------------------------- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_unsigned.all; - use ieee.numeric_std.all; - -entity MC_VIDEO is - port( - I_CLK_18M : in std_logic; - I_CLK_12M : in std_logic; - I_CLK_6M : in std_logic; - I_H_CNT : in std_logic_vector(8 downto 0); - I_V_CNT : in std_logic_vector(7 downto 0); - I_H_FLIP : in std_logic; - I_V_FLIP : in std_logic; - I_V_BLn : in std_logic; - I_C_BLn : in std_logic; - - I_A : in std_logic_vector(9 downto 0); - I_BD : in std_logic_vector(7 downto 0); - I_OBJ_SUB_A : in std_logic_vector(2 downto 0); - I_OBJ_RAM_RQ : in std_logic; - I_OBJ_RAM_RD : in std_logic; - I_OBJ_RAM_WR : in std_logic; - I_VID_RAM_RD : in std_logic; - I_VID_RAM_WR : in std_logic; - I_DRIVER_WR : in std_logic; - - O_C_BLnX : out std_logic; - O_8HF : out std_logic; - O_256HnX : out std_logic; - O_1VF : out std_logic; - O_MISSILEn : out std_logic; - O_SHELLn : out std_logic; - - O_BD : out std_logic_vector(7 downto 0); - O_VID : out std_logic_vector(1 downto 0); - O_COL : out std_logic_vector(2 downto 0) - ); -end; - -architecture RTL of MC_VIDEO is - - signal WB_LDn : std_logic := '0'; - signal WB_CNTRLDn : std_logic := '0'; - signal WB_CNTRCLRn : std_logic := '0'; - signal WB_COLLn : std_logic := '0'; - signal WB_VPLn : std_logic := '0'; - signal WB_OBJDATALn : std_logic := '0'; - signal WB_MLDn : std_logic := '0'; - signal WB_SLDn : std_logic := '0'; - signal W_3D : std_logic := '0'; - signal W_LDn : std_logic := '0'; - signal W_CNTRLDn : std_logic := '0'; - signal W_CNTRCLRn : std_logic := '0'; - signal W_COLLn : std_logic := '0'; - signal W_VPLn : std_logic := '0'; - signal W_OBJDATALn : std_logic := '0'; - signal W_MLDn : std_logic := '0'; - signal W_SLDn : std_logic := '0'; - signal W_VID : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_COL : std_logic_vector( 2 downto 0) := (others => '0'); - - signal W_H_POSI : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_2M_Q : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_6K_Q : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_6P_Q : std_logic_vector( 6 downto 0) := (others => '0'); - signal W_45T_Q : std_logic_vector( 7 downto 0) := (others => '0'); - signal reg_2KL : std_logic_vector( 7 downto 0) := (others => '0'); - signal reg_2HJ : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_RV : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_RC : std_logic_vector( 2 downto 0) := (others => '0'); - - signal W_O_OBJ_ROM_A : std_logic_vector(10 downto 0) := (others => '0'); - signal W_VID_RAM_A : std_logic_vector(11 downto 0) := (others => '0'); - signal W_VID_RAM_AA : std_logic_vector(11 downto 0) := (others => '0'); - signal W_VID_RAM_AB : std_logic_vector(11 downto 0) := (others => '0'); - signal C_2HJ : std_logic_vector( 1 downto 0) := (others => '0'); - signal C_2KL : std_logic_vector( 1 downto 0) := (others => '0'); - signal W_CD : std_logic_vector( 2 downto 0) := (others => '0'); - signal W_1M : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_3L_A : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_3L_B : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_3L_Y : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_LRAM_DI : std_logic_vector( 4 downto 0) := (others => '0'); - signal W_LRAM_DO : std_logic_vector( 4 downto 0) := (others => '0'); - signal W_1H_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_1K_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_LRAM_A : std_logic_vector( 7 downto 0) := (others => '0'); --- signal W_OBJ_RAM_A : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_RAM_AB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_RAM_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_RAM_DOA : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_RAM_DOB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_ROM_A : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_OBJ_ROM_AB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VF_CNT : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VID_RAM_D : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VID_RAM_DI : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VID_RAM_DOA : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_VID_RAM_DOB : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_HF_CNT : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_45N_Q : std_logic_vector( 7 downto 0) := (others => '0'); - signal W_6J_Q : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_6J_DA : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_6J_DB : std_logic_vector( 3 downto 0) := (others => '0'); - signal W_256HnX : std_logic := '0'; - signal W_2N : std_logic := '0'; - signal W_45T_CLR : std_logic := '0'; - signal W_C_BLnX : std_logic := '0'; - signal W_H_FLIP1 : std_logic := '0'; - signal W_H_FLIP2 : std_logic := '0'; - signal W_H_FLIP1X : std_logic := '0'; - signal W_H_FLIP2X : std_logic := '0'; - signal W_LRAM_AND : std_logic := '0'; - signal W_RAW0 : std_logic := '0'; - signal W_RAW1 : std_logic := '0'; - signal W_RAW_OR : std_logic := '0'; - signal W_SRCLK : std_logic := '0'; - signal W_SRLD : std_logic := '0'; - signal W_VID_RAM_CS : std_logic := '0'; - signal W_CLK_6Mn : std_logic := '0'; - -begin - ld_pls : entity work.MC_LD_PLS - port map( - I_CLK_6M => I_CLK_6M, - I_H_CNT => I_H_CNT, - I_3D_DI => W_3D, - - O_LDn => WB_LDn, - O_CNTRLDn => WB_CNTRLDn, - O_CNTRCLRn => WB_CNTRCLRn, - O_COLLn => WB_COLLn, - O_VPLn => WB_VPLn, - O_OBJDATALn => WB_OBJDATALn, - O_MLDn => WB_MLDn, - O_SLDn => WB_SLDn - ); - - obj_ram : entity work.MC_OBJ_RAM - port map( - I_CLKA => I_CLK_12M, - I_ADDRA => I_A(7 downto 0), - I_WEA => I_OBJ_RAM_WR, - I_CEA => I_OBJ_RAM_RQ, - I_DA => I_BD, - O_DA => W_OBJ_RAM_DOA, - - I_CLKB => I_CLK_12M, - I_ADDRB => W_OBJ_RAM_AB, - I_WEB => '0', - I_CEB => '1', - I_DB => x"00", - O_DB => W_OBJ_RAM_DOB - ); - - lram : entity work.MC_LRAM - port map( - I_CLK => I_CLK_18M, - I_ADDR => W_LRAM_A, - I_WE => W_CLK_6Mn, - I_D => W_LRAM_DI, - O_Dn => W_LRAM_DO - ); - - missile : entity work.MC_MISSILE - port map( - I_CLK_18M => I_CLK_18M, - I_CLK_6M => I_CLK_6M, - I_C_BLn_X => W_C_BLnX, - I_MLDn => W_MLDn, - I_SLDn => W_SLDn, - I_HPOS => W_H_POSI, - O_MISSILEn => O_MISSILEn, - O_SHELLn => O_SHELLn - ); - - vid_ram : entity work.MC_VID_RAM - port map ( - I_CLKA => I_CLK_12M, - I_ADDRA => I_A(9 downto 0), - I_DA => W_VID_RAM_DI, - I_WEA => I_VID_RAM_WR, - I_CEA => W_VID_RAM_CS, - O_DA => W_VID_RAM_DOA, - - I_CLKB => I_CLK_12M, - I_ADDRB => W_VID_RAM_A(9 downto 0), - I_DB => x"00", - I_WEB => '0', - I_CEB => '1', - O_DB => W_VID_RAM_DOB - ); - - -- 1K VID-Rom - k_rom : entity work.GALAXIAN_1K - port map ( - CLK => I_CLK_12M, - ADDR => W_O_OBJ_ROM_A, - DATA => W_1K_D - ); - - -- 1H VID-Rom - h_rom : entity work.GALAXIAN_1H - port map( - CLK => I_CLK_12M, - ADDR => W_O_OBJ_ROM_A, - DATA => W_1H_D - ); - ------------------------------------------------------------------------------------ - - process(I_CLK_12M) - begin - if falling_edge(I_CLK_12M) then - W_LDn <= WB_LDn; - W_CNTRLDn <= WB_CNTRLDn; - W_CNTRCLRn <= WB_CNTRCLRn; - W_COLLn <= WB_COLLn; - W_VPLn <= WB_VPLn; - W_OBJDATALn <= WB_OBJDATALn; - W_MLDn <= WB_MLDn; - W_SLDn <= WB_SLDn; - end if; - end process; - - W_CLK_6Mn <= not I_CLK_6M; - - W_6J_DA <= I_H_FLIP & W_HF_CNT(7) & W_HF_CNT(3) & I_H_CNT(2); - W_6J_DB <= W_OBJ_D(6) & ( W_HF_CNT(3) and I_H_CNT(1) ) & I_H_CNT(2) & I_H_CNT(1); - W_6J_Q <= W_6J_DB when I_H_CNT(8) = '1' else W_6J_DA; - - W_H_FLIP1 <= (not I_H_CNT(8)) and I_H_FLIP; - - W_HF_CNT(7 downto 3) <= not I_H_CNT(7 downto 3) when W_H_FLIP1 = '1' else I_H_CNT(7 downto 3); - W_VF_CNT <= not I_V_CNT when I_V_FLIP = '1' else I_V_CNT; - - O_8HF <= W_HF_CNT(3); - O_1VF <= W_VF_CNT(0); - W_H_FLIP2 <= W_6J_Q(3); - --- Parts 4F,5F - W_OBJ_RAM_AB <= "0" & I_H_CNT(8) & W_6J_Q(2) & W_HF_CNT(6 downto 4) & W_6J_Q(1 downto 0); --- W_OBJ_RAM_A <= W_OBJ_RAM_AB when I_OBJ_RAM_RQ = '0' else I_A(7 downto 0) ; - - process(I_CLK_12M) - begin - if rising_edge(I_CLK_12M) then - W_H_POSI <= W_OBJ_RAM_DOB; - end if; - end process; - - W_OBJ_RAM_D <= W_OBJ_RAM_DOA when I_OBJ_RAM_RD = '1' else (others => '0'); - --- Parts 4L - process(W_OBJDATALn) - begin - if rising_edge(W_OBJDATALn) then - W_OBJ_D <= W_H_POSI; - end if; - end process; - --- Parts 4,5N - W_45N_Q <= W_VF_CNT + W_H_POSI; - W_3D <= '0' when W_45N_Q = x"FF" else '1'; - - process(W_VPLn, I_V_BLn) - begin - if (I_V_BLn = '0') then - W_2M_Q <= (others => '0'); - elsif rising_edge(W_VPLn) then - W_2M_Q <= W_45N_Q; - end if; - end process; - - W_2N <= I_H_CNT(8) and W_OBJ_D(7); - W_1M <= W_2M_Q(3 downto 0) xor (W_2N & W_2N & W_2N & W_2N); - W_VID_RAM_CS <= I_VID_RAM_RD or I_VID_RAM_WR; - W_VID_RAM_DI <= I_BD when I_VID_RAM_WR = '1' else (others => '0'); - W_VID_RAM_AA <= (not ( W_2M_Q(7) and W_2M_Q(6) and W_2M_Q(5) and W_2M_Q(4))) & (not W_VID_RAM_CS) & "0000000000"; -- I_A(9:0) - W_VID_RAM_AB <= "00" & W_2M_Q(7 downto 4) & W_1M(3) & W_HF_CNT(7 downto 3); - W_VID_RAM_A <= W_VID_RAM_AB when I_C_BLn = '1' else W_VID_RAM_AA; - W_VID_RAM_D <= W_VID_RAM_DOA when I_VID_RAM_RD = '1' else (others => '0'); - ----- VIDEO DATA OUTPUT -------------- - - O_BD <= W_OBJ_RAM_D or W_VID_RAM_D; - W_SRLD <= not (W_LDn or W_VID_RAM_A(11)); - W_OBJ_ROM_AB <= W_OBJ_D(5 downto 0) & W_1M(3) & (W_OBJ_D(6) xor I_H_CNT(3)); - W_OBJ_ROM_A <= W_OBJ_ROM_AB when I_H_CNT(8) = '1' else W_VID_RAM_DOB; - W_O_OBJ_ROM_A <= W_OBJ_ROM_A & W_1M(2 downto 0); - ------------------------------------------------------------------------------------ - - W_3L_A <= reg_2HJ(7) & reg_2KL(7) & "1" & W_SRLD; - W_3L_B <= reg_2HJ(0) & reg_2KL(0) & W_SRLD & "1"; - W_3L_Y <= W_3L_B when W_H_FLIP2X = '1' else W_3L_A; -- (3)=RAW1,(2)=RAW0 - C_2HJ <= W_3L_Y(1 downto 0); - C_2KL <= W_3L_Y(1 downto 0); - W_RAW0 <= W_3L_Y(2); - W_RAW1 <= W_3L_Y(3); - W_SRCLK <= I_CLK_6M; - --------- PARTS 2KL ---------------------------------------------- - - process(W_SRCLK) - begin - if rising_edge(W_SRCLK) then - case(C_2KL) is - when "00" => reg_2KL <= reg_2KL; - when "10" => reg_2KL <= reg_2KL(6 downto 0) & "0"; - when "01" => reg_2KL <= "0" & reg_2KL(7 downto 1); - when "11" => reg_2KL <= W_1K_D; - when others => null; - end case; - end if; - end process; - --------- PARTS 2HJ ---------------------------------------------- - - process(W_SRCLK) - begin - if rising_edge(W_SRCLK) then - case(C_2HJ) is - when "00" => reg_2HJ <= reg_2HJ; - when "10" => reg_2HJ <= reg_2HJ(6 downto 0) & "0"; - when "01" => reg_2HJ <= "0" & reg_2HJ(7 downto 1); - when "11" => reg_2HJ <= W_1H_D; - when others => null; - end case; - end if; - end process; - -------- SHT2 ----------------------------------------------------- - --- Parts 6K - process(W_COLLn) - begin - if rising_edge(W_COLLn) then - W_6K_Q <= W_H_POSI(2 downto 0); - end if; - end process; - --- Parts 6P - process(I_CLK_6M) - begin - if rising_edge(I_CLK_6M) then - if (W_LDn = '0') then - W_6P_Q <= W_H_FLIP2 & W_H_FLIP1 & I_C_BLn & (not I_H_CNT(8)) & W_6K_Q(2 downto 0); - else - W_6P_Q <= W_6P_Q; - end if; - end if; - end process; - - W_H_FLIP2X <= W_6P_Q(6); - W_H_FLIP1X <= W_6P_Q(5); - W_C_BLnX <= W_6P_Q(4); - W_256HnX <= W_6P_Q(3); - W_CD <= W_6P_Q(2 downto 0); - O_256HnX <= W_256HnX; - O_C_BLnX <= W_C_BLnX; - W_45T_CLR <= W_CNTRCLRn or W_256HnX ; - - process(I_CLK_6M, W_45T_CLR) - begin - if (W_45T_CLR = '0') then - W_45T_Q <= (others => '0'); - elsif rising_edge(I_CLK_6M) then - if (W_CNTRLDn = '0') then - W_45T_Q <= W_H_POSI; - else - W_45T_Q <= W_45T_Q + 1; - end if; - end if; - end process; - - W_LRAM_A <= (not W_45T_Q) when W_H_FLIP1X = '1' else W_45T_Q; - - process(I_CLK_6M) - begin - if falling_edge(I_CLK_6M) then - W_RV <= W_LRAM_DO(1 downto 0); - W_RC <= W_LRAM_DO(4 downto 2); - end if; - end process; - - W_LRAM_AND <= not (not ((W_LRAM_A(4) or W_LRAM_A(5)) or (W_LRAM_A(6) or W_LRAM_A(7))) or W_256HnX ); - W_RAW_OR <= W_RAW0 or W_RAW1 ; - - W_VID(0) <= not (not (W_RAW0 and W_RV(1)) and W_RV(0)); - W_VID(1) <= not (not (W_RAW1 and W_RV(0)) and W_RV(1)); - W_COL(0) <= not (not (W_RAW_OR and W_CD(0) and W_RC(1) and W_RC(2)) and W_RC(0)); - W_COL(1) <= not (not (W_RAW_OR and W_CD(1) and W_RC(2) and W_RC(0)) and W_RC(1)); - W_COL(2) <= not (not (W_RAW_OR and W_CD(2) and W_RC(0) and W_RC(1)) and W_RC(2)); - - O_VID <= W_VID; - O_COL <= W_COL; - - W_LRAM_DI(0) <= W_LRAM_AND and W_VID(0); - W_LRAM_DI(1) <= W_LRAM_AND and W_VID(1); - W_LRAM_DI(2) <= W_LRAM_AND and W_COL(0); - W_LRAM_DI(3) <= W_LRAM_AND and W_COL(1); - W_LRAM_DI(4) <= W_LRAM_AND and W_COL(2); - -end RTL; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mist_io.v b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mist_io.v deleted file mode 100644 index 2f41221f..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/mist_io.v +++ /dev/null @@ -1,530 +0,0 @@ -// -// mist_io.v -// -// mist_io for the MiST board -// http://code.google.com/p/mist-board/ -// -// Copyright (c) 2014 Till Harbaum -// Copyright (c) 2015-2017 Sorgelig -// -// This source file 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 source file 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, see . -// -/////////////////////////////////////////////////////////////////////// - -// -// Use buffer to access SD card. It's time-critical part. -// Made module synchroneous with 2 clock domains: clk_sys and SPI_SCK -// (Sorgelig) -// -// for synchronous projects default value for PS2DIV is fine for any frequency of system clock. -// clk_ps2 = clk_sys/(PS2DIV*2) -// - -module mist_io #(parameter STRLEN=0, parameter PS2DIV=100) -( - - // parameter STRLEN and the actual length of conf_str have to match - input [(8*STRLEN)-1:0] conf_str, - - // Global clock. It should be around 100MHz (higher is better). - input clk_sys, - - // Global SPI clock from ARM. 24MHz - input SPI_SCK, - - input CONF_DATA0, - input SPI_SS2, - output SPI_DO, - input SPI_DI, - - output reg [7:0] joystick_0, - output reg [7:0] joystick_1, -// output reg [31:0] joystick_2, -// output reg [31:0] joystick_3, -// output reg [31:0] joystick_4, - output reg [15:0] joystick_analog_0, - output reg [15:0] joystick_analog_1, - output [1:0] buttons, - output [1:0] switches, - output scandoublerD, - output ypbpr, - - output reg [31:0] status, - - // SD config - input sd_conf, - input sd_sdhc, - output [1:0] img_mounted, // signaling that new image has been mounted - output reg [31:0] img_size, // size of image in bytes - - // SD block level access - input [31:0] sd_lba, - input [1:0] sd_rd, - input [1:0] sd_wr, - output reg sd_ack, - output reg sd_ack_conf, - - // SD byte level access. Signals for 2-PORT altsyncram. - output reg [8:0] sd_buff_addr, - output reg [7:0] sd_buff_dout, - input [7:0] sd_buff_din, - output reg sd_buff_wr, - - // ps2 keyboard emulation - output ps2_kbd_clk, - output reg ps2_kbd_data, - output ps2_mouse_clk, - output reg ps2_mouse_data, - - // ps2 alternative interface. - - // [8] - extended, [9] - pressed, [10] - toggles with every press/release - output reg [10:0] ps2_key = 0, - - // [24] - toggles with every event - output reg [24:0] ps2_mouse = 0, - - // ARM -> FPGA download - input ioctl_ce, - output reg ioctl_download = 0, // signal indicating an active download - output reg [7:0] ioctl_index, // menu index used to upload the file - output reg ioctl_wr = 0, - output reg [24:0] ioctl_addr, - output reg [7:0] ioctl_dout -); - -reg [7:0] but_sw; -reg [2:0] stick_idx; - -reg [1:0] mount_strobe = 0; -assign img_mounted = mount_strobe; - -assign buttons = but_sw[1:0]; -assign switches = but_sw[3:2]; -assign scandoublerD = but_sw[4]; -assign ypbpr = but_sw[5]; - -// this variant of user_io is for 8 bit cores (type == a4) only -wire [7:0] core_type = 8'ha4; - -// command byte read by the io controller -wire drive_sel = sd_rd[1] | sd_wr[1]; -wire [7:0] sd_cmd = { 4'h6, sd_conf, sd_sdhc, sd_wr[drive_sel], sd_rd[drive_sel] }; - -reg [7:0] cmd; -reg [2:0] bit_cnt; // counts bits 0-7 0-7 ... -reg [9:0] byte_cnt; // counts bytes - -reg spi_do; -assign SPI_DO = CONF_DATA0 ? 1'bZ : spi_do; - -reg [7:0] spi_data_out; - -// SPI transmitter -always@(negedge SPI_SCK) spi_do <= spi_data_out[~bit_cnt]; - -reg [7:0] spi_data_in; -reg spi_data_ready = 0; - -// SPI receiver -always@(posedge SPI_SCK or posedge CONF_DATA0) begin - reg [6:0] sbuf; - reg [31:0] sd_lba_r; - reg drive_sel_r; - - if(CONF_DATA0) begin - bit_cnt <= 0; - byte_cnt <= 0; - spi_data_out <= core_type; - end - else - begin - bit_cnt <= bit_cnt + 1'd1; - sbuf <= {sbuf[5:0], SPI_DI}; - - // finished reading command byte - if(bit_cnt == 7) begin - if(!byte_cnt) cmd <= {sbuf, SPI_DI}; - - spi_data_in <= {sbuf, SPI_DI}; - spi_data_ready <= ~spi_data_ready; - if(~&byte_cnt) byte_cnt <= byte_cnt + 8'd1; - - spi_data_out <= 0; - case({(!byte_cnt) ? {sbuf, SPI_DI} : cmd}) - // reading config string - 8'h14: if(byte_cnt < STRLEN) spi_data_out <= conf_str[(STRLEN - byte_cnt - 1)<<3 +:8]; - - // reading sd card status - 8'h16: if(byte_cnt == 0) begin - spi_data_out <= sd_cmd; - sd_lba_r <= sd_lba; - drive_sel_r <= drive_sel; - end else if (byte_cnt == 1) begin - spi_data_out <= drive_sel_r; - end else if(byte_cnt < 6) spi_data_out <= sd_lba_r[(5-byte_cnt)<<3 +:8]; - - // reading sd card write data - 8'h18: spi_data_out <= sd_buff_din; - endcase - end - end -end - -reg [31:0] ps2_key_raw = 0; -wire pressed = (ps2_key_raw[15:8] != 8'hf0); -wire extended = (~pressed ? (ps2_key_raw[23:16] == 8'he0) : (ps2_key_raw[15:8] == 8'he0)); - -// transfer to clk_sys domain -always@(posedge clk_sys) begin - reg old_ss1, old_ss2; - reg old_ready1, old_ready2; - reg [2:0] b_wr; - reg got_ps2 = 0; - - old_ss1 <= CONF_DATA0; - old_ss2 <= old_ss1; - old_ready1 <= spi_data_ready; - old_ready2 <= old_ready1; - - sd_buff_wr <= b_wr[0]; - if(b_wr[2] && (~&sd_buff_addr)) sd_buff_addr <= sd_buff_addr + 1'b1; - b_wr <= (b_wr<<1); - - if(old_ss2) begin - got_ps2 <= 0; - sd_ack <= 0; - sd_ack_conf <= 0; - sd_buff_addr <= 0; - if(got_ps2) begin - if(cmd == 4) ps2_mouse[24] <= ~ps2_mouse[24]; - if(cmd == 5) begin - ps2_key <= {~ps2_key[10], pressed, extended, ps2_key_raw[7:0]}; - if(ps2_key_raw == 'hE012E07C) ps2_key[9:0] <= 'h37C; // prnscr pressed - if(ps2_key_raw == 'h7CE0F012) ps2_key[9:0] <= 'h17C; // prnscr released - if(ps2_key_raw == 'hF014F077) ps2_key[9:0] <= 'h377; // pause pressed - end - end - end - else - if(old_ready2 ^ old_ready1) begin - - if(cmd == 8'h18 && ~&sd_buff_addr) sd_buff_addr <= sd_buff_addr + 1'b1; - - if(byte_cnt < 2) begin - - if (cmd == 8'h19) sd_ack_conf <= 1; - if((cmd == 8'h17) || (cmd == 8'h18)) sd_ack <= 1; - mount_strobe <= 0; - - if(cmd == 5) ps2_key_raw <= 0; - end else begin - - case(cmd) - // buttons and switches - 8'h01: but_sw <= spi_data_in; - 8'h02: joystick_0 <= spi_data_in; - 8'h03: joystick_1 <= spi_data_in; -// 8'h60: if (byte_cnt < 5) joystick_0[(byte_cnt-1)<<3 +:8] <= spi_data_in; -// 8'h61: if (byte_cnt < 5) joystick_1[(byte_cnt-1)<<3 +:8] <= spi_data_in; -// 8'h62: if (byte_cnt < 5) joystick_2[(byte_cnt-1)<<3 +:8] <= spi_data_in; -// 8'h63: if (byte_cnt < 5) joystick_3[(byte_cnt-1)<<3 +:8] <= spi_data_in; -// 8'h64: if (byte_cnt < 5) joystick_4[(byte_cnt-1)<<3 +:8] <= spi_data_in; - // store incoming ps2 mouse bytes - 8'h04: begin - got_ps2 <= 1; - case(byte_cnt) - 2: ps2_mouse[7:0] <= spi_data_in; - 3: ps2_mouse[15:8] <= spi_data_in; - 4: ps2_mouse[23:16] <= spi_data_in; - endcase - ps2_mouse_fifo[ps2_mouse_wptr] <= spi_data_in; - ps2_mouse_wptr <= ps2_mouse_wptr + 1'd1; - end - - // store incoming ps2 keyboard bytes - 8'h05: begin - got_ps2 <= 1; - ps2_key_raw[31:0] <= {ps2_key_raw[23:0], spi_data_in}; - ps2_kbd_fifo[ps2_kbd_wptr] <= spi_data_in; - ps2_kbd_wptr <= ps2_kbd_wptr + 1'd1; - end - - 8'h15: status[7:0] <= spi_data_in; - - // send SD config IO -> FPGA - // flag that download begins - // sd card knows data is config if sd_dout_strobe is asserted - // with sd_ack still being inactive (low) - 8'h19, - // send sector IO -> FPGA - // flag that download begins - 8'h17: begin - sd_buff_dout <= spi_data_in; - b_wr <= 1; - end - - // joystick analog - 8'h1a: begin - // first byte is joystick index - if(byte_cnt == 2) stick_idx <= spi_data_in[2:0]; - else if(byte_cnt == 3) begin - // second byte is x axis - if(stick_idx == 0) joystick_analog_0[15:8] <= spi_data_in; - else if(stick_idx == 1) joystick_analog_1[15:8] <= spi_data_in; - end else if(byte_cnt == 4) begin - // third byte is y axis - if(stick_idx == 0) joystick_analog_0[7:0] <= spi_data_in; - else if(stick_idx == 1) joystick_analog_1[7:0] <= spi_data_in; - end - end - - // notify image selection - 8'h1c: mount_strobe[spi_data_in[0]] <= 1; - - // send image info - 8'h1d: if(byte_cnt<6) img_size[(byte_cnt-2)<<3 +:8] <= spi_data_in; - - // status, 32bit version - 8'h1e: if(byte_cnt<6) status[(byte_cnt-2)<<3 +:8] <= spi_data_in; - default: ; - endcase - end - end -end - - -/////////////////////////////// PS2 /////////////////////////////// -// 8 byte fifos to store ps2 bytes -localparam PS2_FIFO_BITS = 3; - -reg clk_ps2; -always @(negedge clk_sys) begin - integer cnt; - cnt <= cnt + 1'd1; - if(cnt == PS2DIV) begin - clk_ps2 <= ~clk_ps2; - cnt <= 0; - end -end - -// keyboard -reg [7:0] ps2_kbd_fifo[1<= 1)&&(ps2_kbd_tx_state < 9)) begin - ps2_kbd_data <= ps2_kbd_tx_byte[0]; // data bits - ps2_kbd_tx_byte[6:0] <= ps2_kbd_tx_byte[7:1]; // shift down - if(ps2_kbd_tx_byte[0]) - ps2_kbd_parity <= !ps2_kbd_parity; - end - - // transmission of parity - if(ps2_kbd_tx_state == 9) ps2_kbd_data <= ps2_kbd_parity; - - // transmission of stop bit - if(ps2_kbd_tx_state == 10) ps2_kbd_data <= 1; // stop bit is 1 - - // advance state machine - if(ps2_kbd_tx_state < 11) ps2_kbd_tx_state <= ps2_kbd_tx_state + 1'd1; - else ps2_kbd_tx_state <= 0; - end - end -end - -// mouse -reg [7:0] ps2_mouse_fifo[1<= 1)&&(ps2_mouse_tx_state < 9)) begin - ps2_mouse_data <= ps2_mouse_tx_byte[0]; // data bits - ps2_mouse_tx_byte[6:0] <= ps2_mouse_tx_byte[7:1]; // shift down - if(ps2_mouse_tx_byte[0]) - ps2_mouse_parity <= !ps2_mouse_parity; - end - - // transmission of parity - if(ps2_mouse_tx_state == 9) ps2_mouse_data <= ps2_mouse_parity; - - // transmission of stop bit - if(ps2_mouse_tx_state == 10) ps2_mouse_data <= 1; // stop bit is 1 - - // advance state machine - if(ps2_mouse_tx_state < 11) ps2_mouse_tx_state <= ps2_mouse_tx_state + 1'd1; - else ps2_mouse_tx_state <= 0; - end - end -end - - -/////////////////////////////// DOWNLOADING /////////////////////////////// - -reg [7:0] data_w; -reg [24:0] addr_w; -reg rclk = 0; - -localparam UIO_FILE_TX = 8'h53; -localparam UIO_FILE_TX_DAT = 8'h54; -localparam UIO_FILE_INDEX = 8'h55; - -reg rdownload = 0; - -// data_io has its own SPI interface to the io controller -always@(posedge SPI_SCK, posedge SPI_SS2) begin - reg [6:0] sbuf; - reg [7:0] cmd; - reg [4:0] cnt; - reg [24:0] addr; - - if(SPI_SS2) cnt <= 0; - else begin - // don't shift in last bit. It is evaluated directly - // when writing to ram - if(cnt != 15) sbuf <= { sbuf[5:0], SPI_DI}; - - // count 0-7 8-15 8-15 ... - if(cnt < 15) cnt <= cnt + 1'd1; - else cnt <= 8; - - // finished command byte - if(cnt == 7) cmd <= {sbuf, SPI_DI}; - - // prepare/end transmission - if((cmd == UIO_FILE_TX) && (cnt == 15)) begin - // prepare - if(SPI_DI) begin - case(ioctl_index[4:0]) - 1: addr <= 25'h200000; // TRD buffer at 2MB - 2: addr <= 25'h400000; // tape buffer at 4MB - default: addr <= 25'h150000; // boot rom - endcase - rdownload <= 1; - end else begin - addr_w <= addr; - rdownload <= 0; - end - end - - // command 0x54: UIO_FILE_TX - if((cmd == UIO_FILE_TX_DAT) && (cnt == 15)) begin - addr_w <= addr; - data_w <= {sbuf, SPI_DI}; - addr <= addr + 1'd1; - rclk <= ~rclk; - end - - // expose file (menu) index - if((cmd == UIO_FILE_INDEX) && (cnt == 15)) ioctl_index <= {sbuf, SPI_DI}; - end -end - -// transfer to ioctl_clk domain. -// ioctl_index is set before ioctl_download, so it's stable already -always@(posedge clk_sys) begin - reg rclkD, rclkD2; - - if(ioctl_ce) begin - ioctl_download <= rdownload; - - rclkD <= rclk; - rclkD2 <= rclkD; - ioctl_wr <= 0; - - if(rclkD != rclkD2) begin - ioctl_dout <= data_w; - ioctl_addr <= addr_w; - ioctl_wr <= 1; - end - end -end - -endmodule \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/osd.v b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/osd.v deleted file mode 100644 index b9181763..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/osd.v +++ /dev/null @@ -1,194 +0,0 @@ -// A simple OSD implementation. Can be hooked up between a cores -// VGA output and the physical VGA pins - -module osd ( - // OSDs pixel clock, should be synchronous to cores pixel clock to - // avoid jitter. - input clk_sys, - - // SPI interface - input SPI_SCK, - input SPI_SS3, - input SPI_DI, - - input [1:0] rotate, //[0] - rotate [1] - left or right - - // VGA signals coming from core - input [5:0] R_in, - input [5:0] G_in, - input [5:0] B_in, - input HSync, - input VSync, - - // VGA signals going to video connector - output [5:0] R_out, - output [5:0] G_out, - output [5:0] B_out -); - -parameter OSD_X_OFFSET = 10'd0; -parameter OSD_Y_OFFSET = 10'd0; -parameter OSD_COLOR = 3'd0; - -localparam OSD_WIDTH = 10'd256; -localparam OSD_HEIGHT = 10'd128; - -// ********************************************************************************* -// spi client -// ********************************************************************************* - -// this core supports only the display related OSD commands -// of the minimig -reg osd_enable; -(* ramstyle = "no_rw_check" *) reg [7:0] osd_buffer[2047:0]; // the OSD buffer itself - -// the OSD has its own SPI interface to the io controller -always@(posedge SPI_SCK, posedge SPI_SS3) begin - reg [4:0] cnt; - reg [10:0] bcnt; - reg [7:0] sbuf; - reg [7:0] cmd; - - if(SPI_SS3) begin - cnt <= 0; - bcnt <= 0; - end else begin - sbuf <= {sbuf[6:0], SPI_DI}; - - // 0:7 is command, rest payload - if(cnt < 15) cnt <= cnt + 1'd1; - else cnt <= 8; - - if(cnt == 7) begin - cmd <= {sbuf[6:0], SPI_DI}; - - // lower three command bits are line address - bcnt <= {sbuf[1:0], SPI_DI, 8'h00}; - - // command 0x40: OSDCMDENABLE, OSDCMDDISABLE - if(sbuf[6:3] == 4'b0100) osd_enable <= SPI_DI; - end - - // command 0x20: OSDCMDWRITE - if((cmd[7:3] == 5'b00100) && (cnt == 15)) begin - osd_buffer[bcnt] <= {sbuf[6:0], SPI_DI}; - bcnt <= bcnt + 1'd1; - end - end -end - -// ********************************************************************************* -// video timing and sync polarity anaylsis -// ********************************************************************************* - -// horizontal counter -reg [9:0] h_cnt; -reg [9:0] hs_low, hs_high; -wire hs_pol = hs_high < hs_low; -wire [9:0] dsp_width = hs_pol ? hs_low : hs_high; - -// vertical counter -reg [9:0] v_cnt; -reg [9:0] vs_low, vs_high; -wire vs_pol = vs_high < vs_low; -wire [9:0] dsp_height = vs_pol ? vs_low : vs_high; - -wire doublescan = (dsp_height>350); - -reg ce_pix; -always @(negedge clk_sys) begin - integer cnt = 0; - integer pixsz, pixcnt; - reg hs; - - cnt <= cnt + 1; - hs <= HSync; - - pixcnt <= pixcnt + 1; - if(pixcnt == pixsz) pixcnt <= 0; - ce_pix <= !pixcnt; - - if(hs && ~HSync) begin - cnt <= 0; - pixsz <= (cnt >> 9) - 1; - pixcnt <= 0; - ce_pix <= 1; - end -end - -always @(posedge clk_sys) begin - reg hsD, hsD2; - reg vsD, vsD2; - - if(ce_pix) begin - // bring hsync into local clock domain - hsD <= HSync; - hsD2 <= hsD; - - // falling edge of HSync - if(!hsD && hsD2) begin - h_cnt <= 0; - hs_high <= h_cnt; - end - - // rising edge of HSync - else if(hsD && !hsD2) begin - h_cnt <= 0; - hs_low <= h_cnt; - v_cnt <= v_cnt + 1'd1; - end else begin - h_cnt <= h_cnt + 1'd1; - end - - vsD <= VSync; - vsD2 <= vsD; - - // falling edge of VSync - if(!vsD && vsD2) begin - v_cnt <= 0; - vs_high <= v_cnt; - end - - // rising edge of VSync - else if(vsD && !vsD2) begin - v_cnt <= 0; - vs_low <= v_cnt; - end - end -end - -// area in which OSD is being displayed -wire [9:0] h_osd_start = ((dsp_width - OSD_WIDTH)>> 1) + OSD_X_OFFSET; -wire [9:0] h_osd_end = h_osd_start + OSD_WIDTH; -wire [9:0] v_osd_start = ((dsp_height- (OSD_HEIGHT<> 1) + OSD_Y_OFFSET; -wire [9:0] v_osd_end = v_osd_start + (OSD_HEIGHT<= h_osd_start) && (h_cnt < h_osd_end) && - (VSync != vs_pol) && (v_cnt >= v_osd_start) && (v_cnt < v_osd_end); - -reg [10:0] osd_buffer_addr; -wire [7:0] osd_byte = osd_buffer[osd_buffer_addr]; -reg osd_pixel; - -always @(posedge clk_sys) begin - if(ce_pix) begin - osd_buffer_addr <= rotate[0] ? {rotate[1] ? osd_hcnt_next2[7:5] : ~osd_hcnt_next2[7:5], - rotate[1] ? (doublescan ? ~osd_vcnt[7:0] : ~{osd_vcnt[6:0], 1'b0}) : - (doublescan ? osd_vcnt[7:0] : {osd_vcnt[6:0], 1'b0})} : - {doublescan ? osd_vcnt[7:5] : osd_vcnt[6:4], osd_hcnt_next2[7:0]}; - - osd_pixel <= rotate[0] ? osd_byte[rotate[1] ? osd_hcnt_next[4:2] : ~osd_hcnt_next[4:2]] : - osd_byte[doublescan ? osd_vcnt[4:2] : osd_vcnt[3:1]]; - end -end - -assign R_out = !osd_de ? R_in : {osd_pixel, osd_pixel, OSD_COLOR[2], R_in[5:3]}; -assign G_out = !osd_de ? G_in : {osd_pixel, osd_pixel, OSD_COLOR[1], G_in[5:3]}; -assign B_out = !osd_de ? B_in : {osd_pixel, osd_pixel, OSD_COLOR[0], B_in[5:3]}; - -endmodule diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/pll.qip b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/pll.qip deleted file mode 100644 index 48665362..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/pll.qip +++ /dev/null @@ -1,4 +0,0 @@ -set_global_assignment -name IP_TOOL_NAME "ALTPLL" -set_global_assignment -name IP_TOOL_VERSION "13.1" -set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll.vhd"] -set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/pll.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/pll.vhd deleted file mode 100644 index 2822d752..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/pll.vhd +++ /dev/null @@ -1,451 +0,0 @@ --- megafunction wizard: %ALTPLL% --- GENERATION: STANDARD --- VERSION: WM1.0 --- MODULE: altpll - --- ============================================================ --- File Name: pll.vhd --- Megafunction Name(s): --- altpll --- --- Simulation Library Files(s): --- altera_mf --- ============================================================ --- ************************************************************ --- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! --- --- 13.1.0 Build 162 10/23/2013 SJ Web Edition --- ************************************************************ - - ---Copyright (C) 1991-2013 Altera Corporation ---Your use of Altera Corporation's design tools, logic functions ---and other software and tools, and its AMPP partner logic ---functions, and any output files from any of the foregoing ---(including device programming or simulation files), and any ---associated documentation or information are expressly subject ---to the terms and conditions of the Altera Program License ---Subscription Agreement, Altera MegaCore Function License ---Agreement, or other applicable license agreement, including, ---without limitation, that your use is for the sole purpose of ---programming logic devices manufactured by Altera and sold by ---Altera or its authorized distributors. Please refer to the ---applicable agreement for further details. - - -LIBRARY ieee; -USE ieee.std_logic_1164.all; - -LIBRARY altera_mf; -USE altera_mf.all; - -ENTITY pll IS - PORT - ( - areset : IN STD_LOGIC := '0'; - inclk0 : IN STD_LOGIC := '0'; - c0 : OUT STD_LOGIC ; - c1 : OUT STD_LOGIC ; - c2 : OUT STD_LOGIC ; - c3 : OUT STD_LOGIC - ); -END pll; - - -ARCHITECTURE SYN OF pll IS - - SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); - SIGNAL sub_wire1 : STD_LOGIC ; - SIGNAL sub_wire2 : STD_LOGIC ; - SIGNAL sub_wire3 : STD_LOGIC ; - SIGNAL sub_wire4 : STD_LOGIC ; - SIGNAL sub_wire5 : STD_LOGIC ; - SIGNAL sub_wire6 : STD_LOGIC_VECTOR (1 DOWNTO 0); - SIGNAL sub_wire7_bv : BIT_VECTOR (0 DOWNTO 0); - SIGNAL sub_wire7 : STD_LOGIC_VECTOR (0 DOWNTO 0); - - - - COMPONENT altpll - GENERIC ( - bandwidth_type : STRING; - clk0_divide_by : NATURAL; - clk0_duty_cycle : NATURAL; - clk0_multiply_by : NATURAL; - clk0_phase_shift : STRING; - clk1_divide_by : NATURAL; - clk1_duty_cycle : NATURAL; - clk1_multiply_by : NATURAL; - clk1_phase_shift : STRING; - clk2_divide_by : NATURAL; - clk2_duty_cycle : NATURAL; - clk2_multiply_by : NATURAL; - clk2_phase_shift : STRING; - clk3_divide_by : NATURAL; - clk3_duty_cycle : NATURAL; - clk3_multiply_by : NATURAL; - clk3_phase_shift : STRING; - compensate_clock : STRING; - inclk0_input_frequency : NATURAL; - intended_device_family : STRING; - lpm_hint : STRING; - lpm_type : STRING; - operation_mode : STRING; - pll_type : STRING; - port_activeclock : STRING; - port_areset : STRING; - port_clkbad0 : STRING; - port_clkbad1 : STRING; - port_clkloss : STRING; - port_clkswitch : STRING; - port_configupdate : STRING; - port_fbin : STRING; - port_inclk0 : STRING; - port_inclk1 : STRING; - port_locked : STRING; - port_pfdena : STRING; - port_phasecounterselect : STRING; - port_phasedone : STRING; - port_phasestep : STRING; - port_phaseupdown : STRING; - port_pllena : STRING; - port_scanaclr : STRING; - port_scanclk : STRING; - port_scanclkena : STRING; - port_scandata : STRING; - port_scandataout : STRING; - port_scandone : STRING; - port_scanread : STRING; - port_scanwrite : STRING; - port_clk0 : STRING; - port_clk1 : STRING; - port_clk2 : STRING; - port_clk3 : STRING; - port_clk4 : STRING; - port_clk5 : STRING; - port_clkena0 : STRING; - port_clkena1 : STRING; - port_clkena2 : STRING; - port_clkena3 : STRING; - port_clkena4 : STRING; - port_clkena5 : STRING; - port_extclk0 : STRING; - port_extclk1 : STRING; - port_extclk2 : STRING; - port_extclk3 : STRING; - width_clock : NATURAL - ); - PORT ( - areset : IN STD_LOGIC ; - clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); - inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0) - ); - END COMPONENT; - -BEGIN - sub_wire7_bv(0 DOWNTO 0) <= "0"; - sub_wire7 <= To_stdlogicvector(sub_wire7_bv); - sub_wire4 <= sub_wire0(2); - sub_wire3 <= sub_wire0(0); - sub_wire2 <= sub_wire0(3); - sub_wire1 <= sub_wire0(1); - c1 <= sub_wire1; - c3 <= sub_wire2; - c0 <= sub_wire3; - c2 <= sub_wire4; - sub_wire5 <= inclk0; - sub_wire6 <= sub_wire7(0 DOWNTO 0) & sub_wire5; - - altpll_component : altpll - GENERIC MAP ( - bandwidth_type => "AUTO", - clk0_divide_by => 9, - clk0_duty_cycle => 50, - clk0_multiply_by => 8, - clk0_phase_shift => "0", - clk1_divide_by => 3, - clk1_duty_cycle => 50, - clk1_multiply_by => 2, - clk1_phase_shift => "0", - clk2_divide_by => 9, - clk2_duty_cycle => 50, - clk2_multiply_by => 4, - clk2_phase_shift => "0", - clk3_divide_by => 9, - clk3_duty_cycle => 50, - clk3_multiply_by => 2, - clk3_phase_shift => "0", - compensate_clock => "CLK0", - inclk0_input_frequency => 37037, - intended_device_family => "Cyclone III", - lpm_hint => "CBX_MODULE_PREFIX=pll", - lpm_type => "altpll", - operation_mode => "NORMAL", - pll_type => "AUTO", - port_activeclock => "PORT_UNUSED", - port_areset => "PORT_USED", - port_clkbad0 => "PORT_UNUSED", - port_clkbad1 => "PORT_UNUSED", - port_clkloss => "PORT_UNUSED", - port_clkswitch => "PORT_UNUSED", - port_configupdate => "PORT_UNUSED", - port_fbin => "PORT_UNUSED", - port_inclk0 => "PORT_USED", - port_inclk1 => "PORT_UNUSED", - port_locked => "PORT_UNUSED", - port_pfdena => "PORT_UNUSED", - port_phasecounterselect => "PORT_UNUSED", - port_phasedone => "PORT_UNUSED", - port_phasestep => "PORT_UNUSED", - port_phaseupdown => "PORT_UNUSED", - port_pllena => "PORT_UNUSED", - port_scanaclr => "PORT_UNUSED", - port_scanclk => "PORT_UNUSED", - port_scanclkena => "PORT_UNUSED", - port_scandata => "PORT_UNUSED", - port_scandataout => "PORT_UNUSED", - port_scandone => "PORT_UNUSED", - port_scanread => "PORT_UNUSED", - port_scanwrite => "PORT_UNUSED", - port_clk0 => "PORT_USED", - port_clk1 => "PORT_USED", - port_clk2 => "PORT_USED", - port_clk3 => "PORT_USED", - port_clk4 => "PORT_UNUSED", - port_clk5 => "PORT_UNUSED", - port_clkena0 => "PORT_UNUSED", - port_clkena1 => "PORT_UNUSED", - port_clkena2 => "PORT_UNUSED", - port_clkena3 => "PORT_UNUSED", - port_clkena4 => "PORT_UNUSED", - port_clkena5 => "PORT_UNUSED", - port_extclk0 => "PORT_UNUSED", - port_extclk1 => "PORT_UNUSED", - port_extclk2 => "PORT_UNUSED", - port_extclk3 => "PORT_UNUSED", - width_clock => 5 - ) - PORT MAP ( - areset => areset, - inclk => sub_wire6, - clk => sub_wire0 - ); - - - -END SYN; - --- ============================================================ --- CNX file retrieval info --- ============================================================ --- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" --- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" --- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" --- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" --- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" --- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" --- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" --- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" --- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" --- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" --- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" --- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" --- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" --- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" --- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" --- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "9" --- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "3" --- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "9" --- Retrieval info: PRIVATE: DIV_FACTOR3 NUMERIC "9" --- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" --- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" --- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" --- Retrieval info: PRIVATE: DUTY_CYCLE3 STRING "50.00000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "24.000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "18.000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "12.000000" --- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE3 STRING "6.000000" --- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" --- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" --- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" --- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" --- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" --- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" --- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" --- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "27.000" --- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" --- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" --- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" --- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" --- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" --- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" --- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" --- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0" --- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" --- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" --- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" --- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" --- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps" --- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "ps" --- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT3 STRING "ps" --- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" --- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" --- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" --- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" --- Retrieval info: PRIVATE: MIRROR_CLK3 STRING "0" --- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "8" --- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "2" --- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "4" --- Retrieval info: PRIVATE: MULT_FACTOR3 NUMERIC "2" --- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" --- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "24.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "18.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "12.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ3 STRING "6.00000000" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE3 STRING "0" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" --- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT3 STRING "MHz" --- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" --- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT3 STRING "0.00000000" --- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" --- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT3 STRING "deg" --- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" --- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" --- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" --- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" --- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" --- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" --- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" --- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" --- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" --- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" --- Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll.mif" --- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" --- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" --- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" --- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" --- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" --- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" --- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" --- Retrieval info: PRIVATE: SPREAD_USE STRING "0" --- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" --- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" --- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" --- Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" --- Retrieval info: PRIVATE: STICKY_CLK3 STRING "1" --- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" --- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" --- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" --- Retrieval info: PRIVATE: USE_CLK0 STRING "1" --- Retrieval info: PRIVATE: USE_CLK1 STRING "1" --- Retrieval info: PRIVATE: USE_CLK2 STRING "1" --- Retrieval info: PRIVATE: USE_CLK3 STRING "1" --- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" --- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" --- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" --- Retrieval info: PRIVATE: USE_CLKENA3 STRING "0" --- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" --- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" --- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all --- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" --- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "9" --- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "8" --- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "3" --- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "2" --- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "9" --- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "4" --- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: CLK3_DIVIDE_BY NUMERIC "9" --- Retrieval info: CONSTANT: CLK3_DUTY_CYCLE NUMERIC "50" --- Retrieval info: CONSTANT: CLK3_MULTIPLY_BY NUMERIC "2" --- Retrieval info: CONSTANT: CLK3_PHASE_SHIFT STRING "0" --- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" --- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037" --- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" --- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" --- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" --- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" --- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_USED" --- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" --- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" --- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" --- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" --- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" --- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" --- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" --- Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" --- Retrieval info: USED_PORT: c3 0 0 0 0 OUTPUT_CLK_EXT VCC "c3" --- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" --- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 --- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 --- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 --- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 --- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 --- Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 --- Retrieval info: CONNECT: c3 0 0 0 0 @clk 0 0 1 3 --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE --- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE --- Retrieval info: LIB_FILE: altera_mf --- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/scandoubler.v b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/scandoubler.v deleted file mode 100644 index eba1d598..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/scandoubler.v +++ /dev/null @@ -1,194 +0,0 @@ -// -// scandoubler.v -// -// Copyright (c) 2015 Till Harbaum -// Copyright (c) 2017 Sorgelig -// -// This source file 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 source file 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, see . - -// TODO: Delay vsync one line - -module scandoubler #(parameter LENGTH, parameter HALF_DEPTH) -( - // system interface - input clk_sys, - input ce_pix, - input ce_pix_actual, - - input hq2x, - - // shifter video interface - input hs_in, - input vs_in, - input line_start, - - input [DWIDTH:0] r_in, - input [DWIDTH:0] g_in, - input [DWIDTH:0] b_in, - input mono, - - // output interface - output reg hs_out, - output vs_out, - output [DWIDTH:0] r_out, - output [DWIDTH:0] g_out, - output [DWIDTH:0] b_out -); - -`define BITS_TO_FIT(N) ( \ - N <= 2 ? 0 : \ - N <= 4 ? 1 : \ - N <= 8 ? 2 : \ - N <= 16 ? 3 : \ - N <= 32 ? 4 : \ - N <= 64 ? 5 : \ - N <= 128 ? 6 : \ - N <= 256 ? 7 : \ - N <= 512 ? 8 : \ - N <=1024 ? 9 : 10 ) - -localparam DWIDTH = HALF_DEPTH ? 2 : 5; - -assign vs_out = vs_in; - -reg [2:0] phase; -reg [2:0] ce_div; -reg [7:0] pix_len = 0; -wire [7:0] pl = pix_len + 1'b1; - -reg ce_x1, ce_x4; -reg req_line_reset; -wire ls_in = hs_in | line_start; -always @(negedge clk_sys) begin - reg old_ce; - reg [2:0] ce_cnt; - - reg [7:0] pixsz2, pixsz4 = 0; - - old_ce <= ce_pix; - if(~&pix_len) pix_len <= pix_len + 1'd1; - - ce_x4 <= 0; - ce_x1 <= 0; - - // use such odd comparison to place c_x4 evenly if master clock isn't multiple 4. - if((pl == pixsz4) || (pl == pixsz2) || (pl == (pixsz2+pixsz4))) begin - phase <= phase + 1'd1; - ce_x4 <= 1; - end - - if(~old_ce & ce_pix) begin - pixsz2 <= {1'b0, pl[7:1]}; - pixsz4 <= {2'b00, pl[7:2]}; - ce_x1 <= 1; - ce_x4 <= 1; - pix_len <= 0; - phase <= phase + 1'd1; - - ce_cnt <= ce_cnt + 1'd1; - if(ce_pix_actual) begin - phase <= 0; - ce_div <= ce_cnt + 1'd1; - ce_cnt <= 0; - req_line_reset <= 0; - end - - if(ls_in) req_line_reset <= 1; - end -end - -reg ce_sd; -always @(*) begin - case(ce_div) - 2: ce_sd = !phase[0]; - 4: ce_sd = !phase[1:0]; - default: ce_sd <= 1; - endcase -end - -localparam AWIDTH = `BITS_TO_FIT(LENGTH); -Hq2x #(.LENGTH(LENGTH), .HALF_DEPTH(HALF_DEPTH)) Hq2x -( - .clk(clk_sys), - .ce_x4(ce_x4 & ce_sd), - .inputpixel({b_in,g_in,r_in}), - .mono(mono), - .disable_hq2x(~hq2x), - .reset_frame(vs_in), - .reset_line(req_line_reset), - .read_y(sd_line), - .read_x(sd_h_actual), - .outpixel({b_out,g_out,r_out}) -); - -reg [10:0] sd_h_actual; -always @(*) begin - case(ce_div) - 2: sd_h_actual = sd_h[10:1]; - 4: sd_h_actual = sd_h[10:2]; - default: sd_h_actual = sd_h; - endcase -end - -reg [10:0] sd_h; -reg [1:0] sd_line; -always @(posedge clk_sys) begin - - reg [11:0] hs_max,hs_rise,hs_ls; - reg [10:0] hcnt; - reg [11:0] sd_hcnt; - - reg hs, hs2, vs, ls; - - if(ce_x1) begin - hs <= hs_in; - ls <= ls_in; - - if(ls && !ls_in) hs_ls <= {hcnt,1'b1}; - - // falling edge of hsync indicates start of line - if(hs && !hs_in) begin - hs_max <= {hcnt,1'b1}; - hcnt <= 0; - if(ls && !ls_in) hs_ls <= {10'd0,1'b1}; - end else begin - hcnt <= hcnt + 1'd1; - end - - // save position of rising edge - if(!hs && hs_in) hs_rise <= {hcnt,1'b1}; - - vs <= vs_in; - if(vs && ~vs_in) sd_line <= 0; - end - - if(ce_x4) begin - hs2 <= hs_in; - - // output counter synchronous to input and at twice the rate - sd_hcnt <= sd_hcnt + 1'd1; - sd_h <= sd_h + 1'd1; - if(hs2 && !hs_in) sd_hcnt <= hs_max; - if(sd_hcnt == hs_max) sd_hcnt <= 0; - - // replicate horizontal sync at twice the speed - if(sd_hcnt == hs_max) hs_out <= 0; - if(sd_hcnt == hs_rise) hs_out <= 1; - - if(sd_hcnt == hs_ls) sd_h <= 0; - if(sd_hcnt == hs_ls) sd_line <= sd_line + 1'd1; - end -end - -endmodule diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/sine_package.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/sine_package.vhd deleted file mode 100644 index 473caa04..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/sine_package.vhd +++ /dev/null @@ -1,152 +0,0 @@ -library ieee; -use ieee.std_logic_1164.all; - -package sine_package is - - subtype table_value_type is integer range 0 to 16383; - subtype table_index_type is std_logic_vector( 6 downto 0 ); - - function get_table_value (table_index: table_index_type) return table_value_type; - -end; - -package body sine_package is - - function get_table_value (table_index: table_index_type) return table_value_type is - variable table_value: table_value_type; - begin - case table_index is - when "0000000" => table_value := 101; - when "0000001" => table_value := 302; - when "0000010" => table_value := 503; - when "0000011" => table_value := 703; - when "0000100" => table_value := 904; - when "0000101" => table_value := 1105; - when "0000110" => table_value := 1305; - when "0000111" => table_value := 1506; - when "0001000" => table_value := 1706; - when "0001001" => table_value := 1906; - when "0001010" => table_value := 2105; - when "0001011" => table_value := 2304; - when "0001100" => table_value := 2503; - when "0001101" => table_value := 2702; - when "0001110" => table_value := 2900; - when "0001111" => table_value := 3098; - when "0010000" => table_value := 3295; - when "0010001" => table_value := 3491; - when "0010010" => table_value := 3688; - when "0010011" => table_value := 3883; - when "0010100" => table_value := 4078; - when "0010101" => table_value := 4273; - when "0010110" => table_value := 4466; - when "0010111" => table_value := 4659; - when "0011000" => table_value := 4852; - when "0011001" => table_value := 5044; - when "0011010" => table_value := 5234; - when "0011011" => table_value := 5425; - when "0011100" => table_value := 5614; - when "0011101" => table_value := 5802; - when "0011110" => table_value := 5990; - when "0011111" => table_value := 6177; - when "0100000" => table_value := 6362; - when "0100001" => table_value := 6547; - when "0100010" => table_value := 6731; - when "0100011" => table_value := 6914; - when "0100100" => table_value := 7095; - when "0100101" => table_value := 7276; - when "0100110" => table_value := 7456; - when "0100111" => table_value := 7634; - when "0101000" => table_value := 7811; - when "0101001" => table_value := 7988; - when "0101010" => table_value := 8162; - when "0101011" => table_value := 8336; - when "0101100" => table_value := 8509; - when "0101101" => table_value := 8680; - when "0101110" => table_value := 8850; - when "0101111" => table_value := 9018; - when "0110000" => table_value := 9185; - when "0110001" => table_value := 9351; - when "0110010" => table_value := 9515; - when "0110011" => table_value := 9678; - when "0110100" => table_value := 9840; - when "0110101" => table_value := 10000; - when "0110110" => table_value := 10158; - when "0110111" => table_value := 10315; - when "0111000" => table_value := 10471; - when "0111001" => table_value := 10625; - when "0111010" => table_value := 10777; - when "0111011" => table_value := 10927; - when "0111100" => table_value := 11076; - when "0111101" => table_value := 11224; - when "0111110" => table_value := 11369; - when "0111111" => table_value := 11513; - when "1000000" => table_value := 11655; - when "1000001" => table_value := 11796; - when "1000010" => table_value := 11934; - when "1000011" => table_value := 12071; - when "1000100" => table_value := 12206; - when "1000101" => table_value := 12339; - when "1000110" => table_value := 12471; - when "1000111" => table_value := 12600; - when "1001000" => table_value := 12728; - when "1001001" => table_value := 12853; - when "1001010" => table_value := 12977; - when "1001011" => table_value := 13099; - when "1001100" => table_value := 13219; - when "1001101" => table_value := 13336; - when "1001110" => table_value := 13452; - when "1001111" => table_value := 13566; - when "1010000" => table_value := 13678; - when "1010001" => table_value := 13787; - when "1010010" => table_value := 13895; - when "1010011" => table_value := 14000; - when "1010100" => table_value := 14104; - when "1010101" => table_value := 14205; - when "1010110" => table_value := 14304; - when "1010111" => table_value := 14401; - when "1011000" => table_value := 14496; - when "1011001" => table_value := 14588; - when "1011010" => table_value := 14679; - when "1011011" => table_value := 14767; - when "1011100" => table_value := 14853; - when "1011101" => table_value := 14936; - when "1011110" => table_value := 15018; - when "1011111" => table_value := 15097; - when "1100000" => table_value := 15174; - when "1100001" => table_value := 15249; - when "1100010" => table_value := 15321; - when "1100011" => table_value := 15391; - when "1100100" => table_value := 15459; - when "1100101" => table_value := 15524; - when "1100110" => table_value := 15587; - when "1100111" => table_value := 15648; - when "1101000" => table_value := 15706; - when "1101001" => table_value := 15762; - when "1101010" => table_value := 15816; - when "1101011" => table_value := 15867; - when "1101100" => table_value := 15916; - when "1101101" => table_value := 15963; - when "1101110" => table_value := 16007; - when "1101111" => table_value := 16048; - when "1110000" => table_value := 16088; - when "1110001" => table_value := 16124; - when "1110010" => table_value := 16159; - when "1110011" => table_value := 16191; - when "1110100" => table_value := 16220; - when "1110101" => table_value := 16247; - when "1110110" => table_value := 16272; - when "1110111" => table_value := 16294; - when "1111000" => table_value := 16314; - when "1111001" => table_value := 16331; - when "1111010" => table_value := 16346; - when "1111011" => table_value := 16358; - when "1111100" => table_value := 16368; - when "1111101" => table_value := 16375; - when "1111110" => table_value := 16380; - when "1111111" => table_value := 16383; - when others => null; - end case; - return table_value; - end; - -end; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/spram.vhd b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/spram.vhd deleted file mode 100644 index ad6b58b5..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/spram.vhd +++ /dev/null @@ -1,55 +0,0 @@ -LIBRARY ieee; -USE ieee.std_logic_1164.all; - -LIBRARY altera_mf; -USE altera_mf.altera_mf_components.all; - -ENTITY spram IS - generic ( - addr_width_g : integer := 8; - data_width_g : integer := 8 - ); - PORT - ( - address : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); - clken : IN STD_LOGIC := '1'; - clock : IN STD_LOGIC := '1'; - data : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); - wren : IN STD_LOGIC ; - q : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0) - ); -END spram; - - -ARCHITECTURE SYN OF spram IS - -BEGIN - altsyncram_component : altsyncram - GENERIC MAP ( - clock_enable_input_a => "NORMAL", - clock_enable_output_a => "BYPASS", - intended_device_family => "Cyclone V", - lpm_hint => "ENABLE_RUNTIME_MOD=NO", - lpm_type => "altsyncram", - numwords_a => 2**addr_width_g, - operation_mode => "SINGLE_PORT", - outdata_aclr_a => "NONE", - outdata_reg_a => "UNREGISTERED", - power_up_uninitialized => "FALSE", - read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", - widthad_a => addr_width_g, - width_a => data_width_g, - width_byteena_a => 1 - ) - PORT MAP ( - address_a => address, - clock0 => clock, - clocken0 => clken, - data_a => data, - wren_a => wren, - q_a => q - ); - - - -END SYN; diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/video_mixer.sv b/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/video_mixer.sv deleted file mode 100644 index 79d8ca03..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/BlackHole_MiST/rtl/video_mixer.sv +++ /dev/null @@ -1,243 +0,0 @@ -// -// -// Copyright (c) 2017 Sorgelig -// -// This program is GPL Licensed. See COPYING for the full license. -// -// -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -`timescale 1ns / 1ps - -// -// LINE_LENGTH: Length of display line in pixels -// Usually it's length from HSync to HSync. -// May be less if line_start is used. -// -// HALF_DEPTH: If =1 then color dept is 3 bits per component -// For half depth 6 bits monochrome is available with -// mono signal enabled and color = {G, R} - -module video_mixer -#( - parameter LINE_LENGTH = 480, - parameter HALF_DEPTH = 1, - - parameter OSD_COLOR = 3'd4, - parameter OSD_X_OFFSET = 10'd0, - parameter OSD_Y_OFFSET = 10'd0 -) -( - // master clock - // it should be multiple by (ce_pix*4). - input clk_sys, - - // Pixel clock or clock_enable (both are accepted). - input ce_pix, - - // Some systems have multiple resolutions. - // ce_pix_actual should match ce_pix where every second or fourth pulse is enabled, - // thus half or qurter resolutions can be used without brake video sync while switching resolutions. - // For fixed single resolution (or when video sync stability isn't required) ce_pix_actual = ce_pix. - input ce_pix_actual, - - // OSD SPI interface - input SPI_SCK, - input SPI_SS3, - input SPI_DI, - - // scanlines (00-none 01-25% 10-50% 11-75%) - input [1:0] scanlines, - - // 0 = HVSync 31KHz, 1 = CSync 15KHz - input scandoublerD, - - // High quality 2x scaling - input hq2x, - - // YPbPr always uses composite sync - input ypbpr, - - // 0 = 16-240 range. 1 = 0-255 range. (only for YPbPr color space) - input ypbpr_full, - input [1:0] rotate, //[0] - rotate [1] - left or right - // color - input [DWIDTH:0] R, - input [DWIDTH:0] G, - input [DWIDTH:0] B, - - // Monochrome mode (for HALF_DEPTH only) - input mono, - - // interlace sync. Positive pulses. - input HSync, - input VSync, - - // Falling of this signal means start of informative part of line. - // It can be horizontal blank signal. - // This signal can be used to reduce amount of required FPGA RAM for HQ2x scan doubler - // If FPGA RAM is not an issue, then simply set it to 0 for whole line processing. - // Keep in mind: due to algo first and last pixels of line should be black to avoid side artefacts. - // Thus, if blank signal is used to reduce the line, make sure to feed at least one black (or paper) pixel - // before first informative pixel. - input line_start, - - // MiST video output signals - output [5:0] VGA_R, - output [5:0] VGA_G, - output [5:0] VGA_B, - output VGA_VS, - output VGA_HS -); - -localparam DWIDTH = HALF_DEPTH ? 2 : 5; - -wire [DWIDTH:0] R_sd; -wire [DWIDTH:0] G_sd; -wire [DWIDTH:0] B_sd; -wire hs_sd, vs_sd; - -scandoubler #(.LENGTH(LINE_LENGTH), .HALF_DEPTH(HALF_DEPTH)) scandoubler -( - .*, - .hs_in(HSync), - .vs_in(VSync), - .r_in(R), - .g_in(G), - .b_in(B), - - .hs_out(hs_sd), - .vs_out(vs_sd), - .r_out(R_sd), - .g_out(G_sd), - .b_out(B_sd) -); - -wire [DWIDTH:0] rt = (scandoublerD ? R : R_sd); -wire [DWIDTH:0] gt = (scandoublerD ? G : G_sd); -wire [DWIDTH:0] bt = (scandoublerD ? B : B_sd); - -generate - if(HALF_DEPTH) begin - wire [5:0] r = mono ? {gt,rt} : {rt,rt}; - wire [5:0] g = mono ? {gt,rt} : {gt,gt}; - wire [5:0] b = mono ? {gt,rt} : {bt,bt}; - end else begin - wire [5:0] r = rt; - wire [5:0] g = gt; - wire [5:0] b = bt; - end -endgenerate - -wire hs = (scandoublerD ? HSync : hs_sd); -wire vs = (scandoublerD ? VSync : vs_sd); - -reg scanline = 0; -always @(posedge clk_sys) begin - reg old_hs, old_vs; - - old_hs <= hs; - old_vs <= vs; - - if(old_hs && ~hs) scanline <= ~scanline; - if(old_vs && ~vs) scanline <= 0; -end - -wire [5:0] r_out, g_out, b_out; -always @(*) begin - case(scanlines & {scanline, scanline}) - 1: begin // reduce 25% = 1/2 + 1/4 - r_out = {1'b0, r[5:1]} + {2'b00, r[5:2]}; - g_out = {1'b0, g[5:1]} + {2'b00, g[5:2]}; - b_out = {1'b0, b[5:1]} + {2'b00, b[5:2]}; - end - - 2: begin // reduce 50% = 1/2 - r_out = {1'b0, r[5:1]}; - g_out = {1'b0, g[5:1]}; - b_out = {1'b0, b[5:1]}; - end - - 3: begin // reduce 75% = 1/4 - r_out = {2'b00, r[5:2]}; - g_out = {2'b00, g[5:2]}; - b_out = {2'b00, b[5:2]}; - end - - default: begin - r_out = r; - g_out = g; - b_out = b; - end - endcase -end - -wire [5:0] red, green, blue; -osd #(OSD_X_OFFSET, OSD_Y_OFFSET, OSD_COLOR) osd -( - .*, - - .R_in(r_out), - .G_in(g_out), - .B_in(b_out), - .HSync(hs), - .VSync(vs), - .rotate(rotate), - - .R_out(red), - .G_out(green), - .B_out(blue) -); - -wire [5:0] yuv_full[225] = '{ - 6'd0, 6'd0, 6'd0, 6'd0, 6'd1, 6'd1, 6'd1, 6'd1, - 6'd2, 6'd2, 6'd2, 6'd3, 6'd3, 6'd3, 6'd3, 6'd4, - 6'd4, 6'd4, 6'd5, 6'd5, 6'd5, 6'd5, 6'd6, 6'd6, - 6'd6, 6'd7, 6'd7, 6'd7, 6'd7, 6'd8, 6'd8, 6'd8, - 6'd9, 6'd9, 6'd9, 6'd9, 6'd10, 6'd10, 6'd10, 6'd11, - 6'd11, 6'd11, 6'd11, 6'd12, 6'd12, 6'd12, 6'd13, 6'd13, - 6'd13, 6'd13, 6'd14, 6'd14, 6'd14, 6'd15, 6'd15, 6'd15, - 6'd15, 6'd16, 6'd16, 6'd16, 6'd17, 6'd17, 6'd17, 6'd17, - 6'd18, 6'd18, 6'd18, 6'd19, 6'd19, 6'd19, 6'd19, 6'd20, - 6'd20, 6'd20, 6'd21, 6'd21, 6'd21, 6'd21, 6'd22, 6'd22, - 6'd22, 6'd23, 6'd23, 6'd23, 6'd23, 6'd24, 6'd24, 6'd24, - 6'd25, 6'd25, 6'd25, 6'd25, 6'd26, 6'd26, 6'd26, 6'd27, - 6'd27, 6'd27, 6'd27, 6'd28, 6'd28, 6'd28, 6'd29, 6'd29, - 6'd29, 6'd29, 6'd30, 6'd30, 6'd30, 6'd31, 6'd31, 6'd31, - 6'd31, 6'd32, 6'd32, 6'd32, 6'd33, 6'd33, 6'd33, 6'd33, - 6'd34, 6'd34, 6'd34, 6'd35, 6'd35, 6'd35, 6'd35, 6'd36, - 6'd36, 6'd36, 6'd36, 6'd37, 6'd37, 6'd37, 6'd38, 6'd38, - 6'd38, 6'd38, 6'd39, 6'd39, 6'd39, 6'd40, 6'd40, 6'd40, - 6'd40, 6'd41, 6'd41, 6'd41, 6'd42, 6'd42, 6'd42, 6'd42, - 6'd43, 6'd43, 6'd43, 6'd44, 6'd44, 6'd44, 6'd44, 6'd45, - 6'd45, 6'd45, 6'd46, 6'd46, 6'd46, 6'd46, 6'd47, 6'd47, - 6'd47, 6'd48, 6'd48, 6'd48, 6'd48, 6'd49, 6'd49, 6'd49, - 6'd50, 6'd50, 6'd50, 6'd50, 6'd51, 6'd51, 6'd51, 6'd52, - 6'd52, 6'd52, 6'd52, 6'd53, 6'd53, 6'd53, 6'd54, 6'd54, - 6'd54, 6'd54, 6'd55, 6'd55, 6'd55, 6'd56, 6'd56, 6'd56, - 6'd56, 6'd57, 6'd57, 6'd57, 6'd58, 6'd58, 6'd58, 6'd58, - 6'd59, 6'd59, 6'd59, 6'd60, 6'd60, 6'd60, 6'd60, 6'd61, - 6'd61, 6'd61, 6'd62, 6'd62, 6'd62, 6'd62, 6'd63, 6'd63, - 6'd63 -}; - -// http://marsee101.blog19.fc2.com/blog-entry-2311.html -// Y = 16 + 0.257*R + 0.504*G + 0.098*B (Y = 0.299*R + 0.587*G + 0.114*B) -// Pb = 128 - 0.148*R - 0.291*G + 0.439*B (Pb = -0.169*R - 0.331*G + 0.500*B) -// Pr = 128 + 0.439*R - 0.368*G - 0.071*B (Pr = 0.500*R - 0.419*G - 0.081*B) - -wire [18:0] y_8 = 19'd04096 + ({red, 8'd0} + {red, 3'd0}) + ({green, 9'd0} + {green, 2'd0}) + ({blue, 6'd0} + {blue, 5'd0} + {blue, 2'd0}); -wire [18:0] pb_8 = 19'd32768 - ({red, 7'd0} + {red, 4'd0} + {red, 3'd0}) - ({green, 8'd0} + {green, 5'd0} + {green, 3'd0}) + ({blue, 8'd0} + {blue, 7'd0} + {blue, 6'd0}); -wire [18:0] pr_8 = 19'd32768 + ({red, 8'd0} + {red, 7'd0} + {red, 6'd0}) - ({green, 8'd0} + {green, 6'd0} + {green, 5'd0} + {green, 4'd0} + {green, 3'd0}) - ({blue, 6'd0} + {blue , 3'd0}); - -wire [7:0] y = ( y_8[17:8] < 16) ? 8'd16 : ( y_8[17:8] > 235) ? 8'd235 : y_8[15:8]; -wire [7:0] pb = (pb_8[17:8] < 16) ? 8'd16 : (pb_8[17:8] > 240) ? 8'd240 : pb_8[15:8]; -wire [7:0] pr = (pr_8[17:8] < 16) ? 8'd16 : (pr_8[17:8] > 240) ? 8'd240 : pr_8[15:8]; - -assign VGA_R = ypbpr ? (ypbpr_full ? yuv_full[pr-8'd16] : pr[7:2]) : red; -assign VGA_G = ypbpr ? (ypbpr_full ? yuv_full[y -8'd16] : y[7:2]) : green; -assign VGA_B = ypbpr ? (ypbpr_full ? yuv_full[pb-8'd16] : pb[7:2]) : blue; -assign VGA_VS = (scandoublerD | ypbpr) ? 1'b1 : ~vs_sd; -assign VGA_HS = scandoublerD ? ~(HSync ^ VSync) : ypbpr ? ~(hs_sd ^ vs_sd) : ~hs_sd; - -endmodule diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.qpf b/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.qpf deleted file mode 100644 index 3b0d4109..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.qpf +++ /dev/null @@ -1,30 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2013 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II 64-Bit -# Version 13.1.0 Build 162 10/23/2013 SJ Web Edition -# Date created = 14:59:16 November 16, 2017 -# -# -------------------------------------------------------------------------- # - -QUARTUS_VERSION = "13.1" -DATE = "14:59:16 November 16, 2017" - -# Revisions - -PROJECT_REVISION = "Catacomb" \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.qsf b/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.qsf deleted file mode 100644 index 3b0a5c72..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.qsf +++ /dev/null @@ -1,190 +0,0 @@ -# -------------------------------------------------------------------------- # -# -# Copyright (C) 1991-2014 Altera Corporation -# Your use of Altera Corporation's design tools, logic functions -# and other software and tools, and its AMPP partner logic -# functions, and any output files from any of the foregoing -# (including device programming or simulation files), and any -# associated documentation or information are expressly subject -# to the terms and conditions of the Altera Program License -# Subscription Agreement, Altera MegaCore Function License -# Agreement, or other applicable license agreement, including, -# without limitation, that your use is for the sole purpose of -# programming logic devices manufactured by Altera and sold by -# Altera or its authorized distributors. Please refer to the -# applicable agreement for further details. -# -# -------------------------------------------------------------------------- # -# -# Quartus II 64-Bit -# Version 13.1.4 Build 182 03/12/2014 SJ Web Edition -# Date created = 17:57:46 March 10, 2019 -# -# -------------------------------------------------------------------------- # -# -# Notes: -# -# 1) The default values for assignments are stored in the file: -# Catacomb_assignment_defaults.qdf -# If this file doesn't exist, see file: -# assignment_defaults.qdf -# -# 2) Altera recommends that you do not modify this file. This -# file is updated automatically by the Quartus II software -# and any changes you make may be lost or overwritten. -# -# -------------------------------------------------------------------------- # - - - -# Project-Wide Assignments -# ======================== -set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.1.2 -set_global_assignment -name LAST_QUARTUS_VERSION 13.1 -set_global_assignment -name PROJECT_CREATION_TIME_DATE "01:53:30 APRIL 20, 2017" -set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files -set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL -set_global_assignment -name SMART_RECOMPILE ON -set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" -set_global_assignment -name SYSTEMVERILOG_FILE rtl/Catacomb.sv -set_global_assignment -name VHDL_FILE rtl/galaxian.vhd -set_global_assignment -name VHDL_FILE rtl/mc_stars.vhd -set_global_assignment -name VHDL_FILE rtl/mc_sound_vco.vhd -set_global_assignment -name VHDL_FILE rtl/mc_sound_b.vhd -set_global_assignment -name VHDL_FILE rtl/mc_sound_a.vhd -set_global_assignment -name VHDL_FILE rtl/mc_missile.vhd -set_global_assignment -name VHDL_FILE rtl/mc_logic.vhd -set_global_assignment -name VHDL_FILE rtl/mc_ld_pls.vhd -set_global_assignment -name VHDL_FILE rtl/mc_inport.vhd -set_global_assignment -name VHDL_FILE rtl/mc_hv_count.vhd -set_global_assignment -name VHDL_FILE rtl/mc_col_pal.vhd -set_global_assignment -name VHDL_FILE rtl/mc_bram.vhd -set_global_assignment -name VHDL_FILE rtl/mc_adec.vhd -set_global_assignment -name VHDL_FILE rtl/mc_video.vhd -set_global_assignment -name VHDL_FILE rtl/sine_package.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/ROM_PGM_0.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GALAXIAN_6L.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GALAXIAN_1K.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GALAXIAN_1H.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GAL_HIT.vhd -set_global_assignment -name VHDL_FILE rtl/ROM/GAL_FIR.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80sed.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80as.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_Reg.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_Pack.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_MCode.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80_ALU.vhd -set_global_assignment -name VHDL_FILE rtl/cpu/T80.vhd -set_global_assignment -name VHDL_FILE rtl/spram.vhd -set_global_assignment -name VHDL_FILE rtl/dpram.vhd -set_global_assignment -name VHDL_FILE rtl/pll.vhd -set_global_assignment -name SYSTEMVERILOG_FILE rtl/video_mixer.sv -set_global_assignment -name VERILOG_FILE rtl/scandoubler.v -set_global_assignment -name VERILOG_FILE rtl/osd.v -set_global_assignment -name VERILOG_FILE rtl/mist_io.v -set_global_assignment -name SYSTEMVERILOG_FILE rtl/hq2x.sv -set_global_assignment -name VHDL_FILE rtl/dac.vhd - -# Pin & Location Assignments -# ========================== -set_location_assignment PIN_7 -to LED -set_location_assignment PIN_54 -to CLOCK_27 -set_location_assignment PIN_144 -to VGA_R[5] -set_location_assignment PIN_143 -to VGA_R[4] -set_location_assignment PIN_142 -to VGA_R[3] -set_location_assignment PIN_141 -to VGA_R[2] -set_location_assignment PIN_137 -to VGA_R[1] -set_location_assignment PIN_135 -to VGA_R[0] -set_location_assignment PIN_133 -to VGA_B[5] -set_location_assignment PIN_132 -to VGA_B[4] -set_location_assignment PIN_125 -to VGA_B[3] -set_location_assignment PIN_121 -to VGA_B[2] -set_location_assignment PIN_120 -to VGA_B[1] -set_location_assignment PIN_115 -to VGA_B[0] -set_location_assignment PIN_114 -to VGA_G[5] -set_location_assignment PIN_113 -to VGA_G[4] -set_location_assignment PIN_112 -to VGA_G[3] -set_location_assignment PIN_111 -to VGA_G[2] -set_location_assignment PIN_110 -to VGA_G[1] -set_location_assignment PIN_106 -to VGA_G[0] -set_location_assignment PIN_136 -to VGA_VS -set_location_assignment PIN_119 -to VGA_HS -set_location_assignment PIN_65 -to AUDIO_L -set_location_assignment PIN_80 -to AUDIO_R -set_location_assignment PIN_105 -to SPI_DO -set_location_assignment PIN_88 -to SPI_DI -set_location_assignment PIN_126 -to SPI_SCK -set_location_assignment PIN_127 -to SPI_SS2 -set_location_assignment PIN_91 -to SPI_SS3 -set_location_assignment PIN_13 -to CONF_DATA0 -set_location_assignment PLL_1 -to "pll:pll|altpll:altpll_component" - -# Classic Timing Assignments -# ========================== -set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 -set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 -set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS OFF - -# Analysis & Synthesis Assignments -# ================================ -set_global_assignment -name FAMILY "Cyclone III" -set_global_assignment -name TOP_LEVEL_ENTITY Catacomb -set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 -set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 -set_global_assignment -name SAVE_DISK_SPACE OFF -set_global_assignment -name DEVICE_FILTER_PACKAGE TQFP - -# Fitter Assignments -# ================== -set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING OFF -set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION ALWAYS -set_global_assignment -name FITTER_EFFORT "STANDARD FIT" -set_global_assignment -name DEVICE EP3C25E144C8 -set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF -set_global_assignment -name ENABLE_NCE_PIN OFF -set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF -set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL" -set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF -set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON -set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" -set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO" -set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" - -# Assembler Assignments -# ===================== -set_global_assignment -name GENERATE_RBF_FILE ON -set_global_assignment -name USE_CONFIGURATION_DEVICE OFF - -# Power Estimation Assignments -# ============================ -set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" -set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" - -# Advanced I/O Timing Assignments -# =============================== -set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise -set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall -set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise -set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall - -# ---------------------- -# start ENTITY(Catacomb) - - # start DESIGN_PARTITION(Top) - # --------------------------- - - # Incremental Compilation Assignments - # =================================== - set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top - set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top - set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top - - # end DESIGN_PARTITION(Top) - # ------------------------- - -# end ENTITY(Catacomb) -# -------------------- -set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.srf b/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.srf deleted file mode 100644 index 14cddd5e..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Catacomb.srf +++ /dev/null @@ -1,54 +0,0 @@ -{ "" "" "" "Variable or input pin \"data_b\" is defined but never used." { } { } 0 287013 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Found combinational loop of 47 nodes" { } { } 0 332125 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "LOCKED port on the PLL is not properly connected on instance \"pll_hdmi:pll_hdmi\|pll_hdmi_0002:pll_hdmi_inst\|altera_pll:altera_pll_i\|general\[0\].gpll\". The LOCKED port on the PLL should be connected when the FBOUTCLK port is connected. Although it is unnecessary to connect the LOCKED signal, any logic driven off of an output clock of the PLL will not know when the PLL is locked and ready." { } { } 0 21300 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Net \"soc_system:soc_system\|soc_system_Video_Output:video_output\|alt_vip_cvo_core:cvo_core\|genlock_enable_sync1\[1\]\" is missing source, defaulting to GND" { } { } 0 12110 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"zxspectrum:emu\|mist_io:mist_io\|ps2_kbd_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"zxspectrum:emu\|mist_io:mist_io\|ps2_mouse_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "No destination clock period was found satisfying the set_net_delay assignment from \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|h_sync_polarity_reg\}\]\" to \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|vid_h_sync_polarity\}\]\". This assignment will be ignored." { } { } 0 17897 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "No destination clock period was found satisfying the set_net_delay assignment from \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|v_sync_polarity_reg\}\]\" to \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|vid_v_sync_polarity\}\]\". This assignment will be ignored." { } { } 0 17897 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "No destination clock period was found satisfying the set_net_delay assignment from \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|interlaced_field_reg\[*\]\}\]\" to \"\[get_keepers \{soc_system\|video_output\|cvo_core\|mode_banks\|vid_interlaced_field\[*\]\}\]\". This assignment will be ignored." { } { } 0 17897 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Some pins have incomplete I/O assignments. Refer to the I/O Assignment Warnings report for details" { } { } 0 15714 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "55 hierarchies have connectivity warnings - see the Connectivity Checks report folder" { } { } 0 12241 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"emu:emu\|mister_io:mister_io\|ps2_kbd_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Inferred RAM node \"emu:emu\|mister_io:mister_io\|ps2_mouse_fifo_rtl_0\" from synchronous design logic. Pass-through logic has been added to match the read-during-write behavior of the original design." { } { } 0 276020 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Verilog HDL or VHDL warning at de10_top.v(97): object \"io_win\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Verilog HDL or VHDL warning at de10_top.v(102): object \"io_sdd\" assigned a value but never read" { } { } 0 10036 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Overwriting existing clock: vip\|hps\|fpga_interfaces\|clocks_resets\|h2f_user0_clk" { } { } 0 332043 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Variable or input pin \"data_a\" is defined but never used." { } { } 0 287013 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "Clock multiplexers are found and protected" { } { } 0 19016 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 169085 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 174073 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 332174 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 13009 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 21300 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 169177 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "*" { } { } 0 169203 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_cvo_mode_banks" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_pll.sv" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_common_frame_counter.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0_acv_hard_memphy.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0_acv_ldc.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0_acv_hard_io_pads.v" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "altera_mem_if_hard_memory_controller_top_cyclonev.sv" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "genlock_enable_sync" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "u_calculate_mode" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "genlock_enable" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "reset_value" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_pll_video:pll_video\|altera_pll:altera_pll_i\|general\[0\].gpll" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_cvo_core.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_packet_transfer.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "hps_sdram_p0.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_common_dc_mixed_widths_fifo.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "altera_mem_if_hhp_qseq_synth_top" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_vip_vout:vip_vout\|alt_vip_cvo_core:cvo_core\|genlock_enable_sync1" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_vip_fb:vip_fb\|alt_vip_packet_transfer:pkt_trans_rd\|alt_vip_packet_transfer_read_proc:READ_BLOCK.read_proc_instance\|alt_vip_common_fifo2:output_msg_queue\|scfifo:scfifo_component\|scfifo_scd1:auto_generated\|a_dpfifo_e471:dpfifo\|altsyncram_ums1:FIFOram\|q_b" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_Video_Input:video_input\|alt_vip_cvi_core:cvi_core\|alt_vip_cvi_write_fifo_buffer:write_fifo_buffer" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system:soc_system\|soc_system_Frame_Buffer:frame_buffer\|alt_vip_packet_transfer:pkt_trans_rd" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system_hps_fpga_interfaces.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "soc_system_HPS_fpga_interfaces.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "RST" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_scaler_alg_core" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "cvo_core" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "vip_HPS_fpga_interfaces.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_dil_vof_scheduler.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} -{ "" "" "" "alt_vip_dil_scheduler.sdc" { } { } 0 9999 "" 0 0 "Quartus II" 0 -1 0 ""} diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/README.txt b/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/README.txt deleted file mode 100644 index 43f4d04c..00000000 --- a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/README.txt +++ /dev/null @@ -1,24 +0,0 @@ ---------------------------------------------------------------------------------- --- --- Arcade: Catacomb port to MiST by Gehstock --- 19 December 2017 --- ---------------------------------------------------------------------------------- --- A simulation model of Galaxian hardware --- Copyright(c) 2004 Katsumi Degawa ---------------------------------------------------------------------------------- --- --- Only controls and OSD are rotated on Video output. --- --- --- Keyboard inputs : --- --- ESC : Coin --- F1 : Start 1 player --- F2 : Start 2 player --- SPACE : Fire --- ARROW KEYS : Movements --- --- Joystick support. --- ---------------------------------------------------------------------------------- diff --git a/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Release/Catacomb.rbf b/Arcade_MiST/Galaxian Hardware/Z80 Based/Catacomb_MiST/Release/Catacomb.rbf deleted file mode 100644 index 0406943881e2ed0791417b35a3656c8b3d9f279f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323153 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

9y1$cGAu@WGrh)%J; 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

y*Zu)9;jif?vDCLKGG6o5@I+9y6a(g2VO?CN0 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